|
|
@@ -2,18 +2,49 @@
|
|
|
<div class="knowledge-card">
|
|
|
<div class="knowledge-header">
|
|
|
<div class="knowledge-title">
|
|
|
+ <div class="title-item" :class="{ active: activeKnowledgeId === 5 }" @click="handleKnowledgeClick(5)">
|
|
|
+ 焦点话题
|
|
|
+ </div>
|
|
|
<div class="title-item" :class="{ active: activeKnowledgeId === 6 }" @click="handleKnowledgeClick(6)">
|
|
|
- 种植知识库
|
|
|
+ 种植精华
|
|
|
</div>
|
|
|
<div class="title-item" :class="{ active: activeKnowledgeId === 7 }" @click="handleKnowledgeClick(7)">
|
|
|
- 实战知识库
|
|
|
+ 实战操作
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="more-text" @click="handleMoreClick">
|
|
|
更多<el-icon class="more-icon"><ArrowRight /></el-icon>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="knowledge-content" v-if="activeKnowledgeId === 7">
|
|
|
+ <div class="knowledge-content focus-content" v-if="activeKnowledgeId === 5">
|
|
|
+ <div
|
|
|
+ class="focus-item"
|
|
|
+ @click="handleBannerClick(item.id)"
|
|
|
+ v-for="(item, index) in knowledgeList"
|
|
|
+ :key="index"
|
|
|
+ >
|
|
|
+ <img class="thumb" :src="item.media?.[0]" alt="" />
|
|
|
+ <div class="focus-content">
|
|
|
+ <div class="title van-ellipsis">{{ item.title }}</div>
|
|
|
+ <div class="focus-expert">
|
|
|
+ <div class="expert-name">
|
|
|
+ <el-avatar :size="22" :src="item.expertIcon" />
|
|
|
+ {{ item.expertName || '专家' }}
|
|
|
+ </div>
|
|
|
+ <div class="date">{{ formatDate(item.createTime) }}</div>
|
|
|
+ </div>
|
|
|
+ <div class="focus-answer">
|
|
|
+ <div class="answer-icon">
|
|
|
+ 答
|
|
|
+ </div>
|
|
|
+ <!-- {{ item.answer }} -->
|
|
|
+ 保证金通常是指在金融交易中,为了确保交易双方履行合约义务而支付的一定金额。保证金的组成可能因不同的交易类型和市场而有所不同
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="no-data" v-if="knowledgeList.length === 0">暂无数据</div>
|
|
|
+ </div>
|
|
|
+ <div class="knowledge-content" v-else-if="activeKnowledgeId === 7">
|
|
|
<div
|
|
|
class="knowledge-item"
|
|
|
@click="handleBannerClick(item.id)"
|
|
|
@@ -53,7 +84,7 @@ import { useStore } from "vuex";
|
|
|
|
|
|
const router = useRouter();
|
|
|
const store = useStore();
|
|
|
-const activeKnowledgeId = ref(6);
|
|
|
+const activeKnowledgeId = ref(5);
|
|
|
|
|
|
// 按 topicId 缓存知识列表,避免每次切换都请求接口
|
|
|
const knowledgeCache = ref({});
|
|
|
@@ -85,7 +116,7 @@ onMounted(() => {
|
|
|
getKnowledgeList();
|
|
|
});
|
|
|
watch(store.state.home.gardenId, (newGardenId) => {
|
|
|
- if(newGardenId) {
|
|
|
+ if (newGardenId) {
|
|
|
getKnowledgeList();
|
|
|
}
|
|
|
});
|
|
|
@@ -99,11 +130,11 @@ const formatDate = (dateString) => {
|
|
|
const getKnowledgeList = async () => {
|
|
|
try {
|
|
|
let data = [];
|
|
|
-
|
|
|
+
|
|
|
if (activeKnowledgeId.value === 6) {
|
|
|
// 种植知识库:使用新接口
|
|
|
- const { data: result } = await VE_API.user.listWithAnswer({
|
|
|
- farmId: store.state.home.gardenId
|
|
|
+ const { data: result } = await VE_API.user.listWithAnswer({
|
|
|
+ farmId: store.state.home.gardenId,
|
|
|
});
|
|
|
data = result || [];
|
|
|
} else {
|
|
|
@@ -197,6 +228,64 @@ const getKnowledgeList = async () => {
|
|
|
font-size: 14px;
|
|
|
color: #666666;
|
|
|
}
|
|
|
+
|
|
|
+ &.focus-content {
|
|
|
+ padding: 8px 10px;
|
|
|
+ }
|
|
|
+ .focus-item {
|
|
|
+ padding-bottom: 16px;
|
|
|
+ .thumb {
|
|
|
+ width: 100%;
|
|
|
+ height: 123px;
|
|
|
+ border-radius: 5px;
|
|
|
+ object-fit: cover;
|
|
|
+ }
|
|
|
+ .focus-content {
|
|
|
+ .title {
|
|
|
+ font-weight: 500;
|
|
|
+ font-size: 16px;
|
|
|
+ line-height: 22px;
|
|
|
+ color: #1d2129;
|
|
|
+ padding: 8px 0;
|
|
|
+ }
|
|
|
+ .focus-expert {
|
|
|
+ padding-bottom: 8px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ font-size: 12px;
|
|
|
+ color: #666666;
|
|
|
+ .expert-name {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 6px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .focus-answer {
|
|
|
+ padding: 5px;
|
|
|
+ background: rgba(33, 153, 248, 0.05);
|
|
|
+ border-radius: 5px;
|
|
|
+ font-size: 13px;
|
|
|
+ line-height: 22px;
|
|
|
+ color: #86909C;
|
|
|
+ text-align: justify;
|
|
|
+ display: flex;
|
|
|
+ gap: 8px;
|
|
|
+ .answer-icon {
|
|
|
+ margin-top: 2px;
|
|
|
+ flex: none;
|
|
|
+ width: 18px;
|
|
|
+ height: 18px;
|
|
|
+ background: #2199f8;
|
|
|
+ border-radius: 2px;
|
|
|
+ font-size: 12px;
|
|
|
+ color: #fff;
|
|
|
+ text-align: center;
|
|
|
+ line-height: 18px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
.no-data {
|
|
|
font-size: 14px;
|