Compare commits
5
Commits
10b19a3311
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
018d1d0b2a
|
||
|
|
263f8ef8d3
|
||
|
|
6ccbec1f82
|
||
|
|
5b2d25fe78
|
||
|
|
8fc5ef572c
|
Vendored
+1
@@ -10,6 +10,7 @@ declare module '@vue/runtime-core' {
|
|||||||
CaptchaPanel: typeof import('./src/components/CaptchaPanel.vue')['default']
|
CaptchaPanel: typeof import('./src/components/CaptchaPanel.vue')['default']
|
||||||
ElAside: typeof import('element-plus/es')['ElAside']
|
ElAside: typeof import('element-plus/es')['ElAside']
|
||||||
ElButton: typeof import('element-plus/es')['ElButton']
|
ElButton: typeof import('element-plus/es')['ElButton']
|
||||||
|
ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
|
||||||
ElCard: typeof import('element-plus/es')['ElCard']
|
ElCard: typeof import('element-plus/es')['ElCard']
|
||||||
ElCheckboxButton: typeof import('element-plus/es')['ElCheckboxButton']
|
ElCheckboxButton: typeof import('element-plus/es')['ElCheckboxButton']
|
||||||
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
|
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
|
||||||
|
|||||||
Generated
+775
-791
File diff suppressed because it is too large
Load Diff
+2
-6
@@ -21,16 +21,12 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^25.6.0",
|
"@types/node": "^25.6.0",
|
||||||
"@vitejs/plugin-vue": "^5.2.4",
|
"@vitejs/plugin-vue": "^6.0.7",
|
||||||
"less": "^4.6.4",
|
"less": "^4.6.4",
|
||||||
"typescript": "^5.4.0",
|
"typescript": "^5.4.0",
|
||||||
"unplugin-auto-import": "^0.12.1",
|
"unplugin-auto-import": "^0.12.1",
|
||||||
"unplugin-vue-components": "^0.22.12",
|
"unplugin-vue-components": "^0.22.12",
|
||||||
"vite": "^5.4.19"
|
"vite": "^8.0.13"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"postcss": ">=8.4.31",
|
|
||||||
"serialize-javascript": ">=7.0.5"
|
|
||||||
},
|
},
|
||||||
"browserslist": [
|
"browserslist": [
|
||||||
"> 1%",
|
"> 1%",
|
||||||
|
|||||||
+32
-18
@@ -5,12 +5,12 @@
|
|||||||
<el-input v-model="search.title" />
|
<el-input v-model="search.title" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="所属歌单">
|
<el-form-item label="所属歌单">
|
||||||
<el-select v-model="search.libIds" multiple collapse-tags>
|
<el-select v-model="search.libIds" multiple collapse-tags clearable>
|
||||||
<el-option v-for="musicLib in musicLibs" :key="musicLib._id" :value="musicLib._id" :label="musicLib.name" />
|
<el-option v-for="musicLib in musicLibs" :key="musicLib._id" :value="musicLib._id" :label="musicLib.name" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="文件类型">
|
<el-form-item label="文件类型">
|
||||||
<el-select v-model="search.exts" multiple >
|
<el-select v-model="search.exts" multiple collapse-tags clearable>
|
||||||
<el-option v-for="ext in exts" :key="ext" :value="ext" :label="ext" />
|
<el-option v-for="ext in exts" :key="ext" :value="ext" :label="ext" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -108,9 +108,9 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<el-dialog v-model="uploadModal" title="上传音乐" :width="550" @closed="uploadModalClosed" >
|
<el-dialog v-model="uploadModal" title="上传音乐" :width="550" @closed="uploadModalClosed" >
|
||||||
<el-form :label-width="80">
|
<el-form ref="uploadForm" :model="uploadFormData" :rules="uploadRules" :label-width="80">
|
||||||
<el-form-item label="歌单">
|
<el-form-item label="歌单" prop="libId">
|
||||||
<el-select v-model="libIdSelected">
|
<el-select v-model="uploadFormData.libId">
|
||||||
<el-option v-for="musicLib in musicLibs" :key="musicLib._id" :value="musicLib._id" :label="musicLib.name" />
|
<el-option v-for="musicLib in musicLibs" :key="musicLib._id" :value="musicLib._id" :label="musicLib.name" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -118,20 +118,23 @@
|
|||||||
ref="musicUpload"
|
ref="musicUpload"
|
||||||
:action="`${apiBase}/music/upload`"
|
:action="`${apiBase}/music/upload`"
|
||||||
name="file"
|
name="file"
|
||||||
accept=".mp3,.flac"
|
:accept="uploadAccept"
|
||||||
:headers="{token: store.state.loginInfo.token}"
|
:headers="{token: store.state.loginInfo.token}"
|
||||||
:on-success="uploadSuccess"
|
:on-success="uploadSuccess"
|
||||||
:on-error="uploadError"
|
:on-error="uploadError"
|
||||||
:auto-upload="false"
|
:auto-upload="false"
|
||||||
multiple
|
multiple
|
||||||
drag
|
drag
|
||||||
:data="{libId: libIdSelected}">
|
:data="{libId: uploadFormData.libId}">
|
||||||
<div class="el-upload__text">
|
<div class="el-upload__text">
|
||||||
拖拽到此处或<em>点击上传</em>
|
拖拽到此处或<em>点击上传</em>
|
||||||
</div>
|
</div>
|
||||||
<template #tip>
|
<template #tip>
|
||||||
<div class="el-upload__tip">
|
<div class="el-upload__tip" style="display: flex; align-items: center; gap: 5px;">
|
||||||
可选择 mp3/flac 文件
|
<span>支持上传的文件类型</span>
|
||||||
|
<el-tag v-for="ext in uploadExtList" :key="ext" size="small">
|
||||||
|
{{ ext }}<span v-if="ext === 'ncm'"> (自动解码)</span>
|
||||||
|
</el-tag>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-upload>
|
</el-upload>
|
||||||
@@ -190,7 +193,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, watch } from 'vue'
|
import { ref, watch, computed } from 'vue'
|
||||||
import { useStore } from 'vuex'
|
import { useStore } from 'vuex'
|
||||||
import { useBaseList } from '@/model/baselist'
|
import { useBaseList } from '@/model/baselist'
|
||||||
import { MsgResult, Page } from '@/model/common.dto'
|
import { MsgResult, Page } from '@/model/common.dto'
|
||||||
@@ -228,7 +231,8 @@ const store = useStore()
|
|||||||
const apiBase = import.meta.env.VITE_APP_API_BASE
|
const apiBase = import.meta.env.VITE_APP_API_BASE
|
||||||
const { loading, modalLoading, total, search, setLoadData, loadDataBase, reset, pageChange, pageSizeChange } = useBaseList(new MusicPage())
|
const { loading, modalLoading, total, search, setLoadData, loadDataBase, reset, pageChange, pageSizeChange } = useBaseList(new MusicPage())
|
||||||
const currentRow = ref<MusicModel | null>(null)
|
const currentRow = ref<MusicModel | null>(null)
|
||||||
const libIdSelected = ref<string | null>(null)
|
const uploadFormData = ref<{ libId: string | null }>({ libId: null })
|
||||||
|
const uploadForm = ref<VForm>()
|
||||||
const exts = ref<string[]>([])
|
const exts = ref<string[]>([])
|
||||||
const musicLibs = ref<MusicLibModel[]>([])
|
const musicLibs = ref<MusicLibModel[]>([])
|
||||||
const musicData = ref<MusicModel[]>([])
|
const musicData = ref<MusicModel[]>([])
|
||||||
@@ -246,6 +250,17 @@ const libDrawerVisible = ref(false)
|
|||||||
const libTableData = ref<(MusicLibModel & { _isNew?: boolean })[]>([])
|
const libTableData = ref<(MusicLibModel & { _isNew?: boolean })[]>([])
|
||||||
const libSaving = ref(false)
|
const libSaving = ref(false)
|
||||||
|
|
||||||
|
const uploadRules = {
|
||||||
|
libId: [{ required: true, message: '请选择歌单', trigger: 'change' }]
|
||||||
|
}
|
||||||
|
|
||||||
|
const uploadExtList = computed(() => {
|
||||||
|
return Array.from(new Set([...exts.value, 'ncm']))
|
||||||
|
})
|
||||||
|
const uploadAccept = computed(() => {
|
||||||
|
return uploadExtList.value.map(ext => `.${ext}`).join(',')
|
||||||
|
})
|
||||||
|
|
||||||
const lyricRuleValidate = {
|
const lyricRuleValidate = {
|
||||||
cloudId: [
|
cloudId: [
|
||||||
{ required: true, message: '请输入网易云ID', trigger: 'blur' }
|
{ required: true, message: '请输入网易云ID', trigger: 'blur' }
|
||||||
@@ -261,7 +276,7 @@ const lyricRuleValidate = {
|
|||||||
let selectedIds: string[] = []
|
let selectedIds: string[] = []
|
||||||
|
|
||||||
watch(() => currentMusic.value, async (newMusic) => {
|
watch(() => currentMusic.value, async (newMusic) => {
|
||||||
if (newMusic && !newMusic.lrc) {
|
if (newMusic?.lyricId && !newMusic?.lrc) {
|
||||||
const { lyric } = await http.get<any, any>('/music/lyric/get', {params: {lyricId: newMusic.lyricId}})
|
const { lyric } = await http.get<any, any>('/music/lyric/get', {params: {lyricId: newMusic.lyricId}})
|
||||||
newMusic.lrc = lyric
|
newMusic.lrc = lyric
|
||||||
}
|
}
|
||||||
@@ -360,14 +375,13 @@ async function saveMusicLib(row: MusicModel) {
|
|||||||
}
|
}
|
||||||
function openUploadModal() {
|
function openUploadModal() {
|
||||||
uploadModal.value = true
|
uploadModal.value = true
|
||||||
libIdSelected.value = null
|
uploadFormData.value = { libId: null }
|
||||||
}
|
}
|
||||||
async function uploadMusic() {
|
async function uploadMusic() {
|
||||||
if (!libIdSelected.value) {
|
uploadForm.value?.validate((valid: boolean) => {
|
||||||
ElMessage.warning('请选择歌单')
|
if (!valid) return
|
||||||
return
|
musicUpload.value?.submit()
|
||||||
}
|
})
|
||||||
musicUpload.value?.submit()
|
|
||||||
}
|
}
|
||||||
function uploadSuccess(response: MsgResult) {
|
function uploadSuccess(response: MsgResult) {
|
||||||
if (response.code === 0) {
|
if (response.code === 0) {
|
||||||
|
|||||||
+390
-129
@@ -1,175 +1,436 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="page-wrapper">
|
<div class="page-wrapper" ref="rootEl">
|
||||||
<el-form inline :model="search">
|
|
||||||
<el-form-item label="文件名">
|
<!-- 操作栏 -->
|
||||||
<el-input v-model="search.name" />
|
<div class="btn-container">
|
||||||
</el-form-item>
|
<el-upload
|
||||||
<el-form-item label="宽度" >
|
:action="`${apiBase}/photoWall/upload`"
|
||||||
<el-input-number v-model="search.widthMin" :min="0" controls-position="right" step-strictly>
|
accept="image/jpeg,image/png"
|
||||||
<template #prefix>≥</template>
|
name="image"
|
||||||
<template #suffix>px</template>
|
:headers="{ token: store.state.loginInfo.token }"
|
||||||
</el-input-number>
|
:before-upload="beforeUpload"
|
||||||
<el-input-number v-model="search.widthMax" :min="0" controls-position="right" step-strictly>
|
:on-success="uploadSuccess"
|
||||||
<template #prefix>≤</template>
|
:on-error="uploadError"
|
||||||
<template #suffix>px</template>
|
auto-upload
|
||||||
</el-input-number>
|
:show-file-list="false"
|
||||||
</el-form-item>
|
style="margin-right: 10px;">
|
||||||
<el-form-item label="高度" >
|
<el-tooltip :content="`图片格式为${allowUploadExt.join('、')},文件大小不超过10MB。`">
|
||||||
<el-input-number v-model="search.heightMin" :min="0" controls-position="right" step-strictly>
|
<el-button type="primary" icon="Upload" :loading="isUploading" v-permission="'photoWall:save'" plain>上传图片</el-button>
|
||||||
<template #prefix>≥</template>
|
</el-tooltip>
|
||||||
<template #suffix>px</template>
|
</el-upload>
|
||||||
</el-input-number>
|
<el-button
|
||||||
<el-input-number v-model="search.heightMax" :min="0" controls-position="right" step-strictly>
|
v-if="selected.size > 0"
|
||||||
<template #prefix>≤</template>
|
type="danger"
|
||||||
<template #suffix>px</template>
|
icon="Delete"
|
||||||
</el-input-number>
|
plain
|
||||||
</el-form-item>
|
v-permission="'photoWall:delete'"
|
||||||
</el-form>
|
@click="deleteSelected">
|
||||||
<div class="btn-container">
|
删除选中 ({{ selected.size }})
|
||||||
<el-upload
|
</el-button>
|
||||||
:action="`${apiBase}/photoWall/upload`"
|
<div class="search-btn">
|
||||||
accept="image/jpeg,image/png"
|
<el-button link type="primary" :disabled="!photos.length" @click="selectAll" v-if="!isAllSelected">全选</el-button>
|
||||||
name="image"
|
<el-button link type="primary" @click="clearSelect" v-else>取消全选</el-button>
|
||||||
:headers="{token: store.state.loginInfo.token}"
|
<el-button link type="primary" :disabled="!photos.length" @click="invertSelect">反选</el-button>
|
||||||
:before-upload="beforeUpload"
|
</div>
|
||||||
:on-success="uploadSuccess"
|
|
||||||
:on-error="uploadError"
|
|
||||||
auto-upload
|
|
||||||
:show-file-list="false"
|
|
||||||
style="display: inline-block;margin-right: 10px;">
|
|
||||||
<el-tooltip :content="`图片格式为${allowUploadExt.join('、')},文件大小不超过10MB。`">
|
|
||||||
<el-button type="primary" icon="Upload" :loading="isUploading" v-permission="'photoWall:save'" plain>上传图片</el-button>
|
|
||||||
</el-tooltip>
|
|
||||||
</el-upload>
|
|
||||||
<el-button type="danger" @click="deleteAll" style="vertical-align: bottom" v-permission="'photoWall:delete'" plain>批量删除</el-button>
|
|
||||||
<div class="search-btn">
|
|
||||||
<el-button type="primary" @click="loadDataBase(true)" icon="Search" plain>搜索</el-button>
|
|
||||||
<el-button @click="reset" icon="RefreshLeft" plain>重置</el-button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- 瀑布流(可滚动区域) -->
|
||||||
|
<div class="masonry-scroll">
|
||||||
|
<div class="masonry-scene">
|
||||||
|
<div
|
||||||
|
v-for="(col, ci) in columns"
|
||||||
|
:key="ci"
|
||||||
|
class="masonry-col">
|
||||||
|
<div
|
||||||
|
v-for="item in col"
|
||||||
|
:key="item._id"
|
||||||
|
class="card-wrap"
|
||||||
|
:class="{ 'is-selected': selected.has(item._id), 'is-entered': entered.has(item._id) }"
|
||||||
|
@click="toggleSelect(item)">
|
||||||
|
|
||||||
|
<div class="card-inner">
|
||||||
|
<!-- 图片 -->
|
||||||
|
<img
|
||||||
|
class="card-img"
|
||||||
|
:src="cdnBase ? `${cdnBase}/${item.thumbnail || item.name}` : ''"
|
||||||
|
:alt="item.name"
|
||||||
|
loading="lazy"
|
||||||
|
draggable="false" />
|
||||||
|
|
||||||
|
<!-- 选中角标 -->
|
||||||
|
<div class="check-badge">
|
||||||
|
<el-icon><Check /></el-icon>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Hover 浮层 -->
|
||||||
|
<div class="card-overlay">
|
||||||
|
<div class="overlay-info">
|
||||||
|
<p class="overlay-name" :title="item.name">{{ item.name }}</p>
|
||||||
|
<p class="overlay-size">{{ item.width }} × {{ item.height }}</p>
|
||||||
|
</div>
|
||||||
|
<el-button-group class="overlay-actions">
|
||||||
|
<el-button size="small" icon="View" plain @click.stop="preview(item)">预览</el-button>
|
||||||
|
<el-button
|
||||||
|
size="small"
|
||||||
|
icon="Delete"
|
||||||
|
type="danger"
|
||||||
|
plain
|
||||||
|
v-permission="'photoWall:delete'"
|
||||||
|
@click.stop="deleteSingle(item)">
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</el-button-group>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 分页 -->
|
||||||
|
<div class="page-container">
|
||||||
|
<el-pagination
|
||||||
|
background
|
||||||
|
:page-sizes="store.state.pageSizeOpts"
|
||||||
|
:layout="store.state.pageLayout"
|
||||||
|
:current-page="search.pageNum"
|
||||||
|
:page-size="search.limit"
|
||||||
|
:total="total"
|
||||||
|
@size-change="pageSizeChange"
|
||||||
|
@current-change="pageChange" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 图片预览 -->
|
||||||
|
<el-image-viewer
|
||||||
|
v-if="previewVisible"
|
||||||
|
:url-list="previewUrls"
|
||||||
|
:initial-index="previewIndex"
|
||||||
|
@close="previewVisible = false" />
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-table class="table-container" :data="photowallData" v-loading="loading" stripe @selection-change="dataSelect">
|
|
||||||
<el-table-column type="selection" width="55" />
|
|
||||||
<el-table-column prop="name" label="文件名" />
|
|
||||||
<el-table-column prop="md5" label="md5" width="300" />
|
|
||||||
<el-table-column prop="thumbnail" label="缩略图" />
|
|
||||||
<el-table-column prop="width" label="宽度" width="70" />
|
|
||||||
<el-table-column prop="height" label="高度" width="70" />
|
|
||||||
<el-table-column label="操作" width="100" >
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button link icon="View" @click="preview(scope.row)" title="预览"></el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<div class="page-container">
|
|
||||||
<el-pagination background
|
|
||||||
:page-sizes="store.state.pageSizeOpts"
|
|
||||||
:layout="store.state.pageLayout"
|
|
||||||
:current-page="search.pageNum"
|
|
||||||
:total="total"
|
|
||||||
@size-change="pageSizeChange"
|
|
||||||
@current-change="pageChange">
|
|
||||||
</el-pagination>
|
|
||||||
</div>
|
|
||||||
<el-image-viewer
|
|
||||||
v-if="previewVisible"
|
|
||||||
:url-list="previewUrlList"
|
|
||||||
:initial-index="previewIndex"
|
|
||||||
@close="previewVisible = false"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue'
|
import { ref, computed, onMounted, onBeforeUnmount, nextTick } from 'vue'
|
||||||
import { useStore } from 'vuex'
|
import { useStore } from 'vuex'
|
||||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
import { MsgResult, Page } from '@/model/common.dto'
|
import type { MsgResult } from '@/model/common.dto'
|
||||||
|
import { Page } from '@/model/common.dto'
|
||||||
import { useBaseList } from '@/model/baselist'
|
import { useBaseList } from '@/model/baselist'
|
||||||
import PhotoWallModel from '@/model/api/photowall'
|
import type PhotoWallModel from '@/model/api/photowall'
|
||||||
import http from '@/utils/http'
|
import http from '@/utils/http'
|
||||||
|
|
||||||
class PhotoWallPage extends Page {
|
// ─── 常量 ─────────────────────────────────────────────
|
||||||
name?: string
|
const COLUMN_WIDTH = 220 // 每列目标宽度(px)
|
||||||
widthMin!: number | null
|
const COL_GAP = 14 // 列间距(px)
|
||||||
widthMax!: number | null
|
|
||||||
heightMin!: number | null
|
|
||||||
heightMax!: number | null
|
|
||||||
reset() {
|
|
||||||
super.reset()
|
|
||||||
this.name = undefined
|
|
||||||
this.widthMin = null
|
|
||||||
this.widthMax = null
|
|
||||||
this.heightMin = null
|
|
||||||
this.heightMax = null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// ─── 基础状态 ─────────────────────────────────────────
|
||||||
const store = useStore()
|
const store = useStore()
|
||||||
const apiBase = import.meta.env.VITE_APP_API_BASE
|
const apiBase = import.meta.env.VITE_APP_API_BASE
|
||||||
const { loading, total, search, setLoadData, loadDataBase, reset, pageChange, pageSizeChange } = useBaseList(new PhotoWallPage())
|
const rootEl = ref<HTMLElement | null>(null)
|
||||||
|
const photos = ref<PhotoWallModel[]>([])
|
||||||
const allowUploadExt = ['jpg', 'jpeg', 'png']
|
|
||||||
const photowallData = ref<PhotoWallModel[]>([])
|
|
||||||
const isUploading = ref(false)
|
const isUploading = ref(false)
|
||||||
|
const allowUploadExt = ['jpg', 'jpeg', 'png']
|
||||||
|
|
||||||
|
class GalleryPage extends Page {
|
||||||
|
constructor() { super(); this.limit = 50 }
|
||||||
|
}
|
||||||
|
const { loading, total, search, setLoadData, pageChange, pageSizeChange } = useBaseList(new GalleryPage())
|
||||||
|
|
||||||
|
const cdnBase = ref('')
|
||||||
|
const selected = ref<Set<string>>(new Set())
|
||||||
|
const entered = ref<Set<string>>(new Set())
|
||||||
const previewVisible = ref(false)
|
const previewVisible = ref(false)
|
||||||
const previewUrlList = ref<string[]>([])
|
const previewUrls = ref<string[]>([])
|
||||||
const previewIndex = ref(0)
|
const previewIndex = ref(0)
|
||||||
|
|
||||||
let selectedData: string[] = []
|
// ─── 瀑布流分列 ───────────────────────────────────────
|
||||||
|
const colCount = ref(4)
|
||||||
|
|
||||||
|
function recalcCols() {
|
||||||
|
if (!rootEl.value) return
|
||||||
|
const w = rootEl.value.clientWidth - 32
|
||||||
|
colCount.value = Math.max(1, Math.floor((w + COL_GAP) / (COLUMN_WIDTH + COL_GAP)))
|
||||||
|
}
|
||||||
|
|
||||||
|
const columns = computed<PhotoWallModel[][]>(() => {
|
||||||
|
const cols: PhotoWallModel[][] = Array.from({ length: colCount.value }, () => [])
|
||||||
|
photos.value.forEach((item, i) => {
|
||||||
|
cols[i % colCount.value].push(item)
|
||||||
|
})
|
||||||
|
return cols
|
||||||
|
})
|
||||||
|
|
||||||
|
// ─── 数据加载 ─────────────────────────────────────────
|
||||||
async function loadData() {
|
async function loadData() {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
const data = await http.get<PhotoWallPage, any>('/photoWall/list', {params: search})
|
entered.value = new Set()
|
||||||
selectedData = []
|
try {
|
||||||
loading.value = false
|
if (!cdnBase.value) {
|
||||||
total.value = data.total
|
cdnBase.value = await http.get('/common/config/picture_cdn')
|
||||||
photowallData.value = data.list
|
}
|
||||||
|
const data = await http.get<any, any>('/photoWall/list', {
|
||||||
|
params: { pageNum: search.pageNum, limit: search.limit }
|
||||||
|
})
|
||||||
|
total.value = data.total
|
||||||
|
photos.value = data.list as PhotoWallModel[]
|
||||||
|
previewUrls.value = photos.value.map(item => `${cdnBase.value}/${item.name}`)
|
||||||
|
await nextTick()
|
||||||
|
entered.value = new Set(photos.value.map(p => p._id))
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
setLoadData(loadData)
|
setLoadData(loadData)
|
||||||
|
|
||||||
function deleteAll() {
|
// ─── 选中 ─────────────────────────────────────────────
|
||||||
if (!selectedData || !selectedData.length) {
|
function toggleSelect(item: PhotoWallModel) {
|
||||||
ElMessage.warning('请选择要删除的数据')
|
const s = new Set(selected.value)
|
||||||
return
|
s.has(item._id) ? s.delete(item._id) : s.add(item._id)
|
||||||
}
|
selected.value = s
|
||||||
ElMessageBox.confirm(`是否确认删除选中的${selectedData.length}条数据?`, '确认删除', {type: 'warning'}).then(async () => {
|
|
||||||
await http.delete('/photoWall/delete', {params: {ids: selectedData}})
|
|
||||||
ElMessage.success('删除成功')
|
|
||||||
loadData()
|
|
||||||
}).catch(() => {})
|
|
||||||
}
|
}
|
||||||
function dataSelect(selection: PhotoWallModel[]) {
|
|
||||||
selectedData = selection.map(item => item._id)
|
function selectAll() {
|
||||||
|
selected.value = new Set(photos.value.map(p => p._id))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function invertSelect() {
|
||||||
|
const s = new Set<string>()
|
||||||
|
photos.value.forEach(p => {
|
||||||
|
if (!selected.value.has(p._id)) s.add(p._id)
|
||||||
|
})
|
||||||
|
selected.value = s
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearSelect() {
|
||||||
|
selected.value = new Set()
|
||||||
|
}
|
||||||
|
|
||||||
|
const isAllSelected = computed(() => photos.value.length && selected.value.size === photos.value.length)
|
||||||
|
|
||||||
|
// ─── 预览 ─────────────────────────────────────────────
|
||||||
|
function preview(item: PhotoWallModel) {
|
||||||
|
previewIndex.value = photos.value.findIndex(p => p._id === item._id) || 0
|
||||||
|
previewVisible.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── 删除 ─────────────────────────────────────────────
|
||||||
|
async function deleteSingle(item: PhotoWallModel) {
|
||||||
|
await ElMessageBox.confirm(`确认删除「${item.name}」?`, '确认删除', { type: 'warning' })
|
||||||
|
await http.delete('/photoWall/delete', { params: { ids: [item._id] } })
|
||||||
|
ElMessage.success('删除成功')
|
||||||
|
loadData()
|
||||||
|
}
|
||||||
|
|
||||||
|
async function deleteSelected() {
|
||||||
|
const ids = [...selected.value]
|
||||||
|
await ElMessageBox.confirm(`确认删除选中的 ${ids.length} 张图片?`, '确认删除', { type: 'warning' })
|
||||||
|
await http.delete('/photoWall/delete', { params: { ids } })
|
||||||
|
selected.value = new Set()
|
||||||
|
ElMessage.success('删除成功')
|
||||||
|
loadData()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── 上传 ─────────────────────────────────────────────
|
||||||
function beforeUpload(file: File): boolean {
|
function beforeUpload(file: File): boolean {
|
||||||
if (file.size > 10 << 20) {
|
if (file.size > 10 << 20) {
|
||||||
ElMessage.warning('文件大小超过10MB')
|
ElMessage.warning('文件大小超过 10MB')
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
isUploading.value = true
|
isUploading.value = true
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
function uploadSuccess(response: MsgResult) {
|
function uploadSuccess(response: MsgResult) {
|
||||||
|
isUploading.value = false
|
||||||
if (response.code === 0) {
|
if (response.code === 0) {
|
||||||
ElMessage.success('上传成功')
|
ElMessage.success('上传成功')
|
||||||
loadData()
|
loadData()
|
||||||
} else {
|
} else {
|
||||||
ElMessage.warning(response.message || '上传失败')
|
ElMessage.warning(response.message || '上传失败')
|
||||||
}
|
}
|
||||||
isUploading.value = false
|
|
||||||
}
|
}
|
||||||
function uploadError(error: Error) {
|
function uploadError(error: Error) {
|
||||||
isUploading.value = false
|
isUploading.value = false
|
||||||
ElMessage.error(error.message)
|
ElMessage.error(error.message)
|
||||||
}
|
}
|
||||||
async function preview(row: PhotoWallModel) {
|
|
||||||
const pictureCdn = await http.get('/common/config/picture_cdn')
|
// ─── 响应式列数 ───────────────────────────────────────
|
||||||
const index = photowallData.value.findIndex(item => item._id === row._id)
|
let resizeObserver: ResizeObserver | null = null
|
||||||
previewUrlList.value = photowallData.value.map(item => `${pictureCdn}/${item.name}`)
|
|
||||||
previewIndex.value = index >= 0 ? index : 0
|
onMounted(async () => {
|
||||||
previewVisible.value = true
|
recalcCols()
|
||||||
|
resizeObserver = new ResizeObserver(() => recalcCols())
|
||||||
|
if (rootEl.value) resizeObserver.observe(rootEl.value)
|
||||||
|
await loadData()
|
||||||
|
})
|
||||||
|
|
||||||
|
onBeforeUnmount(() => {
|
||||||
|
resizeObserver?.disconnect()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
// ─── 可滚动瀑布流区域 ─────────────────────────────────
|
||||||
|
.masonry-scroll {
|
||||||
|
flex: 1;
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
// created
|
.masonry-scene {
|
||||||
loadData()
|
display: flex;
|
||||||
</script>
|
gap: 14px;
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.masonry-col {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 14px;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── 卡片外壳(选中描边) ─────────────────────────────
|
||||||
|
.card-wrap {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(20px);
|
||||||
|
border-radius: 10px;
|
||||||
|
outline: 2px solid transparent;
|
||||||
|
outline-offset: 2px;
|
||||||
|
transition:
|
||||||
|
opacity 0.35s ease,
|
||||||
|
transform 0.35s ease,
|
||||||
|
outline-color 0.2s ease;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&.is-entered {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-selected {
|
||||||
|
outline-color: var(--el-color-primary);
|
||||||
|
|
||||||
|
.check-badge {
|
||||||
|
opacity: 1;
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover .card-overlay {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
&:hover .overlay-info {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
&:hover .overlay-actions {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── 卡片内容 ─────────────────────────────────────────
|
||||||
|
.card-inner {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
min-height: 80px;
|
||||||
|
border-radius: 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
background: var(--el-fill-color-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-img {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
border-radius: 10px;
|
||||||
|
transition: transform 0.4s ease;
|
||||||
|
|
||||||
|
.card-wrap:hover & {
|
||||||
|
transform: scale(1.04);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── 选中角标 ─────────────────────────────────────────
|
||||||
|
.check-badge {
|
||||||
|
position: absolute;
|
||||||
|
top: 8px;
|
||||||
|
right: 8px;
|
||||||
|
width: 22px;
|
||||||
|
height: 22px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: var(--el-color-primary);
|
||||||
|
color: #fff;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 13px;
|
||||||
|
opacity: 0;
|
||||||
|
transform: scale(0.5);
|
||||||
|
transition: opacity 0.2s ease, transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─── Hover 浮层 ───────────────────────────────────────
|
||||||
|
.card-overlay {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
border-radius: 10px;
|
||||||
|
background: linear-gradient(
|
||||||
|
to top,
|
||||||
|
rgba(0, 0, 0, 0.82) 0%,
|
||||||
|
rgba(0, 0, 0, 0.4) 55%,
|
||||||
|
rgba(0, 0, 0, 0.08) 100%
|
||||||
|
);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-end;
|
||||||
|
padding: 12px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(6px);
|
||||||
|
transition:
|
||||||
|
opacity 0.3s ease,
|
||||||
|
transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overlay-info {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(8px);
|
||||||
|
transition:
|
||||||
|
opacity 0.3s ease 0.04s,
|
||||||
|
transform 0.3s ease 0.04s;
|
||||||
|
|
||||||
|
.overlay-name {
|
||||||
|
margin: 0 0 3px;
|
||||||
|
font-size: 12px;
|
||||||
|
color: rgba(255, 255, 255, 0.85);
|
||||||
|
word-break: break-all;
|
||||||
|
display: -webkit-box;
|
||||||
|
line-clamp: 2;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
overflow: hidden;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overlay-size {
|
||||||
|
margin: 0 0 10px;
|
||||||
|
font-size: 12px;
|
||||||
|
color: rgba(255, 255, 255, 0.5);
|
||||||
|
letter-spacing: 0.5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.overlay-actions {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(8px);
|
||||||
|
transition:
|
||||||
|
opacity 0.3s ease 0.08s,
|
||||||
|
transform 0.3s ease 0.08s;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
:on-error="uploadError"
|
:on-error="uploadError"
|
||||||
auto-upload
|
auto-upload
|
||||||
:show-file-list="false"
|
:show-file-list="false"
|
||||||
style="display: inline-block;margin-right: 10px;">
|
style="margin-right: 10px;">
|
||||||
<el-tooltip :content="`图片格式为${allowUploadExt.join('、')},文件大小不超过10MB。`">
|
<el-tooltip :content="`图片格式为${allowUploadExt.join('、')},文件大小不超过10MB。`">
|
||||||
<el-button type="primary" icon="Upload" :loading="isUploading" v-permission="'sourceImage:save'" plain>上传图片</el-button>
|
<el-button type="primary" icon="Upload" :loading="isUploading" v-permission="'sourceImage:save'" plain>上传图片</el-button>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
|
|||||||
@@ -75,6 +75,9 @@ export default defineConfig(({ mode }) => {
|
|||||||
if (id.includes('/src/views/api/')) {
|
if (id.includes('/src/views/api/')) {
|
||||||
return 'api'
|
return 'api'
|
||||||
}
|
}
|
||||||
|
if (id.includes('/src/views/debug/')) {
|
||||||
|
return 'debug'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,11 +42,6 @@
|
|||||||
resolved "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz"
|
resolved "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz"
|
||||||
integrity sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==
|
integrity sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==
|
||||||
|
|
||||||
"@esbuild/win32-x64@0.21.5":
|
|
||||||
version "0.21.5"
|
|
||||||
resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz"
|
|
||||||
integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
|
|
||||||
|
|
||||||
"@floating-ui/core@^1.0.5":
|
"@floating-ui/core@^1.0.5":
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.1.0.tgz"
|
resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.1.0.tgz"
|
||||||
@@ -114,11 +109,26 @@
|
|||||||
"@nodelib/fs.scandir" "2.1.5"
|
"@nodelib/fs.scandir" "2.1.5"
|
||||||
fastq "^1.6.0"
|
fastq "^1.6.0"
|
||||||
|
|
||||||
|
"@oxc-project/types@=0.130.0":
|
||||||
|
version "0.130.0"
|
||||||
|
resolved "https://registry.npmjs.org/@oxc-project/types/-/types-0.130.0.tgz"
|
||||||
|
integrity sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==
|
||||||
|
|
||||||
"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7":
|
"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7":
|
||||||
version "2.11.7"
|
version "2.11.7"
|
||||||
resolved "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz"
|
resolved "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz"
|
||||||
integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==
|
integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==
|
||||||
|
|
||||||
|
"@rolldown/binding-darwin-arm64@1.0.1":
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.1.tgz"
|
||||||
|
integrity sha512-cKnAhWEsV7TPcA/5EAteDp6KcJZBQ2G+BqE7zayMMi7kMvwRsbv7WT9aOnn0WNl4SKEIf43vjS31iUPu80nzXg==
|
||||||
|
|
||||||
|
"@rolldown/pluginutils@^1.0.0", "@rolldown/pluginutils@^1.0.1":
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz"
|
||||||
|
integrity sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==
|
||||||
|
|
||||||
"@rollup/pluginutils@^5.0.2":
|
"@rollup/pluginutils@^5.0.2":
|
||||||
version "5.0.2"
|
version "5.0.2"
|
||||||
resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz"
|
resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz"
|
||||||
@@ -128,17 +138,7 @@
|
|||||||
estree-walker "^2.0.2"
|
estree-walker "^2.0.2"
|
||||||
picomatch "^2.3.1"
|
picomatch "^2.3.1"
|
||||||
|
|
||||||
"@rollup/rollup-win32-x64-gnu@4.60.2":
|
"@types/estree@^1.0.0":
|
||||||
version "4.60.2"
|
|
||||||
resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz"
|
|
||||||
integrity sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==
|
|
||||||
|
|
||||||
"@rollup/rollup-win32-x64-msvc@4.60.2":
|
|
||||||
version "4.60.2"
|
|
||||||
resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz"
|
|
||||||
integrity sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==
|
|
||||||
|
|
||||||
"@types/estree@^1.0.0", "@types/estree@1.0.8":
|
|
||||||
version "1.0.8"
|
version "1.0.8"
|
||||||
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz"
|
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz"
|
||||||
integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
|
integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
|
||||||
@@ -155,7 +155,7 @@
|
|||||||
resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz"
|
resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz"
|
||||||
integrity sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==
|
integrity sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==
|
||||||
|
|
||||||
"@types/node@^18.0.0 || >=20.0.0", "@types/node@^25.6.0":
|
"@types/node@^20.19.0 || >=22.12.0", "@types/node@^25.6.0":
|
||||||
version "25.6.0"
|
version "25.6.0"
|
||||||
resolved "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz"
|
resolved "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz"
|
||||||
integrity sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==
|
integrity sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==
|
||||||
@@ -167,10 +167,12 @@
|
|||||||
resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz"
|
resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz"
|
||||||
integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==
|
integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==
|
||||||
|
|
||||||
"@vitejs/plugin-vue@^5.2.4":
|
"@vitejs/plugin-vue@^6.0.7":
|
||||||
version "5.2.4"
|
version "6.0.7"
|
||||||
resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz"
|
resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.7.tgz"
|
||||||
integrity sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==
|
integrity sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==
|
||||||
|
dependencies:
|
||||||
|
"@rolldown/pluginutils" "^1.0.1"
|
||||||
|
|
||||||
"@vue/compiler-core@3.5.30":
|
"@vue/compiler-core@3.5.30":
|
||||||
version "3.5.30"
|
version "3.5.30"
|
||||||
@@ -284,6 +286,13 @@ acorn@^8.15.0, acorn@^8.8.1:
|
|||||||
resolved "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz"
|
resolved "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz"
|
||||||
integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==
|
integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==
|
||||||
|
|
||||||
|
agent-base@6:
|
||||||
|
version "6.0.2"
|
||||||
|
resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz"
|
||||||
|
integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
|
||||||
|
dependencies:
|
||||||
|
debug "4"
|
||||||
|
|
||||||
anymatch@~3.1.2:
|
anymatch@~3.1.2:
|
||||||
version "3.1.3"
|
version "3.1.3"
|
||||||
resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz"
|
resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz"
|
||||||
@@ -303,12 +312,13 @@ asynckit@^0.4.0:
|
|||||||
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
||||||
|
|
||||||
axios@^1.13.6:
|
axios@^1.13.6:
|
||||||
version "1.15.0"
|
version "1.16.1"
|
||||||
resolved "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz"
|
resolved "https://registry.npmjs.org/axios/-/axios-1.16.1.tgz"
|
||||||
integrity sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==
|
integrity sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==
|
||||||
dependencies:
|
dependencies:
|
||||||
follow-redirects "^1.15.11"
|
follow-redirects "^1.16.0"
|
||||||
form-data "^4.0.5"
|
form-data "^4.0.5"
|
||||||
|
https-proxy-agent "^5.0.1"
|
||||||
proxy-from-env "^2.1.0"
|
proxy-from-env "^2.1.0"
|
||||||
|
|
||||||
balanced-match@^1.0.0:
|
balanced-match@^1.0.0:
|
||||||
@@ -399,7 +409,7 @@ debug@^3.2.6:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms "^2.1.1"
|
ms "^2.1.1"
|
||||||
|
|
||||||
debug@^4.3.4:
|
debug@^4.3.4, debug@4:
|
||||||
version "4.4.3"
|
version "4.4.3"
|
||||||
resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz"
|
resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz"
|
||||||
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
|
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
|
||||||
@@ -411,6 +421,11 @@ delayed-stream@~1.0.0:
|
|||||||
resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
|
resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
|
||||||
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
|
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
|
||||||
|
|
||||||
|
detect-libc@^2.0.3:
|
||||||
|
version "2.1.2"
|
||||||
|
resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz"
|
||||||
|
integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==
|
||||||
|
|
||||||
dunder-proto@^1.0.1:
|
dunder-proto@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz"
|
resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz"
|
||||||
@@ -487,35 +502,6 @@ es-set-tostringtag@^2.1.0:
|
|||||||
has-tostringtag "^1.0.2"
|
has-tostringtag "^1.0.2"
|
||||||
hasown "^2.0.2"
|
hasown "^2.0.2"
|
||||||
|
|
||||||
esbuild@^0.21.3:
|
|
||||||
version "0.21.5"
|
|
||||||
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz"
|
|
||||||
integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==
|
|
||||||
optionalDependencies:
|
|
||||||
"@esbuild/aix-ppc64" "0.21.5"
|
|
||||||
"@esbuild/android-arm" "0.21.5"
|
|
||||||
"@esbuild/android-arm64" "0.21.5"
|
|
||||||
"@esbuild/android-x64" "0.21.5"
|
|
||||||
"@esbuild/darwin-arm64" "0.21.5"
|
|
||||||
"@esbuild/darwin-x64" "0.21.5"
|
|
||||||
"@esbuild/freebsd-arm64" "0.21.5"
|
|
||||||
"@esbuild/freebsd-x64" "0.21.5"
|
|
||||||
"@esbuild/linux-arm" "0.21.5"
|
|
||||||
"@esbuild/linux-arm64" "0.21.5"
|
|
||||||
"@esbuild/linux-ia32" "0.21.5"
|
|
||||||
"@esbuild/linux-loong64" "0.21.5"
|
|
||||||
"@esbuild/linux-mips64el" "0.21.5"
|
|
||||||
"@esbuild/linux-ppc64" "0.21.5"
|
|
||||||
"@esbuild/linux-riscv64" "0.21.5"
|
|
||||||
"@esbuild/linux-s390x" "0.21.5"
|
|
||||||
"@esbuild/linux-x64" "0.21.5"
|
|
||||||
"@esbuild/netbsd-x64" "0.21.5"
|
|
||||||
"@esbuild/openbsd-x64" "0.21.5"
|
|
||||||
"@esbuild/sunos-x64" "0.21.5"
|
|
||||||
"@esbuild/win32-arm64" "0.21.5"
|
|
||||||
"@esbuild/win32-ia32" "0.21.5"
|
|
||||||
"@esbuild/win32-x64" "0.21.5"
|
|
||||||
|
|
||||||
escape-string-regexp@^5.0.0:
|
escape-string-regexp@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz"
|
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz"
|
||||||
@@ -544,6 +530,11 @@ fastq@^1.6.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
reusify "^1.0.4"
|
reusify "^1.0.4"
|
||||||
|
|
||||||
|
fdir@^6.5.0:
|
||||||
|
version "6.5.0"
|
||||||
|
resolved "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz"
|
||||||
|
integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==
|
||||||
|
|
||||||
fill-range@^7.1.1:
|
fill-range@^7.1.1:
|
||||||
version "7.1.1"
|
version "7.1.1"
|
||||||
resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz"
|
resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz"
|
||||||
@@ -551,10 +542,10 @@ fill-range@^7.1.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
to-regex-range "^5.0.1"
|
to-regex-range "^5.0.1"
|
||||||
|
|
||||||
follow-redirects@^1.15.11:
|
follow-redirects@^1.16.0:
|
||||||
version "1.15.11"
|
version "1.16.0"
|
||||||
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz"
|
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz"
|
||||||
integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==
|
integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==
|
||||||
|
|
||||||
form-data@^4.0.5:
|
form-data@^4.0.5:
|
||||||
version "4.0.5"
|
version "4.0.5"
|
||||||
@@ -567,6 +558,11 @@ form-data@^4.0.5:
|
|||||||
hasown "^2.0.2"
|
hasown "^2.0.2"
|
||||||
mime-types "^2.1.12"
|
mime-types "^2.1.12"
|
||||||
|
|
||||||
|
fsevents@~2.3.2, fsevents@~2.3.3:
|
||||||
|
version "2.3.3"
|
||||||
|
resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"
|
||||||
|
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
|
||||||
|
|
||||||
function-bind@^1.1.2:
|
function-bind@^1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
|
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
|
||||||
@@ -637,6 +633,14 @@ hls.js@^1.6.15:
|
|||||||
resolved "https://registry.npmjs.org/hls.js/-/hls.js-1.6.15.tgz"
|
resolved "https://registry.npmjs.org/hls.js/-/hls.js-1.6.15.tgz"
|
||||||
integrity sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==
|
integrity sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==
|
||||||
|
|
||||||
|
https-proxy-agent@^5.0.1:
|
||||||
|
version "5.0.1"
|
||||||
|
resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz"
|
||||||
|
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
|
||||||
|
dependencies:
|
||||||
|
agent-base "6"
|
||||||
|
debug "4"
|
||||||
|
|
||||||
hyperdown@^2.4.31:
|
hyperdown@^2.4.31:
|
||||||
version "2.4.31"
|
version "2.4.31"
|
||||||
resolved "https://registry.npmjs.org/hyperdown/-/hyperdown-2.4.31.tgz"
|
resolved "https://registry.npmjs.org/hyperdown/-/hyperdown-2.4.31.tgz"
|
||||||
@@ -695,7 +699,7 @@ jsonc-parser@^3.2.0:
|
|||||||
resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz"
|
resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz"
|
||||||
integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
|
integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
|
||||||
|
|
||||||
less@*, less@^4.6.4:
|
less@^4.0.0, less@^4.6.4:
|
||||||
version "4.6.4"
|
version "4.6.4"
|
||||||
resolved "https://registry.npmjs.org/less/-/less-4.6.4.tgz"
|
resolved "https://registry.npmjs.org/less/-/less-4.6.4.tgz"
|
||||||
integrity sha512-OJmO5+HxZLLw0RLzkqaNHzcgEAQG7C0y3aMbwtCzIUFZsLMNNq/1IdAdHEycQ58CwUO3jPTHmoN+tE5I7FQxNg==
|
integrity sha512-OJmO5+HxZLLw0RLzkqaNHzcgEAQG7C0y3aMbwtCzIUFZsLMNNq/1IdAdHEycQ58CwUO3jPTHmoN+tE5I7FQxNg==
|
||||||
@@ -711,6 +715,30 @@ less@*, less@^4.6.4:
|
|||||||
needle "^3.1.0"
|
needle "^3.1.0"
|
||||||
source-map "~0.6.0"
|
source-map "~0.6.0"
|
||||||
|
|
||||||
|
lightningcss-darwin-arm64@1.32.0:
|
||||||
|
version "1.32.0"
|
||||||
|
resolved "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz"
|
||||||
|
integrity sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==
|
||||||
|
|
||||||
|
lightningcss@^1.32.0:
|
||||||
|
version "1.32.0"
|
||||||
|
resolved "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz"
|
||||||
|
integrity sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==
|
||||||
|
dependencies:
|
||||||
|
detect-libc "^2.0.3"
|
||||||
|
optionalDependencies:
|
||||||
|
lightningcss-android-arm64 "1.32.0"
|
||||||
|
lightningcss-darwin-arm64 "1.32.0"
|
||||||
|
lightningcss-darwin-x64 "1.32.0"
|
||||||
|
lightningcss-freebsd-x64 "1.32.0"
|
||||||
|
lightningcss-linux-arm-gnueabihf "1.32.0"
|
||||||
|
lightningcss-linux-arm64-gnu "1.32.0"
|
||||||
|
lightningcss-linux-arm64-musl "1.32.0"
|
||||||
|
lightningcss-linux-x64-gnu "1.32.0"
|
||||||
|
lightningcss-linux-x64-musl "1.32.0"
|
||||||
|
lightningcss-win32-arm64-msvc "1.32.0"
|
||||||
|
lightningcss-win32-x64-msvc "1.32.0"
|
||||||
|
|
||||||
local-pkg@^0.4.2:
|
local-pkg@^0.4.2:
|
||||||
version "0.4.2"
|
version "0.4.2"
|
||||||
resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz"
|
resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz"
|
||||||
@@ -869,6 +897,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
|
|||||||
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz"
|
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz"
|
||||||
integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==
|
integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==
|
||||||
|
|
||||||
|
"picomatch@^3 || ^4", picomatch@^4.0.4:
|
||||||
|
version "4.0.4"
|
||||||
|
resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz"
|
||||||
|
integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==
|
||||||
|
|
||||||
pify@^4.0.1:
|
pify@^4.0.1:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz"
|
resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz"
|
||||||
@@ -883,10 +916,10 @@ pkg-types@^1.0.1:
|
|||||||
mlly "^1.0.0"
|
mlly "^1.0.0"
|
||||||
pathe "^1.0.0"
|
pathe "^1.0.0"
|
||||||
|
|
||||||
postcss@>=8.4.31:
|
postcss@^8.5.14, postcss@^8.5.8:
|
||||||
version "8.5.9"
|
version "8.5.14"
|
||||||
resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.9.tgz"
|
resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz"
|
||||||
integrity sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==
|
integrity sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==
|
||||||
dependencies:
|
dependencies:
|
||||||
nanoid "^3.3.11"
|
nanoid "^3.3.11"
|
||||||
picocolors "^1.1.1"
|
picocolors "^1.1.1"
|
||||||
@@ -933,6 +966,30 @@ reusify@^1.0.4:
|
|||||||
resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
|
resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
|
||||||
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
|
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
|
||||||
|
|
||||||
|
rolldown@1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.npmjs.org/rolldown/-/rolldown-1.0.1.tgz"
|
||||||
|
integrity sha512-X0KQHljNnEkWNqqiz9zJrGunh1B0HgOxLXvnFpCOcadzcy5qohZ3tqMEUg00vncoRovXuK3ZqCT9KnnKzoInFQ==
|
||||||
|
dependencies:
|
||||||
|
"@oxc-project/types" "=0.130.0"
|
||||||
|
"@rolldown/pluginutils" "^1.0.0"
|
||||||
|
optionalDependencies:
|
||||||
|
"@rolldown/binding-android-arm64" "1.0.1"
|
||||||
|
"@rolldown/binding-darwin-arm64" "1.0.1"
|
||||||
|
"@rolldown/binding-darwin-x64" "1.0.1"
|
||||||
|
"@rolldown/binding-freebsd-x64" "1.0.1"
|
||||||
|
"@rolldown/binding-linux-arm-gnueabihf" "1.0.1"
|
||||||
|
"@rolldown/binding-linux-arm64-gnu" "1.0.1"
|
||||||
|
"@rolldown/binding-linux-arm64-musl" "1.0.1"
|
||||||
|
"@rolldown/binding-linux-ppc64-gnu" "1.0.1"
|
||||||
|
"@rolldown/binding-linux-s390x-gnu" "1.0.1"
|
||||||
|
"@rolldown/binding-linux-x64-gnu" "1.0.1"
|
||||||
|
"@rolldown/binding-linux-x64-musl" "1.0.1"
|
||||||
|
"@rolldown/binding-openharmony-arm64" "1.0.1"
|
||||||
|
"@rolldown/binding-wasm32-wasi" "1.0.1"
|
||||||
|
"@rolldown/binding-win32-arm64-msvc" "1.0.1"
|
||||||
|
"@rolldown/binding-win32-x64-msvc" "1.0.1"
|
||||||
|
|
||||||
rollup@^1.20.0||^2.0.0||^3.0.0:
|
rollup@^1.20.0||^2.0.0||^3.0.0:
|
||||||
version "3.30.0"
|
version "3.30.0"
|
||||||
resolved "https://registry.npmjs.org/rollup/-/rollup-3.30.0.tgz"
|
resolved "https://registry.npmjs.org/rollup/-/rollup-3.30.0.tgz"
|
||||||
@@ -940,40 +997,6 @@ rollup@^1.20.0||^2.0.0||^3.0.0:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents "~2.3.2"
|
fsevents "~2.3.2"
|
||||||
|
|
||||||
rollup@^4.20.0:
|
|
||||||
version "4.60.2"
|
|
||||||
resolved "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz"
|
|
||||||
integrity sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==
|
|
||||||
dependencies:
|
|
||||||
"@types/estree" "1.0.8"
|
|
||||||
optionalDependencies:
|
|
||||||
"@rollup/rollup-android-arm-eabi" "4.60.2"
|
|
||||||
"@rollup/rollup-android-arm64" "4.60.2"
|
|
||||||
"@rollup/rollup-darwin-arm64" "4.60.2"
|
|
||||||
"@rollup/rollup-darwin-x64" "4.60.2"
|
|
||||||
"@rollup/rollup-freebsd-arm64" "4.60.2"
|
|
||||||
"@rollup/rollup-freebsd-x64" "4.60.2"
|
|
||||||
"@rollup/rollup-linux-arm-gnueabihf" "4.60.2"
|
|
||||||
"@rollup/rollup-linux-arm-musleabihf" "4.60.2"
|
|
||||||
"@rollup/rollup-linux-arm64-gnu" "4.60.2"
|
|
||||||
"@rollup/rollup-linux-arm64-musl" "4.60.2"
|
|
||||||
"@rollup/rollup-linux-loong64-gnu" "4.60.2"
|
|
||||||
"@rollup/rollup-linux-loong64-musl" "4.60.2"
|
|
||||||
"@rollup/rollup-linux-ppc64-gnu" "4.60.2"
|
|
||||||
"@rollup/rollup-linux-ppc64-musl" "4.60.2"
|
|
||||||
"@rollup/rollup-linux-riscv64-gnu" "4.60.2"
|
|
||||||
"@rollup/rollup-linux-riscv64-musl" "4.60.2"
|
|
||||||
"@rollup/rollup-linux-s390x-gnu" "4.60.2"
|
|
||||||
"@rollup/rollup-linux-x64-gnu" "4.60.2"
|
|
||||||
"@rollup/rollup-linux-x64-musl" "4.60.2"
|
|
||||||
"@rollup/rollup-openbsd-x64" "4.60.2"
|
|
||||||
"@rollup/rollup-openharmony-arm64" "4.60.2"
|
|
||||||
"@rollup/rollup-win32-arm64-msvc" "4.60.2"
|
|
||||||
"@rollup/rollup-win32-ia32-msvc" "4.60.2"
|
|
||||||
"@rollup/rollup-win32-x64-gnu" "4.60.2"
|
|
||||||
"@rollup/rollup-win32-x64-msvc" "4.60.2"
|
|
||||||
fsevents "~2.3.2"
|
|
||||||
|
|
||||||
run-parallel@^1.1.9:
|
run-parallel@^1.1.9:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
|
resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
|
||||||
@@ -1031,7 +1054,7 @@ supports-preserve-symlinks-flag@^1.0.0:
|
|||||||
resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
|
resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
|
||||||
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
||||||
|
|
||||||
terser@^5.4.0:
|
terser@^5.16.0:
|
||||||
version "5.46.1"
|
version "5.46.1"
|
||||||
resolved "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz"
|
resolved "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz"
|
||||||
integrity sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==
|
integrity sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==
|
||||||
@@ -1041,6 +1064,14 @@ terser@^5.4.0:
|
|||||||
commander "^2.20.0"
|
commander "^2.20.0"
|
||||||
source-map-support "~0.5.20"
|
source-map-support "~0.5.20"
|
||||||
|
|
||||||
|
tinyglobby@^0.2.16:
|
||||||
|
version "0.2.16"
|
||||||
|
resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz"
|
||||||
|
integrity sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==
|
||||||
|
dependencies:
|
||||||
|
fdir "^6.5.0"
|
||||||
|
picomatch "^4.0.4"
|
||||||
|
|
||||||
to-regex-range@^5.0.1:
|
to-regex-range@^5.0.1:
|
||||||
version "5.0.1"
|
version "5.0.1"
|
||||||
resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
|
resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
|
||||||
@@ -1123,14 +1154,16 @@ unplugin@^1.0.1:
|
|||||||
webpack-sources "^3.2.3"
|
webpack-sources "^3.2.3"
|
||||||
webpack-virtual-modules "^0.5.0"
|
webpack-virtual-modules "^0.5.0"
|
||||||
|
|
||||||
"vite@^5.0.0 || ^6.0.0", vite@^5.4.19:
|
"vite@^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", vite@^8.0.13:
|
||||||
version "5.4.21"
|
version "8.0.13"
|
||||||
resolved "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz"
|
resolved "https://registry.npmjs.org/vite/-/vite-8.0.13.tgz"
|
||||||
integrity sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==
|
integrity sha512-MFtjBYgzmSxmgA4RAfjIyXWpGe1oALnjgUTzzV7QLx/TKxCzjtMH6Fd9/eVK+5Fg1qNoz5VAwsmMs/NofrmJvw==
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild "^0.21.3"
|
lightningcss "^1.32.0"
|
||||||
postcss "^8.4.43"
|
picomatch "^4.0.4"
|
||||||
rollup "^4.20.0"
|
postcss "^8.5.14"
|
||||||
|
rolldown "1.0.1"
|
||||||
|
tinyglobby "^0.2.16"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents "~2.3.3"
|
fsevents "~2.3.3"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user