fix: 搜索路由参数校验 — page>=1、limit 1-500

This commit is contained in:
2026-05-20 02:46:13 +08:00
parent d7b055f88b
commit c4ca8edd58
53 changed files with 855 additions and 21 deletions
@@ -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('配置保存成功')
} }
@@ -2,7 +2,7 @@
<div class="user-layout"> <div class="user-layout">
<!-- Header --> <!-- Header -->
<div class="user-header"> <div class="user-header">
<span class="user-title">CloudSearch 用户中心</span> <span class="user-title">{{ siteName }} 用户中心</span>
<div class="header-right"> <div class="header-right">
<span class="user-account">{{ account }}</span> <span class="user-account">{{ account }}</span>
<el-button size="small" @click="handleLogout">退出登录</el-button> <el-button size="small" @click="handleLogout">退出登录</el-button>
@@ -152,6 +152,21 @@
<!-- 新增/编辑网盘弹窗 复刻 admin CloudConfig dialog --> <!-- 新增/编辑网盘弹窗 复刻 admin CloudConfig dialog -->
<el-dialog v-model="showAddDrive" :title="editingDrive ? '编辑网盘配置' : '新增网盘配置'" width="560px"> <el-dialog v-model="showAddDrive" :title="editingDrive ? '编辑网盘配置' : '新增网盘配置'" width="560px">
<el-form ref="driveFormRef" :model="driveForm" :rules="driveRules" label-width="120px"> <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-form-item label="网盘类型" prop="cloud_type">
<el-select v-model="driveForm.cloud_type" style="width: 100%" :disabled="!!editingDrive" @change="onDriveTypeChange"> <el-select v-model="driveForm.cloud_type" style="width: 100%" :disabled="!!editingDrive" @change="onDriveTypeChange">
<el-option <el-option
@@ -195,12 +210,35 @@ import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import axios from 'axios' import axios from 'axios'
import { CLOUD_LABELS } from '../../types' import { CLOUD_LABELS } from '../../types'
import { getSystemConfigs } from '../../api'
import type { CloudType } from '../../types' import type { CloudType } from '../../types'
import CloudBadge from '../../components/CloudBadge.vue' import CloudBadge from '../../components/CloudBadge.vue'
import type { ElForm } from 'element-plus' import type { ElForm } from 'element-plus'
const router = useRouter() const router = useRouter()
const account = ref('') 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() { function userApi() {
const token = localStorage.getItem('user_token') const token = localStorage.getItem('user_token')
@@ -220,7 +258,14 @@ onMounted(async () => {
localStorage.removeItem('user_token') localStorage.removeItem('user_token')
localStorage.removeItem('user_account') localStorage.removeItem('user_account')
router.push('/user/login') 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() { function handleLogout() {
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 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-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 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 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-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};
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-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-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 @@
.table-card[data-v-7c0dba25]{border-radius:var(--radius-lg);border:1px solid var(--border)!important;margin-bottom:20px}.table-card[data-v-7c0dba25] .el-card__header{font-size:15px;font-weight:600;background:var(--bg-card-header);border-bottom:1px solid var(--border);padding:12px 18px}.table-card[data-v-7c0dba25] .el-card__body{padding:0}.toolbar[data-v-7c0dba25]{margin-bottom:16px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}.nickname-text[data-v-7c0dba25]{font-weight:600;color:var(--text)}.promotion-text[data-v-7c0dba25]{font-size:12px;color:var(--text-secondary)}.uid-cell[data-v-7c0dba25]{font-family:SF Mono,Fira Code,Cascadia Code,monospace;font-size:11px;color:var(--text-tertiary);letter-spacing:.3px}.save-count[data-v-7c0dba25]{font-size:12px;color:var(--text-tertiary)}.verifying[data-v-7c0dba25]{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--text-tertiary)}.storage-cell[data-v-7c0dba25]{display:flex;flex-direction:column;gap:3px;padding:2px 0}.storage-bar-wrap[data-v-7c0dba25]{height:4px;background:var(--border-light);border-radius:2px;overflow:hidden}.storage-bar-fill[data-v-7c0dba25]{height:100%;border-radius:2px;transition:width .3s}.storage-bar-fill.bar-normal[data-v-7c0dba25]{background:#67c23a}.storage-bar-fill.bar-warning[data-v-7c0dba25]{background:#e6a23c}.storage-bar-fill.bar-danger[data-v-7c0dba25]{background:#f56c6c}.storage-text[data-v-7c0dba25]{font-size:11px;color:var(--text-tertiary);display:flex;align-items:center;gap:3px}.storage-used[data-v-7c0dba25]{color:var(--text-secondary);font-weight:600}.storage-total[data-v-7c0dba25]{color:var(--text);font-weight:600}.storage-free[data-v-7c0dba25]{color:var(--text-tertiary)}.cookie-tips-item[data-v-7c0dba25] .el-form-item__content{margin-left:0!important}.cookie-tips[data-v-7c0dba25]{background:#f8faff;border:1px solid #e8f0fe;border-radius:var(--radius-sm);padding:14px 16px;font-size:12px;line-height:1.8;color:var(--text-secondary);width:100%;box-sizing:border-box}.cookie-tips-header[data-v-7c0dba25]{margin-bottom:10px}.cookie-tips-title[data-v-7c0dba25]{font-weight:700;color:var(--primary);font-size:13px}.cookie-tips-steps[data-v-7c0dba25]{margin:0;padding-left:20px}.cookie-tips-steps li[data-v-7c0dba25]{margin-bottom:4px}.cookie-tips-steps code[data-v-7c0dba25]{background:var(--primary-soft);padding:1px 5px;border-radius:3px;font-size:11px;font-family:SF Mono,Fira Code,Cascadia Code,monospace}.cookie-tips-note[data-v-7c0dba25]{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[data-v-7c0dba25]{background:#f5f0e0;font-size:11px}[data-theme=dark] .cookie-tips[data-v-7c0dba25]{background:#409eff0f;border-color:#409eff26}[data-theme=dark] .cookie-tips-title[data-v-7c0dba25]{color:#66b1ff}[data-theme=dark] .cookie-tips-steps code[data-v-7c0dba25]{background:#409eff1f}[data-theme=dark] .cookie-tips-note[data-v-7c0dba25]{background:#ffc1071a;border-color:#ffc10733;color:#d4a84b}[data-theme=dark] .cookie-tips-note code[data-v-7c0dba25]{background:#ffc1071f}.cloud-toggle-grid[data-v-7c0dba25]{display:flex;flex-wrap:wrap;gap:8px}.cloud-toggle-chip[data-v-7c0dba25]{display:flex;align-items:center;gap:6px;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg)}.cloud-toggle-chip[data-v-7c0dba25]:hover{border-color:var(--primary)}.cloud-icon-img[data-v-7c0dba25]{width:20px;height:20px;object-fit:contain;flex-shrink:0}.cloud-label[data-v-7c0dba25]{font-size:13px;font-weight:500}[data-v-7c0dba25] .el-dialog__header{font-weight:700;font-size:16px}[data-v-7c0dba25] .el-dialog__body{padding:20px 24px}[data-v-7c0dba25] .el-dialog__wrapper .el-dialog{border-radius:var(--radius-lg)}
@@ -0,0 +1 @@
.table-card[data-v-da98fdaa]{border-radius:var(--radius-lg);border:1px solid var(--border)!important;margin-bottom:20px}.table-card[data-v-da98fdaa] .el-card__header{font-size:15px;font-weight:600;background:var(--bg-card-header);border-bottom:1px solid var(--border);padding:12px 18px}.table-card[data-v-da98fdaa] .el-card__body{padding:0}.toolbar[data-v-da98fdaa]{margin-bottom:16px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}.nickname-text[data-v-da98fdaa]{font-weight:600;color:var(--text)}.promotion-text[data-v-da98fdaa]{font-size:12px;color:var(--text-secondary)}.uid-cell[data-v-da98fdaa]{font-family:SF Mono,Fira Code,Cascadia Code,monospace;font-size:11px;color:var(--text-tertiary);letter-spacing:.3px}.save-count[data-v-da98fdaa]{font-size:12px;color:var(--text-tertiary)}.verifying[data-v-da98fdaa]{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--text-tertiary)}.storage-cell[data-v-da98fdaa]{display:flex;flex-direction:column;gap:3px;padding:2px 0}.storage-bar-wrap[data-v-da98fdaa]{height:4px;background:var(--border-light);border-radius:2px;overflow:hidden}.storage-bar-fill[data-v-da98fdaa]{height:100%;border-radius:2px;transition:width .3s}.storage-bar-fill.bar-normal[data-v-da98fdaa]{background:#67c23a}.storage-bar-fill.bar-warning[data-v-da98fdaa]{background:#e6a23c}.storage-bar-fill.bar-danger[data-v-da98fdaa]{background:#f56c6c}.storage-text[data-v-da98fdaa]{font-size:11px;color:var(--text-tertiary);display:flex;align-items:center;gap:3px}.storage-used[data-v-da98fdaa]{color:var(--text-secondary);font-weight:600}.storage-total[data-v-da98fdaa]{color:var(--text);font-weight:600}.storage-free[data-v-da98fdaa]{color:var(--text-tertiary)}.cookie-tips-item[data-v-da98fdaa] .el-form-item__content{margin-left:0!important}.cookie-tips[data-v-da98fdaa]{background:#f8faff;border:1px solid #e8f0fe;border-radius:var(--radius-sm);padding:14px 16px;font-size:12px;line-height:1.8;color:var(--text-secondary);width:100%;box-sizing:border-box}.cookie-tips-header[data-v-da98fdaa]{margin-bottom:10px}.cookie-tips-title[data-v-da98fdaa]{font-weight:700;color:var(--primary);font-size:13px}.cookie-tips-steps[data-v-da98fdaa]{margin:0;padding-left:20px}.cookie-tips-steps li[data-v-da98fdaa]{margin-bottom:4px}.cookie-tips-steps code[data-v-da98fdaa]{background:var(--primary-soft);padding:1px 5px;border-radius:3px;font-size:11px;font-family:SF Mono,Fira Code,Cascadia Code,monospace}.cookie-tips-note[data-v-da98fdaa]{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[data-v-da98fdaa]{background:#f5f0e0;font-size:11px}[data-theme=dark] .cookie-tips[data-v-da98fdaa]{background:#409eff0f;border-color:#409eff26}[data-theme=dark] .cookie-tips-title[data-v-da98fdaa]{color:#66b1ff}[data-theme=dark] .cookie-tips-steps code[data-v-da98fdaa]{background:#409eff1f}[data-theme=dark] .cookie-tips-note[data-v-da98fdaa]{background:#ffc1071a;border-color:#ffc10733;color:#d4a84b}[data-theme=dark] .cookie-tips-note code[data-v-da98fdaa]{background:#ffc1071f}.cloud-toggle-grid[data-v-da98fdaa]{display:flex;flex-wrap:wrap;gap:8px}.cloud-toggle-chip[data-v-da98fdaa]{display:flex;align-items:center;gap:6px;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg)}.cloud-toggle-chip[data-v-da98fdaa]:hover{border-color:var(--primary)}.cloud-icon-img[data-v-da98fdaa]{width:20px;height:20px;object-fit:contain;flex-shrink:0}.cloud-label[data-v-da98fdaa]{font-size:13px;font-weight:500}[data-v-da98fdaa] .el-dialog__header{font-weight:700;font-size:16px}[data-v-da98fdaa] .el-dialog__body{padding:20px 24px}[data-v-da98fdaa] .el-dialog__wrapper .el-dialog{border-radius:var(--radius-lg)}
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 D,o as I,c as a,a as u,F as N,t as d,b as f,e as m,w as p,f as L,r as P,g as i,h as C,u as U,i as n,j,s as E,k as x,n as F,_ as H}from"./index-C7z77r4S.js";import{g as K,a as Q}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const T={class:"home-page"},A={class:"hero-section"},W=["src","alt"],$={key:1,class:"logo-text"},G={class:"search-box"},J={key:1,class:"quote-line"},O={key:0,class:"cloud-zone"},X={class:"word-cloud"},Y=["onClick"],Z={key:1,class:"empty-area"},ee={key:2,class:"site-footer"},oe={class:"footer-inner"},te=D({__name:"HomePage",setup(se){const S=U(),v=i(""),g=i(!1),_=i(""),h=i(""),y=i(""),k=i(""),z=i(""),b=i([]),M=["学而时习之,不亦说乎。","温故而知新,可以为师矣。","千里之行,始于足下。","书山有路,勤为径。","学以致用,知行合一。","路漫漫其修远兮,吾将上下而求索。"],V=["#e74c3c","#e67e22","#f39c12","#27ae60","#2980b9","#8e44ad","#2c3e50","#16a085","#d35400","#c0392b","#1abc9c","#3498db","#9b59b6","#34495e","#e91e63","#009688","#ff5722","#795548","#607d8b","#673ab7"],q=[48,42,38,34,30,28,26,24,22,20,18,17,16,15,14,13,12];function w(){const l=v.value.trim();l&&S.push("/search?q="+encodeURIComponent(l))}function R(l){S.push("/search?q="+encodeURIComponent(l))}function B(){window.open("/disclaimer/","_blank")}return I(async()=>{var l;k.value=M[Math.floor(Math.random()*M.length)],z.value="古籍经典";try{const[o,r]=await Promise.all([K(),Q()]);if(r.site_logo&&(_.value=r.site_logo),r.site_name&&(h.value=r.site_name),r.site_disclaimer&&(y.value=r.site_disclaimer),g.value=!0,o!=null&&o.categories){const c=o.categories.find(t=>t.category==="hot");if((l=c==null?void 0:c.hot)!=null&&l.length){const t=c.hot.slice(0,25).map((e,s)=>({k:e.keyword,s:q[Math.min(s,q.length-1)],c:V[s%V.length],w:s<5?800:s<10?600:400,r:(Math.random()-.5)*6,o:1-s*.02,d:s*.08}));for(let e=t.length-1;e>0;e--){const s=Math.floor(Math.random()*(e+1));[t[e],t[s]]=[t[s],t[e]]}b.value=t}}}catch(o){console.error(o)}}),(l,o)=>{const r=C("el-icon"),c=C("el-input"),t=C("el-button");return n(),a("div",T,[u("div",A,[g.value?(n(),a(N,{key:0},[_.value?(n(),a("img",{key:0,src:_.value,alt:h.value||"CloudSearch",class:"logo-img",onError:o[0]||(o[0]=e=>{e.target.style.display="none",_.value=""})},null,40,W)):(n(),a("div",$,d(h.value||"CloudSearch"),1))],64)):f("",!0),u("div",G,[m(c,{modelValue:v.value,"onUpdate:modelValue":o[1]||(o[1]=e=>v.value=e),placeholder:"搜索网盘资源...",size:"large",clearable:"",onKeyup:L(w,["enter"])},{prefix:p(()=>[m(r,null,{default:p(()=>[m(j(E))]),_:1})]),_:1},8,["modelValue"]),m(t,{type:"primary",size:"large",onClick:w,class:"search-btn"},{default:p(()=>[...o[2]||(o[2]=[x("搜索",-1)])]),_:1})]),k.value?(n(),a("div",J,"「 "+d(k.value)+" 」 ---"+d(z.value),1)):f("",!0)]),b.value.length>0?(n(),a("div",O,[o[3]||(o[3]=u("p",{class:"cloud-title"},"大家都在搜",-1)),u("div",X,[(n(!0),a(N,null,P(b.value,e=>(n(),a("span",{key:e.k,class:"wc-word",style:F({fontSize:e.s+"px",color:e.c,fontWeight:e.w,transform:"rotate("+e.r+"deg)",opacity:e.o,animationDelay:e.d+"s"}),onClick:s=>R(e.k)},d(e.k),13,Y))),128))])])):g.value?(n(),a("div",Z,[...o[4]||(o[4]=[u("p",null,"搜索脉搏采集中...",-1)])])):f("",!0),y.value?(n(),a("div",ee,[u("div",oe,d(y.value),1),m(t,{class:"footer-btn",size:"small",onClick:B},{default:p(()=>[...o[5]||(o[5]=[x("免责声明",-1)])]),_:1})])):f("",!0)])}}}),re=H(te,[["__scopeId","data-v-6df62b50"]]);export{re as default};
@@ -0,0 +1 @@
import{d as D,o as I,c as a,a as u,F as N,t as d,b as f,e as m,w as p,f as L,r as P,g as i,h as C,u as U,i as n,j,s as E,k as x,n as F,_ as H}from"./index-BNH_lgW0.js";import{g as K,a as Q}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const T={class:"home-page"},A={class:"hero-section"},W=["src","alt"],$={key:1,class:"logo-text"},G={class:"search-box"},J={key:1,class:"quote-line"},O={key:0,class:"cloud-zone"},X={class:"word-cloud"},Y=["onClick"],Z={key:1,class:"empty-area"},ee={key:2,class:"site-footer"},oe={class:"footer-inner"},te=D({__name:"HomePage",setup(se){const S=U(),v=i(""),g=i(!1),_=i(""),h=i(""),y=i(""),k=i(""),z=i(""),b=i([]),M=["学而时习之,不亦说乎。","温故而知新,可以为师矣。","千里之行,始于足下。","书山有路,勤为径。","学以致用,知行合一。","路漫漫其修远兮,吾将上下而求索。"],V=["#e74c3c","#e67e22","#f39c12","#27ae60","#2980b9","#8e44ad","#2c3e50","#16a085","#d35400","#c0392b","#1abc9c","#3498db","#9b59b6","#34495e","#e91e63","#009688","#ff5722","#795548","#607d8b","#673ab7"],q=[48,42,38,34,30,28,26,24,22,20,18,17,16,15,14,13,12];function w(){const l=v.value.trim();l&&S.push("/search?q="+encodeURIComponent(l))}function R(l){S.push("/search?q="+encodeURIComponent(l))}function B(){window.open("/disclaimer/","_blank")}return I(async()=>{var l;k.value=M[Math.floor(Math.random()*M.length)],z.value="古籍经典";try{const[o,r]=await Promise.all([K(),Q()]);if(r.site_logo&&(_.value=r.site_logo),r.site_name&&(h.value=r.site_name),r.site_disclaimer&&(y.value=r.site_disclaimer),g.value=!0,o!=null&&o.categories){const c=o.categories.find(t=>t.category==="hot");if((l=c==null?void 0:c.hot)!=null&&l.length){const t=c.hot.slice(0,25).map((e,s)=>({k:e.keyword,s:q[Math.min(s,q.length-1)],c:V[s%V.length],w:s<5?800:s<10?600:400,r:(Math.random()-.5)*6,o:1-s*.02,d:s*.08}));for(let e=t.length-1;e>0;e--){const s=Math.floor(Math.random()*(e+1));[t[e],t[s]]=[t[s],t[e]]}b.value=t}}}catch(o){console.error(o)}}),(l,o)=>{const r=C("el-icon"),c=C("el-input"),t=C("el-button");return n(),a("div",T,[u("div",A,[g.value?(n(),a(N,{key:0},[_.value?(n(),a("img",{key:0,src:_.value,alt:h.value||"CloudSearch",class:"logo-img",onError:o[0]||(o[0]=e=>{e.target.style.display="none",_.value=""})},null,40,W)):(n(),a("div",$,d(h.value||"CloudSearch"),1))],64)):f("",!0),u("div",G,[m(c,{modelValue:v.value,"onUpdate:modelValue":o[1]||(o[1]=e=>v.value=e),placeholder:"搜索网盘资源...",size:"large",clearable:"",onKeyup:L(w,["enter"])},{prefix:p(()=>[m(r,null,{default:p(()=>[m(j(E))]),_:1})]),_:1},8,["modelValue"]),m(t,{type:"primary",size:"large",onClick:w,class:"search-btn"},{default:p(()=>[...o[2]||(o[2]=[x("搜索",-1)])]),_:1})]),k.value?(n(),a("div",J,"「 "+d(k.value)+" 」 ---"+d(z.value),1)):f("",!0)]),b.value.length>0?(n(),a("div",O,[o[3]||(o[3]=u("p",{class:"cloud-title"},"大家都在搜",-1)),u("div",X,[(n(!0),a(N,null,P(b.value,e=>(n(),a("span",{key:e.k,class:"wc-word",style:F({fontSize:e.s+"px",color:e.c,fontWeight:e.w,transform:"rotate("+e.r+"deg)",opacity:e.o,animationDelay:e.d+"s"}),onClick:s=>R(e.k)},d(e.k),13,Y))),128))])])):g.value?(n(),a("div",Z,[...o[4]||(o[4]=[u("p",null,"搜索脉搏采集中...",-1)])])):f("",!0),y.value?(n(),a("div",ee,[u("div",oe,d(y.value),1),m(t,{class:"footer-btn",size:"small",onClick:B},{default:p(()=>[...o[5]||(o[5]=[x("免责声明",-1)])]),_:1})])):f("",!0)])}}}),re=H(te,[["__scopeId","data-v-6df62b50"]]);export{re as default};
@@ -0,0 +1 @@
import{d as D,o as I,c as a,a as u,F as N,t as d,b as f,e as m,w as p,f as L,r as P,g as i,h as C,u as U,i as n,j,s as E,k as x,n as F,_ as H}from"./index-Cez7RKLo.js";import{g as K,a as Q}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const T={class:"home-page"},A={class:"hero-section"},W=["src","alt"],$={key:1,class:"logo-text"},G={class:"search-box"},J={key:1,class:"quote-line"},O={key:0,class:"cloud-zone"},X={class:"word-cloud"},Y=["onClick"],Z={key:1,class:"empty-area"},ee={key:2,class:"site-footer"},oe={class:"footer-inner"},te=D({__name:"HomePage",setup(se){const S=U(),v=i(""),g=i(!1),_=i(""),h=i(""),y=i(""),k=i(""),z=i(""),b=i([]),M=["学而时习之,不亦说乎。","温故而知新,可以为师矣。","千里之行,始于足下。","书山有路,勤为径。","学以致用,知行合一。","路漫漫其修远兮,吾将上下而求索。"],V=["#e74c3c","#e67e22","#f39c12","#27ae60","#2980b9","#8e44ad","#2c3e50","#16a085","#d35400","#c0392b","#1abc9c","#3498db","#9b59b6","#34495e","#e91e63","#009688","#ff5722","#795548","#607d8b","#673ab7"],q=[48,42,38,34,30,28,26,24,22,20,18,17,16,15,14,13,12];function w(){const l=v.value.trim();l&&S.push("/search?q="+encodeURIComponent(l))}function R(l){S.push("/search?q="+encodeURIComponent(l))}function B(){window.open("/disclaimer/","_blank")}return I(async()=>{var l;k.value=M[Math.floor(Math.random()*M.length)],z.value="古籍经典";try{const[o,r]=await Promise.all([K(),Q()]);if(r.site_logo&&(_.value=r.site_logo),r.site_name&&(h.value=r.site_name),r.site_disclaimer&&(y.value=r.site_disclaimer),g.value=!0,o!=null&&o.categories){const c=o.categories.find(t=>t.category==="hot");if((l=c==null?void 0:c.hot)!=null&&l.length){const t=c.hot.slice(0,25).map((e,s)=>({k:e.keyword,s:q[Math.min(s,q.length-1)],c:V[s%V.length],w:s<5?800:s<10?600:400,r:(Math.random()-.5)*6,o:1-s*.02,d:s*.08}));for(let e=t.length-1;e>0;e--){const s=Math.floor(Math.random()*(e+1));[t[e],t[s]]=[t[s],t[e]]}b.value=t}}}catch(o){console.error(o)}}),(l,o)=>{const r=C("el-icon"),c=C("el-input"),t=C("el-button");return n(),a("div",T,[u("div",A,[g.value?(n(),a(N,{key:0},[_.value?(n(),a("img",{key:0,src:_.value,alt:h.value||"CloudSearch",class:"logo-img",onError:o[0]||(o[0]=e=>{e.target.style.display="none",_.value=""})},null,40,W)):(n(),a("div",$,d(h.value||"CloudSearch"),1))],64)):f("",!0),u("div",G,[m(c,{modelValue:v.value,"onUpdate:modelValue":o[1]||(o[1]=e=>v.value=e),placeholder:"搜索网盘资源...",size:"large",clearable:"",onKeyup:L(w,["enter"])},{prefix:p(()=>[m(r,null,{default:p(()=>[m(j(E))]),_:1})]),_:1},8,["modelValue"]),m(t,{type:"primary",size:"large",onClick:w,class:"search-btn"},{default:p(()=>[...o[2]||(o[2]=[x("搜索",-1)])]),_:1})]),k.value?(n(),a("div",J,"「 "+d(k.value)+" 」 ---"+d(z.value),1)):f("",!0)]),b.value.length>0?(n(),a("div",O,[o[3]||(o[3]=u("p",{class:"cloud-title"},"大家都在搜",-1)),u("div",X,[(n(!0),a(N,null,P(b.value,e=>(n(),a("span",{key:e.k,class:"wc-word",style:F({fontSize:e.s+"px",color:e.c,fontWeight:e.w,transform:"rotate("+e.r+"deg)",opacity:e.o,animationDelay:e.d+"s"}),onClick:s=>R(e.k)},d(e.k),13,Y))),128))])])):g.value?(n(),a("div",Z,[...o[4]||(o[4]=[u("p",null,"搜索脉搏采集中...",-1)])])):f("",!0),y.value?(n(),a("div",ee,[u("div",oe,d(y.value),1),m(t,{class:"footer-btn",size:"small",onClick:B},{default:p(()=>[...o[5]||(o[5]=[x("免责声明",-1)])]),_:1})])):f("",!0)])}}}),re=H(te,[["__scopeId","data-v-6df62b50"]]);export{re 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
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 @@
.user-layout[data-v-c70450d4]{min-height:100vh;background:#f0f2f5}.user-header[data-v-c70450d4]{display:flex;justify-content:space-between;align-items:center;padding:0 24px;height:56px;background:#fff;box-shadow:0 1px 4px #0000000f}.user-title[data-v-c70450d4]{font-size:16px;font-weight:600;color:#303133}.header-right[data-v-c70450d4]{display:flex;align-items:center;gap:12px}.user-account[data-v-c70450d4]{font-size:13px;color:#606266}.user-body[data-v-c70450d4]{display:flex;min-height:calc(100vh - 56px)}.user-sidebar[data-v-c70450d4]{width:180px;background:#fff;border-right:1px solid #e4e7ed;padding:12px 0;flex-shrink:0}.sidebar-item[data-v-c70450d4]{padding:10px 20px;cursor:pointer;font-size:14px;color:#606266;transition:all .2s}.sidebar-item[data-v-c70450d4]:hover{background:#f5f7fa;color:#303133}.sidebar-item.active[data-v-c70450d4]{background:#ecf5ff;color:#409eff;font-weight:500;border-right:2px solid #409eff}.user-content[data-v-c70450d4]{flex:1;padding:20px;overflow:auto}.cookie-tips-item[data-v-c70450d4] .el-form-item__content{margin-left:0!important}.cookie-tips[data-v-c70450d4]{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[data-v-c70450d4]{margin-bottom:10px}.cookie-tips-title[data-v-c70450d4]{font-weight:700;color:#409eff;font-size:13px}.cookie-tips-steps[data-v-c70450d4]{margin:0;padding-left:20px}.cookie-tips-steps li[data-v-c70450d4]{margin-bottom:4px}.cookie-tips-steps code[data-v-c70450d4]{background:#ecf5ff;padding:1px 5px;border-radius:3px;font-size:11px;font-family:SF Mono,Fira Code,Cascadia Code,monospace}.cookie-tips-note[data-v-c70450d4]{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[data-v-c70450d4]{background:#f5f0e0;font-size:11px}
@@ -0,0 +1 @@
.user-layout[data-v-c6012e1c]{min-height:100vh;background:#f0f2f5}.user-header[data-v-c6012e1c]{display:flex;justify-content:space-between;align-items:center;padding:0 24px;height:56px;background:#fff;box-shadow:0 1px 4px #0000000f}.user-title[data-v-c6012e1c]{font-size:16px;font-weight:600;color:#303133}.header-right[data-v-c6012e1c]{display:flex;align-items:center;gap:12px}.user-account[data-v-c6012e1c]{font-size:13px;color:#606266}.user-body[data-v-c6012e1c]{display:flex;min-height:calc(100vh - 56px)}.user-sidebar[data-v-c6012e1c]{width:180px;background:#fff;border-right:1px solid #e4e7ed;padding:12px 0;flex-shrink:0}.sidebar-item[data-v-c6012e1c]{padding:10px 20px;cursor:pointer;font-size:14px;color:#606266;transition:all .2s}.sidebar-item[data-v-c6012e1c]:hover{background:#f5f7fa;color:#303133}.sidebar-item.active[data-v-c6012e1c]{background:#ecf5ff;color:#409eff;font-weight:500;border-right:2px solid #409eff}.user-content[data-v-c6012e1c]{flex:1;padding:20px;overflow:auto}.cookie-tips-item[data-v-c6012e1c] .el-form-item__content{margin-left:0!important}.cookie-tips[data-v-c6012e1c]{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[data-v-c6012e1c]{margin-bottom:10px}.cookie-tips-title[data-v-c6012e1c]{font-weight:700;color:#409eff;font-size:13px}.cookie-tips-steps[data-v-c6012e1c]{margin:0;padding-left:20px}.cookie-tips-steps li[data-v-c6012e1c]{margin-bottom:4px}.cookie-tips-steps code[data-v-c6012e1c]{background:#ecf5ff;padding:1px 5px;border-radius:3px;font-size:11px;font-family:SF Mono,Fira Code,Cascadia Code,monospace}.cookie-tips-note[data-v-c6012e1c]{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[data-v-c6012e1c]{background:#f5f0e0;font-size:11px}
@@ -0,0 +1 @@
import{d as I,o as L,c as f,a as n,t as p,e as r,w as i,f as N,k as h,F as C,r as P,b as E,g as _,h as m,i as u,x as U,B as R,E as y,u as F,_ as K}from"./index-BNH_lgW0.js";import{a as V}from"./index-DZ_Kha3d.js";const M={class:"user-login-page"},T={class:"login-card"},$={class:"login-subtitle"},j={class:"login-switch"},D={key:0,class:"qr-section"},A={class:"qr-title"},G={class:"qr-grid"},H={class:"qr-label"},J={class:"qr-img-wrap"},O=["src","alt"],Q=I({__name:"UserLogin",setup(W){const z=F(),l=_(!0),w=_(!1),q=_(),g=_([]),b=_("扫码加入推广团队"),o=R({platform:"",phone:"",password:"",confirmPassword:""}),B={platform:[{required:!0,message:"请选择推广平台",trigger:"change"}],phone:[{validator:(d,e,t)=>{e?/^1[3-9]\d{9}$/.test(e)?t():t(new Error("请输入有效的手机号码")):t(new Error("请输入手机号码"))},trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:6,message:"密码至少6位",trigger:"blur"}],confirmPassword:[{validator:(d,e,t)=>{e?e!==o.password?t(new Error("两次密码不一致")):t():t(new Error("请确认密码"))},trigger:"blur"}]};L(async()=>{try{const{data:d}=await V.get("/api/promotion-platforms");g.value=d.platforms,d.title&&(b.value=d.title)}catch{}});async function k(){var e,t,v;if(await((e=q.value)==null?void 0:e.validate().catch(()=>!1))){w.value=!0;try{if(l.value){const a=o.platform+"-"+o.phone.trim(),{data:c}=await V.post("/api/user/login",{account:a,password:o.password});localStorage.setItem("user_token",c.token),localStorage.setItem("user_account",a),y.success("登录成功"),z.push("/user/dashboard")}else{const{data:a}=await V.post("/api/user/register",{platform:o.platform,phone:o.phone.trim(),password:o.password});y.success(a.message||"注册成功,请登录"),l.value=!0,o.password="",o.confirmPassword=""}}catch(a){y.error(((v=(t=a.response)==null?void 0:t.data)==null?void 0:v.error)||"操作失败")}finally{w.value=!1}}}return(d,e)=>{const t=m("el-option"),v=m("el-select"),a=m("el-form-item"),c=m("el-input"),x=m("el-button"),S=m("el-form");return u(),f("div",M,[n("div",T,[e[5]||(e[5]=n("h1",{class:"login-title"},"CloudSearch 用户中心",-1)),n("p",$,p(l.value?"登录您的账号":"注册新账号"),1),r(S,{ref_key:"formRef",ref:q,model:o,rules:B,"label-width":"0",onKeyup:N(k,["enter"])},{default:i(()=>[r(a,{prop:"platform"},{default:i(()=>[r(v,{modelValue:o.platform,"onUpdate:modelValue":e[0]||(e[0]=s=>o.platform=s),placeholder:"选择推广平台",size:"large",style:{width:"100%"}},{default:i(()=>[(u(!0),f(C,null,P(g.value,s=>(u(),U(t,{key:s.name,label:s.name,value:s.name},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),r(a,{prop:"phone"},{default:i(()=>[r(c,{modelValue:o.phone,"onUpdate:modelValue":e[1]||(e[1]=s=>o.phone=s),placeholder:"手机号码",size:"large"},null,8,["modelValue"])]),_:1}),r(a,{prop:"password"},{default:i(()=>[r(c,{modelValue:o.password,"onUpdate:modelValue":e[2]||(e[2]=s=>o.password=s),type:"password",placeholder:"密码",size:"large","show-password":""},null,8,["modelValue"])]),_:1}),l.value?E("",!0):(u(),U(a,{key:0,prop:"confirmPassword"},{default:i(()=>[r(c,{modelValue:o.confirmPassword,"onUpdate:modelValue":e[3]||(e[3]=s=>o.confirmPassword=s),type:"password",placeholder:"确认密码",size:"large","show-password":""},null,8,["modelValue"])]),_:1})),r(a,null,{default:i(()=>[r(x,{type:"primary",size:"large",loading:w.value,style:{width:"100%"},onClick:k},{default:i(()=>[h(p(l.value?"登 录":"注 册"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),n("div",j,[h(p(l.value?"还没有账号?":"已有账号?")+" ",1),r(x,{link:"",type:"primary",onClick:e[4]||(e[4]=s=>l.value=!l.value)},{default:i(()=>[h(p(l.value?"立即注册":"去登录"),1)]),_:1})])]),g.value.length>0?(u(),f("div",D,[n("div",A,p(b.value),1),n("div",G,[(u(!0),f(C,null,P(g.value,s=>(u(),f("div",{key:s.name,class:"qr-item"},[n("div",H,"加入【"+p(s.name)+"】团队",1),n("div",J,[n("img",{src:"https://api.qrserver.com/v1/create-qr-code/?size=120x120&data="+encodeURIComponent(s.join_url),alt:"加入"+s.name,class:"qr-image"},null,8,O)])]))),128))])])):E("",!0)])}}}),ee=K(Q,[["__scopeId","data-v-f27b738e"]]);export{ee as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as f,a as n,t as p,e as r,w as i,f as N,k as h,F as C,r as P,b as E,g as _,h as m,i as u,x as U,B as R,E as y,u as F,_ as K}from"./index-Cez7RKLo.js";import{a as V}from"./index-DZ_Kha3d.js";const M={class:"user-login-page"},T={class:"login-card"},$={class:"login-subtitle"},j={class:"login-switch"},D={key:0,class:"qr-section"},A={class:"qr-title"},G={class:"qr-grid"},H={class:"qr-label"},J={class:"qr-img-wrap"},O=["src","alt"],Q=I({__name:"UserLogin",setup(W){const z=F(),l=_(!0),w=_(!1),q=_(),g=_([]),b=_("扫码加入推广团队"),o=R({platform:"",phone:"",password:"",confirmPassword:""}),B={platform:[{required:!0,message:"请选择推广平台",trigger:"change"}],phone:[{validator:(d,e,t)=>{e?/^1[3-9]\d{9}$/.test(e)?t():t(new Error("请输入有效的手机号码")):t(new Error("请输入手机号码"))},trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:6,message:"密码至少6位",trigger:"blur"}],confirmPassword:[{validator:(d,e,t)=>{e?e!==o.password?t(new Error("两次密码不一致")):t():t(new Error("请确认密码"))},trigger:"blur"}]};L(async()=>{try{const{data:d}=await V.get("/api/promotion-platforms");g.value=d.platforms,d.title&&(b.value=d.title)}catch{}});async function k(){var e,t,v;if(await((e=q.value)==null?void 0:e.validate().catch(()=>!1))){w.value=!0;try{if(l.value){const a=o.platform+"-"+o.phone.trim(),{data:c}=await V.post("/api/user/login",{account:a,password:o.password});localStorage.setItem("user_token",c.token),localStorage.setItem("user_account",a),y.success("登录成功"),z.push("/user/dashboard")}else{const{data:a}=await V.post("/api/user/register",{platform:o.platform,phone:o.phone.trim(),password:o.password});y.success(a.message||"注册成功,请登录"),l.value=!0,o.password="",o.confirmPassword=""}}catch(a){y.error(((v=(t=a.response)==null?void 0:t.data)==null?void 0:v.error)||"操作失败")}finally{w.value=!1}}}return(d,e)=>{const t=m("el-option"),v=m("el-select"),a=m("el-form-item"),c=m("el-input"),x=m("el-button"),S=m("el-form");return u(),f("div",M,[n("div",T,[e[5]||(e[5]=n("h1",{class:"login-title"},"CloudSearch 用户中心",-1)),n("p",$,p(l.value?"登录您的账号":"注册新账号"),1),r(S,{ref_key:"formRef",ref:q,model:o,rules:B,"label-width":"0",onKeyup:N(k,["enter"])},{default:i(()=>[r(a,{prop:"platform"},{default:i(()=>[r(v,{modelValue:o.platform,"onUpdate:modelValue":e[0]||(e[0]=s=>o.platform=s),placeholder:"选择推广平台",size:"large",style:{width:"100%"}},{default:i(()=>[(u(!0),f(C,null,P(g.value,s=>(u(),U(t,{key:s.name,label:s.name,value:s.name},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),r(a,{prop:"phone"},{default:i(()=>[r(c,{modelValue:o.phone,"onUpdate:modelValue":e[1]||(e[1]=s=>o.phone=s),placeholder:"手机号码",size:"large"},null,8,["modelValue"])]),_:1}),r(a,{prop:"password"},{default:i(()=>[r(c,{modelValue:o.password,"onUpdate:modelValue":e[2]||(e[2]=s=>o.password=s),type:"password",placeholder:"密码",size:"large","show-password":""},null,8,["modelValue"])]),_:1}),l.value?E("",!0):(u(),U(a,{key:0,prop:"confirmPassword"},{default:i(()=>[r(c,{modelValue:o.confirmPassword,"onUpdate:modelValue":e[3]||(e[3]=s=>o.confirmPassword=s),type:"password",placeholder:"确认密码",size:"large","show-password":""},null,8,["modelValue"])]),_:1})),r(a,null,{default:i(()=>[r(x,{type:"primary",size:"large",loading:w.value,style:{width:"100%"},onClick:k},{default:i(()=>[h(p(l.value?"登 录":"注 册"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),n("div",j,[h(p(l.value?"还没有账号?":"已有账号?")+" ",1),r(x,{link:"",type:"primary",onClick:e[4]||(e[4]=s=>l.value=!l.value)},{default:i(()=>[h(p(l.value?"立即注册":"去登录"),1)]),_:1})])]),g.value.length>0?(u(),f("div",D,[n("div",A,p(b.value),1),n("div",G,[(u(!0),f(C,null,P(g.value,s=>(u(),f("div",{key:s.name,class:"qr-item"},[n("div",H,"加入【"+p(s.name)+"】团队",1),n("div",J,[n("img",{src:"https://api.qrserver.com/v1/create-qr-code/?size=120x120&data="+encodeURIComponent(s.join_url),alt:"加入"+s.name,class:"qr-image"},null,8,O)])]))),128))])])):E("",!0)])}}}),ee=K(Q,[["__scopeId","data-v-f27b738e"]]);export{ee as default};
@@ -0,0 +1 @@
import{d as I,o as L,c as f,a as n,t as p,e as r,w as i,f as N,k as h,F as C,r as P,b as E,g as _,h as m,i as u,x as U,B as R,E as y,u as F,_ as K}from"./index-C7z77r4S.js";import{a as V}from"./index-DZ_Kha3d.js";const M={class:"user-login-page"},T={class:"login-card"},$={class:"login-subtitle"},j={class:"login-switch"},D={key:0,class:"qr-section"},A={class:"qr-title"},G={class:"qr-grid"},H={class:"qr-label"},J={class:"qr-img-wrap"},O=["src","alt"],Q=I({__name:"UserLogin",setup(W){const z=F(),l=_(!0),w=_(!1),q=_(),g=_([]),b=_("扫码加入推广团队"),o=R({platform:"",phone:"",password:"",confirmPassword:""}),B={platform:[{required:!0,message:"请选择推广平台",trigger:"change"}],phone:[{validator:(d,e,t)=>{e?/^1[3-9]\d{9}$/.test(e)?t():t(new Error("请输入有效的手机号码")):t(new Error("请输入手机号码"))},trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:6,message:"密码至少6位",trigger:"blur"}],confirmPassword:[{validator:(d,e,t)=>{e?e!==o.password?t(new Error("两次密码不一致")):t():t(new Error("请确认密码"))},trigger:"blur"}]};L(async()=>{try{const{data:d}=await V.get("/api/promotion-platforms");g.value=d.platforms,d.title&&(b.value=d.title)}catch{}});async function k(){var e,t,v;if(await((e=q.value)==null?void 0:e.validate().catch(()=>!1))){w.value=!0;try{if(l.value){const a=o.platform+"-"+o.phone.trim(),{data:c}=await V.post("/api/user/login",{account:a,password:o.password});localStorage.setItem("user_token",c.token),localStorage.setItem("user_account",a),y.success("登录成功"),z.push("/user/dashboard")}else{const{data:a}=await V.post("/api/user/register",{platform:o.platform,phone:o.phone.trim(),password:o.password});y.success(a.message||"注册成功,请登录"),l.value=!0,o.password="",o.confirmPassword=""}}catch(a){y.error(((v=(t=a.response)==null?void 0:t.data)==null?void 0:v.error)||"操作失败")}finally{w.value=!1}}}return(d,e)=>{const t=m("el-option"),v=m("el-select"),a=m("el-form-item"),c=m("el-input"),x=m("el-button"),S=m("el-form");return u(),f("div",M,[n("div",T,[e[5]||(e[5]=n("h1",{class:"login-title"},"CloudSearch 用户中心",-1)),n("p",$,p(l.value?"登录您的账号":"注册新账号"),1),r(S,{ref_key:"formRef",ref:q,model:o,rules:B,"label-width":"0",onKeyup:N(k,["enter"])},{default:i(()=>[r(a,{prop:"platform"},{default:i(()=>[r(v,{modelValue:o.platform,"onUpdate:modelValue":e[0]||(e[0]=s=>o.platform=s),placeholder:"选择推广平台",size:"large",style:{width:"100%"}},{default:i(()=>[(u(!0),f(C,null,P(g.value,s=>(u(),U(t,{key:s.name,label:s.name,value:s.name},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),r(a,{prop:"phone"},{default:i(()=>[r(c,{modelValue:o.phone,"onUpdate:modelValue":e[1]||(e[1]=s=>o.phone=s),placeholder:"手机号码",size:"large"},null,8,["modelValue"])]),_:1}),r(a,{prop:"password"},{default:i(()=>[r(c,{modelValue:o.password,"onUpdate:modelValue":e[2]||(e[2]=s=>o.password=s),type:"password",placeholder:"密码",size:"large","show-password":""},null,8,["modelValue"])]),_:1}),l.value?E("",!0):(u(),U(a,{key:0,prop:"confirmPassword"},{default:i(()=>[r(c,{modelValue:o.confirmPassword,"onUpdate:modelValue":e[3]||(e[3]=s=>o.confirmPassword=s),type:"password",placeholder:"确认密码",size:"large","show-password":""},null,8,["modelValue"])]),_:1})),r(a,null,{default:i(()=>[r(x,{type:"primary",size:"large",loading:w.value,style:{width:"100%"},onClick:k},{default:i(()=>[h(p(l.value?"登 录":"注 册"),1)]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"]),n("div",j,[h(p(l.value?"还没有账号?":"已有账号?")+" ",1),r(x,{link:"",type:"primary",onClick:e[4]||(e[4]=s=>l.value=!l.value)},{default:i(()=>[h(p(l.value?"立即注册":"去登录"),1)]),_:1})])]),g.value.length>0?(u(),f("div",D,[n("div",A,p(b.value),1),n("div",G,[(u(!0),f(C,null,P(g.value,s=>(u(),f("div",{key:s.name,class:"qr-item"},[n("div",H,"加入【"+p(s.name)+"】团队",1),n("div",J,[n("img",{src:"https://api.qrserver.com/v1/create-qr-code/?size=120x120&data="+encodeURIComponent(s.join_url),alt:"加入"+s.name,class:"qr-image"},null,8,O)])]))),128))])])):E("",!0)])}}}),ee=K(Q,[["__scopeId","data-v-f27b738e"]]);export{ee 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
+1 -1
View File
@@ -15,7 +15,7 @@
}).catch(function(){}); }).catch(function(){});
})(); })();
</script> </script>
<script type="module" crossorigin src="/assets/index-DG5Z6wYC.js"></script> <script type="module" crossorigin src="/assets/index-BNH_lgW0.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-CAy_4E9W.css"> <link rel="stylesheet" crossorigin href="/assets/index-CAy_4E9W.css">
</head> </head>
<body> <body>
+7 -3
View File
@@ -141,9 +141,13 @@ export function saveCloudConfig(data: {
WHERE id = ?` WHERE id = ?`
).run(data.cloud_type, encryptedCookie, data.nickname || null, cookieUidForUpdate || null, cookieUidForUpdate || null, data.promotion_account || null, data.is_active ?? 1, data.storage_used || null, data.storage_total || null, localTimestamp(), data.id); ).run(data.cloud_type, encryptedCookie, data.nickname || null, cookieUidForUpdate || null, cookieUidForUpdate || null, data.promotion_account || null, data.is_active ?? 1, data.storage_used || null, data.storage_total || null, localTimestamp(), data.id);
} else { } else {
const existing = db.prepare( const existing = data.promotion_account
'SELECT id, nickname FROM cloud_configs WHERE cloud_type = ? AND is_active = 1 LIMIT 1' ? db.prepare(
).get(data.cloud_type) as any; 'SELECT id, nickname FROM cloud_configs WHERE cloud_type = ? AND is_active = 1 AND promotion_account = ? LIMIT 1'
).get(data.cloud_type, data.promotion_account) as any
: db.prepare(
'SELECT id, nickname FROM cloud_configs WHERE cloud_type = ? AND is_active = 1 LIMIT 1'
).get(data.cloud_type) as any;
if (existing) { if (existing) {
db.prepare( db.prepare(
`UPDATE cloud_configs SET `UPDATE cloud_configs SET
+16 -5
View File
@@ -1,11 +1,22 @@
import { Router } from 'express'; import { Router } from "express";
import searchRoutes from './search.routes'; import searchRoutes from "./search.routes";
import adminRoutes from './admin.routes'; import adminRoutes from "./admin.routes";
import uploadRoutes from './upload.routes'; import uploadRoutes from "./upload.routes";
import cleanupRoutes from './cleanup.routes'; import cleanupRoutes from "./cleanup.routes";
import { getAllSystemConfigs } from "../admin/system-config.service";
const router = Router(); const router = Router();
// Public system configs endpoint (for whitelist dirs etc.)
router.get("/system-configs", (_req, res) => {
try {
const configs = getAllSystemConfigs();
res.json(configs);
} catch (err: any) {
res.status(500).json({ error: err.message || "Failed to get system configs" });
}
});
router.use(searchRoutes); router.use(searchRoutes);
router.use(adminRoutes); router.use(adminRoutes);
router.use(uploadRoutes); router.use(uploadRoutes);
+11
View File
@@ -289,6 +289,17 @@ router.get('/search', searchLimiter, async (req: Request, res: Response) => {
res.status(400).json({ error: 'Query parameter "q" is required' }); res.status(400).json({ error: 'Query parameter "q" is required' });
return; return;
} }
if (isNaN(page) || page < 1) {
res.status(400).json({ error: 'Page must be >= 1' });
return;
}
if (req.query.limit !== undefined) {
const limit = parseInt(req.query.limit as string, 10);
if (isNaN(limit) || limit < 1 || limit > 500) {
res.status(400).json({ error: 'Limit must be 1-500' });
return;
}
}
const result = await search(keyword, page, ip); const result = await search(keyword, page, ip);
+1 -1
View File
@@ -64,7 +64,7 @@ router.get('/save-records', (req: Request, res: Response) => {
router.get('/cloud-configs', (req: Request, res: Response) => { router.get('/cloud-configs', (req: Request, res: Response) => {
const db = getDb(); const db = getDb();
const configs = db.prepare( const configs = db.prepare(
'SELECT id, cloud_type, nickname, cloud_type_uid, cookie_uid, promotion_account, storage_used, storage_total, is_active, verification_status, consecutive_failures, last_used_at, total_saves, created_at FROM cloud_configs WHERE promotion_account = ? AND is_active = 1 ORDER BY created_at DESC' 'SELECT id, cloud_type, nickname, cloud_type_uid, cookie_uid, promotion_account, storage_used, storage_total, is_active, verification_status, consecutive_failures, last_used_at, total_saves, created_at FROM cloud_configs WHERE promotion_account = ? ORDER BY created_at DESC'
).all(req.user!.account); ).all(req.user!.account);
res.json(configs); res.json(configs);
}); });