Skip to content

Commit c3b96ce

Browse files
author
xuqingkai
committed
fix: 🐛 修复Picker选择器多列选择模式绑定值为空数组时将列第一项作为显示值的问题
1 parent 103298e commit c3b96ce

File tree

3 files changed

+29
-36
lines changed

3 files changed

+29
-36
lines changed

docs/component/picker.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<frame/>
22

3-
# Picker 选择器视图
3+
# Picker 选择器
44

55
Picker 组件为 popup 和 pickerView 的组合。
66

src/pages/picker/Index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ const columns2 = ref(['选项1', '选项2', '选项3', '选项4', '选项5', '
9898
const columns3 = ref(['选项1', '选项2', '选项3', '选项4', '选项5', '选项6', '选项7'])
9999
const value3 = ref('选项4')
100100
101-
const value4 = ref(['中南大学', '软件工程'])
101+
const value4 = ref([])
102102
const columns4 = ref([
103103
['中山大学', '中南大学', '华南理工大学'],
104104
['计算机科学与技术', '软件工程', '通信工程', '法学', '经济学']

src/uni_modules/wot-design-uni/components/wd-picker/wd-picker.vue

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export default {
8989
import { getCurrentInstance, onBeforeMount, ref, watch, computed, onMounted, nextTick } from 'vue'
9090
import { deepClone, defaultDisplayFormat, getType, isArray, isDef, isFunction } from '../common/util'
9191
import { useCell } from '../composables/useCell'
92-
import { type ColumnItem, formatArray } from '../wd-picker-view/types'
92+
import { type ColumnItem, formatArray, type PickerViewInstance } from '../wd-picker-view/types'
9393
import { FORM_KEY, type FormItemRule } from '../wd-form/types'
9494
import { useParent } from '../composables/useParent'
9595
import { useTranslate } from '../composables/useTranslate'
@@ -99,7 +99,7 @@ const { translate } = useTranslate('picker')
9999
const props = defineProps(pickerProps)
100100
const emit = defineEmits(['confirm', 'open', 'cancel', 'update:modelValue'])
101101
102-
const pickerViewWd = ref<any>(null)
102+
const pickerViewWd = ref<PickerViewInstance | null>(null)
103103
const cell = useCell()
104104
105105
const innerLoading = ref<boolean>(false) // 内部控制是否loading
@@ -124,12 +124,8 @@ watch(
124124
if (fn && !isFunction(fn)) {
125125
console.error('The type of displayFormat must be Function')
126126
}
127-
if (pickerViewWd.value && pickerViewWd.value.selectedIndex && pickerViewWd.value.selectedIndex.length !== 0) {
128-
if (isDef(props.modelValue) && props.modelValue !== '') {
129-
setShowValue(pickerViewWd.value.getSelects())
130-
} else {
131-
showValue.value = ''
132-
}
127+
if (pickerViewWd.value && pickerViewWd.value.getSelectedIndex().length !== 0) {
128+
handleShowValueUpdate(props.modelValue)
133129
}
134130
},
135131
{
@@ -143,17 +139,7 @@ watch(
143139
(newValue) => {
144140
pickerValue.value = newValue
145141
// 获取初始选中项,并展示初始选中文案
146-
if (isDef(newValue) && newValue !== '') {
147-
if (pickerViewWd.value && pickerViewWd.value.getSelects) {
148-
nextTick(() => {
149-
setShowValue(pickerViewWd.value!.getSelects())
150-
})
151-
} else {
152-
setShowValue(getSelects(newValue)!)
153-
}
154-
} else {
155-
showValue.value = ''
156-
}
142+
handleShowValueUpdate(newValue)
157143
},
158144
{
159145
deep: true,
@@ -167,17 +153,7 @@ watch(
167153
displayColumns.value = newValue
168154
resetColumns.value = newValue
169155
// 获取初始选中项,并展示初始选中文案
170-
if (isDef(props.modelValue) && props.modelValue !== '') {
171-
if (pickerViewWd.value && pickerViewWd.value.getSelects) {
172-
nextTick(() => {
173-
setShowValue(pickerViewWd.value!.getSelects())
174-
})
175-
} else {
176-
setShowValue(getSelects(props.modelValue)!)
177-
}
178-
} else {
179-
showValue.value = ''
180-
}
156+
handleShowValueUpdate(props.modelValue)
181157
},
182158
{
183159
deep: true,
@@ -226,17 +202,33 @@ const isRequired = computed(() => {
226202
const { proxy } = getCurrentInstance() as any
227203
228204
onMounted(() => {
229-
isDef(props.modelValue) && props.modelValue !== '' && setShowValue(getSelects(props.modelValue)!)
230-
if (isDef(props.modelValue) && props.modelValue !== '' && pickerViewWd.value && pickerViewWd.value.getSelects) {
231-
setShowValue(pickerViewWd.value!.getSelects())
232-
}
205+
handleShowValueUpdate(props.modelValue)
233206
})
234207
235208
onBeforeMount(() => {
236209
displayColumns.value = deepClone(props.columns)
237210
resetColumns.value = deepClone(props.columns)
238211
})
239212
213+
/**
214+
* 值变更时更新显示内容
215+
* @param value
216+
*/
217+
function handleShowValueUpdate(value: string | number | Array<string | number>) {
218+
// 获取初始选中项,并展示初始选中文案
219+
if ((isArray(value) && value.length > 0) || (isDef(value) && !isArray(value) && value !== '')) {
220+
if (pickerViewWd.value) {
221+
nextTick(() => {
222+
setShowValue(pickerViewWd.value!.getSelects())
223+
})
224+
} else {
225+
setShowValue(getSelects(value)!)
226+
}
227+
} else {
228+
showValue.value = ''
229+
}
230+
}
231+
240232
/**
241233
* @description 根据传入的value,picker组件获取当前cell展示值。
242234
* @param {String|Number|Array<String|Number|Array<any>>}value
@@ -344,6 +336,7 @@ function handleConfirm() {
344336
popupShow.value = false
345337
resetColumns.value = deepClone(columns)
346338
emit('update:modelValue', values)
339+
347340
setShowValue(selects)
348341
emit('confirm', {
349342
value: values,

0 commit comments

Comments
 (0)