修改部分选择人员的规则与交互

This commit is contained in:
wangyifeng 2025-02-18 19:51:23 +08:00
parent a0578c57ad
commit bdfd84bd35

View File

@ -58,7 +58,10 @@
</div> </div>
</div> </div>
<div <div
v-if="currentCrumbs?.sons?.length > 0" v-if="
currentCrumbs?.sons?.length > 0 &&
((state.chooseMode === 2 && !searchVal) || state.chooseMode !== 2)
"
v-for="item in currentCrumbs?.sons" v-for="item in currentCrumbs?.sons"
@click=" @click="
state.chooseMode === 1 || state.chooseMode === 2 state.chooseMode === 1 || state.chooseMode === 2
@ -262,7 +265,9 @@
v-if="state.chooseMode === 2" v-if="state.chooseMode === 2"
v-for="item in allCheckedList" v-for="item in allCheckedList"
> >
{{ item.name }}({{ item.staffNum }}) <span v-if="item.showInPopup">
{{ item.name }}({{ getDepTotalMembers(item) }})
</span>
</span> </span>
<span <span
v-if="state.chooseMode === 2" v-if="state.chooseMode === 2"
@ -337,6 +342,10 @@
> >
<div v-if="index === 0" class="divider"></div> <div v-if="index === 0" class="divider"></div>
<div <div
v-if="
(item.showInPopup && state.chooseMode === 2) ||
state.chooseMode !== 2
"
class="flex items-center justify-between mt-[36rpx] font-medium text-[#000000] leading-[40rpx] mb-[34rpx]" class="flex items-center justify-between mt-[36rpx] font-medium text-[#000000] leading-[40rpx] mb-[34rpx]"
> >
<div class="text-[28rpx] ml-[10rpx]"> <div class="text-[28rpx] ml-[10rpx]">
@ -350,11 +359,21 @@
:plain="true" :plain="true"
:btnText="$t('chatSettings.btn.removeAdmin')" :btnText="$t('chatSettings.btn.removeAdmin')"
@clickBtn="deleteNode(item)" @clickBtn="deleteNode(item)"
:disabled="userDepIds.includes(item.ID)" :disabled="
state.chooseMode === 2
? false
: userDepIds.includes(item.ID)
"
></customBtn> ></customBtn>
</div> </div>
</div> </div>
<div class="divider"></div> <div
class="divider"
v-if="
(item.showInPopup && state.chooseMode === 2) ||
state.chooseMode !== 2
"
></div>
</div> </div>
<div <div
v-for="(item, index) in membersCheckedKeys" v-for="(item, index) in membersCheckedKeys"
@ -528,10 +547,10 @@ const allCheckStatus = computed(() => {
if (currentCrumbs?.value?.sons?.length === 0) { if (currentCrumbs?.value?.sons?.length === 0) {
return 'noChecked' return 'noChecked'
} }
const allChecked = currentCrumbs.value.sons.every( const allChecked = currentCrumbs?.value?.sons?.every(
(son) => son.checkStatus === 'checked', (son) => son.checkStatus === 'checked',
) )
const someChecked = currentCrumbs.value.sons.some( const someChecked = currentCrumbs?.value?.sons?.some(
(son) => son.checkStatus === 'checked' || son.checkStatus === 'halfChecked', (son) => son.checkStatus === 'checked' || son.checkStatus === 'halfChecked',
) )
if (allChecked) { if (allChecked) {
@ -618,8 +637,14 @@ const updateNodeStatus = (node) => {
} }
// //
const updateCheckStatus = (node, status) => { const updateCheckStatus = (node, status, doShow) => {
node.checkStatus = status node.checkStatus = status
if (state.chooseMode === 2 && doShow) {
node.showInPopup = true
if (state.searchVal) {
return
}
}
if (node.sons && Array.isArray(node.sons) && node.sons.length > 0) { if (node.sons && Array.isArray(node.sons) && node.sons.length > 0) {
node.sons.forEach((son) => updateCheckStatus(son, status)) node.sons.forEach((son) => updateCheckStatus(son, status))
} }
@ -627,7 +652,7 @@ const updateCheckStatus = (node, status) => {
const checkItemChange = (item, val) => { const checkItemChange = (item, val) => {
// //
updateCheckStatus(item, val) updateCheckStatus(item, val, true)
// //
updateParentStatus(item) updateParentStatus(item)
@ -637,6 +662,13 @@ const deleteNode = (item) => {
const treeNode = findNodeById(depTreeMyList.value[0], item.ID) const treeNode = findNodeById(depTreeMyList.value[0], item.ID)
if (!treeNode) return if (!treeNode) return
treeNode.checkStatus = 'noChecked' treeNode.checkStatus = 'noChecked'
if (
state.chooseMode === 2 &&
treeNode?.sons?.length > 0 &&
Array.isArray(treeNode?.sons)
) {
updateCheckStatus(item, false)
}
updateNodeStatus(treeNode) updateNodeStatus(treeNode)
updateParentStatus(treeNode) updateParentStatus(treeNode)
} }
@ -664,11 +696,35 @@ const allCheck = (status) => {
} else { } else {
statusT = 'checked' statusT = 'checked'
} }
currentCrumbs.value.sons.forEach((item) => { currentCrumbs?.value?.sons?.forEach((item) => {
const itemT = findNodeById(depTreeMyList.value[0], item.ID) const itemT = findNodeById(depTreeMyList.value[0], item.ID)
if (!itemT) return if (!itemT) return
checkItemChange(itemT, statusT) checkItemChange(itemT, statusT)
}) })
if (state.chooseMode === 2) {
console.log(currentMembers.value)
console.log(membersCheckedKeys.value)
const map = new Map()
if (status === 'noChecked' || status === 'halfChecked') {
;[currentMembers.value, membersCheckedKeys.value]
.flat()
.forEach((item) => {
map.set(item.ID, item)
})
const mergedArray = Array.from(map.values())
console.log(mergedArray)
membersCheckedKeys.value = mergedArray
} else if (status === 'checked') {
const filteredArray = computed(() => {
const unSelectArr = new Set(currentMembers.value.map((item) => item.ID))
return membersCheckedKeys.value.filter(
(item) => !unSelectArr.has(item.ID),
)
})
console.log(filteredArray)
membersCheckedKeys.value = filteredArray.value
}
}
} }
const openDrawer = () => { const openDrawer = () => {