hookehuyr

新增测试自定义表单校验控件

...@@ -15,6 +15,7 @@ declare module '@vue/runtime-core' { ...@@ -15,6 +15,7 @@ declare module '@vue/runtime-core' {
15 CheckboxField: typeof import('./src/components/CheckboxField/index.vue')['default'] 15 CheckboxField: typeof import('./src/components/CheckboxField/index.vue')['default']
16 ContactField: typeof import('./src/components/ContactField/index.vue')['default'] 16 ContactField: typeof import('./src/components/ContactField/index.vue')['default']
17 copy: typeof import('./src/components/DesField copy/index.vue')['default'] 17 copy: typeof import('./src/components/DesField copy/index.vue')['default']
18 + CustomField: typeof import('./src/components/CustomField/index.vue')['default']
18 DatePickerField: typeof import('./src/components/DatePickerField/index.vue')['default'] 19 DatePickerField: typeof import('./src/components/DatePickerField/index.vue')['default']
19 DateTimePickerField: typeof import('./src/components/DateTimePickerField/index.vue')['default'] 20 DateTimePickerField: typeof import('./src/components/DateTimePickerField/index.vue')['default']
20 DesField: typeof import('./src/components/DesField/index.vue')['default'] 21 DesField: typeof import('./src/components/DesField/index.vue')['default']
...@@ -26,6 +27,7 @@ declare module '@vue/runtime-core' { ...@@ -26,6 +27,7 @@ declare module '@vue/runtime-core' {
26 ImageUploaderField: typeof import('./src/components/ImageUploaderField/index.vue')['default'] 27 ImageUploaderField: typeof import('./src/components/ImageUploaderField/index.vue')['default']
27 MarqueeField: typeof import('./src/components/MarqueeField/index.vue')['default'] 28 MarqueeField: typeof import('./src/components/MarqueeField/index.vue')['default']
28 MultiRuleField: typeof import('./src/components/MultiRuleField/index.vue')['default'] 29 MultiRuleField: typeof import('./src/components/MultiRuleField/index.vue')['default']
30 + MyComponent: typeof import('./src/components/CustomField/MyComponent.vue')['default']
29 NameField: typeof import('./src/components/NameField/index.vue')['default'] 31 NameField: typeof import('./src/components/NameField/index.vue')['default']
30 NoteField: typeof import('./src/components/NoteField/index.vue')['default'] 32 NoteField: typeof import('./src/components/NoteField/index.vue')['default']
31 NumberField: typeof import('./src/components/NumberField/index.vue')['default'] 33 NumberField: typeof import('./src/components/NumberField/index.vue')['default']
......
1 +<template>
2 + <div class="">
3 + <van-field
4 + v-model="value3"
5 + placeholder="请输入手机号"
6 + />
7 + </div>
8 +</template>
9 +
10 +<script setup>
11 +import { inject, ref } from 'vue'
12 +import { useCustomFieldValue } from '@vant/use';
13 +
14 +// 获取父组件传值
15 +const props = inject('props');
16 +console.warn(props);
17 +
18 +const value3 = ref('');
19 +
20 +// 此处传入的值会替代 Field 组件内部的 value
21 +useCustomFieldValue(() => value3.value);
22 +
23 +</script>
24 +
25 +<style lang="less" scoped>
26 +
27 +</style>
1 +<!--
2 + * @Date: 2023-03-28 13:40:24
3 + * @LastEditors: hookehuyr hookehuyr@gmail.com
4 + * @LastEditTime: 2023-03-28 15:38:27
5 + * @FilePath: /data-table/src/components/CustomField/index.vue
6 + * @Description: 文件描述
7 +-->
8 +<template>
9 + <div class="custom-field-page">
10 + <div class="label">{{ item.component_props.label }}</div>
11 + <van-field :name="item.name" :rules="rules">
12 + <template #input>
13 + <my-component />
14 + </template>
15 + </van-field>
16 + </div>
17 +</template>
18 +
19 +<script setup>
20 +import { provide } from 'vue'
21 +import MyComponent from './MyComponent.vue';
22 +
23 +const props = defineProps({
24 + item: Object,
25 +});
26 +
27 +// 注入子组件属性
28 +provide('props', props.item);
29 +// 规则校验
30 +const rules = [
31 + {
32 + required: true,
33 + message: '请输入表单项',
34 + },
35 +]
36 +</script>
37 +
38 +<style lang="less" scoped>
39 +.custom-field-page {
40 + .label {
41 + padding: 1rem 1rem 0 1rem;
42 + font-size: 0.9rem;
43 + font-weight: bold;
44 + span {
45 + color: red;
46 + }
47 + }
48 +}
49 +</style>
...@@ -30,6 +30,7 @@ import NoteField from '@/components/NoteField/index.vue'; ...@@ -30,6 +30,7 @@ import NoteField from '@/components/NoteField/index.vue';
30 import NameField from '@/components/NameField/index.vue'; 30 import NameField from '@/components/NameField/index.vue';
31 import GenderField from '@/components/GenderField/index.vue'; 31 import GenderField from '@/components/GenderField/index.vue';
32 import AppointmentField from '@/components/AppointmentField/index.vue'; 32 import AppointmentField from '@/components/AppointmentField/index.vue';
33 +import CustomField from '@/components/CustomField/index.vue';
33 34
34 /** 35 /**
35 * 生成自定义组件类型 36 * 生成自定义组件类型
...@@ -184,5 +185,9 @@ export function createComponentType(data) { ...@@ -184,5 +185,9 @@ export function createComponentType(data) {
184 item.name = item.key; 185 item.name = item.key;
185 item.component = AppointmentField; 186 item.component = AppointmentField;
186 } 187 }
188 + if (item.component_props.tag === 'custom') {
189 + item.name = item.key;
190 + item.component = CustomField;
191 + }
187 }) 192 })
188 } 193 }
......