修改撤回显示规则

This commit is contained in:
wangyifeng 2025-03-17 16:32:29 +08:00
parent 380b0120bc
commit b0abca9bf2
5 changed files with 119 additions and 27 deletions

View File

@ -4,39 +4,72 @@ import { formatTime } from '@/utils/datetime'
defineProps({ defineProps({
login_uid: { login_uid: {
type: Number, type: Number,
default: 0 default: 0,
}, },
user_id: { user_id: {
type: Number, type: Number,
default: 0 default: 0,
}, },
talk_type: { talk_type: {
type: Number, type: Number,
default: 0 default: 0,
}, },
nickname: { nickname: {
type: String, type: String,
default: '' default: '',
}, },
datetime: { datetime: {
type: String, type: String,
default: '' default: '',
}, },
msg_id: { msg_id: {
type: String, type: String,
default: '' default: '',
},
revokeInfo: {
type: Object,
default() {
return {}
},
},
extra:{
type: String,
default: '',
} }
}) })
</script> </script>
<template> <template>
<div class="im-message-revoke"> <div class="im-message-revoke">
<div class="content"> <div class="content" v-if="JSON.stringify(revokeInfo) !== '{}'">
<span v-if="login_uid == user_id"> 你撤回了一条消息 | {{ formatTime(datetime) }} <span v-if="talk_type === 1 && login_uid === revokeInfo.withdraw_id">
<slot></slot> <!-- 添加插槽用于放置重新编辑按钮 --> 你撤回了一条消息 | {{ formatTime(datetime) }}
<slot></slot>
<!-- 添加插槽用于放置重新编辑按钮 -->
</span> </span>
<span v-else-if="talk_type == 1"> 对方撤回了一条消息 | {{ formatTime(datetime) }} </span> <span v-if="talk_type === 1 && login_uid !== revokeInfo.withdraw_id">
<span v-else> {{revokeInfo.withdraw_name}}撤回了一条消息 | {{ formatTime(datetime) }}
"{{ nickname }}" 撤回了一条消息 | </span>
<span v-if="talk_type === 2 && login_uid === revokeInfo.withdraw_id && login_uid === revokeInfo.retracted_id">
你撤回了一条消息 |
{{ formatTime(datetime) }}
<slot></slot>
</span>
<span v-if="talk_type === 2 && login_uid === revokeInfo.withdraw_id && login_uid !== revokeInfo.retracted_id">
你撤回了{{revokeInfo.retracted_name}}一条消息 |
{{ formatTime(datetime) }}
</span>
<span v-if="talk_type === 2 && login_uid !== revokeInfo.withdraw_id && revokeInfo.withdraw_id === revokeInfo.retracted_id">
{{revokeInfo.withdraw_name}}撤回了一条消息 |
{{ formatTime(datetime) }}
</span>
<span v-if="talk_type === 2 && login_uid !== revokeInfo.withdraw_id && login_uid === revokeInfo.retracted_id && revokeInfo.withdraw_id !== revokeInfo.retracted_id">
{{revokeInfo.withdraw_name}}撤回了你一条消息 |
{{ formatTime(datetime) }}
{{extra}}
</span>
<span v-if="talk_type === 2 && login_uid !== revokeInfo.withdraw_id && login_uid !== revokeInfo.retracted_id && revokeInfo.withdraw_id !== revokeInfo.retracted_id">
{{revokeInfo.withdraw_name}}撤回了{{revokeInfo.retracted_name}}一条消息 |
{{ formatTime(datetime) }} {{ formatTime(datetime) }}
</span> </span>
@ -44,6 +77,27 @@ defineProps({
<span v-else-if="login_uid == user_idB"> A撤回你了一条消息 | {{ formatTime(datetime) }} </span> <span v-else-if="login_uid == user_idB"> A撤回你了一条消息 | {{ formatTime(datetime) }} </span>
<span v-else> A撤回B了一条消息 | {{ formatTime(datetime) }} </span> --> <span v-else> A撤回B了一条消息 | {{ formatTime(datetime) }} </span> -->
</div> </div>
<div class="content" v-if="JSON.stringify(revokeInfo) === '{}'">
<span v-if="talk_type === 1 && login_uid === user_id">
你撤回了一条消息 | {{ formatTime(datetime) }}
<slot></slot>
<!-- 添加插槽用于放置重新编辑按钮 -->
</span>
<span v-if="talk_type === 1 && login_uid !== user_id">
{{nickname}}撤回了一条消息 | {{ formatTime(datetime) }}
</span>
<span v-if="talk_type === 2 && !extra && login_uid === user_id">
你撤回了一条消息 | {{ formatTime(datetime) }}
<slot></slot>
<!-- 添加插槽用于放置重新编辑按钮 -->
</span>
<span v-if="talk_type === 2 && !extra && login_uid !== user_id">
{{nickname}}撤回了一条消息 | {{ formatTime(datetime) }}
</span>
<span v-if="talk_type === 2 && extra">
{{extra}} | {{ formatTime(datetime) }}
</span>
</div>
</div> </div>
</template> </template>
<style lang="less" scoped> <style lang="less" scoped>

View File

@ -68,20 +68,38 @@ class Revoke extends Base {
} }
handle() { handle() {
const {updateDialogueRecord} = useDialogueListStore() const { updateDialogueRecord } = useDialogueListStore()
useTalkStore().updateItem({ useTalkStore().updateItem({
index_name: this.getIndexName(), index_name: this.getIndexName(),
msg_text: this.resource.text, msg_text: this.resource.text,
updated_at: parseTime(new Date()) revokeInfo: {
retracted_id: this.resource.retracted_id,
retracted_name: this.resource.retracted_name,
withdraw_id: this.resource.withdraw_id,
withdraw_name: this.resource.withdraw_name,
},
updated_at: parseTime(new Date()),
}) })
useDialogueStore().updateDialogueRecord({ useDialogueStore().updateDialogueRecord({
msg_id: this.msg_id, msg_id: this.msg_id,
is_revoke: 1 revokeInfo: {
retracted_id: this.resource.retracted_id,
retracted_name: this.resource.retracted_name,
withdraw_id: this.resource.withdraw_id,
withdraw_name: this.resource.withdraw_name,
},
is_revoke: 1,
}) })
updateDialogueRecord({ updateDialogueRecord({
msg_id: this.msg_id, msg_id: this.msg_id,
is_revoke: 1 revokeInfo: {
retracted_id: this.resource.retracted_id,
retracted_name: this.resource.retracted_name,
withdraw_id: this.resource.withdraw_id,
withdraw_name: this.resource.withdraw_name,
},
is_revoke: 1,
}) })
} }
} }

