|
@@ -17,7 +17,6 @@ const props = withDefaults(
|
|
|
updateReadCardsOnChange: true
|
|
updateReadCardsOnChange: true
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
-
|
|
|
|
|
const pageData = ref<any[]>([])
|
|
const pageData = ref<any[]>([])
|
|
|
|
|
|
|
|
const emit = defineEmits<{ seeAll: []; hasCardRead: []; viewMore: []; jumpTracking: [] }>()
|
|
const emit = defineEmits<{ seeAll: []; hasCardRead: []; viewMore: []; jumpTracking: [] }>()
|
|
@@ -102,32 +101,57 @@ const compareIdsInArrays = (arr1, arr2) => {
|
|
|
return true
|
|
return true
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-if (props.isObserver) {
|
|
|
|
|
- watch(
|
|
|
|
|
- () => props.data,
|
|
|
|
|
- (newData, oldData) => {
|
|
|
|
|
- // 因为当父组件中数据已读未读状态变化时,也会触发props.data变化,此时不需要更新页面数据,根据id是否相等来判断这种情况
|
|
|
|
|
- if (compareIdsInArrays(oldData || [], newData || [])) return
|
|
|
|
|
-
|
|
|
|
|
- pageData.value = cloneDeep(newData)
|
|
|
|
|
- // 先清除旧数据中的卡片监听
|
|
|
|
|
- clearReadData(oldData)
|
|
|
|
|
-
|
|
|
|
|
- // 请求接口将旧数据中的新已读卡片上传服务器
|
|
|
|
|
- props.data.updateReadCardsOnChange && notificationMsgStore.markMessageAsRead()
|
|
|
|
|
-
|
|
|
|
|
- // 重新监听新数据中的卡片
|
|
|
|
|
- nextTick(() => {
|
|
|
|
|
- watchCards()
|
|
|
|
|
- })
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- immediate: true,
|
|
|
|
|
- deep: true
|
|
|
|
|
|
|
+const initData = () => {
|
|
|
|
|
+ const watchOptions = { deep: true, immediate: true }
|
|
|
|
|
+
|
|
|
|
|
+ const handleDataChange = (newData, oldData) => {
|
|
|
|
|
+ // 如果id相等,则不需要更新页面数据
|
|
|
|
|
+ if (compareIdsInArrays(oldData || [], newData || [])) return
|
|
|
|
|
+
|
|
|
|
|
+ pageData.value = cloneDeep(newData)
|
|
|
|
|
+
|
|
|
|
|
+ // 清除旧数据中的卡片监听
|
|
|
|
|
+ clearReadData(oldData)
|
|
|
|
|
+
|
|
|
|
|
+ // 请求接口将旧数据中的新已读卡片上传服务器
|
|
|
|
|
+ if (props.data.updateReadCardsOnChange) {
|
|
|
|
|
+ notificationMsgStore.markMessageAsRead()
|
|
|
}
|
|
}
|
|
|
- )
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 重新监听新数据中的卡片
|
|
|
|
|
+ nextTick(() => {
|
|
|
|
|
+ watchCards()
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ if (props.isObserver) {
|
|
|
|
|
+ watch(
|
|
|
|
|
+ () => props.data,
|
|
|
|
|
+ (newData, oldData) => {
|
|
|
|
|
+ handleDataChange(newData, oldData)
|
|
|
|
|
+ },
|
|
|
|
|
+ watchOptions
|
|
|
|
|
+ )
|
|
|
|
|
+ } else {
|
|
|
|
|
+ watch(
|
|
|
|
|
+ () => props.data,
|
|
|
|
|
+ (newVal) => {
|
|
|
|
|
+ pageData.value = cloneDeep(newVal)
|
|
|
|
|
+ },
|
|
|
|
|
+ watchOptions
|
|
|
|
|
+ )
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
+initData()
|
|
|
|
|
|
|
|
|
|
+// 将数据中的消息置为已读
|
|
|
|
|
+const setAllMessageRead = () => {
|
|
|
|
|
+ pageData.value.forEach((item) => {
|
|
|
|
|
+ item.info.isRead = true
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
+defineExpose({
|
|
|
|
|
+ setAllMessageRead
|
|
|
|
|
+})
|
|
|
// 定时将消息卡片未读的置为已读,五分钟一次
|
|
// 定时将消息卡片未读的置为已读,五分钟一次
|
|
|
let timer = null
|
|
let timer = null
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|