Compare commits
No commits in common. "89a36520038b799875a684b21cc75eb5dccccba6" and "f37f283f096c8979d004d164e144da6502e641b8" have entirely different histories.
89a3652003
...
f37f283f09
55
app/api/http.ts
Normal file
55
app/api/http.ts
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import type { $Fetch } from 'ofetch'
|
||||||
|
|
||||||
|
import { useRuntimeConfig } from '#app'
|
||||||
|
import { ofetch } from 'ofetch'
|
||||||
|
|
||||||
|
type HttpStatusErrorHandler = (message: string, statusCode: number) => void
|
||||||
|
let httpStatusErrorHandler: HttpStatusErrorHandler
|
||||||
|
|
||||||
|
let http: $Fetch
|
||||||
|
|
||||||
|
export function setupHttp() {
|
||||||
|
if (http)
|
||||||
|
return http
|
||||||
|
|
||||||
|
const config = useRuntimeConfig()
|
||||||
|
const baseURL = config.public.apiBase as string
|
||||||
|
|
||||||
|
http = ofetch.create({
|
||||||
|
baseURL,
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
async onRequest({ options }) {
|
||||||
|
const token = localStorage.getItem('token')
|
||||||
|
|
||||||
|
options.headers = {
|
||||||
|
...options.headers,
|
||||||
|
...(token && { Authorization: `Bearer ${token}` }),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async onResponseError({ response }) {
|
||||||
|
const { message } = response._data
|
||||||
|
if (Array.isArray(message)) {
|
||||||
|
message.forEach((item) => {
|
||||||
|
httpStatusErrorHandler?.(item, response.status)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
httpStatusErrorHandler?.(message, response.status)
|
||||||
|
}
|
||||||
|
return Promise.reject(response._data)
|
||||||
|
},
|
||||||
|
retry: 3,
|
||||||
|
retryDelay: 1000,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function injectHttpStatusErrorHandler(handler: HttpStatusErrorHandler) {
|
||||||
|
httpStatusErrorHandler = handler
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getHttp() {
|
||||||
|
if (!http) {
|
||||||
|
throw new Error('HTTP client not initialized. Call setupHttp first.')
|
||||||
|
}
|
||||||
|
return http
|
||||||
|
}
|
8
app/api/prose.ts
Normal file
8
app/api/prose.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { getHttp } from './http'
|
||||||
|
|
||||||
|
export async function getProse() {
|
||||||
|
const http = getHttp()
|
||||||
|
return await http('/api/prose', {
|
||||||
|
method: 'GET',
|
||||||
|
})
|
||||||
|
}
|
@ -22,6 +22,7 @@ const addItem = () => {
|
|||||||
d: 'RMB5,500',
|
d: 'RMB5,500',
|
||||||
e: ''
|
e: ''
|
||||||
});
|
});
|
||||||
|
// 确保 DOM 更新后再滚动
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
scrollToBottom();
|
scrollToBottom();
|
||||||
});
|
});
|
||||||
|
@ -1,55 +0,0 @@
|
|||||||
<script setup>
|
|
||||||
const props = defineProps({
|
|
||||||
show: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
price: {
|
|
||||||
type: Number,
|
|
||||||
default: 0
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const emit = defineEmits(['update:show'])
|
|
||||||
const payStatus=ref(0)
|
|
||||||
const changePayStatus=()=>{
|
|
||||||
payStatus.value=payStatus.value===0?1:0
|
|
||||||
}
|
|
||||||
const close=()=>{
|
|
||||||
emit('update:show',false)
|
|
||||||
}
|
|
||||||
const confirm=()=>{
|
|
||||||
emit('update:show',false)
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
<van-dialog :show="show" show-cancel-button @close="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 ">RMB 5,000</div>
|
|
||||||
</template>
|
|
||||||
<template v-if="payStatus===1">
|
|
||||||
<div class="text-#000 text-16px font-600 ">支付部分</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>
|
|
||||||
</van-dialog>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
:deep(.van-hairline--top.van-dialog__footer){
|
|
||||||
&>.van-button{
|
|
||||||
border-top: 1px solid #E7E7E7;
|
|
||||||
&.van-dialog__cancel{
|
|
||||||
border-right: 1px solid #E7E7E7;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,44 +0,0 @@
|
|||||||
<script setup>
|
|
||||||
import successImg from '@/static/images/zu5554@2x.png'
|
|
||||||
import errorImg from '@/static/images/zu5561@2x.png'
|
|
||||||
const props = defineProps({
|
|
||||||
show: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
type: {
|
|
||||||
type: String,
|
|
||||||
default: 'success'
|
|
||||||
},
|
|
||||||
price: {
|
|
||||||
type: Number,
|
|
||||||
default: 0
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const emit = defineEmits(['cancel','update:show'])
|
|
||||||
const cancel= () => {
|
|
||||||
emit('update:show', false)
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
<van-dialog :show="show" show-cancel-button :show-confirm-button="false" cancelButtonText="返回" 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>
|
|
||||||
</div>
|
|
||||||
</van-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
:deep(.van-dialog) {
|
|
||||||
overflow: visible!important;
|
|
||||||
}
|
|
||||||
:deep(.van-hairline--top.van-dialog__footer){
|
|
||||||
border-top: 1px solid #E7E7E7;
|
|
||||||
border-bottom-left-radius:8px ;
|
|
||||||
border-bottom-right-radius:8px ;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -16,8 +16,8 @@ const handleButtonRelease = () => {
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
:class="[
|
:class="[
|
||||||
'transition-all duration-200',
|
'bg-white transition-all duration-200',
|
||||||
isButtonActive ? 'scale-95' : ''
|
isButtonActive ? 'scale-95 bg-gray-200' : ''
|
||||||
]"
|
]"
|
||||||
@touchstart="handleButtonPress"
|
@touchstart="handleButtonPress"
|
||||||
@touchend="handleButtonRelease"
|
@touchend="handleButtonRelease"
|
||||||
|
@ -4,7 +4,7 @@ import lockClosed from "~/static/images/lockdfd@2x.png";
|
|||||||
import lockOpen from "~/static/images/lock4@2x.png";
|
import lockOpen from "~/static/images/lock4@2x.png";
|
||||||
import { liveStore } from "~/stores/live/index.js";
|
import { liveStore } from "~/stores/live/index.js";
|
||||||
import PressableButton from './PressableButton.vue'
|
import PressableButton from './PressableButton.vue'
|
||||||
const { quoteStatus, changeStatus,show,show1 } = liveStore();
|
const { quoteStatus, changeStatus,show } = liveStore();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -2,15 +2,13 @@
|
|||||||
import {ref, onMounted, onBeforeUnmount} from 'vue'
|
import {ref, onMounted, onBeforeUnmount} from 'vue'
|
||||||
import Aliplayer from 'aliyun-aliplayer'
|
import Aliplayer from 'aliyun-aliplayer'
|
||||||
import 'aliyun-aliplayer/build/skins/default/aliplayer-min.css'
|
import 'aliyun-aliplayer/build/skins/default/aliplayer-min.css'
|
||||||
|
import lock4 from '@/static/images/lock4@2x.png'
|
||||||
import sideButton from './components/sideButton/index.vue'
|
import sideButton from './components/sideButton/index.vue'
|
||||||
import broadcast from './components/broadcast/index.vue'
|
import broadcast from './components/broadcast/index.vue'
|
||||||
|
import lockdfd from '@/static/images/lockdfd@2x.png'
|
||||||
import {liveStore} from "~/stores/live/index.js";
|
import {liveStore} from "~/stores/live/index.js";
|
||||||
import paymentResults from './components/paymentResults/index.vue'
|
|
||||||
import paymentInput from './components/paymentInput/index.vue'
|
|
||||||
import PressableButton from './components/sideButton/PressableButton.vue'
|
|
||||||
|
|
||||||
const player = ref(null)
|
const player = ref(null)
|
||||||
const {quoteStatus, changeStatus, show, playerId, show1} = liveStore()
|
const {quoteStatus,changeStatus,show}= liveStore()
|
||||||
const isPlayerReady = ref(false)
|
const isPlayerReady = ref(false)
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
fullLive: {
|
fullLive: {
|
||||||
@ -18,15 +16,9 @@ const props = defineProps({
|
|||||||
default: true,
|
default: true,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
definePageMeta({
|
|
||||||
title: '主页',
|
|
||||||
i18n: 'login.title',
|
|
||||||
})
|
|
||||||
const config = useRuntimeConfig()
|
|
||||||
const playerConfig = {
|
const playerConfig = {
|
||||||
id: playerId.value,
|
id: 'J_prismPlayer',
|
||||||
source: config.public.NUXT_PUBLIC_PLAYER_SOURCE,
|
source: 'artc://live-pull-sh-01.szjixun.cn/live/live?auth_key=1736748343-0-0-feef65166e5cc62957c35b6e3eec82a1',
|
||||||
isLive: true,
|
isLive: true,
|
||||||
preload: true,
|
preload: true,
|
||||||
autoplayPolicy: {fallbackToMute: true},
|
autoplayPolicy: {fallbackToMute: true},
|
||||||
@ -74,7 +66,7 @@ const goPay = () => {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="relative h-full">
|
<div class="relative h-full">
|
||||||
<div :id="playerId" class="w-screen"
|
<div id="J_prismPlayer" class="w-screen"
|
||||||
:style="fullLive?'height: calc(100vh - var(--van-nav-bar-height))':'height:100%'"></div>
|
:style="fullLive?'height: calc(100vh - var(--van-nav-bar-height))':'height:100%'"></div>
|
||||||
<template v-if="fullLive">
|
<template v-if="fullLive">
|
||||||
<sideButton class="absolute top-196px right-0 z-999"></sideButton>
|
<sideButton class="absolute top-196px right-0 z-999"></sideButton>
|
||||||
@ -87,18 +79,22 @@ const goPay = () => {
|
|||||||
下口价:RMB
|
下口价:RMB
|
||||||
<van-rolling-text class="my-rolling-text1" :start-num="0" :target-num="3500" direction="up"/>
|
<van-rolling-text class="my-rolling-text1" :start-num="0" :target-num="3500" direction="up"/>
|
||||||
</div>
|
</div>
|
||||||
<PressableButton>
|
|
||||||
<div
|
<div
|
||||||
:class="`w-344px h-[40px] ${quoteStatus ? 'bg-#FFB25F' : 'bg-#D6D6D8'} rounded-4px ${quoteStatus ? 'text-#fff' : 'text-#7D7D7F'} text-14px flex justify-center items-center mt-10px mb-10px`">
|
:class="`w-344px h-[40px] ${quoteStatus ? 'bg-#FFB25F' : 'bg-#D6D6D8'} rounded-4px ${quoteStatus ? 'text-#fff' : 'text-#7D7D7F'} text-14px flex justify-center items-center mt-10px mb-10px`">
|
||||||
{{ quoteStatus ? '确认出价 RMB 3,000' : '点击"开启出价",即刻参与竞拍 ' }}
|
{{ quoteStatus ? '确认出价 RMB 3,000' : '点击"开启出价",即刻参与竞拍 ' }}
|
||||||
</div>
|
</div>
|
||||||
</PressableButton>
|
|
||||||
<broadcast></broadcast>
|
<broadcast></broadcast>
|
||||||
</div>
|
</div>
|
||||||
<paymentInput v-model:show="show"/>
|
<van-dialog v-model:show="show" show-cancel-button>
|
||||||
<div>
|
<div class="flex flex-col pt-18px pb-13px justify-between items-center h-144px">
|
||||||
|
<!-- <div class="text-#000 text-16px font-600 ">支付全部</div>
|
||||||
|
<div class="text-#000 text-16px ">RMB 5,000</div>-->
|
||||||
|
<div class="text-#000 text-16px font-600 ">支付部分</div>
|
||||||
|
<input class="w-272px h-48px bg-#F3F3F3 px-11px text-16px" type="text" placeholder="最多RMB5,000">
|
||||||
|
|
||||||
|
<div class="text-#2B53AC text-14px">支付部分</div>
|
||||||
</div>
|
</div>
|
||||||
<paymentResults v-model:show="show1" type="error"/>
|
</van-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -109,7 +105,6 @@ const goPay = () => {
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
.my-rolling-text {
|
.my-rolling-text {
|
||||||
--van-rolling-text-item-width: 10px;
|
--van-rolling-text-item-width: 10px;
|
||||||
--van-rolling-text-font-size: 16px;
|
--van-rolling-text-font-size: 16px;
|
||||||
|
@ -1,23 +1,17 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import {useRect} from '@vant/use';
|
import {useRect} from '@vant/use';
|
||||||
import LiveRoom from '@/pages/LiveRoom/index.client.vue';
|
import LiveRoom from '@/pages/LiveRoom/index.client.vue'
|
||||||
import itemDetail from '@/components/itemDetail/index.vue';
|
import itemDetail from '@/components/itemDetail/index.vue'
|
||||||
import { homeStore } from "@/stores/home/index.js";
|
import { homeStore } from "@/stores/home/index.js";
|
||||||
import Column from './components/Column/index.vue'
|
const { fullLive } = homeStore()
|
||||||
const {fullLive} = homeStore();
|
|
||||||
import { useFetch } from '#app'
|
|
||||||
|
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
layout: 'default',
|
layout: 'default',
|
||||||
i18n: 'menu.home',
|
i18n: 'menu.home',
|
||||||
})
|
})
|
||||||
const liveRef = ref(null);
|
const liveRef = ref(null)
|
||||||
const loading = ref(false);
|
const loading = ref(false)
|
||||||
const finished = ref(false);
|
const finished = ref(false)
|
||||||
const refreshing = ref(false);
|
const refreshing = ref(false)
|
||||||
const page = ref(1);
|
|
||||||
const show = ref(false);
|
|
||||||
const showHeight = ref('');
|
|
||||||
const list = ref([{
|
const list = ref([{
|
||||||
image: 'https://e-cdn.fontree.cn/fonchain-main/prod/file/default/setting/637d95b4-2ae9-4a74-bd60-a3a9d2ca2ca0.png',
|
image: 'https://e-cdn.fontree.cn/fonchain-main/prod/file/default/setting/637d95b4-2ae9-4a74-bd60-a3a9d2ca2ca0.png',
|
||||||
title: '张天赐 | 日出而作,日落而息',
|
title: '张天赐 | 日出而作,日落而息',
|
||||||
@ -59,42 +53,71 @@ const list = ref([{
|
|||||||
startingPrice: 'RMB 1,000',
|
startingPrice: 'RMB 1,000',
|
||||||
transactionPrice: 'RMB 10,000',
|
transactionPrice: 'RMB 10,000',
|
||||||
}])
|
}])
|
||||||
|
const page = ref(1)
|
||||||
|
|
||||||
const loadData = async () => {
|
// 加载数据
|
||||||
// 加载数据逻辑...
|
async function loadData() {
|
||||||
};
|
// try {
|
||||||
|
// loading.value = true
|
||||||
|
// // 模拟API请求
|
||||||
|
// const {data} = await fetchAuctionList({page: page.value})
|
||||||
|
//
|
||||||
|
// if (refreshing.value) {
|
||||||
|
// list.value = []
|
||||||
|
// refreshing.value = false
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// list.value.push(...data)
|
||||||
|
// page.value++
|
||||||
|
//
|
||||||
|
// // 如果没有更多数据了
|
||||||
|
// if (data.length < 10) {
|
||||||
|
// finished.value = true
|
||||||
|
// }
|
||||||
|
// } catch (error) {
|
||||||
|
// console.error(error)
|
||||||
|
// } finally {
|
||||||
|
// loading.value = false
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
const onRefresh = () => {
|
// 下拉刷新
|
||||||
finished.value = false;
|
function onRefresh() {
|
||||||
page.value = 1;
|
finished.value = false
|
||||||
refreshing.value = true;
|
page.value = 1
|
||||||
loadData();
|
refreshing.value = true
|
||||||
};
|
loadData()
|
||||||
|
}
|
||||||
const columns = computed(() => {
|
|
||||||
const result = [[], []];
|
|
||||||
list.value.forEach((item, index) => {
|
|
||||||
result[index % 2].push(item);
|
|
||||||
});
|
|
||||||
return result;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
const leftColumn = computed(() => {
|
||||||
|
return list.value.filter((_, index) => index % 2 === 0)
|
||||||
|
})
|
||||||
|
const rightColumn = computed(() => {
|
||||||
|
return list.value.filter((_, index) => index % 2 === 1)
|
||||||
|
})
|
||||||
|
const show = ref(false)
|
||||||
|
const showHeight = ref('')
|
||||||
const openShow = () => {
|
const openShow = () => {
|
||||||
const rect = useRect(liveRef.value.$el);
|
const rect = useRect(liveRef.value.$el);
|
||||||
showHeight.value = rect.height;
|
showHeight.value = rect.height
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
show.value = true;
|
show.value = true
|
||||||
});
|
})
|
||||||
};
|
}
|
||||||
|
|
||||||
const changeLive=()=>{
|
const changeLive=()=>{
|
||||||
fullLive.value = true;
|
fullLive.value=true
|
||||||
};
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
<div @click="changeLive" :class="['changeLive', fullLive ? 'expanded' : 'collapsed']">
|
<div
|
||||||
|
@click="changeLive"
|
||||||
|
:class="[
|
||||||
|
'changeLive',
|
||||||
|
fullLive ? 'expanded' : 'collapsed'
|
||||||
|
]"
|
||||||
|
>
|
||||||
<client-only>
|
<client-only>
|
||||||
<LiveRoom ref="liveRef" :fullLive="fullLive" />
|
<LiveRoom ref="liveRef" :fullLive="fullLive" />
|
||||||
</client-only>
|
</client-only>
|
||||||
@ -105,9 +128,83 @@ const changeLive = () => {
|
|||||||
<van-tab title="拍品列表">
|
<van-tab title="拍品列表">
|
||||||
<div class="px-[16px] pt-[16px]">
|
<div class="px-[16px] pt-[16px]">
|
||||||
<van-pull-refresh>
|
<van-pull-refresh>
|
||||||
<van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="loadData">
|
<van-list
|
||||||
|
v-model:loading="loading"
|
||||||
|
:finished="finished"
|
||||||
|
finished-text="没有更多了"
|
||||||
|
@load="loadData"
|
||||||
|
>
|
||||||
<div class="w-full flex gap-[16px]">
|
<div class="w-full flex gap-[16px]">
|
||||||
<Column v-for="(column, colIndex) in columns" :key="colIndex" :items="column" @openShow="openShow" />
|
<div class="flex flex-1 flex-col gap-[16px]">
|
||||||
|
<div
|
||||||
|
v-for="(item, index) in leftColumn"
|
||||||
|
:key="index"
|
||||||
|
class="w-full"
|
||||||
|
@click="openShow"
|
||||||
|
>
|
||||||
|
<div class="relative w-full">
|
||||||
|
<van-image
|
||||||
|
:src="item.image"
|
||||||
|
:style="{ aspectRatio: item.ratio }"
|
||||||
|
fit="cover"
|
||||||
|
class="w-full"
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
class="absolute left-[8px] top-[8px] h-[17px] w-[45px] flex items-center justify-center bg-[#2b53ac] text-[12px] text-[#fff]">
|
||||||
|
LOT{{ index * 2 + 1 }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pt-[8px]">
|
||||||
|
<div class="text-[14px] text-[#000000] leading-[20px]">
|
||||||
|
{{ item.title }}
|
||||||
|
</div>
|
||||||
|
<div class="mt-[4px] text-[12px] text-[#575757]">
|
||||||
|
起拍价:{{ item.startingPrice }}
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="item.transactionPrice"
|
||||||
|
class="mt-[4px] text-[12px] text-[#b58047]"
|
||||||
|
>
|
||||||
|
成交价:{{ item.transactionPrice }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-1 flex-col gap-[16px]">
|
||||||
|
<div
|
||||||
|
v-for="(item, index) in rightColumn"
|
||||||
|
:key="index"
|
||||||
|
class="w-full"
|
||||||
|
@click="openShow"
|
||||||
|
>
|
||||||
|
<div class="relative w-full">
|
||||||
|
<van-image
|
||||||
|
:src="item.image"
|
||||||
|
:style="{ aspectRatio: item.ratio }"
|
||||||
|
fit="cover"
|
||||||
|
class="w-full"
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
class="absolute left-[8px] top-[8px] h-[17px] w-[45px] flex items-center justify-center bg-[#2b53ac] text-[12px] text-[#fff]">
|
||||||
|
LOT{{ index * 2 + 2 }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pt-[8px]">
|
||||||
|
<div class="text-[14px] text-[#000000] leading-[20px]">
|
||||||
|
{{ item.title }}
|
||||||
|
</div>
|
||||||
|
<div class="mt-[4px] text-[12px] text-[#575757]">
|
||||||
|
起拍价:{{ item.startingPrice }}
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="item.transactionPrice"
|
||||||
|
class="mt-[4px] text-[12px] text-[#b58047]"
|
||||||
|
>
|
||||||
|
成交价:{{ item.transactionPrice }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</van-list>
|
</van-list>
|
||||||
</van-pull-refresh>
|
</van-pull-refresh>
|
||||||
@ -118,42 +215,43 @@ const changeLive = () => {
|
|||||||
<div class="text-#575757 text-14px">
|
<div class="text-#575757 text-14px">
|
||||||
这里是后台富文本配置的说明,啊即可打开三等奖撒度老师的湿答答是快乐的阿四大皆空
|
这里是后台富文本配置的说明,啊即可打开三等奖撒度老师的湿答答是快乐的阿四大皆空
|
||||||
</div>
|
</div>
|
||||||
|
<div></div>
|
||||||
</div>
|
</div>
|
||||||
</van-tab>
|
</van-tab>
|
||||||
</van-tabs>
|
</van-tabs>
|
||||||
<van-back-top right="15vw" bottom="10vh"/>
|
<van-back-top right="15vw" bottom="10vh"/>
|
||||||
<van-action-sheet :round="false" v-model:show="show" title="拍品详情">
|
<van-action-sheet :round="false" v-model:show="show" title="拍品详情">
|
||||||
<div class="content bg-[#F0F0F0]" :style="`height: calc(100vh - ${showHeight+85}px)`">
|
<div class="content bg-[#F0F0F0]" :style="`height: calc(100vh - ${showHeight+85}px)`">
|
||||||
<itemDetail/>
|
<itemDetail></itemDetail>
|
||||||
</div>
|
</div>
|
||||||
</van-action-sheet>
|
</van-action-sheet>
|
||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
:root:root {
|
:root:root {
|
||||||
--van-action-sheet-header-height: 39px;
|
--van-action-sheet-header-height: 39px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|
||||||
:deep(.van-swipe__indicator) {
|
:deep(.van-swipe__indicator) {
|
||||||
width: 8px;
|
width: 8px;
|
||||||
height: 8px;
|
height: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fade-enter-active, .fade-leave-active {
|
.fade-enter-active, .fade-leave-active {
|
||||||
transition: opacity 1s;
|
transition: opacity 1s;
|
||||||
}
|
}
|
||||||
|
.fade-enter, .fade-leave-to /* .fade-leave-active in <2.1.8 */ {
|
||||||
.fade-enter, .fade-leave-to {
|
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.van-swipe__indicator:not(.van-swipe__indicator--active) ) {
|
:deep(.van-swipe__indicator:not(.van-swipe__indicator--active) ) {
|
||||||
background: rgba(0, 0, 0, 0.8);
|
background: rgba(0, 0, 0, 0.8);
|
||||||
}
|
}
|
||||||
|
|
||||||
.changeLive {
|
.changeLive {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
@ -25,6 +25,7 @@ const onConfirm = ({ selectedValues, selectedOptions }) => {
|
|||||||
showPicker.value = false
|
showPicker.value = false
|
||||||
}
|
}
|
||||||
const onBirthdayConfirm = (value) => {
|
const onBirthdayConfirm = (value) => {
|
||||||
|
console.log(value)
|
||||||
birthdayDate.value = value.selectedValues
|
birthdayDate.value = value.selectedValues
|
||||||
birthday.value = value.selectedValues.join('-')
|
birthday.value = value.selectedValues.join('-')
|
||||||
showBirthdayPicker.value = false
|
showBirthdayPicker.value = false
|
||||||
|
5
app/plugins/http.ts
Normal file
5
app/plugins/http.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
import { setupHttp } from '~/api/http'
|
||||||
|
|
||||||
|
export default defineNuxtPlugin(() => {
|
||||||
|
setupHttp()
|
||||||
|
})
|
@ -1,107 +0,0 @@
|
|||||||
// 导入必要的模块和函数
|
|
||||||
import { useRouter } from "vue-router"; // 用于路由导航
|
|
||||||
import Request from "@/service/request/index.js"; // 自定义请求类
|
|
||||||
import { message } from '@/components/x-message/useMessage.js';
|
|
||||||
import {authStore} from "~/stores/auth/index.js"; // 消息提示组件
|
|
||||||
|
|
||||||
// 初始化路由
|
|
||||||
const router = useRouter();
|
|
||||||
let isRefreshing = false; // 标记是否正在刷新token
|
|
||||||
let refreshSubscribers = []; // 存储刷新token的回调函数
|
|
||||||
const config = useRuntimeConfig(); // 获取运行时配置
|
|
||||||
|
|
||||||
// 创建请求实例
|
|
||||||
const request = new Request({
|
|
||||||
baseURL: config.public.NUXT_PUBLIC_API_BASE, // 基础URL
|
|
||||||
timeout: 1000 * 60 * 5, // 超时时间设置为5分钟
|
|
||||||
showMsg: true, // 是否显示消息提示
|
|
||||||
interceptors: {
|
|
||||||
// 请求拦截器
|
|
||||||
requestInterceptors: (config) => {
|
|
||||||
// 根据是否是表单数据设置Content-Type
|
|
||||||
const contentType = config.isFormData ? 'multipart/form-data' : config.contentType || 'application/json';
|
|
||||||
config.headers = {
|
|
||||||
"Content-Type": contentType,
|
|
||||||
"Authorization": localStorage.getItem('token') || '' // 从本地存储获取token
|
|
||||||
};
|
|
||||||
return config; // 返回修改后的配置
|
|
||||||
},
|
|
||||||
// 响应拦截器
|
|
||||||
responseInterceptors: async (response) => {
|
|
||||||
// 如果需要显示消息且状态为1,显示警告消息
|
|
||||||
if (response.config.showMsg && response.data.status === 1) {
|
|
||||||
message.warning(response.data.msg);
|
|
||||||
}
|
|
||||||
// 如果响应码为401,尝试刷新token
|
|
||||||
if (response.data.code === 401) {
|
|
||||||
return getRefreshToken(response);
|
|
||||||
}
|
|
||||||
// 如果响应状态为200, 201, 204,直接返回响应
|
|
||||||
if ([200, 201, 204].includes(response.status)) {
|
|
||||||
return response.config.responseType === "blob" ? response : response;
|
|
||||||
} else {
|
|
||||||
// 处理其他错误情况
|
|
||||||
const errorMsg = response.data.msg || 'An error occurred.';
|
|
||||||
message.error(errorMsg);
|
|
||||||
return Promise.reject(new Error(errorMsg));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
// 刷新token的函数
|
|
||||||
async function getRefreshToken(response) {
|
|
||||||
const {token,RefreshToken,userInfo}= authStore()
|
|
||||||
if (!isRefreshing) {
|
|
||||||
isRefreshing = true; // 标记正在刷新
|
|
||||||
const refreshToken = RefreshToken.value; // 获取刷新token
|
|
||||||
if (refreshToken) {
|
|
||||||
try {
|
|
||||||
// 发送请求刷新token
|
|
||||||
const res = await request.post("/user/refresh/token", { refreshToken });
|
|
||||||
if (res.code === 200) {
|
|
||||||
// 更新本地存储的token和用户信息
|
|
||||||
token.value = res.data.Token;
|
|
||||||
userInfo.value=res.data.AccountInfo
|
|
||||||
RefreshToken.value = res.data.RefreshToken;
|
|
||||||
response.config.headers["Authorization"] = res.data.Token; // 更新请求头的token
|
|
||||||
return request.request(response.config); // 重新发送原始请求
|
|
||||||
} else {
|
|
||||||
handleAuthError(res); // 处理认证错误
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
throw error; // 抛出错误
|
|
||||||
} finally {
|
|
||||||
isRefreshing = false; // 重置刷新标记
|
|
||||||
refreshSubscribers.forEach(callback => callback()); // 执行所有等待的回调
|
|
||||||
refreshSubscribers = []; // 清空回调列表
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
handleAuthError(); // 没有刷新token时处理错误
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// 如果正在刷新,返回一个Promise,等待刷新完成后重新发送请求
|
|
||||||
return new Promise(resolve => {
|
|
||||||
refreshSubscribers.push(() => resolve(request.request(response.config)));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 处理认证错误的函数
|
|
||||||
function handleAuthError(res = {}) {
|
|
||||||
router.push("/login"); // 跳转到登录页面
|
|
||||||
const errorMsg = res.message || res.msg || "No refresh token available."; // 错误消息
|
|
||||||
message.error(errorMsg); // 显示错误消息
|
|
||||||
throw new Error(errorMsg); // 抛出错误
|
|
||||||
}
|
|
||||||
|
|
||||||
// 发送请求的函数
|
|
||||||
const fontRequest = (config) => {
|
|
||||||
// 如果是GET请求,将data作为params
|
|
||||||
if (["get", "GET"].includes(config.method)) {
|
|
||||||
config.params = config.data;
|
|
||||||
}
|
|
||||||
return request.request(config); // 发送请求
|
|
||||||
};
|
|
||||||
|
|
||||||
export default fontRequest; // 导出请求函数
|
|
@ -1,84 +0,0 @@
|
|||||||
import axios from 'axios'; // 导入axios库
|
|
||||||
|
|
||||||
// 自定义请求类
|
|
||||||
class Request {
|
|
||||||
constructor(config) {
|
|
||||||
this.instance = axios.create(config); // 创建axios实例
|
|
||||||
this.abortControllerMap = new Map(); // 存储请求的AbortController
|
|
||||||
this.interceptorsObj = config.interceptors; // 存储拦截器对象
|
|
||||||
|
|
||||||
// 默认请求拦截器
|
|
||||||
this.instance.interceptors.request.use(
|
|
||||||
(res) => {
|
|
||||||
const controller = new AbortController(); // 创建新的AbortController
|
|
||||||
const url = res.url || ''; // 获取请求的URL
|
|
||||||
res.signal = controller.signal; // 将信号绑定到请求
|
|
||||||
this.abortControllerMap.set(url, controller); // 存储控制器
|
|
||||||
return res; // 返回请求配置
|
|
||||||
},
|
|
||||||
(err) => Promise.reject(err) // 处理请求错误
|
|
||||||
);
|
|
||||||
|
|
||||||
// 自定义请求拦截器
|
|
||||||
this.instance.interceptors.request.use(
|
|
||||||
this.interceptorsObj?.requestInterceptors,
|
|
||||||
this.interceptorsObj?.requestInterceptorsCatch
|
|
||||||
);
|
|
||||||
|
|
||||||
// 自定义响应拦截器
|
|
||||||
this.instance.interceptors.response.use(
|
|
||||||
this.interceptorsObj?.responseInterceptors,
|
|
||||||
this.interceptorsObj?.responseInterceptorsCatch
|
|
||||||
);
|
|
||||||
|
|
||||||
// 默认响应拦截器
|
|
||||||
this.instance.interceptors.response.use(
|
|
||||||
(res) => {
|
|
||||||
const url = res.config.url || ''; // 获取响应的URL
|
|
||||||
this.abortControllerMap.delete(url); // 删除已完成请求的控制器
|
|
||||||
return res.data; // 返回响应数据
|
|
||||||
},
|
|
||||||
(err) => Promise.reject(err) // 处理响应错误
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 发送请求的方法
|
|
||||||
request(config) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
// 如果有自定义请求拦截器,先执行
|
|
||||||
if (config.interceptors?.requestInterceptors) {
|
|
||||||
config = config.interceptors.requestInterceptors(config);
|
|
||||||
}
|
|
||||||
// 发送请求
|
|
||||||
this.instance
|
|
||||||
.request(config)
|
|
||||||
.then((res) => {
|
|
||||||
// 如果有自定义响应拦截器,先执行
|
|
||||||
if (config.interceptors?.responseInterceptors) {
|
|
||||||
res = config.interceptors.responseInterceptors(res);
|
|
||||||
}
|
|
||||||
resolve(res); // 解析响应
|
|
||||||
})
|
|
||||||
.catch(reject); // 捕获错误
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 取消所有请求的方法
|
|
||||||
cancelAllRequest() {
|
|
||||||
for (const [, controller] of this.abortControllerMap) {
|
|
||||||
controller.abort(); // 取消请求
|
|
||||||
}
|
|
||||||
this.abortControllerMap.clear(); // 清空控制器映射
|
|
||||||
}
|
|
||||||
|
|
||||||
// 取消特定请求的方法
|
|
||||||
cancelRequest(url) {
|
|
||||||
const urlList = Array.isArray(url) ? url : [url]; // 确保url是数组
|
|
||||||
for (const _url of urlList) {
|
|
||||||
this.abortControllerMap.get(_url)?.abort(); // 取消请求
|
|
||||||
this.abortControllerMap.delete(_url); // 删除控制器
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Request; // 导出自定义请求类
|
|
Binary file not shown.
Before Width: | Height: | Size: 11 KiB |
Binary file not shown.
Before Width: | Height: | Size: 11 KiB |
@ -1,11 +0,0 @@
|
|||||||
import { createGlobalState,useLocalStorage } from '@vueuse/core'
|
|
||||||
export const authStore = createGlobalState(() => {
|
|
||||||
const token=useLocalStorage('token','')
|
|
||||||
const RefreshToken=useLocalStorage('RefreshToken','')
|
|
||||||
const userInfo=useLocalStorage('userInfo','')
|
|
||||||
return{
|
|
||||||
userInfo,
|
|
||||||
RefreshToken,
|
|
||||||
token
|
|
||||||
}
|
|
||||||
})
|
|
@ -3,14 +3,12 @@ import {ref} from "vue";
|
|||||||
export const liveStore = createGlobalState(() => {
|
export const liveStore = createGlobalState(() => {
|
||||||
const quoteStatus = ref(false)
|
const quoteStatus = ref(false)
|
||||||
const show = ref(false)
|
const show = ref(false)
|
||||||
const show1=ref(false)
|
|
||||||
const playerId=ref('J_prismPlayer')
|
|
||||||
const changeStatus = () => {
|
const changeStatus = () => {
|
||||||
|
console.log('changeStatus1231')
|
||||||
quoteStatus.value = !quoteStatus.value
|
quoteStatus.value = !quoteStatus.value
|
||||||
|
console.log('quoteStatus.value',quoteStatus.value)
|
||||||
}
|
}
|
||||||
return{
|
return{
|
||||||
show1,
|
|
||||||
playerId,
|
|
||||||
show,
|
show,
|
||||||
quoteStatus,
|
quoteStatus,
|
||||||
changeStatus
|
changeStatus
|
||||||
|
@ -1,16 +1,6 @@
|
|||||||
import dotenv from 'dotenv'
|
|
||||||
import process from 'node:process'
|
import process from 'node:process'
|
||||||
import preload from './app/utils/preload'
|
import preload from './app/utils/preload'
|
||||||
import { currentLocales } from './i18n/i18n'
|
import { currentLocales } from './i18n/i18n'
|
||||||
const envFile = process.env.ENV_FILE || '.env.test'
|
|
||||||
dotenv.config({ path: `./env/${envFile}` })
|
|
||||||
const publicConfig = Object.entries(process.env)
|
|
||||||
.filter(([key]) => key.startsWith('NUXT_PUBLIC_'))
|
|
||||||
.reduce((config, [key, value]) => {
|
|
||||||
config[key] = value
|
|
||||||
return config
|
|
||||||
}, {})
|
|
||||||
|
|
||||||
export default defineNuxtConfig({
|
export default defineNuxtConfig({
|
||||||
|
|
||||||
hooks: {
|
hooks: {
|
||||||
@ -33,10 +23,9 @@ export default defineNuxtConfig({
|
|||||||
'@nuxtjs/i18n',
|
'@nuxtjs/i18n',
|
||||||
],
|
],
|
||||||
runtimeConfig: {
|
runtimeConfig: {
|
||||||
// 私有配置,只有在服务端可用
|
public: {
|
||||||
apiSecret: process.env.NUXT_API_SECRET || 'default_secret',
|
apiBase: process.env.NUXT_PUBLIC_API_BASE,
|
||||||
// 公共配置,客户端和服务端都可用
|
},
|
||||||
public: publicConfig,
|
|
||||||
},
|
},
|
||||||
|
|
||||||
css: [
|
css: [
|
||||||
|
14
package.json
14
package.json
@ -5,24 +5,21 @@
|
|||||||
"packageManager": "pnpm@9.15.1",
|
"packageManager": "pnpm@9.15.1",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "nuxt build",
|
"build": "nuxt build",
|
||||||
"dev": "cross-env ENV_FILE=.env.test nuxt dev",
|
"dev": "nuxt dev --mode test",
|
||||||
"dev:prod": "NODE_ENV=production ENV_FILE=.env.prod nuxt dev",
|
"dev:prod": "nuxt dev --mode prod",
|
||||||
"build:test": "cross-env ENV_FILE=.env.test nuxt build",
|
"build:test": "nuxt build --mode test",
|
||||||
"build:prod": "cross-env ENV_FILE=.env.prod nuxt build",
|
"build:prod": "nuxt build --mode prod",
|
||||||
"generate": "nuxt generate",
|
"generate": "nuxt generate",
|
||||||
"preview": "nuxt preview",
|
"preview": "nuxt preview",
|
||||||
"postinstall": "nuxt prepare",
|
"postinstall": "nuxt prepare",
|
||||||
"typecheck": "vue-tsc --noEmit",
|
"typecheck": "vue-tsc --noEmit",
|
||||||
"release": "bumpp --commit --push --tag",
|
"release": "bumpp --commit --push --tag"
|
||||||
"start": "cross-env ENV_FILE=.env.prod nuxt start"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxtjs/color-mode": "^3.5.2",
|
"@nuxtjs/color-mode": "^3.5.2",
|
||||||
"@nuxtjs/i18n": "^9.1.1",
|
"@nuxtjs/i18n": "^9.1.1",
|
||||||
"@vueuse/core": "^12.4.0",
|
"@vueuse/core": "^12.4.0",
|
||||||
"aliyun-aliplayer": "^2.28.5",
|
"aliyun-aliplayer": "^2.28.5",
|
||||||
"axios": "^1.7.9",
|
|
||||||
"dotenv": "^16.4.7",
|
|
||||||
"nuxt": "^3.15.0",
|
"nuxt": "^3.15.0",
|
||||||
"pinyin": "4.0.0-alpha.2",
|
"pinyin": "4.0.0-alpha.2",
|
||||||
"segmentit": "^2.0.3",
|
"segmentit": "^2.0.3",
|
||||||
@ -35,7 +32,6 @@
|
|||||||
"@unocss/preset-rem-to-px": "0.65.2",
|
"@unocss/preset-rem-to-px": "0.65.2",
|
||||||
"@vant/nuxt": "^1.0.6",
|
"@vant/nuxt": "^1.0.6",
|
||||||
"bumpp": "^9.9.2",
|
"bumpp": "^9.9.2",
|
||||||
"cross-env": "^7.0.3",
|
|
||||||
"postcss-mobile-forever": "^4.3.1",
|
"postcss-mobile-forever": "^4.3.1",
|
||||||
"sass": "^1.83.1",
|
"sass": "^1.83.1",
|
||||||
"sass-loader": "^16.0.4",
|
"sass-loader": "^16.0.4",
|
||||||
|
@ -23,12 +23,6 @@ importers:
|
|||||||
aliyun-aliplayer:
|
aliyun-aliplayer:
|
||||||
specifier: ^2.28.5
|
specifier: ^2.28.5
|
||||||
version: 2.28.5
|
version: 2.28.5
|
||||||
axios:
|
|
||||||
specifier: ^1.7.9
|
|
||||||
version: 1.7.9
|
|
||||||
dotenv:
|
|
||||||
specifier: ^16.4.7
|
|
||||||
version: 16.4.7
|
|
||||||
nuxt:
|
nuxt:
|
||||||
specifier: ^3.15.0
|
specifier: ^3.15.0
|
||||||
version: 3.15.0(@parcel/watcher@2.5.0)(@types/node@22.10.2)(db0@0.2.1)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.4.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.29.1)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(typescript@5.7.2)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))(yaml@2.6.1)
|
version: 3.15.0(@parcel/watcher@2.5.0)(@types/node@22.10.2)(db0@0.2.1)(eslint@9.17.0(jiti@2.4.2))(ioredis@5.4.2)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.29.1)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(typescript@5.7.2)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(sass@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1))(yaml@2.6.1)
|
||||||
@ -60,9 +54,6 @@ importers:
|
|||||||
bumpp:
|
bumpp:
|
||||||
specifier: ^9.9.2
|
specifier: ^9.9.2
|
||||||
version: 9.9.2(magicast@0.3.5)
|
version: 9.9.2(magicast@0.3.5)
|
||||||
cross-env:
|
|
||||||
specifier: ^7.0.3
|
|
||||||
version: 7.0.3
|
|
||||||
postcss-mobile-forever:
|
postcss-mobile-forever:
|
||||||
specifier: ^4.3.1
|
specifier: ^4.3.1
|
||||||
version: 4.3.1(postcss@8.4.49)
|
version: 4.3.1(postcss@8.4.49)
|
||||||
@ -1666,9 +1657,6 @@ packages:
|
|||||||
async@3.2.6:
|
async@3.2.6:
|
||||||
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
|
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
|
||||||
|
|
||||||
asynckit@0.4.0:
|
|
||||||
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
|
|
||||||
|
|
||||||
autoprefixer@10.4.20:
|
autoprefixer@10.4.20:
|
||||||
resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
|
resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
|
||||||
engines: {node: ^10 || ^12 || >=14}
|
engines: {node: ^10 || ^12 || >=14}
|
||||||
@ -1676,9 +1664,6 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
postcss: ^8.1.0
|
postcss: ^8.1.0
|
||||||
|
|
||||||
axios@1.7.9:
|
|
||||||
resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==}
|
|
||||||
|
|
||||||
b4a@1.6.7:
|
b4a@1.6.7:
|
||||||
resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==}
|
resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==}
|
||||||
|
|
||||||
@ -1831,10 +1816,6 @@ packages:
|
|||||||
colorette@2.0.20:
|
colorette@2.0.20:
|
||||||
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
|
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
|
||||||
|
|
||||||
combined-stream@1.0.8:
|
|
||||||
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
|
|
||||||
engines: {node: '>= 0.8'}
|
|
||||||
|
|
||||||
commander@1.1.1:
|
commander@1.1.1:
|
||||||
resolution: {integrity: sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==}
|
resolution: {integrity: sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==}
|
||||||
engines: {node: '>= 0.6.x'}
|
engines: {node: '>= 0.6.x'}
|
||||||
@ -1908,11 +1889,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-NKgHbWkSZXJUcaBHSsyzC8eegD6bBd4O0oCI6XMIJ+y4Bq3v4w7sY3wfWoKPuVlq9pQHRB6od0lmKpIqi8TlKA==}
|
resolution: {integrity: sha512-NKgHbWkSZXJUcaBHSsyzC8eegD6bBd4O0oCI6XMIJ+y4Bq3v4w7sY3wfWoKPuVlq9pQHRB6od0lmKpIqi8TlKA==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
cross-env@7.0.3:
|
|
||||||
resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
|
|
||||||
engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
|
|
||||||
hasBin: true
|
|
||||||
|
|
||||||
cross-spawn@7.0.6:
|
cross-spawn@7.0.6:
|
||||||
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
|
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
|
||||||
engines: {node: '>= 8'}
|
engines: {node: '>= 8'}
|
||||||
@ -2041,10 +2017,6 @@ packages:
|
|||||||
defu@6.1.4:
|
defu@6.1.4:
|
||||||
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
|
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
|
||||||
|
|
||||||
delayed-stream@1.0.0:
|
|
||||||
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
|
|
||||||
engines: {node: '>=0.4.0'}
|
|
||||||
|
|
||||||
denque@2.1.0:
|
denque@2.1.0:
|
||||||
resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
|
resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
|
||||||
engines: {node: '>=0.10'}
|
engines: {node: '>=0.10'}
|
||||||
@ -2321,23 +2293,10 @@ packages:
|
|||||||
flatted@3.3.2:
|
flatted@3.3.2:
|
||||||
resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==}
|
resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==}
|
||||||
|
|
||||||
follow-redirects@1.15.9:
|
|
||||||
resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
|
|
||||||
engines: {node: '>=4.0'}
|
|
||||||
peerDependencies:
|
|
||||||
debug: '*'
|
|
||||||
peerDependenciesMeta:
|
|
||||||
debug:
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
foreground-child@3.3.0:
|
foreground-child@3.3.0:
|
||||||
resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
|
resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
|
|
||||||
form-data@4.0.1:
|
|
||||||
resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==}
|
|
||||||
engines: {node: '>= 6'}
|
|
||||||
|
|
||||||
fraction.js@4.3.7:
|
fraction.js@4.3.7:
|
||||||
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
|
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
|
||||||
|
|
||||||
@ -3367,9 +3326,6 @@ packages:
|
|||||||
protocols@2.0.1:
|
protocols@2.0.1:
|
||||||
resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==}
|
resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==}
|
||||||
|
|
||||||
proxy-from-env@1.1.0:
|
|
||||||
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
|
|
||||||
|
|
||||||
punycode@2.3.1:
|
punycode@2.3.1:
|
||||||
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
|
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
@ -6038,8 +5994,6 @@ snapshots:
|
|||||||
|
|
||||||
async@3.2.6: {}
|
async@3.2.6: {}
|
||||||
|
|
||||||
asynckit@0.4.0: {}
|
|
||||||
|
|
||||||
autoprefixer@10.4.20(postcss@8.4.49):
|
autoprefixer@10.4.20(postcss@8.4.49):
|
||||||
dependencies:
|
dependencies:
|
||||||
browserslist: 4.24.3
|
browserslist: 4.24.3
|
||||||
@ -6050,14 +6004,6 @@ snapshots:
|
|||||||
postcss: 8.4.49
|
postcss: 8.4.49
|
||||||
postcss-value-parser: 4.2.0
|
postcss-value-parser: 4.2.0
|
||||||
|
|
||||||
axios@1.7.9:
|
|
||||||
dependencies:
|
|
||||||
follow-redirects: 1.15.9
|
|
||||||
form-data: 4.0.1
|
|
||||||
proxy-from-env: 1.1.0
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- debug
|
|
||||||
|
|
||||||
b4a@1.6.7: {}
|
b4a@1.6.7: {}
|
||||||
|
|
||||||
babel-plugin-macros@2.8.0:
|
babel-plugin-macros@2.8.0:
|
||||||
@ -6230,10 +6176,6 @@ snapshots:
|
|||||||
|
|
||||||
colorette@2.0.20: {}
|
colorette@2.0.20: {}
|
||||||
|
|
||||||
combined-stream@1.0.8:
|
|
||||||
dependencies:
|
|
||||||
delayed-stream: 1.0.0
|
|
||||||
|
|
||||||
commander@1.1.1:
|
commander@1.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
keypress: 0.1.0
|
keypress: 0.1.0
|
||||||
@ -6293,10 +6235,6 @@ snapshots:
|
|||||||
|
|
||||||
cronstrue@2.52.0: {}
|
cronstrue@2.52.0: {}
|
||||||
|
|
||||||
cross-env@7.0.3:
|
|
||||||
dependencies:
|
|
||||||
cross-spawn: 7.0.6
|
|
||||||
|
|
||||||
cross-spawn@7.0.6:
|
cross-spawn@7.0.6:
|
||||||
dependencies:
|
dependencies:
|
||||||
path-key: 3.1.1
|
path-key: 3.1.1
|
||||||
@ -6419,8 +6357,6 @@ snapshots:
|
|||||||
|
|
||||||
defu@6.1.4: {}
|
defu@6.1.4: {}
|
||||||
|
|
||||||
delayed-stream@1.0.0: {}
|
|
||||||
|
|
||||||
denque@2.1.0: {}
|
denque@2.1.0: {}
|
||||||
|
|
||||||
depd@2.0.0: {}
|
depd@2.0.0: {}
|
||||||
@ -6768,19 +6704,11 @@ snapshots:
|
|||||||
|
|
||||||
flatted@3.3.2: {}
|
flatted@3.3.2: {}
|
||||||
|
|
||||||
follow-redirects@1.15.9: {}
|
|
||||||
|
|
||||||
foreground-child@3.3.0:
|
foreground-child@3.3.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
cross-spawn: 7.0.6
|
cross-spawn: 7.0.6
|
||||||
signal-exit: 4.1.0
|
signal-exit: 4.1.0
|
||||||
|
|
||||||
form-data@4.0.1:
|
|
||||||
dependencies:
|
|
||||||
asynckit: 0.4.0
|
|
||||||
combined-stream: 1.0.8
|
|
||||||
mime-types: 2.1.35
|
|
||||||
|
|
||||||
fraction.js@4.3.7: {}
|
fraction.js@4.3.7: {}
|
||||||
|
|
||||||
fresh@0.5.2: {}
|
fresh@0.5.2: {}
|
||||||
@ -7927,8 +7855,6 @@ snapshots:
|
|||||||
|
|
||||||
protocols@2.0.1: {}
|
protocols@2.0.1: {}
|
||||||
|
|
||||||
proxy-from-env@1.1.0: {}
|
|
||||||
|
|
||||||
punycode@2.3.1: {}
|
punycode@2.3.1: {}
|
||||||
|
|
||||||
queue-microtask@1.2.3: {}
|
queue-microtask@1.2.3: {}
|
||||||
|
Loading…
Reference in New Issue
Block a user