hookehuyr

✨ feat: 调整测试数据渲染结构

1 <!-- 1 <!--
2 * @Date: 2022-09-08 15:02:45 2 * @Date: 2022-09-08 15:02:45
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2022-09-08 15:18:22 4 + * @LastEditTime: 2022-09-16 15:04:37
5 * @FilePath: /data-table/src/components/DateTimePickerField/index.vue 5 * @FilePath: /data-table/src/components/DateTimePickerField/index.vue
6 * @Description: 文件描述 6 * @Description: 文件描述
7 --> 7 -->
8 <template> 8 <template>
9 <div class="datetime-picker"> 9 <div class="datetime-picker">
10 - <div class="label">{{ item.label }}<span v-if="item.required">&nbsp;*</span></div> 10 + <div class="label">{{ item.component_props.label }}<span v-if="item.component_props.required">&nbsp;*</span></div>
11 <van-field v-model="item.value" is-link readonly :name="item.key" :required="item.required" 11 <van-field v-model="item.value" is-link readonly :name="item.key" :required="item.required"
12 - :placeholder="item.placeholder" :rules="item.rules" @click="showPicker = true" /> 12 + :placeholder="item.component_props.placeholder" :rules="item.rules" @click="showPicker = true" />
13 <van-popup v-model:show="showPicker" position="bottom"> 13 <van-popup v-model:show="showPicker" position="bottom">
14 <van-picker-group :title="item.component_props.title" :tabs="['选择日期', '选择时间']" @confirm="onConfirm" 14 <van-picker-group :title="item.component_props.title" :tabs="['选择日期', '选择时间']" @confirm="onConfirm"
15 @cancel="onCancel"> 15 @cancel="onCancel">
......
1 <!-- 1 <!--
2 * @Date: 2022-08-29 14:31:20 2 * @Date: 2022-08-29 14:31:20
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2022-09-06 15:20:47 4 + * @LastEditTime: 2022-09-16 17:13:01
5 * @FilePath: /data-table/src/components/EmailField/index.vue 5 * @FilePath: /data-table/src/components/EmailField/index.vue
6 * @Description: 单行文本输入框 6 * @Description: 单行文本输入框
7 --> 7 -->
8 <template> 8 <template>
9 <div class="text-field-page"> 9 <div class="text-field-page">
10 - <div class="label">{{ item.label }}<span v-if="item.required">&nbsp;*</span></div> 10 + <div class="label">{{ item.component_props.label }}<span v-if="item.component_props.required">&nbsp;*</span></div>
11 - <van-field v-model="item.value" :name="item.name" type="email" :placeholder="item.placeholder" :rules="rules" 11 + <van-field v-model="item.value" :name="item.name" type="email" :placeholder="item.component_props.placeholder" :rules="rules"
12 - :required="item.required" clearable /> 12 + :required="item.component_props.required" clearable />
13 </div> 13 </div>
14 </template> 14 </template>
15 15
......
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
7 --> 7 -->
8 <template> 8 <template>
9 <div class="identity-page"> 9 <div class="identity-page">
10 - <div class="label">{{ item.label }}<span v-if="item.required">&nbsp;*</span></div> 10 + <div class="label">{{ item.component_props.label }}<span v-if="item.component_props.required">&nbsp;*</span></div>
11 - <van-field v-model="item.value" :name="item.name" :placeholder="item.placeholder" 11 + <van-field v-model="item.value" :name="item.name" :placeholder="item.component_props.placeholder"
12 - :rules="rules" :required="item.required" readonly @touchstart.stop="show = true" :border="false"> 12 + :rules="rules" :required="item.component_props.required" readonly @touchstart.stop="show = true" :border="false">
13 </van-field> 13 </van-field>
14 <van-number-keyboard 14 <van-number-keyboard
15 v-model="item.value" 15 v-model="item.value"
...@@ -33,7 +33,7 @@ const show = ref(false); ...@@ -33,7 +33,7 @@ const show = ref(false);
33 // 校验函数返回 true 表示校验通过,false 表示不通过 33 // 校验函数返回 true 表示校验通过,false 表示不通过
34 // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X 34 // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
35 const validator = (val) => { 35 const validator = (val) => {
36 - if (!props.item.required) { // 非必填 36 + if (!props.item.component_props.required) { // 非必填
37 return true 37 return true
38 } else { 38 } else {
39 return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(val); 39 return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(val);
......
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
7 --> 7 -->
8 <template> 8 <template>
9 <div class="phone-field-page"> 9 <div class="phone-field-page">
10 - <div class="label">{{ item.label }}<span v-if="item.required">&nbsp;*</span></div> 10 + <div class="label">{{ item.component_props.label }}<span v-if="item.component_props.required">&nbsp;*</span></div>
11 - <van-field v-model="item.value" :name="item.name" type="digit" maxlength="11" :placeholder="item.placeholder" 11 + <van-field v-model="item.value" :name="item.name" type="digit" maxlength="11" :placeholder="item.component_props.placeholder"
12 - :rules="rules" :required="item.required" :readonly="readonly" @touchstart.stop="show = true" :border="false"> 12 + :rules="rules" :required="item.component_props.required" :readonly="readonly" @touchstart.stop="show = true" :border="false">
13 </van-field> 13 </van-field>
14 <van-number-keyboard v-model="item.value" :show="show" :maxlength="11" @blur="show = false" /> 14 <van-number-keyboard v-model="item.value" :show="show" :maxlength="11" @blur="show = false" />
15 </div> 15 </div>
......
1 <!-- 1 <!--
2 * @Date: 2022-08-30 11:34:19 2 * @Date: 2022-08-30 11:34:19
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2022-09-08 11:37:01 4 + * @LastEditTime: 2022-09-16 17:40:39
5 * @FilePath: /data-table/src/components/RadioField/index.vue 5 * @FilePath: /data-table/src/components/RadioField/index.vue
6 * @Description: 文件描述 6 * @Description: 文件描述
7 --> 7 -->
8 <template> 8 <template>
9 <div class="radio-field-page"> 9 <div class="radio-field-page">
10 - <div class="label">{{ item.label }}<span v-if="item.required">&nbsp;*</span></div> 10 + <div class="label">{{ item.component_props.label }}<span v-if="item.component_props.required">&nbsp;*</span></div>
11 - <van-field :name="item.key"> 11 + <van-field :name="item.key" :rules="item.rules">
12 <template #input> 12 <template #input>
13 <van-radio-group v-model="item.value" :direction="item.component_props.direction"> 13 <van-radio-group v-model="item.value" :direction="item.component_props.direction">
14 - <van-radio v-for="x in item.options" :key="index" :name="x.key" icon-size="1rem" 14 + <van-radio v-for="x in item.component_props.options" :key="index" :name="x.key" icon-size="1rem"
15 style="margin-bottom: 0.25rem;">{{ x.value }}</van-radio> 15 style="margin-bottom: 0.25rem;">{{ x.value }}</van-radio>
16 </van-radio-group> 16 </van-radio-group>
17 </template> 17 </template>
......
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
7 --> 7 -->
8 <template> 8 <template>
9 <div class="text-field-page"> 9 <div class="text-field-page">
10 - <div class="label">{{ item.label }}<span v-if="item.required">&nbsp;*</span></div> 10 + <div class="label">{{ item.component_props.label }}<span v-if="item.component_props.required">&nbsp;*</span></div>
11 <van-field v-model="item.value" 11 <van-field v-model="item.value"
12 - :name="item.name" :type="item.type" :placeholder="item.placeholder" 12 + :name="item.name" :type="item.type" :placeholder="item.component_props.placeholder"
13 :rules="item.rules" :required="item.required" 13 :rules="item.rules" :required="item.required"
14 :readonly="item.component_props.readonly" :disabled="item.component_props.disabled" 14 :readonly="item.component_props.readonly" :disabled="item.component_props.disabled"
15 :input-align="item.component_props.align" 15 :input-align="item.component_props.align"
......
...@@ -41,7 +41,7 @@ export function createComponentType(data) { ...@@ -41,7 +41,7 @@ export function createComponentType(data) {
41 // 判断类型和使用组件 41 // 判断类型和使用组件
42 _.each(data, (item, index) => { 42 _.each(data, (item, index) => {
43 // 必填项规则添加 43 // 必填项规则添加
44 - if (item.required) { 44 + if (item.component_props.required) {
45 item.rules = [{ required: true, message: item.placeholder ? item.placeholder : '必填项不能为空' }] 45 item.rules = [{ required: true, message: item.placeholder ? item.placeholder : '必填项不能为空' }]
46 } 46 }
47 if (item.component_props.name === 'text') { 47 if (item.component_props.name === 'text') {
......
1 <!-- 1 <!--
2 * @Date: 2022-07-18 10:22:22 2 * @Date: 2022-07-18 10:22:22
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2022-09-14 14:56:30 4 + * @LastEditTime: 2022-09-16 17:32:55
5 * @FilePath: /data-table/src/views/index.vue 5 * @FilePath: /data-table/src/views/index.vue
6 * @Description: 首页 6 * @Description: 首页
7 --> 7 -->
...@@ -38,94 +38,80 @@ onMounted(() => { ...@@ -38,94 +38,80 @@ onMounted(() => {
38 // { 38 // {
39 // key: 'phone', 39 // key: 'phone',
40 // value: '', 40 // value: '',
41 - // label: '手机号',
42 - // placeholder: '请输入手机号',
43 // component: '', 41 // component: '',
44 // component_props: { 42 // component_props: {
45 - // name: 'phone' 43 + // name: 'phone',
44 + // label: '手机号',
45 + // placeholder: '请输入手机号',
46 + // required: true,
46 // }, 47 // },
47 - // required: true,
48 // }, 48 // },
49 // { 49 // {
50 // key: 'username', 50 // key: 'username',
51 // value: 'test', 51 // value: 'test',
52 - // label: '用户名',
53 - // placeholder: '请输入用户名',
54 // component: '', 52 // component: '',
55 // component_props: { 53 // component_props: {
56 // name: 'text', 54 // name: 'text',
57 - // // readonly: true, 55 + // label: '用户名',
58 - // // disabled: true, 56 + // placeholder: '请输入用户名',
59 - // // align: 'left', 57 + // required: true,
58 + // readonly: true,
59 + // disabled: true,
60 + // align: 'left',
60 // }, 61 // },
61 - // required: true,
62 // }, 62 // },
63 // { 63 // {
64 - // key: 'date', 64 + // key: 'email',
65 // value: '', 65 // value: '',
66 - // label: '日历选择',
67 - // placeholder: '请选择日历日期',
68 // component: '', 66 // component: '',
69 // component_props: { 67 // component_props: {
70 - // name: 'calendar', 68 + // name: 'email',
71 - // type: 'range', // 日期区间 ['multiple', 'range'] 69 + // label: '邮箱',
72 - // minDate: new Date(2022, 0, 1), // 最小日期 70 + // placeholder: '请输入邮箱',
73 - // maxDate: new Date(2023, 0, 31), // 最大日期 71 + // required: true,
74 - // maxRange: 5, // 最大可选天数
75 // }, 72 // },
76 - // required: false,
77 // }, 73 // },
78 // { 74 // {
79 - // key: 'email', 75 + // key: 'id_code',
80 // value: '', 76 // value: '',
81 - // label: '邮箱',
82 - // placeholder: '请输入邮箱',
83 // component: '', 77 // component: '',
84 // component_props: { 78 // component_props: {
85 - // name: 'email' 79 + // name: 'id_code',
80 + // label: '身份证号码',
81 + // placeholder: '请输入身份证号码',
82 + // required: true,
86 // }, 83 // },
87 - // required: true,
88 // }, 84 // },
89 - {
90 - key: 'id_code',
91 - value: '',
92 - label: '身份证号码',
93 - placeholder: '请输入身份证号码',
94 - component: '',
95 - component_props: {
96 - name: 'id_code'
97 - },
98 - required: true,
99 - },
100 // { 85 // {
101 // key: 'age', 86 // key: 'age',
102 // value: '', 87 // value: '',
103 - // label: '年龄',
104 - // placeholder: '请输入年龄',
105 // component: '', 88 // component: '',
106 // component_props: { 89 // component_props: {
107 - // name: 'number' 90 + // label: '年龄',
91 + // placeholder: '请输入年龄',
92 + // name: 'number',
93 + // required: true,
108 // }, 94 // },
109 - // required: true,
110 - // },
111 - // {
112 - // key: 'gender',
113 - // value: '',
114 - // label: '性别',
115 - // placeholder: '',
116 - // component: '',
117 - // component_props: {
118 - // name: 'radio',
119 - // direction: 'horizontal'
120 - // },
121 - // options: [{
122 - // key: '男',
123 - // value: '男'
124 - // }, {
125 - // key: '女',
126 - // value: '女'
127 - // }]
128 // }, 95 // },
96 + {
97 + key: 'gender',
98 + value: '',
99 + component: '',
100 + component_props: {
101 + name: 'radio',
102 + label: '性别',
103 + placeholder: '',
104 + direction: 'horizontal',
105 + options: [{
106 + key: '男',
107 + value: '男'
108 + }, {
109 + key: '女',
110 + value: '女'
111 + }],
112 + required: true,
113 + },
114 + },
129 // { 115 // {
130 // key: 'hobby', 116 // key: 'hobby',
131 // value: [], 117 // value: [],
...@@ -237,14 +223,29 @@ onMounted(() => { ...@@ -237,14 +223,29 @@ onMounted(() => {
237 // { 223 // {
238 // key: 'datetime', 224 // key: 'datetime',
239 // value: '2022-06-01 12:00', 225 // value: '2022-06-01 12:00',
240 - // label: '日期时间',
241 - // placeholder: '请选择日期时间',
242 // component_props: { 226 // component_props: {
243 // name: 'datetime_picker', 227 // name: 'datetime_picker',
244 // title: '请选择', 228 // title: '请选择',
229 + // label: '日期时间',
230 + // placeholder: '请选择日期时间',
245 // minDate: new Date(), 231 // minDate: new Date(),
232 + // required: true,
246 // }, 233 // },
247 - // required: true, 234 + // },
235 + // {
236 + // key: 'date',
237 + // value: '',
238 + // label: '日历选择',
239 + // placeholder: '请选择日历日期',
240 + // component: '',
241 + // component_props: {
242 + // name: 'calendar',
243 + // type: 'range', // 日期区间 ['multiple', 'range']
244 + // minDate: new Date(2022, 0, 1), // 最小日期
245 + // maxDate: new Date(2023, 0, 31), // 最大日期
246 + // maxRange: 5, // 最大可选天数
247 + // },
248 + // required: false,
248 // }, 249 // },
249 // { 250 // {
250 // key: 'rate', 251 // key: 'rate',
......