提交 08debba7 编写于 作者: J jerry

feat: picker多列

上级 c7f8e82a
...@@ -8,14 +8,14 @@ ...@@ -8,14 +8,14 @@
<nut-picker mode="multiSelector" :list-data="listData2" @confirm="confirm2"> <nut-picker mode="multiSelector" :list-data="listData2" @confirm="confirm2">
<nut-cell title="请选择时间" :desc="desc2"></nut-cell> <nut-cell title="请选择时间" :desc="desc2"></nut-cell>
</nut-picker> </nut-picker>
<h2>多级联动</h2> <!-- <h2>多级联动</h2>
<nut-picker :list-data="listData3" @confirm="confirm3"> <nut-picker :list-data="listData3" @confirm="confirm3">
<nut-cell title="请选择地址" :desc="desc3"></nut-cell> <nut-cell title="请选择地址" :desc="desc3"></nut-cell>
</nut-picker> </nut-picker> -->
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { toRefs, ref } from 'vue'; import { ref } from 'vue';
import { createComponent } from './../../../../../../packages/utils/create'; import { createComponent } from './../../../../../../packages/utils/create';
import Picker from './index.taro.vue'; import Picker from './index.taro.vue';
import Cell from './../cell/index.taro.vue'; import Cell from './../cell/index.taro.vue';
...@@ -36,82 +36,41 @@ export default createDemo({ ...@@ -36,82 +36,41 @@ export default createDemo({
'浙江市', '浙江市',
'江苏市' '江苏市'
]; ];
const listData2 = [ const listData2 = ref([
{ {
values: ['周一', '周二', '周三', '周四', '周五'], values: ['周一', '周二', '周三', '周四', '周五'],
defaultIndex: 2 defaultIndex: 2
}, },
// 第二列
{ {
values: ['上午', '下午', '晚上'], values: ['上午', '下午', '晚上'],
defaultIndex: 1 defaultIndex: 1
} }
]; ]);
const listData3 = [
{
text: '浙江',
children: [
{
text: '杭州',
children: [{ text: '西湖区' }, { text: '余杭区' }]
},
{
text: '温州',
children: [{ text: '鹿城区' }, { text: '瓯海区' }]
}
]
},
{
text: '福建',
children: [
{
text: '福州',
children: [{ text: '鼓楼区' }, { text: '台江区' }]
},
{
text: '厦门',
children: [{ text: '思明区' }, { text: '海沧区' }]
}
]
}
];
const show = ref(false);
const show2 = ref(false);
const show3 = ref(false);
const showList = [show, show2, show3];
const desc = ref(listData1[0]); const desc = ref(listData1[0]);
const desc2 = ref( const desc2 = ref(
`${listData2[0].values[listData2[0].defaultIndex]} ${ `${listData2.value[0].values[listData2.value[0].defaultIndex]} ${
listData2[1].values[listData2[1].defaultIndex] listData2.value[1].values[listData2.value[1].defaultIndex]
}` }`
); );
const desc3 = ref( const confirm = (value: any, res: any) => {
`${listData3[0].text} desc.value = res;
${listData3[0].children[0].text} };
${listData3[0].children[0].children[0].text}`
); const confirm2 = (value: any, res: any) => {
desc2.value = res.join(' ');
listData2.value.forEach((item, idx) => {
item.defaultIndex = value[idx];
});
};
return { return {
listData1, listData1,
listData2, listData2,
listData3,
show,
show2,
show3,
desc, desc,
desc2, desc2,
desc3, confirm,
open: (index: number) => { confirm2
showList[index - 1].value = true;
},
confirm: (res: any) => {
desc.value = res;
},
confirm2: (res: any) => {
desc2.value = res.join(' ');
},
confirm3: (res: any) => {
desc3.value = res.join(' ');
}
}; };
} }
}); });
......
<template> <template>
<picker <picker
:mode="mode" :mode="mode"
:range="computedData" :range="range"
@change="onChange" @change="onChange"
@columnChange="onColumnChange" @columnChange="onColumnChange"
:value="value" :value="value"
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { toRefs, onMounted, reactive, computed, CSSProperties, ref } from 'vue'; import { onUpdated, ref, watch } from 'vue';
const { create } = createComponent('picker'); const { create } = createComponent('picker');
import { commonProps } from '../../../../../../packages/__VUE/picker/commonProps'; import { commonProps } from '../../../../../../packages/__VUE/picker/commonProps';
import { createComponent } from './../../../../../../packages/utils/create'; import { createComponent } from './../../../../../../packages/utils/create';
...@@ -26,47 +26,61 @@ export default create({ ...@@ -26,47 +26,61 @@ export default create({
emits: ['confirm'], emits: ['confirm'],
setup(props, { emit }) { setup(props, { emit }) {
let value = ref<any>([]); let value = ref<any>([]);
let range = ref<any>([]);
onUpdated(() => {
console.log('updated', props.listData);
});
const onChange = (e: any) => { const onChange = (e: any) => {
let ret; let ret;
if (props.mode === 'selector') { if (props.mode === 'selector') {
ret = props.listData[e.detail.value]; ret = props.listData[e.detail.value];
} else if (props.mode === 'multiSelector') { } else if (props.mode === 'multiSelector') {
ret = computedData.value?.map( ret = range.value
(item: any, idx) => item[e.detail.value[idx]] ?.map((item: any, idx: number) => item[e.detail.value[idx]])
); .filter((res: any) => res);
} }
emit('confirm', ret); console.log(e.detail.value, ret);
emit('confirm', e.detail.value, ret);
}; };
const computedData = computed(() => { watch(
if (props.mode === 'selector') { props.listData,
return props.listData; (val: any) => {
} else if (props.mode === 'multiSelector') { console.log('change');
try { try {
if (props.listData.length) { if (val.length) {
const range: object[] = []; // 构造range value.value = [];
props.listData.forEach((item: any, idx: number) => { range.value = [];
value.value.push(item.defaultIndex); if (props.mode === 'selector') {
range.push(item.values); range.value = props.listData;
}); } else if (props.mode === 'multiSelector') {
return range; val.forEach((item: any) => {
value.value.push(item.defaultIndex);
range.value.push(item.values);
});
}
} }
} catch (error) { } catch (error) {
console.log('listData参数格式错误', error); console.log('listData参数格式错误', error);
} }
} },
}); { immediate: true, deep: true }
);
const onColumnChange = e => { const onColumnChange = (e: any) => {
console.log('修改的列为', e.detail.column, ',值为', e.detail.value); console.log('修改的列为', e.detail.column, ',值为', e.detail.value);
}; };
return { return {
confirm, confirm,
onChange, onChange,
computedData,
value, value,
range,
onColumnChange onColumnChange
}; };
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册