This commit is contained in:
wwt 2025-02-12 14:34:05 +08:00
parent c959018360
commit ed0e545873
16 changed files with 122 additions and 72 deletions

View File

@ -71,7 +71,7 @@ initData()
<itemDetail class="grow-1" :detail-info="detail.auctionArtworkInfo"/>
<div v-if="[1,3,4].includes(detail.status)" class="h-81px bg-#fff flex justify-center pt-7px">
<van-button class="w-213px !h-38px" type="primary">
<span class="text-#fff text-14px">去支付 RMB10,000</span>
<span class="text-#fff text-14px">{{ $t('art_detail_page.button') }} RMB10,000</span>
</van-button>
</div>
<div
@ -86,8 +86,8 @@ initData()
<img src="@/static/images/zd5530@2x.png" class="w-full h-full" alt="">
<div
class="flex flex-col items-center absolute bottom-25px text-14px text-#B58047 left-1/2 transform translate-x--1/2 whitespace-nowrap">
<div>恭喜您</div>
<div>竞拍成功</div>
<div>{{ $t('art_detail_page.prompt_title')}}</div>
<div>{{ $t('art_detail_page.prompt_desc')}}</div>
</div>
</div>
</div>

View File

@ -22,7 +22,7 @@ const handleClose = () => {
}
</script>
<template>
<xPopup :show="show" title="拍品详情" @update:show="handleClose">
<xPopup :show="show" :title="$t('home.lot_detail')" @update:show="handleClose">
<ItemDetail :detailInfo="detailInfo" />
</xPopup>
</template>

View File

