diff --git a/src/pages.json b/src/pages.json index 6126852..8e516c8 100644 --- a/src/pages.json +++ b/src/pages.json @@ -38,22 +38,6 @@ "enablePullDownRefresh": false } }, - { - "path": "pages/chooseDeps/index", - "type": "page", - "style": { - "navigationStyle": "custom", - "enablePullDownRefresh": false - } - }, - { - "path": "pages/chooseMembers/index", - "type": "page", - "style": { - "navigationStyle": "custom", - "enablePullDownRefresh": false - } - }, { "path": "pages/chooseGroupAdmin/index", "type": "page", diff --git a/src/pages/chatSettings/components/groupMembersList.vue b/src/pages/chatSettings/components/groupMembersList.vue index dc2e48c..71e02ba 100644 --- a/src/pages/chatSettings/components/groupMembersList.vue +++ b/src/pages/chatSettings/components/groupMembersList.vue @@ -46,7 +46,10 @@
@@ -61,7 +64,9 @@ class="group-member-list-each" @click="groupRemoveMembers" v-if=" - props?.is_manager && (props?.groupType == 1 || props?.groupType == 3) + props?.is_manager && + (props?.groupType == 1 || props?.groupType == 3) && + !props?.hideAddRemoveBtns " >
@@ -82,6 +87,7 @@ const props = defineProps({ memberListsLimit: Number, //人员列表数量限制 is_manager: Boolean, //是否管理员 groupType: Number, //群类型 + hideAddRemoveBtns: Boolean, //是否隐藏添加移除按钮 }) //点击跳转到用户详情页面 @@ -97,7 +103,7 @@ const toUserDetailPage = (userItem) => { //点击群聊拉人 const groupAddMembers = () => { uni.navigateTo({ - url: '/pages/chooseMembers/index', + url: '/pages/chooseByDeps/index?chooseMode=2', }) } diff --git a/src/pages/chatSettings/groupManage/manageGroupAdmin.vue b/src/pages/chatSettings/groupManage/manageGroupAdmin.vue index 69c47ee..33a11f2 100644 --- a/src/pages/chatSettings/groupManage/manageGroupAdmin.vue +++ b/src/pages/chatSettings/groupManage/manageGroupAdmin.vue @@ -176,7 +176,7 @@ const getGroupAdminList = () => { } } -//点击跳转到添加禁言成员页面 +//点击跳转到添加管理员页面 const toSelectMembersPage = () => { uni.navigateTo({ url: '/pages/chatSettings/groupManage/selectMembers?manageType=admin', diff --git a/src/pages/chatSettings/groupManage/selectMembers.vue b/src/pages/chatSettings/groupManage/selectMembers.vue index 9a166c9..97ac25d 100644 --- a/src/pages/chatSettings/groupManage/selectMembers.vue +++ b/src/pages/chatSettings/groupManage/selectMembers.vue @@ -234,6 +234,7 @@ const state = reactive({ scrollDirection: '', //当前列表滚动方向 isAssign: false, //是否指定view selectedMembersNum: 0, //当前选中数量 + isCreateDepGroup: 0, //是否是创建部门群 }) watch( @@ -263,6 +264,10 @@ onLoad((options) => { state.manageType = options.manageType assembleAlphabetMemberList(dialogueParams?.memberList) } + if (options.isCreateDepGroup) { + state.isCreateDepGroup = Number(options.isCreateDepGroup) + assembleAlphabetMemberList() + } }) onMounted(() => { @@ -516,41 +521,16 @@ const assembleAlphabetMemberList = async (newMemberList) => { departmentIdsArr.push(item.dept_id) }) } - await groupTypeStore.getPositionByDepartment({ - IDs: departmentIdsArr, - }) - let departmentAllPositions = [] - if (groupTypeParams?.departmentAllPositions?.value?.length > 0) { - groupTypeParams?.departmentAllPositions?.value?.forEach((item) => { - item?.AllPositions?.forEach((positionItem) => { - departmentAllPositions.push({ - nickname: item.name + '-' + positionItem.name, - id: item.ID + '-' + positionItem.ID, - checkArr: [], - positionInfo: { - position_id: positionItem.ID, - position_name: positionItem.name, - }, - }) - }) + getPosiByDep(departmentIdsArr) + } else if (state.isCreateDepGroup === 1) { + console.log(groupTypeStore.depCheckedKeys) + let departmentIdsArr = [] + if (groupTypeStore?.depCheckedKeys?.length > 0) { + groupTypeStore.depCheckedKeys.forEach((item) => { + departmentIdsArr.push(item.ID) }) } - if (groupParams?.groupInfo?.groupAdminList?.length > 0) { - groupParams?.groupInfo?.groupAdminList.forEach((item) => { - departmentAllPositions.forEach((idsItem) => { - if (item.dept_id + '-' + item.position_id == idsItem.id) { - idsItem.leader = 1 - } - }) - }) - } - // console.log(departmentAllPositions) - state.resultMemberList = [ - { - key: '', - memberList: departmentAllPositions, - }, - ] + getPosiByDep(departmentIdsArr) } else { state.resultMemberList = [ { @@ -562,6 +542,44 @@ const assembleAlphabetMemberList = async (newMemberList) => { } } +const getPosiByDep = async (departmentIdsArr) => { + await groupTypeStore.getPositionByDepartment({ + IDs: departmentIdsArr, + }) + let departmentAllPositions = [] + if (groupTypeParams?.departmentAllPositions?.value?.length > 0) { + groupTypeParams?.departmentAllPositions?.value?.forEach((item) => { + item?.AllPositions?.forEach((positionItem) => { + departmentAllPositions.push({ + nickname: item.name + '-' + positionItem.name, + id: item.ID + '-' + positionItem.ID, + checkArr: [], + positionInfo: { + position_id: positionItem.ID, + position_name: positionItem.name, + }, + }) + }) + }) + } + if (groupParams?.groupInfo?.groupAdminList?.length > 0) { + groupParams?.groupInfo?.groupAdminList.forEach((item) => { + departmentAllPositions.forEach((idsItem) => { + if (item.dept_id + '-' + item.position_id == idsItem.id) { + idsItem.leader = 1 + } + }) + }) + } + // console.log(departmentAllPositions) + state.resultMemberList = [ + { + key: '', + memberList: departmentAllPositions, + }, + ] +} + //滚动到指定的view const scrollToView = (alphabet) => { state.currentAlphabet = alphabet diff --git a/src/pages/chatSettings/index.vue b/src/pages/chatSettings/index.vue index c328fb5..915efdb 100644 --- a/src/pages/chatSettings/index.vue +++ b/src/pages/chatSettings/index.vue @@ -185,7 +185,11 @@ import { useGroupTypeStore, } from '@/store' import { onLoad } from '@dcloudio/uni-app' -import { ServeInviteGroup, ServeDismissGroup } from '@/api/group/index' +import { + ServeInviteGroup, + ServeDismissGroup, + ServeSecedeGroup, +} from '@/api/group/index' import { ServeTopTalkList, ServeSetNotDisturb } from '@/api/chat/index' import { useI18n } from 'vue-i18n' const { t } = useI18n() @@ -566,6 +570,15 @@ const showConfirmPrompt = (flag) => { delta: 2, }) } + } else if (flag === 3) { + ServeSecedeGroup({ + group_id: dialogueParams.receiver_id, + }).then(({ code, message }) => { + if (code == 200) { + // dialogueStore.apiClearRecord() + } else { + } + }) } }, onCancel: () => {}, diff --git a/src/pages/chooseByDeps/index.vue b/src/pages/chooseByDeps/index.vue index b5156c1..afeb385 100644 --- a/src/pages/chooseByDeps/index.vue +++ b/src/pages/chooseByDeps/index.vue @@ -91,7 +91,11 @@
@@ -178,7 +182,10 @@ {{ item.jobNum }}
- +
@@ -471,7 +478,22 @@ const allCheckedList = computed(() => { const currentCrumbs = computed(() => { if (crumbs.value[crumbsIndex.value]) { if (searchVal.value && searchVal.value !== '') { - let filterSons = crumbs.value[crumbsIndex.value].sons.filter((item) => + // let searchDepKeysArr = [] + // let searchDepsArr = [] + // searchDepKeysArr = Array.from( + // buildDepsMap(crumbs.value).keys(), + // ).filter((key) => key.includes(searchVal.value)) + // console.log(searchDepKeysArr) + // if (searchDepKeysArr.length > 0) { + // searchDepKeysArr.forEach((key) => { + // searchDepsArr.push(buildDepsMap(crumbs.value).get(key)) + // }) + // } + // return { + // ...crumbs.value[crumbsIndex.value], + // sons: searchDepsArr, + // } + let filterSons = crumbs.value[crumbsIndex.value].sons?.filter((item) => item.name.includes(searchVal.value), ) return { @@ -485,6 +507,20 @@ const currentCrumbs = computed(() => { return {} }) +const buildDepsMap = (departments) => { + const index = new Map() + function traverse(deps) { + for (let dep of deps) { + index.set(`${dep.name}`, dep) + if (dep?.sons?.length > 0) { + traverse(dep.sons) + } + } + } + traverse(departments) + return index +} + const allCheckStatus = computed(() => { if (!currentCrumbs.value.sons) { return 'noChecked' @@ -650,18 +686,19 @@ const openDrawer = () => { const handleConfirm = async () => { if (state.chooseMode === 2) { const listT = membersCheckedKeys.value.map((v) => v) - const res = await getDepMembers({ - departmentIds: allCheckedList.value.map((v) => v.ID), - status: 'notactive', - }) - if (res.status == 0 && res.data?.data?.length) { - res.data?.data.forEach((v) => { - listT.push(v) + if (allCheckedList?.value?.length > 0) { + const res = await getDepMembers({ + departmentIds: allCheckedList.value.map((v) => v.ID), + status: 'notactive', }) + if (res.status == 0 && res.data?.data?.length) { + res.data?.data.forEach((v) => { + listT.push(v) + }) + } } allChooseMembers.value = listT } - depCheckedKeys.value = lodash.cloneDeep(allCheckedList.value) console.log('depCheckedKeys', depCheckedKeys.value) uni.navigateBack() @@ -704,12 +741,24 @@ const calculateTotalStaffNum = (node) => { } const getCurrentMembers = async (depItem) => { - const res = await getDepMembers({ + if (state.chooseMode === 1) { + currentMembers.value = [] + return + } + let params = { departmentId: depItem.ID, status: 'notactive', - }) + } + if (searchVal.value) { + delete params.departmentId + params = Object.assign({}, params, { + fatherDepartmentId: depItem.ID, + nickName: searchVal.value, + }) + } + const res = await getDepMembers(params) if (res.status === 0) { - currentMembers.value = res.data.data.length + currentMembers.value = res?.data?.data?.length ? res.data.data.map((v) => { return { ...v, diff --git a/src/pages/chooseGroupType/index.vue b/src/pages/chooseGroupType/index.vue index fe7cc88..8c4987e 100644 --- a/src/pages/chooseGroupType/index.vue +++ b/src/pages/chooseGroupType/index.vue @@ -1,159 +1,195 @@ diff --git a/src/pages/creatGroupChat/index.vue b/src/pages/creatGroupChat/index.vue index 3aabea8..92c8039 100644 --- a/src/pages/creatGroupChat/index.vue +++ b/src/pages/creatGroupChat/index.vue @@ -116,9 +116,8 @@ :groupType="3" :is_manager="true" :memberList="allChooseMembers" - :memberListsLimit=" - groupActiveIndex == 0 || groupActiveIndex == 2 ? 13 : 15 - " + :memberListsLimit="15" + :hideAddRemoveBtns="true" >
@@ -242,13 +241,14 @@ const chooseGroupType = () => { const chooseGroupAdmin = () => { uni.navigateTo({ - url: '/pages/chooseGroupAdmin/index', + url: + '/pages/chatSettings/groupManage/selectMembers?manageType=admin&isCreateDepGroup=1', }) } const chooseMembers = () => { uni.navigateTo({ - url: '/pages/chooseMembers/index', + url: '/pages/chooseByDeps/index?chooseMode=2', }) } diff --git a/src/store/groupType/index.js b/src/store/groupType/index.js index 2167b2a..9b1220e 100644 --- a/src/store/groupType/index.js +++ b/src/store/groupType/index.js @@ -63,6 +63,8 @@ export const useGroupTypeStore = createGlobalState(() => { crumbsIndex.value = 0 depCheckedKeys.value = [] groupAdmins.value = [] + membersCheckedKeys.value = [] + allChooseMembers.value = [] } const createDepGroup = async (param) => { diff --git a/src/uni_modules/tmui/locale/zh-Hans.json b/src/uni_modules/tmui/locale/zh-Hans.json index 569c581..89a6db3 100644 --- a/src/uni_modules/tmui/locale/zh-Hans.json +++ b/src/uni_modules/tmui/locale/zh-Hans.json @@ -143,5 +143,6 @@ "radio.btn.selectAll": "全选", "choose.deps.nextLevel": "下级", "statistics.selected.deps": "已选择的部门数", - "chat.manage.addMembers": "添加群成员" + "chat.manage.addMembers": "添加群成员", + "pageTitle.select.groupType": "选择群类型" }