Skip to content

Commit cb45277

Browse files
committed
refactor: mp/wx-msg 采用ref来实现滚动
1 parent 1987528 commit cb45277

File tree

1 file changed

+12
-18
lines changed

1 file changed

+12
-18
lines changed

src/views/mp/components/wx-msg/main.vue

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
-->
88
<template>
99
<ContentWrap>
10-
<div class="msg-div" :id="msgDivId">
10+
<div class="msg-div" ref="msgDivRef">
1111
<!-- 加载更多 -->
1212
<div v-loading="loading"></div>
1313
<div v-if="!loading">
@@ -47,8 +47,7 @@ const props = defineProps({
4747
}
4848
})
4949
50-
const accountId = ref<number>(-1) // 公众号ID,需要通过userId初始化
51-
const msgDivId = `msg-div-{new Date().getTime()}` // 当前的时间戳,用于每次消息加载后,回到原位置;具体见 :id="'msg-div' + nowStr" 处
50+
const accountId = ref(-1) // 公众号ID,需要通过userId初始化
5251
const loading = ref(false) // 消息列表是否正在加载中
5352
const hasMore = ref(true) // 是否可以加载更多
5453
const list = ref<any[]>([]) // 消息列表
@@ -74,7 +73,8 @@ const reply = ref<Reply>({
7473
articles: []
7574
})
7675
77-
const replySelectRef = ref<InstanceType<typeof WxReplySelect> | null>(null)
76+
const replySelectRef = ref<InstanceType<typeof WxReplySelect> | null>(null) // WxReplySelect组件ref,用于消息发送成功后清除内容
77+
const msgDivRef = ref() // 消息显示窗口ref,用于滚动到底部
7878
7979
/** 完成加载 */
8080
onMounted(async () => {
@@ -89,7 +89,7 @@ onMounted(async () => {
8989
9090
// 执行发送
9191
const sendMsg = async () => {
92-
if (!reply) {
92+
if (!unref(reply)) {
9393
return
9494
}
9595
// 公众号限制:客服消息,公众号只允许发送一条
@@ -117,7 +117,7 @@ const loadMore = () => {
117117
getPage(queryParams, null)
118118
}
119119
120-
const getPage = async (page: any, params: any) => {
120+
const getPage = async (page: any, params: any = null) => {
121121
loading.value = true
122122
let dataTemp = await getMessagePage(
123123
Object.assign(
@@ -131,11 +131,7 @@ const getPage = async (page: any, params: any) => {
131131
)
132132
)
133133
134-
const msgDiv = document.getElementById(msgDivId)
135-
let scrollHeight = 0
136-
if (msgDiv) {
137-
scrollHeight = msgDiv.scrollHeight
138-
}
134+
const scrollHeight = msgDivRef.value?.scrollHeight ?? 0
139135
// 处理数据
140136
const data = dataTemp.list.reverse()
141137
list.value = [...data, ...list.value]
@@ -153,24 +149,22 @@ const getPage = async (page: any, params: any) => {
153149
// 定位滚动条
154150
await nextTick()
155151
if (scrollHeight !== 0) {
156-
let div = document.getElementById(msgDivId)
157-
if (div && msgDiv) {
158-
msgDiv.scrollTop = div.scrollHeight - scrollHeight - 100
152+
if (msgDivRef.value) {
153+
msgDivRef.value.scrollTop = msgDivRef.value.scrollHeight - scrollHeight - 100
159154
}
160155
}
161156
}
162157
}
163158
164159
const refreshChange = () => {
165-
getPage(queryParams, null)
160+
getPage(queryParams)
166161
}
167162
168163
/** 定位到消息底部 */
169164
const scrollToBottom = async () => {
170165
await nextTick()
171-
let div = document.getElementById(msgDivId)
172-
if (div) {
173-
div.scrollTop = div.scrollHeight
166+
if (msgDivRef.value) {
167+
msgDivRef.value.scrollTop = msgDivRef.value.scrollHeight
174168
}
175169
}
176170
</script>

0 commit comments

Comments
 (0)