【issues/8078】角色选择组件点击文字部分会一直选中

pull/8191/head
JEECG 2025-04-15 11:19:36 +08:00
parent 8abce5ad9c
commit 44146f073e
3 changed files with 32 additions and 17 deletions

View File

@ -3,7 +3,7 @@
<div @click="showModal" :class="disabled ? 'select-input disabled-select' : 'select-input'"> <div @click="showModal" :class="disabled ? 'select-input disabled-select' : 'select-input'">
<template v-if="selectedList.length > 0"> <template v-if="selectedList.length > 0">
<template v-for="(item, index) in selectedList"> <template v-for="(item, index) in selectedList">
<SelectedUserItem v-if="index < maxCount" :info="item" @unSelect="unSelect" query /> <SelectedUserItem v-if="index < maxSelectCount" :info="item" @unSelect="unSelect" query />
</template> </template>
</template> </template>
<span v-else style="height: 30px; line-height: 30px; display: inline-block; margin-left: 7px; color: #bfbfbf">请选择</span> <span v-else style="height: 30px; line-height: 30px; display: inline-block; margin-left: 7px; color: #bfbfbf">请选择</span>
@ -26,7 +26,7 @@
import { Form } from 'ant-design-vue'; import { Form } from 'ant-design-vue';
import { useUserStore } from '/@/store/modules/user'; import { useUserStore } from '/@/store/modules/user';
const maxCount = 2; const maxCount = 3;
export default defineComponent({ export default defineComponent({
name: 'RoleSelectInput', name: 'RoleSelectInput',
@ -39,6 +39,12 @@
type: Boolean, type: Boolean,
default: false, default: false,
}, },
// update-begin--author:liaozhiyang---date:20250414--forissues/8078
maxSelectCount: {
type: Number,
default: 2,
},
// update-end--author:liaozhiyang---date:20250414--forissues/8078
store: { store: {
type: String, type: String,
default: 'id', default: 'id',
@ -77,7 +83,7 @@
} }
const ellipsisInfo = computed(() => { const ellipsisInfo = computed(() => {
let max = maxCount; let max = props.maxSelectCount;
let len = selectedList.value.length; let len = selectedList.value.length;
if (len > max) { if (len > max) {
return { status: true, count: len - max }; return { status: true, count: len - max };
@ -205,7 +211,6 @@
return { return {
selectedList, selectedList,
ellipsisInfo, ellipsisInfo,
maxCount,
registerRoleModal, registerRoleModal,
closeRoleModal, closeRoleModal,
showModal, showModal,

View File

@ -156,8 +156,11 @@
if(!list || list.length ==0 ){ if(!list || list.length ==0 ){
return; return;
} }
let arr = list.filter(item=>item.id == id); // update-begin--author:liaozhiyang---date:20250414--forissues/8078
arr[0].checked = false; let findItem = list.find((item) => item.id == id);
findItem.checked = false;
selectedKeys.value = selectedKeys.value.filter((key) => key != id);
// update-end--author:liaozhiyang---date:20250414--forissues/8078
} }
async function loadDataList() { async function loadDataList() {
@ -190,23 +193,30 @@
console.log('loadDataList', data); console.log('loadDataList', data);
} }
function onSelect(e, item) { function onSelect(e, item) {
prevent(e); prevent(e);
console.log('onselect'); // update-begin--author:liaozhiyang---date:20250414--forissues/8078
// false //
if(props.multi === false){ if (!props.multi) {
let list = dataList.value; dataList.value.forEach(dataItem => {
for(let item of list){ if (dataItem.id != item.id) {
item.checked = false; dataItem.checked = false;
} }
});
// keys
selectedKeys.value = [];
} }
//
item.checked = !item.checked; item.checked = !item.checked;
// selectedKeys
if (item.checked) { if (item.checked) {
selectedKeys.value.push(item.id); selectedKeys.value.push(item.id);
} else { } else {
selectedKeys.value = selectedKeys.value.filter((k) => k != item.id); selectedKeys.value = selectedKeys.value.filter(key => key !== item.id);
} }
// update-end--author:liaozhiyang---date:20250414--forissues/8078
} }
function prevent(e) { function prevent(e) {

View File

@ -420,9 +420,9 @@ export const schemas: FormSchema[] = [
component: 'RoleSelect', component: 'RoleSelect',
componentProps: { componentProps: {
// //
maxSelectCount: 3, maxSelectCount: 4,
// //
isRadioSelection: false multi: true
}, },
}, },
{ {