完成部门群岗位管理员权限的设置、移除、查看
Some checks failed
Check / lint (push) Has been cancelled
Check / typecheck (push) Has been cancelled
Check / build (build, 18.x, ubuntu-latest) (push) Has been cancelled
Check / build (build, 18.x, windows-latest) (push) Has been cancelled
Check / build (build:app, 18.x, ubuntu-latest) (push) Has been cancelled
Check / build (build:app, 18.x, windows-latest) (push) Has been cancelled
Check / build (build:mp-weixin, 18.x, ubuntu-latest) (push) Has been cancelled
Check / build (build:mp-weixin, 18.x, windows-latest) (push) Has been cancelled
Some checks failed
Check / lint (push) Has been cancelled
Check / typecheck (push) Has been cancelled
Check / build (build, 18.x, ubuntu-latest) (push) Has been cancelled
Check / build (build, 18.x, windows-latest) (push) Has been cancelled
Check / build (build:app, 18.x, ubuntu-latest) (push) Has been cancelled
Check / build (build:app, 18.x, windows-latest) (push) Has been cancelled
Check / build (build:mp-weixin, 18.x, ubuntu-latest) (push) Has been cancelled
Check / build (build:mp-weixin, 18.x, windows-latest) (push) Has been cancelled
This commit is contained in:
parent
65eaefdbc3
commit
d516ce00ef
@ -3,7 +3,7 @@ import request from '@/service/index.js'
|
||||
export const departmentV2TreeMy = (data) => {
|
||||
return request({
|
||||
url: '/department/v2/tree/my',
|
||||
baseURL:import.meta.env.VITE_EPR_BASEURL,
|
||||
baseURL: import.meta.env.VITE_EPR_BASEURL,
|
||||
method: 'POST',
|
||||
data,
|
||||
})
|
||||
@ -12,7 +12,7 @@ export const departmentV2TreeMy = (data) => {
|
||||
export const departmentV2AllPosition = (data) => {
|
||||
return request({
|
||||
url: '/department/v2/tree/all/position',
|
||||
baseURL:import.meta.env.VITE_EPR_BASEURL,
|
||||
baseURL: import.meta.env.VITE_EPR_BASEURL,
|
||||
method: 'POST',
|
||||
data,
|
||||
})
|
||||
@ -21,7 +21,17 @@ export const departmentV2AllPosition = (data) => {
|
||||
export const departmentV2TreeAll = (data) => {
|
||||
return request({
|
||||
url: '/department/v2/tree/all',
|
||||
baseURL:import.meta.env.VITE_EPR_BASEURL,
|
||||
baseURL: import.meta.env.VITE_EPR_BASEURL,
|
||||
method: 'POST',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
//获取指定部门下的所有岗位
|
||||
export const v2TreePositionByDepartment = (data) => {
|
||||
return request({
|
||||
url: '/department/v2/position',
|
||||
baseURL: import.meta.env.VITE_EPR_BASEURL,
|
||||
method: 'POST',
|
||||
data,
|
||||
})
|
||||
@ -30,7 +40,7 @@ export const departmentV2TreeAll = (data) => {
|
||||
export const userV2List = (data) => {
|
||||
return request({
|
||||
url: '/user/v2/list',
|
||||
baseURL:import.meta.env.VITE_EPR_BASEURL,
|
||||
baseURL: import.meta.env.VITE_EPR_BASEURL,
|
||||
method: 'POST',
|
||||
data,
|
||||
})
|
||||
|
@ -224,3 +224,12 @@ export const ServeGroupNoSpeak = (data) => {
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
//修改公司群、部门群的部门和岗位
|
||||
export const ServeEditGroupAdmin = (data) => {
|
||||
return request({
|
||||
url: '/api/v1/group/edit-dept',
|
||||
method: 'POST',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
@ -2,6 +2,13 @@
|
||||
<div class="group-member-list">
|
||||
<div
|
||||
class="group-member-list-each"
|
||||
:style="{
|
||||
width: (
|
||||
props.memberListsLimit ? memberIndex < props.memberListsLimit : true
|
||||
)
|
||||
? ''
|
||||
: '0',
|
||||
}"
|
||||
v-for="(memberItem, memberIndex) in props?.memberList"
|
||||
@click="toUserDetailPage(memberItem)"
|
||||
>
|
||||
@ -21,7 +28,10 @@
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="group-member-tag" v-if="memberItem?.leader === 1">
|
||||
<div
|
||||
class="group-member-tag"
|
||||
v-if="memberItem?.leader === 1 || memberItem?.leader === 2"
|
||||
>
|
||||
<span class="text-[16rpx] font-regular">
|
||||
{{ $t('group.identify.admin') }}
|
||||
</span>
|
||||
@ -33,6 +43,26 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="group-member-list-each">
|
||||
<div class="group-member-each">
|
||||
<div class="group-member-avatar" :style="{ background: 'unset' }">
|
||||
<img src="/src/static/image/chatSettings/add-member.png" />
|
||||
</div>
|
||||
<div class="group-member-name">
|
||||
<span class="text-[24rpx] font-regular">添加</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="group-member-list-each" v-if="props?.is_manager">
|
||||
<div class="group-member-each">
|
||||
<div class="group-member-avatar" :style="{ background: 'unset' }">
|
||||
<img src="/src/static/image/chatSettings/remove-member.png" />
|
||||
</div>
|
||||
<div class="group-member-name">
|
||||
<span class="text-[24rpx] font-regular">移除</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
@ -40,13 +70,15 @@ import { defineProps } from 'vue'
|
||||
const props = defineProps({
|
||||
memberList: Array, //人员列表
|
||||
memberListsLimit: Number, //人员列表数量限制
|
||||
is_manager: Boolean, //是否管理员
|
||||
})
|
||||
|
||||
//点击跳转到用户详情页面
|
||||
const toUserDetailPage = (userItem) => {
|
||||
console.log(userItem.erp_user_id)
|
||||
uni.navigateTo({
|
||||
url: '/pages/dialog/dialogDetail/userDetail?erpUserId=' + userItem.erp_user_id,
|
||||
url:
|
||||
'/pages/dialog/dialogDetail/userDetail?erpUserId=' + userItem.erp_user_id,
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
@ -13,8 +13,10 @@
|
||||
<div
|
||||
class="select-member-item-avatar"
|
||||
v-if="
|
||||
props?.manageType === 'silence' ||
|
||||
props?.manageType === 'searchRecord'
|
||||
!(
|
||||
(props?.groupType == 2 || props?.groupType == 4) &&
|
||||
props?.manageType === 'admin'
|
||||
)
|
||||
"
|
||||
>
|
||||
<img v-if="avatarImg !== 'textImg'" :src="avatarImg" />
|
||||
@ -22,25 +24,33 @@
|
||||
{{ imgText }}
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
class="select-member-item-name"
|
||||
v-if="
|
||||
props?.manageType === 'silence' ||
|
||||
props?.manageType === 'searchRecord'
|
||||
"
|
||||
>
|
||||
<div class="select-member-item-name">
|
||||
<span class="text-[28rpx] font-medium">{{ nameText }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="operate-btns">
|
||||
<div class="btn-undo-silence">
|
||||
<span
|
||||
v-if="props?.memberItem?.is_mute === 1"
|
||||
class="text-[28rpx] font-regular"
|
||||
>
|
||||
<div class="select-member-tags">
|
||||
<div
|
||||
class="done-silence-tag"
|
||||
v-if="
|
||||
props?.memberItem?.is_mute === 1 && props?.manageType === 'silence'
|
||||
"
|
||||
>
|
||||
<span class="text-[28rpx] font-regular">
|
||||
{{ $t('silence.tag.hasDone') }}
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
class="is-admin-tag"
|
||||
v-if="
|
||||
(props?.memberItem?.leader === 1 ||
|
||||
props?.memberItem?.leader === 2) &&
|
||||
props?.manageType === 'admin'
|
||||
"
|
||||
>
|
||||
<span class="text-[28rpx] font-regular">
|
||||
{{ $t('group.identify.admin') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -54,6 +64,7 @@ const props = defineProps({
|
||||
memberItem: Object, //人员
|
||||
manageType: String, //管理类型
|
||||
itemStyle: String,
|
||||
groupType: Number, //群类型
|
||||
})
|
||||
onMounted(() => {})
|
||||
|
||||
@ -123,8 +134,17 @@ const clickItem = () => {
|
||||
}
|
||||
}
|
||||
}
|
||||
.operate-btns {
|
||||
.btn-undo-silence {
|
||||
.select-member-tags {
|
||||
.done-silence-tag {
|
||||
span {
|
||||
color: #b4b4b4;
|
||||
line-height: 40rpx;
|
||||
}
|
||||
}
|
||||
.is-admin-tag {
|
||||
padding: 6rpx 12rpx;
|
||||
border: 2rpx solid #b4b4b4;
|
||||
border-radius: 8rpx;
|
||||
span {
|
||||
color: #b4b4b4;
|
||||
line-height: 40rpx;
|
||||
|
@ -125,6 +125,10 @@ const changeSwitch = (e, item) => {
|
||||
|
||||
.item-sub {
|
||||
margin: 28rpx 0 0;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
max-width: 100%;
|
||||
text-overflow: ellipsis;
|
||||
span {
|
||||
line-height: 44rpx;
|
||||
color: #747474;
|
||||
|
@ -17,11 +17,6 @@
|
||||
</div>
|
||||
</div>
|
||||
<customBtn :btnText="$t('button.text.edit')"></customBtn>
|
||||
<template #bottom>
|
||||
<div class="app-logo-icon">
|
||||
<img src="/src/static/image/chatSettings/app-icon.png" />
|
||||
</div>
|
||||
</template>
|
||||
</ZPaging>
|
||||
</div>
|
||||
</div>
|
||||
@ -58,9 +53,10 @@ const confirmEdit = () => {
|
||||
<style scoped lang="scss">
|
||||
.outer-layer {
|
||||
flex: 1;
|
||||
background-image: url('@/static/image/clockIn/z3280@3x.png');
|
||||
background-image: url('@/static/image/mine/background.png');
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
background-position:center bottom;
|
||||
}
|
||||
|
||||
.edit-group-info {
|
||||
@ -80,16 +76,4 @@ const confirmEdit = () => {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.app-logo-icon {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0 0 44rpx;
|
||||
img {
|
||||
width: 72rpx;
|
||||
height: 72rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
@ -18,22 +18,37 @@
|
||||
<div
|
||||
class="group-admin-list chat-settings-card"
|
||||
:style="{
|
||||
margin: state.groupAdminList.length > 0 ? '20rpx 0 0' : '',
|
||||
margin: state?.groupAdminList?.length > 0 ? '20rpx 0 0' : '',
|
||||
}"
|
||||
>
|
||||
<div
|
||||
class="group-admin-list-each"
|
||||
v-for="(item, index) in state.groupAdminList"
|
||||
v-for="(item, index) in state?.groupAdminList"
|
||||
:key="index"
|
||||
>
|
||||
<span>{{ item }}</span>
|
||||
<span>{{ item.deptPos }}</span>
|
||||
<div class="group-admin-list-each-btns">
|
||||
<img
|
||||
v-if="item.is_mine"
|
||||
src="/src/static/image/chatSettings/is-mine.png"
|
||||
/>
|
||||
<div
|
||||
class="group-admin-list-each-btns-each"
|
||||
v-if="!item.cannotRemove"
|
||||
@click="removeGroupAdmin(item)"
|
||||
>
|
||||
<span class="text-[28rpx] font-regular">
|
||||
{{ $t('chatSettings.btn.removeAdmin') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="add-admin-member-btn chat-settings-card"
|
||||
@click="toSelectMembersPage"
|
||||
:style="{
|
||||
margin: state.groupAdminList.length == 0 ? '20rpx 0 0' : '',
|
||||
margin: state?.groupAdminList.length == 0 ? '20rpx 0 0' : '',
|
||||
}"
|
||||
>
|
||||
<img src="/src/static/image/chatSettings/add-btn.png" />
|
||||
@ -42,29 +57,24 @@
|
||||
</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'
|
||||
import { computed, onMounted, reactive, watch } from 'vue'
|
||||
|
||||
import { useGroupTypeStore } from '@/store/groupType'
|
||||
import { ServeEditGroupAdmin } from '@/api/group/index.js'
|
||||
import { useGroupStore, useDialogueStore } from '@/store'
|
||||
|
||||
import { useAuth } from '@/store/auth'
|
||||
const { userInfo } = useAuth()
|
||||
|
||||
import { useI18n } from 'vue-i18n'
|
||||
const { t } = useI18n()
|
||||
|
||||
const groupTypeStore = useGroupTypeStore()
|
||||
const groupTypeParams = reactive({
|
||||
postTreeList: computed(() => groupTypeStore.postTreeList),
|
||||
})
|
||||
const groupStore = useGroupStore()
|
||||
const groupParams = reactive({
|
||||
groupInfo: computed(() => groupStore.groupInfo),
|
||||
@ -72,46 +82,60 @@ const groupParams = reactive({
|
||||
const dialogueStore = useDialogueStore()
|
||||
const dialogueParams = reactive({
|
||||
adminList: computed(() => dialogueStore.getAdminList),
|
||||
receiverId: computed(() => dialogueStore.talk.receiver_id),
|
||||
})
|
||||
|
||||
const state = reactive({
|
||||
silenceAllBtn: null, //全员禁言按钮
|
||||
groupAdminList: [], //群管理员列表
|
||||
})
|
||||
|
||||
watch(
|
||||
() => groupParams?.groupInfo,
|
||||
(newGroupInfo) => {
|
||||
getGroupAdminList()
|
||||
},
|
||||
{ deep: true },
|
||||
)
|
||||
|
||||
onLoad((options) => {
|
||||
console.log(options)
|
||||
})
|
||||
|
||||
onMounted(async () => {
|
||||
console.log(dialogueParams.adminList)
|
||||
await groupStore.ServeGroupDetail()
|
||||
await groupTypeStore.getPositionsTree()
|
||||
console.log(groupParams.groupInfo)
|
||||
console.log(groupTypeParams.postTreeList)
|
||||
assembleDepartmentPositions()
|
||||
getGroupAdminList()
|
||||
})
|
||||
|
||||
//组装部门和岗位对应关系数据
|
||||
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)
|
||||
//加载群聊管理员列表
|
||||
const getGroupAdminList = () => {
|
||||
let myPositionsList = []
|
||||
if (groupParams?.groupInfo?.groupAdminList?.length > 0) {
|
||||
groupParams?.groupInfo?.groupAdminList.forEach((groupAdminItem) => {
|
||||
if (userInfo?.value?.PositionUsers?.length > 0) {
|
||||
userInfo?.value?.PositionUsers.forEach((item) => {
|
||||
// console.log(item.DepartmentId + '-' + item.PositionID)
|
||||
if (item.PositionID === groupAdminItem.position_id) {
|
||||
myPositionsList.push(groupAdminItem)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
console.log(deptPosArr)
|
||||
state.groupAdminList = deptPosArr
|
||||
if (
|
||||
groupParams?.groupInfo?.groupAdminList?.length > 0 &&
|
||||
myPositionsList?.length > 0
|
||||
) {
|
||||
groupParams.groupInfo.groupAdminList.forEach((ele) => {
|
||||
myPositionsList.forEach((item) => {
|
||||
if (ele.deptPos === item.deptPos) {
|
||||
item.is_mine = true
|
||||
if (myPositionsList?.length == 1) {
|
||||
item.cannotRemove = true
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
state.groupAdminList = groupParams?.groupInfo?.groupAdminList
|
||||
}
|
||||
|
||||
//点击跳转到添加禁言成员页面
|
||||
@ -120,6 +144,40 @@ const toSelectMembersPage = () => {
|
||||
url: '/pages/chatSettings/groupManage/selectMembers?manageType=admin',
|
||||
})
|
||||
}
|
||||
|
||||
//点击移除群管理员
|
||||
const removeGroupAdmin = (adminItem) => {
|
||||
let positionInfos = []
|
||||
if (state?.groupAdminList?.length > 0) {
|
||||
state?.groupAdminList.forEach((item) => {
|
||||
if (
|
||||
item.dept_id != adminItem.dept_id ||
|
||||
item.position_id != adminItem.position_id
|
||||
) {
|
||||
positionInfos.push({
|
||||
position_id: item.position_id,
|
||||
position_name: item.deptPos,
|
||||
})
|
||||
}
|
||||
})
|
||||
let params = {
|
||||
source: 'app',
|
||||
id: dialogueParams.receiverId,
|
||||
deptInfos: groupParams.groupInfo.deptInfos,
|
||||
positionInfos: positionInfos,
|
||||
}
|
||||
console.log(params)
|
||||
const resp = ServeEditGroupAdmin(params)
|
||||
resp.then(({ code, data }) => {
|
||||
console.log(data)
|
||||
if (code == 200) {
|
||||
groupStore.ServeGroupDetail()
|
||||
} else {
|
||||
}
|
||||
})
|
||||
resp.catch(() => {})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.outer-layer {
|
||||
@ -141,6 +199,33 @@ const toSelectMembersPage = () => {
|
||||
padding: 36rpx 0;
|
||||
margin: 0 32rpx;
|
||||
border-bottom: 1px solid $theme-border-color;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
.group-admin-list-each-btns {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
img {
|
||||
width: 52rpx;
|
||||
height: 52rpx;
|
||||
}
|
||||
.group-admin-list-each-btns-each {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 10rpx 30rpx;
|
||||
border: 2rpx solid #eeeeee;
|
||||
margin: 0 0 0 20rpx;
|
||||
span {
|
||||
line-height: 40rpx;
|
||||
color: #191919;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.add-admin-member-btn {
|
||||
|
@ -105,6 +105,7 @@
|
||||
>
|
||||
<tm-checkbox-group v-model="item.checkArr">
|
||||
<selectMemberItem
|
||||
:groupType="groupParams.groupInfo.group_type"
|
||||
:memberItem="item"
|
||||
@clickItem="handleClickItem(item)"
|
||||
:manageType="state.manageType"
|
||||
@ -122,12 +123,21 @@
|
||||
item?.checkArr?.length > 0 ? '#46299d' : '#B4B4B4'
|
||||
"
|
||||
:outlined="
|
||||
item?.checkArr?.length > 0 || item.is_mute === 1
|
||||
item?.checkArr?.length > 0 ||
|
||||
(state.manageType === 'silence' &&
|
||||
item.is_mute === 1) ||
|
||||
(state.manageType === 'admin' &&
|
||||
(item.leader === 1 || item.leader === 2))
|
||||
? false
|
||||
: true
|
||||
"
|
||||
:value="item.id"
|
||||
:disabled="item.is_mute === 1"
|
||||
:disabled="
|
||||
(state.manageType === 'silence' &&
|
||||
item.is_mute === 1) ||
|
||||
(state.manageType === 'admin' &&
|
||||
(item.leader === 1 || item.leader === 2))
|
||||
"
|
||||
></tm-checkbox>
|
||||
</template>
|
||||
</selectMemberItem>
|
||||
@ -156,22 +166,23 @@ import ZPaging from '@/uni_modules/z-paging/components/z-paging/z-paging.vue'
|
||||
import useZPaging from '@/uni_modules/z-paging/components/z-paging/js/hooks/useZPaging.js'
|
||||
import { computed, onMounted, reactive, ref, watch, nextTick } from 'vue'
|
||||
import { onLoad } from '@dcloudio/uni-app'
|
||||
import { ServeGroupNoSpeak } from '@/api/group/index.js'
|
||||
import { useDialogueStore } from '@/store'
|
||||
import { ServeGroupNoSpeak, ServeEditGroupAdmin } from '@/api/group/index.js'
|
||||
import { useDialogueStore, useGroupStore, useGroupTypeStore } from '@/store'
|
||||
|
||||
const zPaging = ref()
|
||||
useZPaging(zPaging)
|
||||
|
||||
const dialogueStore = useDialogueStore()
|
||||
const state = reactive({
|
||||
searchText: '', //搜索内容
|
||||
manageType: '', //管理类型
|
||||
alphabet: [], //A-Z列表
|
||||
resultMemberList: [], //按A-Z整理后的人员列表
|
||||
currentAlphabet: 'A', //当前A-Z位置
|
||||
scrollDirection: '', //当前列表滚动方向
|
||||
isAssign: false, //是否指定view
|
||||
const groupStore = useGroupStore()
|
||||
const groupParams = reactive({
|
||||
groupInfo: computed(() => groupStore.groupInfo),
|
||||
})
|
||||
|
||||
const groupTypeStore = useGroupTypeStore()
|
||||
const groupTypeParams = reactive({
|
||||
departmentAllPositions: computed(() => groupTypeStore.departmentAllPositions),
|
||||
})
|
||||
|
||||
const dialogueStore = useDialogueStore()
|
||||
const dialogueParams = reactive({
|
||||
memberList: computed(() => {
|
||||
const lowerCaseSearchText = state?.searchText.toLowerCase()
|
||||
@ -184,10 +195,28 @@ const dialogueParams = reactive({
|
||||
receiverId: computed(() => dialogueStore.talk.receiver_id),
|
||||
})
|
||||
|
||||
const state = reactive({
|
||||
searchText: '', //搜索内容
|
||||
manageType: '', //管理类型
|
||||
alphabet: [], //A-Z列表
|
||||
resultMemberList: [], //按A-Z整理后的人员列表
|
||||
currentAlphabet: 'A', //当前A-Z位置
|
||||
scrollDirection: '', //当前列表滚动方向
|
||||
isAssign: false, //是否指定view
|
||||
})
|
||||
|
||||
watch(
|
||||
() => dialogueParams?.memberList,
|
||||
(newMemberList) => {
|
||||
assembleAlphabetMmeberList(newMemberList)
|
||||
assembleAlphabetMemberList(newMemberList)
|
||||
},
|
||||
{ deep: true },
|
||||
)
|
||||
|
||||
watch(
|
||||
() => groupParams?.groupInfo,
|
||||
(newGroupInfo) => {
|
||||
assembleAlphabetMemberList(dialogueParams?.memberList)
|
||||
},
|
||||
{ deep: true },
|
||||
)
|
||||
@ -201,7 +230,7 @@ onLoad((options) => {
|
||||
console.log(options)
|
||||
if (options.manageType) {
|
||||
state.manageType = options.manageType
|
||||
assembleAlphabetMmeberList(dialogueParams?.memberList)
|
||||
assembleAlphabetMemberList(dialogueParams?.memberList)
|
||||
}
|
||||
})
|
||||
|
||||
@ -272,10 +301,21 @@ const inputSearchText = (e) => {
|
||||
|
||||
//点击item
|
||||
const handleClickItem = (item) => {
|
||||
if (item.is_mute === 1) {
|
||||
if (
|
||||
(state.manageType === 'silence' && item.is_mute === 1) ||
|
||||
(state.manageType === 'admin' && (item.leader === 1 || item.leader === 2))
|
||||
) {
|
||||
return
|
||||
}
|
||||
dialogueParams.memberList.forEach((ele) => {
|
||||
let itemList = dialogueParams.memberList
|
||||
if (
|
||||
state.manageType === 'admin' &&
|
||||
(groupParams.groupInfo.group_type == 2 ||
|
||||
groupParams.groupInfo.group_type == 4)
|
||||
) {
|
||||
itemList = state.resultMemberList[0].memberList
|
||||
}
|
||||
itemList.forEach((ele) => {
|
||||
if (ele.id == item.id) {
|
||||
ele.checkArr = ele.checkArr?.length > 0 ? [] : [item.id]
|
||||
}
|
||||
@ -285,7 +325,16 @@ const handleClickItem = (item) => {
|
||||
//点击确认要禁言的成员
|
||||
const confirmSilenceMember = () => {
|
||||
let selectedUserIds = ''
|
||||
dialogueParams.memberList.forEach((ele) => {
|
||||
let itemList = dialogueParams.memberList
|
||||
let positionInfos = []
|
||||
if (
|
||||
state.manageType === 'admin' &&
|
||||
(groupParams.groupInfo.group_type == 2 ||
|
||||
groupParams.groupInfo.group_type == 4)
|
||||
) {
|
||||
itemList = state.resultMemberList[0].memberList
|
||||
}
|
||||
itemList.forEach((ele) => {
|
||||
if (ele.checkArr?.length > 0) {
|
||||
if (!selectedUserIds) {
|
||||
selectedUserIds = String(ele.checkArr[0])
|
||||
@ -293,29 +342,59 @@ const confirmSilenceMember = () => {
|
||||
selectedUserIds += ',' + ele.checkArr[0]
|
||||
}
|
||||
}
|
||||
if (
|
||||
ele.checkArr?.length > 0 ||
|
||||
(ele.leader && (ele.leader == 1 || ele.leader == 2))
|
||||
) {
|
||||
positionInfos.push(ele.positionInfo)
|
||||
}
|
||||
})
|
||||
console.log(selectedUserIds)
|
||||
if (selectedUserIds) {
|
||||
let params = {
|
||||
mode: 1, //1禁言2解禁
|
||||
group_id: dialogueParams.receiverId, //群id
|
||||
user_ids: selectedUserIds, //用户ids
|
||||
}
|
||||
console.log(params)
|
||||
const resp = ServeGroupNoSpeak(params)
|
||||
resp.then(({ code, data }) => {
|
||||
console.log(data)
|
||||
if (code == 200) {
|
||||
useDialogueStore().updateGroupMembers()
|
||||
} else {
|
||||
if (state.manageType === 'silence') {
|
||||
let params = {
|
||||
mode: 1, //1禁言2解禁
|
||||
group_id: dialogueParams.receiverId, //群id
|
||||
user_ids: selectedUserIds, //用户ids
|
||||
}
|
||||
})
|
||||
resp.catch(() => {})
|
||||
console.log(params)
|
||||
const resp = ServeGroupNoSpeak(params)
|
||||
resp.then(({ code, data }) => {
|
||||
console.log(data)
|
||||
if (code == 200) {
|
||||
useDialogueStore().updateGroupMembers()
|
||||
} else {
|
||||
}
|
||||
})
|
||||
resp.catch(() => {})
|
||||
} else if (state.manageType === 'admin') {
|
||||
if (
|
||||
groupParams.groupInfo.group_type == 2 ||
|
||||
groupParams.groupInfo.group_type == 4
|
||||
) {
|
||||
let params = {
|
||||
source: 'app',
|
||||
id: dialogueParams.receiverId,
|
||||
deptInfos: groupParams.groupInfo.deptInfos,
|
||||
positionInfos: positionInfos,
|
||||
}
|
||||
console.log(params)
|
||||
const resp = ServeEditGroupAdmin(params)
|
||||
resp.then(({ code, data }) => {
|
||||
console.log(data)
|
||||
if (code == 200) {
|
||||
groupStore.ServeGroupDetail()
|
||||
} else {
|
||||
}
|
||||
})
|
||||
resp.catch(() => {})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//组装A-Z排序的人员列表
|
||||
const assembleAlphabetMmeberList = (newMemberList) => {
|
||||
const assembleAlphabetMemberList = async (newMemberList) => {
|
||||
if (state.manageType === 'searchRecord') {
|
||||
const resultMemberList = ref([])
|
||||
const alphabet = Array.from({ length: 26 }, (_, i) =>
|
||||
@ -335,12 +414,60 @@ const assembleAlphabetMmeberList = (newMemberList) => {
|
||||
state.alphabet = tempAlphabet
|
||||
state.resultMemberList = resultMemberList
|
||||
} else {
|
||||
state.resultMemberList = [
|
||||
{
|
||||
key: '',
|
||||
memberList: newMemberList,
|
||||
},
|
||||
]
|
||||
if (
|
||||
(groupParams.groupInfo.group_type == 2 ||
|
||||
groupParams.groupInfo.group_type == 4) &&
|
||||
state.manageType === 'admin'
|
||||
) {
|
||||
let departmentIdsArr = []
|
||||
if (groupParams?.groupInfo?.deptInfos?.length > 0) {
|
||||
groupParams.groupInfo.deptInfos.forEach((item) => {
|
||||
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,
|
||||
},
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
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,
|
||||
},
|
||||
]
|
||||
} else {
|
||||
state.resultMemberList = [
|
||||
{
|
||||
key: '',
|
||||
memberList: newMemberList,
|
||||
},
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -62,8 +62,9 @@
|
||||
@toManagePage="toManagePage"
|
||||
></settingFormItem>
|
||||
<groupMemberList
|
||||
:is_manager="groupParams?.groupInfo?.is_manager"
|
||||
:memberList="dialogueParams?.memberList"
|
||||
:memberListsLimit="15"
|
||||
:memberListsLimit="groupParams?.groupInfo?.is_manager ? 13 : 14"
|
||||
></groupMemberList>
|
||||
</div>
|
||||
</div>
|
||||
@ -371,9 +372,9 @@ const updateGroupInfos = () => {
|
||||
if (groupParams?.groupInfo.groupAdminList?.length > 0) {
|
||||
groupParams?.groupInfo.groupAdminList.forEach((item) => {
|
||||
if (!groupAdmins) {
|
||||
groupAdmins = item
|
||||
groupAdmins = item.deptPos
|
||||
} else {
|
||||
groupAdmins += ',' + item
|
||||
groupAdmins += ',' + item.deptPos
|
||||
}
|
||||
})
|
||||
}
|
||||
|
BIN
src/static/image/chatSettings/add-member.png
Normal file
BIN
src/static/image/chatSettings/add-member.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.0 KiB |
BIN
src/static/image/chatSettings/is-mine.png
Normal file
BIN
src/static/image/chatSettings/is-mine.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
BIN
src/static/image/chatSettings/remove-member.png
Normal file
BIN
src/static/image/chatSettings/remove-member.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
@ -2,16 +2,24 @@ import { defineStore } from 'pinia'
|
||||
import { useDialogueStore } from '@/store'
|
||||
import lodash from 'lodash'
|
||||
|
||||
import {ref} from 'vue'
|
||||
import {createGlobalState,useStorage} from '@vueuse/core'
|
||||
import {uniStorage} from "@/utils/uniStorage.js"
|
||||
import {departmentV2TreeMy,departmentV2AllPosition,groupCreateDept,departmentV2TreeAll,userV2List} from '@/api/deps/index.js'
|
||||
import { ref } from 'vue'
|
||||
import { createGlobalState, useStorage } from '@vueuse/core'
|
||||
import { uniStorage } from '@/utils/uniStorage.js'
|
||||
import {
|
||||
departmentV2TreeMy,
|
||||
departmentV2AllPosition,
|
||||
groupCreateDept,
|
||||
departmentV2TreeAll,
|
||||
userV2List,
|
||||
v2TreePositionByDepartment,
|
||||
} from '@/api/deps/index.js'
|
||||
|
||||
export const useGroupTypeStore = createGlobalState(() => {
|
||||
const groupName = ref('')
|
||||
const groupActiveIndex = ref(-1) // 当前激活的分组索引
|
||||
const depTreeMyList = ref([])
|
||||
const postTreeList = ref([])
|
||||
const departmentAllPositions = ref([]) //部门下所有岗位
|
||||
const crumbs = ref([])
|
||||
const crumbsIndex = ref(0)
|
||||
const depCheckedKeys = ref([]) // 选中的部门keys
|
||||
@ -19,13 +27,21 @@ export const useGroupTypeStore = createGlobalState(() => {
|
||||
const membersCheckedKeys = ref([]) // 选中的人员keys
|
||||
const allChooseMembers = ref([])
|
||||
|
||||
const getDepsTreeMy= async()=>{
|
||||
const getDepsTreeMy = async () => {
|
||||
const res = await departmentV2TreeAll()
|
||||
if(res.status===0){
|
||||
if (res.status === 0) {
|
||||
depTreeMyList.value = res.data.nodes
|
||||
}
|
||||
}
|
||||
|
||||
//获取指定部门下的所有岗位
|
||||
const getPositionByDepartment = async (params) => {
|
||||
const res = await v2TreePositionByDepartment(params)
|
||||
if (res.status === 0) {
|
||||
departmentAllPositions.value = res.data.data
|
||||
}
|
||||
}
|
||||
|
||||
const getPositionsTree = async () => {
|
||||
const res = await departmentV2AllPosition()
|
||||
if (res.status === 0) {
|
||||
@ -33,9 +49,9 @@ export const useGroupTypeStore = createGlobalState(() => {
|
||||
}
|
||||
}
|
||||
|
||||
const getDepMembers= async(param)=>{
|
||||
const getDepMembers = async (param) => {
|
||||
const res = await userV2List(param)
|
||||
return res;
|
||||
return res
|
||||
}
|
||||
|
||||
const resetGroupInfo = () => {
|
||||
@ -100,7 +116,9 @@ export const useGroupTypeStore = createGlobalState(() => {
|
||||
groupActiveIndex,
|
||||
depTreeMyList,
|
||||
postTreeList,
|
||||
departmentAllPositions,
|
||||
getDepsTreeMy,
|
||||
getPositionByDepartment,
|
||||
getPositionsTree,
|
||||
crumbs,
|
||||
crumbsIndex,
|
||||
@ -111,6 +129,6 @@ export const useGroupTypeStore = createGlobalState(() => {
|
||||
getDepMembers,
|
||||
membersCheckedKeys,
|
||||
allChooseMembers,
|
||||
getDepartmentPositionsById
|
||||
getDepartmentPositionsById,
|
||||
}
|
||||
})
|
||||
|
@ -73,7 +73,7 @@ export const useDialogueStore = defineStore('dialogue', {
|
||||
getSilenceMember: (state) =>
|
||||
state.members.filter((item) => item.is_mute === 1),
|
||||
//获取群管理员
|
||||
getAdminList: (state) => state.members.filter((item) => item.leader === 1),
|
||||
getAdminList: (state) => state.members.filter((item) => (item.leader === 1 || item.leader === 2)),
|
||||
},
|
||||
actions: {
|
||||
// 更新在线状态
|
||||
|
@ -41,7 +41,11 @@ export const useGroupStore = defineStore('group', {
|
||||
positionInfo.position_id,
|
||||
)
|
||||
if (deptPosItem) {
|
||||
deptPosArr.push(deptPosItem)
|
||||
deptPosArr.push({
|
||||
deptPos: deptPosItem,
|
||||
dept_id: deptInfo.dept_id,
|
||||
position_id: positionInfo.position_id,
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
@ -130,5 +130,6 @@
|
||||
"groupNotice.confirm.clear": "清空",
|
||||
"groupNotice.quit.edit": "退出本次编辑",
|
||||
"groupNotice.continue.edit": "继续编辑",
|
||||
"groupNotice.confirm.quit": "退出"
|
||||
"groupNotice.confirm.quit": "退出",
|
||||
"chatSettings.btn.removeAdmin": "移除"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user