Commit 6f7a565b by lijiabin

【需求 20520】 feat: 所有活动都不开放仓库

parent cf3e0b43
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
</RewardButton> </RewardButton>
<div <div
v-if="!isWareHouse"
class="group flex items-center cursor-pointer px-2 py-1 sm:px-3 sm:py-2 rounded-lg transition-all duration-200 hover:shadow-lg hover:bg-white/60" class="group flex items-center cursor-pointer px-2 py-1 sm:px-3 sm:py-2 rounded-lg transition-all duration-200 hover:shadow-lg hover:bg-white/60"
@click="router.push('/auction')" @click="router.push('/auction')"
> >
...@@ -175,6 +176,7 @@ const userStore = useUserStore() ...@@ -175,6 +176,7 @@ const userStore = useUserStore()
const activityStore = useActivityStore() const activityStore = useActivityStore()
const { userInfo } = storeToRefs(userStore) const { userInfo } = storeToRefs(userStore)
const isWareHouse = userInfo.value.address.includes('仓库')
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()
......
...@@ -298,73 +298,87 @@ ...@@ -298,73 +298,87 @@
</transition> </transition>
</div> </div>
</div> </div>
<!-- 每日抽奖 --> <template v-if="!isWareHouse">
<div v-if="lotteryPrizesDetail" class="lottery-container common-box rounded-lg bg-#FFF7E6"> <!-- 每日抽奖 -->
<div class="flex items-center gap-2 mb-3">
<div class="w-1 h-4 bg-gradient-to-b from-amber-400 to-orange-400 rounded-full"></div>
<h1 class="text-sm sm:text-base font-bold">每日抽奖</h1>
</div>
<div <div
class="flex items-center gap-3 min-w-0 p-3 rounded-lg bg-white/60 border border-amber-100" v-if="lotteryPrizesDetail"
class="lottery-container common-box rounded-lg bg-#FFF7E6"
> >
<el-image <div class="flex items-center gap-2 mb-3">
class="w-18 h-18 rounded-lg flex-shrink-0 shadow-sm" <div class="w-1 h-4 bg-gradient-to-b from-amber-400 to-orange-400 rounded-full"></div>
:src="lotteryPrizesDetail.prizesImg" <h1 class="text-sm sm:text-base font-bold">每日抽奖</h1>
fit="cover"
:preview-src-list="[lotteryPrizesDetail.prizesImg]"
/>
<div class="flex flex-col min-w-0 gap-1">
<div class="font-semibold text-sm truncate">
{{ lotteryPrizesDetail.prizesName }}
</div>
<div class="text-12px text-gray-500 flex items-center gap-1">
<svg-icon name="small_coin" size="14" />
<span>{{ lotteryPrizesDetail.registrationFee }} YA币</span>
</div>
<div class="text-12px text-gray-400">今日{{ lotteryPrizesDetail.number }}人参与</div>
</div> </div>
</div>
<div v-if="lotteryPrizesDetail.winner" class="text-xs text-amber-600 mt-2 px-1 truncate"> <div
昨日中奖:{{ lotteryPrizesDetail.winner }} class="flex items-center gap-3 min-w-0 p-3 rounded-lg bg-white/60 border border-amber-100"
</div>
<div class="flex justify-center items-center mt-3">
<el-button
v-if="!lotteryPrizesDetail.isJoin"
class="w-full! border-none! transition-all duration-200 text-xs sm:text-sm bg-[linear-gradient(to_right,#FFD06A_0%,#FFB143_100%)]! text-#333! shadow-[0px_1px_8px_0_rgba(255,173,91,0.25)] hover:-translate-y-0.5 hover:shadow-[0px_4px_10px_0_rgba(255,173,91,0.4)] active:translate-y-0"
type="primary"
@click="handleLottery"
> >
<svg-icon name="daily_lottery" size="18" class="mr-1" /> <el-image
参与抽奖 class="w-18 h-18 rounded-lg flex-shrink-0 shadow-sm"
</el-button> :src="lotteryPrizesDetail.prizesImg"
fit="cover"
:preview-src-list="[lotteryPrizesDetail.prizesImg]"
/>
<div class="flex flex-col min-w-0 gap-1">
<div class="font-semibold text-sm truncate">
{{ lotteryPrizesDetail.prizesName }}
</div>
<div class="text-12px text-gray-500 flex items-center gap-1">
<svg-icon name="small_coin" size="14" />
<span>{{ lotteryPrizesDetail.registrationFee }} YA币</span>
</div>
<div class="text-12px text-gray-400">
今日{{ lotteryPrizesDetail.number }}人参与
</div>
</div>
</div>
<div <div
v-else v-if="lotteryPrizesDetail.winner"
class="w-full text-center py-2 rounded-md bg-amber-50 border border-amber-200 border-dashed text-amber-400 text-xs sm:text-sm" class="text-xs text-amber-600 mt-2 px-1 truncate"
> >
✓ 今日已参与 昨日中奖:{{ lotteryPrizesDetail.winner }}
</div> </div>
</div>
</div>
<!-- 大转盘 --> <div class="flex justify-center items-center mt-3">
<div <el-button
v-if="wheelConfig?.isActivityActive" v-if="!lotteryPrizesDetail.isJoin"
class="lottery-container common-box rounded-lg bg-#F5F0FF" class="w-full! border-none! transition-all duration-200 text-xs sm:text-sm bg-[linear-gradient(to_right,#FFD06A_0%,#FFB143_100%)]! text-#333! shadow-[0px_1px_8px_0_rgba(255,173,91,0.25)] hover:-translate-y-0.5 hover:shadow-[0px_4px_10px_0_rgba(255,173,91,0.4)] active:translate-y-0"
> type="primary"
<div class="flex items-center gap-2 xl:mb-4"> @click="handleLottery"
<div class="w-1 h-4 bg-gradient-to-b from-violet-500 to-purple-500 rounded-full"></div> >
<h1 class="text-sm sm:text-base font-bold">大转盘</h1> <svg-icon name="daily_lottery" size="18" class="mr-1" />
</div> 参与抽奖
<div class="flex justify-center"> </el-button>
<LuckyWheelContainer :wheelConfig="wheelConfig" /> <div
v-else
class="w-full text-center py-2 rounded-md bg-amber-50 border border-amber-200 border-dashed text-amber-400 text-xs sm:text-sm"
>
✓ 今日已参与
</div>
</div>
</div> </div>
<div class="flex items-center justify-center text-sm text-gray-500 xl:mt-4 px-1 truncate">
每次抽奖{{ wheelConfig?.costYaCoin }} YA币 <!-- 大转盘 -->
<div
v-if="wheelConfig?.isActivityActive"
class="lottery-container common-box rounded-lg bg-#F5F0FF"
>
<div class="flex items-center gap-2 xl:mb-4">
<div
class="w-1 h-4 bg-gradient-to-b from-violet-500 to-purple-500 rounded-full"
></div>
<h1 class="text-sm sm:text-base font-bold">大转盘</h1>
</div>
<div class="flex justify-center">
<LuckyWheelContainer :wheelConfig="wheelConfig" />
</div>
<div
class="flex items-center justify-center text-sm text-gray-500 xl:mt-4 px-1 truncate"
>
每次抽奖{{ wheelConfig?.costYaCoin }} YA币
</div>
</div> </div>
</div> </template>
</div> </div>
</div> </div>
...@@ -410,8 +424,11 @@ import { useBreakpoints, breakpointsTailwind } from '@vueuse/core' ...@@ -410,8 +424,11 @@ import { useBreakpoints, breakpointsTailwind } from '@vueuse/core'
import LuckyWheelContainer from '@/components/common/LuckyWheelContainer/index.vue' import LuckyWheelContainer from '@/components/common/LuckyWheelContainer/index.vue'
import { RewardButtonEnum } from '@/constants' import { RewardButtonEnum } from '@/constants'
import RewardButton from '@/components/common/RewardButton/index.vue' import RewardButton from '@/components/common/RewardButton/index.vue'
import { useTourStore } from '@/stores' import { useTourStore, useUserStore } from '@/stores'
const userStore = useUserStore()
const { userInfo } = storeToRefs(userStore)
const isWareHouse = userInfo.value.address.includes('仓库')
const tourStore = useTourStore() const tourStore = useTourStore()
const { shouldShowAskTabTour } = storeToRefs(tourStore) const { shouldShowAskTabTour } = storeToRefs(tourStore)
const breakpoints = useBreakpoints(breakpointsTailwind) const breakpoints = useBreakpoints(breakpointsTailwind)
......
...@@ -88,161 +88,169 @@ const EmptyComp = () => ( ...@@ -88,161 +88,169 @@ const EmptyComp = () => (
</div> </div>
) )
const activityTypeListOptions = [ const activityTypeListOptions: {
{ label: string
label: '限时竞拍', value: ActivityTypeEnum
value: ActivityTypeEnum.AUCTION, component: () => VNode
component: () => ( refresh: () => void
<> }[] = []
<div class="flex justify-end">
<p class="text-gray-500 text-sm mb-1 flex items-center gap-1"> if (!isWareHouse) {
<el-icon> activityTypeListOptions.push(
<IEpInfoFilled /> ...[
</el-icon> {
页面仅展示竞拍成功的记录 label: '限时竞拍',
</p> value: ActivityTypeEnum.AUCTION,
</div> component: () => (
{!list1.value.length ? (
<EmptyComp />
) : (
<> <>
<div class="space-y-4"> <div class="flex justify-end">
<el-table height="500" data={list1.value} stripe border loading={loading1.value}> <p class="text-gray-500 text-sm mb-1 flex items-center gap-1">
<el-table-column prop="name" label="名称" /> <el-icon>
<el-table-column prop="startingPrice" label="起拍价" /> <IEpInfoFilled />
<el-table-column prop="bidPrice" label="支出YA币" /> </el-icon>
</el-table> 页面仅展示竞拍成功的记录
</div> </p>
<div class="flex items-center justify-end px-6 py-4 border-t border-gray-200">
<div class="pagination-wrapper bg-white rounded-lg shadow-sm border border-gray-100 p-2">
<el-pagination
v-model:current-page={searchParams1.value.current}
v-model:page-size={searchParams1.value.size}
onSizeChange={changePageSize1}
onCurrentChange={goToPage1}
page-sizes={[10, 20, 30, 40]}
layout="prev, pager, next, jumper, total"
total={total1.value}
class="custom-pagination"
/>
</div>
</div> </div>
{!list1.value.length ? (
<EmptyComp />
) : (
<>
<div class="space-y-4">
<el-table height="500" data={list1.value} stripe border loading={loading1.value}>
<el-table-column prop="name" label="名称" />
<el-table-column prop="startingPrice" label="起拍价" />
<el-table-column prop="bidPrice" label="支出YA币" />
</el-table>
</div>
<div class="flex items-center justify-end px-6 py-4 border-t border-gray-200">
<div class="pagination-wrapper bg-white rounded-lg shadow-sm border border-gray-100 p-2">
<el-pagination
v-model:current-page={searchParams1.value.current}
v-model:page-size={searchParams1.value.size}
onSizeChange={changePageSize1}
onCurrentChange={goToPage1}
page-sizes={[10, 20, 30, 40]}
layout="prev, pager, next, jumper, total"
total={total1.value}
class="custom-pagination"
/>
</div>
</div>
</>
)}
</> </>
)} ),
</> refresh: () => refresh1(),
), },
refresh: () => refresh1(), {
}, label: '每日抽奖',
{ value: ActivityTypeEnum.DAILY_LOTTERY,
label: '每日抽奖', component: () => (
value: ActivityTypeEnum.DAILY_LOTTERY,
component: () => (
<>
{!list2.value.length ? (
<EmptyComp />
) : (
<> <>
<div class="space-y-4"> {!list2.value.length ? (
<el-table height="500" data={list2.value} stripe border loading={loading2.value}> <EmptyComp />
<el-table-column prop="prizeName" label="名称" /> ) : (
<el-table-column prop="activityDateRange" label="参与时间" /> <>
<el-table-column prop="isLotteryDone" label="是否开奖"> <div class="space-y-4">
{({ row }: { row: UserLotteryRecordItemDto }) => ( <el-table height="500" data={list2.value} stripe border loading={loading2.value}>
<div>{row.isLotteryDone ? <span></span> : <span>否</span>}</div> <el-table-column prop="prizeName" label="名称" />
)} <el-table-column prop="activityDateRange" label="参与时间" />
</el-table-column> <el-table-column prop="isLotteryDone" label="是否开奖">
<el-table-column prop="isWin" label="是否中奖"> {({ row }: { row: UserLotteryRecordItemDto }) => (
{({ row }: { row: UserLotteryRecordItemDto }) => ( <div>{row.isLotteryDone ? <span></span> : <span>否</span>}</div>
<div>
{row.isLotteryDone ? (
row.isWin ? (
<span class="text-green-500"></span>
) : (
<span class="text-red-500"></span>
)
) : (
'暂未开奖'
)} )}
</div> </el-table-column>
)} <el-table-column prop="isWin" label="是否中奖">
</el-table-column> {({ row }: { row: UserLotteryRecordItemDto }) => (
</el-table> <div>
</div> {row.isLotteryDone ? (
<div class="flex items-center justify-end px-6 py-4 border-t border-gray-200"> row.isWin ? (
<div class="pagination-wrapper bg-white rounded-lg shadow-sm border border-gray-100 p-2"> <span class="text-green-500"></span>
<el-pagination ) : (
v-model:current-page={searchParams2.value.current} <span class="text-red-500"></span>
v-model:page-size={searchParams2.value.size} )
onSizeChange={changePageSize2} ) : (
onCurrentChange={goToPage2} '暂未开奖'
page-sizes={[10, 20, 30, 40]} )}
layout="prev, pager, next, jumper, total" </div>
total={total2.value} )}
class="custom-pagination" </el-table-column>
/> </el-table>
</div> </div>
</div> <div class="flex items-center justify-end px-6 py-4 border-t border-gray-200">
<div class="pagination-wrapper bg-white rounded-lg shadow-sm border border-gray-100 p-2">
<el-pagination
v-model:current-page={searchParams2.value.current}
v-model:page-size={searchParams2.value.size}
onSizeChange={changePageSize2}
onCurrentChange={goToPage2}
page-sizes={[10, 20, 30, 40]}
layout="prev, pager, next, jumper, total"
total={total2.value}
class="custom-pagination"
/>
</div>
</div>
</>
)}
</> </>
)} ),
</> refresh: () => refresh2(),
), },
refresh: () => refresh2(), {
}, label: '大转盘',
] value: ActivityTypeEnum.WHEEL,
component: () => (
if (!isWareHouse) {
activityTypeListOptions.push({
label: '大转盘',
value: ActivityTypeEnum.WHEEL,
component: () => (
<>
{!list3.value.length ? (
<EmptyComp />
) : (
<> <>
<div class="space-y-4"> {!list3.value.length ? (
<el-table height="500" data={list3.value} stripe border loading={loading3.value}> <EmptyComp />
<el-table-column prop="prizeName" label="名称"> ) : (
{({ row }: { row: UserWheelRecordItemDto }) => ( <>
<div>{row.prizeName ?? `谢谢参与(${row.blessingText})`}</div> <div class="space-y-4">
)} <el-table height="500" data={list3.value} stripe border loading={loading3.value}>
</el-table-column> <el-table-column prop="prizeName" label="名称">
<el-table-column prop="createdAtStr" label="参与时间" /> {({ row }: { row: UserWheelRecordItemDto }) => (
<el-table-column prop="isLotteryDone" label="是否中奖"> <div>{row.prizeName ?? `谢谢参与(${row.blessingText})`}</div>
{({ row }: { row: UserWheelRecordItemDto }) => (
<div>
{row.isWin ? (
<span class="text-green-500"></span>
) : (
<span class="text-red-500"></span>
)} )}
</div> </el-table-column>
)} <el-table-column prop="createdAtStr" label="参与时间" />
</el-table-column> <el-table-column prop="isLotteryDone" label="是否中奖">
</el-table> {({ row }: { row: UserWheelRecordItemDto }) => (
</div> <div>
<div class="flex items-center justify-end px-6 py-4 border-t border-gray-200"> {row.isWin ? (
<div class="pagination-wrapper bg-white rounded-lg shadow-sm border border-gray-100 p-2"> <span class="text-green-500"></span>
<el-pagination ) : (
v-model:current-page={searchParams3.value.current} <span class="text-red-500"></span>
v-model:page-size={searchParams3.value.size} )}
onSizeChange={changePageSize3} </div>
onCurrentChange={goToPage3} )}
page-sizes={[10, 20, 30, 40]} </el-table-column>
layout="prev, pager, next, jumper, total" </el-table>
total={total3.value} </div>
class="custom-pagination" <div class="flex items-center justify-end px-6 py-4 border-t border-gray-200">
/> <div class="pagination-wrapper bg-white rounded-lg shadow-sm border border-gray-100 p-2">
</div> <el-pagination
</div> v-model:current-page={searchParams3.value.current}
v-model:page-size={searchParams3.value.size}
onSizeChange={changePageSize3}
onCurrentChange={goToPage3}
page-sizes={[10, 20, 30, 40]}
layout="prev, pager, next, jumper, total"
total={total3.value}
class="custom-pagination"
/>
</div>
</div>
</>
)}
</> </>
)} ),
</> refresh: () => refresh3(),
), },
refresh: () => refresh3(), ],
}) )
} }
const tab = ref(activityTypeListOptions[0]!.value) const tab = ref(activityTypeListOptions[0]?.value || ActivityTypeEnum.AUCTION)
const toggleTab = () => { const toggleTab = () => {
refresh() refresh()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment