修改人员选择规则
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:
wangyifeng 2025-03-03 17:05:22 +08:00
parent b58f25945e
commit d7e8df5386

View File

@ -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) => {