Compare commits

...

17 Commits

Author SHA1 Message Date
timaa 3b67df19e7 release: v0.5.5 2026-05-20 02:48:17 +08:00
timaa c4ca8edd58 fix: 搜索路由参数校验 — page>=1、limit 1-500 2026-05-20 02:46:13 +08:00
timaa d7b055f88b v0.5.4: 全面修复 — template literal URL, Cookie验证, 用户默认is_active, 默认账号路由, 空间信息, 密钥清理, promoForm修复
修复:
- quark-share.ts/storage.ts: 9处template literal ${}缺失导致fetch URL写死
- user/routes.ts: testCloudConnectionWithCookie缺await + 按cloudType分发驱动
- credential.service.ts: INSERT缺?参数 (9values/10cols)
- user/routes.ts: 用户新增网盘默认is_active=0
- admin.routes.ts: 新增PUT /admin/cloud-configs/:id/primary路由
- database.ts: is_primary列迁移
- UserDashboard.vue: 保存时传递storage_used/storage_total
- SystemConfig.vue: promoForm const重赋值bug
- config/index.ts: 移除泄露的默认密钥token
2026-05-19 23:09:11 +08:00
timaa 39724e6e73 fix(audit): 修复3个审计发现的bug
- migrateCloudConfigs 缺 } 导致 notify_config/cloud_type_uid 嵌套在 promotion_account 内不迁移
- cloud_configs_v2 INSERT/SELECT 缺 cloud_type_uid/cookie_uid 导致数据丢失
- deploy.sh 密码嵌入改成 docker exec -e 传参(防特殊字符注入)
2026-05-19 14:23:26 +08:00
timaa 288d30698a hotfix: 补回system_configs表缺失的); 2026-05-19 05:21:28 +08:00
timaa a9dc056506 hotfix: 移除push_users表多余的);(导致SQL语法错误→容器重启) 2026-05-19 05:13:24 +08:00
timaa 9ef58b5724 fix: push_users表 + cookie_uid列 + __uid正则修复 + deploy.sh重写 2026-05-19 05:06:17 +08:00
timaa c9067179ff fix: save_records表补全config_id/promotion_account列(修复转存500) 2026-05-19 04:52:08 +08:00
timaa 5e3b5e83a4 fix(deploy): 不再硬编码CORS_ORIGIN + 强制覆盖管理员密码(解决401) 2026-05-19 04:44:19 +08:00
timaa d4e62b1fb1 feat: 一键部署脚本 deploy.sh (curl | bash 方式) 2026-05-19 04:32:19 +08:00
timaa 7471d9aece v0.4.8: docker-compose添加DATA_DIR=/data确保secrets.json路径一致 2026-05-19 03:34:23 +08:00
timaa f0c0d0f487 v0.4.8: 同步根VERSION文件 2026-05-19 02:29:12 +08:00
timaa e4e1890da3 v0.4.8: 补播link_invalid_keywords种子键 2026-05-19 02:28:49 +08:00
timaa 470ebac20e v0.4.7: 修复网盘类型开关key不匹配+补全10个缺失种子配置键 2026-05-19 02:02:48 +08:00
timaa f284e14630 v0.4.6: 保存网盘配置后自动验证+获取昵称空间 2026-05-19 00:36:42 +08:00
timaa bff955e45b v0.4.5: 修复双重解密/配置key/版本号同步/buil+ssh脚本 2026-05-18 20:25:40 +08:00
timaa 6f7ab6dbc6 feat: deploy.sh三重Redis密码检测(参数/conf/cli) + URL编码特殊字符 2026-05-18 18:16:33 +08:00
265 changed files with 5380 additions and 133 deletions
+1 -1
View File
@@ -1 +1 @@
0.4.0 0.5.5
+1 -1
View File
@@ -4,7 +4,7 @@ cd "$(dirname "$0")/source_clean"
VERSION=$(cat ../VERSION) VERSION=$(cat ../VERSION)
echo "🔨 Building CloudSearch v${VERSION}..." echo "🔨 Building CloudSearch v${VERSION}..."
cp ../VERSION ./VERSION
docker build -t cloudsearch-app:v${VERSION} -t cloudsearch-app:latest . docker build -t cloudsearch-app:v${VERSION} -t cloudsearch-app:latest .
echo "✅ Built: cloudsearch-app:v${VERSION} + cloudsearch-app:latest" echo "✅ Built: cloudsearch-app:v${VERSION} + cloudsearch-app:latest"
+1
View File
@@ -70,6 +70,7 @@ services:
- CORS_ORIGIN=${CORS_ORIGIN} - CORS_ORIGIN=${CORS_ORIGIN}
# ── 数据库 & 缓存 ── # ── 数据库 & 缓存 ──
- DATA_DIR=/data
- DB_PATH=${DB_PATH:-/data/database.sqlite} - DB_PATH=${DB_PATH:-/data/database.sqlite}
- REDIS_URL=${REDIS_URL:-redis://redis:6379} - REDIS_URL=${REDIS_URL:-redis://redis:6379}
+1 -1
View File
@@ -1 +1 @@
0.4.0 0.5.4
+11
View File
@@ -0,0 +1,11 @@
#!/bin/bash
set -e
cd "$(dirname "$0")/source_clean"
VERSION=$(cat ../VERSION)
echo "🔨 Building CloudSearch v${VERSION}..."
docker build -t cloudsearch-app:v${VERSION} -t cloudsearch-app:latest .
echo "✅ Built: cloudsearch-app:v${VERSION} + cloudsearch-app:latest"
echo " Run: docker-compose up -d app"
+110 -38
View File
@@ -1,56 +1,128 @@
#!/bin/bash #!/bin/bash
set -e set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" # CloudSearch 一键部署
cd "$SCRIPT_DIR" # curl -sS https://gitea.timxx.cn/admin/CloudSearch/raw/branch/master/source_clean/deploy.sh | bash
#
# 环境变量(可选):
# CORS_ORIGIN - 域名 (默认自动检测公网IP)
# ADMIN_PASSWORD - 管理员密码 (留空自动生成)
# JWT_SECRET - JWT密钥 (留空自动生成)
# DEPLOY_DIR - 部署目录 (默认 /opt/cloudsearch)
# 如果 docker-compose.yml 不存在,自动下载 REPO_URL="https://gitea.timxx.cn/admin/CloudSearch.git"
if [ ! -f docker-compose.yml ]; then DEPLOY_DIR="${DEPLOY_DIR:-/opt/cloudsearch}"
echo "📥 下载 docker-compose.yml..."
wget -q https://gitea.timxx.cn/admin/CloudSearch/raw/branch/master/source_clean/docker-compose.yml info() { echo "[INFO] $*"; }
warn() { echo "[WARN] $*"; }
err() { echo "[ERROR] $*"; }
command -v docker &>/dev/null || { err "Docker未安装"; exit 1; }
# -- CORS_ORIGIN --
if [ -z "$CORS_ORIGIN" ]; then
PUBLIC_IP=$(curl -s --connect-timeout 3 ifconfig.me 2>/dev/null || curl -s --connect-timeout 3 ip.sb 2>/dev/null || echo "")
if [ -n "$PUBLIC_IP" ]; then
CORS_ORIGIN="http://${PUBLIC_IP}:9527"
else
CORS_ORIGIN="http://localhost:9527"
fi
warn "CORS_ORIGIN=$CORS_ORIGIN (自动检测)"
fi fi
echo "🔍 检测 Redis..." # -- 拉取仓库 --
info "拉取仓库..."
if [ -d "$DEPLOY_DIR/.git" ]; then
cd "$DEPLOY_DIR" && git pull --ff-only origin master 2>/dev/null || true
else
rm -rf "$DEPLOY_DIR"
git clone --depth 1 "$REPO_URL" "$DEPLOY_DIR"
fi
cd "$DEPLOY_DIR/source_clean"
EXISTING_REDIS=$(docker ps --format '{{.Names}}' | grep -i redis | head -1) # -- 切换镜像模式 --
if grep -q '^ build:' docker-compose.yml 2>/dev/null; then
info "切换镜像模式..."
sed -i 's/^ build:/ # build:/' docker-compose.yml
sed -i 's/^ context:/ # context:/' docker-compose.yml
sed -i 's/^ dockerfile:/ # dockerfile:/' docker-compose.yml
sed -i 's|^ # image: gitea.timxx.cn/admin/cloudsearch:latest| image: gitea.timxx.cn/admin/cloudsearch:latest|' docker-compose.yml
fi
# -- 检测 Redis --
info "检测Redis..."
EXISTING_REDIS=$(docker ps --format '{{.Names}}' 2>/dev/null | grep -i redis | grep -v CloudSearch | head -1)
if [ -n "$EXISTING_REDIS" ]; then if [ -n "$EXISTING_REDIS" ]; then
if docker network inspect cloudsearch-net --format '{{range .Containers}}{{.Name}} {{end}}' 2>/dev/null | grep -qw "$EXISTING_REDIS"; then
echo "✅ 已有 Redis: $EXISTING_REDIS (已加入 cloudsearch-net),跳过创建"
else
echo "✅ 已有 Redis: $EXISTING_REDIS,正在加入网络..."
docker network connect cloudsearch-net "$EXISTING_REDIS" 2>/dev/null || true
echo " ✅ 已加入 cloudsearch-net"
fi
# 检测 Redis 密码
REDIS_PASS=$(docker inspect "$EXISTING_REDIS" --format '{{range .Config.Cmd}}{{println .}}{{end}}' 2>/dev/null | grep -A1 'requirepass' | tail -1 || true)
if [ -n "$REDIS_PASS" ]; then
REDIS_URL="redis://:${REDIS_PASS}@${EXISTING_REDIS}:6379"
echo " 🔑 检测到 Redis 密码,已自动配置"
else
REDIS_URL="redis://${EXISTING_REDIS}:6379" REDIS_URL="redis://${EXISTING_REDIS}:6379"
fi info "复用已有Redis: $EXISTING_REDIS"
PROFILE=""
else else
echo "📦 未检测到 Redis,将自动创建..." REDIS_URL="redis://redis:6379"
REDIS_URL="redis://CloudSearch_Redis:6379" info "使用Compose自带Redis"
PROFILE="--profile full"
fi fi
# 生成 .env # -- 生成密钥 --
cat > .env <<EOF JWT_SECRET="${JWT_SECRET:-$(openssl rand -hex 32)}"
ADMIN_PASSWORD="${ADMIN_PASSWORD:-$(openssl rand -base64 12 | tr -d '=+/' | head -c 16)}"
# -- 生成 .env --
cat > .env <<ENVEOF
CORS_ORIGIN=${CORS_ORIGIN}
JWT_SECRET=${JWT_SECRET}
ADMIN_PASSWORD=${ADMIN_PASSWORD}
REDIS_URL=${REDIS_URL} REDIS_URL=${REDIS_URL}
CORS_ORIGIN=https://zy.hk.timxx.cn LOG_LEVEL=${LOG_LEVEL:-info}
JWT_SECRET=cloudsearch-jwt-secret-2024 ENVEOF
ADMIN_PASSWORD=0nL5kLhMIJ1121PYmQb25A
LOG_LEVEL=info
EOF
echo "" info "管理员: admin / ${ADMIN_PASSWORD}"
echo "🚀 启动服务..."
docker compose $PROFILE up -d
# -- 部署 --
info "拉取镜像..."
docker compose pull app 2>/dev/null || true
info "停止旧服务..."
docker compose down --remove-orphans 2>/dev/null || true
info "启动服务..."
docker compose up -d
# -- 等待就绪 --
info "等待服务就绪..."
for i in $(seq 1 20); do
if curl -s -o /dev/null -w '%{http_code}' http://localhost:9527/health 2>/dev/null | grep -q '200'; then
break
fi
sleep 2
done
# -- 强制写入管理员密码 --
info "同步管理员密码..."
sleep 3
docker exec -e ADMIN_PASSWORD="$ADMIN_PASSWORD" CloudSearch_App node -e '
var bcrypt = require("bcryptjs");
var Database = require("better-sqlite3");
var db = new Database("/data/database.sqlite");
var pw = process.env.ADMIN_PASSWORD || ""; var hash = bcrypt.hashSync(pw, 10);
var existing = db.prepare("SELECT id FROM admins WHERE username = ?").get("admin");
if (existing) {
db.prepare("UPDATE admins SET password_hash = ? WHERE username = ?").run(hash, "admin");
} else {
db.prepare("INSERT INTO admins (username, password_hash) VALUES (?, ?)").run("admin", hash);
}
db.close();
' 2>/dev/null && info "密码已同步" || warn "密码同步失败,请稍后重试"
# -- 验证 --
if docker compose ps 2>/dev/null | grep -q 'Up'; then
echo "" echo ""
echo "✅ 部署完成" echo "=============================================="
echo " CloudSearch 部署完成"
echo "=============================================="
docker compose ps docker compose ps
echo ""
echo " 管理后台: ${CORS_ORIGIN}/admin/login"
echo " 用户名: admin"
echo " 密码: ${ADMIN_PASSWORD}"
else
err "启动失败: docker compose logs"
exit 1
fi
@@ -383,6 +383,38 @@ export async function changePassword(
return data return data
} }
// ===== 推广平台管理 =====
export interface PromotionPlatform {
id: number
name: string
join_url: string
sort_order: number
created_at?: string
}
export async function getPromotionPlatforms(): Promise<PromotionPlatform[]> {
const { data } = await axios.get('/api/promotion-platforms')
return data
}
export async function getAdminPromotionPlatforms(): Promise<PromotionPlatform[]> {
const { data } = await api.get('/admin/promotion-platforms')
return data
}
export async function createPromotionPlatform(params: { name: string; join_url: string; sort_order?: number }): Promise<PromotionPlatform> {
const { data } = await api.post('/admin/promotion-platforms', params)
return data
}
export async function updatePromotionPlatform(id: number, params: { name: string; join_url: string; sort_order?: number }): Promise<void> {
await api.put(`/admin/promotion-platforms/${id}`, params)
}
export async function deletePromotionPlatform(id: number): Promise<void> {
await api.delete(`/admin/promotion-platforms/${id}`)
}
export default api export default api
export { query as searchQuery } export { query as searchQuery }
@@ -307,7 +307,6 @@ async function switchTrendDays(d: number) {
} }
// Menu selection // Menu selection
const activeMenu = ref('dashboard')
const activeSystemSection = ref('') const activeSystemSection = ref('')
// ── Recent saves ── // ── Recent saves ──
@@ -381,6 +380,7 @@ const sysSectionTitles: Record<string, string> = {
'sys-validation': '链接验证配置', 'sys-validation': '链接验证配置',
'sys-filter': '搜索标题过滤规则', 'sys-filter': '搜索标题过滤规则',
'sys-password': '修改管理员密码', 'sys-password': '修改管理员密码',
'sys-platforms': '推广平台管理',
} }
const pageTitle = computed(() => { const pageTitle = computed(() => {
@@ -42,6 +42,7 @@
<el-menu-item index="sys-password">🔑 修改密码</el-menu-item> <el-menu-item index="sys-password">🔑 修改密码</el-menu-item>
<el-menu-item index="sys-notify">📬 消息推送</el-menu-item> <el-menu-item index="sys-notify">📬 消息推送</el-menu-item>
<el-menu-item index="sys-daily-report">📊 每日汇报</el-menu-item> <el-menu-item index="sys-daily-report">📊 每日汇报</el-menu-item>
<el-menu-item index="sys-platforms">👥 推广平台管理</el-menu-item>
</el-sub-menu> </el-sub-menu>
<el-menu-item index="save-records"> <el-menu-item index="save-records">
@@ -102,6 +103,7 @@ const pageTitles: Record<string, string> = {
'sys-password': '修改管理员密码', 'sys-password': '修改管理员密码',
'sys-notify': '消息推送', 'sys-notify': '消息推送',
'sys-daily-report': '每日汇报', 'sys-daily-report': '每日汇报',
'sys-platforms': '推广平台管理',
'save-records': '转存日志', 'save-records': '转存日志',
} }
@@ -21,13 +21,13 @@
</el-form-item> </el-form-item>
<el-form-item label="白名单目录"> <el-form-item label="白名单目录">
<div style="width: 100%;"> <div style="width: 100%;">
<div style="display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 6px;" v-if="whitelistDirs.length">
<el-tag v-for="(dir, i) in whitelistDirs" :key="i" closable size="small" @close="removeWhitelistDir(i)">{{ dir }}</el-tag>
</div>
<div style="display: flex; gap: 6px;"> <div style="display: flex; gap: 6px;">
<el-input v-model="newWhitelistDir" placeholder="输入目录名" size="small" style="width: 160px" @keyup.enter="addWhitelistDir" /> <el-input v-model="newWhitelistDir" placeholder="输入目录名" size="small" style="width: 160px" @keyup.enter="addWhitelistDir" />
<el-button type="primary" size="small" @click="addWhitelistDir">添加</el-button> <el-button type="primary" size="small" @click="addWhitelistDir">添加</el-button>
</div> </div>
<div style="display: flex; gap: 6px; flex-wrap: wrap; margin-top: 6px;" v-if="whitelistDirs.length">
<el-tag v-for="(dir, i) in whitelistDirs" :key="i" closable size="small" @close="removeWhitelistDir(i)">{{ dir }}</el-tag>
</div>
</div> </div>
</el-form-item> </el-form-item>
</el-form> </el-form>
@@ -95,7 +95,7 @@
<el-table-column label="转存启用" width="80" align="center"> <el-table-column label="转存启用" width="80" align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-switch <el-switch
:model-value="row.is_transfer_enabled !== 0" :model-value="row.is_active !== 0"
size="small" size="small"
@change="(val: boolean) => handleToggleTransfer(row, val)" @change="(val: boolean) => handleToggleTransfer(row, val)"
/> />
@@ -105,7 +105,7 @@
<template #default="{ row }"> <template #default="{ row }">
<el-switch <el-switch
:model-value="row.is_primary === 1" :model-value="row.is_primary === 1"
:disabled="!row.is_transfer_enabled" :disabled="!row.is_active"
size="small" size="small"
@change="(val: boolean) => handleTogglePrimary(row, val)" @change="(val: boolean) => handleTogglePrimary(row, val)"
/> />
@@ -386,11 +386,10 @@ async function handleToggleTransfer(row: CloudConfig, enabled: boolean) {
cloud_type: row.cloud_type, cloud_type: row.cloud_type,
nickname: row.nickname || '', nickname: row.nickname || '',
promotion_account: row.promotion_account || '', promotion_account: row.promotion_account || '',
is_transfer_enabled: newVal, is_active: newVal,
is_active: row.is_active,
cookie: undefined, // don't send cookie on toggle-only cookie: undefined, // don't send cookie on toggle-only
}) })
row.is_transfer_enabled = newVal row.is_active = newVal
ElMessage.success(enabled ? '转存已开启' : '转存已关闭') ElMessage.success(enabled ? '转存已开启' : '转存已关闭')
} catch (e: any) { } catch (e: any) {
ElMessage.error(e.response?.data?.error || '操作失败') ElMessage.error(e.response?.data?.error || '操作失败')
@@ -455,7 +454,7 @@ function openDialog(row: CloudConfig | null) {
form.cloud_type = row.cloud_type form.cloud_type = row.cloud_type
form.nickname = row.nickname || '' form.nickname = row.nickname || ''
form.promotion_account = row.promotion_account || '' form.promotion_account = row.promotion_account || ''
form.is_transfer_enabled = row.is_transfer_enabled !== 0 form.is_transfer_enabled = row.is_active !== 0
form.cookie = row.cookie || '' form.cookie = row.cookie || ''
form._verifying = false form._verifying = false
form._storageUsed = '' form._storageUsed = ''
@@ -506,9 +505,8 @@ async function handleSave() {
cloud_type: form.cloud_type as CloudType, cloud_type: form.cloud_type as CloudType,
nickname: form.nickname, nickname: form.nickname,
promotion_account: form.promotion_account, promotion_account: form.promotion_account,
is_transfer_enabled: form.is_transfer_enabled ? 1 : 0, is_active: form.is_transfer_enabled ? 1 : 0,
cookie: form.cookie || undefined, cookie: form.cookie || undefined,
is_active: 1,
}) })
ElMessage.success('配置更新成功') ElMessage.success('配置更新成功')
} else { } else {
@@ -516,9 +514,8 @@ async function handleSave() {
cloud_type: form.cloud_type as CloudType, cloud_type: form.cloud_type as CloudType,
nickname: form.nickname, nickname: form.nickname,
promotion_account: form.promotion_account, promotion_account: form.promotion_account,
is_transfer_enabled: form.is_transfer_enabled ? 1 : 0, is_active: form.is_transfer_enabled ? 1 : 0,
cookie: form.cookie, cookie: form.cookie,
is_active: 1,
}) })
ElMessage.success('配置保存成功') ElMessage.success('配置保存成功')
} }
@@ -754,6 +754,57 @@
</template> </template>
</el-dialog> </el-dialog>
<!-- 👥 推广平台管理 -->
<el-card id="section-sys-platforms" v-show="!activeSection || activeSection === 'sys-platforms'">
<template #header>
<span>👥 推广平台管理</span>
</template>
<div class="form-tip" style="margin-bottom: 12px;">配置注册页面可选的推广平台每个平台需提供邀请链接将自动生成二维码供用户扫码加入</div>
<div style="margin-bottom: 12px;">
<label style="font-size: 13px; color: #606266; display: block; margin-bottom: 4px;">二维码标题</label>
<el-input v-model="configs.promotion_qr_title" placeholder="扫码加入推广团队" style="max-width: 360px" />
<div class="form-tip">注册页面二维码区域的标题文字保存后生效</div>
</div>
<el-table :data="promoPlatforms" stripe size="small" empty-text="暂无推广平台">
<el-table-column prop="name" label="平台名称" width="160" />
<el-table-column prop="join_url" label="邀请链接" min-width="300" show-overflow-tooltip />
<el-table-column prop="sort_order" label="排序" width="80" align="center" />
<el-table-column label="操作" width="160" align="center">
<template #default="{ row }">
<el-button size="small" text type="primary" @click="editPromoPlatform(row)">编辑</el-button>
<el-popconfirm title="确定删除该平台?" @confirm="deletePromoPlatform(row.id)">
<template #reference>
<el-button size="small" text type="danger">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<div style="margin-top: 12px;">
<el-button size="small" type="primary" @click="showPromoDialog = true; editingPromoId = null; promoForm.name = ''; promoForm.join_url = ''; promoForm.sort_order = 0">新增平台</el-button>
</div>
</el-card>
<!-- 推广平台弹窗 -->
<el-dialog v-model="showPromoDialog" :title="editingPromoId ? '编辑推广平台' : '新增推广平台'" width="480px">
<el-form :model="promoForm" label-width="100px">
<el-form-item label="平台名称">
<el-input v-model="promoForm.name" placeholder="如:蜂小推" />
</el-form-item>
<el-form-item label="邀请链接">
<el-input v-model="promoForm.join_url" placeholder="https://..." />
</el-form-item>
<el-form-item label="排序">
<el-input-number v-model="promoForm.sort_order" :min="0" :max="999" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="showPromoDialog = false">取消</el-button>
<el-button type="primary" :loading="promoSaving" @click="savePromoPlatform">保存</el-button>
</template>
</el-dialog>
<!-- 保存按钮 --> <!-- 保存按钮 -->
<div class="save-bar"> <div class="save-bar">
<el-button type="primary" size="large" :loading="saving" @click="handleSave"> <el-button type="primary" size="large" :loading="saving" @click="handleSave">
@@ -768,7 +819,7 @@ import { ref, reactive, onMounted, computed, watch } from "vue"
import { useRoute, useRouter } from "vue-router" import { useRoute, useRouter } from "vue-router"
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import type { ElForm } from 'element-plus' import type { ElForm } from 'element-plus'
import { getSystemConfigs, updateSystemConfigs, changePassword as changePasswordApi, uploadFallbackImage, uploadLogo, updateSetting, getDbStatus, testRedisConnection, testExternalService, testNotifyChannel, getAllNotifierProviders, getCloudConfigs } from "../../api" import { getSystemConfigs, updateSystemConfigs, changePassword as changePasswordApi, uploadFallbackImage, uploadLogo, updateSetting, getDbStatus, testRedisConnection, testExternalService, testNotifyChannel, getAllNotifierProviders, getCloudConfigs, getAdminPromotionPlatforms, createPromotionPlatform, updatePromotionPlatform, deletePromotionPlatform } from "../../api"
import { Upload, Loading } from "@element-plus/icons-vue" import { Upload, Loading } from "@element-plus/icons-vue"
@@ -814,6 +865,12 @@ const ipGeoTesting = ref(false)
const pansouInfo = ref<any>(null) const pansouInfo = ref<any>(null)
const pansouInfoLoading = ref(true) const pansouInfoLoading = ref(true)
const pansouUpdating = ref(false) const pansouUpdating = ref(false)
const promoPlatforms = ref<any[]>([])
const showPromoDialog = ref(false)
const editingPromoId = ref<number | null>(null)
const promoForm = reactive({ name: '', join_url: '', sort_order: 0 })
const promoSaving = ref(false)
const proxyEnabled = computed({ const proxyEnabled = computed({
get: () => String(configs.search_proxy_enabled) === 'true', get: () => String(configs.search_proxy_enabled) === 'true',
set: (val: boolean) => { configs.search_proxy_enabled = val ? 'true' : 'false' }, set: (val: boolean) => { configs.search_proxy_enabled = val ? 'true' : 'false' },
@@ -1263,6 +1320,7 @@ const passwordRules = {
} }
onMounted(async () => { onMounted(async () => {
loadPromoPlatforms();
try { try {
rawConfigs.value = await getSystemConfigs() rawConfigs.value = await getSystemConfigs()
for (const cfg of rawConfigs.value) { for (const cfg of rawConfigs.value) {
@@ -1618,6 +1676,11 @@ async function handleSave() {
key: cfg.key, key: cfg.key,
value: String(configs[cfg.key] ?? cfg.value), value: String(configs[cfg.key] ?? cfg.value),
})) }))
// Always save promotion QR title
if (configs.promotion_qr_title !== undefined) {
const hasQrTitle = entries.some((e: any) => e.key === 'promotion_qr_title')
if (!hasQrTitle) entries.push({ key: 'promotion_qr_title', value: String(configs.promotion_qr_title || '') })
}
await saveDailyReportConfig() await saveDailyReportConfig()
// Add global_notify_config as JSON entry // Add global_notify_config as JSON entry
entries.push({ entries.push({
@@ -1632,6 +1695,27 @@ async function handleSave() {
saving.value = false saving.value = false
} }
} }
async function loadPromoPlatforms() {
try { promoPlatforms.value = await getAdminPromotionPlatforms() } catch { /* */ }
}
function editPromoPlatform(row: any) {
editingPromoId.value = row.id; promoForm.name = row.name; promoForm.join_url = row.join_url; promoForm.sort_order = row.sort_order; showPromoDialog.value = true;
}
async function savePromoPlatform() {
if (!promoForm.name || !promoForm.join_url) { ElMessage.warning("平台名称和邀请链接不能为空"); return; }
promoSaving.value = true;
try {
if (editingPromoId.value) { await updatePromotionPlatform(editingPromoId.value, { ...promoForm }); ElMessage.success("更新成功"); }
else { await createPromotionPlatform({ ...promoForm }); ElMessage.success("添加成功"); }
showPromoDialog.value = false; editingPromoId.value = null; loadPromoPlatforms();
} catch (e: any) { ElMessage.error(e.response?.data?.error || "保存失败"); }
finally { promoSaving.value = false; }
}
async function deletePromoPlatform(id: number) {
try { await deletePromotionPlatform(id); ElMessage.success("已删除"); loadPromoPlatforms(); }
catch (e: any) { ElMessage.error(e.response?.data?.error || "删除失败"); }
}
async function handleChangePassword() { async function handleChangePassword() {
const valid = await passwordFormRef.value?.validate().catch(() => false) const valid = await passwordFormRef.value?.validate().catch(() => false)
@@ -0,0 +1,606 @@
<template>
<div class="user-layout">
<!-- Header -->
<div class="user-header">
<span class="user-title">{{ siteName }} 用户中心</span>
<div class="header-right">
<span class="user-account">{{ account }}</span>
<el-button size="small" @click="handleLogout">退出登录</el-button>
</div>
</div>
<div class="user-body">
<!-- Sidebar -->
<div class="user-sidebar">
<div
v-for="item in menuItems"
:key="item.key"
:class="['sidebar-item', { active: activeMenu === item.key }]"
@click="activeMenu = item.key"
>
<span>{{ item.icon }} {{ item.label }}</span>
</div>
</div>
<!-- Content -->
<div class="user-content">
<!-- 📋 转存日志 -->
<div v-show="activeMenu === 'records'">
<el-card shadow="never">
<template #header><span>📋 转存日志</span></template>
<el-table :data="records" stripe empty-text="暂无转存记录" size="small">
<el-table-column prop="source_title" label="资源名称" min-width="200" show-overflow-tooltip />
<el-table-column prop="source_type" label="来源" width="80" />
<el-table-column label="状态" width="80">
<template #default="{ row }">
<el-tag :type="row.status === 'success' ? 'success' : 'danger'" size="small">
{{ row.status === 'success' ? '成功' : '失败' }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="file_size" label="大小" width="90" />
<el-table-column label="耗时" width="90">
<template #default="{ row }">
{{ row.duration_ms ? (row.duration_ms / 1000).toFixed(1) + 's' : '-' }}
</template>
</el-table-column>
<el-table-column label="时间" width="170">
<template #default="{ row }">{{ row.created_at }}</template>
</el-table-column>
</el-table>
<el-pagination
v-if="recordsTotal > 0"
v-model:current-page="recordsPage"
:page-size="recordsPageSize"
:total="recordsTotal"
layout="prev, pager, next"
small
style="margin-top: 16px; justify-content: center;"
@current-change="loadRecords"
/>
</el-card>
</div>
<!-- 💾 网盘管理 复刻 admin CloudConfig 布局 -->
<div v-show="activeMenu === 'drives'">
<el-card shadow="never">
<template #header><span>💾 我的网盘</span></template>
<div style="margin-bottom: 12px;">
<el-button type="primary" size="small" @click="openAddDrive">新增配置</el-button>
</div>
<el-table :data="drives" stripe empty-text="暂无网盘配置" size="small">
<el-table-column label="网盘类型" width="110">
<template #default="{ row }">
<CloudBadge :cloud_type="row.cloud_type" />
</template>
</el-table-column>
<el-table-column prop="nickname" label="昵称" width="140">
<template #default="{ row }">
<span v-if="row.nickname">{{ row.nickname }}</span>
<span v-else style="color:#909399;font-size:12px;">未设置</span>
</template>
</el-table-column>
<el-table-column prop="promotion_account" label="推广账号" width="160">
<template #default="{ row }">
<span v-if="row.promotion_account">{{ row.promotion_account }}</span>
<span v-else style="color:#909399;font-size:12px;">-</span>
</template>
</el-table-column>
<el-table-column label="验证" width="80" align="center">
<template #default="{ row }">
<el-tag v-if="row.verification_status === 'valid'" type="success" size="small">有效</el-tag>
<el-tag v-else-if="row.verification_status === 'invalid'" type="danger" size="small">无效</el-tag>
<el-tag v-else type="info" size="small">未验证</el-tag>
</template>
</el-table-column>
<el-table-column label="空间" width="200">
<template #default="{ row }">
<template v-if="row.storage_total && row.storage_total !== '-'">
<div>{{ row.storage_used || '计算中...' }} / {{ row.storage_total }}</div>
</template>
<span v-else style="color:#909399"></span>
</template>
</el-table-column>
<el-table-column label="转存数" width="80" align="center">
<template #default="{ row }">{{ row.total_saves > 0 ? row.total_saves + '次' : '-' }}</template>
</el-table-column>
<el-table-column label="操作" width="160" align="center">
<template #default="{ row }">
<el-button size="small" text type="primary" @click="openEditDrive(row)">编辑</el-button>
<el-popconfirm title="确定删除该配置?" @confirm="handleDeleteDrive(row.id)">
<template #reference>
<el-button size="small" text type="danger">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
</el-card>
</div>
<!-- 🔔 消息推送 复刻 admin SystemConfig notify 布局 -->
<div v-show="activeMenu === 'notify'">
<el-card shadow="never">
<template #header><span>🔔 消息推送配置</span></template>
<el-form label-width="120px" size="small">
<el-form-item label="推送通道">
<el-select v-model="notifyChannel" style="width: 200px" placeholder="选择推送通道">
<el-option label="Feishu Bot" value="feishu" />
</el-select>
</el-form-item>
<template v-if="notifyChannel === 'feishu'">
<el-form-item label="Webhook 地址">
<el-input v-model="notifyWebhook" placeholder="https://open.feishu.cn/open-apis/bot/v2/hook/xxx" style="width: 420px" />
</el-form-item>
<el-form-item label="推送事件">
<el-checkbox-group v-model="notifyEvents">
<el-checkbox label="on_save_success">转存成功</el-checkbox>
<el-checkbox label="on_save_fail">转存失败</el-checkbox>
<el-checkbox label="on_cookie_expire">Cookie过期</el-checkbox>
</el-checkbox-group>
</el-form-item>
</template>
<el-form-item>
<el-button type="primary" :loading="savingNotify" @click="saveNotify">保存推送配置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</div>
</div>
<!-- 新增/编辑网盘弹窗 复刻 admin CloudConfig dialog -->
<el-dialog v-model="showAddDrive" :title="editingDrive ? '编辑网盘配置' : '新增网盘配置'" width="560px">
<el-form ref="driveFormRef" :model="driveForm" :rules="driveRules" label-width="120px">
<!-- 白名单目录提示 -->
<el-alert
v-show="whitelistDirs.length > 0"
type="warning"
show-icon
:closable="false"
style="margin-bottom: 18px;"
>
<template #title>
<div style="line-height: 1.6;">
<div>🧹 请在网盘主目录内创建<b>{{ whitelistDirs.join('、') }}</b> 目录</div>
<div>并将你的重要文件移至该目录<b>只有这个目录不会被自动清理</b></div>
</div>
</template>
</el-alert>
<el-form-item label="网盘类型" prop="cloud_type">
<el-select v-model="driveForm.cloud_type" style="width: 100%" :disabled="!!editingDrive" @change="onDriveTypeChange">
<el-option
v-for="ct in enabledCloudTypes"
:key="ct.type"
:label="ct.label"
:value="ct.type"
/>
</el-select>
</el-form-item>
<el-form-item label="Cookie" prop="cookie">
<el-input
v-model="driveForm.cookie"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4 }"
:placeholder="driveCookiePlaceholder"
input-style="font-family: monospace; font-size: 12px;"
/>
</el-form-item>
<!-- Cookie 获取教程根据网盘类型切换 -->
<el-form-item label=" " v-if="driveForm.cloud_type && driveForm.cloud_type !== ''" class="cookie-tips-item">
<div class="cookie-tips" :class="`cookie-tips-${driveForm.cloud_type}`">
<div class="cookie-tips-header">
<span class="cookie-tips-title">📖 {{ driveCloudTypeLabel }} Cookie 获取教程</span>
</div>
<ol class="cookie-tips-steps" v-html="driveCookieTutorialHtml"></ol>
</div>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="showAddDrive = false; editingDrive = null">取消</el-button>
<el-button type="primary" :loading="adding" @click="handleSaveDrive">保存</el-button>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { ref, reactive, computed, onMounted, watch } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import axios from 'axios'
import { CLOUD_LABELS } from '../../types'
import { getSystemConfigs } from '../../api'
import type { CloudType } from '../../types'
import CloudBadge from '../../components/CloudBadge.vue'
import type { ElForm } from 'element-plus'
const router = useRouter()
const account = ref('')
const siteName = ref('CloudSearch')
/** 白名单目录提示 */
const systemConfigs = ref<Record<string, string>>({})
const whitelistDirs = computed(() => {
try {
const raw = systemConfigs.value.cleanup_whitelist_dirs || '[]'
const arr = JSON.parse(raw)
return Array.isArray(arr) && arr.length > 0 ? arr : []
} catch { return [] }
})
async function loadSystemConfigs() {
try {
const { data } = await axios.get('/api/system-configs')
const map: Record<string, string> = {}
for (const item of data) {
map[item.key] = item.value
}
systemConfigs.value = map
} catch (e) { console.error('加载系统配置失败', e) }
}
function userApi() {
const token = localStorage.getItem('user_token')
return axios.create({
baseURL: '/api/user',
headers: { Authorization: `Bearer ${token}` },
})
}
onMounted(async () => {
const token = localStorage.getItem('user_token')
if (!token) { router.push('/user/login'); return }
try {
const { data } = await userApi().get('/profile')
account.value = data.account
} catch {
localStorage.removeItem('user_token')
localStorage.removeItem('user_account')
router.push('/user/login')
return
}
// 获取网站名称
try {
const { data } = await axios.get('/api/site-config')
if (data.site_name) siteName.value = data.site_name
} catch { /* use default */ }
loadSystemConfigs()
})
function handleLogout() {
localStorage.removeItem('user_token')
localStorage.removeItem('user_account')
router.push('/user/login')
}
// ── Menu ──
const activeMenu = ref('records')
const menuItems = [
{ key: 'records', icon: '📋', label: '转存日志' },
{ key: 'drives', icon: '💾', label: '网盘管理' },
{ key: 'notify', icon: '🔔', label: '消息推送' },
]
// ── 转存日志 ──
const records = ref<any[]>([])
const recordsTotal = ref(0)
const recordsPage = ref(1)
const recordsPageSize = ref(20)
async function loadRecords() {
try {
const { data } = await userApi().get('/save-records', { params: { page: recordsPage.value, pageSize: recordsPageSize.value } })
records.value = data.records
recordsTotal.value = data.total
} catch { /* */ }
}
// ── 网盘管理 ──
const drives = ref<any[]>([])
const showAddDrive = ref(false)
const editingDrive = ref<any>(null)
const adding = ref(false)
const driveFormRef = ref<InstanceType<typeof ElForm>>()
interface EnabledCloudType { type: string; label: string; icon: string; enabled: boolean }
const enabledCloudTypes = ref<EnabledCloudType[]>([])
const defaultDriveForm = () => ({
cloud_type: '' as CloudType | '',
cookie: '',
})
const driveForm = reactive(defaultDriveForm())
const driveRules = computed(() => ({
cloud_type: [{ required: true, message: '请选择网盘类型', trigger: 'change' }],
}))
const driveCookiePlaceholder = computed(() => {
if (!driveForm.cloud_type) return '请先选择网盘类型'
const t = driveForm.cloud_type
if (t === 'quark' || t === 'baidu') return `请输入 ${CLOUD_LABELS[t] || t} 的完整 Cookie`
return editingDrive.value ? '留空则保持原有' : '输入完整 Cookie'
})
const driveCloudTypeLabel = computed(() => {
return CLOUD_LABELS[driveForm.cloud_type as CloudType] || driveForm.cloud_type || ''
})
/** Cookie 获取教程 HTML(根据不同网盘类型) */
const driveCookieTutorialHtml = computed(() => {
const t = driveForm.cloud_type
if (!t) return ''
const tutorials: Record<string, string> = {
quark: `<li>在电脑上打开 <a href="https://pan.quark.cn" target="_blank">pan.quark.cn</a> 并登录你的夸克账号</li>
<li>按 <code>F12</code> 打开开发者工具 → 切换到 <strong>网络 (Network)</strong> 选项卡</li>
<li>刷新页面,在请求列表中点击任意一个请求(如 <code>account/info</code></li>
<li>在右侧 <strong>请求头 (Request Headers)</strong> 中找到 <code>Cookie</code> 字段</li>
<li>复制整个 Cookie 值(<b>从开头到结束的完整内容</b>),粘贴到上方输入框</li>
<li>点击「<b>保存</b>」按钮提交配置</li>
<div class="cookie-tips-note">⚠️ 必须包含 <code>__st=s%...</code> 字段!请复制浏览器请求头的 <b>整个 Cookie</b>F12 → Network → 请求头 → Cookie 项),不要只复制部分。</div>`,
baidu: `<li>在电脑上打开 <a href="https://pan.baidu.com" target="_blank">pan.baidu.com</a> 并登录你的百度账号</li>
<li>按 <code>F12</code> 打开开发者工具 → 切换到 <strong>网络 (Network)</strong> 选项卡</li>
<li>刷新页面,在请求列表中点击任意一个请求</li>
<li>在右侧 <strong>请求头 (Request Headers)</strong> 中找到 <code>Cookie</code> 字段</li>
<li>复制整个 Cookie 值,粘贴到上方输入框</li>
<li>点击「<b>保存</b>」按钮提交配置</li>
<div class="cookie-tips-note">💡 需要包含 <code>BDUSS</code> 和 <code>STOKEN</code></div>`,
aliyun: `<li>在电脑上打开 <a href="https://www.aliyundrive.com" target="_blank">aliyundrive.com</a> 并登录</li>
<li>按 <code>F12</code> 打开开发者工具 → <strong>网络 (Network)</strong></li>
<li>刷新页面,找到任意请求 → 复制 <code>Cookie</code></li>
<li>粘贴到上方输入框,点击「保存」提交</li>
<div class="cookie-tips-note">💡 需包含 <code>token</code> 等有效字段</div>`,
'115': `<li>在电脑上打开 <a href="https://115.com" target="_blank">115.com</a> 并登录</li>
<li>按 <code>F12</code> 打开开发者工具 → <strong>网络 (Network)</strong></li>
<li>刷新页面,找到任意请求 → 复制 <code>Cookie</code></li>
<li>粘贴到上方输入框,点击「保存」提交</li>
<div class="cookie-tips-note">💡 需包含 <code>UID</code>、<code>CID</code>、<code>SEID</code> 等字段</div>`,
tianyi: `<li>在电脑上打开 <a href="https://cloud.189.cn" target="_blank">cloud.189.cn</a> 并登录</li>
<li>按 <code>F12</code> 打开开发者工具 → <strong>网络 (Network)</strong></li>
<li>刷新页面,找到任意请求 → 复制 <code>Cookie</code></li>
<li>粘贴到上方输入框,点击「保存」提交</li>
<div class="cookie-tips-note">💡 需包含 <code>COOKIE_LOGIN_USER</code>、<code>SESSION</code> 等字段</div>`,
'123pan': `<li>在电脑上打开 <a href="https://www.123pan.com" target="_blank">123pan.com</a> 并登录</li>
<li>按 <code>F12</code> 打开开发者工具 → <strong>网络 (Network)</strong></li>
<li>刷新页面,找到任意请求 → 复制 <code>Cookie</code></li>
<li>粘贴到上方输入框,点击「保存」提交</li>`,
uc: `<li>在电脑上打开 <a href="https://drive.uc.cn" target="_blank">drive.uc.cn</a> 并登录</li>
<li>按 <code>F12</code> 打开开发者工具 → <strong>网络 (Network)</strong></li>
<li>刷新页面,找到任意请求 → 复制 <code>Cookie</code></li>
<li>粘贴到上方输入框,点击「保存」提交</li>`,
xunlei: `<li>在电脑上打开 <a href="https://pan.xunlei.com" target="_blank">pan.xunlei.com</a> 并登录</li>
<li>按 <code>F12</code> 打开开发者工具 → <strong>网络 (Network)</strong></li>
<li>刷新页面,找到任意请求 → 复制 <code>Cookie</code></li>
<li>粘贴到上方输入框,点击「保存」提交</li>`,
pikpak: `<li>在电脑上打开 <a href="https://www.mypikpak.com" target="_blank">mypikpak.com</a> 并登录</li>
<li>按 <code>F12</code> 打开开发者工具 → <strong>网络 (Network)</strong></li>
<li>刷新页面,找到任意请求 → 复制 <code>Cookie</code></li>
<li>粘贴到上方输入框,点击「保存」提交</li>`,
}
return tutorials[t] || `<li>在电脑上打开该网盘网站并登录</li>
<li>按 <code>F12</code> 打开开发者工具 → <strong>网络 (Network)</strong></li>
<li>刷新页面,复制任意请求的 <code>Cookie</code></li>
<li>粘贴到上方输入框,点击「保存」提交</li>`
})
async function loadEnabledCloudTypes() {
try {
const { data } = await userApi().get('/enabled-cloud-types')
enabledCloudTypes.value = data
} catch { enabledCloudTypes.value = [] }
}
async function loadDrives() {
try {
const { data } = await userApi().get('/cloud-configs')
drives.value = data
} catch { /* */ }
}
function openAddDrive() {
editingDrive.value = null
Object.assign(driveForm, defaultDriveForm())
showAddDrive.value = true
}
function openEditDrive(row: any) {
editingDrive.value = row
driveForm.cloud_type = row.cloud_type
driveForm.cookie = ''
showAddDrive.value = true
}
function onDriveTypeChange() {
// placeholder auto-updates via computed
}
async function handleSaveDrive() {
const valid = await driveFormRef.value?.validate().catch(() => false)
if (!valid) return
adding.value = true
try {
let verifyNickname = ''
let verifyStorageUsed = ''
let verifyStorageTotal = ''
// 如果有 Cookie,先验证并自动获取昵称和空间信息
if (driveForm.cookie) {
try {
const api = userApi()
const { data: verifyResult } = await api.post(`/cloud-configs/${driveForm.cloud_type}/test`, { cookie: driveForm.cookie })
if (!verifyResult.success) {
ElMessage.error(`Cookie验证失败:${verifyResult.message}`)
adding.value = false
return
}
// 自动获取网盘昵称和空间信息
if (verifyResult.nickname) verifyNickname = verifyResult.nickname
if (verifyResult.storage_used) verifyStorageUsed = verifyResult.storage_used
if (verifyResult.storage_total) verifyStorageTotal = verifyResult.storage_total
} catch (e: any) {
ElMessage.error(`Cookie验证失败:${e.response?.data?.error || '网络错误'}`)
adding.value = false
return
}
}
const promotionAccount = account.value // 自动使用当前用户的「推广平台-手机号」
if (editingDrive.value) {
await userApi().put(`/cloud-configs/${editingDrive.value.id}`, {
cloud_type: driveForm.cloud_type,
nickname: verifyNickname || undefined,
promotion_account: promotionAccount,
cookie: driveForm.cookie || undefined,
storage_used: verifyStorageUsed || undefined,
storage_total: verifyStorageTotal || undefined,
})
ElMessage.success('更新成功')
} else {
if (!driveForm.cookie) { ElMessage.warning('请填写Cookie'); adding.value = false; return }
await userApi().post('/cloud-configs', {
cloud_type: driveForm.cloud_type,
cookie: driveForm.cookie,
nickname: verifyNickname || undefined,
promotion_account: promotionAccount,
storage_used: verifyStorageUsed || undefined,
storage_total: verifyStorageTotal || undefined,
})
ElMessage.success('添加成功')
}
showAddDrive.value = false
editingDrive.value = null
loadDrives()
} catch (e: any) {
ElMessage.error(e.response?.data?.error || '保存失败')
} finally { adding.value = false }
}
async function handleDeleteDrive(id: number) {
try {
await userApi().delete(`/cloud-configs/${id}`)
ElMessage.success('已删除')
loadDrives()
} catch (e: any) { ElMessage.error(e.response?.data?.error || '删除失败') }
}
// ── 推送配置 ──
const notifyChannel = ref('')
const notifyWebhook = ref('')
const notifyEvents = ref<string[]>([])
const savingNotify = ref(false)
async function loadNotify() {
try {
const { data } = await userApi().get('/notify-config')
const cfg = JSON.parse(data.notifyConfig || '{}')
if (cfg.webhook) {
notifyChannel.value = 'feishu'
notifyWebhook.value = cfg.webhook
notifyEvents.value = cfg.events || []
}
} catch { /* */ }
}
async function saveNotify() {
savingNotify.value = true
try {
const config = notifyChannel.value === 'feishu'
? JSON.stringify({ webhook: notifyWebhook.value, events: notifyEvents.value })
: '{}'
await userApi().put('/notify-config', { notifyConfig: config })
ElMessage.success('推送配置已保存')
} catch (e: any) { ElMessage.error(e.response?.data?.error || '保存失败') }
finally { savingNotify.value = false }
}
watch(activeMenu, (tab) => {
if (tab === 'records') loadRecords()
else if (tab === 'drives') { loadEnabledCloudTypes(); loadDrives() }
else if (tab === 'notify') loadNotify()
}, { immediate: true })
</script>
<style scoped>
.user-layout { min-height: 100vh; background: #f0f2f5; }
.user-header {
display: flex; justify-content: space-between; align-items: center;
padding: 0 24px; height: 56px; background: #fff; box-shadow: 0 1px 4px rgba(0,0,0,0.06);
}
.user-title { font-size: 16px; font-weight: 600; color: #303133; }
.header-right { display: flex; align-items: center; gap: 12px; }
.user-account { font-size: 13px; color: #606266; }
.user-body { display: flex; min-height: calc(100vh - 56px); }
.user-sidebar {
width: 180px; background: #fff; border-right: 1px solid #e4e7ed;
padding: 12px 0; flex-shrink: 0;
}
.sidebar-item {
padding: 10px 20px; cursor: pointer; font-size: 14px; color: #606266;
transition: all 0.2s;
}
.sidebar-item:hover { background: #f5f7fa; color: #303133; }
.sidebar-item.active { background: #ecf5ff; color: #409eff; font-weight: 500; border-right: 2px solid #409eff; }
.user-content { flex: 1; padding: 20px; overflow: auto; }
/* ── Cookie tutorial card (same as admin CloudConfig) ── */
.cookie-tips-item :deep(.el-form-item__content) {
margin-left: 0 !important;
}
.cookie-tips {
background: #f8faff;
border: 1px solid #e8f0fe;
border-radius: 6px;
padding: 14px 16px;
font-size: 12px;
line-height: 1.8;
color: #606266;
width: 100%;
box-sizing: border-box;
}
.cookie-tips-header {
margin-bottom: 10px;
}
.cookie-tips-title {
font-weight: 700;
color: #409eff;
font-size: 13px;
}
.cookie-tips-steps {
margin: 0;
padding-left: 20px;
}
.cookie-tips-steps li {
margin-bottom: 4px;
}
.cookie-tips-steps code {
background: #ecf5ff;
padding: 1px 5px;
border-radius: 3px;
font-size: 11px;
font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
}
.cookie-tips-note {
margin-top: 8px;
padding: 6px 10px;
background: #fffbe6;
border: 1px solid #fff3c4;
border-radius: 4px;
color: #8a6d3b;
font-size: 11px;
line-height: 1.5;
}
.cookie-tips-note code {
background: #f5f0e0;
font-size: 11px;
}
</style>
@@ -0,0 +1,215 @@
<template>
<div class="user-login-page">
<div class="login-card">
<h1 class="login-title">CloudSearch 用户中心</h1>
<p class="login-subtitle">{{ isLogin ? '登录您的账号' : '注册新账号' }}</p>
<el-form ref="formRef" :model="form" :rules="rules" label-width="0" @keyup.enter="handleSubmit">
<el-form-item prop="platform">
<el-select v-model="form.platform" placeholder="选择推广平台" size="large" style="width: 100%">
<el-option
v-for="p in platforms"
:key="p.name"
:label="p.name"
:value="p.name"
/>
</el-select>
</el-form-item>
<el-form-item prop="phone">
<el-input v-model="form.phone" placeholder="手机号码" size="large" />
</el-form-item>
<el-form-item prop="password">
<el-input v-model="form.password" type="password" placeholder="密码" size="large" show-password />
</el-form-item>
<el-form-item v-if="!isLogin" prop="confirmPassword">
<el-input v-model="form.confirmPassword" type="password" placeholder="确认密码" size="large" show-password />
</el-form-item>
<el-form-item>
<el-button type="primary" size="large" :loading="loading" style="width: 100%" @click="handleSubmit">
{{ isLogin ? ' ' : ' ' }}
</el-button>
</el-form-item>
</el-form>
<div class="login-switch">
{{ isLogin ? '还没有账号?' : '已有账号?' }}
<el-button link type="primary" @click="isLogin = !isLogin">
{{ isLogin ? '立即注册' : '去登录' }}
</el-button>
</div>
</div>
<!-- 二维码区域 -->
<div v-if="platforms.length > 0" class="qr-section">
<div class="qr-title">{{ qrTitle }}</div>
<div class="qr-grid">
<div v-for="p in platforms" :key="p.name" class="qr-item">
<div class="qr-label">加入{{ p.name }}团队</div>
<div class="qr-img-wrap">
<img
:src="'https://api.qrserver.com/v1/create-qr-code/?size=120x120&data=' + encodeURIComponent(p.join_url)"
:alt="'加入' + p.name"
class="qr-image"
/>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, reactive, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import axios from 'axios'
const router = useRouter()
const isLogin = ref(true)
const loading = ref(false)
const formRef = ref()
interface Platform {
id: number
name: string
join_url: string
sort_order: number
}
const platforms = ref<Platform[]>([])
const qrTitle = ref('扫码加入推广团队')
const form = reactive({
platform: '',
phone: '',
password: '',
confirmPassword: '',
})
const validatePhone = (_rule: any, value: string, callback: any) => {
if (!value) callback(new Error('请输入手机号码'))
else if (!/^1[3-9]\d{9}$/.test(value)) callback(new Error('请输入有效的手机号码'))
else callback()
}
const rules = {
platform: [{ required: true, message: '请选择推广平台', trigger: 'change' }],
phone: [{ validator: validatePhone, trigger: 'blur' }],
password: [{ required: true, message: '请输入密码', trigger: 'blur' }, { min: 6, message: '密码至少6位', trigger: 'blur' }],
confirmPassword: [{
validator: (_rule: any, value: string, callback: any) => {
if (!value) callback(new Error('请确认密码'))
else if (value !== form.password) callback(new Error('两次密码不一致'))
else callback()
}, trigger: 'blur'
}],
}
onMounted(async () => {
try {
const { data } = await axios.get('/api/promotion-platforms')
platforms.value = data.platforms
if (data.title) qrTitle.value = data.title
} catch { /* */ }
})
async function handleSubmit() {
const valid = await formRef.value?.validate().catch(() => false)
if (!valid) return
loading.value = true
try {
if (isLogin.value) {
const account = form.platform + '-' + form.phone.trim()
const { data } = await axios.post('/api/user/login', {
account,
password: form.password,
})
localStorage.setItem('user_token', data.token)
localStorage.setItem('user_account', account)
ElMessage.success('登录成功')
router.push('/user/dashboard')
} else {
const { data } = await axios.post('/api/user/register', {
platform: form.platform,
phone: form.phone.trim(),
password: form.password,
})
ElMessage.success(data.message || '注册成功,请登录')
isLogin.value = true
form.password = ''
form.confirmPassword = ''
}
} catch (e: any) {
ElMessage.error(e.response?.data?.error || '操作失败')
} finally {
loading.value = false
}
}
</script>
<style scoped>
.user-login-page {
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background: #f0f2f5;
padding: 40px 20px;
}
.login-card {
width: 420px;
padding: 40px;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0,0,0,0.08);
}
.login-title { text-align: center; font-size: 24px; margin: 0 0 8px; color: #303133; }
.login-subtitle { text-align: center; font-size: 14px; color: #909399; margin: 0 0 32px; }
.login-switch { text-align: center; font-size: 14px; color: #909399; margin-top: 16px; }
.qr-section {
margin-top: 40px;
text-align: center;
width: 100%;
max-width: 900px;
}
.qr-title {
font-size: 16px;
font-weight: 600;
color: #303133;
margin-bottom: 24px;
}
.qr-grid {
display: flex;
justify-content: center;
gap: 30px;
flex-wrap: wrap;
}
.qr-item {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
.qr-label {
font-size: 14px;
color: #606266;
font-weight: 500;
}
.qr-img-wrap {
padding: 12px;
background: #fff;
border-radius: 8px;
box-shadow: 0 1px 6px rgba(0,0,0,0.08);
}
.qr-image {
display: block;
width: 100px;
height: 100px;
}
</style>
+14
View File
@@ -57,6 +57,20 @@ const routes = [
}, },
], ],
}, },
{
path: '/user/login',
name: 'user-login',
component: () => import('./pages/user/UserLogin.vue'),
},
{
path: '/user/dashboard',
name: 'user-dashboard',
component: () => import('./pages/user/UserDashboard.vue'),
},
{
path: '/user',
redirect: '/user/login',
},
] ]
const router = createRouter({ const router = createRouter({
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{d as I,o as L,c as _,a as o,t as m,e,w as t,g as p,q as h,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-WUL9v6H_.js";import{a as G}from"./index-BC_nIdvI.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),w={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","save-records":"转存日志"},b=h(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=h(()=>w[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),_("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),_("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),_("span",P,"☁️"))]),o("div",Q,[o("h2",null,m(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[13]||(s[13]=o("span",null,"转存日志",-1))]),_:1}),s[15]||(s[15]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+m(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[14]||(s[14]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,m(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[16]||(s[16]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-66b4feae"]]);export{ds as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as m,a as o,t as _,e,w as t,g as p,q as w,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-Cez7RKLo.js";import{a as G}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),h={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","sys-platforms":"推广平台管理","save-records":"转存日志"},b=w(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=w(()=>h[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),m("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),m("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),m("span",P,"☁️"))]),o("div",Q,[o("h2",null,_(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1}),e(a,{index:"sys-platforms"},{default:t(()=>[...s[13]||(s[13]=[l("👥 推广平台管理",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[14]||(s[14]=o("span",null,"转存日志",-1))]),_:1}),s[16]||(s[16]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+_(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[15]||(s[15]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,_(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[17]||(s[17]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-6f75751a"]]);export{ds as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as m,a as o,t as _,e,w as t,g as p,q as w,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-BEhBl6RD.js";import{a as G}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),h={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","sys-platforms":"推广平台管理","save-records":"转存日志"},b=w(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=w(()=>h[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),m("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),m("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),m("span",P,"☁️"))]),o("div",Q,[o("h2",null,_(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1}),e(a,{index:"sys-platforms"},{default:t(()=>[...s[13]||(s[13]=[l("👥 推广平台管理",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[14]||(s[14]=o("span",null,"转存日志",-1))]),_:1}),s[16]||(s[16]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+_(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[15]||(s[15]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,_(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[17]||(s[17]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-6f75751a"]]);export{ds as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as m,a as o,t as _,e,w as t,g as p,q as w,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-CBbTXmzV.js";import{a as G}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),h={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","sys-platforms":"推广平台管理","save-records":"转存日志"},b=w(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=w(()=>h[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),m("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),m("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),m("span",P,"☁️"))]),o("div",Q,[o("h2",null,_(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1}),e(a,{index:"sys-platforms"},{default:t(()=>[...s[13]||(s[13]=[l("👥 推广平台管理",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[14]||(s[14]=o("span",null,"转存日志",-1))]),_:1}),s[16]||(s[16]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+_(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[15]||(s[15]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,_(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[17]||(s[17]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-6f75751a"]]);export{ds as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as m,a as o,t as _,e,w as t,g as p,q as w,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-BNH_lgW0.js";import{a as G}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),h={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","sys-platforms":"推广平台管理","save-records":"转存日志"},b=w(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=w(()=>h[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),m("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),m("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),m("span",P,"☁️"))]),o("div",Q,[o("h2",null,_(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1}),e(a,{index:"sys-platforms"},{default:t(()=>[...s[13]||(s[13]=[l("👥 推广平台管理",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[14]||(s[14]=o("span",null,"转存日志",-1))]),_:1}),s[16]||(s[16]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+_(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[15]||(s[15]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,_(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[17]||(s[17]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-6f75751a"]]);export{ds as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as _,a as o,t as m,e,w as t,g as p,q as h,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-CBf4dz4k.js";import{a as G}from"./index-DXp3oW3R.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),w={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","save-records":"转存日志"},b=h(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=h(()=>w[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),_("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),_("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),_("span",P,"☁️"))]),o("div",Q,[o("h2",null,m(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[13]||(s[13]=o("span",null,"转存日志",-1))]),_:1}),s[15]||(s[15]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+m(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[14]||(s[14]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,m(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[16]||(s[16]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ls=z(ts,[["__scopeId","data-v-66b4feae"]]);export{ls as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as m,a as o,t as _,e,w as t,g as p,q as w,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-DG5Z6wYC.js";import{a as G}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),h={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","sys-platforms":"推广平台管理","save-records":"转存日志"},b=w(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=w(()=>h[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),m("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),m("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),m("span",P,"☁️"))]),o("div",Q,[o("h2",null,_(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1}),e(a,{index:"sys-platforms"},{default:t(()=>[...s[13]||(s[13]=[l("👥 推广平台管理",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[14]||(s[14]=o("span",null,"转存日志",-1))]),_:1}),s[16]||(s[16]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+_(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[15]||(s[15]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,_(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[17]||(s[17]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-6f75751a"]]);export{ds as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as m,a as o,t as _,e,w as t,g as p,q as w,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-C7z77r4S.js";import{a as G}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),h={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","sys-platforms":"推广平台管理","save-records":"转存日志"},b=w(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=w(()=>h[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),m("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),m("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),m("span",P,"☁️"))]),o("div",Q,[o("h2",null,_(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1}),e(a,{index:"sys-platforms"},{default:t(()=>[...s[13]||(s[13]=[l("👥 推广平台管理",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[14]||(s[14]=o("span",null,"转存日志",-1))]),_:1}),s[16]||(s[16]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+_(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[15]||(s[15]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,_(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[17]||(s[17]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-6f75751a"]]);export{ds as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as m,a as o,t as _,e,w as t,g as p,q as w,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-xijwxLU3.js";import{a as G}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),h={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","sys-platforms":"推广平台管理","save-records":"转存日志"},b=w(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=w(()=>h[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),m("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),m("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),m("span",P,"☁️"))]),o("div",Q,[o("h2",null,_(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1}),e(a,{index:"sys-platforms"},{default:t(()=>[...s[13]||(s[13]=[l("👥 推广平台管理",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[14]||(s[14]=o("span",null,"转存日志",-1))]),_:1}),s[16]||(s[16]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+_(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[15]||(s[15]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,_(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[17]||(s[17]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-6f75751a"]]);export{ds as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as m,a as o,t as _,e,w as t,g as p,q as w,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-CRy8Zkz5.js";import{a as G}from"./index-BC_nIdvI.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),h={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","sys-platforms":"推广平台管理","save-records":"转存日志"},b=w(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=w(()=>h[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),m("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),m("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),m("span",P,"☁️"))]),o("div",Q,[o("h2",null,_(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1}),e(a,{index:"sys-platforms"},{default:t(()=>[...s[13]||(s[13]=[l("👥 推广平台管理",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[14]||(s[14]=o("span",null,"转存日志",-1))]),_:1}),s[16]||(s[16]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+_(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[15]||(s[15]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,_(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[17]||(s[17]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-6f75751a"]]);export{ds as default};
@@ -0,0 +1 @@
.admin-layout[data-v-6f75751a]{display:flex;height:100vh;background:var(--bg-page)}.admin-sidebar[data-v-6f75751a]{width:var(--sidebar-w);flex-shrink:0;display:flex;flex-direction:column;background:linear-gradient(180deg,#111827,#1e293b);position:relative;z-index:10}.sidebar-brand[data-v-6f75751a]{display:flex;align-items:center;gap:10px;padding:20px 20px 16px;border-bottom:1px solid rgba(255,255,255,.06)}.sidebar-logo[data-v-6f75751a]{font-size:28px;line-height:1;flex-shrink:0;width:36px;height:36px;display:flex;align-items:center;justify-content:center}.sidebar-logo-img[data-v-6f75751a]{width:36px;height:36px;object-fit:contain;border-radius:6px}.sidebar-logo-fallback[data-v-6f75751a]{font-size:28px}.sidebar-brand-text h2[data-v-6f75751a]{font-size:16px;font-weight:700;margin:0;color:#fff;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar-brand-text p[data-v-6f75751a]{font-size:11px;margin:2px 0 0;color:#ffffff73;letter-spacing:1px}.sidebar-menu[data-v-6f75751a]{flex:1;display:flex;flex-direction:column;background:transparent!important;border-right:none!important;padding:4px 0}.sidebar-menu[data-v-6f75751a] .el-menu-item,.sidebar-menu[data-v-6f75751a] .el-sub-menu__title{color:#ffffffa6;height:44px;line-height:44px;transition:all .2s ease;margin:0 6px;border-radius:var(--radius-sm)}.sidebar-menu[data-v-6f75751a] .el-menu-item:hover,.sidebar-menu[data-v-6f75751a] .el-sub-menu__title:hover{background:#ffffff14;color:#ffffffe6}.sidebar-menu[data-v-6f75751a] .el-menu-item.is-active{color:#fff;background:linear-gradient(90deg,#409eff40,#6366f126);font-weight:500}.sidebar-menu[data-v-6f75751a] .el-menu-item:after{display:none}.sidebar-menu[data-v-6f75751a] .el-sub-menu .el-menu{background:#0003!important}.sidebar-menu[data-v-6f75751a] .el-sub-menu .el-menu .el-menu-item{padding-left:52px!important;font-size:13px;height:38px;line-height:38px}.sidebar-menu[data-v-6f75751a] .el-icon{font-size:16px}.sidebar-spacer[data-v-6f75751a]{flex:1}.sidebar-version[data-v-6f75751a]{text-align:center;font-size:11px;color:#ffffff40;padding:8px 0;letter-spacing:.5px}.admin-content[data-v-6f75751a]{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.content-header[data-v-6f75751a]{display:flex;align-items:center;justify-content:space-between;padding:16px 28px;background:var(--bg-card);border-bottom:1px solid var(--border-light);flex-shrink:0}.content-breadcrumb[data-v-6f75751a]{display:flex;align-items:center;gap:8px}.breadcrumb-current[data-v-6f75751a]{font-size:18px;font-weight:700;color:var(--text)}.content-actions[data-v-6f75751a] .el-button{color:var(--text-secondary);gap:4px}.content-body[data-v-6f75751a]{flex:1;overflow-y:auto;padding:24px 28px}.content-body[data-v-6f75751a] .save-bar{position:sticky;bottom:0;z-index:100;background:var(--bg-card);padding:12px 16px;border-radius:var(--radius-lg) var(--radius-lg) 0 0;border:1px solid var(--border);border-bottom:none;box-shadow:0 -2px 12px #00000014;display:flex;justify-content:flex-end;gap:10px;margin-top:24px}
@@ -0,0 +1 @@
import{d as I,o as L,c as _,a as o,t as m,e,w as t,g as p,q as h,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-C_73XAbP.js";import{a as G}from"./index-BC_nIdvI.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),w={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","save-records":"转存日志"},b=h(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=h(()=>w[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),_("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),_("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),_("span",P,"☁️"))]),o("div",Q,[o("h2",null,m(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[13]||(s[13]=o("span",null,"转存日志",-1))]),_:1}),s[15]||(s[15]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+m(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[14]||(s[14]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,m(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[16]||(s[16]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-66b4feae"]]);export{ds as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as _,a as o,t as m,e,w as t,g as p,q as h,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-BKVIEIby.js";import{a as G}from"./index-BC_nIdvI.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),w={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","save-records":"转存日志"},b=h(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=h(()=>w[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),_("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),_("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),_("span",P,"☁️"))]),o("div",Q,[o("h2",null,m(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[13]||(s[13]=o("span",null,"转存日志",-1))]),_:1}),s[15]||(s[15]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+m(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[14]||(s[14]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,m(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[16]||(s[16]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-66b4feae"]]);export{ds as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as m,a as o,t as _,e,w as t,g as p,q as w,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-Bl_rtZjE.js";import{a as G}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),h={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","sys-platforms":"推广平台管理","save-records":"转存日志"},b=w(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=w(()=>h[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),m("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),m("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),m("span",P,"☁️"))]),o("div",Q,[o("h2",null,_(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1}),e(a,{index:"sys-platforms"},{default:t(()=>[...s[13]||(s[13]=[l("👥 推广平台管理",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[14]||(s[14]=o("span",null,"转存日志",-1))]),_:1}),s[16]||(s[16]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+_(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[15]||(s[15]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,_(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[17]||(s[17]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-6f75751a"]]);export{ds as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as m,a as o,t as _,e,w as t,g as p,q as w,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-DUvV9NL6.js";import{a as G}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),h={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","sys-platforms":"推广平台管理","save-records":"转存日志"},b=w(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=w(()=>h[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),m("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),m("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),m("span",P,"☁️"))]),o("div",Q,[o("h2",null,_(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1}),e(a,{index:"sys-platforms"},{default:t(()=>[...s[13]||(s[13]=[l("👥 推广平台管理",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[14]||(s[14]=o("span",null,"转存日志",-1))]),_:1}),s[16]||(s[16]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+_(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[15]||(s[15]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,_(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[17]||(s[17]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-6f75751a"]]);export{ds as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as _,a as o,t as m,e,w as t,g as p,q as h,h as u,i as g,j as r,C as M,k as l,D as T,G as j,H as A,I as D,J as E,u as H,y as R,_ as z}from"./index-C2VdJ-SC.js";import{a as G}from"./index-BC_nIdvI.js";import"./index-DZ_Kha3d.js";const J={class:"admin-layout"},W={class:"admin-sidebar"},F={class:"sidebar-brand"},K={class:"sidebar-logo"},O=["src","alt"],P={key:1,class:"sidebar-logo-fallback"},Q={class:"sidebar-brand-text"},U={class:"sidebar-version"},X={class:"admin-content"},Y={class:"content-header"},Z={class:"content-breadcrumb"},$={class:"breadcrumb-current"},ss={class:"content-actions"},es={class:"content-body"},ts=I({__name:"AdminLayout",setup(os){const d=H(),v=R(),f=p(""),c=p(""),y=p(""),w={dashboard:"仪表盘","cloud-configs-toggle":"网盘设置及授权","cloud-configs-cleanup":"存储清理","sys-site":"网站设置","sys-services":"外部服务 & 缓存","sys-strategy":"性能配置","sys-password":"修改管理员密码","sys-notify":"消息推送","sys-daily-report":"每日汇报","save-records":"转存日志"},b=h(()=>{const n=v.name;return n==="admin-cloud-configs"?"cloud-configs-toggle":n==="admin-cleanup"?"cloud-configs-cleanup":n==="admin-system"?v.query.section||"sys-site":n==="admin-save-records"?"save-records":"dashboard"}),k=h(()=>w[b.value]||"仪表盘");function C(n){n==="dashboard"?d.push("/admin/dashboard"):n==="cloud-configs-toggle"?d.push("/admin/cloud-configs"):n==="cloud-configs-cleanup"?d.push("/admin/cleanup"):n.startsWith("sys-")?d.push({path:"/admin/system",query:{section:n}}):n==="save-records"?d.push("/admin/save-records"):n==="logout"&&(localStorage.removeItem("admin_token"),d.push("/admin/login"))}function S(){d.push("/")}return L(async()=>{try{const n=await G();f.value=n.site_name||"",c.value=n.site_logo||""}catch{}try{const s=await(await fetch("/health")).json();y.value=s.version}catch{}}),(n,s)=>{const i=u("el-icon"),a=u("el-menu-item"),x=u("el-sub-menu"),B=u("el-menu"),N=u("el-button"),V=u("router-view");return g(),_("div",J,[o("aside",W,[o("div",F,[o("div",K,[c.value?(g(),_("img",{key:0,src:c.value,alt:f.value||"CloudSearch",class:"sidebar-logo-img",onError:s[0]||(s[0]=q=>{q.target.style.display="none",c.value=""})},null,40,O)):(g(),_("span",P,"☁️"))]),o("div",Q,[o("h2",null,m(f.value||"CloudSearch"),1),s[1]||(s[1]=o("p",null,"管理控制台",-1))])]),e(B,{"default-active":b.value,class:"sidebar-menu",onSelect:C},{default:t(()=>[e(a,{index:"dashboard"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(M))]),_:1}),s[2]||(s[2]=o("span",null,"仪表盘",-1))]),_:1}),e(x,{index:"cloud-configs"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(T))]),_:1}),s[3]||(s[3]=o("span",null,"网盘管理",-1))]),default:t(()=>[e(a,{index:"cloud-configs-toggle"},{default:t(()=>[...s[4]||(s[4]=[l("📋 设置及授权",-1)])]),_:1}),e(a,{index:"cloud-configs-cleanup"},{default:t(()=>[...s[5]||(s[5]=[l("🧹 存储清理",-1)])]),_:1})]),_:1}),e(x,{index:"system"},{title:t(()=>[e(i,null,{default:t(()=>[e(r(j))]),_:1}),s[6]||(s[6]=o("span",null,"系统设置",-1))]),default:t(()=>[e(a,{index:"sys-site"},{default:t(()=>[...s[7]||(s[7]=[l("🌐 网站设置",-1)])]),_:1}),e(a,{index:"sys-services"},{default:t(()=>[...s[8]||(s[8]=[l("🔗 外部服务 & 缓存",-1)])]),_:1}),e(a,{index:"sys-strategy"},{default:t(()=>[...s[9]||(s[9]=[l("⚡ 性能配置",-1)])]),_:1}),e(a,{index:"sys-password"},{default:t(()=>[...s[10]||(s[10]=[l("🔑 修改密码",-1)])]),_:1}),e(a,{index:"sys-notify"},{default:t(()=>[...s[11]||(s[11]=[l("📬 消息推送",-1)])]),_:1}),e(a,{index:"sys-daily-report"},{default:t(()=>[...s[12]||(s[12]=[l("📊 每日汇报",-1)])]),_:1})]),_:1}),e(a,{index:"save-records"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(A))]),_:1}),s[13]||(s[13]=o("span",null,"转存日志",-1))]),_:1}),s[15]||(s[15]=o("div",{class:"sidebar-spacer"},null,-1)),o("div",U,"v"+m(y.value),1),e(a,{index:"logout"},{default:t(()=>[e(i,null,{default:t(()=>[e(r(D))]),_:1}),s[14]||(s[14]=o("span",null,"退出登录",-1))]),_:1})]),_:1},8,["default-active"])]),o("div",X,[o("header",Y,[o("div",Z,[o("span",$,m(k.value),1)]),o("div",ss,[e(N,{text:"",size:"small",onClick:S},{default:t(()=>[e(i,null,{default:t(()=>[e(r(E))]),_:1}),s[16]||(s[16]=l(" 返回前台 ",-1))]),_:1})])]),o("main",es,[e(V)])])])}}}),ds=z(ts,[["__scopeId","data-v-66b4feae"]]);export{ds as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-C7z77r4S.js";import{a as M,f as U}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-DUvV9NL6.js";import{a as M,f as U}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-Bl_rtZjE.js";import{a as M,f as U}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-C_73XAbP.js";import{a as M,f as U}from"./index-BC_nIdvI.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-DG5Z6wYC.js";import{a as M,f as U}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-BEhBl6RD.js";import{a as M,f as U}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-CBbTXmzV.js";import{a as M,f as U}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-C2VdJ-SC.js";import{a as M,f as U}from"./index-BC_nIdvI.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-BKVIEIby.js";import{a as M,f as U}from"./index-BC_nIdvI.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-Cez7RKLo.js";import{a as M,f as U}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-BNH_lgW0.js";import{a as M,f as U}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-WUL9v6H_.js";import{a as M,f as U}from"./index-BC_nIdvI.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-CRy8Zkz5.js";import{a as M,f as U}from"./index-BC_nIdvI.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-CBf4dz4k.js";import{a as M,f as U}from"./index-DXp3oW3R.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),G=E(z,[["__scopeId","data-v-bd0b6672"]]);export{G as default};
@@ -0,0 +1 @@
import{d as k,o as C,c as w,a,t as m,e as t,w as i,f as x,b as L,g as d,h as p,i as y,k as N,B as S,E as B,_ as E}from"./index-xijwxLU3.js";import{a as M,f as U}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const q={class:"admin-login-page"},A={class:"login-card"},I={class:"login-brand"},K={class:"login-title"},R={key:0,class:"error-msg"},j={class:"login-footer"},z=k({__name:"AdminLogin",setup(D){const _=d(),u=d(!1),c=d(""),g=d(""),v=d("");M().then(l=>{l.site_name&&(g.value=l.site_name)}).catch(()=>{});const s=S({username:"",password:""}),b={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function h(){var e,r,n;if(await((e=_.value)==null?void 0:e.validate().catch(()=>!1))){u.value=!0,c.value="";try{const o=await U(s.username,s.password);localStorage.setItem("admin_token",o.token),B.success("登录成功"),window.location.href="/admin"}catch(o){c.value=((n=(r=o==null?void 0:o.response)==null?void 0:r.data)==null?void 0:n.message)||(o==null?void 0:o.message)||"登录失败"}finally{u.value=!1}}}return C(async()=>{try{const e=await(await fetch("/health")).json();v.value=e.version||""}catch{}}),(l,e)=>{const r=p("el-input"),n=p("el-form-item"),o=p("el-button"),V=p("el-form");return y(),w("div",q,[e[4]||(e[4]=a("div",{class:"login-bg-pattern"},null,-1)),a("div",A,[a("div",I,[e[2]||(e[2]=a("div",{class:"login-logo"},"☁️",-1)),a("h1",K,m(g.value||"CloudSearch"),1),e[3]||(e[3]=a("p",{class:"login-subtitle"},"管理后台",-1))]),t(V,{ref_key:"formRef",ref:_,model:s,rules:b,"label-width":"0",size:"large",onKeyup:x(h,["enter"])},{default:i(()=>[t(n,{prop:"username"},{default:i(()=>[t(r,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=f=>s.username=f),placeholder:"用户名","prefix-icon":"User"},null,8,["modelValue"])]),_:1}),t(n,{prop:"password"},{default:i(()=>[t(r,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=f=>s.password=f),type:"password",placeholder:"密码","prefix-icon":"Lock","show-password":""},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(o,{type:"primary",loading:u.value,class:"login-btn",onClick:h},{default:i(()=>[N(m(u.value?"登录中...":"登 录"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),c.value?(y(),w("p",R,m(c.value),1)):L("",!0),a("p",j,"CloudSearch v"+m(v.value),1)])])}}}),H=E(z,[["__scopeId","data-v-bd0b6672"]]);export{H as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.cleanup-section[data-v-8b089041] .el-card__header{font-size:16px;font-weight:600;letter-spacing:.5px;border-bottom:1px solid var(--border)}.cleanup-grid[data-v-8b089041]{display:grid;grid-template-columns:1fr 1fr;gap:16px}.cleanup-group[data-v-8b089041]{border:1px solid var(--border);border-radius:var(--radius-md);padding:16px 18px;background:var(--bg-card);transition:box-shadow .2s}.cleanup-group[data-v-8b089041]:hover{box-shadow:var(--shadow-sm)}.cleanup-group-label[data-v-8b089041]{font-size:14px;font-weight:600;color:var(--primary);margin-bottom:12px;padding-bottom:8px;border-bottom:1px dashed var(--border-light)}.cleanup-hint[data-v-8b089041]{color:var(--text-tertiary);font-size:12px;line-height:1.5}.cleanup-actions[data-v-8b089041]{margin-top:20px;padding:16px 18px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px}.cleanup-actions-buttons[data-v-8b089041]{display:flex;gap:10px;flex-wrap:wrap}.cleanup-info[data-v-8b089041]{font-size:13px;color:var(--text-tertiary);display:flex;flex-wrap:wrap;gap:4px}@media (max-width: 900px){.cleanup-grid[data-v-8b089041]{grid-template-columns:1fr}}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-CBf4dz4k.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-Cez7RKLo.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-C7z77r4S.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-BEhBl6RD.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-xijwxLU3.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-CBbTXmzV.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-BNH_lgW0.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-C2VdJ-SC.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-Bl_rtZjE.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-WUL9v6H_.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-BKVIEIby.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-CRy8Zkz5.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-C_73XAbP.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-DUvV9NL6.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
@@ -0,0 +1 @@
import{C as s,b as a,a as n}from"./index-Bn7NwETH.js";import{d,c as t,n as l,j as o,b as r,k as u,t as _,i as c,_ as m}from"./index-DG5Z6wYC.js";const i=["src"],C=d({__name:"CloudBadge",props:{cloud_type:{},showIcon:{type:Boolean}},setup(e){return(p,y)=>(c(),t("span",{class:"cloud-badge",style:l({background:o(s)[e.cloud_type]})},[e.showIcon&&o(a)[e.cloud_type]?(c(),t("img",{key:0,src:o(a)[e.cloud_type],class:"badge-icon"},null,8,i)):r("",!0),u(" "+_(o(n)[e.cloud_type]),1)],4))}}),B=m(C,[["__scopeId","data-v-9106805f"]]);export{B as C};
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More