|
|
@@ -69,8 +69,8 @@
|
|
|
<!-- 互动栏 -->
|
|
|
<view class="action-bar">
|
|
|
<view class="action-item" @click.stop="handleLike(item)">
|
|
|
- <text :class="['icon', (item.isLiked === true) ? 'icon-liked' : '']">
|
|
|
- {{ (item.isLiked === true) ? '❤️' : '🤍' }}
|
|
|
+ <text :class="['icon', !!item.isLiked ? 'icon-liked' : '']">
|
|
|
+ {{ !!item.isLiked ? '❤️' : '🤍' }}
|
|
|
</text>
|
|
|
<text class="action-text">{{ item.likeCount || 0 }}</text>
|
|
|
</view>
|
|
|
@@ -81,8 +81,8 @@
|
|
|
</view>
|
|
|
|
|
|
<view class="action-item" @click.stop="handleFavorite(item)">
|
|
|
- <text :class="['icon', (item.isFavorited === true) ? 'icon-favorited' : '']">
|
|
|
- {{ (item.isFavorited === true) ? '⭐' : '☆' }}
|
|
|
+ <text :class="['icon', !!item.isFavorited ? 'icon-favorited' : '']">
|
|
|
+ {{ !!item.isFavorited ? '⭐' : '☆' }}
|
|
|
</text>
|
|
|
<text class="action-text">{{ item.favoriteCount || 0 }}</text>
|
|
|
</view>
|
|
|
@@ -189,6 +189,20 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
onLoad() {
|
|
|
+ // 从存储中获取当前用户ID
|
|
|
+ const storedUserId = uni.getStorageSync('userId')
|
|
|
+ if (storedUserId !== null && storedUserId !== undefined && storedUserId !== '') {
|
|
|
+ this.currentUserId = parseInt(storedUserId)
|
|
|
+ } else {
|
|
|
+ // 尝试从 userInfo 中获取
|
|
|
+ const userInfo = uni.getStorageSync('userInfo')
|
|
|
+ if (userInfo && (userInfo.userId || userInfo.id || userInfo.user_id)) {
|
|
|
+ this.currentUserId = parseInt(userInfo.userId || userInfo.id || userInfo.user_id)
|
|
|
+ } else {
|
|
|
+ // 未登录,设置为 null
|
|
|
+ this.currentUserId = null
|
|
|
+ }
|
|
|
+ }
|
|
|
this.loadDynamicList()
|
|
|
// 监听详情页更新事件,实时同步点赞/收藏状态
|
|
|
uni.$on('dynamic-updated', (payload) => {
|
|
|
@@ -198,15 +212,17 @@ export default {
|
|
|
const item = this.dynamicList[idx]
|
|
|
// 使用 hasOwnProperty 严格检查属性是否存在,只更新事件中明确包含的字段
|
|
|
// 这样可以避免误更新不相关的字段(如点赞时误更新收藏状态)
|
|
|
+ // 根据 dynamic_likes 表判断:有记录显示 ❤️,无记录显示 🤍
|
|
|
if (payload.hasOwnProperty('isLiked') && payload.isLiked !== undefined && payload.isLiked !== null) {
|
|
|
- this.$set(item, 'isLiked', Boolean(payload.isLiked === true || payload.isLiked === 1 || payload.isLiked === 'true'))
|
|
|
+ this.$set(item, 'isLiked', payload.isLiked === true || payload.isLiked === 1 || payload.isLiked === 'true' || payload.isLiked === '1')
|
|
|
}
|
|
|
if (payload.hasOwnProperty('likeCount') && payload.likeCount !== undefined && payload.likeCount !== null) {
|
|
|
this.$set(item, 'likeCount', Number(payload.likeCount) || 0)
|
|
|
}
|
|
|
// 只有当 isFavorited 明确存在于 payload 中时才更新(避免误更新)
|
|
|
+ // 根据 dynamic_favorites 表判断:有记录显示 ⭐,无记录显示 ☆
|
|
|
if (payload.hasOwnProperty('isFavorited') && payload.isFavorited !== undefined && payload.isFavorited !== null) {
|
|
|
- this.$set(item, 'isFavorited', Boolean(payload.isFavorited === true || payload.isFavorited === 1 || payload.isFavorited === 'true'))
|
|
|
+ this.$set(item, 'isFavorited', payload.isFavorited === true || payload.isFavorited === 1 || payload.isFavorited === 'true' || payload.isFavorited === '1')
|
|
|
}
|
|
|
if (payload.hasOwnProperty('favoriteCount') && payload.favoriteCount !== undefined && payload.favoriteCount !== null) {
|
|
|
this.$set(item, 'favoriteCount', Number(payload.favoriteCount) || 0)
|
|
|
@@ -223,6 +239,20 @@ export default {
|
|
|
|
|
|
onShow() {
|
|
|
// 返回列表页时自动刷新,确保状态一致
|
|
|
+ // 重新获取当前用户ID(可能在其他页面登录/登出)
|
|
|
+ const storedUserId = uni.getStorageSync('userId')
|
|
|
+ if (storedUserId !== null && storedUserId !== undefined && storedUserId !== '') {
|
|
|
+ this.currentUserId = parseInt(storedUserId)
|
|
|
+ } else {
|
|
|
+ // 尝试从 userInfo 中获取
|
|
|
+ const userInfo = uni.getStorageSync('userInfo')
|
|
|
+ if (userInfo && (userInfo.userId || userInfo.id || userInfo.user_id)) {
|
|
|
+ this.currentUserId = parseInt(userInfo.userId || userInfo.id || userInfo.user_id)
|
|
|
+ } else {
|
|
|
+ // 未登录,设置为 null
|
|
|
+ this.currentUserId = null
|
|
|
+ }
|
|
|
+ }
|
|
|
this.pageNum = 1
|
|
|
this.noMore = false
|
|
|
this.dynamicList = []
|
|
|
@@ -264,11 +294,14 @@ export default {
|
|
|
})
|
|
|
|
|
|
if (res && res.records) {
|
|
|
- // 处理数据,确保布尔值正确转换
|
|
|
+ // 处理数据,确保布尔值正确转换(根据 dynamic_likes 和 dynamic_favorites 表判断)
|
|
|
+ // 后端返回的 isLiked 和 isFavorited 应该已经是 Boolean,但为了兼容性,确保正确转换
|
|
|
const newData = res.records.map(item => ({
|
|
|
...item,
|
|
|
- isLiked: Boolean(item.isLiked === true || item.isLiked === 1 || item.isLiked === 'true'),
|
|
|
- isFavorited: Boolean(item.isFavorited === true || item.isFavorited === 1 || item.isFavorited === 'true')
|
|
|
+ // 如果 dynamic_likes 表中有记录,显示 ❤️,否则显示 🤍
|
|
|
+ isLiked: item.isLiked === true || item.isLiked === 1 || item.isLiked === 'true' || item.isLiked === '1',
|
|
|
+ // 如果 dynamic_favorites 表中有记录,显示 ⭐,否则显示 ☆
|
|
|
+ isFavorited: item.isFavorited === true || item.isFavorited === 1 || item.isFavorited === 'true' || item.isFavorited === '1'
|
|
|
}))
|
|
|
|
|
|
if (this.pageNum === 1) {
|
|
|
@@ -323,7 +356,8 @@ export default {
|
|
|
// 标记为正在处理
|
|
|
this.$set(this.likingMap, item.dynamicId, true)
|
|
|
|
|
|
- const isLiked = item.isLiked === true
|
|
|
+ // 根据 dynamic_likes 表判断是否点赞(有记录显示 ❤️,无记录显示 🤍)
|
|
|
+ const isLiked = item.isLiked === true || item.isLiked === 1 || item.isLiked === 'true' || item.isLiked === '1'
|
|
|
const originalCount = item.likeCount || 0
|
|
|
const newIsLiked = !isLiked
|
|
|
const newLikeCount = isLiked ? Math.max(0, originalCount - 1) : originalCount + 1
|
|
|
@@ -343,7 +377,7 @@ export default {
|
|
|
} catch (error) {
|
|
|
console.error('点赞操作失败:', error)
|
|
|
// 请求失败,恢复原状态
|
|
|
- const currentIsLiked = item.isLiked === true
|
|
|
+ const currentIsLiked = item.isLiked === true || item.isLiked === 1 || item.isLiked === 'true' || item.isLiked === '1'
|
|
|
this.$set(item, 'isLiked', !currentIsLiked)
|
|
|
this.$set(item, 'likeCount', !currentIsLiked ? (item.likeCount || 0) + 1 : Math.max(0, (item.likeCount || 0) - 1))
|
|
|
uni.showToast({
|
|
|
@@ -369,7 +403,8 @@ export default {
|
|
|
// 标记为正在处理
|
|
|
this.$set(this.favoritingMap, item.dynamicId, true)
|
|
|
|
|
|
- const isFavorited = item.isFavorited === true
|
|
|
+ // 根据 dynamic_favorites 表判断是否收藏(有记录显示 ⭐,无记录显示 ☆)
|
|
|
+ const isFavorited = item.isFavorited === true || item.isFavorited === 1 || item.isFavorited === 'true' || item.isFavorited === '1'
|
|
|
const originalCount = item.favoriteCount || 0
|
|
|
const newIsFavorited = !isFavorited
|
|
|
const newFavoriteCount = isFavorited ? Math.max(0, originalCount - 1) : originalCount + 1
|
|
|
@@ -392,7 +427,7 @@ export default {
|
|
|
} catch (error) {
|
|
|
console.error('收藏操作失败:', error)
|
|
|
// 请求失败,恢复原状态
|
|
|
- const currentIsFavorited = item.isFavorited === true
|
|
|
+ const currentIsFavorited = item.isFavorited === true || item.isFavorited === 1 || item.isFavorited === 'true' || item.isFavorited === '1'
|
|
|
this.$set(item, 'isFavorited', !currentIsFavorited)
|
|
|
this.$set(item, 'favoriteCount', !currentIsFavorited ? (item.favoriteCount || 0) + 1 : Math.max(0, (item.favoriteCount || 0) - 1))
|
|
|
uni.showToast({
|