组装部门和岗位对应树,并提供根据id查询
This commit is contained in:
parent
656fe2e4db
commit
936f2eea86
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="outer-layer manage-group-silence-page">
|
<div class="outer-layer manage-group-admin-page">
|
||||||
<div class="root">
|
<div class="root">
|
||||||
<ZPaging ref="zPaging" :show-scrollbar="false">
|
<ZPaging ref="zPaging" :show-scrollbar="false">
|
||||||
<template #top>
|
<template #top>
|
||||||
@ -11,13 +11,30 @@
|
|||||||
</div>
|
</div>
|
||||||
</tm-navbar>
|
</tm-navbar>
|
||||||
</template>
|
</template>
|
||||||
<div class="manage-group-silence">
|
<div class="manage-group-admin">
|
||||||
<span class="manage-group-silence-title text-[28rpx] font-regular">
|
<span class="manage-group-admin-title text-[28rpx] font-regular">
|
||||||
{{ $t('chat.settings.groupAdmin') }}
|
{{ $t('chat.settings.groupAdmin') }}
|
||||||
</span>
|
</span>
|
||||||
<div
|
<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"
|
@click="toSelectMembersPage"
|
||||||
|
:style="{
|
||||||
|
margin: state.groupAdminList.length == 0 ? '20rpx 0 0' : '',
|
||||||
|
}"
|
||||||
>
|
>
|
||||||
<img src="/src/static/image/chatSettings/add-btn.png" />
|
<img src="/src/static/image/chatSettings/add-btn.png" />
|
||||||
<span class="text-[28rpx] font-medium">
|
<span class="text-[28rpx] font-medium">
|
||||||
@ -25,11 +42,15 @@
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<template #bottom>
|
||||||
|
<customBtn :isBottom="true" :btnText="$t('ok')"></customBtn>
|
||||||
|
</template>
|
||||||
</ZPaging>
|
</ZPaging>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<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 ZPaging from '@/uni_modules/z-paging/components/z-paging/z-paging.vue'
|
||||||
import { onLoad } from '@dcloudio/uni-app'
|
import { onLoad } from '@dcloudio/uni-app'
|
||||||
import { computed, onMounted, reactive } from 'vue'
|
import { computed, onMounted, reactive } from 'vue'
|
||||||
@ -45,14 +66,17 @@ const groupTypeParams = reactive({
|
|||||||
postTreeList: computed(() => groupTypeStore.postTreeList),
|
postTreeList: computed(() => groupTypeStore.postTreeList),
|
||||||
})
|
})
|
||||||
const groupStore = useGroupStore()
|
const groupStore = useGroupStore()
|
||||||
|
const groupParams = reactive({
|
||||||
|
groupInfo: computed(() => groupStore.groupInfo),
|
||||||
|
})
|
||||||
const dialogueStore = useDialogueStore()
|
const dialogueStore = useDialogueStore()
|
||||||
|
|
||||||
const dialogueParams = reactive({
|
const dialogueParams = reactive({
|
||||||
adminList: computed(() => dialogueStore.getAdminList),
|
adminList: computed(() => dialogueStore.getAdminList),
|
||||||
})
|
})
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
silenceAllBtn: null, //全员禁言按钮
|
silenceAllBtn: null, //全员禁言按钮
|
||||||
|
groupAdminList: [], //群管理员列表
|
||||||
})
|
})
|
||||||
|
|
||||||
onLoad((options) => {
|
onLoad((options) => {
|
||||||
@ -61,10 +85,35 @@ onLoad((options) => {
|
|||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
console.log(dialogueParams.adminList)
|
console.log(dialogueParams.adminList)
|
||||||
|
await groupStore.ServeGroupDetail()
|
||||||
await groupTypeStore.getPositionsTree()
|
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 = () => {
|
const toSelectMembersPage = () => {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
@ -80,13 +129,21 @@ const toSelectMembersPage = () => {
|
|||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
.manage-group-silence {
|
.manage-group-admin {
|
||||||
padding: 20rpx 32rpx;
|
padding: 20rpx 32rpx;
|
||||||
.manage-group-silence-title {
|
.manage-group-admin-title {
|
||||||
line-height: 40rpx;
|
line-height: 40rpx;
|
||||||
color: #959598;
|
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;
|
padding: 32rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
@ -105,7 +162,6 @@ const toSelectMembersPage = () => {
|
|||||||
.chat-settings-card {
|
.chat-settings-card {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
margin: 20rpx 0 0;
|
|
||||||
border-radius: 8rpx;
|
border-radius: 8rpx;
|
||||||
box-shadow: 0 6px 12px 2px rgba(188, 188, 188, 0.08);
|
box-shadow: 0 6px 12px 2px rgba(188, 188, 188, 0.08);
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,14 @@ import { defineStore } from 'pinia'
|
|||||||
import { useDialogueStore } from '@/store'
|
import { useDialogueStore } from '@/store'
|
||||||
import lodash from 'lodash'
|
import lodash from 'lodash'
|
||||||
|
|
||||||
import {ref} from 'vue'
|
import { ref } from 'vue'
|
||||||
import {createGlobalState,useStorage} from '@vueuse/core'
|
import { createGlobalState, useStorage } from '@vueuse/core'
|
||||||
import {uniStorage} from "@/utils/uniStorage.js"
|
import { uniStorage } from '@/utils/uniStorage.js'
|
||||||
import {departmentV2TreeMy,departmentV2AllPosition,groupCreateDept} from '@/api/deps/index.js'
|
import {
|
||||||
|
departmentV2TreeMy,
|
||||||
|
departmentV2AllPosition,
|
||||||
|
groupCreateDept,
|
||||||
|
} from '@/api/deps/index.js'
|
||||||
|
|
||||||
export const useGroupTypeStore = createGlobalState(() => {
|
export const useGroupTypeStore = createGlobalState(() => {
|
||||||
const groupName = ref('')
|
const groupName = ref('')
|
||||||
@ -16,29 +20,29 @@ export const useGroupTypeStore = createGlobalState(() => {
|
|||||||
const crumbsIndex = ref(0)
|
const crumbsIndex = ref(0)
|
||||||
const depCheckedKeys = ref([]) // 选中的部门keys
|
const depCheckedKeys = ref([]) // 选中的部门keys
|
||||||
const groupAdmins = ref([]) // 选中的管理员
|
const groupAdmins = ref([]) // 选中的管理员
|
||||||
|
|
||||||
// const halfCheckedKeys = ref([])
|
// const halfCheckedKeys = ref([])
|
||||||
|
|
||||||
const getDepsTreeMy= async()=>{
|
const getDepsTreeMy = async () => {
|
||||||
const res = await departmentV2TreeMy()
|
const res = await departmentV2TreeMy()
|
||||||
if(res.status===0){
|
if (res.status === 0) {
|
||||||
depTreeMyList.value = res.data.nodes
|
depTreeMyList.value = res.data.nodes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const getPositionsTree= async()=>{
|
const getPositionsTree = async () => {
|
||||||
const res = await departmentV2AllPosition()
|
const res = await departmentV2AllPosition()
|
||||||
if(res.status===0){
|
if (res.status === 0) {
|
||||||
postTreeList.value = res.data.nodes
|
postTreeList.value = res.data.nodes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const resetGroupInfo = () => {
|
const resetGroupInfo = () => {
|
||||||
groupName.value = '';
|
groupName.value = ''
|
||||||
groupActiveIndex.value = -1;
|
groupActiveIndex.value = -1
|
||||||
depTreeMyList.value = [];
|
depTreeMyList.value = []
|
||||||
postTreeList.value = [];
|
postTreeList.value = []
|
||||||
crumbs.value = [];
|
crumbs.value = []
|
||||||
crumbsIndex.value = 0
|
crumbsIndex.value = 0
|
||||||
depCheckedKeys.value = []
|
depCheckedKeys.value = []
|
||||||
groupAdmins.value = []
|
groupAdmins.value = []
|
||||||
@ -46,23 +50,49 @@ export const useGroupTypeStore = createGlobalState(() => {
|
|||||||
|
|
||||||
const createDepGroup = async (param) => {
|
const createDepGroup = async (param) => {
|
||||||
const res = await groupCreateDept({
|
const res = await groupCreateDept({
|
||||||
name:groupName.value,
|
name: groupName.value,
|
||||||
deptInfos:depCheckedKeys.value.map(v=>{
|
deptInfos: depCheckedKeys.value.map((v) => {
|
||||||
return {
|
return {
|
||||||
dept_id:v.ID,
|
dept_id: v.ID,
|
||||||
dept_name:v.name
|
dept_name: v.name,
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
positionInfos:groupAdmins.value.map(v=>{
|
positionInfos: groupAdmins.value.map((v) => {
|
||||||
return {
|
return {
|
||||||
position_id:v.ID,
|
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 {
|
return {
|
||||||
groupName,
|
groupName,
|
||||||
@ -77,5 +107,6 @@ export const useGroupTypeStore = createGlobalState(() => {
|
|||||||
groupAdmins,
|
groupAdmins,
|
||||||
resetGroupInfo,
|
resetGroupInfo,
|
||||||
createDepGroup,
|
createDepGroup,
|
||||||
|
getDepartmentPositionsById
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -116,7 +116,7 @@
|
|||||||
"chat.manage.addSilenceMember": "添加禁言成员",
|
"chat.manage.addSilenceMember": "添加禁言成员",
|
||||||
"chatSettings.btn.undoSilence": "解禁",
|
"chatSettings.btn.undoSilence": "解禁",
|
||||||
"silence.tag.hasDone": "已禁言",
|
"silence.tag.hasDone": "已禁言",
|
||||||
"chat.manage.addAdmin": "添加管理员",
|
"chat.manage.addAdmin": "添加群管理员",
|
||||||
"search.condition.member": "按群成员查找",
|
"search.condition.member": "按群成员查找",
|
||||||
"result.date.nowMonth": "这个月",
|
"result.date.nowMonth": "这个月",
|
||||||
"user.detail.ringBell": "打电话",
|
"user.detail.ringBell": "打电话",
|
||||||
|
Loading…
Reference in New Issue
Block a user