This commit is contained in:
zyronon 2024-03-27 01:40:06 +08:00
parent 7533fd55ae
commit 6cc69dec18
6 changed files with 51 additions and 20 deletions

View File

@ -16,6 +16,7 @@
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"mitt": "3.0.0", "mitt": "3.0.0",
"mobile-select": "1.1.2", "mobile-select": "1.1.2",
"mockjs": "^1.1.0",
"pinia": "^2.1.7", "pinia": "^2.1.7",
"pinyin": "2.11.1", "pinyin": "2.11.1",
"vue": "3.4.21", "vue": "3.4.21",

View File

@ -29,6 +29,9 @@ dependencies:
mobile-select: mobile-select:
specifier: 1.1.2 specifier: 1.1.2
version: 1.1.2 version: 1.1.2
mockjs:
specifier: ^1.1.0
version: 1.1.0
pinia: pinia:
specifier: ^2.1.7 specifier: ^2.1.7
version: 2.1.7(vue@3.4.21) version: 2.1.7(vue@3.4.21)
@ -2024,6 +2027,13 @@ packages:
resolution: {integrity: sha512-FrVAun32DsxLUZziTE1LPlXC72kD13f8N8tqgf7zVWRIOIIJakNxVs8mR2KMzm3QJAYq5+EJ4ji98pHdWJ7ekw==} resolution: {integrity: sha512-FrVAun32DsxLUZziTE1LPlXC72kD13f8N8tqgf7zVWRIOIIJakNxVs8mR2KMzm3QJAYq5+EJ4ji98pHdWJ7ekw==}
dev: false dev: false
/mockjs@1.1.0:
resolution: {integrity: sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==}
hasBin: true
dependencies:
commander: 1.1.1
dev: false
/mrmime@2.0.0: /mrmime@2.0.0:
resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
engines: {node: '>=10'} engines: {node: '>=10'}

View File

@ -16,7 +16,7 @@
</SlideItem> </SlideItem>
</SlideHorizontal> </SlideHorizontal>
<div class="indicator-bar"> <div class="indicator-bar" v-if="state.detail.note_card?.image_list?.length > 1">
<div class="indicator" <div class="indicator"
:class="[i <= state.index+1 && 'active']" :class="[i <= state.index+1 && 'active']"
v-for="i in state.detail.note_card?.image_list?.length"></div> v-for="i in state.detail.note_card?.image_list?.length"></div>
@ -35,21 +35,21 @@
<div class="desc"> <div class="desc">
{{ state.detail.note_card?.display_title }} {{ state.detail.note_card?.display_title }}
</div> </div>
<div class="date">03:11</div> <div class="date">{{ state.detail.note_card.createTime }}</div>
</div> </div>
<div class="card comments"> <div class="card comments">
<header> <header>
<span class="l">评论 {{ state.detail.note_card?.interact_info?.liked_count }}</span> <span class="l">评论 {{ state.detail.note_card.comment_list.length }}</span>
<div class="r"> <div class="r">
<span>查看全部</span> <span>查看全部</span>
<Icon class="arrow" icon="mingcute:right-line"/> <Icon class="arrow" icon="mingcute:right-line"/>
</div> </div>
</header> </header>
<div class="comment" v-for="i in 2"> <div class="comment" v-for="i in state.detail.note_card.comment_list.slice(0,2)">
<img src="https://cdn.seovx.com/?mom=302" alt="" class="avatar"> <img src="https://cdn.seovx.com/?mom=302" alt="" class="avatar">
<span> <span>
***东西不错质量也很好 性价比很高 良心商家就冲这图必须给好评 {{ i.name }}{{ i.text }}
</span> </span>
</div> </div>
</div> </div>
@ -66,15 +66,15 @@
</div> </div>
<div class="option"> <div class="option">
<Icon icon="mage:message-dots-round" class="icon"/> <Icon icon="mage:message-dots-round" class="icon"/>
<div class="text">178</div> <div class="text">{{ state.detail.note_card.comment_list.length }}</div>
</div> </div>
<div class="option"> <div class="option">
<Icon icon="mage:star"/> <Icon icon="mage:star"/>
<div class="text">82</div> <div class="text">{{ state.detail.note_card?.interact_info?.collect_count }}</div>
</div> </div>
<div class="option"> <div class="option">
<Icon icon="ph:share-fat-light"/> <Icon icon="ph:share-fat-light"/>
<div class="text">23</div> <div class="text">{{ state.detail.note_card?.interact_info?.share_count }}</div>
</div> </div>
</div> </div>
</div> </div>
@ -84,12 +84,13 @@
<script setup> <script setup>
import SlideHorizontal from "@/components/slide/SlideHorizontal.vue"; import SlideHorizontal from "@/components/slide/SlideHorizontal.vue";
import SlideItem from "@/components/slide/SlideItem.vue"; import SlideItem from "@/components/slide/SlideItem.vue";
import {onMounted, reactive, ref} from "vue"; import {onMounted, reactive} from "vue";
import goods from "@/assets/data/goods";
import {useNav} from "@/utils/hooks/useNav"; import {useNav} from "@/utils/hooks/useNav";
import {Icon} from "@iconify/vue"; import {Icon} from "@iconify/vue";
import {useBaseStore} from "@/store/pinia"; import {useBaseStore} from "@/store/pinia";
import {_checkImgUrl} from "@/utils"; import {_checkImgUrl} from "@/utils";
import Mock from 'mockjs'
import {cloneDeep} from "lodash-es";
const nav = useNav() const nav = useNav()
const store = useBaseStore() const store = useBaseStore()
@ -106,15 +107,27 @@ const state = reactive({
"cover": {}, "cover": {},
"image_list": [], "image_list": [],
"display_title": "", "display_title": "",
"user": {} "user": {},
comment_list: [],
createTime: ''
} }
}, },
index: 0, index: 0,
}) })
onMounted(() => { onMounted(() => {
console.log('s', store.routeData) state.detail = cloneDeep(store.routeData)
state.detail = store.routeData let data = Mock.mock({
'comment_list|3-50': [{
name: '@cname',
text: '@cparagraph(3)'
}]
})
state.detail.note_card.comment_list = data.comment_list
state.detail.note_card.createTime = Mock.Random.date('MM-dd')
state.detail.note_card.interact_info.collect_count = Mock.Random.integer(60, 3000)
state.detail.note_card.interact_info.share_count = Mock.Random.integer(60, 3000)
console.log('sta', state.detail)
}) })
</script> </script>

