refactor(components): 优化多个组件的结构和功能
- 为 x-button 和 x-popup 组件添加注释说明 - 在 x-image 组件中添加 lazy 加载属性 - 优化 profile 页面的我的拍品列表展示 - 更新 tang
This commit is contained in:
parent
331b4a73b2
commit
d3cb4d55b4
@ -1,4 +1,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
|
/*
|
||||||
|
* 此组件的目的是使用该组件包裹的内容具有按压状态效果
|
||||||
|
* */
|
||||||
import {ref, defineEmits} from "vue";
|
import {ref, defineEmits} from "vue";
|
||||||
|
|
||||||
const emit = defineEmits(["click"]);
|
const emit = defineEmits(["click"]);
|
||||||
|
@ -21,6 +21,7 @@ const showImage = () => {
|
|||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<img
|
<img
|
||||||
|
loading="lazy"
|
||||||
v-bind="{ ...props, ...$attrs }"
|
v-bind="{ ...props, ...$attrs }"
|
||||||
@click="showImage"
|
@click="showImage"
|
||||||
>
|
>
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
|
/*
|
||||||
|
* 封装一个带标题栏的弹窗
|
||||||
|
* */
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
show: {
|
show: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
@ -24,9 +26,10 @@ const close=()=>{
|
|||||||
<div class="flex flex-col h-full">
|
<div class="flex flex-col h-full">
|
||||||
<!-- 标题栏 -->
|
<!-- 标题栏 -->
|
||||||
<div class="flex items-center pl-16px pr-19px h-40px border-b-1px border-gray-300 shrink-0">
|
<div class="flex items-center pl-16px pr-19px h-40px border-b-1px border-gray-300 shrink-0">
|
||||||
<slot name="title">
|
|
||||||
<div class="text-black text-16px">{{ title }}</div>
|
<slot v-if="$slots.title" name="title">
|
||||||
</slot>
|
</slot>
|
||||||
|
<div v-else class="text-black text-16px">{{ title }}</div>
|
||||||
<van-icon
|
<van-icon
|
||||||
class="ml-auto"
|
class="ml-auto"
|
||||||
size="20"
|
size="20"
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
items: Array,
|
items: Array,
|
||||||
colIndex: {
|
colIndex: {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import xPopup from '@/components/x-popup/index.vue'
|
import xPopup from '@/components/x-popup/index.vue'
|
||||||
import {goodStore} from "~/stores/goods/index.js";
|
import {goodStore} from "~/stores/goods/index.js";
|
||||||
import { showImagePreview } from 'vant';
|
import xImage from '@/components/x-image/index.vue'
|
||||||
const {pageRef,itemList} = goodStore();
|
const {pageRef,itemList} = goodStore();
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
show: Boolean,
|
show: Boolean,
|
||||||
@ -13,9 +13,7 @@ const props = defineProps({
|
|||||||
const emit = defineEmits(['update:show'])
|
const emit = defineEmits(['update:show'])
|
||||||
|
|
||||||
const close = () => emit('update:show', false);
|
const close = () => emit('update:show', false);
|
||||||
const openImage = (url) => {
|
|
||||||
showImagePreview([url]);
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -32,14 +30,13 @@ const openImage = (url) => {
|
|||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="mr-10px flex-shrink-0 rounded-4px overflow-hidden cursor-pointer"
|
class="mr-10px flex-shrink-0 rounded-4px overflow-hidden cursor-pointer"
|
||||||
@click="openImage(item.artwork.hdPic)"
|
|
||||||
>
|
>
|
||||||
<img
|
<xImage
|
||||||
class="w-80px h-80px"
|
class="w-80px h-80px"
|
||||||
:src="item.artwork.hdPic"
|
:src="item.artwork?.hdPic"
|
||||||
:alt="item.artworkTitle"
|
:alt="item?.artworkTitle"
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="ellipsis line-height-20px text-16px font-600 min-h-40px">
|
<div class="ellipsis line-height-20px text-16px font-600 min-h-40px">
|
||||||
|
@ -1,18 +1,36 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import {userArtworks} from "~/api/goods/index.js";
|
import {userArtworks} from "~/api/goods/index.js";
|
||||||
import {authStore} from "~/stores/auth/index.js";
|
import {authStore} from "~/stores/auth/index.js";
|
||||||
|
import xImage from '@/components/x-image/index.vue'
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
layout: 'default',
|
layout: 'default',
|
||||||
title: '我的',
|
title: '我的',
|
||||||
i18n: 'menu.profile',
|
i18n: 'menu.profile',
|
||||||
})
|
})
|
||||||
const myList=ref([])
|
const myList=ref([])
|
||||||
|
const showMyList=ref([])
|
||||||
const {userInfo}= authStore()
|
const {userInfo}= authStore()
|
||||||
|
const groupAndSortByDate=(data)=> {
|
||||||
|
if (!Array.isArray(data)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return Object.values(data.reduce((acc, curr) => {
|
||||||
|
if (!acc[curr.userCreatedAt]) {
|
||||||
|
acc[curr.userCreatedAt] = {
|
||||||
|
userCreatedAt: curr.userCreatedAt,
|
||||||
|
list: []
|
||||||
|
};
|
||||||
|
}
|
||||||
|
acc[curr.userCreatedAt].list.push(curr);
|
||||||
|
return acc;
|
||||||
|
}, {}))
|
||||||
|
.sort((a, b) => new Date(b.userCreatedAt) - new Date(a.userCreatedAt));
|
||||||
|
}
|
||||||
const initData=async ()=>{
|
const initData=async ()=>{
|
||||||
const res=await userArtworks({})
|
const res=await userArtworks({})
|
||||||
if (res.status===0){
|
if (res.status===0){
|
||||||
myList.value=res.data.data
|
myList.value=res.data.data
|
||||||
|
showMyList.value=groupAndSortByDate(myList.value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
initData()
|
initData()
|
||||||
@ -29,55 +47,22 @@ initData()
|
|||||||
<div class="text-#575757 text-14px">{{userInfo.telNum}}</div>
|
<div class="text-#575757 text-14px">{{userInfo.telNum}}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1 ">
|
||||||
<div class="border-b-1px border-b-#D3D3D3 px-16px flex">
|
<div class="border-b-1px border-b-#D3D3D3 px-16px flex">
|
||||||
<div class="text-#000 text-16px border-b-3 border-b-#2B53AC h-36px">我的拍品</div>
|
<div class="text-#000 text-16px border-b-3 border-b-#2B53AC h-36px">我的拍品</div>
|
||||||
</div>
|
</div>
|
||||||
<van-pull-refresh>
|
<van-pull-refresh @refresh="initData">
|
||||||
<van-list
|
<van-list
|
||||||
finished-text="没有更多了"
|
finished-text="没有更多了"
|
||||||
>
|
>
|
||||||
<div class="px-16px pt-14px">
|
<div class="px-16px pt-14px" v-for="(item,index) of showMyList">
|
||||||
<div class="text-#575757 text-14px mb-3px">2025.01.12</div>
|
<div class="text-#575757 text-14px mb-3px">{{item.userCreatedAt}}</div>
|
||||||
<div class="flex mb-22px">
|
<div class="flex mb-22px" v-for="(item1,index1) of item.list">
|
||||||
<div class="flex-shrink-0 mr-10px">
|
<div class="flex-shrink-0 mr-10px rounded-4px overflow-hidden">
|
||||||
<img class="w-80px h-80px" src="@/static/images/ddfdcaer.png" alt="">
|
<x-image class="w-80px h-80px" :src="item1?.auctionArtworkInfo?.artwork?.hdPic" alt=""/>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col justify-between">
|
<div class="flex flex-col justify-between">
|
||||||
<div class="text-#000 text-16px ellipsis line-height-21px">张天赐 | 日出而作,日落而息撒打算撒打算撒打决赛多久啊是世奥兰…</div>
|
<div class="text-#000 text-16px ellipsis line-height-21px">{{item1?.auctionArtworkInfo?.artworkTitle}}</div>
|
||||||
<div class="text-#575757 text-14px line-height-none ">起拍价:RMB 1,000</div>
|
|
||||||
<div class="text-#B58047 text-14px line-height-none">成交价:RMB 10,000</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex">
|
|
||||||
<div class="flex-shrink-0 mr-10px">
|
|
||||||
<img class="w-80px h-80px" src="@/static/images/ddfdcaer.png" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-col justify-between">
|
|
||||||
<div class="text-#000 text-16px ellipsis line-height-21px">张天赐 | 日出而作,日落而息撒打算撒打算撒打决赛多久啊是世奥兰…</div>
|
|
||||||
<div class="text-#575757 text-14px line-height-none ">起拍价:RMB 1,000</div>
|
|
||||||
<div class="text-[#fdc181ff] line-height-none">成交价:RMB 10,000</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="px-16px pt-14px">
|
|
||||||
<div class="text-#575757 text-14px mb-3px">2025.01.12</div>
|
|
||||||
<div class="flex mb-22px">
|
|
||||||
<div class="flex-shrink-0 mr-10px">
|
|
||||||
<img class="w-80px h-80px" src="@/static/images/ddfdcaer.png" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-col justify-between">
|
|
||||||
<div class="text-#000 text-16px ellipsis line-height-21px">张天赐 | 日出而作,日落而息撒打算撒打算撒打决赛多久啊是世奥兰…</div>
|
|
||||||
<div class="text-#575757 text-14px line-height-none ">起拍价:RMB 1,000</div>
|
|
||||||
<div class="text-#B58047 text-14px line-height-none">成交价:RMB 10,000</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex">
|
|
||||||
<div class="flex-shrink-0 mr-10px">
|
|
||||||
<img class="w-80px h-80px" src="@/static/images/ddfdcaer.png" alt="">
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-col justify-between">
|
|
||||||
<div class="text-#000 text-16px ellipsis line-height-21px">张天赐 | 日出而作,日落而息撒打算撒打算撒打决赛多久啊是世奥兰…</div>
|
|
||||||
<div class="text-#575757 text-14px line-height-none ">起拍价:RMB 1,000</div>
|
<div class="text-#575757 text-14px line-height-none ">起拍价:RMB 1,000</div>
|
||||||
<div class="text-#B58047 text-14px line-height-none">成交价:RMB 10,000</div>
|
<div class="text-#B58047 text-14px line-height-none">成交价:RMB 10,000</div>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user