Compare commits
3 Commits
ccc8c41b2d
...
aa9adb6211
Author | SHA1 | Date | |
---|---|---|---|
aa9adb6211 | |||
69fd096c4d | |||
82ba6ddbd7 |
@ -402,10 +402,15 @@
|
||||
class="flex flex-col"
|
||||
>
|
||||
<div
|
||||
v-if="index === 0 && allCheckedList.length == 0"
|
||||
v-if="
|
||||
index === 0 &&
|
||||
allCheckedList.length == 0 &&
|
||||
state.chooseMode === 2
|
||||
"
|
||||
class="divider"
|
||||
></div>
|
||||
<div
|
||||
v-if="state.chooseMode === 2"
|
||||
class="flex items-center justify-between mt-[36rpx] font-medium text-[#000000] leading-[40rpx] mb-[34rpx]"
|
||||
>
|
||||
<div class="text-[28rpx] ml-[10rpx] flex">
|
||||
@ -429,7 +434,7 @@
|
||||
></customBtn>
|
||||
</div>
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<div class="divider" v-if="state.chooseMode === 2"></div>
|
||||
</div>
|
||||
</div>
|
||||
</scroll-view>
|
||||
@ -465,6 +470,7 @@ const {
|
||||
crumbsIndex,
|
||||
depCheckedKeys,
|
||||
getDepMembers,
|
||||
memberDepCheckedKeys,
|
||||
membersCheckedKeys,
|
||||
allChooseMembers,
|
||||
} = useGroupTypeStore()
|
||||
@ -571,43 +577,53 @@ const buildDepsMap = (departments) => {
|
||||
}
|
||||
|
||||
const allCheckStatus = computed(() => {
|
||||
if (currentCrumbs?.value?.sons?.length === 0) {
|
||||
if (
|
||||
currentCrumbs?.value?.sons?.length === 0 &&
|
||||
currentMembers.value.length === 0
|
||||
) {
|
||||
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 allDepsChecked =
|
||||
currentCrumbs?.value?.sons?.length > 0
|
||||
? currentCrumbs?.value?.sons?.every(
|
||||
(son) => son.checkStatus === 'checked',
|
||||
)
|
||||
: true // 如果没有子部门,则视为部门全选
|
||||
|
||||
// 检查人员选择状态
|
||||
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) {
|
||||
// 1. 如果有子部门和成员,则需要都选中才是全选
|
||||
// 2. 如果只有成员没有子部门,则只需要成员全选即可
|
||||
// 3. 如果只有子部门没有成员,则只需要子部门全选即可
|
||||
if (
|
||||
(currentCrumbs?.value?.sons?.length > 0 && allDepsChecked) ||
|
||||
(currentMembers.value.length > 0 && allMembersChecked)
|
||||
) {
|
||||
return 'checked'
|
||||
} else if (someDepsChecked || someMembersChecked) {
|
||||
} else if (
|
||||
currentCrumbs?.value?.sons?.some(
|
||||
(son) =>
|
||||
son.checkStatus === 'checked' || son.checkStatus === 'halfChecked',
|
||||
) ||
|
||||
currentMembers.value.some((member) =>
|
||||
membersCheckedKeys.value.some((checked) => checked.ID === member.ID),
|
||||
)
|
||||
) {
|
||||
return 'halfChecked'
|
||||
}
|
||||
return 'noChecked'
|
||||
}
|
||||
|
||||
// 部门选择模式的原有逻辑
|
||||
// 部门选择模式的原有逻辑保持不变
|
||||
const allChecked = currentCrumbs?.value?.sons?.every(
|
||||
(son) => son.checkStatus === 'checked',
|
||||
)
|
||||
@ -700,6 +716,10 @@ const updateNodeStatus = (node) => {
|
||||
// 更新当前节点及其所有子节点的状态
|
||||
const updateCheckStatus = (node, status, doShow) => {
|
||||
node.checkStatus = status
|
||||
// 当状态为 noChecked 时,同时取消当前按钮的选中状态
|
||||
if (status === 'noChecked') {
|
||||
node.currentChecked = false
|
||||
}
|
||||
|
||||
if (state.chooseMode === 2 && doShow) {
|
||||
node.showInPopup = true
|
||||
@ -837,14 +857,18 @@ const handleConfirm = async () => {
|
||||
})
|
||||
if (res.status == 0 && res.data?.data?.length) {
|
||||
res.data?.data.forEach((v) => {
|
||||
listT.push(v)
|
||||
// 检查是否已存在相同 ID 的成员
|
||||
if (!listT.some((item) => item.ID === v.ID)) {
|
||||
listT.push(v)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
allChooseMembers.value = listT
|
||||
memberDepCheckedKeys.value = lodash.cloneDeep(allCheckedList.value) // 存储人员选择模式下的部门
|
||||
} else {
|
||||
depCheckedKeys.value = lodash.cloneDeep(allCheckedList.value) // 存储部门选择模式下的部门
|
||||
}
|
||||
depCheckedKeys.value = lodash.cloneDeep(allCheckedList.value)
|
||||
console.log('depCheckedKeys', depCheckedKeys.value)
|
||||
uni.navigateBack()
|
||||
}
|
||||
|
||||
@ -883,8 +907,8 @@ const init = async () => {
|
||||
}
|
||||
|
||||
if (state.chooseMode === 2) {
|
||||
// 恢复部门选中状态,但只显示父部门
|
||||
depCheckedKeys.value.forEach((item) => {
|
||||
// 恢复人员选择模式下的部门状态,但只显示父部门
|
||||
memberDepCheckedKeys.value.forEach((item) => {
|
||||
const node = findNodeById(depTreeMyList.value[0], item.ID)
|
||||
if (node) {
|
||||
node.checkStatus = 'checked'
|
||||
@ -910,15 +934,30 @@ const checkCurrentItem = (item) => {
|
||||
const treeNode = findNodeById(depTreeMyList.value[0], item.ID)
|
||||
if (!treeNode) return
|
||||
|
||||
// 检查子节点状态
|
||||
const allSonsChecked =
|
||||
treeNode.sons &&
|
||||
Array.isArray(treeNode.sons) &&
|
||||
treeNode.sons.every((son) => son.checkStatus === 'checked')
|
||||
|
||||
// 切换当前节点的单独选中状态
|
||||
treeNode.currentChecked = !treeNode.currentChecked
|
||||
|
||||
// 更新节点状态
|
||||
if (treeNode.currentChecked) {
|
||||
treeNode.checkStatus = 'halfChecked'
|
||||
// 如果子节点全部选中,则当前节点也应该完全选中
|
||||
if (allSonsChecked) {
|
||||
treeNode.checkStatus = 'checked'
|
||||
} else {
|
||||
treeNode.checkStatus = 'halfChecked'
|
||||
}
|
||||
} else {
|
||||
// 如果取消单独选中,则恢复未选中状态
|
||||
treeNode.checkStatus = 'noChecked'
|
||||
// 如果取消单独选中,但子节点全选,保持半选状态
|
||||
if (allSonsChecked) {
|
||||
treeNode.checkStatus = 'halfChecked'
|
||||
} else {
|
||||
treeNode.checkStatus = 'noChecked'
|
||||
}
|
||||
}
|
||||
|
||||
// 更新父节点状态
|
||||
@ -945,20 +984,25 @@ const calculateTotalStaffNum = (node) => {
|
||||
}
|
||||
|
||||
const getCurrentMembers = async (depItem) => {
|
||||
if (state.chooseMode === 1) {
|
||||
if (state.chooseMode === 1 || !depItem?.ID) {
|
||||
currentMembers.value = []
|
||||
return
|
||||
}
|
||||
let params = {
|
||||
departmentId: depItem.ID,
|
||||
status: 'notactive',
|
||||
}
|
||||
// 使用更明确的参数结构
|
||||
let params = { status: 'notactive' }
|
||||
if (searchVal.value) {
|
||||
delete params.departmentId
|
||||
params = Object.assign({}, params, {
|
||||
params = {
|
||||
fatherDepartmentId: depItem.ID,
|
||||
nickName: searchVal.value,
|
||||
})
|
||||
nickName: searchVal.value.trim(),
|
||||
}
|
||||
} else {
|
||||
params.departmentId = depItem.ID
|
||||
}
|
||||
|
||||
// 添加请求拦截
|
||||
if (!params.departmentId && !params.fatherDepartmentId) {
|
||||
console.error('无效的部门ID参数')
|
||||
return
|
||||
}
|
||||
const res = await getDepMembers(params)
|
||||
if (res.status === 0) {
|
||||
@ -988,8 +1032,11 @@ const checkMember = (item, val) => {
|
||||
watch(
|
||||
() => currentCrumbs.value,
|
||||
(newValue, oldValue) => {
|
||||
getCurrentMembers(newValue)
|
||||
if (newValue?.ID && (state.chooseMode === 2 || state.chooseMode === 3)) {
|
||||
getCurrentMembers(newValue)
|
||||
}
|
||||
},
|
||||
{ immediate: true },
|
||||
)
|
||||
|
||||
const deleteMember = (item) => {
|
||||
|
@ -5,7 +5,7 @@ import { userInfoApi } from "@/api/user";
|
||||
import {ref} from 'vue'
|
||||
export const useAuth = createGlobalState(() => {
|
||||
// const token = useStorage('token', '', uniStorage)
|
||||
const token = ref("79b5c732d96d2b27a48a99dfd4a5566c43aaa5796242e854ebe3ffc198d6876b9628e7b764d9af65ab5dbb2d517ced88170491b74b048c0ba827c0d3741462cb89dc59ed46653a449af837a8262941caba0afc18e7cb819d125e8c04282beb5d4dd454307169f7eb51cd3dbbee20c1a17784f78ad30c3b3a102bd03c3218080beedae501a95c365d360a7a0d682cba2eca94a2915c13f0bdcb42f2eab9458cb4bd89ae6f3200fe4893d64caf1bce02894aab876f94f7825d23be507733468deba21734b6d666b75fd0bee74753fdd6ca5def7ec42cd7dbb47750e61cac6965f34fd71b52be66a472d3ee5b1e4661e59da7e6afd4318037c409b3045facceba2de00b33c8a3a6021cb08123b05176e907ca588faf86a3f1e7113f4a6c56227873d1e087c79aa53c4b4a2cf73722a967ee5ebb5963486f9b25179fb3d37da14482")
|
||||
const token = ref('79b5c732d96d2b27a48a99dfd4a5566c43aaa5796242e854ebe3ffc198d6876b9628e7b764d9af65ab5dbb2d517ced88170491b74b048c0ba827c0d3741462cb89dc59ed46653a449af837a8262941caaef1334d640773710f8cd96473bacfb190cba595a5d6a9c87d70f0999a3ebb41147213b31b4bdccffca66a56acf3baab5af0154f0dce360079f37709f78e13711036899344bddb0fb4cf0f2890287cb62c3fcbe33368caa5e213624577be8b8420ab75b1f50775ee16142a4321c5d56995f37354a66a969da98d95ba6e65d142ed097e04b411c1ebad2f62866d0ec7e1838420530a9941dbbcd00490199f8b8989ec7fe774a82b3f1c4a71a1a6338dec73760f6e72184147caceb1e8a1884e7251c809c440eb394f5df08a384a639a4710527561343785f238745ba9057ec3d4d5fdf5130d4666761c69db08d31abb01')
|
||||
const refreshToken = useStorage('refreshToken', '', uniStorage)
|
||||
const userInfo = useStorage('userInfo', {}, uniStorage)
|
||||
const leaderList = useStorage('leaderList', [], uniStorage)
|
||||
|
@ -22,8 +22,9 @@ export const useGroupTypeStore = createGlobalState(() => {
|
||||
const departmentAllPositions = ref([]) //部门下所有岗位
|
||||
const crumbs = ref([])
|
||||
const crumbsIndex = ref(0)
|
||||
const depCheckedKeys = ref([]) // 选中的部门keys
|
||||
const depCheckedKeys = ref([]) // 部门选择模式下,选中的部门keys
|
||||
const groupAdmins = ref([]) // 选中的管理员
|
||||
const memberDepCheckedKeys = ref([]) // 人员选择模式下,选中的部门keys
|
||||
const membersCheckedKeys = ref([]) // 选中的人员keys
|
||||
const allChooseMembers = ref([])
|
||||
|
||||
@ -63,6 +64,7 @@ export const useGroupTypeStore = createGlobalState(() => {
|
||||
crumbsIndex.value = 0
|
||||
depCheckedKeys.value = []
|
||||
groupAdmins.value = []
|
||||
memberDepCheckedKeys.value = []
|
||||
membersCheckedKeys.value = []
|
||||
allChooseMembers.value = []
|
||||
}
|
||||
@ -132,6 +134,7 @@ export const useGroupTypeStore = createGlobalState(() => {
|
||||
createDepGroup,
|
||||
getDepMembers,
|
||||
membersCheckedKeys,
|
||||
memberDepCheckedKeys,
|
||||
allChooseMembers,
|
||||
getDepartmentPositionsById,
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user