Compare commits
No commits in common. "9e2daf8b2e1b58049f6d1ae3767a8969992b6911" and "251cf7d66f3deb64e7b8a0b948a6ddfc822caab4" have entirely different histories.
9e2daf8b2e
...
251cf7d66f
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, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
|
export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
|
||||||
import('vue')
|
import('vue')
|
||||||
}
|
}
|
||||||
|
14048
pnpm-lock.yaml
14048
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
@ -5,7 +5,8 @@
|
|||||||
"^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": {
|
||||||
@ -185,14 +186,6 @@
|
|||||||
"navigationStyle": "custom",
|
"navigationStyle": "custom",
|
||||||
"enablePullDownRefresh": false
|
"enablePullDownRefresh": false
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "pages/complaintReport/index",
|
|
||||||
"type": "page",
|
|
||||||
"style": {
|
|
||||||
"navigationStyle": "custom",
|
|
||||||
"enablePullDownRefresh": false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"globalStyle": {
|
"globalStyle": {
|
||||||
|
@ -1,94 +1,140 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="select-member-by-alphabet">
|
<div class="select-member-by-alphabet">
|
||||||
<ZPaging ref="zPaging" :show-scrollbar="false" :use-virtual-list="true" :virtual-list-col="5"
|
<ZPaging
|
||||||
:refresher-enabled="false" :loading-more-enabled="false" @scroll="onScroll" :fixed="false"
|
ref="zPaging"
|
||||||
:height="props?.selectAreaHeight">
|
:show-scrollbar="false"
|
||||||
|
: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 class="search-member" v-if="
|
<div
|
||||||
|
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 v-show="props?.manageType == 'removeMembers'" class="my-self">
|
<div
|
||||||
<div class="my-self-left">
|
class="member-list"
|
||||||
<image style="width: 72rpx;border-radius: 50%;height: 72rpx;" :src="mySelfMember.avatar" mode=""></image>
|
:style="{
|
||||||
<div style="padding: 0 20rpx;">{{mySelfMember.nickname}}</div>
|
|
||||||
<img style="width: 45rpx;" 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"
|
>
|
||||||
:key="alphabetIndex" :style="{
|
<div
|
||||||
|
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)">
|
}"
|
||||||
<span class="text-[32rpx] font-regular" :style="{
|
@click.stop="scrollToView(alphabetItem)"
|
||||||
|
>
|
||||||
|
<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 class="member-list-alphabet" v-for="(alphabetItem, alphabetIndex) in state.resultMemberList"
|
<div
|
||||||
:key="alphabetIndex">
|
class="member-list-alphabet"
|
||||||
<div class="member-list-alphabet-key" :style="{
|
v-for="(alphabetItem, alphabetIndex) in state.resultMemberList"
|
||||||
|
: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 class="member-list-each" v-for="(item, index) in alphabetItem?.memberList" :key="index">
|
<div
|
||||||
|
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 :groupType="groupParams.groupInfo.group_type" :memberItem="item"
|
<selectMemberItem
|
||||||
@clickItem="handleClickItem(item)" :manageType="props?.manageType" :itemStyle="
|
:groupType="groupParams.groupInfo.group_type"
|
||||||
|
: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 v-if="
|
<div
|
||||||
|
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 v-if="
|
<tm-checkbox
|
||||||
|
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) ||
|
||||||
@ -96,12 +142,16 @@
|
|||||||
(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>
|
||||||
@ -135,11 +185,7 @@
|
|||||||
ServeGroupAssignAdmin,
|
ServeGroupAssignAdmin,
|
||||||
ServeRemoveMembersGroup,
|
ServeRemoveMembersGroup,
|
||||||
} from '@/api/group/index.js'
|
} from '@/api/group/index.js'
|
||||||
import {
|
import { useDialogueStore, useGroupStore, useGroupTypeStore } from '@/store'
|
||||||
useDialogueStore,
|
|
||||||
useGroupStore,
|
|
||||||
useGroupTypeStore
|
|
||||||
} from '@/store'
|
|
||||||
|
|
||||||
const emits = defineEmits([
|
const emits = defineEmits([
|
||||||
'updateSelectedMembersNum',
|
'updateSelectedMembersNum',
|
||||||
@ -165,9 +211,9 @@
|
|||||||
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),
|
||||||
@ -209,18 +255,16 @@
|
|||||||
() => 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(
|
||||||
@ -230,7 +274,8 @@
|
|||||||
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,
|
||||||
@ -240,7 +285,8 @@
|
|||||||
nickname: '所有人',
|
nickname: '所有人',
|
||||||
remark: '',
|
remark: '',
|
||||||
user_id: 0,
|
user_id: 0,
|
||||||
}, ],
|
},
|
||||||
|
],
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
if (state.resultMemberList[0].key === '0') {
|
if (state.resultMemberList[0].key === '0') {
|
||||||
@ -248,10 +294,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, {
|
|
||||||
deep: true,
|
|
||||||
immediate: true
|
|
||||||
},
|
},
|
||||||
|
{ deep: true, immediate: true },
|
||||||
)
|
)
|
||||||
|
|
||||||
//获取A-Z tag元素
|
//获取A-Z tag元素
|
||||||
@ -285,10 +329,8 @@
|
|||||||
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) =>
|
||||||
@ -350,7 +392,8 @@
|
|||||||
}
|
}
|
||||||
if (props?.manageType === 'searchRecord') {
|
if (props?.manageType === 'searchRecord') {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/pages/search/searchByCondition/index?condition=member&groupMemberId=' +
|
url:
|
||||||
|
'/pages/search/searchByCondition/index?condition=member&groupMemberId=' +
|
||||||
item.id,
|
item.id,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@ -375,29 +418,16 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
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({
|
const alphabet = Array.from({ length: 26 }, (_, i) =>
|
||||||
length: 26
|
|
||||||
}, (_, i) =>
|
|
||||||
String.fromCharCode(i + 65),
|
String.fromCharCode(i + 65),
|
||||||
)
|
)
|
||||||
let tempAlphabet = []
|
let tempAlphabet = []
|
||||||
@ -446,7 +476,8 @@
|
|||||||
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,
|
||||||
@ -456,7 +487,8 @@
|
|||||||
nickname: '所有人',
|
nickname: '所有人',
|
||||||
remark: '',
|
remark: '',
|
||||||
user_id: 0,
|
user_id: 0,
|
||||||
}, ],
|
},
|
||||||
|
],
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
state.resultMemberList = resultMemberList
|
state.resultMemberList = resultMemberList
|
||||||
@ -482,10 +514,12 @@
|
|||||||
}
|
}
|
||||||
getPosiByDep(departmentIdsArr)
|
getPosiByDep(departmentIdsArr)
|
||||||
} else {
|
} else {
|
||||||
state.resultMemberList = [{
|
state.resultMemberList = [
|
||||||
|
{
|
||||||
key: '',
|
key: '',
|
||||||
memberList: newMemberList,
|
memberList: newMemberList,
|
||||||
}, ]
|
},
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -537,15 +571,17 @@
|
|||||||
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
|
||||||
@ -554,11 +590,11 @@
|
|||||||
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
|
||||||
@ -633,14 +669,12 @@
|
|||||||
}
|
}
|
||||||
console.log(params)
|
console.log(params)
|
||||||
const resp = ServeGroupNoSpeak(params)
|
const resp = ServeGroupNoSpeak(params)
|
||||||
resp.then(({
|
resp.then(({ code, data }) => {
|
||||||
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') {
|
||||||
@ -662,14 +696,12 @@
|
|||||||
}
|
}
|
||||||
console.log(params)
|
console.log(params)
|
||||||
const resp = ServeGroupAssignAdmin(params)
|
const resp = ServeGroupAssignAdmin(params)
|
||||||
resp.then(({
|
resp.then(({ code, data }) => {
|
||||||
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 (
|
||||||
@ -684,14 +716,12 @@
|
|||||||
}
|
}
|
||||||
console.log(params)
|
console.log(params)
|
||||||
const resp = ServeEditGroupAdmin(params)
|
const resp = ServeEditGroupAdmin(params)
|
||||||
resp.then(({
|
resp.then(({ code, data }) => {
|
||||||
code,
|
|
||||||
data
|
|
||||||
}) => {
|
|
||||||
console.log(data)
|
console.log(data)
|
||||||
if (code == 200) {
|
if (code == 200) {
|
||||||
groupStore.ServeGroupDetail()
|
groupStore.ServeGroupDetail()
|
||||||
} else {}
|
} else {
|
||||||
|
}
|
||||||
})
|
})
|
||||||
resp.catch(() => {})
|
resp.catch(() => {})
|
||||||
}
|
}
|
||||||
@ -703,17 +733,15 @@
|
|||||||
}
|
}
|
||||||
console.log(params)
|
console.log(params)
|
||||||
const resp = ServeRemoveMembersGroup(params)
|
const resp = ServeRemoveMembersGroup(params)
|
||||||
resp.then(({
|
resp.then(({ code, data }) => {
|
||||||
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') {
|
||||||
@ -728,38 +756,13 @@
|
|||||||
})
|
})
|
||||||
</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;
|
||||||
@ -770,14 +773,12 @@
|
|||||||
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;
|
||||||
@ -786,11 +787,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.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,42 +6,71 @@
|
|||||||
<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 class="chat-group-base-infos chat-settings-card" v-if="dialogueParams.type === 2">
|
<div
|
||||||
|
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 :mode="2" :avatar="groupParams?.groupInfo?.avatar"
|
<avatarModule
|
||||||
:groupType="groupParams?.groupInfo?.group_type" :customStyle="{ width: '96rpx', height: '96rpx' }">
|
:mode="2"
|
||||||
</avatarModule>
|
:avatar="groupParams?.groupInfo?.avatar"
|
||||||
|
: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 class="base-info_num text-[32rpx] font-medium" v-if="groupNum">
|
<span
|
||||||
|
class="base-info_num text-[32rpx] font-medium"
|
||||||
|
v-if="groupNum"
|
||||||
|
>
|
||||||
{{ '(' + groupNum + ')' }}
|
{{ '(' + groupNum + ')' }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="groupParams?.groupInfo?.group_type !== 1 && groupType" class="base-info-tag" :style="{
|
<div
|
||||||
|
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 class="base-info-edit" @click="toEditGroupInfoPage" v-if="groupParams?.groupInfo?.is_manager">
|
<div
|
||||||
|
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 class="chat-group-infos-each" v-for="(item, index) in state.chatGroupMembers" :key="index">
|
<div
|
||||||
<settingFormItem :item="item" @toManagePage="toManagePage"></settingFormItem>
|
class="chat-group-infos-each"
|
||||||
<groupMemberList :groupType="groupParams?.groupInfo?.group_type"
|
v-for="(item, index) in state.chatGroupMembers"
|
||||||
:is_manager="groupParams?.groupInfo?.is_manager" :memberList="dialogueParams?.memberList"
|
:key="index"
|
||||||
|
>
|
||||||
|
<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
|
||||||
@ -49,13 +78,21 @@
|
|||||||
? 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 class="chat-group-infos-each" v-for="(item, index) in state.chatGroupInfos" :key="index">
|
<div
|
||||||
<settingFormItem :item="item" @toManagePage="toManagePage"
|
class="chat-group-infos-each"
|
||||||
:isManager="groupParams?.groupInfo?.is_manager"></settingFormItem>
|
v-for="(item, index) in state.chatGroupInfos"
|
||||||
|
: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">
|
||||||
@ -63,50 +100,92 @@
|
|||||||
<customInput :disabled="true"></customInput>
|
<customInput :disabled="true"></customInput>
|
||||||
</div>
|
</div>
|
||||||
<div class="record-search-types">
|
<div class="record-search-types">
|
||||||
<div class="record-search-types-each" v-for="(item, index) in state.recordSearchTypeList" :key="index"
|
<div
|
||||||
@click="toSearchByConditionPage(index)">
|
class="record-search-types-each"
|
||||||
|
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 class="chat-group-infos-each" v-for="(item, index) in state.chatSettings" :key="index">
|
<div
|
||||||
<settingFormItem :item="item" @toManagePage="toManagePage" :sessionInfo="state?.sessionInfo"
|
class="chat-group-infos-each"
|
||||||
@changeSwitch="changeSwitch"></settingFormItem>
|
v-for="(item, index) in state.chatSettings"
|
||||||
|
:key="index"
|
||||||
|
>
|
||||||
|
<settingFormItem
|
||||||
|
:item="item"
|
||||||
|
@toManagePage="toManagePage"
|
||||||
|
:sessionInfo="state?.sessionInfo"
|
||||||
|
@changeSwitch="changeSwitch"
|
||||||
|
></settingFormItem>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="chat-group-infos chat-settings-card" v-if="groupParams?.groupInfo?.is_manager">
|
<div
|
||||||
<div class="chat-group-infos-each" v-for="(item, index) in state.chatManagement" :key="index">
|
class="chat-group-infos chat-settings-card"
|
||||||
<settingFormItem :item="item" @toManagePage="toManagePage"></settingFormItem>
|
v-if="groupParams?.groupInfo?.is_manager"
|
||||||
|
>
|
||||||
|
<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 class="chat-group-infos chat-settings-card">
|
<div
|
||||||
<div class="chat-group-infos-each" v-for="(item, index) in state.chatReport" :key="index">
|
class="chat-group-infos chat-settings-card"
|
||||||
<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 @click="showConfirmPrompt(1)" class="clear-chat-record-btn-each">
|
<div
|
||||||
|
@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 @click="showConfirmPrompt(2)" class="clear-chat-record-btn-each" v-if="
|
<div
|
||||||
|
@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 @click="showConfirmPrompt(3)" class="clear-chat-record-btn-each" v-if="
|
<div
|
||||||
|
@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>
|
||||||
@ -128,12 +207,7 @@
|
|||||||
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 {
|
import { computed, onMounted, reactive, watch } from 'vue'
|
||||||
computed,
|
|
||||||
onMounted,
|
|
||||||
reactive,
|
|
||||||
watch
|
|
||||||
} from 'vue'
|
|
||||||
import {
|
import {
|
||||||
useUserStore,
|
useUserStore,
|
||||||
useTalkStore,
|
useTalkStore,
|
||||||
@ -141,28 +215,17 @@
|
|||||||
useGroupStore,
|
useGroupStore,
|
||||||
useGroupTypeStore,
|
useGroupTypeStore,
|
||||||
} from '@/store'
|
} from '@/store'
|
||||||
import {
|
import { onLoad } from '@dcloudio/uni-app'
|
||||||
onLoad
|
|
||||||
} from '@dcloudio/uni-app'
|
|
||||||
import {
|
import {
|
||||||
ServeInviteGroup,
|
ServeInviteGroup,
|
||||||
ServeDismissGroup,
|
ServeDismissGroup,
|
||||||
ServeSecedeGroup,
|
ServeSecedeGroup,
|
||||||
} from '@/api/group/index'
|
} from '@/api/group/index'
|
||||||
import {
|
import { ServeTopTalkList, ServeSetNotDisturb } from '@/api/chat/index'
|
||||||
ServeTopTalkList,
|
import { useI18n } from 'vue-i18n'
|
||||||
ServeSetNotDisturb
|
const { t } = useI18n()
|
||||||
} 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 {
|
const { showConfirm } = useConfirm()
|
||||||
showConfirm
|
|
||||||
} = useConfirm()
|
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const talkStore = useTalkStore()
|
const talkStore = useTalkStore()
|
||||||
const dialogueStore = useDialogueStore()
|
const dialogueStore = useDialogueStore()
|
||||||
@ -202,9 +265,8 @@
|
|||||||
[() => groupParams.groupInfo, () => groupParams.groupNotice],
|
[() => groupParams.groupInfo, () => groupParams.groupNotice],
|
||||||
([newGroupInfo, newGroupNotice]) => {
|
([newGroupInfo, newGroupNotice]) => {
|
||||||
updateGroupInfos()
|
updateGroupInfos()
|
||||||
}, {
|
|
||||||
deep: true
|
|
||||||
},
|
},
|
||||||
|
{ deep: true },
|
||||||
)
|
)
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
@ -245,7 +307,8 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
state.recordSearchTypeList = [{
|
state.recordSearchTypeList = [
|
||||||
|
{
|
||||||
value: t('record.searchType.date'),
|
value: t('record.searchType.date'),
|
||||||
typeIcon: recordSearchTypeIcon_date,
|
typeIcon: recordSearchTypeIcon_date,
|
||||||
},
|
},
|
||||||
@ -268,7 +331,8 @@
|
|||||||
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: '',
|
||||||
@ -283,10 +347,12 @@
|
|||||||
customInfo: 'switch',
|
customInfo: 'switch',
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
state.chatReport = [{
|
state.chatReport = [
|
||||||
label: t('chat.settings.report'),
|
// {
|
||||||
hasPointer: true,
|
// label: t('chat.settings.report'),
|
||||||
}, ]
|
// hasPointer: true,
|
||||||
|
// },
|
||||||
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
//群名称
|
//群名称
|
||||||
@ -326,14 +392,17 @@
|
|||||||
|
|
||||||
//更新群信息
|
//更新群信息
|
||||||
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,
|
||||||
@ -365,7 +434,8 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
state.chatManagement = [{
|
state.chatManagement = [
|
||||||
|
{
|
||||||
label: t('chat.settings.groupGag'),
|
label: t('chat.settings.groupGag'),
|
||||||
hasPointer: true,
|
hasPointer: true,
|
||||||
value: '',
|
value: '',
|
||||||
@ -420,7 +490,8 @@
|
|||||||
})
|
})
|
||||||
} else if (label === t('chat.settings.groupMember')) {
|
} else if (label === t('chat.settings.groupMember')) {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/pages/chatSettings/groupManage/manageGroupMembers?groupId=' +
|
url:
|
||||||
|
'/pages/chatSettings/groupManage/manageGroupMembers?groupId=' +
|
||||||
state.groupId,
|
state.groupId,
|
||||||
})
|
})
|
||||||
} else if (label === t('chat.settings.groupGag')) {
|
} else if (label === t('chat.settings.groupGag')) {
|
||||||
@ -431,10 +502,6 @@
|
|||||||
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',
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -448,7 +515,8 @@
|
|||||||
}
|
}
|
||||||
if (flag == flagIndex) {
|
if (flag == flagIndex) {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/pages/chatSettings/groupManage/selectMembers?manageType=searchRecord',
|
url:
|
||||||
|
'/pages/chatSettings/groupManage/selectMembers?manageType=searchRecord',
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
if (flag == flagIndex + 1) {
|
if (flag == flagIndex + 1) {
|
||||||
@ -485,10 +553,7 @@
|
|||||||
resp = ServeSetNotDisturb(params)
|
resp = ServeSetNotDisturb(params)
|
||||||
}
|
}
|
||||||
console.log(resp)
|
console.log(resp)
|
||||||
resp.then(({
|
resp.then(({ code, data }) => {
|
||||||
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')) {
|
||||||
@ -502,7 +567,8 @@
|
|||||||
is_disturb: switchStatus ? 1 : 0,
|
is_disturb: switchStatus ? 1 : 0,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {}
|
} else {
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
resp.catch(() => {})
|
resp.catch(() => {})
|
||||||
@ -583,15 +649,13 @@
|
|||||||
//退出群聊
|
//退出群聊
|
||||||
ServeSecedeGroup({
|
ServeSecedeGroup({
|
||||||
group_id: dialogueParams.receiver_id,
|
group_id: dialogueParams.receiver_id,
|
||||||
}).then(({
|
}).then(({ code, message }) => {
|
||||||
code,
|
|
||||||
message
|
|
||||||
}) => {
|
|
||||||
if (code == 200) {
|
if (code == 200) {
|
||||||
uni.navigateBack({
|
uni.navigateBack({
|
||||||
delta: 2,
|
delta: 2,
|
||||||
})
|
})
|
||||||
} else {}
|
} else {
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -632,7 +696,8 @@
|
|||||||
// '/pages/search/searchByCondition/index?condition=text'
|
// '/pages/search/searchByCondition/index?condition=text'
|
||||||
// })
|
// })
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/pages/search/moreResult/moreResultDetail?talk_type=' +
|
url:
|
||||||
|
'/pages/search/moreResult/moreResultDetail?talk_type=' +
|
||||||
dialogueParams.type +
|
dialogueParams.type +
|
||||||
'&receiver_id=' +
|
'&receiver_id=' +
|
||||||
dialogueParams.receiver_id +
|
dialogueParams.receiver_id +
|
||||||
@ -677,27 +742,22 @@
|
|||||||
.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;
|
||||||
@ -708,7 +768,6 @@
|
|||||||
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;
|
||||||
@ -716,12 +775,10 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.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%;
|
||||||
@ -729,16 +786,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.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;
|
||||||
}
|
}
|
||||||
@ -753,7 +809,6 @@
|
|||||||
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;
|
||||||
@ -761,14 +816,12 @@
|
|||||||
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;
|
||||||
@ -782,7 +835,6 @@
|
|||||||
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;
|
||||||
@ -797,7 +849,6 @@
|
|||||||
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,364 +3,20 @@
|
|||||||
<div class="root">
|
<div class="root">
|
||||||
<ZPaging ref="zPaging" :show-scrollbar="false">
|
<ZPaging ref="zPaging" :show-scrollbar="false">
|
||||||
<template #top>
|
<template #top>
|
||||||
<customNavbar :title="$t('complaint.title')"></customNavbar>
|
<customNavbar class="tmNavBar"></customNavbar>
|
||||||
</template>
|
</template>
|
||||||
<!-- 投诉主体内容 -->
|
|
||||||
<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>
|
</ZPaging>
|
||||||
|
|
||||||
<!-- 固定在底部的提交按钮 -->
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import ZPaging from '@/uni_modules/z-paging/components/z-paging/z-paging.vue'
|
|
||||||
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];
|
|
||||||
if (imageList.value.length > 9) {
|
|
||||||
uni.showToast({
|
|
||||||
title: `最多只能选择9张图片`,
|
|
||||||
icon: 'none'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// 删除图片
|
|
||||||
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,8 +8,12 @@
|
|||||||
<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 :mode="2" :avatar="avatarImg" :groupType="groupType"
|
<avatarModule
|
||||||
:customStyle="{ width: '192rpx', height: '192rpx' }"></avatarModule>
|
:mode="2"
|
||||||
|
: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">
|
||||||
@ -17,12 +21,25 @@
|
|||||||
群名称
|
群名称
|
||||||
</div>
|
</div>
|
||||||
<div class="input-box">
|
<div class="input-box">
|
||||||
<tm-input v-model="groupName" :followTheme="false" fontColor="#747474" placeholderStyle="color: #B4B4B4"
|
<tm-input
|
||||||
focusColor="#FFF" :fontSize="28" :maxlength="20" :height="40" :transprent="true"
|
v-model="groupName"
|
||||||
placeholder="请输入群名称(1~20个字)" :padding="[0, 0]" align="right"></tm-input>
|
:followTheme="false"
|
||||||
|
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 class="input-group w-full flex flex-col mt-[20rpx] leading-[40rpx]">
|
<div
|
||||||
|
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">
|
||||||
群类型
|
群类型
|
||||||
@ -35,69 +52,117 @@
|
|||||||
<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 :font-size="22" color="#747474" name="tmicon-angle-right"></tm-icon>
|
<tm-icon
|
||||||
|
:font-size="22"
|
||||||
|
color="#747474"
|
||||||
|
name="tmicon-angle-right"
|
||||||
|
></tm-icon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="depCheckedKeys.length && groupActiveIndex === 1" class="mt-[32rpx]">
|
<div
|
||||||
<div v-for="(item, index) in depCheckedKeys" class="text-[#747474] text-[28rpx] leading-[40rpx] font-bold"
|
v-if="depCheckedKeys.length && groupActiveIndex === 1"
|
||||||
|
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 class="text-[#46299D] text-[28rpx] mt-[20rpx] font-bold flex justify-center">
|
<div
|
||||||
<div v-if="depCheckedKeys.length > 5" @click="depsNoExpanded_1 = !depsNoExpanded_1" class="w-[100rpx]">
|
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]"
|
||||||
|
>
|
||||||
{{ depsNoExpanded_1 ? '展开' : '收起' }}
|
{{ depsNoExpanded_1 ? '展开' : '收起' }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="groupActiveIndex === 0 || groupActiveIndex === 2"
|
<div
|
||||||
class="input-group w-full flex flex-col mt-[20rpx] leading-[40rpx]">
|
v-if="groupActiveIndex === 0 || groupActiveIndex === 2"
|
||||||
|
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 class="text-[#B4B4B4] text-[28rpx] font-bold mr-[32rpx]">
|
<div
|
||||||
|
class="text-[#B4B4B4] text-[28rpx] font-bold mr-[32rpx]"
|
||||||
|
>
|
||||||
全部({{ allChooseMembers?.length || 0 }})
|
全部({{ allChooseMembers?.length || 0 }})
|
||||||
</div>
|
</div>
|
||||||
<tm-icon :font-size="22" color="#747474" name="tmicon-angle-right"></tm-icon>
|
<tm-icon
|
||||||
|
:font-size="22"
|
||||||
|
color="#747474"
|
||||||
|
name="tmicon-angle-right"
|
||||||
|
></tm-icon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<groupMemberList :groupType="3" :is_manager="true" :memberList="allChooseMembers" :memberListsLimit="15"
|
<groupMemberList
|
||||||
:hideAddRemoveBtns="true"></groupMemberList>
|
:groupType="3"
|
||||||
|
:is_manager="true"
|
||||||
|
:memberList="allChooseMembers"
|
||||||
|
:memberListsLimit="15"
|
||||||
|
:hideAddRemoveBtns="true"
|
||||||
|
></groupMemberList>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="groupActiveIndex === 1" class="input-group w-full flex flex-col mt-[20rpx] leading-[40rpx]">
|
<div
|
||||||
|
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 v-if="!groupAdmins.length" class="text-[#B4B4B4] text-[28rpx] font-bold mr-[32rpx]">
|
<div
|
||||||
|
v-if="!groupAdmins.length"
|
||||||
|
class="text-[#B4B4B4] text-[28rpx] font-bold mr-[32rpx]"
|
||||||
|
>
|
||||||
请选择群管理员
|
请选择群管理员
|
||||||
</div>
|
</div>
|
||||||
<tm-icon :font-size="22" color="#747474" name="tmicon-angle-right"></tm-icon>
|
<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 v-for="(item, index) in groupAdmins" class="text-[#747474] text-[28rpx] leading-[40rpx] font-bold"
|
<div
|
||||||
|
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 class="text-[#46299D] text-[28rpx] mt-[20rpx] font-bold flex justify-center">
|
<div
|
||||||
<div v-if="groupAdmins.length > 5" @click="depsNoExpanded_2 = !depsNoExpanded_2" class="w-[100rpx]">
|
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]"
|
||||||
|
>
|
||||||
{{ depsNoExpanded_2 ? '展开' : '收起' }}
|
{{ depsNoExpanded_2 ? '展开' : '收起' }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -105,8 +170,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<template #bottom>
|
<template #bottom>
|
||||||
<customBtn :isBottom="true" :btnText="$t('pageTitle.create.group')" @click="handleConfirm"
|
<customBtn
|
||||||
:disabled="confirmBtnStatus"></customBtn>
|
:isBottom="true"
|
||||||
|
:btnText="$t('pageTitle.create.group')"
|
||||||
|
@click="handleConfirm"
|
||||||
|
:disabled="confirmBtnStatus"
|
||||||
|
></customBtn>
|
||||||
</template>
|
</template>
|
||||||
</zPaging>
|
</zPaging>
|
||||||
</div>
|
</div>
|
||||||
@ -117,39 +186,16 @@
|
|||||||
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 {
|
import { ref, watch, computed, onMounted } from 'vue'
|
||||||
ref,
|
import { onShow, onLoad, onUnload } from '@dcloudio/uni-app'
|
||||||
watch,
|
import { useChatList } from '@/store/chatList/index.js'
|
||||||
computed,
|
import { useAuth } from '@/store/auth'
|
||||||
onMounted
|
import { useTalkStore, useUserStore, useGroupStore } from '@/store'
|
||||||
} 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 {
|
import { ServeCreateGroup } from '@/api/group/index'
|
||||||
ServeCreateGroup
|
import { useGroupTypeStore } from '@/store/groupType'
|
||||||
} from '@/api/group/index'
|
import { handleSetWebviewStyle } from '@/utils/common'
|
||||||
import {
|
|
||||||
useGroupTypeStore
|
|
||||||
} from '@/store/groupType'
|
|
||||||
import {
|
|
||||||
handleSetWebviewStyle
|
|
||||||
} from '@/utils/common'
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
groupName,
|
groupName,
|
||||||
@ -163,9 +209,7 @@
|
|||||||
const talkStore = useTalkStore()
|
const talkStore = useTalkStore()
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const groupStore = useGroupStore()
|
const groupStore = useGroupStore()
|
||||||
const {
|
const { userInfo } = useAuth()
|
||||||
userInfo
|
|
||||||
} = useAuth()
|
|
||||||
|
|
||||||
const groupChatType = ref('')
|
const groupChatType = ref('')
|
||||||
const depsNoExpanded_1 = ref(true)
|
const depsNoExpanded_1 = ref(true)
|
||||||
@ -210,7 +254,8 @@
|
|||||||
|
|
||||||
const chooseGroupAdmin = () => {
|
const chooseGroupAdmin = () => {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/pages/chatSettings/groupManage/selectMembers?manageType=admin&isCreateDepGroup=1',
|
url:
|
||||||
|
'/pages/chatSettings/groupManage/selectMembers?manageType=admin&isCreateDepGroup=1',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,7 +267,7 @@
|
|||||||
|
|
||||||
//点击发起群聊
|
//点击发起群聊
|
||||||
const handleConfirm = async () => {
|
const handleConfirm = async () => {
|
||||||
console.log(allChooseMembers.value)
|
// console.log(allChooseMembers.value)
|
||||||
let erp_ids = ''
|
let erp_ids = ''
|
||||||
if (allChooseMembers?.value?.length > 0) {
|
if (allChooseMembers?.value?.length > 0) {
|
||||||
allChooseMembers?.value?.forEach((ele) => {
|
allChooseMembers?.value?.forEach((ele) => {
|
||||||
@ -270,12 +315,50 @@
|
|||||||
resetGroupInfo()
|
resetGroupInfo()
|
||||||
uni.navigateBack()
|
uni.navigateBack()
|
||||||
}
|
}
|
||||||
} else {}
|
} else {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//发起群聊按钮可点击状态
|
//发起群聊按钮可点击状态
|
||||||
const confirmBtnStatus = computed(() => {
|
const confirmBtnStatus = computed(() => {
|
||||||
return groupActiveIndex.value === -1;
|
let disabledT = false
|
||||||
});
|
if (
|
||||||
|
groupName.value === '' ||
|
||||||
|
(groupActiveIndex.value && groupActiveIndex.value === -1) ||
|
||||||
|
(!groupActiveIndex.value && groupActiveIndex.value !== 0)
|
||||||
|
) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// 选择的人员里面包含发起人,需要去重
|
||||||
|
let temp = []
|
||||||
|
allChooseMembers?.value?.forEach((ele) => {
|
||||||
|
if (ele.ID !== userInfo.value.ID) {
|
||||||
|
temp.push(ele)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
switch (groupActiveIndex.value) {
|
||||||
|
case 0:
|
||||||
|
if(temp?.length < 2) {
|
||||||
|
disabledT = true
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case 1:
|
||||||
|
if (!depCheckedKeys.value.length) {
|
||||||
|
disabledT = true
|
||||||
|
}
|
||||||
|
if (!groupAdmins.value.length) {
|
||||||
|
disabledT = true
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case 2:
|
||||||
|
if(temp?.length < 2) {
|
||||||
|
disabledT = true
|
||||||
|
}
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
return disabledT
|
||||||
|
})
|
||||||
|
|
||||||
onShow(() => {
|
onShow(() => {
|
||||||
depsNoExpanded_1.value = true;
|
depsNoExpanded_1.value = true;
|
||||||
@ -294,10 +377,8 @@
|
|||||||
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;
|
||||||
@ -306,7 +387,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.divider {
|
.divider {
|
||||||
height: 1rpx;
|
height: 1rpx;
|
||||||
background-color: #7c7c7c;
|
background-color: #7c7c7c;
|
||||||
@ -317,21 +397,18 @@
|
|||||||
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,37 +71,5 @@
|
|||||||
"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,37 +156,5 @@
|
|||||||
"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