View File

@ -21,7 +21,7 @@
<div class="name">{{ item.note_card?.user?.nickname }}</div> <div class="name">{{ item.note_card?.user?.nickname }}</div>
</div> </div>
<div class="star"> <div class="star">
<img src="@/assets/img/icon/components/like-gray-small.png" alt="" class="love-image"> <Icon icon="solar:heart-linear"/>
<div class="num">{{ item.note_card?.interact_info?.liked_count }}</div> <div class="num">{{ item.note_card?.interact_info?.liked_count }}</div>
</div> </div>
</div> </div>
@ -39,6 +39,7 @@ import {_checkImgUrl, _notice} from "@/utils";
import Scroll from "@/components/Scroll.vue"; import Scroll from "@/components/Scroll.vue";
import {recommendedPost} from "@/api/user"; import {recommendedPost} from "@/api/user";
import {useNav} from "@/utils/hooks/useNav"; import {useNav} from "@/utils/hooks/useNav";
import {Icon} from "@iconify/vue";
const nav = useNav() const nav = useNav()
const props = defineProps({ const props = defineProps({
@ -63,7 +64,7 @@ watch(() => props.active, n => {
}) })
function loadData() { function loadData() {
console.log('loadData') state.pageNo++
getData() getData()
} }
@ -126,7 +127,7 @@ async function getData(loading = true, refresh = false) {
padding: 10rem; padding: 10rem;
.title { .title {
font-size: 16rem; font-size: 15rem;
margin-bottom: 8rem; margin-bottom: 8rem;
} }
@ -148,10 +149,11 @@ async function getData(loading = true, refresh = false) {
.star { .star {
display: flex; display: flex;
align-items: center;
gap: 3rem;
img { svg {
width: 15rem; font-size: 16rem;
margin-right: 5rem;
} }
.num { .num {

View File

@ -48,7 +48,7 @@
@click="previewImg = _checkImgUrl(userinfo.cover_url[0].url_list[0])"> @click="previewImg = _checkImgUrl(userinfo.cover_url[0].url_list[0])">
<div class="info"> <div class="info">
<img :src="_checkImgUrl(userinfo.avatar_168x168.url_list[0])" class="avatar" <img :src="_checkImgUrl(userinfo.avatar_168x168.url_list[0])" class="avatar"
@click="previewImg = _checkImgUrl(userinfo.avatar_300x300.url_list[0])"> @click.stop="previewImg = _checkImgUrl(userinfo.avatar_300x300.url_list[0])">
<div class="right"> <div class="right">
<p class="name">{{ userinfo.nickname }}</p> <p class="name">{{ userinfo.nickname }}</p>
<div class="number mb1r"> <div class="number mb1r">

View File

@ -53,6 +53,11 @@ export default defineConfig({
var: 'VueDemi', var: 'VueDemi',
path: 'https://lib.baomitu.com/vue-demi/0.14.7/index.iife.min.js', path: 'https://lib.baomitu.com/vue-demi/0.14.7/index.iife.min.js',
}, },
{
name: 'mockjs',
var: 'Mock',
path: 'https://lib.baomitu.com/Mock.js/1.0.1-beta3/mock-min.js',
},
{ {
name: 'axios', name: 'axios',
var: 'axios', var: 'axios',