hookehuyr

refactor(message): 简化消息列表逻辑

- 只使用 title 字段显示标题,移除 note 降级处理
- 标题完整显示,不再省略(移除 line-clamp-1)
- 预览简化为固定文本:"点击查看详情"或"暂无内容"
- 删除 getItemTitle 和 getItemPreview 辅助函数(-50 行)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
<!--
* @Date:2026-02-08
* @Description: 我的消息页 - 使用 LoadMoreList 组件重构版本
* @Update:2026-02-13 API 新增 title 字段,直接使用 API 返回的标题
* @Update:2026-02-14 简化逻辑:只使用 title 字段,移除 note 相关处理
-->
<template>
<LoadMoreList
......@@ -33,9 +33,9 @@
<view class="flex-1 mr-2 relative">
<!-- 未读红点 -->
<view v-if="item.status === 'send'" class="absolute -left-2 top-1.5 w-1.5 h-1.5 bg-red-500 rounded-full"></view>
<!-- 标题:优先使用 API 返回的 title,降级使用 note 第一行 -->
<text class="text-lg font-bold text-gray-900 line-clamp-1 leading-snug">
{{ item.title || getItemTitle(item.note) }}
<!-- 标题:使用 API 返回的 title -->
<text class="text-lg font-bold text-gray-900 leading-snug">
{{ item.title || '暂无标题' }}
</text>
</view>
......@@ -50,8 +50,8 @@
<!-- 中间:内容预览 -->
<view class="mb-4">
<text class="text-sm text-gray-500 line-clamp-2 leading-relaxed">
{{ getItemPreview(item.note) }}
<text class="text-sm text-gray-500 leading-relaxed">
{{ item.note ? '点击查看详情' : '暂无内容' }}
</text>
</view>
......@@ -100,56 +100,6 @@ const loadingMore = ref(false)
// 标记:是否首次加载(用于区分 useLoad 和 useDidShow)
const isFirstLoad = ref(true)
/**
* 提取消息标题(降级方案:从 note 第一行提取)
*
* @description 当 API 未返回 title 时,从 note 内容的第一行提取标题
* @param {string} note - 消息内容
* @returns {string} 标题
*
* @example
* // API 已返回 title
* getItemTitle(note) // 不使用,直接显示 item.title
* // API 未返回 title(降级)
* getItemTitle('这是第一行标题\n这是内容') // 返回: '这是第一行标题'
*/
const getItemTitle = (note) => {
if (!note) return '暂无消息内容'
// 提取第一行作为标题
const firstLine = note.split('\n')[0]
// 移除富文本标签(简单处理)
const textOnly = firstLine.replace(/<[^>]+>/g, '').trim()
// 如果第一行太长,截取前 50 个字符
return textOnly.length > 50 ? textOnly.substring(0, 50) + '...' : textOnly
}
/**
* 提取消息预览
*
* @description 移除第一行标题后的内容作为预览
* @param {string} note - 消息内容
* @returns {string} 预览内容
*
* @example
* getItemPreview('标题\n内容第二行\n内容第三行') // 返回: '内容第二行\n内容第三行'
* getItemPreview('只有单行内容') // 返回: '点击查看详情'
*/
const getItemPreview = (note) => {
if (!note) return '点击查看详情'
// 移除第一行(已作为标题显示)
const lines = note.split('\n')
if (lines.length > 1) {
// 移除富文本标签(简单处理)
const preview = lines.slice(1).join('\n').replace(/<[^>]+>/g, '').trim()
return preview || '点击查看详情'
}
return '点击查看详情' // 只有一行时
}
/**
* 获取消息列表
......