@ -52,17 +52,17 @@ const openShow = async (item) => {
<div class="px-[16px] pt-[16px]">
<van-pull-refresh
v-model="localState.refreshing"
success-text="刷新成功"
:success-text="$t('refresh_show')"
:success-duration="700"
@refresh="onRefresh"
>
<template #success>
<van-icon name="success" /> <span>刷新成功</span>
<van-icon name="success" /> <span>{{ $t('refresh_show') }}</span>
</template>
<van-list
v-model:loading="storeLoading"
:finished="localState.finished"
finished-text="没有更多了"
:finished-text="$t('home.finished_text')"
@load="loadMore"
>
<div class="w-full flex gap-[16px]">
@ -89,13 +89,13 @@ const openShow = async (item) => {
{{ item.name }}
</div>
<div class="mt-[4px] text-[12px] text-[#575757]">
起拍价{{ item?.startPrice??0 }}
{{ $t('home.start_price') }}{{ item?.startPrice??0 }}
</div>
<div
v-if="item.soldPrice"
class="mt-[4px] text-[12px] text-[#b58047]"
>
成交价{{ item?.startPrice??0 }}
{{ $t('home.close_price') }}{{ item?.startPrice??0 }}
</div>
</div>
</div>

View File

@ -22,10 +22,10 @@ if (!auctionDetail.value.uuid){
</client-only>
<div v-if="!fullLive" class="bg-#fff">
<van-tabs sticky animated>
<van-tab title="拍品列表">
<van-tab :title="$t('home.tab1')">
<ItemList></ItemList>
</van-tab>
<van-tab title="拍卖说明">
<van-tab :title="$t('home.tab2')">
<Cescribe></Cescribe>
</van-tab>
</van-tabs>

View File

@ -1,21 +1,22 @@
<script setup>
import {liveStore} from "@/stores/live/index.js";
import {authStore} from "~/stores/auth/index.js";
import {useI18n} from 'vue-i18n'
const {auctionData} = liveStore()
const {userInfo}= authStore()
const headList=[
{
label:'领先',
label:useI18n().t('live_room.head'),
color:'#D03050',
value:'head'
},
{
label:'出局',
label:useI18n().t('live_room.out'),
color:'#939393',
value:'out'
},
{
label:'成交',
label:useI18n().t('live_room.success'),
color:'#34B633',
value:'success'
}
@ -32,19 +33,19 @@ const headItem=(statusCode)=>{
>
<transition-group name="list" tag="div">
<template v-if="auctionData.wsType==='stopArtwork'">
<div class="text-#939393 text-14px">即将开始下一个拍品</div>
<div class="text-#939393 text-14px">{{ $t('live_room.next_lot') }}</div>
</template>
<template v-else-if="auctionData.auctionPriceList?.buys?.length>0">
<div v-for="(item, index) in auctionData.auctionPriceList?.buys" :key="index" class="flex flex-shrink-0 h-25px">
<div class="text-start shrink-0 w-60px" :style="`color: ${headItem(item.statusCode).color}`" >{{ headItem(item.statusCode).label }}</div>
<div class="text-start shrink-0 w-80px">{{ item.auctionType==='local'?'现场竞价':'网络竞价' }}</div>
<div class="text-start shrink-0 w-80px">{{ item.auctionType==='local'? $t('live_room.spot'):$t('live_room.network') }}</div>
<div class="text-start shrink-0 w-80px">{{ item.createdAt }}</div>
<div class="text-start shrink-0 w-80px">{{item.baseCurrency}}{{ item.baseMoney }}</div>
<div class="text-start text-#2B53AC shrink-0 w-20px">{{ item.userId===userInfo.ID?'我':'' }}</div>
<div class="text-start text-#2B53AC shrink-0 w-20px">{{ item.userId===userInfo.ID?$t('live_room.me'):'' }}</div>
</div>
</template>
<template v-if="auctionData.wsType==='newArtwork'">
<div class="text-#939393 text-14px">开始拍卖</div>
<div class="text-#939393 text-14px">{{ $t('live_room.start') }}</div>
</template>
</transition-group>

View File

@ -66,14 +66,14 @@ const handleCapture = () => {
<van-dialog :show="show" show-cancel-button @cancel="close" @confirm="confirm">
<div class="flex flex-col pt-18px pb-13px justify-between items-center h-144px">
<template v-if="payStatus===0">
<div class="text-#000 text-16px font-600 ">支付全部</div>
<div class="text-#000 text-16px font-600 ">{{ $t('live_room.all_pay') }}</div>
<div class="text-#000 text-16px ">RMB 5,000</div>
</template>
<template v-if="payStatus===1">
<div class="text-#000 text-16px font-600 ">支付部分</div>
<div class="text-#000 text-16px font-600 ">{{ $t('live_room.part_pay') }}</div>
<input class="w-272px h-48px bg-#F3F3F3 px-11px text-16px" type="text" placeholder="最多RMB5,000">
</template>
<div class="text-#2B53AC text-14px" @click="changePayStatus">{{payStatus===0 ? '支付部分' : '支付全部'}}</div>
<div class="text-#2B53AC text-14px" @click="changePayStatus">{{payStatus===0 ? $t('live_room.part_pay') : $t('live_room.all_pay')}}</div>
</div>
</van-dialog>
</div>

View File

@ -23,7 +23,7 @@ const cancel= () => {
<template>
<div>
<van-dialog style="overflow: visible" :show="show" show-cancel-button :show-confirm-button="false" cancelButtonText="返回" cancelButtonColor="#2B53AC" @cancel="cancel">
<van-dialog style="overflow: visible" :show="show" show-cancel-button :show-confirm-button="false" :cancelButtonText="$t('login.back')" cancelButtonColor="#2B53AC" @cancel="cancel">
<div class="h-145px relative flex justify-center">
<img :src="type==='success' ? successImg : errorImg" class="w-119px h-120px absolute top--74px z-9999 left-1/2 transform translate-x--1/2" alt="">
<div class="mt-94px text-#A9A9A9 text-16px">{{price}}</div>

View File

@ -34,7 +34,7 @@ const goPay = () => {
<!-- 拍品信息 -->
<van-button class="w-60px !h-60px" @click="openOne" style="border: none;border-radius: 0">
<div class="text-center flex flex-col justify-center items-center text-#7D7D7F text-12px">
<div>拍品</div>
<div>{{ $t('live_room.lots') }}</div>
<div>({{ auctionData?.artwork?.index }}/{{ pageRef.itemCount ?? 0 }})</div>
</div>
</van-button>
@ -51,7 +51,7 @@ const goPay = () => {
/>
</div>
<div :class="quoteStatus ? 'text-gray-500' : 'text-blue-600'" class="text-10px transition-colors duration-200">
{{ quoteStatus ? '关闭出价' : '开启出价' }}
{{ quoteStatus ? $t('live_room.colse_bid') : $t('live_room.start_bid') }}
</div>
</div>
</van-button>
@ -60,7 +60,7 @@ const goPay = () => {
<div class="text-center flex flex-col justify-center items-center text-yellow-600">
<div class="text-10px">RMB</div>
<div class="text-12px">5,000</div>
<div class="text-10px">去支付</div>
<div class="text-10px">{{ $t('art_detail_page.button') }}</div>
</div>
</van-button>

View File

@ -76,23 +76,23 @@ watch(()=>props.show,(newValue)=>{
<div>
<x-popup :show="show" @update:show="close">
<template #title>
<div class="text-#000 text-16px">拍品列表</div>
<div class="text-#939393 text-16px ml-14px">{{ pageRef.itemCount }}个拍品</div>
<div class="text-#000 text-16px">{{ $t('home.tab1')}}</div>
<div class="text-#939393 text-16px ml-14px">{{ $t('home.total') }}{{ pageRef.itemCount }}{{ $t('home.lots_num') }}</div>
</template>
<div>
<van-pull-refresh
v-model="localState.refreshing"
success-text="刷新成功"
:success-text="$t('home.refresh_show')"
:success-duration="700"
@refresh="onRefresh"
>
<template #success>
<van-icon name="success" /> <span>刷新成功</span>
<van-icon name="success" /> <span>{{ $t('home.refresh_show') }}</span>
</template>
<van-list
v-model:loading="storeLoading"
:finished="localState.finished"
finished-text="没有更多了"
:finished-text="$t('home.finished_text')"
@load="loadMore"
>
@ -113,14 +113,14 @@ watch(()=>props.show,(newValue)=>{
loading="lazy"
/>
<div class="w-45px h-17px bg-#2B53AC text-12px line-height-none flex justify-center items-center absolute top-2px left-2px text-#fff">LOT{{item.index}}</div>
<div v-if="auctionData.artwork.index===item?.index" class="w-80px h-20px bg-#B58047 flex line-height-none justify-center items-center text-#fff text-12px bottom-0 absolute blink">投屏中</div>
<div v-if="auctionData.artwork.index===item?.index" class="w-80px h-20px bg-#B58047 flex line-height-none justify-center items-center text-#fff text-12px bottom-0 absolute blink">{{ $t('live_room.cast') }}</div>
</div>
<div>
<div class="ellipsis line-height-20px text-16px font-600 min-h-40px">
{{ item.artworkTitle }}
</div>
<div class="text-14px text-#575757">起拍价RMB 1,000</div>
<div class="text-14px text-#B58047">成交价等待更新</div>
<div class="text-14px text-#575757">{{ $t('home.start_price') }}RMB 1,000</div>
<div class="text-14px text-#B58047">{{ $t('home.close_price') }}{{ $t('live_room.wait_update') }}</div>
</div>
</div>
</van-list>

View File

@ -11,6 +11,7 @@ import {goodStore} from "@/stores/goods/index.js"
import {message} from "~/components/x-message/useMessage.js"
import { showDialog } from 'vant';
import {artworkBuy} from "@/api/goods/index.js"
import {useI18n} from 'vue-i18n'
const player = ref(null)
const {quoteStatus, show, playerId, show1, auctionData, getSocketData, getLiveLink,fullLive} = liveStore()
const isPlayerReady = ref(false)
@ -49,7 +50,7 @@ const initializePlayer = async () => {
player.value.on('error', handlePlayerError)
} catch (error) {
showDialog({
message: '直播内容获取失败,是否刷新页面重新获取',
message: useI18n().t('live_room.error_mess'),
showCancelButton:true
}).then(() => {
location.reload()
@ -82,12 +83,12 @@ const goBuy = async () => {
buyMoney: String(auctionData.value?.nowAuctionPrice?.nextPrice ?? 0)
})
if (res.status === 0) {
message.success('出价成功')
message.success(useI18n().t('live_room.success_mess'))
}
}
const tipOpen = () => {
message.warning('出价状态未开启')
message.warning(useI18n().t('live_room.warn_mess'))
}
const updateShow=()=>{
@ -103,25 +104,25 @@ const updateShow=()=>{
<div class="absolute left-1/2 transform -translate-x-1/2 flex flex-col items-center"
style="bottom:calc(var(--safe-area-inset-bottom) + 26px)">
<div class="text-16px text-#FFB25F font-600">
当前价{{ auctionData?.nowAuctionPrice?.currency }}
{{ $t('live_room.now_price') }}{{ auctionData?.nowAuctionPrice?.currency }}
<van-rolling-text class="my-rolling-text" :start-num="0" :duration="0.5"
:target-num="auctionData?.nowAuctionPrice?.nowPrice??0" direction="up"/>
</div>
<div class="text-16px text-#fff font-600">
下口价{{ auctionData?.nowAuctionPrice?.currency }}
{{ $t('live_room.lower_price') }}{{ auctionData?.nowAuctionPrice?.currency }}
<van-rolling-text class="my-rolling-text1" :start-num="0" :duration="0.5"
:target-num="auctionData?.nowAuctionPrice?.nextPrice??0" direction="up"/>
</div>
<div v-if="quoteStatus" class="mt-10px mb-10px">
<van-button @click="goBuy" color="#FFB25F" class="w-344px !h-[40px]">
<div>{{
`确认出价 ${auctionData?.nowAuctionPrice?.currency} ${auctionData?.nowAuctionPrice?.nextPrice ?? 0}`
$t('live_room.confirm')` ${auctionData?.nowAuctionPrice?.currency} ${auctionData?.nowAuctionPrice?.nextPrice ?? 0}`
}}</div>
</van-button>
</div>
<div v-else class="mt-10px mb-10px">
<van-button @click="tipOpen" color="#D6D6D8" class="w-344px !h-[40px]" v-if="!quoteStatus">
<div class="text-#7D7D7F text-14px">点击"开启出价"即刻参与竞拍</div>
<div class="text-#7D7D7F text-14px">{{ $t('live_room.button') }}</div>
</van-button>
</div>
@ -135,7 +136,7 @@ const updateShow=()=>{
class="w-344px h-31px rounded-4px absolute top-9px bg-[#151824]/45 backdrop-blur-[10px] backdrop-saturate-[180%] left-1/2 transform translate-x--1/2 flex text-#fff text-14px items-center px-12px line-height-none">
<div class="mr-11px whitespace-nowrap">LOT{{ auctionData.artwork.index }}</div>
<div class="mr-10px truncate">{{ auctionData.artwork.name }}</div>
<div class="whitespace-nowrap">开始拍卖</div>
<div class="whitespace-nowrap">{{ $t('live_room.start') }}</div>
</div>
</div>
</transition>

View File

@ -103,7 +103,7 @@ const getCode =async () => {
vanSwipeRef.value?.swipeTo(pane.value)
showKeyboard.value=true
startCountdown();*/
}
const goBack = () => {
code.value = ''

View File

@ -81,14 +81,14 @@ const onRefresh = async () => {
</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 class="text-#000 text-16px border-b-3 border-b-#2B53AC h-36px">{{$t('home.my_lots')}}</div>
</div>
<van-pull-refresh v-model="localState.refreshing"
success-text="刷新成功"
:success-text="$t('home.refresh_show')"
:success-duration="700"
@refresh="onRefresh">
<van-list
finished-text="没有更多了"
:finished-text="$t('home.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>
@ -100,11 +100,11 @@ const onRefresh = async () => {
<div class="text-#000 text-16px ellipsis line-height-21px">{{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 class="text-#575757 text-14px line-height-none mb-5px">{{$t('home.start_price')}}RMB 1,000</div>
<div class="text-#B58047 text-14px line-height-none">{{$t('home.close_price')}}RMB 10,000</div>
</div>
<div v-if="[1,3,4].includes(item1.status)" @click.stop="goPay">
<van-button class="w-73px !h-30px" type="primary"><span class="text-12px">去支付</span></van-button>
<van-button class="w-73px !h-30px" type="primary"><span class="text-12px">{{$t('art_detail_page.button')}}</span></van-button>
</div>
</div>
</div>

View File

@ -15,45 +15,45 @@ const {userInfo}= authStore()
<div class="text-#1A1A1A text-16px">
<template v-if="type===0">
<div class="flex mb-20px">
<div class="mr-10px">姓名</div>
<div class="mr-10px">{{$t('realAuth.name')}}</div>
<div>{{userInfo.realName}}</div>
</div>
<div class="flex mb-20px">
<div class="mr-10px">性别</div>
<div class="mr-10px">{{$t('realAuth.gender')}}</div>
<div>{{userInfo.sex}}</div>
</div>
<div class="flex mb-20px">
<div class="mr-10px">出生日期</div>
<div class="mr-10px">{{$t('realAuth.birthday')}}</div>
<div>{{userInfo.birthDate}}</div>
</div>
<div class="flex">
<div class="mr-10px">身份证号</div>
<div class="mr-10px">{{$t('realAuth.idCard')}}</div>
<div>{{userInfo.idNum}}</div>
</div>
</template>
<template v-if="type===1">
<div class="flex mb-20px" >
<div class="mr-10px">姓名</div>
<div class="mr-10px">{{$t('realAuth.name')}}</div>
<div>{{userInfo.realName}}</div>
</div>
<div class="flex mb-20px">
<div class="mr-10px">性别</div>
<div class="mr-10px">{{$t('realAuth.gender')}}</div>
<div>{{userInfo.sex}}</div>
</div>
<div class="flex mb-20px">
<div class="mr-10px">出生日期</div>
<div class="mr-10px">{{$t('realAuth.birthday')}}</div>
<div>{{userInfo.birthDate}}</div>
</div>
<div class="flex">
<div class="mr-10px">家庭住址</div>
<div class="mr-10px">{{$t('realAuth.adress')}}</div>
<div>{{userInfo.idNum}}</div>
</div>
<div class="flex">
<div class="mr-10px">所属银行</div>
<div class="mr-10px">{{$t('realAuth.bank')}}</div>
<div>{{userInfo.idNum}}</div>
</div>
<div class="flex">
<div class="mr-10px">银行卡号码</div>
<div class="mr-10px">{{$t('realAuth.bankCard')}}</div>
<div>{{userInfo.idNum}}</div>
</div>
</template>

View File

@ -62,11 +62,11 @@ const confirm=async ()=>{
const res=await userUpdate(thatForm)
if (res.status===0){
userInfo.value=res.data
message.success('提交成功')
message.success(t('realAuth.success_mess'))
statusCode.value=1
}
}else {
message.error('请填写身份证相关信息')
message.error(t('realAuth.cnTabDesc'))
}
}
@ -142,7 +142,7 @@ definePageMeta({
</van-button>
</div>
<div v-else class="mt-auto pb-94px">
<van-button color="#E9F1F8" @click="goHome" style="color: #2B53AC;font-weight: 600" block>去首页</van-button>
<van-button color="#E9F1F8" @click="goHome" style="color: #2B53AC;font-weight: 600" block>{{ $t('home.go_home')}}</van-button>
</div>
<van-popup v-model:show="showPicker" destroy-on-close position="bottom">
<van-picker :columns="columns" @confirm="onConfirm" @cancel="showPicker = false" />

View File

@ -28,13 +28,13 @@ const adress=ref('')
<div
class="w-[100vw] bg-[url('@/static/images/asdfsdd.png')] h-screen-nav bg-cover pt-77px flex-grow-1 flex flex-col ">
<div class="text-16px text-#191919 font-bold mb-40px px-34px">
请填写个人相关信息
{{$t(personal.title)}}
</div>
<div class="grow-1 px-34px">
<van-field type="tel" :label-width="161" label="文本" class="mb-10px" placeholder="请输入手机号">
<van-field type="tel" :label-width="161" :label="$t(personal.text)" class="mb-10px" :placeholder="$t('login.phonePlaceholder')">
<template #label>
<div class="flex">
<div class="mr-41px whitespace-nowrap">手机号</div>
<div class="mr-41px whitespace-nowrap">{{$t('profile.phone')}}</div>
<div @click="goCountryRegion">
<span class="mr-13px">+ 86</span>
<van-icon name="arrow-down" class="text-#777777"/>
@ -42,15 +42,15 @@ const adress=ref('')
</div>
</template>
</van-field>
<van-field label="姓名" class="mb-10px" placeholder="请输入姓名"/>
<x-van-select label="性别" :columns="columns"/>
<x-van-date label="出生日期"/>
<van-field v-model="adress" label="家庭住址" class="mb-10px" placeholder="请输入家庭住址"/>
<van-field label="所属银行" class="mb-10px" placeholder="请输入所属银行"/>
<van-field label="银行卡号码" class="mb-10px" placeholder="请输入银行卡号码"/>
<van-field :label="$t('profile.name')" class="mb-10px" :placeholder="$t('realAuth.namePlaceholder')"/>
<x-van-select :label="$t('realAuth.gender')" :columns="columns"/>
<x-van-date :label="$t('realAuth.birthday')"/>
<van-field v-model="adress" :label="$t('realAuth.adress')" class="mb-10px" :placeholder="$t('realAuth.adressPlaceholder')"/>
<van-field :label="$t('realAuth.bank')" class="mb-10px" :placeholder="$t('realAuth.bankPlaceholder')"/>
<van-field :label="$t('realAuth.bankCard')" class="mb-10px" :placeholder="$t('realAuth.bankCardPlaceholder')"/>
</div>
<div class="h-81px bg-#fff flex justify-center pt-7px border-t">
<van-button color="#2B53AC" class="w-213px van-btn-h-38px">下一步</van-button>
<van-button color="#2B53AC" class="w-213px van-btn-h-38px">{{$t(personal.next)}}</van-button>
</div>
</div>
</template>

View File

@ -68,6 +68,54 @@
"bankCard": "银行卡号码",
"bankCardPlaceholder": "请输入银行卡号码",
"cancel": "取消",
"confirm": "确定"
"confirm": "确定",
"success_mess": "提交成功"
},
"art_detail_page": {
"button": "去支付",
"prompt_title": "恭喜您",
"prompt_desc": "竞拍成功"
},
"home": {
"tab1": "拍品列表",
"tab2": "拍卖说明",
"lot_detail": "拍品详情",
"refresh_show": "刷新成功",
"finished_text": "没有更多了",
"start_price": "起拍价",
"close_price": "成交价",
"my_lots": "我的拍品",
"go_home": "去首页"
},
"live_room": {
"error_mess": "直播内容获取失败,是否刷新页面重新获取",
"success_mess": "出价成功",
"warn_mess": "出价状态未开启",
"now_price": "当前价",
"lower_price": "下口价",
"confirm": "确认出价",
"button": "点击'开启出价',即刻参与竞拍",
"start": "开始拍卖",
"head":"领先",
"out": "出局",
"success": "成交",
"next_lot": "即将开始下一个拍品",
"spot": "现场竞价",
"network": "网络竞价",
"me": "我",
"all_pay": "支付全部",
"part_pay": "支付部分",
"lots": "拍品",
"colse_bid": "关闭出价",
"start_bid": "开启出价",
"total": "共",
"lots_num": "个拍品",
"cast": "投屏中",
"wait_update": "等待更新"
},
"personal": {
"title": "请填写个人相关信息",
"text":"文本",
"next": "下一步"
}
}