Showing
8 changed files
with
82 additions
and
81 deletions
| 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"> *</span></div> | 10 | + <div class="label">{{ item.component_props.label }}<span v-if="item.component_props.required"> *</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"> *</span></div> | 10 | + <div class="label">{{ item.component_props.label }}<span v-if="item.component_props.required"> *</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"> *</span></div> | 10 | + <div class="label">{{ item.component_props.label }}<span v-if="item.component_props.required"> *</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"> *</span></div> | 10 | + <div class="label">{{ item.component_props.label }}<span v-if="item.component_props.required"> *</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"> *</span></div> | 10 | + <div class="label">{{ item.component_props.label }}<span v-if="item.component_props.required"> *</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"> *</span></div> | 10 | + <div class="label">{{ item.component_props.label }}<span v-if="item.component_props.required"> *</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', |
| 46 | - // }, | 44 | + // label: '手机号', |
| 45 | + // placeholder: '请输入手机号', | ||
| 47 | // required: true, | 46 | // required: true, |
| 48 | // }, | 47 | // }, |
| 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', | ||
| 60 | - // }, | ||
| 61 | // required: true, | 57 | // required: true, |
| 58 | + // readonly: true, | ||
| 59 | + // disabled: true, | ||
| 60 | + // align: 'left', | ||
| 62 | // }, | 61 | // }, |
| 63 | - // { | ||
| 64 | - // key: 'date', | ||
| 65 | - // value: '', | ||
| 66 | - // label: '日历选择', | ||
| 67 | - // placeholder: '请选择日历日期', | ||
| 68 | - // component: '', | ||
| 69 | - // component_props: { | ||
| 70 | - // name: 'calendar', | ||
| 71 | - // type: 'range', // 日期区间 ['multiple', 'range'] | ||
| 72 | - // minDate: new Date(2022, 0, 1), // 最小日期 | ||
| 73 | - // maxDate: new Date(2023, 0, 31), // 最大日期 | ||
| 74 | - // maxRange: 5, // 最大可选天数 | ||
| 75 | - // }, | ||
| 76 | - // required: false, | ||
| 77 | // }, | 62 | // }, |
| 78 | // { | 63 | // { |
| 79 | // key: 'email', | 64 | // key: 'email', |
| 80 | // value: '', | 65 | // value: '', |
| 81 | - // label: '邮箱', | ||
| 82 | - // placeholder: '请输入邮箱', | ||
| 83 | // component: '', | 66 | // component: '', |
| 84 | // component_props: { | 67 | // component_props: { |
| 85 | - // name: 'email' | 68 | + // name: 'email', |
| 86 | - // }, | 69 | + // label: '邮箱', |
| 70 | + // placeholder: '请输入邮箱', | ||
| 87 | // required: true, | 71 | // required: true, |
| 88 | // }, | 72 | // }, |
| 89 | - { | 73 | + // }, |
| 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 | // { | 74 | // { |
| 101 | - // key: 'age', | 75 | + // key: 'id_code', |
| 102 | // value: '', | 76 | // value: '', |
| 103 | - // label: '年龄', | ||
| 104 | - // placeholder: '请输入年龄', | ||
| 105 | // component: '', | 77 | // component: '', |
| 106 | // component_props: { | 78 | // component_props: { |
| 107 | - // name: 'number' | 79 | + // name: 'id_code', |
| 108 | - // }, | 80 | + // label: '身份证号码', |
| 81 | + // placeholder: '请输入身份证号码', | ||
| 109 | // required: true, | 82 | // required: true, |
| 110 | // }, | 83 | // }, |
| 84 | + // }, | ||
| 111 | // { | 85 | // { |
| 112 | - // key: 'gender', | 86 | + // key: 'age', |
| 113 | // value: '', | 87 | // value: '', |
| 114 | - // label: '性别', | ||
| 115 | - // placeholder: '', | ||
| 116 | // component: '', | 88 | // component: '', |
| 117 | // component_props: { | 89 | // component_props: { |
| 118 | - // name: 'radio', | 90 | + // label: '年龄', |
| 119 | - // direction: 'horizontal' | 91 | + // placeholder: '请输入年龄', |
| 92 | + // name: 'number', | ||
| 93 | + // required: true, | ||
| 120 | // }, | 94 | // }, |
| 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,15 +223,30 @@ onMounted(() => { | ... | @@ -237,15 +223,30 @@ 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(), |
| 246 | - // }, | ||
| 247 | // required: true, | 232 | // required: true, |
| 248 | // }, | 233 | // }, |
| 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, | ||
| 249 | + // }, | ||
| 249 | // { | 250 | // { |
| 250 | // key: 'rate', | 251 | // key: 'rate', |
| 251 | // value: '', | 252 | // value: '', | ... | ... |
-
Please register or login to post a comment