修改人员选择规则
Some checks are pending
Check / lint (push) Waiting to run
Check / typecheck (push) Waiting to run
Check / build (build, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build, 18.x, windows-latest) (push) Waiting to run
Check / build (build:app, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build:app, 18.x, windows-latest) (push) Waiting to run
Check / build (build:mp-weixin, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build:mp-weixin, 18.x, windows-latest) (push) Waiting to run
Some checks are pending
Check / lint (push) Waiting to run
Check / typecheck (push) Waiting to run
Check / build (build, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build, 18.x, windows-latest) (push) Waiting to run
Check / build (build:app, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build:app, 18.x, windows-latest) (push) Waiting to run
Check / build (build:mp-weixin, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build:mp-weixin, 18.x, windows-latest) (push) Waiting to run
This commit is contained in:
parent
b58f25945e
commit
d7e8df5386
@ -104,8 +104,12 @@
|
|||||||
"
|
"
|
||||||
class="flex items-center mr-[32rpx]"
|
class="flex items-center mr-[32rpx]"
|
||||||
>
|
>
|
||||||
<div class="vDivider mr-[32rpx]"></div>
|
|
||||||
<div
|
<div
|
||||||
|
class="vDivider mr-[32rpx]"
|
||||||
|
v-if="state.chooseMode === 1"
|
||||||
|
></div>
|
||||||
|
<div
|
||||||
|
v-if="state.chooseMode === 1"
|
||||||
@click.stop="checkCurrentItem(item)"
|
@click.stop="checkCurrentItem(item)"
|
||||||
class="flex items-center mr-[32rpx]"
|
class="flex items-center mr-[32rpx]"
|
||||||
:class="{
|
:class="{
|
||||||
@ -570,19 +574,53 @@ const allCheckStatus = computed(() => {
|
|||||||
if (currentCrumbs?.value?.sons?.length === 0) {
|
if (currentCrumbs?.value?.sons?.length === 0) {
|
||||||
return 'noChecked'
|
return 'noChecked'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (state.chooseMode === 2) {
|
||||||
|
// 检查部门选择状态
|
||||||
|
const allDepsChecked = currentCrumbs?.value?.sons?.every(
|
||||||
|
(son) => son.checkStatus === 'checked',
|
||||||
|
)
|
||||||
|
const someDepsChecked = currentCrumbs?.value?.sons?.some(
|
||||||
|
(son) =>
|
||||||
|
son.checkStatus === 'checked' || son.checkStatus === 'halfChecked',
|
||||||
|
)
|
||||||
|
|
||||||
|
// 检查人员选择状态
|
||||||
|
const currentMemberIds = new Set(
|
||||||
|
currentMembers.value.map((member) => member.ID),
|
||||||
|
)
|
||||||
|
const allMembersChecked =
|
||||||
|
currentMembers.value.length > 0 &&
|
||||||
|
currentMembers.value.every((member) =>
|
||||||
|
membersCheckedKeys.value.some((checked) => checked.ID === member.ID),
|
||||||
|
)
|
||||||
|
const someMembersChecked = currentMembers.value.some((member) =>
|
||||||
|
membersCheckedKeys.value.some((checked) => checked.ID === member.ID),
|
||||||
|
)
|
||||||
|
|
||||||
|
// 综合判断全选状态
|
||||||
|
if (allDepsChecked && allMembersChecked) {
|
||||||
|
return 'checked'
|
||||||
|
} else if (someDepsChecked || someMembersChecked) {
|
||||||
|
return 'halfChecked'
|
||||||
|
}
|
||||||
|
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) {
|
||||||
return 'checked'
|
return 'checked'
|
||||||
} else if (someChecked) {
|
} else if (someChecked) {
|
||||||
return 'halfChecked'
|
return 'halfChecked'
|
||||||
} else {
|
|
||||||
return 'noChecked'
|
|
||||||
}
|
}
|
||||||
|
return 'noChecked'
|
||||||
})
|
})
|
||||||
|
|
||||||
const findNodeById = (node, targetId) => {
|
const findNodeById = (node, targetId) => {
|
||||||
@ -730,39 +768,46 @@ 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)
|
|
||||||
|
|
||||||
// 如果是选中状态,同时选中当前按钮
|
if (state.chooseMode === 1) {
|
||||||
if (statusT === 'checked') {
|
// 部门选择模式的逻辑保持不变
|
||||||
itemT.currentChecked = true
|
checkItemChange(itemT, statusT)
|
||||||
} else {
|
if (statusT === 'checked') {
|
||||||
// 取消选中时,清除当前按钮状态
|
itemT.currentChecked = true
|
||||||
itemT.currentChecked = false
|
} else {
|
||||||
|
itemT.currentChecked = false
|
||||||
|
}
|
||||||
|
} else if (state.chooseMode === 2) {
|
||||||
|
// 人员选择模式下的部门处理
|
||||||
|
checkItemChange(itemT, statusT)
|
||||||
|
itemT.showInPopup = true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 人员选择模式下处理成员
|
||||||
if (state.chooseMode === 2) {
|
if (state.chooseMode === 2) {
|
||||||
const map = new Map()
|
if (statusT === 'checked') {
|
||||||
if (status === 'noChecked' || status === 'halfChecked') {
|
// 全选时,添加所有当前显示的成员
|
||||||
;[currentMembers.value, membersCheckedKeys.value]
|
const newMembers = currentMembers.value.filter(
|
||||||
.flat()
|
(member) =>
|
||||||
.forEach((item) => {
|
!membersCheckedKeys.value.some(
|
||||||
map.set(item.ID, item)
|
(existing) => existing.ID === member.ID,
|
||||||
})
|
),
|
||||||
const mergedArray = Array.from(map.values())
|
)
|
||||||
membersCheckedKeys.value = mergedArray
|
membersCheckedKeys.value = [...membersCheckedKeys.value, ...newMembers]
|
||||||
} else if (status === 'checked') {
|
} else {
|
||||||
const filteredArray = computed(() => {
|
// 取消全选时,移除当前显示的所有成员
|
||||||
const unSelectArr = new Set(currentMembers.value.map((item) => item.ID))
|
const currentMemberIds = new Set(
|
||||||
return membersCheckedKeys.value.filter(
|
currentMembers.value.map((member) => member.ID),
|
||||||
(item) => !unSelectArr.has(item.ID),
|
)
|
||||||
)
|
membersCheckedKeys.value = membersCheckedKeys.value.filter(
|
||||||
})
|
(member) => !currentMemberIds.has(member.ID),
|
||||||
membersCheckedKeys.value = filteredArray.value
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -815,21 +860,45 @@ const initCheckedKeys = () => {
|
|||||||
|
|
||||||
const init = async () => {
|
const init = async () => {
|
||||||
crumbsIndex.value = 0
|
crumbsIndex.value = 0
|
||||||
|
// 先清空之前的数据
|
||||||
|
depTreeMyList.value = []
|
||||||
|
crumbs.value = []
|
||||||
|
|
||||||
await getDepsTreeMy()
|
await getDepsTreeMy()
|
||||||
if (depTreeMyList.value.length) {
|
if (depTreeMyList.value.length) {
|
||||||
// 创建全部节点
|
if (state.chooseMode === 1) {
|
||||||
const allNode = {
|
// 部门选择模式才创建 all 节点
|
||||||
ID: 'all',
|
const allNode = {
|
||||||
name: t('choose.deps.all'),
|
ID: 'all',
|
||||||
sons: depTreeMyList.value,
|
name: t('choose.deps.all'),
|
||||||
staffNum: calculateTotalStaffNum({ sons: depTreeMyList.value }),
|
sons: [...depTreeMyList.value], // 使用浅拷贝避免引用问题
|
||||||
|
staffNum: calculateTotalStaffNum({ sons: depTreeMyList.value }),
|
||||||
|
}
|
||||||
|
depTreeMyList.value = [allNode]
|
||||||
|
crumbs.value = [allNode]
|
||||||
|
} else {
|
||||||
|
// 其他模式直接使用原始数据
|
||||||
|
crumbs.value = [depTreeMyList.value[0]]
|
||||||
}
|
}
|
||||||
depTreeMyList.value = [allNode]
|
|
||||||
crumbs.value = [allNode]
|
|
||||||
} else {
|
|
||||||
crumbs.value = []
|
|
||||||
}
|
}
|
||||||
initCheckedKeys()
|
|
||||||
|
if (state.chooseMode === 2) {
|
||||||
|
// 恢复部门选中状态,但只显示父部门
|
||||||
|
depCheckedKeys.value.forEach((item) => {
|
||||||
|
const node = findNodeById(depTreeMyList.value[0], item.ID)
|
||||||
|
if (node) {
|
||||||
|
node.checkStatus = 'checked'
|
||||||
|
// 只有当该节点没有父节点被选中时,才显示在列表中
|
||||||
|
const parentNode = findParentNode(depTreeMyList.value[0], item.ID)
|
||||||
|
if (!parentNode || parentNode.checkStatus !== 'checked') {
|
||||||
|
node.showInPopup = true
|
||||||
|
}
|
||||||
|
updateParentStatus(node)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
initCheckedKeys()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const checkCurrentItem = (item) => {
|
const checkCurrentItem = (item) => {
|
||||||
|
Loading…
Reference in New Issue
Block a user