View File

@ -72,6 +72,8 @@
:talk_type="item.talk_type" :talk_type="item.talk_type"
:datetime="item.created_at" :datetime="item.created_at"
:msg_id="item.msg_id" :msg_id="item.msg_id"
:revokeInfo="item.revokeInfo"
:extra="item.extra"
> >
<template <template
v-if=" v-if="

View File

@ -443,6 +443,8 @@ const getDArray = (dArray) => {
// //
const inputSearchText = (e) => { const inputSearchText = (e) => {
state.searchText = e state.searchText = e
state.cursor = 0
queryAllSearch()
} }
// //
@ -465,6 +467,7 @@ const queryAllSearch = () => {
start_time: '', start_time: '',
end_time: '', end_time: '',
group_member_user_id: 0, //id group_member_user_id: 0, //id
file_name: state.msg_type === 6 ? state.searchText : '',
} }
console.log(params) console.log(params)
const resp = ServeFindTalkRecords(params) const resp = ServeFindTalkRecords(params)
@ -472,7 +475,8 @@ const queryAllSearch = () => {
resp.then(({ code, data }) => { resp.then(({ code, data }) => {
console.log(data) console.log(data)
if (code == 200) { if (code == 200) {
let dateList = state.searchResultList // cursor0searchResultList
let dateList = state.cursor === 0 ? [] : state.searchResultList
let noMore = false let noMore = false
if (data?.items?.length > 0) { if (data?.items?.length > 0) {
data.items.forEach((item) => { data.items.forEach((item) => {
@ -518,14 +522,26 @@ const queryAllSearch = () => {
noMore = true noMore = true
} }
console.log(dateList) console.log(dateList)
if (state.cursor === 0) {
state.searchResultList = dateList
zPaging.value?.complete(dateList)
} else {
state.searchResultList = dateList
zPaging.value?.completeByNoMore(dateList, noMore)
}
state.cursor = data?.cursor state.cursor = data?.cursor
zPaging.value?.completeByNoMore(dateList, noMore)
} else { } else {
if (state.cursor === 0) {
state.searchResultList = []
}
zPaging.value?.complete([]) zPaging.value?.complete([])
} }
}) })
resp.catch(() => { resp.catch(() => {
if (state.cursor === 0) {
state.searchResultList = []
}
zPaging.value?.complete([]) zPaging.value?.complete([])
}) })
} }

View File

@ -107,15 +107,17 @@ export const useDialogueListStore = createGlobalState(() => {
const addChatRecord = (indexName, item) => { const addChatRecord = (indexName, item) => {
const dialogue = lodash.cloneDeep(useDialogueStore()) const dialogue = lodash.cloneDeep(useDialogueStore())
if (dialogue?.index_name === indexName) { if (dialogue?.index_name === indexName) {
const index = virtualList.value.findIndex( if (item?.file_num) {
(v) => v?.file_num === item?.file_num, const index = virtualList.value.findIndex(
) (v) => v?.file_num === item?.file_num,
if (index > -1) { )
// 保持响应性的同时替换整个对象 if (index > -1) {
virtualList.value.splice(index, 1, { // 保持响应性的同时替换整个对象
...virtualList.value[index], // 保留原有不需要修改的字段 virtualList.value.splice(index, 1, {
...item, // 覆盖需要更新的字段 ...virtualList.value[index], // 保留原有不需要修改的字段
}) ...item, // 覆盖需要更新的字段
})
}
} else { } else {
zpagingRef.value?.addChatRecordData(item, false, false) zpagingRef.value?.addChatRecordData(item, false, false)
} }