新增艾特功能的选择界面

This commit is contained in:
wangyifeng 2025-03-12 16:26:39 +08:00
parent 36342b4dd9
commit 4b3062eefa

View File

@ -24,7 +24,12 @@
padding: props?.manageType === 'searchRecord' ? '20rpx 0 0' : '', padding: props?.manageType === 'searchRecord' ? '20rpx 0 0' : '',
}" }"
> >
<div class="member-list-alphabet-anchor-point"> <div
class="member-list-alphabet-anchor-point"
:style="{
top: props?.manageType === 'mention' ? '90rpx' : '',
}"
>
<div <div
class="member-list-alphabet-anchor-point-each" class="member-list-alphabet-anchor-point-each"
v-for="(alphabetItem, alphabetIndex) in state?.alphabet" v-for="(alphabetItem, alphabetIndex) in state?.alphabet"
@ -55,11 +60,12 @@
:style="{ :style="{
padding: padding:
props?.manageType === 'searchRecord' || props?.manageType === 'searchRecord' ||
props?.manageType === 'removeMembers' props?.manageType === 'removeMembers' ||
props?.manageType === 'mention'
? '10rpx 30rpx' ? '10rpx 30rpx'
: '', : '',
}" }"
v-if="alphabetItem?.memberList?.length > 0" v-if="alphabetItem?.memberList?.length > 0 && alphabetItem?.key !== '0'"
:id="alphabetItem.key" :id="alphabetItem.key"
:ref=" :ref="
(el) => { (el) => {
@ -85,7 +91,8 @@
:manageType="props?.manageType" :manageType="props?.manageType"
:itemStyle=" :itemStyle="
props?.manageType === 'searchRecord' || props?.manageType === 'searchRecord' ||
props?.manageType === 'removeMembers' props?.manageType === 'removeMembers' ||
props?.manageType === 'mention'
? 'list' ? 'list'
: 'card' : 'card'
" "
@ -108,7 +115,7 @@
!( !(
props?.manageType === 'removeMembers' && props?.manageType === 'removeMembers' &&
item?.is_mine item?.is_mine
) ) && props?.isMulSelect
" "
:round="10" :round="10"
:color=" :color="
@ -166,7 +173,7 @@ import {
} 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(['updateSelectedMembersNum']) const emits = defineEmits(['updateSelectedMembersNum', 'getSelectResult'])
const zPaging = ref() const zPaging = ref()
useZPaging(zPaging) useZPaging(zPaging)
@ -210,6 +217,11 @@ const props = defineProps({
type: String, type: String,
default: '', default: '',
}, },
isMulSelect: {
//
type: Boolean,
default: true,
},
}) })
const state = reactive({ const state = reactive({
@ -237,6 +249,37 @@ watch(
{ deep: true }, { deep: true },
) )
watch(
() => props?.isMulSelect,
(newIsMulSelect) => {
if (props?.manageType === 'mention') {
if (!newIsMulSelect) {
state.resultMemberList.unshift({
key: '0',
memberList: [
{
avatar: '/src/static/image/chatList/groupAllMember.png',
erp_user_id: 0,
gender: 0,
is_mute: 0,
key: '0',
leader: 0,
nickname: '所有人',
remark: '',
user_id: 0,
},
],
})
} else {
if (state.resultMemberList[0].key === '0') {
state.resultMemberList.splice(0, 1)
}
}
}
},
{ deep: true, immediate: true },
)
//A-Z tag //A-Z tag
const alphabetElementRefs = ref([]) const alphabetElementRefs = ref([])
// //
@ -321,7 +364,8 @@ const handleClickItem = (item) => {
(props?.manageType === 'silence' && item.is_mute === 1) || (props?.manageType === 'silence' && item.is_mute === 1) ||
(props?.manageType === 'admin' && (props?.manageType === 'admin' &&
(item.leader === 1 || item.leader === 2)) || (item.leader === 1 || item.leader === 2)) ||
(props?.manageType === 'removeMembers' && item.is_mine) (props?.manageType === 'removeMembers' && item.is_mine) ||
(props?.manageType === 'mention' && !props?.isMulSelect)
) { ) {
return return
} }
@ -350,7 +394,8 @@ const handleClickItem = (item) => {
const assembleAlphabetMemberList = async (newMemberList) => { const assembleAlphabetMemberList = async (newMemberList) => {
if ( if (
props?.manageType === 'searchRecord' || props?.manageType === 'searchRecord' ||
props?.manageType === 'removeMembers' props?.manageType === 'removeMembers' ||
props?.manageType === 'mention'
) { ) {
const resultMemberList = ref([]) const resultMemberList = ref([])
const alphabet = Array.from({ length: 26 }, (_, i) => const alphabet = Array.from({ length: 26 }, (_, i) =>
@ -368,6 +413,24 @@ const assembleAlphabetMemberList = async (newMemberList) => {
}) })
}) })
state.alphabet = tempAlphabet state.alphabet = tempAlphabet
if (props?.manageType === 'mention' && !props?.isMulSelect) {
resultMemberList.value.unshift({
key: '0',
memberList: [
{
avatar: '/src/static/image/chatList/groupAllMember.png',
erp_user_id: 0,
gender: 0,
is_mute: 0,
key: '0',
leader: 0,
nickname: '所有人',
remark: '',
user_id: 0,
},
],
})
}
state.resultMemberList = resultMemberList state.resultMemberList = resultMemberList
} else { } else {
if ( if (
@ -468,8 +531,10 @@ const scrollToView = (alphabet) => {
console.log() console.log()
zPaging.value?.scrollIntoViewById( zPaging.value?.scrollIntoViewById(
alphabet, alphabet,
document.getElementById('topArea').clientHeight document.getElementById('topArea')?.clientHeight
? document.getElementById('topArea').clientHeight - 1 ? document.getElementById('topArea').clientHeight - 1
: props?.manageType === 'mention'
? 140
: 80, : 80,
) )
} }
@ -499,6 +564,7 @@ const confirmSelectMembers = () => {
let selectedUserIds = '' let selectedUserIds = ''
let itemList = dialogueParams.memberList let itemList = dialogueParams.memberList
let positionInfos = [] let positionInfos = []
let selectUserInfos = []
if ( if (
props?.manageType === 'admin' && props?.manageType === 'admin' &&
(groupParams.groupInfo.group_type == 2 || (groupParams.groupInfo.group_type == 2 ||
@ -514,6 +580,7 @@ const confirmSelectMembers = () => {
} else { } else {
selectedUserIds += ',' + ele.checkArr[0] selectedUserIds += ',' + ele.checkArr[0]
} }
selectUserInfos.push(ele)
} }
if ( if (
ele.checkArr?.length > 0 || ele.checkArr?.length > 0 ||
@ -613,6 +680,8 @@ const confirmSelectMembers = () => {
} }
}) })
resp.catch(() => {}) resp.catch(() => {})
} else if (props?.manageType === 'mention') {
emits('getSelectResult', selectUserInfos)
} }
} }
} }