- 新增 artworkBuy API 实现艺术品购买功能 - 重构 WebSocket连接逻辑,优化消息处理- 更新直播间页面,支持实时竞拍和消息提示 -调整艺术详情和用户中心页面样式 - 优化消息组件样式和展示逻辑
		
			
				
	
	
		
			107 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <script setup>
 | ||
| import {userArtworks} from "@/api/goods/index.js";
 | ||
| import {authStore} from "@/stores/auth/index.js";
 | ||
| import xImage from '@/components/x-image/index.vue'
 | ||
| import {goodStore} from "~/stores/goods/index.js";
 | ||
| definePageMeta({
 | ||
|   layout: 'default',
 | ||
|   title: '我的',
 | ||
|   i18n: 'menu.profile',
 | ||
| })
 | ||
| const {artWorkDetail} = goodStore()
 | ||
| const myList=ref([])
 | ||
| const showMyList=ref([])
 | ||
| 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 res=await userArtworks({})
 | ||
|   if (res.status===0){
 | ||
|     myList.value=res.data.data
 | ||
|     showMyList.value=groupAndSortByDate(myList.value)
 | ||
|   }
 | ||
| }
 | ||
| const router = useRouter()
 | ||
| 
 | ||
| initData()
 | ||
| const goPay=()=>{
 | ||
| 
 | ||
| }
 | ||
| const goDetail=(item)=>{
 | ||
|   router.push({
 | ||
|     path:'/artDetail',
 | ||
|     query:{
 | ||
|       uuid:item.uuid
 | ||
|     }
 | ||
|   })
 | ||
| }
 | ||
| </script>
 | ||
| 
 | ||
| <template>
 | ||
|   <div class="w-[100vw] bg-[url('@/static/images/3532@2x.png')] bg-cover pt-43px flex-grow-1 flex flex-col">
 | ||
|   <div class="flex items-center px-16px mb-43px">
 | ||
|     <div class="mr-23px">
 | ||
|       <img class="w-57px h-57px" src="@/static/images/5514@2x.png" alt="">
 | ||
|     </div>
 | ||
|     <div class="flex flex-col">
 | ||
|       <div class="text-18px text-#181818">{{userInfo.realName}}</div>
 | ||
|       <div class="text-#575757 text-14px">{{userInfo.telNum}}</div>
 | ||
|     </div>
 | ||
|   </div>
 | ||
|     <div class="flex-grow-1 ">
 | ||
|       <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>
 | ||
|       <van-pull-refresh     @refresh="initData">
 | ||
|         <van-list
 | ||
|             finished-text="没有更多了"
 | ||
|         >
 | ||
|           <div class="px-16px pt-14px" v-for="(item,index) of showMyList" >
 | ||
|             <div class="text-#575757 text-14px mb-3px">{{item.userCreatedAt}}</div>
 | ||
|             <div class="flex mb-22px" v-for="(item1,index1) of item.list" @click="goDetail(item1)">
 | ||
|               <div class="flex-shrink-0 mr-10px rounded-4px overflow-hidden">
 | ||
|                 <x-image class="w-80px h-80px" :src="item1?.auctionArtworkInfo?.artwork?.hdPic" :preview="false" alt=""/>
 | ||
|               </div>
 | ||
|               <div class="flex flex-col justify-between grow-1">
 | ||
|                 <div class="text-#000 text-16px ellipsis line-height-21px">{{item1?.auctionArtworkInfo?.artworkTitle}}{{item1?.auctionArtworkInfo?.artworkTitle}}{{item1?.auctionArtworkInfo?.artworkTitle}}</div>
 | ||
|                 <div class="flex justify-between">
 | ||
|                   <div>
 | ||
|                     <div class="text-#575757 text-14px line-height-none mb-5px">起拍价:RMB 1,000</div>
 | ||
|                     <div class="text-#B58047 text-14px line-height-none">成交价:RMB 10,000</div>
 | ||
|                   </div>
 | ||
|                   <div v-if="[1,3,4].includes(item1.status)" @click="goPay">
 | ||
|                     <van-button class="w-73px !h-30px" type="primary"><span class="text-12px">去支付</span></van-button>
 | ||
|                   </div>
 | ||
|                 </div>
 | ||
|               </div>
 | ||
|             </div>
 | ||
|           </div>
 | ||
|         </van-list>
 | ||
|       </van-pull-refresh>
 | ||
|     </div>
 | ||
|   </div>
 | ||
| </template>
 | ||
| <style scoped>
 | ||
| .ellipsis {
 | ||
|   display: -webkit-box;
 | ||
|   -webkit-box-orient: vertical;
 | ||
|   -webkit-line-clamp: 2;
 | ||
|   overflow: hidden;
 | ||
|   text-overflow: ellipsis;
 | ||
| }
 | ||
| </style>
 |