feat[create]: 完成单选置底多选排它

- choice 新增 handleChange 函数,处理多选排它项
- option-action 新增 isPreview 传参,处理 置底和排它的顺序功能
This commit is contained in:
Huangzhe
2025-03-23 16:46:25 +08:00
parent 5ae09ce20e
commit 35f33e7f22
3 changed files with 75 additions and 8 deletions

View File

@@ -23,6 +23,7 @@
<option-action
:data="isPreview ? item.options : item"
:active="active"
:is-preview="isPreview"
:question="element"
handle=".moverQues"
>
@@ -60,11 +61,17 @@
</option-action>
</van-radio-group>
<van-checkbox-group v-if="element.question_type === 2" v-model="value" shape="square">
<van-checkbox-group
v-if="element.question_type === 2"
v-model="value"
shape="square"
@change="handleChange"
>
<option-action
:data="isPreview ? item.options : item"
handle=".moverQues"
:active="active"
:is-preview="isPreview"
:question="element"
>
<template #item="{ element: it, index: itIndex }">
@@ -140,6 +147,24 @@ const element = defineModel('element', {
};
}
});
/**
* 控制选项,如果新增排它项, 那么就直接重新取值
* 按理说是不是 watch 更加合理
* @param names {number[]} 选中的项
*/
function handleChange(names) {
const newOption = names[names.length - 1];
// 如果names 长度小于1直接返回不处理
if (names.length < 1) return;
const options = element.value.options[0] ?? element.value.list[0];
// 如果新增的结果是排它项, 对结果进行处理
if (options[newOption - 1].is_remove_other === 1) {
value.value = [newOption];
}
}
const emit = defineEmits(['update:element']);
const emitValue = () => {
emit('update:element', element.value);