This commit is contained in:
scout 2025-01-15 13:06:01 +08:00
commit 569e805249
20 changed files with 353 additions and 338 deletions

View File

@ -39,9 +39,6 @@
- 🔥 `<script setup>` 语法
- 🌍 [国际化支持](./i18n/locales)
- 🍍 [使用 Pinia 进行状态管理](https://github.com/vuejs/pinia),查看 [./app/composables/counter.ts](./app/composables/counter.ts)
- 📑 [布局系统](./app/layouts)
- 📥 API 自动导入 - 用于 Composition API 和自定义组合式函数
@ -57,8 +54,6 @@
- [i18n](https://github.com/nuxt-modules/i18n) - Nuxt 的国际化模块
- [ColorMode](https://github.com/nuxt-modules/color-mode) - 支持自动检测的深色和浅色模式
- [UnoCSS](https://github.com/unocss/unocss) - 即时按需原子化 CSS 引擎
- [Pinia](https://github.com/vuejs/pinia) - 直观、类型安全、轻量且灵活的 Vue 状态管理
- [Pinia Persistedstate](https://github.com/prazdevs/pinia-plugin-persistedstate) - 可配置的 Pinia 存储持久化和重新激活
- [DevTools](https://github.com/nuxt/devtools) - 释放 Nuxt 开发者体验
## IDE

View File

@ -1,6 +1,4 @@
<script setup>
import useKeepalive from '~/composables/keepalive'
import { appName, appDescription } from '~/constants'
import { useI18n } from 'vue-i18n'
import {message} from '@/components/x-message/useMessage.js'
// message.success('success')
@ -11,16 +9,11 @@ useHead({
{ name: 'keywords', content: useI18n().t('appSetting.appKeyWords') },
],
})
const color = useColorMode()
const mode = computed(() => {
return color.value
})
const keepAliveRouteNames = computed(() => {
return useKeepalive().routeCaches
})
</script>
<template>
@ -28,7 +21,7 @@ const keepAliveRouteNames = computed(() => {
<NuxtLoadingIndicator
color="repeating-linear-gradient(to right,var(--c-primary) 0%,var(--c-primary-active) 100%)" />
<NuxtLayout>
<NuxtPage :keepalive="{ include: keepAliveRouteNames }" />
<NuxtPage/>
</NuxtLayout>
</VanConfigProvider>
</template>

View File

@ -18,7 +18,7 @@ initData()
<template>
<div>
<van-tabbar v-if="show" v-model="active" route placeholder fixed>
<van-tabbar v-model="active" route placeholder fixed>
<van-tabbar-item replace to="/">
<span>{{ $t('tabbar.home') }}</span>
<template #icon>

View File

@ -1,10 +1,15 @@
<script setup>
import { useAppHeaderRouteNames as routeWhiteList } from '~/config'
import { useAppFooterRouteNames as routeWhiteList } from '~/config'
import { homeStore } from "@/stores/home/index.js";
const { fullLive } = homeStore()
const route = useRoute()
const router = useRouter()
function onBack() {
if (fullLive.value){
fullLive.value=false
return
}
if (window.history.state.back)
history.back()
else
@ -25,12 +30,13 @@ const subTitle = computed(() => {
return route.meta.subTitle ? t(route.meta.subTitle) : ''
})
const showLeftArrow = computed(() => route.name && routeWhiteList.includes(route.name))
</script>
<template>
<VanNavBar
:title="title"
:left-arrow="!showLeftArrow"
:left-arrow="!showLeftArrow||fullLive"
placeholder clickable fixed
@click-left="onBack"
>

View File

@ -3,8 +3,7 @@
</script>
<template>
<div class="w-full h-[188px] bg-[] bg-#606165">
<div class="w-full h-full bg-[] bg-#606165">
</div>
</template>

View File

@ -1,18 +0,0 @@
import { defineStore } from 'pinia'
const useCounter = defineStore('counter', () => {
const count = ref(0)
function increment() {
count.value++
}
return {
count,
increment,
}
}, {
persist: true,
})
export default useCounter

View File

@ -1,24 +0,0 @@
import type { RouteLocationNormalized, RouteRecordName } from 'vue-router'
import { defineStore } from 'pinia'
const useKeepalive = defineStore('keepalive', () => {
const routeCaches = ref<RouteRecordName[]>([])
const addRoute = (route: RouteLocationNormalized) => {
if (!route.name)
return
if (routeCaches.value.includes(route.name))
return
if (route?.meta?.keepalive)
routeCaches.value.push(route.name)
}
return {
routeCaches,
addRoute,
}
})
export default useKeepalive

View File

@ -1,13 +1,13 @@
<template>
<main class="flex flex-col min-h-svh">
<AppHeader class="h-[var(--van-nav-bar-height)]" />
<div class="flex-1 flex flex-col">
<slot />
</div>
<AppFooter />
<AppFooter v-if="!fullLive" />
</main>
</template>
<script setup lang="ts">
<script setup >
import { homeStore } from "@/stores/home/index.js";
const { fullLive } = homeStore()
</script>

View File

@ -1,7 +0,0 @@
import type { RouteLocationNormalized } from 'vue-router'
import useKeepalive from '~/composables/keepalive'
export default defineNuxtRouteMiddleware((to: RouteLocationNormalized) => {
if (to.meta && to.meta.keepalive)
useKeepalive().addRoute(to)
})

View File

@ -0,0 +1,163 @@
<script setup>
import {ref, onMounted, onBeforeUnmount} from 'vue'
import Aliplayer from 'aliyun-aliplayer'
import 'aliyun-aliplayer/build/skins/default/aliplayer-min.css'
import lock4 from '@/static/images/lock4@2x.png'
import lockdfd from '@/static/images/lockdfd@2x.png'
const player = ref(null)
const quoteStatus = ref(false)
const isPlayerReady = ref(false)
const config = useRuntimeConfig()
const props = defineProps({
fullLive: {
type: Boolean,
default: true,
},
})
const playerConfig = {
id: 'J_prismPlayer',
source: 'artc://live-pull-sh-01.szjixun.cn/live/live?auth_key=1736748343-0-0-feef65166e5cc62957c35b6e3eec82a1',
isLive: true,
preload: true,
autoplayPolicy: {fallbackToMute: true},
controlBarVisibility: 'never',
}
const handlePlayerError = (error) => {
console.error('播放器错误:', error)
if (player.value) {
player.value?.play()
}
}
const initializePlayer = () => {
try {
if (player.value) {
player.value?.dispose()
}
player.value = new Aliplayer(playerConfig, (playerInstance) => {
isPlayerReady.value = true
playerInstance?.play()
})
player.value?.on('error', handlePlayerError)
player.value?.on('rtsTraceId', (event) => {
})
player.value?.on('rtsFallback', (event) => {
})
} catch (error) {
console.error('播放器初始化失败:', error)
}
}
const changeStatus = () => {
quoteStatus.value = !quoteStatus.value
}
onMounted(() => {
initializePlayer()
})
onBeforeUnmount(() => {
if (player.value) {
player.value?.dispose()
player.value = null
}
})
</script>
<template>
<div class="relative h-full">
<div id="J_prismPlayer" class="w-screen"
:style="fullLive?'height: calc(100vh - var(--van-nav-bar-height))':'height:100%'"></div>
<template v-if="fullLive">
<div class="absolute bg-#fff w-60px top-196px right-0 z-999 rounded-l-4px">
<div
class="w-full h-60px text-#7D7D7F text-12px flex flex-col justify-center items-center border-b-1px border-b-#D3D3D3">
<div>拍品</div>
<div>(1/188)</div>
</div>
<div class="w-full h-60px flex flex-col items-center justify-center border-b-1px border-b-#D3D3D3"
@click="changeStatus">
<div class="mb-3px">
<img :src="quoteStatus ? lockdfd : lock4"
class="w-16px h-21px"
alt="">
</div>
<div :class="quoteStatus ? 'text-#7D7D7F' : 'text-#2B53AC'"
class="text-10px">
{{ quoteStatus ? '关闭出价' : '开启出价' }}
</div>
</div>
<div
class="w-full h-60px text-#DD9C56 flex flex-col justify-center items-center ">
<div class="text-10px ">RMB</div>
<div class="text-12px">5,000</div>
<div class="text-10px">去支付</div>
</div>
</div>
<div class="absolute top-505px left-1/2 transform -translate-x-1/2 flex flex-col items-center">
<div class="text-16px text-#FFB25F font-600">
当前价RMB
<van-rolling-text class="my-rolling-text" :start-num="0" :target-num="3000" direction="up"/>
</div>
<div class="text-16px text-#fff font-600">
下口价RMB
<van-rolling-text class="my-rolling-text1" :start-num="0" :target-num="3500" direction="up"/>
</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`">
{{ quoteStatus ? '确认出价 RMB 3,000' : '点击"开启出价",即刻参与竞拍 ' }}
</div>
<div class="w-344px h-86px bg-#fff rounded-4px text-14px text-#939393 pt-7px pb-7px flex flex-col justify-between">
<div class="flex">
<div class="flex-grow-1 text-center">领先</div>
<div class="flex-grow-1 text-center">现场竞价</div>
<div class="flex-grow-1 text-center">10:12:12</div>
<div class="flex-grow-1 text-center">RMB5,500</div>
<div class="flex-grow-1 text-center"></div>
</div>
<div class="flex">
<div class="flex-grow-1 text-center">领先</div>
<div class="flex-grow-1 text-center">现场竞价</div>
<div class="flex-grow-1 text-center">10:12:12</div>
<div class="flex-grow-1 text-center">RMB5,500</div>
<div class="flex-grow-1 text-center"></div>
</div>
<div class="flex">
<div class="flex-grow-1 text-center">领先</div>
<div class="flex-grow-1 text-center">现场竞价</div>
<div class="flex-grow-1 text-center">10:12:12</div>
<div class="flex-grow-1 text-center">RMB5,500</div>
<div class="flex-grow-1 text-center"></div>
</div>
</div>
</div>
</template>
</div>
</template>
<style scoped>
.grid-container {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-template-rows: repeat(3, 1fr);
}
.grid-item {
display: flex;
justify-content: center;
align-items: center;
}
.my-rolling-text {
--van-rolling-text-item-width: 10px;
--van-rolling-text-font-size: 16px;
--van-rolling-text-color: #FFB25F;
}
.my-rolling-text1 {
--van-rolling-text-item-width: 10px;
--van-rolling-text-font-size: 16px;
--van-rolling-text-color: #FFF;
}
:deep(.prism-license-watermark) {
display: none !important;
}
</style>

View File

@ -1,30 +0,0 @@
<template>
<div class="relative">
<video id="videoPlayer" controls autoplay>
<source src="http://localhost:3213/video" type="video/mp4">
</video>
<div class="absolute bg-#fff w-60px top-196px right-0 z-999 rounded-l-4px">
<div class="w-full h-60px text-#7D7D7F text-12px flex flex-col justify-center items-center border-b-1px border-b-#D3D3D3">
<div>拍品</div>
<div>(1/188)</div>
</div>
<div class="w-full h-60px flex flex-col items-center justify-center">
<div class="mb-3px">
<img src="@/static/images/lock4@2x.png" class="w-16px h-21px" alt="">
</div>
<div class="text-#2B53AC text-10px">开启出价</div>
</div>
</div>
</div>
</template>
<script setup>
</script>
<style scoped>
video {
width: 100%;
height: auto;
}
</style>

View File

@ -1,35 +0,0 @@
<script setup lang="ts">
import useCounter from '~/composables/counter'
definePageMeta({
title: '🍍 持久化 Pinia 状态',
i18n: 'menu.persistPiniaState',
})
const counter = useCounter()
function add() {
counter.increment()
}
</script>
<template>
<div>
<h1 class="text-6xl color-pink font-semibold">
Hello, Pinia!
</h1>
<p class="mt-10 text-gray-700 dark:text-white">
{{ $t('counter_page.label') }}
</p>
<p class="mt-10">
{{ $t('counter_page.label_num') }}:
<strong class="text-green-500"> {{ counter.count }} </strong>
</p>
<button class="mt-10 btn" @click="add">
{{ $t('counter_page.btn_add') }}
</button>
</div>
</template>

View File

@ -1,12 +1,13 @@
<script setup>
import liveBroadcast from '@/components/liveBroadcast/index.vue'
import {useRect} from '@vant/use';
import LiveRoom from '@/pages/LiveRoom/index.client.vue'
import itemDetail from '@/components/itemDetail/index.vue'
import { homeStore } from "@/stores/home/index.js";
const { fullLive } = homeStore()
definePageMeta({
layout: 'default',
title: '主页',
i18n: 'menu.home',
})
const liveRef = ref(null)
@ -43,6 +44,16 @@ const list = ref([{
title: '张天赐 | 日出而作,日落而息',
startingPrice: 'RMB 1,000',
transactionPrice: '',
},{
image: 'https://e-cdn.fontree.cn/fonchain-main/prod/file/default/setting/637d95b4-2ae9-4a74-bd60-a3a9d2ca2ca0.png',
title: '张天赐 | 日出而作,日落而息',
startingPrice: 'RMB 1,000',
transactionPrice: 'RMB 10,000',
},{
image: 'https://e-cdn.fontree.cn/fonchain-main/prod/file/default/setting/637d95b4-2ae9-4a74-bd60-a3a9d2ca2ca0.png',
title: '张天赐 | 日出而作,日落而息',
startingPrice: 'RMB 1,000',
transactionPrice: 'RMB 10,000',
}])
const page = ref(1)
@ -95,127 +106,164 @@ const openShow = () => {
show.value = true
})
}
const changeLive=()=>{
fullLive.value=true
}
</script>
<template>
<div class="bg-#fff flex-grow-1">
<liveBroadcast ref="liveRef"/>
<van-tabs sticky animated>
<van-tab title="拍品列表">
<div class="px-[16px] pt-[16px]">
<van-pull-refresh>
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="loadData"
>
<div class="w-full flex gap-[16px]">
<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 class="flex-grow-1">
<div
@click="changeLive"
:class="[
'changeLive',
fullLive ? 'expanded' : 'collapsed'
]"
>
<client-only>
<LiveRoom ref="liveRef" :fullLive="fullLive" />
</client-only>
</div>
<transition name="fade">
<div v-show="!fullLive" class="bg-#fff" >
<van-tabs sticky animated>
<van-tab title="拍品列表">
<div class="px-[16px] pt-[16px]">
<van-pull-refresh>
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="loadData"
>
<div class="w-full flex gap-[16px]">
<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 class="pt-[8px]">
<div class="text-[14px] text-[#000000] leading-[20px]">
{{ item.title }}
</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="mt-[4px] text-[12px] text-[#575757]">
起拍价{{ item.startingPrice }}
</div>
<div
v-if="item.transactionPrice"
class="mt-[4px] text-[12px] text-[#b58047]"
>
成交价{{ item.transactionPrice }}
<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 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>
</van-list>
</van-pull-refresh>
</div>
</van-tab>
<van-tab title="拍卖说明">
<div class="px-16px pt-14px">
<div class="text-#575757 text-14px">
这里是后台富文本配置的说明啊即可打开三等奖撒度老师的湿答答是快乐的阿四大皆空
</van-list>
</van-pull-refresh>
</div>
<div></div>
</van-tab>
<van-tab title="拍卖说明">
<div class="px-16px pt-14px">
<div class="text-#575757 text-14px">
这里是后台富文本配置的说明啊即可打开三等奖撒度老师的湿答答是快乐的阿四大皆空
</div>
<div></div>
</div>
</van-tab>
</van-tabs>
<van-back-top right="15vw" bottom="10vh"/>
<van-action-sheet :round="false" v-model:show="show" title="拍品详情">
<div class="content bg-[#F0F0F0]" :style="`height: calc(100vh - ${showHeight+85}px)`">
<itemDetail></itemDetail>
</div>
</van-tab>
</van-tabs>
<van-back-top right="15vw" bottom="10vh"/>
<van-action-sheet :round="false" v-model:show="show" title="拍品详情">
<div class="content bg-[#F0F0F0]" :style="`height: calc(100vh - ${showHeight+85}px)`">
<itemDetail></itemDetail>
</div>
</van-action-sheet>
</van-action-sheet>
</div>
</transition>
</div>
</template>
<style>
:root:root {
--van-action-sheet-header-height: 39px;
}
</style>
<style scoped lang="scss">
:deep(.van-swipe__indicator) {
width: 8px;
height: 8px;
}
.fade-enter-active, .fade-leave-active {
transition: opacity 1s;
}
.fade-enter, .fade-leave-to /* .fade-leave-active in <2.1.8 */ {
opacity: 0;
}
:deep(.van-swipe__indicator:not(.van-swipe__indicator--active) ) {
background: rgba(0, 0, 0, 0.8);
}
.changeLive {
width: 100%;
overflow: hidden;
transition: height 0.5s ease, transform 0.5s ease;
}
.changeLive.collapsed {
height: 188px;
}
.changeLive.expanded {
height: calc(100vh - var(--van-nav-bar-height));
transform: translateY(0);
}
</style>

View File

@ -44,7 +44,7 @@ definePageMeta({
<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 class="text-[#fdc181ff] line-height-none">成交价RMB 10,000</div>
</div>
</div>
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 995 B

7
app/stores/home/index.js Normal file
View File

@ -0,0 +1,7 @@
import { createGlobalState } from '@vueuse/core'
export const homeStore = createGlobalState(() => {
const fullLive=ref(false)
return{
fullLive
}
})

View File

@ -12,7 +12,6 @@
"404Demo": "🙅 Page 404 Demo",
"unocssExample": "🎨 Unocss example",
"keepAlive": "🧡 KeepAlive Demo",
"persistPiniaState": "💾 Persist Pinia State",
"fetch": "🏄 Network Request"
},
"tabbar": {

View File

@ -1,8 +1,6 @@
import process from 'node:process'
import { appDescription } from './app/constants/index'
import preload from './app/utils/preload'
import { currentLocales } from './i18n/i18n'
export default defineNuxtConfig({
hooks: {
@ -23,8 +21,6 @@ export default defineNuxtConfig({
'@unocss/nuxt',
'@nuxtjs/color-mode',
'@nuxtjs/i18n',
'@pinia/nuxt',
'pinia-plugin-persistedstate/nuxt',
],
runtimeConfig: {
public: {
@ -135,12 +131,6 @@ export default defineNuxtConfig({
inlineStyles: false,
},
eslint: {
config: {
standalone: false,
},
},
future: {
compatibilityVersion: 4,
},

View File

@ -5,7 +5,10 @@
"packageManager": "pnpm@9.15.1",
"scripts": {
"build": "nuxt build",
"dev": "nuxt dev",
"dev": "nuxt dev --mode test",
"dev:prod": "nuxt dev --mode prod",
"build:test": "nuxt build --mode test",
"build:prod": "nuxt build --mode prod",
"generate": "nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare",
@ -16,8 +19,8 @@
"@nuxtjs/color-mode": "^3.5.2",
"@nuxtjs/i18n": "^9.1.1",
"@vueuse/core": "^12.4.0",
"aliyun-aliplayer": "^2.28.5",
"nuxt": "^3.15.0",
"pinia-plugin-persistedstate": "^4.2.0",
"pinyin": "4.0.0-alpha.2",
"segmentit": "^2.0.3",
"vue": "^3.5.13",
@ -25,12 +28,10 @@
},
"devDependencies": {
"@iconify-json/carbon": "^1.2.5",
"@pinia/nuxt": "^0.9.0",
"@unocss/nuxt": "0.65.2",
"@unocss/preset-rem-to-px": "0.65.2",
"@vant/nuxt": "^1.0.6",
"bumpp": "^9.9.2",
"pinia": "^2.3.0",
"postcss-mobile-forever": "^4.3.1",
"sass": "^1.83.1",
"sass-loader": "^16.0.4",

View File

@ -20,12 +20,12 @@ importers:
'@vueuse/core':
specifier: ^12.4.0
version: 12.4.0(typescript@5.7.2)
aliyun-aliplayer:
specifier: ^2.28.5
version: 2.28.5
nuxt:
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)
pinia-plugin-persistedstate:
specifier: ^4.2.0
version: 4.2.0(@pinia/nuxt@0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)))(rollup@4.29.1))(magicast@0.3.5)(pinia@2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)))(rollup@4.29.1)
pinyin:
specifier: 4.0.0-alpha.2
version: 4.0.0-alpha.2(segmentit@2.0.3)
@ -42,9 +42,6 @@ importers:
'@iconify-json/carbon':
specifier: ^1.2.5
version: 1.2.5
'@pinia/nuxt':
specifier: ^0.9.0
version: 0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)))(rollup@4.29.1)
'@unocss/nuxt':
specifier: 0.65.2
version: 0.65.2(magicast@0.3.5)(postcss@8.4.49)(rollup@4.29.1)(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))(vue@3.5.13(typescript@5.7.2))(webpack@5.97.1(esbuild@0.24.2))
@ -57,9 +54,6 @@ importers:
bumpp:
specifier: ^9.9.2
version: 9.9.2(magicast@0.3.5)
pinia:
specifier: ^2.3.0
version: 2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))
postcss-mobile-forever:
specifier: ^4.3.1
version: 4.3.1(postcss@8.4.49)
@ -1026,11 +1020,6 @@ packages:
resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==}
engines: {node: '>= 10.0.0'}
'@pinia/nuxt@0.9.0':
resolution: {integrity: sha512-2yeRo7LeyCF68AbNeL3xu2h6uw0617RkcsYxmA8DJM0R0PMdz5wQHnc44KeENQxR/Mrq8T910XVT6buosqsjBQ==}
peerDependencies:
pinia: ^2.3.0
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@ -1609,6 +1598,9 @@ packages:
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
aliyun-aliplayer@2.28.5:
resolution: {integrity: sha512-UDy4Fj95fv/Syy0p8HRmYUGqadJHLuvucHEeJu6G71uHch87bllnaOI1r++ndfWu36oZph+dbArnP2eowR/Xsg==}
ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
@ -1904,6 +1896,9 @@ packages:
crossws@0.3.1:
resolution: {integrity: sha512-HsZgeVYaG+b5zA+9PbIPGq4+J/CJynJuearykPsXx4V/eMhyQ5EDVg3Ak2FBZtVXCiOLu/U7IiwDHTr9MA+IKw==}
crypto-js@4.2.0:
resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
css-declaration-sorter@7.2.0:
resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==}
engines: {node: ^14 || ^16 || >=18}
@ -1999,9 +1994,6 @@ packages:
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
deep-pick-omit@1.2.1:
resolution: {integrity: sha512-2J6Kc/m3irCeqVG42T+SaUMesaK7oGWaedGnQQK/+O0gYc+2SP5bKh/KKTE7d7SJ+GCA9UUE1GRzh6oDe0EnGw==}
deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
@ -3104,26 +3096,6 @@ packages:
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
engines: {node: '>=12'}
pinia-plugin-persistedstate@4.2.0:
resolution: {integrity: sha512-3buhA7ac+ssbOIx3VRCC8oHkoFwhDM9oHRCjo7nj+O8WUqnW+jRqh7eYT5eS/DNa3H28zp3dYf/nd/Vc8zj8eQ==}
peerDependencies:
'@pinia/nuxt': '>=0.9.0'
pinia: '>=2.3.0'
peerDependenciesMeta:
'@pinia/nuxt':
optional: true
pinia:
optional: true
pinia@2.3.0:
resolution: {integrity: sha512-ohZj3jla0LL0OH5PlLTDMzqKiVw2XARmC1XYLdLWIPBMdhDW/123ZWr4zVAhtJm+aoSkFa13pYXskAvAscIkhQ==}
peerDependencies:
typescript: '>=4.4.4'
vue: ^2.7.0 || ^3.5.11
peerDependenciesMeta:
typescript:
optional: true
pinyin@4.0.0-alpha.2:
resolution: {integrity: sha512-SED2wWr1X0QwH6rXIDgg20zS1mAk0AVMO8eM3KomUlOYzC8mNMWZnspZWhhI0M8MBIbF2xwa+5r30jTSjAqNsg==}
engines: {install-node: ^18.0.0}
@ -4074,17 +4046,6 @@ packages:
vue-bundle-renderer@2.1.1:
resolution: {integrity: sha512-+qALLI5cQncuetYOXp4yScwYvqh8c6SMXee3B+M7oTZxOgtESP0l4j/fXdEJoZ+EdMxkGWIj+aSEyjXkOdmd7g==}
vue-demi@0.14.10:
resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
engines: {node: '>=12'}
hasBin: true
peerDependencies:
'@vue/composition-api': ^1.0.0-rc.1
vue: ^3.0.0-0 || ^2.6.0
peerDependenciesMeta:
'@vue/composition-api':
optional: true
vue-devtools-stub@0.1.0:
resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==}
@ -5210,15 +5171,6 @@ snapshots:
'@parcel/watcher-win32-ia32': 2.5.0
'@parcel/watcher-win32-x64': 2.5.0
'@pinia/nuxt@0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)))(rollup@4.29.1)':
dependencies:
'@nuxt/kit': 3.15.0(magicast@0.3.5)(rollup@4.29.1)
pinia: 2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))
transitivePeerDependencies:
- magicast
- rollup
- supports-color
'@pkgjs/parseargs@0.11.0':
optional: true
@ -5979,6 +5931,10 @@ snapshots:
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
aliyun-aliplayer@2.28.5:
dependencies:
crypto-js: 4.2.0
ansi-colors@4.1.3: {}
ansi-escapes@4.3.2:
@ -6289,6 +6245,8 @@ snapshots:
dependencies:
uncrypto: 0.1.3
crypto-js@4.2.0: {}
css-declaration-sorter@7.2.0(postcss@8.4.49):
dependencies:
postcss: 8.4.49
@ -6384,8 +6342,6 @@ snapshots:
deep-is@0.1.4: {}
deep-pick-omit@1.2.1: {}
deepmerge@4.3.1: {}
default-browser-id@5.0.0: {}
@ -7698,30 +7654,6 @@ snapshots:
picomatch@4.0.2: {}
pinia-plugin-persistedstate@4.2.0(@pinia/nuxt@0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)))(rollup@4.29.1))(magicast@0.3.5)(pinia@2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)))(rollup@4.29.1):
dependencies:
'@nuxt/kit': 3.15.0(magicast@0.3.5)(rollup@4.29.1)
deep-pick-omit: 1.2.1
defu: 6.1.4
destr: 2.0.3
optionalDependencies:
'@pinia/nuxt': 0.9.0(magicast@0.3.5)(pinia@2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)))(rollup@4.29.1)
pinia: 2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))
transitivePeerDependencies:
- magicast
- rollup
- supports-color
pinia@2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)):
dependencies:
'@vue/devtools-api': 6.6.4
vue: 3.5.13(typescript@5.7.2)
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2))
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- '@vue/composition-api'
pinyin@4.0.0-alpha.2(segmentit@2.0.3):
dependencies:
commander: 1.1.1
@ -8678,10 +8610,6 @@ snapshots:
dependencies:
ufo: 1.5.4
vue-demi@0.14.10(vue@3.5.13(typescript@5.7.2)):
dependencies:
vue: 3.5.13(typescript@5.7.2)
vue-devtools-stub@0.1.0: {}
vue-flow-layout@0.1.1(vue@3.5.13(typescript@5.7.2)):