组装部门和岗位对应树,并提供根据id查询

This commit is contained in:
wangyifeng 2025-01-17 13:56:06 +08:00
parent 656fe2e4db
commit 936f2eea86
3 changed files with 121 additions and 34 deletions

View File

@ -1,5 +1,5 @@
<template>
<div class="outer-layer manage-group-silence-page">
<div class="outer-layer manage-group-admin-page">
<div class="root">
<ZPaging ref="zPaging" :show-scrollbar="false">
<template #top>
@ -11,13 +11,30 @@
</div>
</tm-navbar>
</template>
<div class="manage-group-silence">
<span class="manage-group-silence-title text-[28rpx] font-regular">
<div class="manage-group-admin">
<span class="manage-group-admin-title text-[28rpx] font-regular">
{{ $t('chat.settings.groupAdmin') }}
</span>
<div
class="add-silence-member-btn chat-settings-card"
class="group-admin-list chat-settings-card"
:style="{
margin: state.groupAdminList.length > 0 ? '20rpx 0 0' : '',
}"
>
<div
class="group-admin-list-each"
v-for="(item, index) in state.groupAdminList"
:key="index"
>
<span>{{ item }}</span>
</div>
</div>
<div
class="add-admin-member-btn chat-settings-card"
@click="toSelectMembersPage"
:style="{
margin: state.groupAdminList.length == 0 ? '20rpx 0 0' : '',
}"
>
<img src="/src/static/image/chatSettings/add-btn.png" />
<span class="text-[28rpx] font-medium">
@ -25,11 +42,15 @@
</span>
</div>
</div>
<template #bottom>
<customBtn :isBottom="true" :btnText="$t('ok')"></customBtn>
</template>
</ZPaging>
</div>
</div>
</template>
<script setup>
import customBtn from '@/components/custom-btn/custom-btn.vue'
import ZPaging from '@/uni_modules/z-paging/components/z-paging/z-paging.vue'
import { onLoad } from '@dcloudio/uni-app'
import { computed, onMounted, reactive } from 'vue'
@ -45,14 +66,17 @@ const groupTypeParams = reactive({
postTreeList: computed(() => groupTypeStore.postTreeList),
})
const groupStore = useGroupStore()
const groupParams = reactive({
groupInfo: computed(() => groupStore.groupInfo),
})
const dialogueStore = useDialogueStore()
const dialogueParams = reactive({
adminList: computed(() => dialogueStore.getAdminList),
})
const state = reactive({
silenceAllBtn: null, //
groupAdminList: [], //
})
onLoad((options) => {
@ -61,10 +85,35 @@ onLoad((options) => {
onMounted(async () => {
console.log(dialogueParams.adminList)
await groupStore.ServeGroupDetail()
await groupTypeStore.getPositionsTree()
console.log(groupTypeParams)
console.log(groupParams.groupInfo)
console.log(groupTypeParams.postTreeList)
assembleDepartmentPositions()
})
//
const assembleDepartmentPositions = () => {
let deptPosArr = []
if (groupParams?.groupInfo?.deptInfos?.length > 0) {
if (groupParams?.groupInfo?.positionInfos?.length > 0) {
groupParams?.groupInfo?.deptInfos.forEach((deptInfo) => {
groupParams?.groupInfo?.positionInfos.forEach((positionInfo) => {
let deptPosItem = groupTypeStore.getDepartmentPositionsById(
deptInfo.dept_id,
positionInfo.position_id,
)
if (deptPosItem) {
deptPosArr.push(deptPosItem)
}
})
})
}
}
console.log(deptPosArr)
state.groupAdminList = deptPosArr
}
//
const toSelectMembersPage = () => {
uni.navigateTo({
@ -80,13 +129,21 @@ const toSelectMembersPage = () => {
background-repeat: no-repeat;
}
.manage-group-silence {
.manage-group-admin {
padding: 20rpx 32rpx;
.manage-group-silence-title {
.manage-group-admin-title {
line-height: 40rpx;
color: #959598;
}
.add-silence-member-btn {
.group-admin-list {
.group-admin-list-each {
padding: 36rpx 0;
margin: 0 32rpx;
border-bottom: 1px solid $theme-border-color;
}
}
.add-admin-member-btn {
padding: 32rpx;
display: flex;
flex-direction: row;
@ -105,7 +162,6 @@ const toSelectMembersPage = () => {
.chat-settings-card {
width: 100%;
background-color: #fff;
margin: 20rpx 0 0;
border-radius: 8rpx;
box-shadow: 0 6px 12px 2px rgba(188, 188, 188, 0.08);
}

View File

@ -4,8 +4,12 @@ import lodash from 'lodash'
import { ref } from 'vue'
import { createGlobalState, useStorage } from '@vueuse/core'
import {uniStorage} from "@/utils/uniStorage.js"
import {departmentV2TreeMy,departmentV2AllPosition,groupCreateDept} from '@/api/deps/index.js'
import { uniStorage } from '@/utils/uniStorage.js'
import {
departmentV2TreeMy,
departmentV2AllPosition,
groupCreateDept,
} from '@/api/deps/index.js'
export const useGroupTypeStore = createGlobalState(() => {
const groupName = ref('')
@ -34,11 +38,11 @@ export const useGroupTypeStore = createGlobalState(() => {
}
const resetGroupInfo = () => {
groupName.value = '';
groupActiveIndex.value = -1;
depTreeMyList.value = [];
postTreeList.value = [];
crumbs.value = [];
groupName.value = ''
groupActiveIndex.value = -1
depTreeMyList.value = []
postTreeList.value = []
crumbs.value = []
crumbsIndex.value = 0
depCheckedKeys.value = []
groupAdmins.value = []
@ -47,22 +51,48 @@ export const useGroupTypeStore = createGlobalState(() => {
const createDepGroup = async (param) => {
const res = await groupCreateDept({
name: groupName.value,
deptInfos:depCheckedKeys.value.map(v=>{
deptInfos: depCheckedKeys.value.map((v) => {
return {
dept_id: v.ID,
dept_name:v.name
dept_name: v.name,
}
}),
positionInfos:groupAdmins.value.map(v=>{
positionInfos: groupAdmins.value.map((v) => {
return {
position_id: v.ID,
position_name:v.name
position_name: v.name,
}
}),
})
})
return res;
return res
}
//通过部门Id和岗位Id得到部门和岗位的对应关系
const getDepartmentPositionsById = (departmentId, positionId) => {
return buildDepMap(postTreeList.value).get(`${departmentId}-${positionId}`)
}
//建立部门和岗位对应map
const buildDepMap = (departments) => {
const index = new Map()
function traverse(deps) {
for (let dep of deps) {
if (dep.positions && dep.positions.length > 0) {
dep.positions.forEach((position) => {
index.set(
`${dep.ID}-${position.ID}`,
dep.name + '-' + position.name,
)
})
}
if (dep.sons && dep.sons.length > 0) {
traverse(dep.sons)
}
}
}
traverse(departments)
return index
}
return {
groupName,
@ -77,5 +107,6 @@ export const useGroupTypeStore = createGlobalState(() => {
groupAdmins,
resetGroupInfo,
createDepGroup,
getDepartmentPositionsById
}
})

View File

@ -116,7 +116,7 @@
"chat.manage.addSilenceMember": "添加禁言成员",
"chatSettings.btn.undoSilence": "解禁",
"silence.tag.hasDone": "已禁言",
"chat.manage.addAdmin": "添加管理员",
"chat.manage.addAdmin": "添加管理员",
"search.condition.member": "按群成员查找",
"result.date.nowMonth": "这个月",
"user.detail.ringBell": "打电话",