重构部分聊天详情页面;重构部分管理员选择页面
This commit is contained in:
parent
5c55411aa3
commit
2c063f3d4f
@ -9,6 +9,9 @@
|
|||||||
<template #left>
|
<template #left>
|
||||||
<slot name="left"></slot>
|
<slot name="left"></slot>
|
||||||
</template>
|
</template>
|
||||||
|
<template #subTitle>
|
||||||
|
<slot name="subTitle"></slot>
|
||||||
|
</template>
|
||||||
<template #right>
|
<template #right>
|
||||||
<slot name="right"></slot>
|
<slot name="right"></slot>
|
||||||
</template>
|
</template>
|
||||||
|
@ -210,16 +210,11 @@ const removeGroupAdmin = (adminItem) => {
|
|||||||
) {
|
) {
|
||||||
let positionInfos = []
|
let positionInfos = []
|
||||||
if (state?.groupAdminList?.length > 0) {
|
if (state?.groupAdminList?.length > 0) {
|
||||||
state?.groupAdminList.forEach((item) => {
|
positionInfos = state?.groupAdminList.filter((item) => {
|
||||||
if (
|
return (
|
||||||
item.dept_id != adminItem.dept_id ||
|
item.dept_id != adminItem.dept_id ||
|
||||||
item.position_id != adminItem.position_id
|
item.position_id != adminItem.position_id
|
||||||
) {
|
)
|
||||||
positionInfos.push({
|
|
||||||
position_id: item.position_id,
|
|
||||||
position_name: item.deptPos,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
let params = {
|
let params = {
|
||||||
source: 'app',
|
source: 'app',
|
||||||
|
@ -364,7 +364,8 @@ const handleClickItem = (item) => {
|
|||||||
if (
|
if (
|
||||||
state.manageType === 'admin' &&
|
state.manageType === 'admin' &&
|
||||||
(groupParams.groupInfo.group_type == 2 ||
|
(groupParams.groupInfo.group_type == 2 ||
|
||||||
groupParams.groupInfo.group_type == 4)
|
groupParams.groupInfo.group_type == 4 ||
|
||||||
|
state.isCreateDepGroup === 1)
|
||||||
) {
|
) {
|
||||||
itemList = state.resultMemberList[0].memberList
|
itemList = state.resultMemberList[0].memberList
|
||||||
}
|
}
|
||||||
@ -388,7 +389,8 @@ const confirmSelectMembers = () => {
|
|||||||
if (
|
if (
|
||||||
state.manageType === 'admin' &&
|
state.manageType === 'admin' &&
|
||||||
(groupParams.groupInfo.group_type == 2 ||
|
(groupParams.groupInfo.group_type == 2 ||
|
||||||
groupParams.groupInfo.group_type == 4)
|
groupParams.groupInfo.group_type == 4 ||
|
||||||
|
state.isCreateDepGroup === 1)
|
||||||
) {
|
) {
|
||||||
itemList = state.resultMemberList[0].memberList
|
itemList = state.resultMemberList[0].memberList
|
||||||
}
|
}
|
||||||
@ -404,7 +406,15 @@ const confirmSelectMembers = () => {
|
|||||||
ele.checkArr?.length > 0 ||
|
ele.checkArr?.length > 0 ||
|
||||||
(ele.leader && (ele.leader == 1 || ele.leader == 2))
|
(ele.leader && (ele.leader == 1 || ele.leader == 2))
|
||||||
) {
|
) {
|
||||||
positionInfos.push(ele.positionInfo)
|
if (state.isCreateDepGroup === 1) {
|
||||||
|
let posInfo = Object.assign({}, ele.positionInfo, {
|
||||||
|
name: ele.nickname,
|
||||||
|
id: ele.id,
|
||||||
|
})
|
||||||
|
positionInfos.push(posInfo)
|
||||||
|
} else {
|
||||||
|
positionInfos.push(ele.positionInfo)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
console.log(selectedUserIds)
|
console.log(selectedUserIds)
|
||||||
@ -426,45 +436,53 @@ const confirmSelectMembers = () => {
|
|||||||
})
|
})
|
||||||
resp.catch(() => {})
|
resp.catch(() => {})
|
||||||
} else if (state.manageType === 'admin') {
|
} else if (state.manageType === 'admin') {
|
||||||
if (
|
if (state.isCreateDepGroup === 1) {
|
||||||
groupParams.groupInfo.group_type == 1 ||
|
// console.log(positionInfos)
|
||||||
groupParams.groupInfo.group_type == 3
|
groupTypeStore.groupAdmins.value = positionInfos
|
||||||
) {
|
uni.navigateBack({
|
||||||
let params = {
|
delta: 1,
|
||||||
mode: 1, //1管理员,2不是管理员
|
|
||||||
group_id: dialogueParams.receiverId, //群id
|
|
||||||
user_ids: selectedUserIds,
|
|
||||||
}
|
|
||||||
console.log(params)
|
|
||||||
const resp = ServeGroupAssignAdmin(params)
|
|
||||||
resp.then(({ code, data }) => {
|
|
||||||
console.log(data)
|
|
||||||
if (code == 200) {
|
|
||||||
useDialogueStore().updateGroupMembers()
|
|
||||||
} else {
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
resp.catch(() => {})
|
} else {
|
||||||
} else if (
|
if (
|
||||||
groupParams.groupInfo.group_type == 2 ||
|
groupParams.groupInfo.group_type == 1 ||
|
||||||
groupParams.groupInfo.group_type == 4
|
groupParams.groupInfo.group_type == 3
|
||||||
) {
|
) {
|
||||||
let params = {
|
let params = {
|
||||||
source: 'app',
|
mode: 1, //1管理员,2不是管理员
|
||||||
id: dialogueParams.receiverId,
|
group_id: dialogueParams.receiverId, //群id
|
||||||
deptInfos: groupParams.groupInfo.deptInfos,
|
user_ids: selectedUserIds,
|
||||||
positionInfos: positionInfos,
|
|
||||||
}
|
|
||||||
console.log(params)
|
|
||||||
const resp = ServeEditGroupAdmin(params)
|
|
||||||
resp.then(({ code, data }) => {
|
|
||||||
console.log(data)
|
|
||||||
if (code == 200) {
|
|
||||||
groupStore.ServeGroupDetail()
|
|
||||||
} else {
|
|
||||||
}
|
}
|
||||||
})
|
console.log(params)
|
||||||
resp.catch(() => {})
|
const resp = ServeGroupAssignAdmin(params)
|
||||||
|
resp.then(({ code, data }) => {
|
||||||
|
console.log(data)
|
||||||
|
if (code == 200) {
|
||||||
|
useDialogueStore().updateGroupMembers()
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
})
|
||||||
|
resp.catch(() => {})
|
||||||
|
} else 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(() => {})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (state.manageType === 'removeMembers') {
|
} else if (state.manageType === 'removeMembers') {
|
||||||
let params = {
|
let params = {
|
||||||
@ -523,10 +541,9 @@ const assembleAlphabetMemberList = async (newMemberList) => {
|
|||||||
}
|
}
|
||||||
getPosiByDep(departmentIdsArr)
|
getPosiByDep(departmentIdsArr)
|
||||||
} else if (state.isCreateDepGroup === 1) {
|
} else if (state.isCreateDepGroup === 1) {
|
||||||
console.log(groupTypeStore.depCheckedKeys)
|
|
||||||
let departmentIdsArr = []
|
let departmentIdsArr = []
|
||||||
if (groupTypeStore?.depCheckedKeys?.length > 0) {
|
if (groupTypeStore?.depCheckedKeys?.value?.length > 0) {
|
||||||
groupTypeStore.depCheckedKeys.forEach((item) => {
|
groupTypeStore.depCheckedKeys.value.forEach((item) => {
|
||||||
departmentIdsArr.push(item.ID)
|
departmentIdsArr.push(item.ID)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -571,7 +588,18 @@ const getPosiByDep = async (departmentIdsArr) => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// console.log(departmentAllPositions)
|
if (
|
||||||
|
state.isCreateDepGroup === 1 &&
|
||||||
|
groupTypeStore?.groupAdmins?.value?.length > 0
|
||||||
|
) {
|
||||||
|
departmentAllPositions.forEach((allPos) => {
|
||||||
|
groupTypeStore.groupAdmins.value.forEach((admin) => {
|
||||||
|
if (allPos.id === admin.id) {
|
||||||
|
allPos.checkArr = [allPos.id]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
state.resultMemberList = [
|
state.resultMemberList = [
|
||||||
{
|
{
|
||||||
key: '',
|
key: '',
|
||||||
|
@ -1,44 +1,42 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="outer-layer">
|
<div class="dialog-page">
|
||||||
<div>
|
<ZPaging
|
||||||
<tm-navbar :hideBack="false" hideHome title="" :leftWidth="220">
|
use-chat-record-mode
|
||||||
<div class="flex flex-col items-center justify-center">
|
:refresher-enabled="false"
|
||||||
<div class="text-[34rpx] font-bold">{{ talkParams.username }}</div>
|
:show-scrollbar="false"
|
||||||
<div v-if="true" class="text-[24rpx] text-[#999999]">公司群</div>
|
:loading-more-enabled="false"
|
||||||
</div>
|
:hide-empty-view="true"
|
||||||
<template v-slot:right>
|
height="100%"
|
||||||
<div class="mr-[36rpx]">
|
ref="zpagingRef"
|
||||||
<tm-icon
|
:use-virtual-list="true"
|
||||||
color="rgb(51, 51, 51)"
|
:preload-page="1"
|
||||||
:font-size="36"
|
cell-height-mode="dynamic"
|
||||||
name="tmicon-gengduo"
|
virtual-scroll-fps="80"
|
||||||
@click="toChatSettingsPage"
|
:loading-more-custom-style="{ display: 'none', height: '0' }"
|
||||||
></tm-icon>
|
@virtualListChange="virtualListChange"
|
||||||
</div>
|
@scrolltolower="onRefreshLoad"
|
||||||
</template>
|
>
|
||||||
</tm-navbar>
|
<template #top>
|
||||||
</div>
|
<customNavbar :title="talkParams.username">
|
||||||
<div class="root">
|
<template
|
||||||
<div class="dialogBox">
|
#subTitle
|
||||||
<ZPaging
|
v-if="talkStore?.findItem(talkParams.index_name)?.group_type === 4"
|
||||||
:fixed="false"
|
>
|
||||||
use-chat-record-mode
|
<div class="text-[24rpx] text-[#999999]">公司群</div>
|
||||||
:use-page-scroll="false"
|
</template>
|
||||||
:refresher-enabled="false"
|
<template #right>
|
||||||
:show-scrollbar="false"
|
<div class="mr-[36rpx] toChatSetting_btn">
|
||||||
:loading-more-enabled="false"
|
<tm-icon
|
||||||
:hide-empty-view="true"
|
color="rgb(51, 51, 51)"
|
||||||
height="100%"
|
:font-size="36"
|
||||||
ref="zpagingRef"
|
name="tmicon-gengduo"
|
||||||
:use-virtual-list="true"
|
@click="toChatSettingsPage"
|
||||||
:preload-page="1"
|
></tm-icon>
|
||||||
cell-height-mode="dynamic"
|
</div>
|
||||||
virtual-scroll-fps="80"
|
</template>
|
||||||
:loading-more-custom-style="{ display: 'none', height: '0' }"
|
</customNavbar>
|
||||||
@virtualListChange="virtualListChange"
|
</template>
|
||||||
@scrolltolower="onRefreshLoad"
|
<!-- <template #top>
|
||||||
>
|
|
||||||
<!-- <template #top>
|
|
||||||
<div class="load-toolbar pointer">
|
<div class="load-toolbar pointer">
|
||||||
<span v-if="loadConfig.status == 0"> 正在加载数据中 ... </span>
|
<span v-if="loadConfig.status == 0"> 正在加载数据中 ... </span>
|
||||||
<span v-else-if="loadConfig.status == 1" @click="onRefreshLoad"> 查看更多消息 ... </span>
|
<span v-else-if="loadConfig.status == 1" @click="onRefreshLoad"> 查看更多消息 ... </span>
|
||||||
@ -46,106 +44,105 @@
|
|||||||
</div>
|
</div>
|
||||||
</template> -->
|
</template> -->
|
||||||
|
|
||||||
<!-- 数据加载状态栏 -->
|
<!-- 数据加载状态栏 -->
|
||||||
|
<div class="dialog-list">
|
||||||
|
<div
|
||||||
|
class="message-item"
|
||||||
|
v-for="item in virtualList"
|
||||||
|
:id="`zp-id-${item.zp_index}`"
|
||||||
|
:key="item.zp_index"
|
||||||
|
style="transform: scaleY(-1);"
|
||||||
|
>
|
||||||
|
<!-- 系统消息 -->
|
||||||
|
<div v-if="item.msg_type >= 1000" class="message-box">
|
||||||
|
<component
|
||||||
|
:is="MessageComponents[item.msg_type] || 'unknown-message'"
|
||||||
|
:extra="item.extra"
|
||||||
|
:data="item"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<!-- 撤回消息 -->
|
||||||
|
<div v-else-if="item.is_revoke == 1" class="message-box">
|
||||||
|
<revoke-message
|
||||||
|
:login_uid="userStore.uid"
|
||||||
|
:user_id="item.user_id"
|
||||||
|
:nickname="item.nickname"
|
||||||
|
:talk_type="item.talk_type"
|
||||||
|
:datetime="item.created_at"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="message-item"
|
v-else
|
||||||
v-for="item in virtualList"
|
class="message-box record-box"
|
||||||
:id="`zp-id-${item.zp_index}`"
|
:class="{
|
||||||
:key="item.zp_index"
|
'direction-rt': item.float == 'right',
|
||||||
style="transform: scaleY(-1);"
|
'multi-select': dialogueStore.isOpenMultiSelect,
|
||||||
|
'multi-select-check': item.isCheck,
|
||||||
|
}"
|
||||||
>
|
>
|
||||||
<!-- 系统消息 -->
|
<!-- 多选按钮 -->
|
||||||
<div v-if="item.msg_type >= 1000" class="message-box">
|
<aside
|
||||||
<component
|
v-if="dialogueStore.isOpenMultiSelect"
|
||||||
:is="MessageComponents[item.msg_type] || 'unknown-message'"
|
class="checkbox-column"
|
||||||
:extra="item.extra"
|
|
||||||
:data="item"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<!-- 撤回消息 -->
|
|
||||||
<div v-else-if="item.is_revoke == 1" class="message-box">
|
|
||||||
<revoke-message
|
|
||||||
:login_uid="userStore.uid"
|
|
||||||
:user_id="item.user_id"
|
|
||||||
:nickname="item.nickname"
|
|
||||||
:talk_type="item.talk_type"
|
|
||||||
:datetime="item.created_at"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
v-else
|
|
||||||
class="message-box record-box"
|
|
||||||
:class="{
|
|
||||||
'direction-rt': item.float == 'right',
|
|
||||||
'multi-select': dialogueStore.isOpenMultiSelect,
|
|
||||||
'multi-select-check': item.isCheck,
|
|
||||||
}"
|
|
||||||
>
|
>
|
||||||
<!-- 多选按钮 -->
|
<!-- <n-checkbox size="small" :checked="item.isCheck" @update:checked="item.isCheck = !item.isCheck" /> -->
|
||||||
<aside
|
<tm-checkbox
|
||||||
v-if="dialogueStore.isOpenMultiSelect"
|
:round="10"
|
||||||
class="checkbox-column"
|
:defaultChecked="item.isCheck"
|
||||||
>
|
@update:modelValue="item.isCheck = !item.isCheck"
|
||||||
<!-- <n-checkbox size="small" :checked="item.isCheck" @update:checked="item.isCheck = !item.isCheck" /> -->
|
:size="42"
|
||||||
<tm-checkbox
|
color="#46299D"
|
||||||
:round="10"
|
></tm-checkbox>
|
||||||
:defaultChecked="item.isCheck"
|
</aside>
|
||||||
@update:modelValue="item.isCheck = !item.isCheck"
|
|
||||||
:size="42"
|
|
||||||
color="#46299D"
|
|
||||||
></tm-checkbox>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
<!-- 头像信息 -->
|
<!-- 头像信息 -->
|
||||||
<aside class="avatar-column" @click="toUserDetailPage(item)">
|
<aside class="avatar-column" @click="toUserDetailPage(item)">
|
||||||
<im-avatar
|
<im-avatar
|
||||||
class="pointer"
|
class="pointer"
|
||||||
:src="item.avatar"
|
:src="item.avatar"
|
||||||
:size="80"
|
:size="80"
|
||||||
:username="item.nickname"
|
:username="item.nickname"
|
||||||
@click="showUserInfoModal(item.user_id)"
|
@click="showUserInfoModal(item.user_id)"
|
||||||
/>
|
/>
|
||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
<!-- 主体信息 -->
|
<!-- 主体信息 -->
|
||||||
<main class="main-column">
|
<main class="main-column">
|
||||||
<div class="talk-title">
|
<div class="talk-title">
|
||||||
<span
|
<span
|
||||||
class="nickname pointer"
|
class="nickname pointer"
|
||||||
v-show="talkParams.type == 2 && item.float == 'left'"
|
v-show="talkParams.type == 2 && item.float == 'left'"
|
||||||
@click="onClickNickname(item)"
|
@click="onClickNickname(item)"
|
||||||
>
|
|
||||||
<span class="at">@</span>
|
|
||||||
{{ item.nickname }}
|
|
||||||
</span>
|
|
||||||
<span>
|
|
||||||
{{ parseTime(item.created_at, '{m}/{d} {h}:{i}') }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
class="talk-content"
|
|
||||||
:class="{ pointer: dialogueStore.isOpenMultiSelect }"
|
|
||||||
>
|
>
|
||||||
<deepBubble
|
<span class="at">@</span>
|
||||||
@clickMenu="(menuType) => onContextMenu(menuType, item)"
|
{{ item.nickname }}
|
||||||
:isShowCopy="isShowCopy(item)"
|
</span>
|
||||||
:isShowWithdraw="isRevoke(talkParams.uid, item)"
|
<span>
|
||||||
>
|
{{ parseTime(item.created_at, '{m}/{d} {h}:{i}') }}
|
||||||
<component
|
</span>
|
||||||
class="component-content"
|
</div>
|
||||||
:key="item.zp_index"
|
|
||||||
:is="
|
<div
|
||||||
MessageComponents[item.msg_type] || 'unknown-message'
|
class="talk-content"
|
||||||
"
|
:class="{ pointer: dialogueStore.isOpenMultiSelect }"
|
||||||
:extra="item.extra"
|
>
|
||||||
:data="item"
|
<deepBubble
|
||||||
:max-width="true"
|
@clickMenu="(menuType) => onContextMenu(menuType, item)"
|
||||||
:source="'panel'"
|
:isShowCopy="isShowCopy(item)"
|
||||||
/>
|
:isShowWithdraw="isRevoke(talkParams.uid, item)"
|
||||||
</deepBubble>
|
>
|
||||||
<!-- <div class="talk-tools">
|
<component
|
||||||
|
class="component-content"
|
||||||
|
:key="item.zp_index"
|
||||||
|
:is="MessageComponents[item.msg_type] || 'unknown-message'"
|
||||||
|
:extra="item.extra"
|
||||||
|
:data="item"
|
||||||
|
:max-width="true"
|
||||||
|
:source="'panel'"
|
||||||
|
/>
|
||||||
|
</deepBubble>
|
||||||
|
<!-- <div class="talk-tools">
|
||||||
<template v-if="talkParams.type == 1 && item.float == 'right'">
|
<template v-if="talkParams.type == 1 && item.float == 'right'">
|
||||||
<loading theme="outline" size="19" fill="#000" :sxtrokeWidth="1" class="icon-rotate"
|
<loading theme="outline" size="19" fill="#000" :sxtrokeWidth="1" class="icon-rotate"
|
||||||
v-show="item.send_status == 1" />
|
v-show="item.send_status == 1" />
|
||||||
@ -155,155 +152,159 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
</div> -->
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="item.extra.reply"
|
v-if="item.extra.reply"
|
||||||
class="talk-reply pointer"
|
class="talk-reply pointer"
|
||||||
@click="onJumpMessage(item.extra?.reply?.msg_id)"
|
@click="onJumpMessage(item.extra?.reply?.msg_id)"
|
||||||
>
|
>
|
||||||
<!-- <n-icon :component="ToTop" size="14" class="icon-top" /> -->
|
<!-- <n-icon :component="ToTop" size="14" class="icon-top" /> -->
|
||||||
<span class="ellipsis">
|
<span class="ellipsis">
|
||||||
回复 {{ item.extra?.reply?.nickname }}:
|
回复 {{ item.extra?.reply?.nickname }}:
|
||||||
{{ item.extra?.reply?.content }}
|
{{ item.extra?.reply?.content }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="load-toolbar pointer" style="transform: scaleY(-1);">
|
||||||
|
<span v-if="loadConfig.status == 0">正在加载数据中 ...</span>
|
||||||
|
<span v-else-if="loadConfig.status == 1" @click="onRefreshLoad">
|
||||||
|
查看更多消息 ...
|
||||||
|
</span>
|
||||||
|
<span v-else class="no-more">没有更多消息了</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<template #bottom>
|
||||||
|
<div class="footBox">
|
||||||
|
<div v-if="!dialogueStore.isOpenMultiSelect">
|
||||||
|
<div
|
||||||
|
class="pt-[16rpx] ml-[32rpx] mr-[32rpx] flex items-center justify-between"
|
||||||
|
>
|
||||||
|
<div class="flex-1 quillBox">
|
||||||
|
<QuillEditor
|
||||||
|
ref="editor"
|
||||||
|
id="editor"
|
||||||
|
:options="editorOption"
|
||||||
|
@editorChange="onEditorChange"
|
||||||
|
style="height: 100%; border: none;"
|
||||||
|
/>
|
||||||
|
<!-- <tm-input type=textarea autoHeight focusColor="#F9F9F9" color="#F9F9F9" :inputPadding="[12]"
|
||||||
|
placeholder=""></tm-input> -->
|
||||||
|
</div>
|
||||||
|
<tm-image
|
||||||
|
:margin="[10, 0]"
|
||||||
|
@click="handleEmojiPanel"
|
||||||
|
:width="52"
|
||||||
|
:height="52"
|
||||||
|
:round="12"
|
||||||
|
:src="state.isOpenEmojiPanel ? keyboard : smile"
|
||||||
|
></tm-image>
|
||||||
|
<tm-image
|
||||||
|
@click="handleFilePanel"
|
||||||
|
:margin="[10, 0]"
|
||||||
|
:width="52"
|
||||||
|
:height="52"
|
||||||
|
:round="12"
|
||||||
|
:src="addCircleGray"
|
||||||
|
></tm-image>
|
||||||
|
<tm-button
|
||||||
|
@click="onSendMessageClick"
|
||||||
|
:margin="[0, 0]"
|
||||||
|
:padding="[0, 30]"
|
||||||
|
color="#46299D"
|
||||||
|
:fontSize="28"
|
||||||
|
size="mini"
|
||||||
|
:shadow="0"
|
||||||
|
label="发送"
|
||||||
|
></tm-button>
|
||||||
|
</div>
|
||||||
|
<div v-if="state.isOpenEmojiPanel" class="mt-[50rpx]">
|
||||||
|
<emojiPanel @on-select="onEmoticonEvent" />
|
||||||
|
</div>
|
||||||
|
<div v-if="state.isOpenFilePanel" class="mt-[16rpx]">
|
||||||
|
<filePanel
|
||||||
|
@selectImg="handleSelectImg"
|
||||||
|
:talkParams="talkParams"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="load-toolbar pointer" style="transform: scaleY(-1);">
|
<div v-else class="h-[232rpx]">
|
||||||
<span v-if="loadConfig.status == 0">正在加载数据中 ...</span>
|
<div
|
||||||
<span v-else-if="loadConfig.status == 1" @click="onRefreshLoad">
|
class="flex items-center justify-center mt-[12rpx] text-[24rpx] text-[#747474] leading-[44rpx]"
|
||||||
查看更多消息 ...
|
>
|
||||||
</span>
|
<div class="mr-[8rpx]">已选中:</div>
|
||||||
<span v-else class="no-more">没有更多消息了</span>
|
<div>{{ selectedMessage.length }}条消息</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="flex items-center justify-around pl-[128rpx] pr-[128rpx] mt-[18rpx] text-[20rpx] text-[#737373]"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
@click="handleMergeForward"
|
||||||
|
class="flex flex-col items-center justify-center"
|
||||||
|
>
|
||||||
|
<tm-image :width="68" :height="68" :src="zu6050"></tm-image>
|
||||||
|
<div class="mt-[6rpx]">合并转发</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
@click="handleSingleForward"
|
||||||
|
class="flex flex-col items-center justify-center"
|
||||||
|
>
|
||||||
|
<tm-image :width="68" :height="68" :src="zu6051"></tm-image>
|
||||||
|
<div class="mt-[6rpx]">逐条转发</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
@click="handleWechatForward"
|
||||||
|
class="flex flex-col items-center justify-center"
|
||||||
|
>
|
||||||
|
<tm-image :width="68" :height="68" :src="zu6052"></tm-image>
|
||||||
|
<div class="mt-[6rpx]">微信</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
@click="handleDelete"
|
||||||
|
class="flex flex-col items-center justify-center"
|
||||||
|
>
|
||||||
|
<tm-image :width="68" :height="68" :src="zu6053"></tm-image>
|
||||||
|
<div class="mt-[6rpx]">删除</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</ZPaging>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footBox">
|
|
||||||
<div v-if="!dialogueStore.isOpenMultiSelect">
|
|
||||||
<div
|
|
||||||
class="mt-[16rpx] ml-[32rpx] mr-[32rpx] flex items-center justify-between"
|
|
||||||
>
|
|
||||||
<div class="flex-1 quillBox">
|
|
||||||
<QuillEditor
|
|
||||||
ref="editor"
|
|
||||||
id="editor"
|
|
||||||
:options="editorOption"
|
|
||||||
@editorChange="onEditorChange"
|
|
||||||
style="height: 100%; border: none;"
|
|
||||||
/>
|
|
||||||
<!-- <tm-input type=textarea autoHeight focusColor="#F9F9F9" color="#F9F9F9" :inputPadding="[12]"
|
|
||||||
placeholder=""></tm-input> -->
|
|
||||||
</div>
|
|
||||||
<tm-image
|
|
||||||
:margin="[10, 0]"
|
|
||||||
@click="handleEmojiPanel"
|
|
||||||
:width="52"
|
|
||||||
:height="52"
|
|
||||||
:round="12"
|
|
||||||
:src="state.isOpenEmojiPanel ? keyboard : smile"
|
|
||||||
></tm-image>
|
|
||||||
<tm-image
|
|
||||||
@click="handleFilePanel"
|
|
||||||
:margin="[10, 0]"
|
|
||||||
:width="52"
|
|
||||||
:height="52"
|
|
||||||
:round="12"
|
|
||||||
:src="addCircleGray"
|
|
||||||
></tm-image>
|
|
||||||
<tm-button
|
|
||||||
@click="onSendMessageClick"
|
|
||||||
:margin="[0, 0]"
|
|
||||||
:padding="[0, 30]"
|
|
||||||
color="#46299D"
|
|
||||||
:fontSize="28"
|
|
||||||
size="mini"
|
|
||||||
:shadow="0"
|
|
||||||
label="发送"
|
|
||||||
></tm-button>
|
|
||||||
</div>
|
|
||||||
<div v-if="state.isOpenEmojiPanel" class="mt-[50rpx]">
|
|
||||||
<emojiPanel @on-select="onEmoticonEvent" />
|
|
||||||
</div>
|
|
||||||
<div v-if="state.isOpenFilePanel" class="mt-[16rpx]">
|
|
||||||
<filePanel @selectImg="handleSelectImg" :talkParams="talkParams" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-else class="h-[232rpx]">
|
|
||||||
<div
|
|
||||||
class="flex items-center justify-center mt-[12rpx] text-[24rpx] text-[#747474] leading-[44rpx]"
|
|
||||||
>
|
|
||||||
<div class="mr-[8rpx]">已选中:</div>
|
|
||||||
<div>{{ selectedMessage.length }}条消息</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="flex items-center justify-around pl-[128rpx] pr-[128rpx] mt-[18rpx] text-[20rpx] text-[#737373]"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
@click="handleMergeForward"
|
|
||||||
class="flex flex-col items-center justify-center"
|
|
||||||
>
|
|
||||||
<tm-image :width="68" :height="68" :src="zu6050"></tm-image>
|
|
||||||
<div class="mt-[6rpx]">合并转发</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
@click="handleSingleForward"
|
|
||||||
class="flex flex-col items-center justify-center"
|
|
||||||
>
|
|
||||||
<tm-image :width="68" :height="68" :src="zu6051"></tm-image>
|
|
||||||
<div class="mt-[6rpx]">逐条转发</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
@click="handleWechatForward"
|
|
||||||
class="flex flex-col items-center justify-center"
|
|
||||||
>
|
|
||||||
<tm-image :width="68" :height="68" :src="zu6052"></tm-image>
|
|
||||||
<div class="mt-[6rpx]">微信</div>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
@click="handleDelete"
|
|
||||||
class="flex flex-col items-center justify-center"
|
|
||||||
>
|
|
||||||
<tm-image :width="68" :height="68" :src="zu6053"></tm-image>
|
|
||||||
<div class="mt-[6rpx]">删除</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!--底部安全区-->
|
<!--底部安全区-->
|
||||||
<div class="content-placeholder"></div>
|
<div class="content-placeholder"></div>
|
||||||
<tm-drawer
|
<tm-drawer
|
||||||
placement="bottom"
|
placement="bottom"
|
||||||
v-model:show="state.showWin"
|
v-model:show="state.showWin"
|
||||||
:hideHeader="true"
|
:hideHeader="true"
|
||||||
:height="416"
|
:height="416"
|
||||||
:round="6"
|
:round="6"
|
||||||
>
|
|
||||||
<div class="w-full h-full flex flex-col items-center">
|
|
||||||
<div
|
|
||||||
class="mt-[46rpx] mb-[44rpx] leading-[48rpx] text-[#747474] text-[24rpx]"
|
|
||||||
>
|
>
|
||||||
撤回该条消息?
|
<div class="w-full h-full flex flex-col items-center">
|
||||||
</div>
|
<div
|
||||||
<div class="divider"></div>
|
class="mt-[46rpx] mb-[44rpx] leading-[48rpx] text-[#747474] text-[24rpx]"
|
||||||
<div
|
>
|
||||||
@click="withdrawerConfirm"
|
撤回该条消息?
|
||||||
class="mt-[32rpx] mb-[32rpx] text-[32rpx] text-[#CF3050] leading-[48rpx]"
|
</div>
|
||||||
>
|
<div class="divider"></div>
|
||||||
撤回
|
<div
|
||||||
</div>
|
@click="withdrawerConfirm"
|
||||||
<div class="divider"></div>
|
class="mt-[32rpx] mb-[32rpx] text-[32rpx] text-[#CF3050] leading-[48rpx]"
|
||||||
<div
|
>
|
||||||
@click="state.showWin = false"
|
撤回
|
||||||
class="mt-[32rpx] mb-[32rpx] text-[32rpx] text-[#000000] leading-[48rpx]"
|
</div>
|
||||||
>
|
<div class="divider"></div>
|
||||||
取消
|
<div
|
||||||
</div>
|
@click="state.showWin = false"
|
||||||
|
class="mt-[32rpx] mb-[32rpx] text-[32rpx] text-[#000000] leading-[48rpx]"
|
||||||
|
>
|
||||||
|
取消
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</tm-drawer>
|
||||||
</div>
|
</div>
|
||||||
</tm-drawer>
|
</template>
|
||||||
</div>
|
</ZPaging>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -854,24 +855,23 @@ onUnmounted(() => {
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
uni-page-body,
|
.dialog-page {
|
||||||
page {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.outer-layer {
|
|
||||||
flex: 1;
|
flex: 1;
|
||||||
background-image: url('@/static/image/clockIn/z3280@3x.png');
|
background-image: url('@/static/image/clockIn/z3280@3x.png');
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
display: flex;
|
background-position: bottom center;
|
||||||
flex-direction: column;
|
background-attachment: fixed;
|
||||||
overflow: hidden;
|
width: 100%;
|
||||||
}
|
|
||||||
|
|
||||||
.root {
|
.dialog-list {
|
||||||
flex: 1;
|
padding: 20rpx 32rpx;
|
||||||
padding: 20rpx 32rpx;
|
}
|
||||||
min-height: 0;
|
|
||||||
|
.toChatSetting_btn {
|
||||||
|
::v-deep .tmicon-gengduo {
|
||||||
|
line-height: unset !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.searchRoot {
|
.searchRoot {
|
||||||
@ -889,22 +889,6 @@ page {
|
|||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialogBox {
|
|
||||||
height: 100%;
|
|
||||||
min-height: 0;
|
|
||||||
overflow: auto;
|
|
||||||
|
|
||||||
// 添加以下样式来隐藏滚动条
|
|
||||||
&::-webkit-scrollbar {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
-ms-overflow-style: none;
|
|
||||||
/* IE and Edge */
|
|
||||||
scrollbar-width: none;
|
|
||||||
/* Firefox */
|
|
||||||
}
|
|
||||||
|
|
||||||
.load-toolbar {
|
.load-toolbar {
|
||||||
height: 50rpx;
|
height: 50rpx;
|
||||||
color: #409eff;
|
color: #409eff;
|
||||||
|
@ -78,8 +78,8 @@ export const useGroupTypeStore = createGlobalState(() => {
|
|||||||
}),
|
}),
|
||||||
positionInfos: groupAdmins.value.map((v) => {
|
positionInfos: groupAdmins.value.map((v) => {
|
||||||
return {
|
return {
|
||||||
position_id: v.ID,
|
position_id: v.position_id,
|
||||||
position_name: v.name,
|
position_name: v.position_name,
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
@ -54,7 +54,7 @@
|
|||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<slot name="left"></slot>
|
<slot name="left"></slot>
|
||||||
</view>
|
</view>
|
||||||
<view class="flex flex-row-center-center" :style="{ width: contentwidth + 'px' }">
|
<view class="flex flex-row-center-center flex-col" :style="{ width: contentwidth + 'px' }">
|
||||||
<slot>
|
<slot>
|
||||||
<tm-text
|
<tm-text
|
||||||
:unit="props.unit"
|
:unit="props.unit"
|
||||||
@ -63,6 +63,7 @@
|
|||||||
:font-size="props.fontSize"
|
:font-size="props.fontSize"
|
||||||
:label="_title"
|
:label="_title"
|
||||||
></tm-text>
|
></tm-text>
|
||||||
|
<slot name="subTitle"></slot>
|
||||||
</slot>
|
</slot>
|
||||||
</view>
|
</view>
|
||||||
<view class="flex-row flex flex-row-center-end" :style="{ width: _rightWidth + 'rpx' }">
|
<view class="flex-row flex flex-row-center-end" :style="{ width: _rightWidth + 'rpx' }">
|
||||||
|
Loading…
Reference in New Issue
Block a user