refactor(组件): 重构链接处理并优化样式结构
- 将硬编码的详情页链接改为通过item.url统一管理 - 将评论区域的div改为可点击的a标签 - 调整图标容器的样式结构,增加定位和尺寸控制 - 修复标签过滤逻辑,避免空值导致的错误
This commit is contained in:
@@ -120,5 +120,5 @@ export const itemBottom = defineComponent({
|
||||
like,
|
||||
},
|
||||
|
||||
template: `<div class="comment flexacenter" v-if="item?.commentreviews && !Array.isArray(item?.commentreviews)"> <img class="icon" :src="item?.commentreviews?.avatar" /> <div class="text one-line-display">{{ item?.commentreviews?.content || "[图]" }}</div></div><template v-if="item.comment_list?.length != 0"> <div class="comment flexacenter" style="margin-bottom: 15px" v-for="(item, index) in item.comment_list" :key="index"> <img class="icon" :src="item.avatar" /> <div class="text one-line-display">{{ item.content || "[图]" }}</div> </div></template><div class="bottom flexacenter"> <div class="bottom-item like flexacenter" @click="likeClick()" v-if="item?.type != 'tenement'"> <img v-if="item.is_like" class="icon" src="/img/like-red-icon.png" /> <img v-else class="icon" src="/img/like-icon.png" /> <div class="text">{{ item.likes || "赞" }}</div> </div> <div class="bottom-item flexacenter" @click="collectClick()"> <img v-if="item.is_collect" class="icon" src="/img/collect-golden.svg" /> <img v-else class="icon" src="/img/collect-gray.png" /> <div class="text">{{ item.collections || "收藏" }}</div> </div> <a class="bottom-item flexacenter" v-if="item?.type != 'tenement'" :href="'/details/' + item.uniqid" target="_blank"> <img class="icon" src="/img/discuss-icon.png" /> <div class="text">{{ item.comments || "讨论" }}</div> </a> <a class="bottom-item flexacenter" v-if="item?.type != 'tenement'" :href="'/details/' + item.uniqid" target="_blank"> <img class="icon" src="/img/bi-copper-icon.png" /> <div class="text">{{ item.coins || "投币" }}</div> </a> <div class="bottom-item share flexacenter"> <img class="icon" src="/img/share-gray.png" /> <div class="text">转发</div> <div class="share-box flexcenter"> <div class="share-item flexcenter" @click="copyLinkClick()"> <img class="share-icon" src="/img/copy-black-icon.png" /> <div class="text">复制链接</div> </div> <!-- 鼠标移入 加载二维码 --> <div class="share-item wenxin flexcenter" @mouseenter="showQRcode"> <img class="share-icon" src="/img/weixin-icon.png" /> <div class="text">微信转发</div> <div v-if="QRcode" class="QRcode-box flexcenter"> <img class="QRcode" :src="QRcode" /> <div class="text">微信扫码</div> </div> </div> </div> </div></div><like v-if="isLikeGif"></like>`,
|
||||
template: `<a class="comment flexacenter" v-if="item?.commentreviews && !Array.isArray(item?.commentreviews)" :href="item.url" target="_blank"> <img class="icon" :src="item?.commentreviews?.avatar" /> <div class="text one-line-display">{{ item?.commentreviews?.content || "[图]" }}</div></a><template v-if="item.comment_list?.length != 0"> <a class="comment flexacenter" style="margin-bottom: 15px" v-for="(item, index) in item.comment_list" :key="index" :href="item.url" target="_blank"> <img class="icon" :src="item.avatar" /> <div class="text one-line-display">{{ item.content || "[图]" }}</div> </a></template><div class="bottom flexacenter"> <div class="bottom-item like flexacenter" @click="likeClick()" v-if="item?.type != 'tenement'"> <img v-if="item.is_like" class="icon" src="/img/like-red-icon.png" /> <img v-else class="icon" src="/img/like-icon.png" /> <div class="text">{{ item.likes || "赞" }}</div> </div> <div class="bottom-item flexacenter" @click="collectClick()"> <img v-if="item.is_collect" class="icon" src="/img/collect-golden.svg" /> <img v-else class="icon" src="/img/collect-gray.png" /> <div class="text">{{ item.collections || "收藏" }}</div> </div> <a class="bottom-item flexacenter" v-if="item?.type != 'tenement'" :href="'/details/' + item.uniqid" target="_blank"> <img class="icon" src="/img/discuss-icon.png" /> <div class="text">{{ item.comments || "讨论" }}</div> </a> <a class="bottom-item flexacenter" v-if="item?.type != 'tenement'" :href="'/details/' + item.uniqid" target="_blank"> <img class="icon" src="/img/bi-copper-icon.png" /> <div class="text">{{ item.coins || "投币" }}</div> </a> <div class="bottom-item share flexacenter"> <img class="icon" src="/img/share-gray.png" /> <div class="text">转发</div> <div class="share-box flexcenter"> <div class="share-item flexcenter" @click="copyLinkClick()"> <img class="share-icon" src="/img/copy-black-icon.png" /> <div class="text">复制链接</div> </div> <!-- 鼠标移入 加载二维码 --> <div class="share-item wenxin flexcenter" @mouseenter="showQRcode"> <img class="share-icon" src="/img/weixin-icon.png" /> <div class="text">微信转发</div> <div v-if="QRcode" class="QRcode-box flexcenter"> <img class="QRcode" :src="QRcode" /> <div class="text">微信扫码</div> </div> </div> </div> </div></div><like v-if="isLikeGif"></like>`,
|
||||
});
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<div class="comment flexacenter" v-if="item?.commentreviews && !Array.isArray(item?.commentreviews)">
|
||||
<a class="comment flexacenter" v-if="item?.commentreviews && !Array.isArray(item?.commentreviews)" :href="item.url" target="_blank">
|
||||
<img class="icon" :src="item?.commentreviews?.avatar" />
|
||||
<div class="text one-line-display">{{ item?.commentreviews?.content || "[图]" }}</div>
|
||||
</div>
|
||||
</a>
|
||||
<template v-if="item.comment_list?.length != 0">
|
||||
<div class="comment flexacenter" style="margin-bottom: 15px" v-for="(item, index) in item.comment_list" :key="index">
|
||||
<a class="comment flexacenter" style="margin-bottom: 15px" v-for="(item, index) in item.comment_list" :key="index" :href="item.url" target="_blank">
|
||||
<img class="icon" :src="item.avatar" />
|
||||
<div class="text one-line-display">{{ item.content || "[图]" }}</div>
|
||||
</div>
|
||||
</a>
|
||||
</template>
|
||||
<div class="bottom flexacenter">
|
||||
<div class="bottom-item like flexacenter" @click="likeClick()" v-if="item?.type != 'tenement'">
|
||||
|
||||
@@ -25,6 +25,9 @@ export const itemForum = defineComponent({
|
||||
res.content = res?.content?.replace(/\[.*?\../g, "");
|
||||
|
||||
let item = ref({ ...res });
|
||||
|
||||
item.value['url'] = '/details/' + item.value.uniqid;
|
||||
|
||||
return { item };
|
||||
},
|
||||
|
||||
@@ -33,5 +36,5 @@ export const itemForum = defineComponent({
|
||||
itemHead,
|
||||
},
|
||||
|
||||
template: `<div class="item-box item-forum"> <item-head :itemdata="item" :page="page"></item-head> <a v-if="item.title" class="title" :href="'/details/' + item.uniqid" target="_blank">{{ item.title }}</a> <a class="message two-line-display" :href="'/details/' + item.uniqid" target="_blank">{{ item.content }}</a> <item-bottom :itemdata="item" :page="page"></item-bottom></div>`,
|
||||
template: `<div class="item-box item-forum"> <item-head :itemdata="item" :page="page"></item-head> <a v-if="item.title" class="title" :href="item.url" target="_blank">{{ item.title }}</a> <a class="message two-line-display" :href="item.url" target="_blank">{{ item.content }}</a> <item-bottom :itemdata="item" :page="page"></item-bottom></div>`,
|
||||
});
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<div class="item-box item-forum">
|
||||
<item-head :itemdata="item" :page="page"></item-head>
|
||||
|
||||
<a v-if="item.title" class="title" :href="'/details/' + item.uniqid" target="_blank">{{ item.title }}</a>
|
||||
<a class="message two-line-display" :href="'/details/' + item.uniqid" target="_blank">{{ item.content }}</a>
|
||||
<a v-if="item.title" class="title" :href="item.url" target="_blank">{{ item.title }}</a>
|
||||
<a class="message two-line-display" :href="item.url" target="_blank">{{ item.content }}</a>
|
||||
|
||||
<item-bottom :itemdata="item" :page="page"></item-bottom>
|
||||
</div>
|
||||
@@ -33,7 +33,9 @@ export const itemHead = defineComponent({
|
||||
sectionn.value = item.value.sectionn || [];
|
||||
|
||||
const sectionNameSet = new Set(sectionn.value.map((item) => item.name));
|
||||
tags.value = item.value?.tags?.filter((tagName) => !sectionNameSet.has(tagName)) || [];
|
||||
console.log(item.value.tags, "tags");
|
||||
tags.value = item.value?.tags || [];
|
||||
tags.value = tags.value?.filter((tagName) => !sectionNameSet.has(tagName)) || [];
|
||||
|
||||
// const sectionSet = new Set(sectionn.value);
|
||||
// tags.value = item.value.tags?.filter((tag) => !sectionSet.has(tag));
|
||||
@@ -107,7 +109,6 @@ export const itemHead = defineComponent({
|
||||
|
||||
const parentItemBox = targetNode.parentElement;
|
||||
if (parentItemBox?.classList.contains("item-box")) parentItemBox.style.display = "none";
|
||||
|
||||
})
|
||||
.finally(() => {
|
||||
cutShow();
|
||||
|
||||
@@ -281,10 +281,17 @@
|
||||
#appIndex .header-content-box .header-content-right .post-entrance .entrance-bottom .item:hover {
|
||||
background-color: #e7e7e7;
|
||||
}
|
||||
#appIndex .header-content-box .header-content-right .post-entrance .entrance-bottom .item .icon {
|
||||
#appIndex .header-content-box .header-content-right .post-entrance .entrance-bottom .item .icon-box {
|
||||
position: relative;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 6px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
#appIndex .header-content-box .header-content-right .post-entrance .entrance-bottom .item .icon-box .icon {
|
||||
position: absolute;
|
||||
width: 38px;
|
||||
top: -8px;
|
||||
left: -6px;
|
||||
}
|
||||
#appIndex .header-content-box .header-content-right .adv {
|
||||
width: 240px;
|
||||
|
||||
@@ -334,10 +334,18 @@
|
||||
background-color: #e7e7e7;
|
||||
}
|
||||
|
||||
.icon {
|
||||
.icon-box {
|
||||
position: relative;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 6px;
|
||||
margin-right: 8px;
|
||||
|
||||
.icon {
|
||||
position: absolute;
|
||||
width: 38px;
|
||||
top: -8px;
|
||||
left: -6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user