mirror of https://github.com/jeecgboot/jeecg-boot
【issues/8078】角色选择组件点击文字部分会一直选中
parent
8abce5ad9c
commit
44146f073e
|
@ -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--for:【issues/8078】角色选择组件点击文字部分会一直选中
|
||||||
|
maxSelectCount: {
|
||||||
|
type: Number,
|
||||||
|
default: 2,
|
||||||
|
},
|
||||||
|
// update-end--author:liaozhiyang---date:20250414--for:【issues/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,
|
||||||
|
|
|
@ -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--for:【issues/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--for:【issues/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--for:【issues/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--for:【issues/8078】角色选择组件点击文字部分会一直选中
|
||||||
}
|
}
|
||||||
|
|
||||||
function prevent(e) {
|
function prevent(e) {
|
||||||
|
|
|
@ -420,9 +420,9 @@ export const schemas: FormSchema[] = [
|
||||||
component: 'RoleSelect',
|
component: 'RoleSelect',
|
||||||
componentProps: {
|
componentProps: {
|
||||||
//最大选择数量
|
//最大选择数量
|
||||||
maxSelectCount: 3,
|
maxSelectCount: 4,
|
||||||
//是否单选
|
//是否单选
|
||||||
isRadioSelection: false
|
multi: true
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue