新增华为审核投诉功能 修改群聊低于三人按钮置灰逻辑 修改移出群自己在列表最上方并且不在列表出现问题
Some checks are pending
Check / lint (push) Waiting to run
Check / typecheck (push) Waiting to run
Check / build (build, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build, 18.x, windows-latest) (push) Waiting to run
Check / build (build:app, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build:app, 18.x, windows-latest) (push) Waiting to run
Check / build (build:mp-weixin, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build:mp-weixin, 18.x, windows-latest) (push) Waiting to run
Some checks are pending
Check / lint (push) Waiting to run
Check / typecheck (push) Waiting to run
Check / build (build, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build, 18.x, windows-latest) (push) Waiting to run
Check / build (build:app, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build:app, 18.x, windows-latest) (push) Waiting to run
Check / build (build:mp-weixin, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build:mp-weixin, 18.x, windows-latest) (push) Waiting to run
This commit is contained in:
parent
2953d50e4b
commit
a5d9009910
2
auto-imports.d.ts
vendored
2
auto-imports.d.ts
vendored
@ -70,6 +70,6 @@ declare global {
|
|||||||
// for type re-export
|
// for type re-export
|
||||||
declare global {
|
declare global {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
|
export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
|
||||||
import('vue')
|
import('vue')
|
||||||
}
|
}
|
||||||
|
14024
pnpm-lock.yaml
14024
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
@ -5,8 +5,7 @@
|
|||||||
"^tm-(.*)": "@/tmui/components/tm-$1/tm-$1.vue"
|
"^tm-(.*)": "@/tmui/components/tm-$1/tm-$1.vue"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pages": [
|
"pages": [{
|
||||||
{
|
|
||||||
"path": "pages/index/index",
|
"path": "pages/index/index",
|
||||||
"type": "page",
|
"type": "page",
|
||||||
"style": {
|
"style": {
|
||||||
@ -186,6 +185,14 @@
|
|||||||
"navigationStyle": "custom",
|
"navigationStyle": "custom",
|
||||||
"enablePullDownRefresh": false
|
"enablePullDownRefresh": false
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/complaintReport/index",
|
||||||
|
"type": "page",
|
||||||
|
"style": {
|
||||||
|
"navigationStyle": "custom",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"globalStyle": {
|
"globalStyle": {
|
||||||
|
@ -1,140 +1,94 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="select-member-by-alphabet">
|
<div class="select-member-by-alphabet">
|
||||||
<ZPaging
|
<ZPaging ref="zPaging" :show-scrollbar="false" :use-virtual-list="true" :virtual-list-col="5"
|
||||||
ref="zPaging"
|
:refresher-enabled="false" :loading-more-enabled="false" @scroll="onScroll" :fixed="false"
|
||||||
:show-scrollbar="false"
|
:height="props?.selectAreaHeight">
|
||||||
:use-virtual-list="true"
|
|
||||||
:virtual-list-col="5"
|
|
||||||
:refresher-enabled="false"
|
|
||||||
:loading-more-enabled="false"
|
|
||||||
@scroll="onScroll"
|
|
||||||
:fixed="false"
|
|
||||||
:height="props?.selectAreaHeight"
|
|
||||||
>
|
|
||||||
<div class="select-members">
|
<div class="select-members">
|
||||||
<div
|
<div class="search-member" v-if="
|
||||||
class="search-member"
|
|
||||||
v-if="
|
|
||||||
props?.manageType !== 'removeMembers' &&
|
props?.manageType !== 'removeMembers' &&
|
||||||
!(
|
!(
|
||||||
props?.manageType === 'admin' &&
|
props?.manageType === 'admin' &&
|
||||||
(groupParams.groupInfo.group_type === 2 ||
|
(groupParams.groupInfo.group_type === 2 ||
|
||||||
groupParams.groupInfo.group_type === 4)
|
groupParams.groupInfo.group_type === 4)
|
||||||
)
|
)
|
||||||
"
|
">
|
||||||
>
|
<customInput :searchText="state.searchText" @inputSearchText="inputSearchText"></customInput>
|
||||||
<customInput
|
|
||||||
:searchText="state.searchText"
|
|
||||||
@inputSearchText="inputSearchText"
|
|
||||||
></customInput>
|
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div v-show="props?.manageType == 'removeMembers'" class="my-self">
|
||||||
class="member-list"
|
<div class="my-self-left">
|
||||||
:style="{
|
<image style="width: 72rpx;border-radius: 50%;" :src="mySelfMember.avatar" mode="widthFix"></image>
|
||||||
|
<div style="padding: 0 20rpx;">{{mySelfMember.nickname}}</div>
|
||||||
|
<img style="width: 66rpx;" src="@/static/image/chatSettings/is-mine.png" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-self-right">
|
||||||
|
{{ $t('group.identify.admin') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="member-list" :style="{
|
||||||
padding: props?.manageType === 'searchRecord' ? '20rpx 0 0' : '',
|
padding: props?.manageType === 'searchRecord' ? '20rpx 0 0' : '',
|
||||||
}"
|
}">
|
||||||
>
|
<div class="member-list-alphabet-anchor-point" :style="{
|
||||||
<div
|
|
||||||
class="member-list-alphabet-anchor-point"
|
|
||||||
:style="{
|
|
||||||
top: props?.manageType === 'mention' ? '90rpx' : '',
|
top: props?.manageType === 'mention' ? '90rpx' : '',
|
||||||
}"
|
}">
|
||||||
>
|
<div class="member-list-alphabet-anchor-point-each" v-for="(alphabetItem, alphabetIndex) in state?.alphabet"
|
||||||
<div
|
:key="alphabetIndex" :style="{
|
||||||
class="member-list-alphabet-anchor-point-each"
|
|
||||||
v-for="(alphabetItem, alphabetIndex) in state?.alphabet"
|
|
||||||
:key="alphabetIndex"
|
|
||||||
:style="{
|
|
||||||
margin: state?.alphabet?.length > 17 ? '0' : '',
|
margin: state?.alphabet?.length > 17 ? '0' : '',
|
||||||
}"
|
}" @click.stop="scrollToView(alphabetItem)">
|
||||||
@click.stop="scrollToView(alphabetItem)"
|
<span class="text-[32rpx] font-regular" :style="{
|
||||||
>
|
|
||||||
<span
|
|
||||||
class="text-[32rpx] font-regular"
|
|
||||||
:style="{
|
|
||||||
color:
|
color:
|
||||||
state.currentAlphabet === alphabetItem ? '#7A58DE' : '',
|
state.currentAlphabet === alphabetItem ? '#7A58DE' : '',
|
||||||
}"
|
}">
|
||||||
>
|
|
||||||
{{ alphabetItem }}
|
{{ alphabetItem }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="member-list-alphabet" v-for="(alphabetItem, alphabetIndex) in state.resultMemberList"
|
||||||
class="member-list-alphabet"
|
:key="alphabetIndex">
|
||||||
v-for="(alphabetItem, alphabetIndex) in state.resultMemberList"
|
<div class="member-list-alphabet-key" :style="{
|
||||||
:key="alphabetIndex"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="member-list-alphabet-key"
|
|
||||||
:style="{
|
|
||||||
padding:
|
padding:
|
||||||
props?.manageType === 'searchRecord' ||
|
props?.manageType === 'searchRecord' ||
|
||||||
props?.manageType === 'removeMembers' ||
|
props?.manageType === 'removeMembers' ||
|
||||||
props?.manageType === 'mention'
|
props?.manageType === 'mention'
|
||||||
? '10rpx 30rpx'
|
? '10rpx 30rpx'
|
||||||
: '',
|
: '',
|
||||||
}"
|
}" v-if="
|
||||||
v-if="
|
|
||||||
alphabetItem?.memberList?.length > 0 &&
|
alphabetItem?.memberList?.length > 0 &&
|
||||||
alphabetItem?.key !== '0'
|
alphabetItem?.key !== '0'
|
||||||
"
|
" :id="alphabetItem.key === '#' ? 'special-hash' : alphabetItem.key" :ref="
|
||||||
:id="alphabetItem.key === '#' ? 'special-hash' : alphabetItem.key"
|
|
||||||
:ref="
|
|
||||||
(el) => {
|
(el) => {
|
||||||
if (el) alphabetElementRefs[alphabetIndex] = el
|
if (el) alphabetElementRefs[alphabetIndex] = el
|
||||||
}
|
}
|
||||||
"
|
">
|
||||||
>
|
|
||||||
<span class="text-[32rpx] font-regular">
|
<span class="text-[32rpx] font-regular">
|
||||||
{{ alphabetItem.key }}
|
{{ alphabetItem.key }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="alphabetItem?.memberList?.length > 0">
|
<div v-if="alphabetItem?.memberList?.length > 0">
|
||||||
<div
|
<div class="member-list-each" v-for="(item, index) in alphabetItem?.memberList" :key="index">
|
||||||
class="member-list-each"
|
|
||||||
v-for="(item, index) in alphabetItem?.memberList"
|
|
||||||
:key="index"
|
|
||||||
>
|
|
||||||
<tm-checkbox-group v-model="item.checkArr">
|
<tm-checkbox-group v-model="item.checkArr">
|
||||||
<selectMemberItem
|
<selectMemberItem :groupType="groupParams.groupInfo.group_type" :memberItem="item"
|
||||||
:groupType="groupParams.groupInfo.group_type"
|
@clickItem="handleClickItem(item)" :manageType="props?.manageType" :itemStyle="
|
||||||
:memberItem="item"
|
|
||||||
@clickItem="handleClickItem(item)"
|
|
||||||
:manageType="props?.manageType"
|
|
||||||
:itemStyle="
|
|
||||||
props?.manageType === 'searchRecord' ||
|
props?.manageType === 'searchRecord' ||
|
||||||
props?.manageType === 'removeMembers' ||
|
props?.manageType === 'removeMembers' ||
|
||||||
props?.manageType === 'mention'
|
props?.manageType === 'mention'
|
||||||
? 'list'
|
? 'list'
|
||||||
: 'card'
|
: 'card'
|
||||||
"
|
">
|
||||||
>
|
|
||||||
<template #left v-if="props?.manageType !== 'searchRecord'">
|
<template #left v-if="props?.manageType !== 'searchRecord'">
|
||||||
<div
|
<div v-if="
|
||||||
v-if="
|
|
||||||
props?.manageType === 'removeMembers' && item?.is_mine
|
props?.manageType === 'removeMembers' && item?.is_mine
|
||||||
"
|
">
|
||||||
>
|
<tm-checkbox color="#fff" :transprent="true" :border="0" :disabled="true"></tm-checkbox>
|
||||||
<tm-checkbox
|
|
||||||
color="#fff"
|
|
||||||
:transprent="true"
|
|
||||||
:border="0"
|
|
||||||
:disabled="true"
|
|
||||||
></tm-checkbox>
|
|
||||||
</div>
|
</div>
|
||||||
<tm-checkbox
|
<tm-checkbox v-if="
|
||||||
v-if="
|
|
||||||
!(
|
!(
|
||||||
props?.manageType === 'removeMembers' &&
|
props?.manageType === 'removeMembers' &&
|
||||||
item?.is_mine
|
item?.is_mine
|
||||||
) && props?.isMulSelect
|
) && props?.isMulSelect
|
||||||
"
|
" :round="10" :color="
|
||||||
:round="10"
|
|
||||||
:color="
|
|
||||||
item?.checkArr?.length > 0 ? '#46299d' : '#B4B4B4'
|
item?.checkArr?.length > 0 ? '#46299d' : '#B4B4B4'
|
||||||
"
|
" :outlined="
|
||||||
:outlined="
|
|
||||||
item?.checkArr?.length > 0 ||
|
item?.checkArr?.length > 0 ||
|
||||||
(props?.manageType === 'silence' &&
|
(props?.manageType === 'silence' &&
|
||||||
item.is_mute === 1) ||
|
item.is_mute === 1) ||
|
||||||
@ -142,16 +96,12 @@
|
|||||||
(item.leader === 1 || item.leader === 2))
|
(item.leader === 1 || item.leader === 2))
|
||||||
? false
|
? false
|
||||||
: true
|
: true
|
||||||
"
|
" :value="item.id" :disabled="
|
||||||
:value="item.id"
|
|
||||||
:disabled="
|
|
||||||
(props?.manageType === 'silence' &&
|
(props?.manageType === 'silence' &&
|
||||||
item.is_mute === 1) ||
|
item.is_mute === 1) ||
|
||||||
(props?.manageType === 'admin' &&
|
(props?.manageType === 'admin' &&
|
||||||
(item.leader === 1 || item.leader === 2))
|
(item.leader === 1 || item.leader === 2))
|
||||||
"
|
" @change="checkBoxChange"></tm-checkbox>
|
||||||
@change="checkBoxChange"
|
|
||||||
></tm-checkbox>
|
|
||||||
</template>
|
</template>
|
||||||
</selectMemberItem>
|
</selectMemberItem>
|
||||||
</tm-checkbox-group>
|
</tm-checkbox-group>
|
||||||
@ -185,7 +135,11 @@ import {
|
|||||||
ServeGroupAssignAdmin,
|
ServeGroupAssignAdmin,
|
||||||
ServeRemoveMembersGroup,
|
ServeRemoveMembersGroup,
|
||||||
} from '@/api/group/index.js'
|
} from '@/api/group/index.js'
|
||||||
import { useDialogueStore, useGroupStore, useGroupTypeStore } from '@/store'
|
import {
|
||||||
|
useDialogueStore,
|
||||||
|
useGroupStore,
|
||||||
|
useGroupTypeStore
|
||||||
|
} from '@/store'
|
||||||
|
|
||||||
const emits = defineEmits([
|
const emits = defineEmits([
|
||||||
'updateSelectedMembersNum',
|
'updateSelectedMembersNum',
|
||||||
@ -211,9 +165,9 @@ const dialogueParams = reactive({
|
|||||||
memberList: computed(() => {
|
memberList: computed(() => {
|
||||||
const lowerCaseSearchText = state?.searchText.toLowerCase()
|
const lowerCaseSearchText = state?.searchText.toLowerCase()
|
||||||
return dialogueStore.members.filter((item) =>
|
return dialogueStore.members.filter((item) =>
|
||||||
state?.searchText
|
state?.searchText ?
|
||||||
? item.nickname.toLowerCase().includes(lowerCaseSearchText)
|
item.nickname.toLowerCase().includes(lowerCaseSearchText) :
|
||||||
: true,
|
true,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
receiverId: computed(() => dialogueStore.talk.receiver_id),
|
receiverId: computed(() => dialogueStore.talk.receiver_id),
|
||||||
@ -255,16 +209,18 @@ watch(
|
|||||||
() => dialogueParams?.memberList,
|
() => dialogueParams?.memberList,
|
||||||
(newMemberList) => {
|
(newMemberList) => {
|
||||||
assembleAlphabetMemberList(newMemberList)
|
assembleAlphabetMemberList(newMemberList)
|
||||||
|
}, {
|
||||||
|
deep: true
|
||||||
},
|
},
|
||||||
{ deep: true },
|
|
||||||
)
|
)
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => groupParams?.groupInfo,
|
() => groupParams?.groupInfo,
|
||||||
(newGroupInfo) => {
|
(newGroupInfo) => {
|
||||||
assembleAlphabetMemberList(dialogueParams?.memberList)
|
assembleAlphabetMemberList(dialogueParams?.memberList)
|
||||||
|
}, {
|
||||||
|
deep: true
|
||||||
},
|
},
|
||||||
{ deep: true },
|
|
||||||
)
|
)
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
@ -274,8 +230,7 @@ watch(
|
|||||||
if (!newIsMulSelect) {
|
if (!newIsMulSelect) {
|
||||||
state.resultMemberList.unshift({
|
state.resultMemberList.unshift({
|
||||||
key: '0',
|
key: '0',
|
||||||
memberList: [
|
memberList: [{
|
||||||
{
|
|
||||||
avatar: groupAllMember,
|
avatar: groupAllMember,
|
||||||
erp_user_id: 0,
|
erp_user_id: 0,
|
||||||
gender: 0,
|
gender: 0,
|
||||||
@ -285,8 +240,7 @@ watch(
|
|||||||
nickname: '所有人',
|
nickname: '所有人',
|
||||||
remark: '',
|
remark: '',
|
||||||
user_id: 0,
|
user_id: 0,
|
||||||
},
|
}, ],
|
||||||
],
|
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
if (state.resultMemberList[0].key === '0') {
|
if (state.resultMemberList[0].key === '0') {
|
||||||
@ -294,8 +248,10 @@ watch(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}, {
|
||||||
|
deep: true,
|
||||||
|
immediate: true
|
||||||
},
|
},
|
||||||
{ deep: true, immediate: true },
|
|
||||||
)
|
)
|
||||||
|
|
||||||
//获取A-Z tag元素
|
//获取A-Z tag元素
|
||||||
@ -329,8 +285,10 @@ onMounted(() => {
|
|||||||
observeElement(el, index)
|
observeElement(el, index)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}, {
|
||||||
|
immediate: true,
|
||||||
|
deep: true
|
||||||
},
|
},
|
||||||
{ immediate: true, deep: true },
|
|
||||||
)
|
)
|
||||||
if (alphabetElementRefs.value.length > 0) {
|
if (alphabetElementRefs.value.length > 0) {
|
||||||
alphabetElementRefs.value.forEach((el, index) =>
|
alphabetElementRefs.value.forEach((el, index) =>
|
||||||
@ -392,8 +350,7 @@ const handleClickItem = (item) => {
|
|||||||
}
|
}
|
||||||
if (props?.manageType === 'searchRecord') {
|
if (props?.manageType === 'searchRecord') {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url:
|
url: '/pages/search/searchByCondition/index?condition=member&groupMemberId=' +
|
||||||
'/pages/search/searchByCondition/index?condition=member&groupMemberId=' +
|
|
||||||
item.id,
|
item.id,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@ -418,16 +375,29 @@ const handleClickItem = (item) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const mySelfMember = ref({})
|
||||||
//组装A-Z排序的人员列表
|
//组装A-Z排序的人员列表
|
||||||
const assembleAlphabetMemberList = async (newMemberList) => {
|
const assembleAlphabetMemberList = async (newMemberList) => {
|
||||||
|
if (props?.manageType === 'removeMembers' && Array.isArray(newMemberList)) {
|
||||||
|
// 只遍历一次,找到第一个 is_mine 为 true 的成员并移除
|
||||||
|
for (let i = 0; i < newMemberList.length; i++) {
|
||||||
|
const item = newMemberList[i];
|
||||||
|
if (item?.is_mine === true) {
|
||||||
|
mySelfMember.value = item;
|
||||||
|
newMemberList.splice(i, 1); // 删除该成员
|
||||||
|
break; // 找到后立即跳出
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (
|
if (
|
||||||
props?.manageType === 'searchRecord' ||
|
props?.manageType === 'searchRecord' ||
|
||||||
props?.manageType === 'removeMembers' ||
|
props?.manageType === 'removeMembers' ||
|
||||||
props?.manageType === 'mention'
|
props?.manageType === 'mention'
|
||||||
) {
|
) {
|
||||||
const resultMemberList = ref([])
|
const resultMemberList = ref([])
|
||||||
const alphabet = Array.from({ length: 26 }, (_, i) =>
|
const alphabet = Array.from({
|
||||||
|
length: 26
|
||||||
|
}, (_, i) =>
|
||||||
String.fromCharCode(i + 65),
|
String.fromCharCode(i + 65),
|
||||||
)
|
)
|
||||||
let tempAlphabet = []
|
let tempAlphabet = []
|
||||||
@ -476,8 +446,7 @@ const assembleAlphabetMemberList = async (newMemberList) => {
|
|||||||
if (props?.manageType === 'mention' && !props?.isMulSelect) {
|
if (props?.manageType === 'mention' && !props?.isMulSelect) {
|
||||||
resultMemberList.value.unshift({
|
resultMemberList.value.unshift({
|
||||||
key: '0',
|
key: '0',
|
||||||
memberList: [
|
memberList: [{
|
||||||
{
|
|
||||||
avatar: groupAllMember,
|
avatar: groupAllMember,
|
||||||
erp_user_id: 0,
|
erp_user_id: 0,
|
||||||
gender: 0,
|
gender: 0,
|
||||||
@ -487,8 +456,7 @@ const assembleAlphabetMemberList = async (newMemberList) => {
|
|||||||
nickname: '所有人',
|
nickname: '所有人',
|
||||||
remark: '',
|
remark: '',
|
||||||
user_id: 0,
|
user_id: 0,
|
||||||
},
|
}, ],
|
||||||
],
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
state.resultMemberList = resultMemberList
|
state.resultMemberList = resultMemberList
|
||||||
@ -514,12 +482,10 @@ const assembleAlphabetMemberList = async (newMemberList) => {
|
|||||||
}
|
}
|
||||||
getPosiByDep(departmentIdsArr)
|
getPosiByDep(departmentIdsArr)
|
||||||
} else {
|
} else {
|
||||||
state.resultMemberList = [
|
state.resultMemberList = [{
|
||||||
{
|
|
||||||
key: '',
|
key: '',
|
||||||
memberList: newMemberList,
|
memberList: newMemberList,
|
||||||
},
|
}, ]
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -571,17 +537,15 @@ const getPosiByDep = async (departmentIdsArr) => {
|
|||||||
if (state?.searchText) {
|
if (state?.searchText) {
|
||||||
const lowerCaseSearchText = state?.searchText.toLowerCase()
|
const lowerCaseSearchText = state?.searchText.toLowerCase()
|
||||||
departmentAllPositions = departmentAllPositions.filter((item) =>
|
departmentAllPositions = departmentAllPositions.filter((item) =>
|
||||||
state?.searchText
|
state?.searchText ?
|
||||||
? item.nickname.toLowerCase().includes(lowerCaseSearchText)
|
item.nickname.toLowerCase().includes(lowerCaseSearchText) :
|
||||||
: true,
|
true,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
state.resultMemberList = [
|
state.resultMemberList = [{
|
||||||
{
|
|
||||||
key: '',
|
key: '',
|
||||||
memberList: departmentAllPositions,
|
memberList: departmentAllPositions,
|
||||||
},
|
}, ]
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//滚动到指定的view
|
//滚动到指定的view
|
||||||
@ -590,11 +554,11 @@ const scrollToView = (alphabet) => {
|
|||||||
state.isAssign = true
|
state.isAssign = true
|
||||||
|
|
||||||
// 计算偏移高度
|
// 计算偏移高度
|
||||||
const offsetHeight = document.getElementById('topArea')?.clientHeight
|
const offsetHeight = document.getElementById('topArea')?.clientHeight ?
|
||||||
? document.getElementById('topArea').clientHeight - 1
|
document.getElementById('topArea').clientHeight - 1 :
|
||||||
: props?.manageType === 'mention'
|
props?.manageType === 'mention' ?
|
||||||
? 140
|
140 :
|
||||||
: 80
|
80
|
||||||
|
|
||||||
// 使用scrollIntoViewById处理所有情况
|
// 使用scrollIntoViewById处理所有情况
|
||||||
const targetId = alphabet === '#' ? 'special-hash' : alphabet
|
const targetId = alphabet === '#' ? 'special-hash' : alphabet
|
||||||
@ -669,12 +633,14 @@ const confirmSelectMembers = () => {
|
|||||||
}
|
}
|
||||||
console.log(params)
|
console.log(params)
|
||||||
const resp = ServeGroupNoSpeak(params)
|
const resp = ServeGroupNoSpeak(params)
|
||||||
resp.then(({ code, data }) => {
|
resp.then(({
|
||||||
|
code,
|
||||||
|
data
|
||||||
|
}) => {
|
||||||
console.log(data)
|
console.log(data)
|
||||||
if (code == 200) {
|
if (code == 200) {
|
||||||
useDialogueStore().updateGroupMembers()
|
useDialogueStore().updateGroupMembers()
|
||||||
} else {
|
} else {}
|
||||||
}
|
|
||||||
})
|
})
|
||||||
resp.catch(() => {})
|
resp.catch(() => {})
|
||||||
} else if (props?.manageType === 'admin') {
|
} else if (props?.manageType === 'admin') {
|
||||||
@ -696,12 +662,14 @@ const confirmSelectMembers = () => {
|
|||||||
}
|
}
|
||||||
console.log(params)
|
console.log(params)
|
||||||
const resp = ServeGroupAssignAdmin(params)
|
const resp = ServeGroupAssignAdmin(params)
|
||||||
resp.then(({ code, data }) => {
|
resp.then(({
|
||||||
|
code,
|
||||||
|
data
|
||||||
|
}) => {
|
||||||
console.log(data)
|
console.log(data)
|
||||||
if (code == 200) {
|
if (code == 200) {
|
||||||
useDialogueStore().updateGroupMembers()
|
useDialogueStore().updateGroupMembers()
|
||||||
} else {
|
} else {}
|
||||||
}
|
|
||||||
})
|
})
|
||||||
resp.catch(() => {})
|
resp.catch(() => {})
|
||||||
} else if (
|
} else if (
|
||||||
@ -716,12 +684,14 @@ const confirmSelectMembers = () => {
|
|||||||
}
|
}
|
||||||
console.log(params)
|
console.log(params)
|
||||||
const resp = ServeEditGroupAdmin(params)
|
const resp = ServeEditGroupAdmin(params)
|
||||||
resp.then(({ code, data }) => {
|
resp.then(({
|
||||||
|
code,
|
||||||
|
data
|
||||||
|
}) => {
|
||||||
console.log(data)
|
console.log(data)
|
||||||
if (code == 200) {
|
if (code == 200) {
|
||||||
groupStore.ServeGroupDetail()
|
groupStore.ServeGroupDetail()
|
||||||
} else {
|
} else {}
|
||||||
}
|
|
||||||
})
|
})
|
||||||
resp.catch(() => {})
|
resp.catch(() => {})
|
||||||
}
|
}
|
||||||
@ -733,15 +703,17 @@ const confirmSelectMembers = () => {
|
|||||||
}
|
}
|
||||||
console.log(params)
|
console.log(params)
|
||||||
const resp = ServeRemoveMembersGroup(params)
|
const resp = ServeRemoveMembersGroup(params)
|
||||||
resp.then(({ code, data }) => {
|
resp.then(({
|
||||||
|
code,
|
||||||
|
data
|
||||||
|
}) => {
|
||||||
console.log(data)
|
console.log(data)
|
||||||
if (code == 200) {
|
if (code == 200) {
|
||||||
// console.error(-selectedUserIds.split(',').length)
|
// console.error(-selectedUserIds.split(',').length)
|
||||||
emits('updateSelectedMembersNum', -selectedUserIds.split(',').length)
|
emits('updateSelectedMembersNum', -selectedUserIds.split(',').length)
|
||||||
useDialogueStore().updateGroupMembers()
|
useDialogueStore().updateGroupMembers()
|
||||||
groupStore.ServeGroupDetail()
|
groupStore.ServeGroupDetail()
|
||||||
} else {
|
} else {}
|
||||||
}
|
|
||||||
})
|
})
|
||||||
resp.catch(() => {})
|
resp.catch(() => {})
|
||||||
} else if (props?.manageType === 'mention') {
|
} else if (props?.manageType === 'mention') {
|
||||||
@ -756,13 +728,38 @@ defineExpose({
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
.my-self {
|
||||||
|
padding: 10rpx 60rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #fff;
|
||||||
|
|
||||||
|
|
||||||
|
.my-self-left {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-left: 8%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.my-self-right {
|
||||||
|
color: #b4b4b4;
|
||||||
|
padding: 0.1875rem 0.375rem;
|
||||||
|
border: #b4b4b4 1px solid;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.select-member-by-alphabet {
|
.select-member-by-alphabet {
|
||||||
.select-members {
|
.select-members {
|
||||||
padding: 20rpx 32rpx;
|
padding: 20rpx 32rpx;
|
||||||
|
|
||||||
.search-member {
|
.search-member {
|
||||||
padding: 22rpx 16rpx;
|
padding: 22rpx 16rpx;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.member-list {
|
.member-list {
|
||||||
.member-list-alphabet-anchor-point {
|
.member-list-alphabet-anchor-point {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
@ -773,12 +770,14 @@ defineExpose({
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|
||||||
.member-list-alphabet-anchor-point-each {
|
.member-list-alphabet-anchor-point-each {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
margin: 0 0 14rpx;
|
margin: 0 0 14rpx;
|
||||||
|
|
||||||
span {
|
span {
|
||||||
width: 52rpx;
|
width: 52rpx;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@ -787,9 +786,11 @@ defineExpose({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.member-list-alphabet {
|
.member-list-alphabet {
|
||||||
.member-list-alphabet-key {
|
.member-list-alphabet-key {
|
||||||
background-color: #f3f3f3;
|
background-color: #f3f3f3;
|
||||||
|
|
||||||
span {
|
span {
|
||||||
line-height: 44rpx;
|
line-height: 44rpx;
|
||||||
color: $theme-text;
|
color: $theme-text;
|
||||||
|
@ -6,71 +6,42 @@
|
|||||||
<customNavbar :title="$t('index.chat.settings')"></customNavbar>
|
<customNavbar :title="$t('index.chat.settings')"></customNavbar>
|
||||||
</template>
|
</template>
|
||||||
<div class="chat-settings">
|
<div class="chat-settings">
|
||||||
<div
|
<div class="chat-group-base-infos chat-settings-card" v-if="dialogueParams.type === 2">
|
||||||
class="chat-group-base-infos chat-settings-card"
|
|
||||||
v-if="dialogueParams.type === 2"
|
|
||||||
>
|
|
||||||
<div class="base-info-avatar" @click="toEditAvatarPage">
|
<div class="base-info-avatar" @click="toEditAvatarPage">
|
||||||
<avatarModule
|
<avatarModule :mode="2" :avatar="groupParams?.groupInfo?.avatar"
|
||||||
:mode="2"
|
:groupType="groupParams?.groupInfo?.group_type" :customStyle="{ width: '96rpx', height: '96rpx' }">
|
||||||
:avatar="groupParams?.groupInfo?.avatar"
|
</avatarModule>
|
||||||
:groupType="groupParams?.groupInfo?.group_type"
|
|
||||||
:customStyle="{ width: '96rpx', height: '96rpx' }"
|
|
||||||
></avatarModule>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="base-info">
|
<div class="base-info">
|
||||||
<div class="base-info-name">
|
<div class="base-info-name">
|
||||||
<span class="text-[32rpx] font-medium">{{ groupName }}</span>
|
<span class="text-[32rpx] font-medium">{{ groupName }}</span>
|
||||||
<span
|
<span class="base-info_num text-[32rpx] font-medium" v-if="groupNum">
|
||||||
class="base-info_num text-[32rpx] font-medium"
|
|
||||||
v-if="groupNum"
|
|
||||||
>
|
|
||||||
{{ '(' + groupNum + ')' }}
|
{{ '(' + groupNum + ')' }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div v-if="groupParams?.groupInfo?.group_type !== 1 && groupType" class="base-info-tag" :style="{
|
||||||
v-if="groupParams?.groupInfo?.group_type !== 1 && groupType"
|
|
||||||
class="base-info-tag"
|
|
||||||
:style="{
|
|
||||||
borderColor:
|
borderColor:
|
||||||
groupTypeMapping[groupParams?.groupInfo?.group_type]
|
groupTypeMapping[groupParams?.groupInfo?.group_type]
|
||||||
?.result_type_color,
|
?.result_type_color,
|
||||||
}"
|
}">
|
||||||
>
|
<span class="text-[24rpx] font-medium" :style="{
|
||||||
<span
|
|
||||||
class="text-[24rpx] font-medium"
|
|
||||||
:style="{
|
|
||||||
color:
|
color:
|
||||||
groupTypeMapping[groupParams?.groupInfo?.group_type]
|
groupTypeMapping[groupParams?.groupInfo?.group_type]
|
||||||
?.result_type_color,
|
?.result_type_color,
|
||||||
}"
|
}">
|
||||||
>
|
|
||||||
{{ groupType }}
|
{{ groupType }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="base-info-edit" @click="toEditGroupInfoPage" v-if="groupParams?.groupInfo?.is_manager">
|
||||||
class="base-info-edit"
|
|
||||||
@click="toEditGroupInfoPage"
|
|
||||||
v-if="groupParams?.groupInfo?.is_manager"
|
|
||||||
>
|
|
||||||
<img src="@/static/image/chatSettings/edit-btn.png" />
|
<img src="@/static/image/chatSettings/edit-btn.png" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="chat-group-members chat-group-infos chat-settings-card">
|
<div class="chat-group-members chat-group-infos chat-settings-card">
|
||||||
<div
|
<div class="chat-group-infos-each" v-for="(item, index) in state.chatGroupMembers" :key="index">
|
||||||
class="chat-group-infos-each"
|
<settingFormItem :item="item" @toManagePage="toManagePage"></settingFormItem>
|
||||||
v-for="(item, index) in state.chatGroupMembers"
|
<groupMemberList :groupType="groupParams?.groupInfo?.group_type"
|
||||||
:key="index"
|
:is_manager="groupParams?.groupInfo?.is_manager" :memberList="dialogueParams?.memberList"
|
||||||
>
|
|
||||||
<settingFormItem
|
|
||||||
:item="item"
|
|
||||||
@toManagePage="toManagePage"
|
|
||||||
></settingFormItem>
|
|
||||||
<groupMemberList
|
|
||||||
:groupType="groupParams?.groupInfo?.group_type"
|
|
||||||
:is_manager="groupParams?.groupInfo?.is_manager"
|
|
||||||
:memberList="dialogueParams?.memberList"
|
|
||||||
:memberListsLimit="
|
:memberListsLimit="
|
||||||
groupParams?.groupInfo?.group_type == 1 ||
|
groupParams?.groupInfo?.group_type == 1 ||
|
||||||
groupParams?.groupInfo?.group_type == 3
|
groupParams?.groupInfo?.group_type == 3
|
||||||
@ -78,21 +49,13 @@
|
|||||||
? 13
|
? 13
|
||||||
: 14
|
: 14
|
||||||
: 15
|
: 15
|
||||||
"
|
"></groupMemberList>
|
||||||
></groupMemberList>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="chat-group-infos chat-settings-card">
|
<div class="chat-group-infos chat-settings-card">
|
||||||
<div
|
<div class="chat-group-infos-each" v-for="(item, index) in state.chatGroupInfos" :key="index">
|
||||||
class="chat-group-infos-each"
|
<settingFormItem :item="item" @toManagePage="toManagePage"
|
||||||
v-for="(item, index) in state.chatGroupInfos"
|
:isManager="groupParams?.groupInfo?.is_manager"></settingFormItem>
|
||||||
:key="index"
|
|
||||||
>
|
|
||||||
<settingFormItem
|
|
||||||
:item="item"
|
|
||||||
@toManagePage="toManagePage"
|
|
||||||
:isManager="groupParams?.groupInfo?.is_manager"
|
|
||||||
></settingFormItem>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="chat-records-search chat-settings-card">
|
<div class="chat-records-search chat-settings-card">
|
||||||
@ -100,92 +63,50 @@
|
|||||||
<customInput :disabled="true"></customInput>
|
<customInput :disabled="true"></customInput>
|
||||||
</div>
|
</div>
|
||||||
<div class="record-search-types">
|
<div class="record-search-types">
|
||||||
<div
|
<div class="record-search-types-each" v-for="(item, index) in state.recordSearchTypeList" :key="index"
|
||||||
class="record-search-types-each"
|
@click="toSearchByConditionPage(index)">
|
||||||
v-for="(item, index) in state.recordSearchTypeList"
|
|
||||||
:key="index"
|
|
||||||
@click="toSearchByConditionPage(index)"
|
|
||||||
>
|
|
||||||
<img class="record-search-types-icon" :src="item.typeIcon" />
|
<img class="record-search-types-icon" :src="item.typeIcon" />
|
||||||
<span class="text-[24rpx] font-regular">{{ item.value }}</span>
|
<span class="text-[24rpx] font-regular">{{ item.value }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="chat-group-infos chat-settings-card">
|
<div class="chat-group-infos chat-settings-card">
|
||||||
<div
|
<div class="chat-group-infos-each" v-for="(item, index) in state.chatSettings" :key="index">
|
||||||
class="chat-group-infos-each"
|
<settingFormItem :item="item" @toManagePage="toManagePage" :sessionInfo="state?.sessionInfo"
|
||||||
v-for="(item, index) in state.chatSettings"
|
@changeSwitch="changeSwitch"></settingFormItem>
|
||||||
:key="index"
|
|
||||||
>
|
|
||||||
<settingFormItem
|
|
||||||
:item="item"
|
|
||||||
@toManagePage="toManagePage"
|
|
||||||
:sessionInfo="state?.sessionInfo"
|
|
||||||
@changeSwitch="changeSwitch"
|
|
||||||
></settingFormItem>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="chat-group-infos chat-settings-card" v-if="groupParams?.groupInfo?.is_manager">
|
||||||
class="chat-group-infos chat-settings-card"
|
<div class="chat-group-infos-each" v-for="(item, index) in state.chatManagement" :key="index">
|
||||||
v-if="groupParams?.groupInfo?.is_manager"
|
<settingFormItem :item="item" @toManagePage="toManagePage"></settingFormItem>
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="chat-group-infos-each"
|
|
||||||
v-for="(item, index) in state.chatManagement"
|
|
||||||
:key="index"
|
|
||||||
>
|
|
||||||
<settingFormItem
|
|
||||||
:item="item"
|
|
||||||
@toManagePage="toManagePage"
|
|
||||||
></settingFormItem>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="chat-group-infos chat-settings-card">
|
||||||
class="chat-group-infos chat-settings-card"
|
<div class="chat-group-infos-each" v-for="(item, index) in state.chatReport" :key="index">
|
||||||
>
|
<settingFormItem :item="item" @toManagePage="toManagePage"></settingFormItem>
|
||||||
<div
|
|
||||||
class="chat-group-infos-each"
|
|
||||||
v-for="(item, index) in state.chatReport"
|
|
||||||
:key="index"
|
|
||||||
>
|
|
||||||
<settingFormItem
|
|
||||||
:item="item"
|
|
||||||
@toManagePage="toManagePage"
|
|
||||||
></settingFormItem>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clear-chat-record-btn chat-settings-card">
|
<div class="clear-chat-record-btn chat-settings-card">
|
||||||
<div
|
<div @click="showConfirmPrompt(1)" class="clear-chat-record-btn-each">
|
||||||
@click="showConfirmPrompt(1)"
|
|
||||||
class="clear-chat-record-btn-each"
|
|
||||||
>
|
|
||||||
<span class="text-[32rpx] font-regular">
|
<span class="text-[32rpx] font-regular">
|
||||||
{{ $t('chat.settings.clearChatRecord') }}
|
{{ $t('chat.settings.clearChatRecord') }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div @click="showConfirmPrompt(2)" class="clear-chat-record-btn-each" v-if="
|
||||||
@click="showConfirmPrompt(2)"
|
|
||||||
class="clear-chat-record-btn-each"
|
|
||||||
v-if="
|
|
||||||
groupParams?.groupInfo?.is_manager &&
|
groupParams?.groupInfo?.is_manager &&
|
||||||
dialogueParams.type === 2 &&
|
dialogueParams.type === 2 &&
|
||||||
(groupParams?.groupInfo?.group_type === 1 ||
|
(groupParams?.groupInfo?.group_type === 1 ||
|
||||||
groupParams?.groupInfo?.group_type === 3)
|
groupParams?.groupInfo?.group_type === 3)
|
||||||
"
|
">
|
||||||
>
|
|
||||||
<span class="text-[32rpx] font-regular">
|
<span class="text-[32rpx] font-regular">
|
||||||
{{ $t('group.disband.btn') }}
|
{{ $t('group.disband.btn') }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div @click="showConfirmPrompt(3)" class="clear-chat-record-btn-each" v-if="
|
||||||
@click="showConfirmPrompt(3)"
|
|
||||||
class="clear-chat-record-btn-each"
|
|
||||||
v-if="
|
|
||||||
dialogueParams.type === 2 &&
|
dialogueParams.type === 2 &&
|
||||||
(groupParams?.groupInfo?.group_type === 1 ||
|
(groupParams?.groupInfo?.group_type === 1 ||
|
||||||
groupParams?.groupInfo?.group_type === 3)
|
groupParams?.groupInfo?.group_type === 3)
|
||||||
"
|
">
|
||||||
>
|
|
||||||
<span class="text-[32rpx] font-regular">
|
<span class="text-[32rpx] font-regular">
|
||||||
{{ $t('group.quit.btn') }}
|
{{ $t('group.quit.btn') }}
|
||||||
</span>
|
</span>
|
||||||
@ -207,7 +128,12 @@ import recordSearchTypeIcon_link from '@/static/image/chatSettings/recordSearchT
|
|||||||
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 settingFormItem from './components/settingFormItem.vue'
|
import settingFormItem from './components/settingFormItem.vue'
|
||||||
import groupMemberList from './components/groupMembersList.vue'
|
import groupMemberList from './components/groupMembersList.vue'
|
||||||
import { computed, onMounted, reactive, watch } from 'vue'
|
import {
|
||||||
|
computed,
|
||||||
|
onMounted,
|
||||||
|
reactive,
|
||||||
|
watch
|
||||||
|
} from 'vue'
|
||||||
import {
|
import {
|
||||||
useUserStore,
|
useUserStore,
|
||||||
useTalkStore,
|
useTalkStore,
|
||||||
@ -215,17 +141,28 @@ import {
|
|||||||
useGroupStore,
|
useGroupStore,
|
||||||
useGroupTypeStore,
|
useGroupTypeStore,
|
||||||
} from '@/store'
|
} from '@/store'
|
||||||
import { onLoad } from '@dcloudio/uni-app'
|
import {
|
||||||
|
onLoad
|
||||||
|
} from '@dcloudio/uni-app'
|
||||||
import {
|
import {
|
||||||
ServeInviteGroup,
|
ServeInviteGroup,
|
||||||
ServeDismissGroup,
|
ServeDismissGroup,
|
||||||
ServeSecedeGroup,
|
ServeSecedeGroup,
|
||||||
} from '@/api/group/index'
|
} from '@/api/group/index'
|
||||||
import { ServeTopTalkList, ServeSetNotDisturb } from '@/api/chat/index'
|
import {
|
||||||
import { useI18n } from 'vue-i18n'
|
ServeTopTalkList,
|
||||||
const { t } = useI18n()
|
ServeSetNotDisturb
|
||||||
|
} from '@/api/chat/index'
|
||||||
|
import {
|
||||||
|
useI18n
|
||||||
|
} from 'vue-i18n'
|
||||||
|
const {
|
||||||
|
t
|
||||||
|
} = useI18n()
|
||||||
import customInput from '@/components/custom-input/custom-input.vue'
|
import customInput from '@/components/custom-input/custom-input.vue'
|
||||||
const { showConfirm } = useConfirm()
|
const {
|
||||||
|
showConfirm
|
||||||
|
} = useConfirm()
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const talkStore = useTalkStore()
|
const talkStore = useTalkStore()
|
||||||
const dialogueStore = useDialogueStore()
|
const dialogueStore = useDialogueStore()
|
||||||
@ -265,8 +202,9 @@ watch(
|
|||||||
[() => groupParams.groupInfo, () => groupParams.groupNotice],
|
[() => groupParams.groupInfo, () => groupParams.groupNotice],
|
||||||
([newGroupInfo, newGroupNotice]) => {
|
([newGroupInfo, newGroupNotice]) => {
|
||||||
updateGroupInfos()
|
updateGroupInfos()
|
||||||
|
}, {
|
||||||
|
deep: true
|
||||||
},
|
},
|
||||||
{ deep: true },
|
|
||||||
)
|
)
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
@ -307,8 +245,7 @@ onLoad(async (options) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
state.recordSearchTypeList = [
|
state.recordSearchTypeList = [{
|
||||||
{
|
|
||||||
value: t('record.searchType.date'),
|
value: t('record.searchType.date'),
|
||||||
typeIcon: recordSearchTypeIcon_date,
|
typeIcon: recordSearchTypeIcon_date,
|
||||||
},
|
},
|
||||||
@ -331,8 +268,7 @@ onMounted(() => {
|
|||||||
typeIcon: recordSearchTypeIcon_groupMember,
|
typeIcon: recordSearchTypeIcon_groupMember,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
state.chatSettings = [
|
state.chatSettings = [{
|
||||||
{
|
|
||||||
label: t('chat.settings.topSession'),
|
label: t('chat.settings.topSession'),
|
||||||
hasPointer: false,
|
hasPointer: false,
|
||||||
value: '',
|
value: '',
|
||||||
@ -347,12 +283,10 @@ onMounted(() => {
|
|||||||
customInfo: 'switch',
|
customInfo: 'switch',
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
state.chatReport = [
|
state.chatReport = [{
|
||||||
// {
|
label: t('chat.settings.report'),
|
||||||
// label: t('chat.settings.report'),
|
hasPointer: true,
|
||||||
// hasPointer: true,
|
}, ]
|
||||||
// },
|
|
||||||
]
|
|
||||||
})
|
})
|
||||||
|
|
||||||
//群名称
|
//群名称
|
||||||
@ -392,17 +326,14 @@ const groupType = computed(() => {
|
|||||||
|
|
||||||
//更新群信息
|
//更新群信息
|
||||||
const updateGroupInfos = () => {
|
const updateGroupInfos = () => {
|
||||||
state.chatGroupMembers = [
|
state.chatGroupMembers = [{
|
||||||
{
|
|
||||||
label: t('chat.settings.groupMember'),
|
label: t('chat.settings.groupMember'),
|
||||||
hasPointer: true,
|
hasPointer: true,
|
||||||
value: '全部(' + groupNum.value + ')',
|
value: '全部(' + groupNum.value + ')',
|
||||||
subValue: '',
|
subValue: '',
|
||||||
customInfo: '',
|
customInfo: '',
|
||||||
},
|
}, ]
|
||||||
]
|
state.chatGroupInfos = [{
|
||||||
state.chatGroupInfos = [
|
|
||||||
{
|
|
||||||
label: t('chat.settings.groupName'),
|
label: t('chat.settings.groupName'),
|
||||||
hasPointer: groupParams?.groupInfo?.is_manager ? true : false,
|
hasPointer: groupParams?.groupInfo?.is_manager ? true : false,
|
||||||
value: groupName.value,
|
value: groupName.value,
|
||||||
@ -434,8 +365,7 @@ const updateGroupInfos = () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
state.chatManagement = [
|
state.chatManagement = [{
|
||||||
{
|
|
||||||
label: t('chat.settings.groupGag'),
|
label: t('chat.settings.groupGag'),
|
||||||
hasPointer: true,
|
hasPointer: true,
|
||||||
value: '',
|
value: '',
|
||||||
@ -490,8 +420,7 @@ const toManagePage = (label) => {
|
|||||||
})
|
})
|
||||||
} else if (label === t('chat.settings.groupMember')) {
|
} else if (label === t('chat.settings.groupMember')) {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url:
|
url: '/pages/chatSettings/groupManage/manageGroupMembers?groupId=' +
|
||||||
'/pages/chatSettings/groupManage/manageGroupMembers?groupId=' +
|
|
||||||
state.groupId,
|
state.groupId,
|
||||||
})
|
})
|
||||||
} else if (label === t('chat.settings.groupGag')) {
|
} else if (label === t('chat.settings.groupGag')) {
|
||||||
@ -502,6 +431,10 @@ const toManagePage = (label) => {
|
|||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/pages/chatSettings/groupManage/manageGroupAdmin',
|
url: '/pages/chatSettings/groupManage/manageGroupAdmin',
|
||||||
})
|
})
|
||||||
|
} else if (label === t('chat.settings.report')) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/complaintReport/index',
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -515,8 +448,7 @@ const toSearchByConditionPage = (flag) => {
|
|||||||
}
|
}
|
||||||
if (flag == flagIndex) {
|
if (flag == flagIndex) {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url:
|
url: '/pages/chatSettings/groupManage/selectMembers?manageType=searchRecord',
|
||||||
'/pages/chatSettings/groupManage/selectMembers?manageType=searchRecord',
|
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
if (flag == flagIndex + 1) {
|
if (flag == flagIndex + 1) {
|
||||||
@ -553,7 +485,10 @@ const changeSwitch = (switchStatus, label) => {
|
|||||||
resp = ServeSetNotDisturb(params)
|
resp = ServeSetNotDisturb(params)
|
||||||
}
|
}
|
||||||
console.log(resp)
|
console.log(resp)
|
||||||
resp.then(({ code, data }) => {
|
resp.then(({
|
||||||
|
code,
|
||||||
|
data
|
||||||
|
}) => {
|
||||||
console.log(data)
|
console.log(data)
|
||||||
if (code == 200) {
|
if (code == 200) {
|
||||||
if (label == t('chat.settings.topSession')) {
|
if (label == t('chat.settings.topSession')) {
|
||||||
@ -567,8 +502,7 @@ const changeSwitch = (switchStatus, label) => {
|
|||||||
is_disturb: switchStatus ? 1 : 0,
|
is_disturb: switchStatus ? 1 : 0,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
} else {}
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
resp.catch(() => {})
|
resp.catch(() => {})
|
||||||
@ -649,13 +583,15 @@ const showConfirmPrompt = (flag) => {
|
|||||||
//退出群聊
|
//退出群聊
|
||||||
ServeSecedeGroup({
|
ServeSecedeGroup({
|
||||||
group_id: dialogueParams.receiver_id,
|
group_id: dialogueParams.receiver_id,
|
||||||
}).then(({ code, message }) => {
|
}).then(({
|
||||||
|
code,
|
||||||
|
message
|
||||||
|
}) => {
|
||||||
if (code == 200) {
|
if (code == 200) {
|
||||||
uni.navigateBack({
|
uni.navigateBack({
|
||||||
delta: 2,
|
delta: 2,
|
||||||
})
|
})
|
||||||
} else {
|
} else {}
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -696,8 +632,7 @@ const toSearchPage = () => {
|
|||||||
// '/pages/search/searchByCondition/index?condition=text'
|
// '/pages/search/searchByCondition/index?condition=text'
|
||||||
// })
|
// })
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url:
|
url: '/pages/search/moreResult/moreResultDetail?talk_type=' +
|
||||||
'/pages/search/moreResult/moreResultDetail?talk_type=' +
|
|
||||||
dialogueParams.type +
|
dialogueParams.type +
|
||||||
'&receiver_id=' +
|
'&receiver_id=' +
|
||||||
dialogueParams.receiver_id +
|
dialogueParams.receiver_id +
|
||||||
@ -742,22 +677,27 @@ const toSearchPage = () => {
|
|||||||
.base-info-avatar {
|
.base-info-avatar {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.base-info {
|
.base-info {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 0 30rpx;
|
margin: 0 30rpx;
|
||||||
|
|
||||||
.base-info-name {
|
.base-info-name {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
|
|
||||||
span {
|
span {
|
||||||
line-height: 44rpx;
|
line-height: 44rpx;
|
||||||
color: $theme-text;
|
color: $theme-text;
|
||||||
}
|
}
|
||||||
|
|
||||||
.base-info_num {
|
.base-info_num {
|
||||||
line-height: 44rpx;
|
line-height: 44rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.base-info-tag {
|
.base-info-tag {
|
||||||
border: 2rpx solid #7a58de;
|
border: 2rpx solid #7a58de;
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -768,6 +708,7 @@ const toSearchPage = () => {
|
|||||||
margin: 10rpx 0 0;
|
margin: 10rpx 0 0;
|
||||||
border-radius: 8rpx;
|
border-radius: 8rpx;
|
||||||
width: 80rpx;
|
width: 80rpx;
|
||||||
|
|
||||||
span {
|
span {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
color: #7a58de;
|
color: #7a58de;
|
||||||
@ -775,10 +716,12 @@ const toSearchPage = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.base-info-edit {
|
.base-info-edit {
|
||||||
width: 36rpx;
|
width: 36rpx;
|
||||||
height: 36rpx;
|
height: 36rpx;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@ -786,15 +729,16 @@ const toSearchPage = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-group-members {
|
.chat-group-members {}
|
||||||
}
|
|
||||||
|
|
||||||
.chat-group-infos {
|
.chat-group-infos {
|
||||||
padding: 0 16rpx;
|
padding: 0 16rpx;
|
||||||
|
|
||||||
.chat-group-infos-each {
|
.chat-group-infos-each {
|
||||||
padding: 32rpx 14rpx;
|
padding: 32rpx 14rpx;
|
||||||
border-bottom: 1px solid $theme-border-color;
|
border-bottom: 1px solid $theme-border-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-group-infos-each:last-child {
|
.chat-group-infos-each:last-child {
|
||||||
border-bottom: 0;
|
border-bottom: 0;
|
||||||
}
|
}
|
||||||
@ -809,6 +753,7 @@ const toSearchPage = () => {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
|
||||||
.record-search-types-each {
|
.record-search-types-each {
|
||||||
width: calc(100% / 4);
|
width: calc(100% / 4);
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -816,12 +761,14 @@ const toSearchPage = () => {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
margin: 36rpx 0 0;
|
margin: 36rpx 0 0;
|
||||||
|
|
||||||
.record-search-types-icon {
|
.record-search-types-icon {
|
||||||
width: 106rpx;
|
width: 106rpx;
|
||||||
height: 106rpx;
|
height: 106rpx;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
background-color: #f9f9f9;
|
background-color: #f9f9f9;
|
||||||
}
|
}
|
||||||
|
|
||||||
span {
|
span {
|
||||||
line-height: 34px;
|
line-height: 34px;
|
||||||
color: #666666;
|
color: #666666;
|
||||||
@ -835,6 +782,7 @@ const toSearchPage = () => {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|
||||||
.clear-chat-record-btn-each {
|
.clear-chat-record-btn-each {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
@ -849,6 +797,7 @@ const toSearchPage = () => {
|
|||||||
color: #cf3050;
|
color: #cf3050;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.clear-chat-record-btn-each:last-child {
|
.clear-chat-record-btn-each:last-child {
|
||||||
border-bottom: 0;
|
border-bottom: 0;
|
||||||
}
|
}
|
||||||
|
@ -3,20 +3,358 @@
|
|||||||
<div class="root">
|
<div class="root">
|
||||||
<ZPaging ref="zPaging" :show-scrollbar="false">
|
<ZPaging ref="zPaging" :show-scrollbar="false">
|
||||||
<template #top>
|
<template #top>
|
||||||
<customNavbar class="tmNavBar"></customNavbar>
|
<customNavbar class="tmNavBar" :title="$t('complaint.title')"></customNavbar>
|
||||||
</template>
|
</template>
|
||||||
</ZPaging>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<script setup>
|
|
||||||
|
|
||||||
|
<!-- 投诉主体内容 -->
|
||||||
|
<view class="complaint-container">
|
||||||
|
<!-- 投诉类型选择 -->
|
||||||
|
<view class="form-item">
|
||||||
|
<text class="form-label">{{ $t('complaint.selectType') }}</text>
|
||||||
|
<picker mode="selector" :range="complaintTypes" range-key="label" @change="handleTypeChange">
|
||||||
|
<view class="picker">
|
||||||
|
{{ selectedType.label || $t('complaint.selectPlaceholder') }}
|
||||||
|
<uni-icons type="arrowright" size="16" color="#999"></uni-icons>
|
||||||
|
</view>
|
||||||
|
</picker>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 图片证据上传 -->
|
||||||
|
<view class="form-item">
|
||||||
|
<text class="form-label">{{ $t('complaint.imageEvidence') }}</text>
|
||||||
|
<view class="upload-area">
|
||||||
|
<view v-for="(img, index) in imageList" :key="index" class="image-wrapper">
|
||||||
|
<image :src="img" mode="aspectFill" class="uploaded-image" @click="previewImage(index)" />
|
||||||
|
<uni-icons type="close" size="18" color="#fff" class="delete-icon"
|
||||||
|
@click="removeImage(index)"></uni-icons>
|
||||||
|
</view>
|
||||||
|
<view v-if="imageList.length < 9" class="upload-btn" @click="chooseImage">
|
||||||
|
<uni-icons type="plusempty" size="28" color="#999"></uni-icons>
|
||||||
|
<text class="upload-text">{{ $t('complaint.addImage') }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 投诉内容 -->
|
||||||
|
<view class="form-item">
|
||||||
|
<text class="form-label">{{ $t('complaint.complaintContent') }}</text>
|
||||||
|
<textarea v-model="complaintContent" :placeholder="$t('complaint.contentPlaceholder')"
|
||||||
|
class="content-textarea"></textarea>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 投诉须知 -->
|
||||||
|
<view class="notice-box">
|
||||||
|
<view class="notice-header" @click="toggleNotice">
|
||||||
|
<text class="notice-title">{{ $t('complaint.noticeTitle') }}</text>
|
||||||
|
<text class="toggle-btn">
|
||||||
|
{{ isNoticeExpanded ? $t('complaint.collapse') : $t('complaint.expand') }}
|
||||||
|
</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 折叠状态只显示前两项 -->
|
||||||
|
<view class="notice-content" v-if="!isNoticeExpanded">
|
||||||
|
<view class="notice-item">
|
||||||
|
<text>{{ $t('complaint.noticeone') }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="notice-item">
|
||||||
|
<text>{{ $t('complaint.noticetwo') }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 展开状态显示全部 -->
|
||||||
|
<view class="notice-content" v-else>
|
||||||
|
<view class="notice-item">
|
||||||
|
<text>{{ $t('complaint.noticeone') }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="notice-item">
|
||||||
|
<text>{{ $t('complaint.noticetwo') }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="notice-item">
|
||||||
|
<text>{{ $t('complaint.noticethree') }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="notice-item">
|
||||||
|
<text>{{ $t('complaint.noticefour') }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="notice-item">
|
||||||
|
<text>{{ $t('complaint.noticefive') }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="notice-item">
|
||||||
|
<text>{{ $t('complaint.noticenoticeContent') }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<button class="submit-btn" :disabled="!selectedType.value" @click="handleSubmit">
|
||||||
|
{{ $t('complaint.submit') }}
|
||||||
|
</button>
|
||||||
|
</view>
|
||||||
|
</ZPaging>
|
||||||
|
|
||||||
|
<!-- 固定在底部的提交按钮 -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {
|
||||||
|
ref
|
||||||
|
} from 'vue';
|
||||||
|
import {
|
||||||
|
onLoad
|
||||||
|
} from '@dcloudio/uni-app';
|
||||||
|
import {
|
||||||
|
useI18n
|
||||||
|
} from 'vue-i18n';
|
||||||
|
|
||||||
|
const {
|
||||||
|
t
|
||||||
|
} = useI18n();
|
||||||
|
|
||||||
|
|
||||||
|
// 投诉类型选项
|
||||||
|
const complaintTypes = computed(() => [{
|
||||||
|
label: t('complaint.typeOptions.porn'),
|
||||||
|
value: 'porn'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('complaint.typeOptions.illegal'),
|
||||||
|
value: 'illegal'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('complaint.typeOptions.gambling'),
|
||||||
|
value: 'gambling'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('complaint.typeOptions.violence'),
|
||||||
|
value: 'violence'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('complaint.typeOptions.selfHarm'),
|
||||||
|
value: 'selfHarm'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: t('complaint.typeOptions.other'),
|
||||||
|
value: 'other'
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
// 表单数据
|
||||||
|
const selectedType = ref({});
|
||||||
|
const imageList = ref([]);
|
||||||
|
const complaintContent = ref('');
|
||||||
|
const isNoticeExpanded = ref(false);
|
||||||
|
|
||||||
|
// 切换投诉须知展开状态
|
||||||
|
const toggleNotice = () => {
|
||||||
|
isNoticeExpanded.value = !isNoticeExpanded.value;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 选择投诉类型
|
||||||
|
const handleTypeChange = (e) => {
|
||||||
|
selectedType.value = complaintTypes.value[e.detail.value];
|
||||||
|
};
|
||||||
|
|
||||||
|
// 选择图片
|
||||||
|
const chooseImage = () => {
|
||||||
|
uni.chooseImage({
|
||||||
|
count: 9 - imageList.value.length,
|
||||||
|
sizeType: ['compressed'],
|
||||||
|
sourceType: ['album', 'camera'],
|
||||||
|
success: (res) => {
|
||||||
|
imageList.value = [...imageList.value, ...res.tempFilePaths];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 删除图片
|
||||||
|
const removeImage = (index) => {
|
||||||
|
imageList.value.splice(index, 1);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 预览图片
|
||||||
|
const previewImage = (index) => {
|
||||||
|
uni.previewImage({
|
||||||
|
current: index,
|
||||||
|
urls: imageList.value
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 提交投诉
|
||||||
|
const handleSubmit = () => {
|
||||||
|
const formData = {
|
||||||
|
type: selectedType.value,
|
||||||
|
images: imageList.value,
|
||||||
|
content: complaintContent.value
|
||||||
|
};
|
||||||
|
uni.showLoading({
|
||||||
|
title: t('complaint.toast.submitting') // 使用国际化文本
|
||||||
|
});
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.hideLoading();
|
||||||
|
uni.showToast({
|
||||||
|
title: t('complaint.toast.success'),
|
||||||
|
icon: 'success'
|
||||||
|
});
|
||||||
|
selectedType.value = {};
|
||||||
|
imageList.value = [];
|
||||||
|
complaintContent.value = '';
|
||||||
|
// 返回上一页
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.navigateBack();
|
||||||
|
}, 1500);
|
||||||
|
}, 2000);
|
||||||
|
};
|
||||||
|
|
||||||
|
onLoad(() => {
|
||||||
|
// 页面加载时初始化
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
::v-deep .uni-picker-action-confirm {
|
||||||
|
color: #452aa1 !important;
|
||||||
|
}
|
||||||
|
|
||||||
.outer-layer {
|
.outer-layer {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
background-image: url('@/static/image/mine/1111.png');
|
background-image: url('@/static/image/mine/1111.png');
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.complaint-container {
|
||||||
|
padding: 20rpx 30rpx;
|
||||||
|
background-color: rgba(255, 255, 255, 0.9);
|
||||||
|
margin: 20rpx;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-item {
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-label {
|
||||||
|
display: block;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.picker {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 24rpx;
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-area {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-btn {
|
||||||
|
width: 160rpx;
|
||||||
|
height: 160rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
border: 1rpx dashed #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-text {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999;
|
||||||
|
margin-top: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-wrapper {
|
||||||
|
width: 160rpx;
|
||||||
|
height: 160rpx;
|
||||||
|
position: relative;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uploaded-image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.delete-icon {
|
||||||
|
position: absolute;
|
||||||
|
top: 8rpx;
|
||||||
|
right: 8rpx;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
border-radius: 50%;
|
||||||
|
padding: 4rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-textarea {
|
||||||
|
width: 100%;
|
||||||
|
height: 200rpx;
|
||||||
|
padding: 20rpx;
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-box {
|
||||||
|
padding: 20rpx;
|
||||||
|
background-color: #f0f7ff;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
margin: 40rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-title {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #452aa1;
|
||||||
|
font-weight: bold;
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 20rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-btn {
|
||||||
|
color: #452aa1;
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-content {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #666;
|
||||||
|
line-height: 1.6;
|
||||||
|
padding-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-btn {
|
||||||
|
margin-top: 40rpx;
|
||||||
|
background-color: #452aa1;
|
||||||
|
color: white;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
height: 90rpx;
|
||||||
|
line-height: 90rpx;
|
||||||
|
font-size: 32rpx;
|
||||||
|
|
||||||
|
&[disabled] {
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -8,12 +8,8 @@
|
|||||||
<div class="group-avatar flex items-center justify-center">
|
<div class="group-avatar flex items-center justify-center">
|
||||||
<div class="avatar-placeholder" v-if="groupActiveIndex === -1"></div>
|
<div class="avatar-placeholder" v-if="groupActiveIndex === -1"></div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<avatarModule
|
<avatarModule :mode="2" :avatar="avatarImg" :groupType="groupType"
|
||||||
:mode="2"
|
:customStyle="{ width: '192rpx', height: '192rpx' }"></avatarModule>
|
||||||
:avatar="avatarImg"
|
|
||||||
:groupType="groupType"
|
|
||||||
:customStyle="{ width: '192rpx', height: '192rpx' }"
|
|
||||||
></avatarModule>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group flex items-center justify-between">
|
<div class="input-group flex items-center justify-between">
|
||||||
@ -21,25 +17,12 @@
|
|||||||
群名称
|
群名称
|
||||||
</div>
|
</div>
|
||||||
<div class="input-box">
|
<div class="input-box">
|
||||||
<tm-input
|
<tm-input v-model="groupName" :followTheme="false" fontColor="#747474" placeholderStyle="color: #B4B4B4"
|
||||||
v-model="groupName"
|
focusColor="#FFF" :fontSize="28" :maxlength="20" :height="40" :transprent="true"
|
||||||
:followTheme="false"
|
placeholder="请输入群名称(1~20个字)" :padding="[0, 0]" align="right"></tm-input>
|
||||||
fontColor="#747474"
|
|
||||||
placeholderStyle="color: #B4B4B4"
|
|
||||||
focusColor="#FFF"
|
|
||||||
:fontSize="28"
|
|
||||||
:maxlength="20"
|
|
||||||
:height="40"
|
|
||||||
:transprent="true"
|
|
||||||
placeholder="请输入群名称(1~20个字)"
|
|
||||||
:padding="[0, 0]"
|
|
||||||
align="right"
|
|
||||||
></tm-input>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="input-group w-full flex flex-col mt-[20rpx] leading-[40rpx]">
|
||||||
class="input-group w-full flex flex-col mt-[20rpx] leading-[40rpx]"
|
|
||||||
>
|
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<div class="input-item">
|
<div class="input-item">
|
||||||
群类型
|
群类型
|
||||||
@ -52,117 +35,69 @@
|
|||||||
<span v-else-if="groupActiveIndex === 2">项目群</span>
|
<span v-else-if="groupActiveIndex === 2">项目群</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-[32rpx]">
|
<div class="ml-[32rpx]">
|
||||||
<tm-icon
|
<tm-icon :font-size="22" color="#747474" name="tmicon-angle-right"></tm-icon>
|
||||||
:font-size="22"
|
|
||||||
color="#747474"
|
|
||||||
name="tmicon-angle-right"
|
|
||||||
></tm-icon>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div v-if="depCheckedKeys.length && groupActiveIndex === 1" class="mt-[32rpx]">
|
||||||
v-if="depCheckedKeys.length && groupActiveIndex === 1"
|
<div v-for="(item, index) in depCheckedKeys" class="text-[#747474] text-[28rpx] leading-[40rpx] font-bold"
|
||||||
class="mt-[32rpx]"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
v-for="(item, index) in depCheckedKeys"
|
|
||||||
class="text-[#747474] text-[28rpx] leading-[40rpx] font-bold"
|
|
||||||
:class="[
|
:class="[
|
||||||
index !== 0 ? 'mt-[10rpx]' : '',
|
index !== 0 ? 'mt-[10rpx]' : '',
|
||||||
depsNoExpanded_1 && index > 4 ? 'hidden' : '',
|
depsNoExpanded_1 && index > 4 ? 'hidden' : '',
|
||||||
]"
|
]">
|
||||||
>
|
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="text-[#46299D] text-[28rpx] mt-[20rpx] font-bold flex justify-center">
|
||||||
class="text-[#46299D] text-[28rpx] mt-[20rpx] font-bold flex justify-center"
|
<div v-if="depCheckedKeys.length > 5" @click="depsNoExpanded_1 = !depsNoExpanded_1" class="w-[100rpx]">
|
||||||
>
|
|
||||||
<div
|
|
||||||
v-if="depCheckedKeys.length > 5"
|
|
||||||
@click="depsNoExpanded_1 = !depsNoExpanded_1"
|
|
||||||
class="w-[100rpx]"
|
|
||||||
>
|
|
||||||
{{ depsNoExpanded_1 ? '展开' : '收起' }}
|
{{ depsNoExpanded_1 ? '展开' : '收起' }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div v-if="groupActiveIndex === 0 || groupActiveIndex === 2"
|
||||||
v-if="groupActiveIndex === 0 || groupActiveIndex === 2"
|
class="input-group w-full flex flex-col mt-[20rpx] leading-[40rpx]">
|
||||||
class="input-group w-full flex flex-col mt-[20rpx] leading-[40rpx]"
|
|
||||||
>
|
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<div class="input-item">
|
<div class="input-item">
|
||||||
群成员
|
群成员
|
||||||
</div>
|
</div>
|
||||||
<div @click="chooseMembers" class="left-box">
|
<div @click="chooseMembers" class="left-box">
|
||||||
<div class="ml-[32rpx] flex items-center">
|
<div class="ml-[32rpx] flex items-center">
|
||||||
<div
|
<div class="text-[#B4B4B4] text-[28rpx] font-bold mr-[32rpx]">
|
||||||
class="text-[#B4B4B4] text-[28rpx] font-bold mr-[32rpx]"
|
|
||||||
>
|
|
||||||
全部({{ allChooseMembers?.length || 0 }})
|
全部({{ allChooseMembers?.length || 0 }})
|
||||||
</div>
|
</div>
|
||||||
<tm-icon
|
<tm-icon :font-size="22" color="#747474" name="tmicon-angle-right"></tm-icon>
|
||||||
:font-size="22"
|
|
||||||
color="#747474"
|
|
||||||
name="tmicon-angle-right"
|
|
||||||
></tm-icon>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<groupMemberList
|
<groupMemberList :groupType="3" :is_manager="true" :memberList="allChooseMembers" :memberListsLimit="15"
|
||||||
:groupType="3"
|
:hideAddRemoveBtns="true"></groupMemberList>
|
||||||
:is_manager="true"
|
|
||||||
:memberList="allChooseMembers"
|
|
||||||
:memberListsLimit="15"
|
|
||||||
:hideAddRemoveBtns="true"
|
|
||||||
></groupMemberList>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div v-if="groupActiveIndex === 1" class="input-group w-full flex flex-col mt-[20rpx] leading-[40rpx]">
|
||||||
v-if="groupActiveIndex === 1"
|
|
||||||
class="input-group w-full flex flex-col mt-[20rpx] leading-[40rpx]"
|
|
||||||
>
|
|
||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<div class="input-item">
|
<div class="input-item">
|
||||||
群管理员
|
群管理员
|
||||||
</div>
|
</div>
|
||||||
<div @click="chooseGroupAdmin" class="left-box">
|
<div @click="chooseGroupAdmin" class="left-box">
|
||||||
<div class="ml-[32rpx] flex items-center">
|
<div class="ml-[32rpx] flex items-center">
|
||||||
<div
|
<div v-if="!groupAdmins.length" class="text-[#B4B4B4] text-[28rpx] font-bold mr-[32rpx]">
|
||||||
v-if="!groupAdmins.length"
|
|
||||||
class="text-[#B4B4B4] text-[28rpx] font-bold mr-[32rpx]"
|
|
||||||
>
|
|
||||||
请选择群管理员
|
请选择群管理员
|
||||||
</div>
|
</div>
|
||||||
<tm-icon
|
<tm-icon :font-size="22" color="#747474" name="tmicon-angle-right"></tm-icon>
|
||||||
:font-size="22"
|
|
||||||
color="#747474"
|
|
||||||
name="tmicon-angle-right"
|
|
||||||
></tm-icon>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="groupAdmins.length" class="mt-[32rpx]">
|
<div v-if="groupAdmins.length" class="mt-[32rpx]">
|
||||||
<div
|
<div v-for="(item, index) in groupAdmins" class="text-[#747474] text-[28rpx] leading-[40rpx] font-bold"
|
||||||
v-for="(item, index) in groupAdmins"
|
|
||||||
class="text-[#747474] text-[28rpx] leading-[40rpx] font-bold"
|
|
||||||
:class="[
|
:class="[
|
||||||
index !== 0 ? 'mt-[10rpx]' : '',
|
index !== 0 ? 'mt-[10rpx]' : '',
|
||||||
depsNoExpanded_2 && index > 4 ? 'hidden' : '',
|
depsNoExpanded_2 && index > 4 ? 'hidden' : '',
|
||||||
]"
|
]">
|
||||||
>
|
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="text-[#46299D] text-[28rpx] mt-[20rpx] font-bold flex justify-center">
|
||||||
class="text-[#46299D] text-[28rpx] mt-[20rpx] font-bold flex justify-center"
|
<div v-if="groupAdmins.length > 5" @click="depsNoExpanded_2 = !depsNoExpanded_2" class="w-[100rpx]">
|
||||||
>
|
|
||||||
<div
|
|
||||||
v-if="groupAdmins.length > 5"
|
|
||||||
@click="depsNoExpanded_2 = !depsNoExpanded_2"
|
|
||||||
class="w-[100rpx]"
|
|
||||||
>
|
|
||||||
{{ depsNoExpanded_2 ? '展开' : '收起' }}
|
{{ depsNoExpanded_2 ? '展开' : '收起' }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -170,12 +105,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<template #bottom>
|
<template #bottom>
|
||||||
<customBtn
|
<customBtn :isBottom="true" :btnText="$t('pageTitle.create.group')" @click="handleConfirm"
|
||||||
:isBottom="true"
|
:disabled="confirmBtnStatus"></customBtn>
|
||||||
:btnText="$t('pageTitle.create.group')"
|
|
||||||
@click="handleConfirm"
|
|
||||||
:disabled="confirmBtnStatus"
|
|
||||||
></customBtn>
|
|
||||||
</template>
|
</template>
|
||||||
</zPaging>
|
</zPaging>
|
||||||
</div>
|
</div>
|
||||||
@ -186,16 +117,39 @@ import customBtn from '@/components/custom-btn/custom-btn.vue'
|
|||||||
import groupMemberList from '../chatSettings/components/groupMembersList.vue'
|
import groupMemberList from '../chatSettings/components/groupMembersList.vue'
|
||||||
import avatarModule from '@/components/avatar-module/index.vue'
|
import avatarModule from '@/components/avatar-module/index.vue'
|
||||||
|
|
||||||
import { ref, watch, computed, onMounted } from 'vue'
|
import {
|
||||||
import { onShow, onLoad, onUnload } from '@dcloudio/uni-app'
|
ref,
|
||||||
import { useChatList } from '@/store/chatList/index.js'
|
watch,
|
||||||
import { useAuth } from '@/store/auth'
|
computed,
|
||||||
import { useTalkStore, useUserStore, useGroupStore } from '@/store'
|
onMounted
|
||||||
|
} from 'vue'
|
||||||
|
import {
|
||||||
|
onShow,
|
||||||
|
onLoad,
|
||||||
|
onUnload
|
||||||
|
} from '@dcloudio/uni-app'
|
||||||
|
import {
|
||||||
|
useChatList
|
||||||
|
} from '@/store/chatList/index.js'
|
||||||
|
import {
|
||||||
|
useAuth
|
||||||
|
} from '@/store/auth'
|
||||||
|
import {
|
||||||
|
useTalkStore,
|
||||||
|
useUserStore,
|
||||||
|
useGroupStore
|
||||||
|
} from '@/store'
|
||||||
import addCircle from '@/static/image/chatList/addCircle.png'
|
import addCircle from '@/static/image/chatList/addCircle.png'
|
||||||
import cahtPopover from '@/static/image/chatList/cahtPopover.png'
|
import cahtPopover from '@/static/image/chatList/cahtPopover.png'
|
||||||
import { ServeCreateGroup } from '@/api/group/index'
|
import {
|
||||||
import { useGroupTypeStore } from '@/store/groupType'
|
ServeCreateGroup
|
||||||
import { handleSetWebviewStyle } from '@/utils/common'
|
} from '@/api/group/index'
|
||||||
|
import {
|
||||||
|
useGroupTypeStore
|
||||||
|
} from '@/store/groupType'
|
||||||
|
import {
|
||||||
|
handleSetWebviewStyle
|
||||||
|
} from '@/utils/common'
|
||||||
|
|
||||||
const {
|
const {
|
||||||
groupName,
|
groupName,
|
||||||
@ -209,7 +163,9 @@ const {
|
|||||||
const talkStore = useTalkStore()
|
const talkStore = useTalkStore()
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const groupStore = useGroupStore()
|
const groupStore = useGroupStore()
|
||||||
const { userInfo } = useAuth()
|
const {
|
||||||
|
userInfo
|
||||||
|
} = useAuth()
|
||||||
|
|
||||||
const groupChatType = ref('')
|
const groupChatType = ref('')
|
||||||
const depsNoExpanded_1 = ref(true)
|
const depsNoExpanded_1 = ref(true)
|
||||||
@ -254,8 +210,7 @@ const chooseGroupType = () => {
|
|||||||
|
|
||||||
const chooseGroupAdmin = () => {
|
const chooseGroupAdmin = () => {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url:
|
url: '/pages/chatSettings/groupManage/selectMembers?manageType=admin&isCreateDepGroup=1',
|
||||||
'/pages/chatSettings/groupManage/selectMembers?manageType=admin&isCreateDepGroup=1',
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -315,50 +270,51 @@ const handleConfirm = async () => {
|
|||||||
resetGroupInfo()
|
resetGroupInfo()
|
||||||
uni.navigateBack()
|
uni.navigateBack()
|
||||||
}
|
}
|
||||||
} else {
|
} else {}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//发起群聊按钮可点击状态
|
//发起群聊按钮可点击状态
|
||||||
const confirmBtnStatus = computed(() => {
|
const confirmBtnStatus = computed(() => {
|
||||||
let disabledT = false
|
// 基础检查:群名称为空或未选择群类型
|
||||||
if (
|
if (
|
||||||
groupName.value === '' ||
|
groupName.value === '' ||
|
||||||
(groupActiveIndex.value && groupActiveIndex.value === -1) ||
|
(groupActiveIndex.value && groupActiveIndex.value === -1) ||
|
||||||
(!groupActiveIndex.value && groupActiveIndex.value !== 0)
|
(!groupActiveIndex.value && groupActiveIndex.value !== 0)
|
||||||
) {
|
) {
|
||||||
return true
|
return true;
|
||||||
}
|
}
|
||||||
// 选择的人员里面包含发起人,需要去重
|
|
||||||
let temp = []
|
// 检查是否包含自己
|
||||||
allChooseMembers?.value?.forEach((ele) => {
|
const includesSelf = allChooseMembers.value?.some(member => member.ID === userInfo.value.ID);
|
||||||
if (ele.ID !== userInfo.value.ID) {
|
const memberCount = allChooseMembers.value?.length || 0;
|
||||||
temp.push(ele)
|
|
||||||
|
// 新逻辑:人数检查
|
||||||
|
if (includesSelf && memberCount < 3) {
|
||||||
|
return true; // 包含自己但总人数<3 → 禁用
|
||||||
}
|
}
|
||||||
})
|
if (!includesSelf && memberCount < 2) {
|
||||||
|
return true; // 不包含自己且人数<2 → 禁用
|
||||||
|
}
|
||||||
|
|
||||||
|
// 原有群类型特定检查
|
||||||
|
let disabledT = false;
|
||||||
switch (groupActiveIndex.value) {
|
switch (groupActiveIndex.value) {
|
||||||
case 0:
|
case 0: // 第一种群类型
|
||||||
if(temp?.length < 2) {
|
// 人数检查已在上方处理,这里不需要重复
|
||||||
disabledT = true
|
break;
|
||||||
|
case 1: // 第二种群类型
|
||||||
|
if (!depCheckedKeys.value.length || !groupAdmins.value.length) {
|
||||||
|
disabledT = true;
|
||||||
}
|
}
|
||||||
break
|
break;
|
||||||
case 1:
|
case 2: // 第三种群类型
|
||||||
if (!depCheckedKeys.value.length) {
|
// 人数检查已在上方处理,这里不需要重复
|
||||||
disabledT = true
|
break;
|
||||||
}
|
|
||||||
if (!groupAdmins.value.length) {
|
|
||||||
disabledT = true
|
|
||||||
}
|
|
||||||
break
|
|
||||||
case 2:
|
|
||||||
if(temp?.length < 2) {
|
|
||||||
disabledT = true
|
|
||||||
}
|
|
||||||
break
|
|
||||||
default:
|
default:
|
||||||
break
|
break;
|
||||||
}
|
}
|
||||||
return disabledT
|
|
||||||
})
|
return disabledT;
|
||||||
|
});
|
||||||
|
|
||||||
onShow(() => {
|
onShow(() => {
|
||||||
depsNoExpanded_1.value = true;
|
depsNoExpanded_1.value = true;
|
||||||
@ -377,8 +333,10 @@ onShow(() => {
|
|||||||
background-position: center bottom;
|
background-position: center bottom;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 0 32rpx 20rpx;
|
padding: 0 32rpx 20rpx;
|
||||||
|
|
||||||
.group-avatar {
|
.group-avatar {
|
||||||
padding: 60rpx 0;
|
padding: 60rpx 0;
|
||||||
|
|
||||||
.avatar-placeholder {
|
.avatar-placeholder {
|
||||||
width: 192rpx;
|
width: 192rpx;
|
||||||
height: 192rpx;
|
height: 192rpx;
|
||||||
@ -387,6 +345,7 @@ onShow(() => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.divider {
|
.divider {
|
||||||
height: 1rpx;
|
height: 1rpx;
|
||||||
background-color: #7c7c7c;
|
background-color: #7c7c7c;
|
||||||
@ -397,18 +356,21 @@ onShow(() => {
|
|||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
padding: 38rpx 40rpx 32rpx 32rpx;
|
padding: 38rpx 40rpx 32rpx 32rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-item {
|
.input-item {
|
||||||
line-height: 40rpx;
|
line-height: 40rpx;
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
color: #000;
|
color: #000;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-box {
|
.input-box {
|
||||||
margin-left: 84rpx;
|
margin-left: 84rpx;
|
||||||
line-height: 40rpx;
|
line-height: 40rpx;
|
||||||
width: 404rpx;
|
width: 404rpx;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.left-box {
|
.left-box {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
@ -71,5 +71,37 @@
|
|||||||
"message.customerService.text":"Please call customer service",
|
"message.customerService.text":"Please call customer service",
|
||||||
"message.action.text":"perform logout operation",
|
"message.action.text":"perform logout operation",
|
||||||
"index.mine.upload":"Click To Upload",
|
"index.mine.upload":"Click To Upload",
|
||||||
"index.mine.reUpload":"Re-upload"
|
"index.mine.reUpload":"Re-upload",
|
||||||
|
"complaint": {
|
||||||
|
"title": "Complaint Report",
|
||||||
|
"selectType": "Select Complaint Type",
|
||||||
|
"selectPlaceholder": "Please select complaint type",
|
||||||
|
"imageEvidence": "Image Evidence (Max 9)",
|
||||||
|
"addImage": "Add Image",
|
||||||
|
"complaintContent": "Complaint Content (Optional)",
|
||||||
|
"contentPlaceholder": "Please describe in detail...",
|
||||||
|
"noticeTitle": "Notice",
|
||||||
|
"noticeone": "1. Please select the correct complaint category.",
|
||||||
|
"noticetwo":"2. Provide valid evidence such as images, chat records, etc.",
|
||||||
|
"noticethree": "3. Describe the violation details to help us review faster.",
|
||||||
|
"noticefour": "4. Do not submit duplicate complaints for the same issue.",
|
||||||
|
"noticefive":"5. Do not abuse the complaint system.",
|
||||||
|
"noticenoticeContent":"Thank you for helping us build a safe community. We will process your complaint as soon as possible. We hope your complaint is made in good faith with accurate information. We will take reasonable measures to protect your privacy and will not disclose your information to third parties without your consent, except as required by law. Abuse of the complaint system may result in restrictions.",
|
||||||
|
"submit": "Submit",
|
||||||
|
"expand": "Expand",
|
||||||
|
"collapse": "Collapse",
|
||||||
|
"typeOptions": {
|
||||||
|
"porn": "Underage Exploitation",
|
||||||
|
"illegal": "Fraud",
|
||||||
|
"gambling": "Illegal Activities",
|
||||||
|
"violence": "Harassment",
|
||||||
|
"selfHarm": "Harmful Content",
|
||||||
|
"other": "Other"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"selectType": "Please select complaint type",
|
||||||
|
"submitting": "Submitting...",
|
||||||
|
"success": "Complaint submitted successfully"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -156,5 +156,37 @@
|
|||||||
"popup.title.phone": "电话",
|
"popup.title.phone": "电话",
|
||||||
"pageTitle.view.deps": "查看部门",
|
"pageTitle.view.deps": "查看部门",
|
||||||
"group.dismiss.confirm": "确定解散本群",
|
"group.dismiss.confirm": "确定解散本群",
|
||||||
"chat.settings.report": "投诉"
|
"chat.settings.report": "投诉",
|
||||||
|
"complaint": {
|
||||||
|
"title": "投诉举报",
|
||||||
|
"selectType": "选择投诉内容",
|
||||||
|
"selectPlaceholder": "请选择投诉类型",
|
||||||
|
"imageEvidence": "图片证据(最多9张)",
|
||||||
|
"addImage": "添加图片",
|
||||||
|
"complaintContent": "投诉内容(选填)",
|
||||||
|
"contentPlaceholder": "请详细描述投诉内容...",
|
||||||
|
"noticeTitle": "投诉须知",
|
||||||
|
"noticeone":"1、请选择正确的投诉类目。",
|
||||||
|
"noticetwo":"2、提供有效的违规证据如:图片、聊天信息等",
|
||||||
|
"noticethree":"3、详细描述违规问题详情,有助于我们的审核人员快速研判处置。",
|
||||||
|
"noticefour": "4、请勿针对同一问题重复投诉,以免造成资源浪费。",
|
||||||
|
"noticefive":"5、请勿滥用投诉,以免造成资源浪费",
|
||||||
|
"noticenoticeContent":"感谢您与我们共建安全社区环境,我们会尽快对您的投诉进行处理。同时我们希望您的投诉行为基于善意,提供准确有效的违规信息帮助我们更好的进行判断并且处理。同时我们会采取必要合理的措施保护投诉人的个人隐私信息,除法律法规规定的情形之外,在未获得用户许可的情况下,不会向第三方公开投诉人信息。如果存在滥用、重复无效投诉,我们可能会对投诉账号采取包括但不限于限制投诉频次、禁止投诉等限制",
|
||||||
|
"submit": "提交投诉",
|
||||||
|
"expand": "展开",
|
||||||
|
"collapse": "收起",
|
||||||
|
"typeOptions": {
|
||||||
|
"porn": "侵犯未成年",
|
||||||
|
"illegal": "欺诈骗钱",
|
||||||
|
"gambling": "违法违规",
|
||||||
|
"violence": "骚扰",
|
||||||
|
"selfHarm": "不良价值导向",
|
||||||
|
"other": "其他"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"selectType": "请选择投诉类型",
|
||||||
|
"submitting": "提交中...",
|
||||||
|
"success": "投诉提交成功"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user