hookehuyr

✨ feat: 新增省市区组件模块

1 <!-- 1 <!--
2 * @Date: 2022-08-30 14:32:11 2 * @Date: 2022-08-30 14:32:11
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2022-08-30 14:46:53 4 + * @LastEditTime: 2022-08-30 17:56:04
5 * @FilePath: /data-table/src/components/AreaPickerField/index.vue 5 * @FilePath: /data-table/src/components/AreaPickerField/index.vue
6 * @Description: 文件描述 6 * @Description: 文件描述
7 --> 7 -->
8 <template> 8 <template>
9 <div class="area-picker-field"> 9 <div class="area-picker-field">
10 - <van-area v-model="value" title="" :area-list="areaList" /> 10 + <div class="label">{{ item.label }}<span v-if="item.required">&nbsp;*</span></div>
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" />
13 + <van-popup v-model:show="showPicker" position="bottom">
14 + <van-area v-model="item.code" title="" :area-list="areaList" @confirm="onConfirm" @cancel="showPicker = false" />
15 + </van-popup>
11 </div> 16 </div>
12 </template> 17 </template>
13 18
14 <script setup> 19 <script setup>
15 import { areaList } from '@vant/area-data'; 20 import { areaList } from '@vant/area-data';
16 -const value = ref('330302'); 21 +
22 +const props = defineProps({
23 + item: Object
24 +})
25 +
26 +const showPicker = ref(false);
27 +const fieldValue = ref('');
28 +
29 +const onConfirm = ({ selectedOptions }) => {
30 + props.item.value = selectedOptions.map((option) => option.text).join('/');
31 + props.item.city_code = selectedOptions[2]?.value;
32 + showPicker.value = false;
33 +};
17 </script> 34 </script>
18 35
19 <style lang="less" scoped> 36 <style lang="less" scoped>
20 .area-picker-field { 37 .area-picker-field {
38 + .label {
39 + padding: 1rem 1rem 0 1rem;
40 + font-size: 0.9rem;
41 + font-weight: bold;
21 42
43 + span {
44 + color: red;
45 + }
46 + }
22 } 47 }
23 </style> 48 </style>
......
...@@ -29,13 +29,13 @@ export function createComponentType(data) { ...@@ -29,13 +29,13 @@ export function createComponentType(data) {
29 item.name = item.key; 29 item.name = item.key;
30 item.component = TextField; 30 item.component = TextField;
31 } 31 }
32 - // if (item.component_type === 'textarea') { 32 + if (item.component_type === 'textarea') {
33 - // item.type = 'textarea'; 33 + item.type = 'textarea';
34 - // item.name = item.key; 34 + item.name = item.key;
35 - // item.rows = 2; 35 + item.rows = 2;
36 - // item.autosize = true; 36 + item.autosize = true;
37 - // item.component = TextareaField; 37 + item.component = TextareaField;
38 - // } 38 + }
39 if (item.component_type === 'number') { 39 if (item.component_type === 'number') {
40 item.type = 'number'; 40 item.type = 'number';
41 item.name = item.key; 41 item.name = item.key;
......
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-08-30 14:35:02 4 + * @LastEditTime: 2022-08-30 17:55:45
5 * @FilePath: /data-table/src/views/index.vue 5 * @FilePath: /data-table/src/views/index.vue
6 * @Description: 首页 6 * @Description: 首页
7 --> 7 -->
...@@ -30,7 +30,7 @@ const mockData = ref([]); ...@@ -30,7 +30,7 @@ const mockData = ref([]);
30 onMounted(() => { 30 onMounted(() => {
31 mockData.value = [{ 31 mockData.value = [{
32 key: 'username', 32 key: 'username',
33 - value: 'Hooke', 33 + value: '',
34 label: '用户名', 34 label: '用户名',
35 placeholder: '请输入用户名', 35 placeholder: '请输入用户名',
36 component: '', 36 component: '',
...@@ -46,7 +46,7 @@ onMounted(() => { ...@@ -46,7 +46,7 @@ onMounted(() => {
46 required: false, 46 required: false,
47 }, { 47 }, {
48 key: 'gender', 48 key: 'gender',
49 - value: 'female', 49 + value: '',
50 label: '性别', 50 label: '性别',
51 placeholder: '', 51 placeholder: '',
52 component: '', 52 component: '',
...@@ -94,7 +94,10 @@ onMounted(() => { ...@@ -94,7 +94,10 @@ onMounted(() => {
94 required: true, 94 required: true,
95 }, { 95 }, {
96 key: 'city', 96 key: 'city',
97 - value: '', 97 + value: '天津市/天津市/和平区',
98 + city_code: '120101',
99 + label: '省市区',
100 + placeholder: '请选择省市区',
98 component_type: 'area_picker' 101 component_type: 'area_picker'
99 }]; 102 }];
100 // 生成自定义组件 103 // 生成自定义组件
...@@ -103,6 +106,7 @@ onMounted(() => { ...@@ -103,6 +106,7 @@ onMounted(() => {
103 106
104 const onSubmit = (values) => { 107 const onSubmit = (values) => {
105 console.log('submit', values); 108 console.log('submit', values);
109 + // console.warn(mockData.value);
106 }; 110 };
107 111
108 </script> 112 </script>
......