fix: 修复关注按钮相关问题
- 食谱详情页: 修复 applyDefaultData 中未定义变量 id 的问题 - 帖子详情页: 优化 toggleFollow 方法,提前校验 author.id,兼容多种后端字段 - 为帖子详情页已关注状态添加灰色样式
This commit is contained in:
@@ -65,7 +65,7 @@
|
||||
class="knowledge-item"
|
||||
v-for="(item, index) in (guideList || [])"
|
||||
:key="item.knowledgeId || item.id || index"
|
||||
@click="goToDetail" :data-item-id="item.id" :data-item-kid="item.knowledgeId"
|
||||
@click="goToDetail($event, item, index, 'guide')"
|
||||
>
|
||||
<view class="knowledge-cover" v-if="item.coverImage || item.cover_image">
|
||||
<image :src="item.coverImage || item.cover_image" mode="aspectFill" class="cover-img" />
|
||||
@@ -96,7 +96,7 @@
|
||||
class="knowledge-item"
|
||||
v-for="(item, index) in (articleList || [])"
|
||||
:key="item.knowledgeId || item.id || index"
|
||||
@click="goToDetail" :data-item-id="item.id" :data-item-kid="item.knowledgeId"
|
||||
@click="goToDetail($event, item, index, 'articles')"
|
||||
>
|
||||
<view class="knowledge-cover" v-if="item.coverImage || item.cover_image">
|
||||
<image :src="item.coverImage || item.cover_image" mode="aspectFill" class="cover-img" />
|
||||
@@ -125,6 +125,7 @@
|
||||
|
||||
<script>
|
||||
export default {
|
||||
navigationBarTitleText: '健康知识',
|
||||
data() {
|
||||
return {
|
||||
currentTab: 'nutrients',
|
||||
@@ -184,15 +185,15 @@ export default {
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
// 确保列表初始为数组,避免未加载时为 undefined
|
||||
this.guideList = Array.isArray(this.guideList) ? this.guideList : [];
|
||||
this.articleList = Array.isArray(this.articleList) ? this.articleList : [];
|
||||
if (options && options.id) {
|
||||
// 有 id 时切换到科普文章 tab,switchTab 内会调用 loadKnowledgeList 加载列表
|
||||
this.switchTab('articles');
|
||||
} else {
|
||||
// 无 id 时默认当前 tab 为「营养素」;切换到「饮食指南」或「科普文章」时由 switchTab 触发 loadKnowledgeList
|
||||
// 无 id 时默认显示「营养素」tab(本地静态数据);用户切换到「饮食指南」或「科普文章」时由 switchTab 触发 loadKnowledgeList 加载对应列表
|
||||
this.currentTab = 'nutrients';
|
||||
// 确保列表初始为数组,避免未加载时为 undefined;切换 Tab 后再加载对应列表
|
||||
this.guideList = Array.isArray(this.guideList) ? this.guideList : [];
|
||||
this.articleList = Array.isArray(this.articleList) ? this.articleList : [];
|
||||
}
|
||||
},
|
||||
onReady() {
|
||||
@@ -224,7 +225,7 @@ export default {
|
||||
if (this.currentTab === 'nutrients') {
|
||||
return;
|
||||
}
|
||||
// type 与后端一致:guide / article(v2_knowledge 表 type 字段)
|
||||
// type 与后端 v2_knowledge 表一致:guide=饮食指南,article=科普文章
|
||||
const typeParam = this.currentTab === 'guide' ? 'guide' : 'article';
|
||||
try {
|
||||
const { getKnowledgeList } = await import('@/api/tool.js');
|
||||
@@ -264,10 +265,11 @@ export default {
|
||||
};
|
||||
});
|
||||
// 始终赋值为数组,绝不设为 undefined
|
||||
const safeList = Array.isArray(list) ? list : [];
|
||||
if (this.currentTab === 'guide') {
|
||||
this.guideList = Array.isArray(list) ? list : [];
|
||||
this.guideList = safeList;
|
||||
} else if (this.currentTab === 'articles') {
|
||||
this.articleList = Array.isArray(list) ? list : [];
|
||||
this.articleList = safeList;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('加载知识列表失败:', error);
|
||||
@@ -296,20 +298,24 @@ export default {
|
||||
url: `/pages/tool/nutrient-detail?name=${encodeURIComponent(item.name)}`
|
||||
});
|
||||
},
|
||||
goToDetail(event) {
|
||||
const id = event.currentTarget.dataset.itemId;
|
||||
const knowledgeId = event.currentTarget.dataset.itemKid;
|
||||
const finalId = knowledgeId ?? id;
|
||||
goToDetail(event, item, index, tab) {
|
||||
// 优先从传入的 item 取 knowledgeId 或 id,避免 dataset 序列化丢失
|
||||
const fromItem = item != null ? (item.knowledgeId ?? item.id) : undefined;
|
||||
const fromDataset = event && event.currentTarget && event.currentTarget.dataset;
|
||||
const id = fromDataset ? (fromDataset.itemId ?? fromDataset.item_id) : undefined;
|
||||
const knowledgeId = fromDataset ? (fromDataset.itemKid ?? fromDataset.item_kid) : undefined;
|
||||
let finalId = fromItem ?? knowledgeId ?? id;
|
||||
if (finalId == null && tab != null && index != null) {
|
||||
const list = tab === 'guide' ? this.guideList : this.articleList;
|
||||
const listItem = Array.isArray(list) ? list[index] : null;
|
||||
finalId = listItem != null ? (listItem.knowledgeId ?? listItem.id) : undefined;
|
||||
}
|
||||
// 仅当 knowledgeId 或 id 存在且有效时才跳转,否则提示暂无详情
|
||||
if (finalId == null || finalId === '' || String(finalId).trim() === '' || String(finalId) === 'undefined') {
|
||||
uni.showToast({ title: '暂无详情', icon: 'none' });
|
||||
return;
|
||||
}
|
||||
const idStr = String(finalId).trim();
|
||||
if (idStr === 'undefined') {
|
||||
uni.showToast({ title: '暂无详情', icon: 'none' });
|
||||
return;
|
||||
}
|
||||
uni.navigateTo({
|
||||
url: `/pages/tool/knowledge-detail?id=${encodeURIComponent(idStr)}`
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user