From 7627885b1b5a0bc307704a71939e4899e35f747a Mon Sep 17 00:00:00 2001 From: yuyx <237899745@qq.com> Date: Mon, 16 Feb 2026 00:17:11 +0800 Subject: [PATCH] =?UTF-8?q?fix(passkey):=20=E4=BF=AE=E5=A4=8D=E5=AE=89?= =?UTF-8?q?=E5=8D=93=E7=AB=AF=20Credential=20Manager=20=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=B9=B6=E5=A2=9E=E5=BC=BA=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新说明:\n1. 优化 Passkey 注册参数(residentKey/hints),提升安卓设备兼容性。\n2. 前台与后台统一增强 Passkey 错误提示,针对 NotReadableError/小米浏览器给出明确引导。\n3. 同步更新相关前端页面逻辑与构建产物。 --- admin-frontend/src/pages/SettingsPage.vue | 7 +- admin-frontend/src/utils/passkey.js | 30 +++++++++ app-frontend/src/layouts/AppLayout.vue | 7 +- app-frontend/src/utils/passkey.js | 30 +++++++++ services/passkeys.py | 14 ++++ static/admin/.vite/manifest.json | 66 +++++++++---------- ...ToZ0K.js => AnnouncementsPage-BZcUuw5h.js} | 2 +- ...Page-DLwV2mnS.js => EmailPage-2qqiYZlu.js} | 2 +- ...-BgrVN8tx.js => FeedbacksPage-DadToBbu.js} | 2 +- ...sPage-D86va6oN.js => LogsPage-CsJ25c1g.js} | 2 +- ...rid-R-_JZS_i.js => MetricGrid-COFDfeGs.js} | 2 +- ...age-T1JNMZd3.js => ReportPage-mvWNEhXv.js} | 2 +- ...e-BtFrxpZs.js => SecurityPage-DgYgSgTK.js} | 2 +- static/admin/assets/SettingsPage-BAa-Qu3q.css | 1 + static/admin/assets/SettingsPage-BFVngq9z.js | 1 - static/admin/assets/SettingsPage-qQfORNZC.css | 1 - static/admin/assets/SettingsPage-za1oQElD.js | 1 + ...age-eaCcaVxM.js => SystemPage-D_lad_h_.js} | 2 +- ...Page-o8CptFMp.js => UsersPage-CMgBpiWX.js} | 2 +- .../{email-DX46gPSl.js => email-BoZeA2tF.js} | 2 +- .../{index-BMIn4N2u.js => index-BwP1dZnj.js} | 4 +- ...{system-CeJP0y2Z.js => system-Dluvi0rE.js} | 2 +- .../{tasks-DaPM55hg.js => tasks-D5YLLzN-.js} | 2 +- .../{users-DoPbHko8.js => users-B3RByMlV.js} | 2 +- static/admin/index.html | 2 +- static/app/.vite/manifest.json | 6 +- ...ut-eF3aodBF.css => AppLayout-B8xVcK25.css} | 2 +- ...yout-BVxPO9-W.js => AppLayout-CJ_Pqzl7.js} | 2 +- .../{app-CfFNNMbF.js => app-Cm7xb8k5.js} | 4 +- static/app/index.html | 2 +- 30 files changed, 137 insertions(+), 69 deletions(-) rename static/admin/assets/{AnnouncementsPage-BY4ToZ0K.js => AnnouncementsPage-BZcUuw5h.js} (99%) rename static/admin/assets/{EmailPage-DLwV2mnS.js => EmailPage-2qqiYZlu.js} (99%) rename static/admin/assets/{FeedbacksPage-BgrVN8tx.js => FeedbacksPage-DadToBbu.js} (97%) rename static/admin/assets/{LogsPage-D86va6oN.js => LogsPage-CsJ25c1g.js} (98%) rename static/admin/assets/{MetricGrid-R-_JZS_i.js => MetricGrid-COFDfeGs.js} (94%) rename static/admin/assets/{ReportPage-T1JNMZd3.js => ReportPage-mvWNEhXv.js} (98%) rename static/admin/assets/{SecurityPage-BtFrxpZs.js => SecurityPage-DgYgSgTK.js} (99%) create mode 100644 static/admin/assets/SettingsPage-BAa-Qu3q.css delete mode 100644 static/admin/assets/SettingsPage-BFVngq9z.js delete mode 100644 static/admin/assets/SettingsPage-qQfORNZC.css create mode 100644 static/admin/assets/SettingsPage-za1oQElD.js rename static/admin/assets/{SystemPage-eaCcaVxM.js => SystemPage-D_lad_h_.js} (99%) rename static/admin/assets/{UsersPage-o8CptFMp.js => UsersPage-CMgBpiWX.js} (99%) rename static/admin/assets/{email-DX46gPSl.js => email-BoZeA2tF.js} (88%) rename static/admin/assets/{index-BMIn4N2u.js => index-BwP1dZnj.js} (89%) rename static/admin/assets/{system-CeJP0y2Z.js => system-Dluvi0rE.js} (76%) rename static/admin/assets/{tasks-DaPM55hg.js => tasks-D5YLLzN-.js} (93%) rename static/admin/assets/{users-DoPbHko8.js => users-B3RByMlV.js} (90%) rename static/app/assets/{AppLayout-eF3aodBF.css => AppLayout-B8xVcK25.css} (95%) rename static/app/assets/{AppLayout-BVxPO9-W.js => AppLayout-CJ_Pqzl7.js} (75%) rename static/app/assets/{app-CfFNNMbF.js => app-Cm7xb8k5.js} (95%) diff --git a/admin-frontend/src/pages/SettingsPage.vue b/admin-frontend/src/pages/SettingsPage.vue index 3e0e43b..f6d4791 100644 --- a/admin-frontend/src/pages/SettingsPage.vue +++ b/admin-frontend/src/pages/SettingsPage.vue @@ -12,7 +12,7 @@ import { updateAdminPassword, updateAdminUsername, } from '../api/admin' -import { createPasskey, isPasskeyAvailable } from '../utils/passkey' +import { createPasskey, getPasskeyClientErrorMessage, isPasskeyAvailable } from '../utils/passkey' const username = ref('') const currentPassword = ref('') @@ -203,12 +203,9 @@ async function addPasskey() { passkeyRegisterOptionsAt.value = 0 await prefetchPasskeyRegisterOptions() const data = e?.response?.data - const clientMessage = e?.message ? String(e.message) : '' const message = data?.error || - (e?.name === 'NotAllowedError' - ? `Passkey注册未完成(浏览器返回:${clientMessage || '未提供详细原因'})` - : clientMessage || 'Passkey添加失败') + getPasskeyClientErrorMessage(e, 'Passkey注册') ElMessage.error(message) } finally { passkeyAddLoading.value = false diff --git a/admin-frontend/src/utils/passkey.js b/admin-frontend/src/utils/passkey.js index 0d81aeb..6a0cd64 100644 --- a/admin-frontend/src/utils/passkey.js +++ b/admin-frontend/src/utils/passkey.js @@ -93,6 +93,36 @@ export function isPasskeyAvailable() { return typeof window !== 'undefined' && window.isSecureContext && !!window.PublicKeyCredential && !!navigator.credentials } +function isMiuiBrowser() { + const ua = String(window?.navigator?.userAgent || '') + return /MiuiBrowser|XiaoMi\/MiuiBrowser/i.test(ua) +} + +export function getPasskeyClientErrorMessage(error, actionLabel = 'Passkey操作') { + const name = String(error?.name || '').trim() + const message = String(error?.message || '').trim() + + if (name === 'NotAllowedError') { + return `${actionLabel}未完成(可能已取消、超时或设备未响应)` + } + + if (name === 'NotReadableError') { + if (/credential manager/i.test(message) && isMiuiBrowser()) { + return '当前小米浏览器与系统凭据管理器兼容性较差,请改用系统 Chrome 或 Edge 后重试。' + } + if (/credential manager/i.test(message)) { + return '系统凭据管理器返回异常,请确认已设置系统锁屏并改用系统 Chrome/Edge 后重试。' + } + return message || `${actionLabel}失败(设备读取异常)` + } + + if (name === 'SecurityError') { + return '当前环境安全策略不满足 Passkey 要求,请确认使用 HTTPS 且证书有效。' + } + + return message || `${actionLabel}失败` +} + export async function createPasskey(rawOptions) { const publicKey = toCreationOptions(rawOptions) const credential = await navigator.credentials.create({ publicKey }) diff --git a/app-frontend/src/layouts/AppLayout.vue b/app-frontend/src/layouts/AppLayout.vue index 55b187b..9cfd251 100644 --- a/app-frontend/src/layouts/AppLayout.vue +++ b/app-frontend/src/layouts/AppLayout.vue @@ -24,7 +24,7 @@ import { updateEmailNotify, } from '../api/settings' import { useUserStore } from '../stores/user' -import { createPasskey, isPasskeyAvailable } from '../utils/passkey' +import { createPasskey, getPasskeyClientErrorMessage, isPasskeyAvailable } from '../utils/passkey' import { validateStrongPassword } from '../utils/password' const route = useRoute() @@ -384,12 +384,9 @@ async function onAddPasskey() { passkeyRegisterOptionsAt.value = 0 await prefetchPasskeyRegisterOptions() const data = e?.response?.data - const clientMessage = e?.message ? String(e.message) : '' const message = data?.error || - (e?.name === 'NotAllowedError' - ? `Passkey注册未完成(浏览器返回:${clientMessage || '未提供详细原因'})` - : clientMessage || 'Passkey添加失败') + getPasskeyClientErrorMessage(e, 'Passkey注册') ElMessage.error(message) } finally { passkeyAddLoading.value = false diff --git a/app-frontend/src/utils/passkey.js b/app-frontend/src/utils/passkey.js index 3f3ce2c..91d374c 100644 --- a/app-frontend/src/utils/passkey.js +++ b/app-frontend/src/utils/passkey.js @@ -110,6 +110,36 @@ export function isPasskeyAvailable() { return typeof window !== 'undefined' && window.isSecureContext && !!window.PublicKeyCredential && !!navigator.credentials } +function isMiuiBrowser() { + const ua = String(window?.navigator?.userAgent || '') + return /MiuiBrowser|XiaoMi\/MiuiBrowser/i.test(ua) +} + +export function getPasskeyClientErrorMessage(error, actionLabel = 'Passkey操作') { + const name = String(error?.name || '').trim() + const message = String(error?.message || '').trim() + + if (name === 'NotAllowedError') { + return `${actionLabel}未完成(可能已取消、超时或设备未响应)` + } + + if (name === 'NotReadableError') { + if (/credential manager/i.test(message) && isMiuiBrowser()) { + return '当前小米浏览器与系统凭据管理器兼容性较差,请改用系统 Chrome 或 Edge 后重试。' + } + if (/credential manager/i.test(message)) { + return '系统凭据管理器返回异常,请确认已设置系统锁屏并改用系统 Chrome/Edge 后重试。' + } + return message || `${actionLabel}失败(设备读取异常)` + } + + if (name === 'SecurityError') { + return '当前环境安全策略不满足 Passkey 要求,请确认使用 HTTPS 且证书有效。' + } + + return message || `${actionLabel}失败` +} + export async function createPasskey(rawOptions) { const publicKey = toCreationOptions(rawOptions) const credential = await navigator.credentials.create({ publicKey }) diff --git a/services/passkeys.py b/services/passkeys.py index 31f31d4..f622514 100644 --- a/services/passkeys.py +++ b/services/passkeys.py @@ -21,7 +21,10 @@ from webauthn.helpers import ( parse_registration_credential_json, ) from webauthn.helpers.structs import ( + AuthenticatorSelectionCriteria, + PublicKeyCredentialHint, PublicKeyCredentialDescriptor, + ResidentKeyRequirement, UserVerificationRequirement, ) @@ -98,6 +101,12 @@ def make_registration_options( if credential_id ] + authenticator_selection = AuthenticatorSelectionCriteria( + resident_key=ResidentKeyRequirement.PREFERRED, + require_resident_key=False, + user_verification=UserVerificationRequirement.PREFERRED, + ) + options = generate_registration_options( rp_id=rp_id, rp_name=rp_name, @@ -105,7 +114,12 @@ def make_registration_options( user_display_name=user_display_name, user_id=user_id_bytes, timeout=120000, + authenticator_selection=authenticator_selection, exclude_credentials=exclude_credentials, + hints=[ + PublicKeyCredentialHint.CLIENT_DEVICE, + PublicKeyCredentialHint.HYBRID, + ], ) return _to_public_key_options_json(options) diff --git a/static/admin/.vite/manifest.json b/static/admin/.vite/manifest.json index fe1ba1b..16eaf35 100644 --- a/static/admin/.vite/manifest.json +++ b/static/admin/.vite/manifest.json @@ -1,6 +1,6 @@ { - "_MetricGrid-R-_JZS_i.js": { - "file": "assets/MetricGrid-R-_JZS_i.js", + "_MetricGrid-COFDfeGs.js": { + "file": "assets/MetricGrid-COFDfeGs.js", "name": "MetricGrid", "imports": [ "index.html", @@ -14,29 +14,29 @@ "file": "assets/MetricGrid-yP_dkP6X.css", "src": "_MetricGrid-yP_dkP6X.css" }, - "_email-DX46gPSl.js": { - "file": "assets/email-DX46gPSl.js", + "_email-BoZeA2tF.js": { + "file": "assets/email-BoZeA2tF.js", "name": "email", "imports": [ "index.html" ] }, - "_system-CeJP0y2Z.js": { - "file": "assets/system-CeJP0y2Z.js", + "_system-Dluvi0rE.js": { + "file": "assets/system-Dluvi0rE.js", "name": "system", "imports": [ "index.html" ] }, - "_tasks-DaPM55hg.js": { - "file": "assets/tasks-DaPM55hg.js", + "_tasks-D5YLLzN-.js": { + "file": "assets/tasks-D5YLLzN-.js", "name": "tasks", "imports": [ "index.html" ] }, - "_users-DoPbHko8.js": { - "file": "assets/users-DoPbHko8.js", + "_users-B3RByMlV.js": { + "file": "assets/users-B3RByMlV.js", "name": "users", "imports": [ "index.html" @@ -73,7 +73,7 @@ "name": "vendor-vue" }, "index.html": { - "file": "assets/index-BMIn4N2u.js", + "file": "assets/index-BwP1dZnj.js", "name": "index", "src": "index.html", "isEntry": true, @@ -99,7 +99,7 @@ ] }, "src/pages/AnnouncementsPage.vue": { - "file": "assets/AnnouncementsPage-BY4ToZ0K.js", + "file": "assets/AnnouncementsPage-BZcUuw5h.js", "name": "AnnouncementsPage", "src": "src/pages/AnnouncementsPage.vue", "isDynamicEntry": true, @@ -115,14 +115,14 @@ ] }, "src/pages/EmailPage.vue": { - "file": "assets/EmailPage-DLwV2mnS.js", + "file": "assets/EmailPage-2qqiYZlu.js", "name": "EmailPage", "src": "src/pages/EmailPage.vue", "isDynamicEntry": true, "imports": [ - "_email-DX46gPSl.js", + "_email-BoZeA2tF.js", "index.html", - "_MetricGrid-R-_JZS_i.js", + "_MetricGrid-COFDfeGs.js", "_vendor-element-B5S5pUKo.js", "_vendor-vue-CVxSw_oJ.js", "_vendor-axios-B9ygI19o.js", @@ -133,13 +133,13 @@ ] }, "src/pages/FeedbacksPage.vue": { - "file": "assets/FeedbacksPage-BgrVN8tx.js", + "file": "assets/FeedbacksPage-DadToBbu.js", "name": "FeedbacksPage", "src": "src/pages/FeedbacksPage.vue", "isDynamicEntry": true, "imports": [ "index.html", - "_MetricGrid-R-_JZS_i.js", + "_MetricGrid-COFDfeGs.js", "_vendor-element-B5S5pUKo.js", "_vendor-vue-CVxSw_oJ.js", "_vendor-axios-B9ygI19o.js", @@ -150,13 +150,13 @@ ] }, "src/pages/LogsPage.vue": { - "file": "assets/LogsPage-D86va6oN.js", + "file": "assets/LogsPage-CsJ25c1g.js", "name": "LogsPage", "src": "src/pages/LogsPage.vue", "isDynamicEntry": true, "imports": [ - "_users-DoPbHko8.js", - "_tasks-DaPM55hg.js", + "_users-B3RByMlV.js", + "_tasks-D5YLLzN-.js", "index.html", "_vendor-element-B5S5pUKo.js", "_vendor-vue-CVxSw_oJ.js", @@ -168,17 +168,17 @@ ] }, "src/pages/ReportPage.vue": { - "file": "assets/ReportPage-T1JNMZd3.js", + "file": "assets/ReportPage-mvWNEhXv.js", "name": "ReportPage", "src": "src/pages/ReportPage.vue", "isDynamicEntry": true, "imports": [ "_vendor-element-B5S5pUKo.js", "index.html", - "_email-DX46gPSl.js", - "_tasks-DaPM55hg.js", - "_system-CeJP0y2Z.js", - "_MetricGrid-R-_JZS_i.js", + "_email-BoZeA2tF.js", + "_tasks-D5YLLzN-.js", + "_system-Dluvi0rE.js", + "_MetricGrid-COFDfeGs.js", "_vendor-vue-CVxSw_oJ.js", "_vendor-misc-BeoNyvBp.js", "_vendor-axios-B9ygI19o.js" @@ -188,13 +188,13 @@ ] }, "src/pages/SecurityPage.vue": { - "file": "assets/SecurityPage-BtFrxpZs.js", + "file": "assets/SecurityPage-DgYgSgTK.js", "name": "SecurityPage", "src": "src/pages/SecurityPage.vue", "isDynamicEntry": true, "imports": [ "index.html", - "_MetricGrid-R-_JZS_i.js", + "_MetricGrid-COFDfeGs.js", "_vendor-element-B5S5pUKo.js", "_vendor-vue-CVxSw_oJ.js", "_vendor-axios-B9ygI19o.js", @@ -205,7 +205,7 @@ ] }, "src/pages/SettingsPage.vue": { - "file": "assets/SettingsPage-BFVngq9z.js", + "file": "assets/SettingsPage-za1oQElD.js", "name": "SettingsPage", "src": "src/pages/SettingsPage.vue", "isDynamicEntry": true, @@ -217,16 +217,16 @@ "_vendor-misc-BeoNyvBp.js" ], "css": [ - "assets/SettingsPage-qQfORNZC.css" + "assets/SettingsPage-BAa-Qu3q.css" ] }, "src/pages/SystemPage.vue": { - "file": "assets/SystemPage-eaCcaVxM.js", + "file": "assets/SystemPage-D_lad_h_.js", "name": "SystemPage", "src": "src/pages/SystemPage.vue", "isDynamicEntry": true, "imports": [ - "_system-CeJP0y2Z.js", + "_system-Dluvi0rE.js", "index.html", "_vendor-element-B5S5pUKo.js", "_vendor-vue-CVxSw_oJ.js", @@ -238,12 +238,12 @@ ] }, "src/pages/UsersPage.vue": { - "file": "assets/UsersPage-o8CptFMp.js", + "file": "assets/UsersPage-CMgBpiWX.js", "name": "UsersPage", "src": "src/pages/UsersPage.vue", "isDynamicEntry": true, "imports": [ - "_users-DoPbHko8.js", + "_users-B3RByMlV.js", "index.html", "_vendor-element-B5S5pUKo.js", "_vendor-vue-CVxSw_oJ.js", diff --git a/static/admin/assets/AnnouncementsPage-BY4ToZ0K.js b/static/admin/assets/AnnouncementsPage-BZcUuw5h.js similarity index 99% rename from static/admin/assets/AnnouncementsPage-BY4ToZ0K.js rename to static/admin/assets/AnnouncementsPage-BZcUuw5h.js index 57ec4ab..d1fb1e3 100644 --- a/static/admin/assets/AnnouncementsPage-BY4ToZ0K.js +++ b/static/admin/assets/AnnouncementsPage-BZcUuw5h.js @@ -1 +1 @@ -import{p as J,a as r,E as C}from"./vendor-element-B5S5pUKo.js";import{a as w,_ as W}from"./index-BMIn4N2u.js";import{r as v,o as K,aj as p,ap as O,n as h,q as f,t as u,L as n,E as t,G as A,D as x,u as Q,I as c,J as D,F as X,a8 as $}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-misc-BeoNyvBp.js";import"./vendor-axios-B9ygI19o.js";async function Y(){const{data:o}=await w.get("/announcements");return o}async function Z(o){const{data:s}=await w.post("/announcements",o);return s}async function ee(o){const s=new FormData;s.append("file",o);const{data:_}=await w.post("/announcements/upload_image",s);return _}async function te(o){const{data:s}=await w.post(`/announcements/${o}/activate`);return s}async function ne(o){const{data:s}=await w.post(`/announcements/${o}/deactivate`);return s}async function ae(o){const{data:s}=await w.delete(`/announcements/${o}`);return s}const le={class:"page-stack"},se={class:"image-upload-row"},oe={key:1,class:"image-url"},ie={key:0,class:"image-preview"},re=["src"],ue={class:"actions"},ce={class:"table-wrap"},de=["title"],me={key:1,class:"app-muted"},fe={class:"actions"},pe={__name:"AnnouncementsPage",setup(o){const s=v(""),_=v(""),m=v(""),g=v(null),B=v(!1),I=v(!1),T=v([]);async function k(){I.value=!0;try{T.value=await Y()}catch{T.value=[]}finally{I.value=!1}}function E(){s.value="",_.value="",m.value="",g.value&&(g.value.value="")}function N(){g.value?.click()}function U(){m.value="",g.value&&(g.value.value="")}async function P(l){const e=l.target?.files?.[0];if(e){if(e.type&&!e.type.startsWith("image/")){r.error("请选择图片文件"),l.target.value="";return}B.value=!0;try{const d=await ee(e);if(!d?.success||!d?.url){r.error(d?.error||"上传失败");return}m.value=d.url,r.success("上传成功")}catch{}finally{B.value=!1,l.target.value=""}}}async function z(l){const e=s.value.trim(),d=_.value.trim(),b=m.value.trim();if(!e||!d){r.error("标题和内容不能为空");return}try{const i=await Z({title:e,content:d,image_url:b,is_active:!!l});if(!i?.success){r.error(i?.error||"保存失败");return}r.success("保存成功"),E(),await k()}catch{}}async function L(l){const e=$("div",{class:"announcement-view"},[l.content?$("div",{class:"announcement-view-text"},l.content):null,l.image_url?$("img",{class:"announcement-view-image",src:l.image_url,alt:"公告图片"}):null]);await C.alert(e,l.title||"公告",{confirmButtonText:"关闭",dangerouslyUseHTMLString:!1})}async function R(l){try{await C.confirm("确定启用该公告吗?启用后将自动停用其他公告。","启用公告",{confirmButtonText:"启用",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await te(l.id);if(!e?.success){r.error(e?.error||"启用失败");return}r.success("已启用"),await k()}catch{}}async function S(l){try{await C.confirm("确定停用该公告吗?","停用公告",{confirmButtonText:"停用",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await ne(l.id);if(!e?.success){r.error(e?.error||"停用失败");return}r.success("已停用"),await k()}catch{}}async function j(l){try{await C.confirm("确定删除该公告吗?删除后无法恢复。","删除公告",{confirmButtonText:"删除",cancelButtonText:"取消",type:"error"})}catch{return}try{const e=await ae(l.id);if(!e?.success){r.error(e?.error||"删除失败");return}r.success("已删除"),await k()}catch{}}return K(k),(l,e)=>{const d=p("el-input"),b=p("el-form-item"),i=p("el-button"),q=p("el-form"),F=p("el-card"),y=p("el-table-column"),M=p("el-tag"),G=p("el-table"),H=O("loading");return f(),h("div",le,[e[17]||(e[17]=u("div",{class:"app-page-title"},[u("h2",null,"公告管理")],-1)),n(F,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:t(()=>[e[9]||(e[9]=u("h3",{class:"section-title"},"创建公告",-1)),n(q,{"label-width":"90px"},{default:t(()=>[n(b,{label:"公告标题"},{default:t(()=>[n(d,{modelValue:s.value,"onUpdate:modelValue":e[0]||(e[0]=a=>s.value=a),placeholder:"请输入公告标题",maxlength:"100","show-word-limit":""},null,8,["modelValue"])]),_:1}),n(b,{label:"公告内容"},{default:t(()=>[n(d,{modelValue:_.value,"onUpdate:modelValue":e[1]||(e[1]=a=>_.value=a),type:"textarea",rows:5,placeholder:"请输入公告内容(将以弹窗形式展示)",maxlength:"2000","show-word-limit":""},null,8,["modelValue"])]),_:1}),n(b,{label:"公告图片"},{default:t(()=>[u("div",se,[n(i,{icon:Q(J),loading:B.value,onClick:N},{default:t(()=>[...e[4]||(e[4]=[c("上传图片",-1)])]),_:1},8,["icon","loading"]),m.value?(f(),x(i,{key:0,onClick:U},{default:t(()=>[...e[5]||(e[5]=[c("移除",-1)])]),_:1})):A("",!0),m.value?(f(),h("span",oe,D(m.value),1)):A("",!0),u("input",{ref_key:"imageInputRef",ref:g,class:"image-input",type:"file",accept:"image/*",onChange:P},null,544)])]),_:1})]),_:1}),m.value?(f(),h("div",ie,[u("img",{src:m.value,alt:"公告图片预览"},null,8,re)])):A("",!0),u("div",ue,[n(i,{type:"primary",onClick:e[2]||(e[2]=a=>z(!0))},{default:t(()=>[...e[6]||(e[6]=[c("发布并启用",-1)])]),_:1}),n(i,{onClick:e[3]||(e[3]=a=>z(!1))},{default:t(()=>[...e[7]||(e[7]=[c("保存但不启用",-1)])]),_:1}),n(i,{onClick:E},{default:t(()=>[...e[8]||(e[8]=[c("清空",-1)])]),_:1})]),e[10]||(e[10]=u("div",{class:"help"}," 说明:启用公告后,用户登录进入系统将弹窗提示;用户可选择“当次关闭”或“永久关闭本次公告”。 ",-1))]),_:1}),n(F,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:t(()=>[e[16]||(e[16]=u("h3",{class:"section-title"},"公告列表",-1)),u("div",ce,[X((f(),x(G,{data:T.value,style:{width:"100%"}},{default:t(()=>[n(y,{prop:"id",label:"ID",width:"80"}),n(y,{label:"标题","min-width":"240"},{default:t(({row:a})=>[u("span",{class:"ellipsis",title:a.title},D(a.title),9,de)]),_:1}),n(y,{label:"状态",width:"120"},{default:t(({row:a})=>[n(M,{type:a.is_active?"success":"info",effect:"light"},{default:t(()=>[c(D(a.is_active?"启用":"停用"),1)]),_:2},1032,["type"])]),_:1}),n(y,{label:"图片",width:"100"},{default:t(({row:a})=>[a.image_url?(f(),x(M,{key:0,type:"success",effect:"light"},{default:t(()=>[...e[11]||(e[11]=[c("有图",-1)])]),_:1})):(f(),h("span",me,"-"))]),_:1}),n(y,{prop:"created_at",label:"创建时间",width:"180"}),n(y,{label:"操作",width:"260",fixed:"right"},{default:t(({row:a})=>[u("div",fe,[n(i,{size:"small",onClick:V=>L(a)},{default:t(()=>[...e[12]||(e[12]=[c("查看",-1)])]),_:1},8,["onClick"]),a.is_active?(f(),x(i,{key:0,size:"small",onClick:V=>S(a)},{default:t(()=>[...e[13]||(e[13]=[c("停用",-1)])]),_:1},8,["onClick"])):(f(),x(i,{key:1,type:"success",size:"small",onClick:V=>R(a)},{default:t(()=>[...e[14]||(e[14]=[c("启用",-1)])]),_:1},8,["onClick"])),n(i,{type:"danger",size:"small",onClick:V=>j(a)},{default:t(()=>[...e[15]||(e[15]=[c("删除",-1)])]),_:1},8,["onClick"])])]),_:1})]),_:1},8,["data"])),[[H,I.value]])])]),_:1})])}}},ke=W(pe,[["__scopeId","data-v-6f55521c"]]);export{ke as default}; +import{p as J,a as r,E as C}from"./vendor-element-B5S5pUKo.js";import{a as w,_ as W}from"./index-BwP1dZnj.js";import{r as v,o as K,aj as p,ap as O,n as h,q as f,t as u,L as n,E as t,G as A,D as x,u as Q,I as c,J as D,F as X,a8 as $}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-misc-BeoNyvBp.js";import"./vendor-axios-B9ygI19o.js";async function Y(){const{data:o}=await w.get("/announcements");return o}async function Z(o){const{data:s}=await w.post("/announcements",o);return s}async function ee(o){const s=new FormData;s.append("file",o);const{data:_}=await w.post("/announcements/upload_image",s);return _}async function te(o){const{data:s}=await w.post(`/announcements/${o}/activate`);return s}async function ne(o){const{data:s}=await w.post(`/announcements/${o}/deactivate`);return s}async function ae(o){const{data:s}=await w.delete(`/announcements/${o}`);return s}const le={class:"page-stack"},se={class:"image-upload-row"},oe={key:1,class:"image-url"},ie={key:0,class:"image-preview"},re=["src"],ue={class:"actions"},ce={class:"table-wrap"},de=["title"],me={key:1,class:"app-muted"},fe={class:"actions"},pe={__name:"AnnouncementsPage",setup(o){const s=v(""),_=v(""),m=v(""),g=v(null),B=v(!1),I=v(!1),T=v([]);async function k(){I.value=!0;try{T.value=await Y()}catch{T.value=[]}finally{I.value=!1}}function E(){s.value="",_.value="",m.value="",g.value&&(g.value.value="")}function N(){g.value?.click()}function U(){m.value="",g.value&&(g.value.value="")}async function P(l){const e=l.target?.files?.[0];if(e){if(e.type&&!e.type.startsWith("image/")){r.error("请选择图片文件"),l.target.value="";return}B.value=!0;try{const d=await ee(e);if(!d?.success||!d?.url){r.error(d?.error||"上传失败");return}m.value=d.url,r.success("上传成功")}catch{}finally{B.value=!1,l.target.value=""}}}async function z(l){const e=s.value.trim(),d=_.value.trim(),b=m.value.trim();if(!e||!d){r.error("标题和内容不能为空");return}try{const i=await Z({title:e,content:d,image_url:b,is_active:!!l});if(!i?.success){r.error(i?.error||"保存失败");return}r.success("保存成功"),E(),await k()}catch{}}async function L(l){const e=$("div",{class:"announcement-view"},[l.content?$("div",{class:"announcement-view-text"},l.content):null,l.image_url?$("img",{class:"announcement-view-image",src:l.image_url,alt:"公告图片"}):null]);await C.alert(e,l.title||"公告",{confirmButtonText:"关闭",dangerouslyUseHTMLString:!1})}async function R(l){try{await C.confirm("确定启用该公告吗?启用后将自动停用其他公告。","启用公告",{confirmButtonText:"启用",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await te(l.id);if(!e?.success){r.error(e?.error||"启用失败");return}r.success("已启用"),await k()}catch{}}async function S(l){try{await C.confirm("确定停用该公告吗?","停用公告",{confirmButtonText:"停用",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await ne(l.id);if(!e?.success){r.error(e?.error||"停用失败");return}r.success("已停用"),await k()}catch{}}async function j(l){try{await C.confirm("确定删除该公告吗?删除后无法恢复。","删除公告",{confirmButtonText:"删除",cancelButtonText:"取消",type:"error"})}catch{return}try{const e=await ae(l.id);if(!e?.success){r.error(e?.error||"删除失败");return}r.success("已删除"),await k()}catch{}}return K(k),(l,e)=>{const d=p("el-input"),b=p("el-form-item"),i=p("el-button"),q=p("el-form"),F=p("el-card"),y=p("el-table-column"),M=p("el-tag"),G=p("el-table"),H=O("loading");return f(),h("div",le,[e[17]||(e[17]=u("div",{class:"app-page-title"},[u("h2",null,"公告管理")],-1)),n(F,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:t(()=>[e[9]||(e[9]=u("h3",{class:"section-title"},"创建公告",-1)),n(q,{"label-width":"90px"},{default:t(()=>[n(b,{label:"公告标题"},{default:t(()=>[n(d,{modelValue:s.value,"onUpdate:modelValue":e[0]||(e[0]=a=>s.value=a),placeholder:"请输入公告标题",maxlength:"100","show-word-limit":""},null,8,["modelValue"])]),_:1}),n(b,{label:"公告内容"},{default:t(()=>[n(d,{modelValue:_.value,"onUpdate:modelValue":e[1]||(e[1]=a=>_.value=a),type:"textarea",rows:5,placeholder:"请输入公告内容(将以弹窗形式展示)",maxlength:"2000","show-word-limit":""},null,8,["modelValue"])]),_:1}),n(b,{label:"公告图片"},{default:t(()=>[u("div",se,[n(i,{icon:Q(J),loading:B.value,onClick:N},{default:t(()=>[...e[4]||(e[4]=[c("上传图片",-1)])]),_:1},8,["icon","loading"]),m.value?(f(),x(i,{key:0,onClick:U},{default:t(()=>[...e[5]||(e[5]=[c("移除",-1)])]),_:1})):A("",!0),m.value?(f(),h("span",oe,D(m.value),1)):A("",!0),u("input",{ref_key:"imageInputRef",ref:g,class:"image-input",type:"file",accept:"image/*",onChange:P},null,544)])]),_:1})]),_:1}),m.value?(f(),h("div",ie,[u("img",{src:m.value,alt:"公告图片预览"},null,8,re)])):A("",!0),u("div",ue,[n(i,{type:"primary",onClick:e[2]||(e[2]=a=>z(!0))},{default:t(()=>[...e[6]||(e[6]=[c("发布并启用",-1)])]),_:1}),n(i,{onClick:e[3]||(e[3]=a=>z(!1))},{default:t(()=>[...e[7]||(e[7]=[c("保存但不启用",-1)])]),_:1}),n(i,{onClick:E},{default:t(()=>[...e[8]||(e[8]=[c("清空",-1)])]),_:1})]),e[10]||(e[10]=u("div",{class:"help"}," 说明:启用公告后,用户登录进入系统将弹窗提示;用户可选择“当次关闭”或“永久关闭本次公告”。 ",-1))]),_:1}),n(F,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:t(()=>[e[16]||(e[16]=u("h3",{class:"section-title"},"公告列表",-1)),u("div",ce,[X((f(),x(G,{data:T.value,style:{width:"100%"}},{default:t(()=>[n(y,{prop:"id",label:"ID",width:"80"}),n(y,{label:"标题","min-width":"240"},{default:t(({row:a})=>[u("span",{class:"ellipsis",title:a.title},D(a.title),9,de)]),_:1}),n(y,{label:"状态",width:"120"},{default:t(({row:a})=>[n(M,{type:a.is_active?"success":"info",effect:"light"},{default:t(()=>[c(D(a.is_active?"启用":"停用"),1)]),_:2},1032,["type"])]),_:1}),n(y,{label:"图片",width:"100"},{default:t(({row:a})=>[a.image_url?(f(),x(M,{key:0,type:"success",effect:"light"},{default:t(()=>[...e[11]||(e[11]=[c("有图",-1)])]),_:1})):(f(),h("span",me,"-"))]),_:1}),n(y,{prop:"created_at",label:"创建时间",width:"180"}),n(y,{label:"操作",width:"260",fixed:"right"},{default:t(({row:a})=>[u("div",fe,[n(i,{size:"small",onClick:V=>L(a)},{default:t(()=>[...e[12]||(e[12]=[c("查看",-1)])]),_:1},8,["onClick"]),a.is_active?(f(),x(i,{key:0,size:"small",onClick:V=>S(a)},{default:t(()=>[...e[13]||(e[13]=[c("停用",-1)])]),_:1},8,["onClick"])):(f(),x(i,{key:1,type:"success",size:"small",onClick:V=>R(a)},{default:t(()=>[...e[14]||(e[14]=[c("启用",-1)])]),_:1},8,["onClick"])),n(i,{type:"danger",size:"small",onClick:V=>j(a)},{default:t(()=>[...e[15]||(e[15]=[c("删除",-1)])]),_:1},8,["onClick"])])]),_:1})]),_:1},8,["data"])),[[H,I.value]])])]),_:1})])}}},ke=W(pe,[["__scopeId","data-v-6f55521c"]]);export{ke as default}; diff --git a/static/admin/assets/EmailPage-DLwV2mnS.js b/static/admin/assets/EmailPage-2qqiYZlu.js similarity index 99% rename from static/admin/assets/EmailPage-DLwV2mnS.js rename to static/admin/assets/EmailPage-2qqiYZlu.js index 1679abf..aa843ce 100644 --- a/static/admin/assets/EmailPage-DLwV2mnS.js +++ b/static/admin/assets/EmailPage-2qqiYZlu.js @@ -1 +1 @@ -import{a as De,c as He,b as Ne,f as Fe,u as Ie}from"./email-DX46gPSl.js";import{a as U,_ as ze}from"./index-BMIn4N2u.js";import{M as me}from"./MetricGrid-R-_JZS_i.js";import{E as B,a as d}from"./vendor-element-B5S5pUKo.js";import{r as m,S as pe,R as Qe,c as G,o as je,aj as c,ap as Ge,n as x,q as f,t as u,F as K,L as t,D as M,E as n,I as p,J as _,G as P,K as te,a3 as ce}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";async function Ke(){const{data:b}=await U.get("/smtp/configs");return b}async function Oe(b){const{data:v}=await U.post("/smtp/configs",b);return v}async function Re(b,v){const{data:g}=await U.put(`/smtp/configs/${b}`,v);return g}async function Je(b){const{data:v}=await U.delete(`/smtp/configs/${b}`);return v}async function We(b,v){const{data:g}=await U.post(`/smtp/configs/${b}/test`,{email:v});return g}async function Xe(b){const{data:v}=await U.post(`/smtp/configs/${b}/primary`);return v}async function Ye(){const{data:b}=await U.post("/smtp/configs/primary/clear");return b}const Ze={class:"page-stack"},el={class:"help app-muted"},ll={class:"section-head"},tl={class:"table-wrap"},al={class:"sub-stats"},sl={class:"help app-muted"},nl={class:"section-head"},ol={class:"toolbar"},il={class:"table-wrap"},ul=["title"],rl=["title"],dl=["title"],ml={class:"pagination"},pl={class:"page-hint app-muted"},cl={style:{width:"100%"}},fl={key:0,class:"help"},_l={key:0},bl={key:0},vl={key:0},yl={class:"dialog-actions"},fe=15,gl={__name:"EmailPage",setup(b){const v=m(!1),g=m(!1),o=pe({enabled:!1,failover_enabled:!0,register_verify_enabled:!1,login_alert_enabled:!0,task_notify_enabled:!1,base_url:"",updated_at:null});let L=null;async function ae(){v.value=!0;try{const s=await Ne();o.enabled=!!s.enabled,o.failover_enabled=!!s.failover_enabled,o.register_verify_enabled=!!s.register_verify_enabled,o.login_alert_enabled=s.login_alert_enabled===void 0?!0:!!s.login_alert_enabled,o.task_notify_enabled=!!s.task_notify_enabled,o.base_url=s.base_url||"",o.updated_at=s.updated_at||null}catch{}finally{v.value=!1}}async function _e(){if(!v.value){g.value=!0;try{const s=await Ie({enabled:o.enabled,failover_enabled:o.failover_enabled,register_verify_enabled:o.register_verify_enabled,login_alert_enabled:o.login_alert_enabled,task_notify_enabled:o.task_notify_enabled,base_url:(o.base_url||"").trim()});if(!s?.success){d.error(s?.error||"更新失败");return}d.success("邮件设置已更新"),await ae()}catch{}finally{g.value=!1}}}function E(){L&&window.clearTimeout(L),L=window.setTimeout(_e,300)}Qe(()=>{L&&window.clearTimeout(L),L=null});const O=m(!1),R=m([]),S=m(!1),k=m(!1),J=m(!1),H=m(!1),a=pe({id:null,name:"默认配置",enabled:!0,host:"",port:465,username:"",password:"",use_ssl:!0,use_tls:!1,sender_name:"自动化学习",sender_email:"",daily_limit:0,priority:0}),N=[{key:"custom",label:"自定义(手动填写)",defaults:null,note:"适用于其他邮箱/自建SMTP",links:[]},{key:"gmail",label:"Gmail",defaults:{host:"smtp.gmail.com",port:465,use_ssl:!0,use_tls:!1},note:"通常需要开启两步验证并创建应用专用密码(App Password)",links:[{label:"SMTP 设置说明",url:"https://support.google.com/mail/answer/7126229?hl=zh-Hans"},{label:"App Password",url:"https://myaccount.google.com/apppasswords"}]},{key:"qq",label:"QQ 邮箱",defaults:{host:"smtp.qq.com",port:465,use_ssl:!0,use_tls:!1},note:"需要在邮箱设置中开启 SMTP 并获取授权码(不是QQ登录密码)",links:[{label:"QQ邮箱 SMTP 帮助",url:"https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256"}]},{key:"163",label:"163 邮箱",defaults:{host:"smtp.163.com",port:465,use_ssl:!0,use_tls:!1},note:"需要在邮箱设置中开启 SMTP 并使用授权码/客户端授权密码",links:[{label:"网易邮箱 SMTP 帮助",url:"https://help.mail.163.com/faqDetail.do?code=d7a5dc8471a22b76"}]},{key:"126",label:"126 邮箱",defaults:{host:"smtp.126.com",port:465,use_ssl:!0,use_tls:!1},note:"需要在邮箱设置中开启 SMTP 并使用授权码/客户端授权密码",links:[{label:"网易邮箱帮助",url:"https://help.mail.163.com/"}]},{key:"outlook",label:"Outlook/Hotmail",defaults:{host:"smtp-mail.outlook.com",port:587,use_ssl:!1,use_tls:!0},note:"建议使用 TLS 587(部分账号需开启 SMTP AUTH)",links:[{label:"微软 SMTP 设置",url:"https://support.microsoft.com/office/pop-imap-and-smtp-settings-for-outlook-com-d088b0b7-0d38-4f9a-bc5d-509f9e4c6d3d"}]},{key:"office365",label:"Microsoft 365/Exchange",defaults:{host:"smtp.office365.com",port:587,use_ssl:!1,use_tls:!0},note:"企业邮箱常用配置(需启用 SMTP AUTH)",links:[{label:"微软官方说明",url:"https://learn.microsoft.com/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission"}]},{key:"icloud",label:"iCloud",defaults:{host:"smtp.mail.me.com",port:587,use_ssl:!1,use_tls:!0},note:"需要在 Apple ID 中生成“App 专用密码”",links:[{label:"Apple 邮件服务器设置",url:"https://support.apple.com/zh-cn/HT202304"}]},{key:"tencent_exmail",label:"腾讯企业邮箱",defaults:{host:"smtp.exmail.qq.com",port:465,use_ssl:!0,use_tls:!1},note:"企业邮箱常用配置",links:[{label:"腾讯企业邮箱帮助",url:"https://service.exmail.qq.com/cgi-bin/help?subtype=1&id=23&no=1001068"}]},{key:"aliyun_exmail",label:"阿里企业邮箱",defaults:{host:"smtp.mxhichina.com",port:465,use_ssl:!0,use_tls:!1},note:"企业邮箱常用配置",links:[{label:"阿里云文档",url:"https://help.aliyun.com/document_detail/50652.html"}]}],q=m("custom"),V=G(()=>N.find(s=>s.key===q.value)||N[0]),be=G(()=>k.value&&J.value?"留空保持不变":"SMTP密码或授权码");function ve(s){const e=String(s?.host||"").trim().toLowerCase();return e&&{"smtp.gmail.com":"gmail","smtp.qq.com":"qq","smtp.163.com":"163","smtp.126.com":"126","smtp-mail.outlook.com":"outlook","smtp.office365.com":"office365","smtp.mail.me.com":"icloud","smtp.exmail.qq.com":"tencent_exmail","smtp.mxhichina.com":"aliyun_exmail"}[e]||"custom"}function ye(s){const e=N.find(i=>i.key===s);!e||!e.defaults||(a.host=e.defaults.host,a.port=e.defaults.port,a.use_ssl=e.defaults.use_ssl,a.use_tls=e.defaults.use_tls)}function se(){a.id=null,a.name="默认配置",a.enabled=!0,a.host="",a.port=465,a.username="",a.password="",a.use_ssl=!0,a.use_tls=!1,a.sender_name="自动化学习",a.sender_email="",a.daily_limit=0,a.priority=0,J.value=!1,H.value=!1,q.value="custom"}async function $(){O.value=!0;try{R.value=await Ke()}catch{R.value=[]}finally{O.value=!1}}function ge(){k.value=!1,se(),q.value="custom",S.value=!0}function ke(s){k.value=!0,se(),a.id=s.id,a.name=s.name||"默认配置",a.enabled=!!s.enabled,a.host=s.host||"",a.port=s.port||465,a.username=s.username||"",a.password="",a.use_ssl=!!s.use_ssl,a.use_tls=!!s.use_tls,a.sender_name=s.sender_name||"自动化学习",a.sender_email=s.sender_email||"",a.daily_limit=s.daily_limit??0,a.priority=s.priority??0,J.value=!!s.has_password,H.value=!!s.is_primary,q.value=ve(s),S.value=!0}function ne(s){return s.is_primary?{label:"主",type:"warning"}:s.enabled?{label:"备用",type:"success"}:{label:"禁用",type:"info"}}function he(s){return s.daily_limit&&s.daily_limit>0?`${s.daily_sent}/${s.daily_limit}`:`${s.daily_sent}/∞`}async function Ve(){if(!a.host.trim()){d.error("SMTP服务器地址不能为空");return}if(!a.username.trim()){d.error("SMTP用户名不能为空");return}const s={name:a.name.trim()||"默认配置",enabled:!!a.enabled,priority:Number(a.priority)||0,host:a.host.trim(),port:Number(a.port)||465,username:a.username.trim(),use_ssl:!!a.use_ssl,use_tls:!!a.use_tls,sender_name:(a.sender_name||"").trim(),sender_email:(a.sender_email||"").trim(),daily_limit:Number(a.daily_limit)||0};try{if(k.value){const e={...s};a.password&&(e.password=a.password);const i=await Re(a.id,e);if(!i?.success){d.error(i?.error||"更新失败");return}d.success("保存成功")}else{const e={...s};a.password&&(e.password=a.password);const i=await Oe(e);if(!i?.success){d.error(i?.error||"创建失败");return}d.success("创建成功")}S.value=!1,await $()}catch{}}async function we(){if(!k.value||!a.id){d.error("请先保存配置后再测试");return}let s;try{const e=await B.prompt("请输入测试收件邮箱","测试连接",{inputPlaceholder:"name@example.com",confirmButtonText:"发送测试邮件",cancelButtonText:"取消",inputValidator:i=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(i||"").trim()),inputErrorMessage:"邮箱格式不正确"});s=String(e.value||"").trim()}catch{return}try{const e=await We(a.id,s);e?.success?(d.success("测试成功,邮件已发送"),await $()):await B.alert(e?.error||"测试失败","测试失败",{confirmButtonText:"知道了"})}catch{}}async function Se(){if(!(!k.value||!a.id)){try{await B.confirm("确定将该配置设为主配置吗?","设为主配置",{confirmButtonText:"设为主配置",cancelButtonText:"取消",type:"warning"})}catch{return}try{const s=await Xe(a.id);if(!s?.success){d.error(s?.error||"设置失败");return}d.success("已设为主配置"),S.value=!1,await $()}catch{}}}async function Te(){if(k.value){try{await B.confirm("确定取消主配置吗?取消后将按优先级选择可用SMTP。","取消主配置",{confirmButtonText:"取消主配置",cancelButtonText:"保留",type:"warning"})}catch{return}try{const s=await Ye();if(!s?.success){d.error(s?.error||"操作失败");return}d.success("已取消主配置"),S.value=!1,await $()}catch{}}}async function xe(){if(!(!k.value||!a.id)){try{await B.confirm("确定删除该SMTP配置吗?此操作不可恢复。","删除配置",{confirmButtonText:"删除",cancelButtonText:"取消",type:"error"})}catch{return}try{const s=await Je(a.id);if(!s?.success){d.error(s?.error||"删除失败");return}d.success("已删除"),S.value=!1,await $()}catch{}}}const A=m(!1),h=m({}),W=m(!1),F=m(""),I=m(""),z=m(1),X=m([]),Y=m(0),Z=m(1);function Pe(s){return{register:"注册验证",reset:"密码重置",bind:"邮箱绑定",task_complete:"任务完成",security_alert:"安全告警"}[s]||s}function oe(s){return s?.username&&s?.user_id?`${s.username} (#${s.user_id})`:s?.user_id?`用户#${s.user_id}`:"系统"}const Ce=G(()=>[{key:"total_sent",label:"总发送",value:h.value?.total_sent||0,tone:"blue"},{key:"total_success",label:"成功",value:h.value?.total_success||0,tone:"green"},{key:"total_failed",label:"失败",value:h.value?.total_failed||0,tone:"red"},{key:"success_rate",label:"成功率",value:`${h.value?.success_rate||0}%`,tone:"purple"}]),Be=G(()=>[{key:"register_sent",label:"注册验证",value:h.value?.register_sent||0,tone:"cyan"},{key:"reset_sent",label:"密码重置",value:h.value?.reset_sent||0,tone:"orange"},{key:"bind_sent",label:"邮箱绑定",value:h.value?.bind_sent||0,tone:"purple"},{key:"task_complete_sent",label:"任务完成",value:h.value?.task_complete_sent||0,tone:"green"}]);async function Me(){A.value=!0;try{h.value=await Fe()}catch{h.value={}}finally{A.value=!1}}async function D(s=1){W.value=!0;try{const e={page:s,page_size:fe};F.value&&(e.type=F.value),I.value&&(e.status=I.value);const i=await De(e);X.value=i?.logs||[],Y.value=i?.total||0,z.value=i?.page||s,Z.value=i?.total_pages||1}catch{X.value=[],Y.value=0,Z.value=1}finally{W.value=!1}}async function Ue(){let s;try{const e=await B.prompt("请输入保留天数(将删除该天数之前的日志)","清理日志",{inputValue:"30",confirmButtonText:"清理",cancelButtonText:"取消",inputValidator:i=>{const r=parseInt(String(i),10);return Number.isFinite(r)&&r>=7},inputErrorMessage:"天数必须大于等于7"});s=parseInt(String(e.value),10)}catch{return}try{await B.confirm(`确定删除 ${s} 天之前的邮件日志吗?`,"二次确认",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await He(s);if(!e?.success){d.error(e?.error||"清理失败");return}d.success(`已清理 ${e.deleted} 条日志`),await D(1)}catch{}}async function Le(){await Promise.all([ae(),$(),Me(),D(1)])}return je(Le),(s,e)=>{const i=c("el-switch"),r=c("el-form-item"),Ee=c("el-divider"),C=c("el-input"),ie=c("el-form"),Q=c("el-card"),T=c("el-button"),ue=c("el-tag"),y=c("el-table-column"),re=c("el-table"),w=c("el-option"),ee=c("el-select"),qe=c("el-pagination"),$e=c("el-link"),le=c("el-input-number"),Ae=c("el-dialog"),j=Ge("loading");return f(),x("div",Ze,[e[43]||(e[43]=u("div",{class:"app-page-title"},[u("h2",null,"邮件配置")],-1)),K((f(),M(Q,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:n(()=>[e[29]||(e[29]=u("h3",{class:"section-title"},"全局设置",-1)),t(ie,{"label-width":"140px"},{default:n(()=>[t(r,{label:"启用邮件功能"},{default:n(()=>[t(i,{modelValue:o.enabled,"onUpdate:modelValue":e[0]||(e[0]=l=>o.enabled=l),disabled:g.value,onChange:E},null,8,["modelValue","disabled"])]),_:1}),t(r,{label:"启用故障转移"},{default:n(()=>[t(i,{modelValue:o.failover_enabled,"onUpdate:modelValue":e[1]||(e[1]=l=>o.failover_enabled=l),disabled:g.value,onChange:E},null,8,["modelValue","disabled"])]),_:1}),t(r,{label:"启用注册邮箱验证"},{default:n(()=>[t(i,{modelValue:o.register_verify_enabled,"onUpdate:modelValue":e[2]||(e[2]=l=>o.register_verify_enabled=l),disabled:g.value,onChange:E},null,8,["modelValue","disabled"])]),_:1}),t(Ee,{"content-position":"left"},{default:n(()=>[...e[26]||(e[26]=[p("通知设置",-1)])]),_:1}),t(r,{label:"启用任务完成通知"},{default:n(()=>[t(i,{modelValue:o.task_notify_enabled,"onUpdate:modelValue":e[3]||(e[3]=l=>o.task_notify_enabled=l),disabled:g.value,onChange:E},null,8,["modelValue","disabled"])]),_:1}),t(r,{label:"新设备登录提醒"},{default:n(()=>[t(i,{modelValue:o.login_alert_enabled,"onUpdate:modelValue":e[4]||(e[4]=l=>o.login_alert_enabled=l),disabled:g.value,onChange:E},null,8,["modelValue","disabled"]),e[27]||(e[27]=u("div",{class:"help"},"当检测到新设备或新IP登录时,发送邮件提醒用户",-1))]),_:1}),t(r,{label:"网站基础URL"},{default:n(()=>[t(C,{modelValue:o.base_url,"onUpdate:modelValue":e[5]||(e[5]=l=>o.base_url=l),placeholder:"例如: https://example.com",disabled:g.value,onBlur:E},null,8,["modelValue","disabled"]),e[28]||(e[28]=u("div",{class:"help"},"用于生成邮件中的验证链接,留空则使用默认配置。",-1))]),_:1})]),_:1}),u("div",el,"最近更新时间:"+_(o.updated_at||"-"),1)]),_:1})),[[j,v.value]]),t(Q,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:n(()=>[u("div",ll,[e[31]||(e[31]=u("h3",{class:"section-title"},"SMTP配置列表",-1)),t(T,{type:"primary",onClick:ge},{default:n(()=>[...e[30]||(e[30]=[p("+ 添加配置",-1)])]),_:1})]),u("div",tl,[K((f(),M(re,{data:R.value,style:{width:"100%"}},{default:n(()=>[t(y,{label:"状态",width:"90"},{default:n(({row:l})=>[t(ue,{type:ne(l).type,effect:"light"},{default:n(()=>[p(_(ne(l).label),1)]),_:2},1032,["type"])]),_:1}),t(y,{prop:"name",label:"名称","min-width":"160"}),t(y,{label:"服务器","min-width":"200"},{default:n(({row:l})=>[p(_(l.host)+":"+_(l.port),1)]),_:1}),t(y,{label:"今日/限额",width:"110"},{default:n(({row:l})=>[p(_(he(l)),1)]),_:1}),t(y,{label:"成功率",width:"100"},{default:n(({row:l})=>[p(_(l.success_rate)+"%",1)]),_:1}),t(y,{label:"操作",width:"120",fixed:"right"},{default:n(({row:l})=>[t(T,{size:"small",onClick:de=>ke(l)},{default:n(()=>[...e[32]||(e[32]=[p("编辑",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[j,O.value]])])]),_:1}),K((f(),M(Q,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:n(()=>[e[33]||(e[33]=u("h3",{class:"section-title"},"邮件发送统计",-1)),t(me,{items:Ce.value,loading:A.value,"min-width":160},null,8,["items","loading"]),u("div",al,[t(me,{items:Be.value,loading:A.value,"min-width":150},null,8,["items","loading"])]),u("div",sl,"最后更新:"+_(h.value.last_updated||"-"),1)]),_:1})),[[j,A.value]]),t(Q,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:n(()=>[u("div",nl,[e[35]||(e[35]=u("h3",{class:"section-title"},"邮件发送日志",-1)),u("div",ol,[t(ee,{modelValue:F.value,"onUpdate:modelValue":e[6]||(e[6]=l=>F.value=l),style:{width:"140px"},onChange:e[7]||(e[7]=l=>D(1))},{default:n(()=>[t(w,{label:"全部类型",value:""}),t(w,{label:"注册验证",value:"register"}),t(w,{label:"密码重置",value:"reset"}),t(w,{label:"邮箱绑定",value:"bind"}),t(w,{label:"任务完成",value:"task_complete"}),t(w,{label:"安全告警",value:"security_alert"})]),_:1},8,["modelValue"]),t(ee,{modelValue:I.value,"onUpdate:modelValue":e[8]||(e[8]=l=>I.value=l),style:{width:"120px"},onChange:e[9]||(e[9]=l=>D(1))},{default:n(()=>[t(w,{label:"全部状态",value:""}),t(w,{label:"成功",value:"success"}),t(w,{label:"失败",value:"failed"})]),_:1},8,["modelValue"]),t(T,{type:"danger",plain:"",onClick:Ue},{default:n(()=>[...e[34]||(e[34]=[p("清理日志",-1)])]),_:1})])]),u("div",il,[K((f(),M(re,{data:X.value,style:{width:"100%"}},{default:n(()=>[t(y,{prop:"created_at",label:"时间",width:"180"}),t(y,{prop:"email_to",label:"收件人","min-width":"180"}),t(y,{label:"来源用户","min-width":"160"},{default:n(({row:l})=>[u("span",{class:"ellipsis",title:oe(l)},_(oe(l)),9,ul)]),_:1}),t(y,{label:"类型",width:"120"},{default:n(({row:l})=>[p(_(Pe(l.email_type)),1)]),_:1}),t(y,{label:"主题","min-width":"220"},{default:n(({row:l})=>[u("span",{class:"ellipsis",title:l.subject},_(l.subject),9,rl)]),_:1}),t(y,{label:"状态",width:"90"},{default:n(({row:l})=>[t(ue,{type:l.status==="success"?"success":"danger",effect:"light"},{default:n(()=>[p(_(l.status==="success"?"成功":"失败"),1)]),_:2},1032,["type"])]),_:1}),t(y,{label:"错误","min-width":"200"},{default:n(({row:l})=>[u("span",{class:"ellipsis",title:l.error_message||""},_(l.error_message||"-"),9,dl)]),_:1})]),_:1},8,["data"])),[[j,W.value]])]),u("div",ml,[t(qe,{"current-page":z.value,"onUpdate:currentPage":e[10]||(e[10]=l=>z.value=l),"page-size":fe,total:Y.value,layout:"prev, pager, next, ->, total",onCurrentChange:D},null,8,["current-page","total"]),u("div",pl,"第 "+_(z.value)+" / "+_(Z.value)+" 页",1)])]),_:1}),t(Ae,{modelValue:S.value,"onUpdate:modelValue":e[25]||(e[25]=l=>S.value=l),title:k.value?"编辑SMTP配置":"添加SMTP配置",width:"min(560px, 92vw)"},{footer:n(()=>[u("div",yl,[t(T,{onClick:we},{default:n(()=>[...e[36]||(e[36]=[p("测试连接",-1)])]),_:1}),k.value&&H.value?(f(),M(T,{key:0,type:"warning",plain:"",onClick:Te},{default:n(()=>[...e[37]||(e[37]=[p("取消主配置",-1)])]),_:1})):P("",!0),k.value&&!H.value?(f(),M(T,{key:1,onClick:Se},{default:n(()=>[...e[38]||(e[38]=[p("设为主配置",-1)])]),_:1})):P("",!0),k.value?(f(),M(T,{key:2,type:"danger",plain:"",onClick:xe},{default:n(()=>[...e[39]||(e[39]=[p("删除配置",-1)])]),_:1})):P("",!0),e[42]||(e[42]=u("div",{class:"spacer"},null,-1)),t(T,{onClick:e[24]||(e[24]=l=>S.value=!1)},{default:n(()=>[...e[40]||(e[40]=[p("取消",-1)])]),_:1}),t(T,{type:"primary",onClick:Ve},{default:n(()=>[...e[41]||(e[41]=[p("保存",-1)])]),_:1})])]),default:n(()=>[t(ie,{"label-width":"120px"},{default:n(()=>[t(r,{label:"名称"},{default:n(()=>[t(C,{modelValue:a.name,"onUpdate:modelValue":e[11]||(e[11]=l=>a.name=l)},null,8,["modelValue"])]),_:1}),t(r,{label:"启用"},{default:n(()=>[t(i,{modelValue:a.enabled,"onUpdate:modelValue":e[12]||(e[12]=l=>a.enabled=l)},null,8,["modelValue"])]),_:1}),t(r,{label:"邮箱模板"},{default:n(()=>[u("div",cl,[t(ee,{modelValue:q.value,"onUpdate:modelValue":e[13]||(e[13]=l=>q.value=l),placeholder:"选择常用邮箱模板",style:{width:"100%"},onChange:ye},{default:n(()=>[(f(),x(te,null,ce(N,l=>t(w,{key:l.key,label:l.label,value:l.key},null,8,["label","value"])),64))]),_:1},8,["modelValue"]),V.value.note||V.value.links&&V.value.links.length?(f(),x("div",fl,[V.value.note?(f(),x("span",_l,_(V.value.note),1)):P("",!0),V.value.links&&V.value.links.length?(f(),x(te,{key:1},[V.value.note?(f(),x("span",bl," · ")):P("",!0),(f(!0),x(te,null,ce(V.value.links,(l,de)=>(f(),x("span",{key:l.url},[t($e,{href:l.url,target:"_blank",type:"primary",underline:!1},{default:n(()=>[p(_(l.label),1)]),_:2},1032,["href"]),de[t(C,{modelValue:a.host,"onUpdate:modelValue":e[14]||(e[14]=l=>a.host=l),placeholder:"smtp.example.com"},null,8,["modelValue"])]),_:1}),t(r,{label:"端口"},{default:n(()=>[t(le,{modelValue:a.port,"onUpdate:modelValue":e[15]||(e[15]=l=>a.port=l),min:1,max:65535},null,8,["modelValue"])]),_:1}),t(r,{label:"用户名"},{default:n(()=>[t(C,{modelValue:a.username,"onUpdate:modelValue":e[16]||(e[16]=l=>a.username=l)},null,8,["modelValue"])]),_:1}),t(r,{label:"密码"},{default:n(()=>[t(C,{modelValue:a.password,"onUpdate:modelValue":e[17]||(e[17]=l=>a.password=l),type:"password","show-password":"",placeholder:be.value},null,8,["modelValue","placeholder"])]),_:1}),t(r,{label:"SSL"},{default:n(()=>[t(i,{modelValue:a.use_ssl,"onUpdate:modelValue":e[18]||(e[18]=l=>a.use_ssl=l)},null,8,["modelValue"])]),_:1}),t(r,{label:"TLS"},{default:n(()=>[t(i,{modelValue:a.use_tls,"onUpdate:modelValue":e[19]||(e[19]=l=>a.use_tls=l)},null,8,["modelValue"])]),_:1}),t(r,{label:"发件人名称"},{default:n(()=>[t(C,{modelValue:a.sender_name,"onUpdate:modelValue":e[20]||(e[20]=l=>a.sender_name=l)},null,8,["modelValue"])]),_:1}),t(r,{label:"发件人邮箱"},{default:n(()=>[t(C,{modelValue:a.sender_email,"onUpdate:modelValue":e[21]||(e[21]=l=>a.sender_email=l),placeholder:"可选"},null,8,["modelValue"])]),_:1}),t(r,{label:"每日限额"},{default:n(()=>[t(le,{modelValue:a.daily_limit,"onUpdate:modelValue":e[22]||(e[22]=l=>a.daily_limit=l),min:0,max:1e6},null,8,["modelValue"])]),_:1}),t(r,{label:"优先级"},{default:n(()=>[t(le,{modelValue:a.priority,"onUpdate:modelValue":e[23]||(e[23]=l=>a.priority=l),min:0,max:1e3},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue","title"])])}}},Pl=ze(gl,[["__scopeId","data-v-4f511165"]]);export{Pl as default}; +import{a as De,c as He,b as Ne,f as Fe,u as Ie}from"./email-BoZeA2tF.js";import{a as U,_ as ze}from"./index-BwP1dZnj.js";import{M as me}from"./MetricGrid-COFDfeGs.js";import{E as B,a as d}from"./vendor-element-B5S5pUKo.js";import{r as m,S as pe,R as Qe,c as G,o as je,aj as c,ap as Ge,n as x,q as f,t as u,F as K,L as t,D as M,E as n,I as p,J as _,G as P,K as te,a3 as ce}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";async function Ke(){const{data:b}=await U.get("/smtp/configs");return b}async function Oe(b){const{data:v}=await U.post("/smtp/configs",b);return v}async function Re(b,v){const{data:g}=await U.put(`/smtp/configs/${b}`,v);return g}async function Je(b){const{data:v}=await U.delete(`/smtp/configs/${b}`);return v}async function We(b,v){const{data:g}=await U.post(`/smtp/configs/${b}/test`,{email:v});return g}async function Xe(b){const{data:v}=await U.post(`/smtp/configs/${b}/primary`);return v}async function Ye(){const{data:b}=await U.post("/smtp/configs/primary/clear");return b}const Ze={class:"page-stack"},el={class:"help app-muted"},ll={class:"section-head"},tl={class:"table-wrap"},al={class:"sub-stats"},sl={class:"help app-muted"},nl={class:"section-head"},ol={class:"toolbar"},il={class:"table-wrap"},ul=["title"],rl=["title"],dl=["title"],ml={class:"pagination"},pl={class:"page-hint app-muted"},cl={style:{width:"100%"}},fl={key:0,class:"help"},_l={key:0},bl={key:0},vl={key:0},yl={class:"dialog-actions"},fe=15,gl={__name:"EmailPage",setup(b){const v=m(!1),g=m(!1),o=pe({enabled:!1,failover_enabled:!0,register_verify_enabled:!1,login_alert_enabled:!0,task_notify_enabled:!1,base_url:"",updated_at:null});let L=null;async function ae(){v.value=!0;try{const s=await Ne();o.enabled=!!s.enabled,o.failover_enabled=!!s.failover_enabled,o.register_verify_enabled=!!s.register_verify_enabled,o.login_alert_enabled=s.login_alert_enabled===void 0?!0:!!s.login_alert_enabled,o.task_notify_enabled=!!s.task_notify_enabled,o.base_url=s.base_url||"",o.updated_at=s.updated_at||null}catch{}finally{v.value=!1}}async function _e(){if(!v.value){g.value=!0;try{const s=await Ie({enabled:o.enabled,failover_enabled:o.failover_enabled,register_verify_enabled:o.register_verify_enabled,login_alert_enabled:o.login_alert_enabled,task_notify_enabled:o.task_notify_enabled,base_url:(o.base_url||"").trim()});if(!s?.success){d.error(s?.error||"更新失败");return}d.success("邮件设置已更新"),await ae()}catch{}finally{g.value=!1}}}function E(){L&&window.clearTimeout(L),L=window.setTimeout(_e,300)}Qe(()=>{L&&window.clearTimeout(L),L=null});const O=m(!1),R=m([]),S=m(!1),k=m(!1),J=m(!1),H=m(!1),a=pe({id:null,name:"默认配置",enabled:!0,host:"",port:465,username:"",password:"",use_ssl:!0,use_tls:!1,sender_name:"自动化学习",sender_email:"",daily_limit:0,priority:0}),N=[{key:"custom",label:"自定义(手动填写)",defaults:null,note:"适用于其他邮箱/自建SMTP",links:[]},{key:"gmail",label:"Gmail",defaults:{host:"smtp.gmail.com",port:465,use_ssl:!0,use_tls:!1},note:"通常需要开启两步验证并创建应用专用密码(App Password)",links:[{label:"SMTP 设置说明",url:"https://support.google.com/mail/answer/7126229?hl=zh-Hans"},{label:"App Password",url:"https://myaccount.google.com/apppasswords"}]},{key:"qq",label:"QQ 邮箱",defaults:{host:"smtp.qq.com",port:465,use_ssl:!0,use_tls:!1},note:"需要在邮箱设置中开启 SMTP 并获取授权码(不是QQ登录密码)",links:[{label:"QQ邮箱 SMTP 帮助",url:"https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256"}]},{key:"163",label:"163 邮箱",defaults:{host:"smtp.163.com",port:465,use_ssl:!0,use_tls:!1},note:"需要在邮箱设置中开启 SMTP 并使用授权码/客户端授权密码",links:[{label:"网易邮箱 SMTP 帮助",url:"https://help.mail.163.com/faqDetail.do?code=d7a5dc8471a22b76"}]},{key:"126",label:"126 邮箱",defaults:{host:"smtp.126.com",port:465,use_ssl:!0,use_tls:!1},note:"需要在邮箱设置中开启 SMTP 并使用授权码/客户端授权密码",links:[{label:"网易邮箱帮助",url:"https://help.mail.163.com/"}]},{key:"outlook",label:"Outlook/Hotmail",defaults:{host:"smtp-mail.outlook.com",port:587,use_ssl:!1,use_tls:!0},note:"建议使用 TLS 587(部分账号需开启 SMTP AUTH)",links:[{label:"微软 SMTP 设置",url:"https://support.microsoft.com/office/pop-imap-and-smtp-settings-for-outlook-com-d088b0b7-0d38-4f9a-bc5d-509f9e4c6d3d"}]},{key:"office365",label:"Microsoft 365/Exchange",defaults:{host:"smtp.office365.com",port:587,use_ssl:!1,use_tls:!0},note:"企业邮箱常用配置(需启用 SMTP AUTH)",links:[{label:"微软官方说明",url:"https://learn.microsoft.com/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission"}]},{key:"icloud",label:"iCloud",defaults:{host:"smtp.mail.me.com",port:587,use_ssl:!1,use_tls:!0},note:"需要在 Apple ID 中生成“App 专用密码”",links:[{label:"Apple 邮件服务器设置",url:"https://support.apple.com/zh-cn/HT202304"}]},{key:"tencent_exmail",label:"腾讯企业邮箱",defaults:{host:"smtp.exmail.qq.com",port:465,use_ssl:!0,use_tls:!1},note:"企业邮箱常用配置",links:[{label:"腾讯企业邮箱帮助",url:"https://service.exmail.qq.com/cgi-bin/help?subtype=1&id=23&no=1001068"}]},{key:"aliyun_exmail",label:"阿里企业邮箱",defaults:{host:"smtp.mxhichina.com",port:465,use_ssl:!0,use_tls:!1},note:"企业邮箱常用配置",links:[{label:"阿里云文档",url:"https://help.aliyun.com/document_detail/50652.html"}]}],q=m("custom"),V=G(()=>N.find(s=>s.key===q.value)||N[0]),be=G(()=>k.value&&J.value?"留空保持不变":"SMTP密码或授权码");function ve(s){const e=String(s?.host||"").trim().toLowerCase();return e&&{"smtp.gmail.com":"gmail","smtp.qq.com":"qq","smtp.163.com":"163","smtp.126.com":"126","smtp-mail.outlook.com":"outlook","smtp.office365.com":"office365","smtp.mail.me.com":"icloud","smtp.exmail.qq.com":"tencent_exmail","smtp.mxhichina.com":"aliyun_exmail"}[e]||"custom"}function ye(s){const e=N.find(i=>i.key===s);!e||!e.defaults||(a.host=e.defaults.host,a.port=e.defaults.port,a.use_ssl=e.defaults.use_ssl,a.use_tls=e.defaults.use_tls)}function se(){a.id=null,a.name="默认配置",a.enabled=!0,a.host="",a.port=465,a.username="",a.password="",a.use_ssl=!0,a.use_tls=!1,a.sender_name="自动化学习",a.sender_email="",a.daily_limit=0,a.priority=0,J.value=!1,H.value=!1,q.value="custom"}async function $(){O.value=!0;try{R.value=await Ke()}catch{R.value=[]}finally{O.value=!1}}function ge(){k.value=!1,se(),q.value="custom",S.value=!0}function ke(s){k.value=!0,se(),a.id=s.id,a.name=s.name||"默认配置",a.enabled=!!s.enabled,a.host=s.host||"",a.port=s.port||465,a.username=s.username||"",a.password="",a.use_ssl=!!s.use_ssl,a.use_tls=!!s.use_tls,a.sender_name=s.sender_name||"自动化学习",a.sender_email=s.sender_email||"",a.daily_limit=s.daily_limit??0,a.priority=s.priority??0,J.value=!!s.has_password,H.value=!!s.is_primary,q.value=ve(s),S.value=!0}function ne(s){return s.is_primary?{label:"主",type:"warning"}:s.enabled?{label:"备用",type:"success"}:{label:"禁用",type:"info"}}function he(s){return s.daily_limit&&s.daily_limit>0?`${s.daily_sent}/${s.daily_limit}`:`${s.daily_sent}/∞`}async function Ve(){if(!a.host.trim()){d.error("SMTP服务器地址不能为空");return}if(!a.username.trim()){d.error("SMTP用户名不能为空");return}const s={name:a.name.trim()||"默认配置",enabled:!!a.enabled,priority:Number(a.priority)||0,host:a.host.trim(),port:Number(a.port)||465,username:a.username.trim(),use_ssl:!!a.use_ssl,use_tls:!!a.use_tls,sender_name:(a.sender_name||"").trim(),sender_email:(a.sender_email||"").trim(),daily_limit:Number(a.daily_limit)||0};try{if(k.value){const e={...s};a.password&&(e.password=a.password);const i=await Re(a.id,e);if(!i?.success){d.error(i?.error||"更新失败");return}d.success("保存成功")}else{const e={...s};a.password&&(e.password=a.password);const i=await Oe(e);if(!i?.success){d.error(i?.error||"创建失败");return}d.success("创建成功")}S.value=!1,await $()}catch{}}async function we(){if(!k.value||!a.id){d.error("请先保存配置后再测试");return}let s;try{const e=await B.prompt("请输入测试收件邮箱","测试连接",{inputPlaceholder:"name@example.com",confirmButtonText:"发送测试邮件",cancelButtonText:"取消",inputValidator:i=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(i||"").trim()),inputErrorMessage:"邮箱格式不正确"});s=String(e.value||"").trim()}catch{return}try{const e=await We(a.id,s);e?.success?(d.success("测试成功,邮件已发送"),await $()):await B.alert(e?.error||"测试失败","测试失败",{confirmButtonText:"知道了"})}catch{}}async function Se(){if(!(!k.value||!a.id)){try{await B.confirm("确定将该配置设为主配置吗?","设为主配置",{confirmButtonText:"设为主配置",cancelButtonText:"取消",type:"warning"})}catch{return}try{const s=await Xe(a.id);if(!s?.success){d.error(s?.error||"设置失败");return}d.success("已设为主配置"),S.value=!1,await $()}catch{}}}async function Te(){if(k.value){try{await B.confirm("确定取消主配置吗?取消后将按优先级选择可用SMTP。","取消主配置",{confirmButtonText:"取消主配置",cancelButtonText:"保留",type:"warning"})}catch{return}try{const s=await Ye();if(!s?.success){d.error(s?.error||"操作失败");return}d.success("已取消主配置"),S.value=!1,await $()}catch{}}}async function xe(){if(!(!k.value||!a.id)){try{await B.confirm("确定删除该SMTP配置吗?此操作不可恢复。","删除配置",{confirmButtonText:"删除",cancelButtonText:"取消",type:"error"})}catch{return}try{const s=await Je(a.id);if(!s?.success){d.error(s?.error||"删除失败");return}d.success("已删除"),S.value=!1,await $()}catch{}}}const A=m(!1),h=m({}),W=m(!1),F=m(""),I=m(""),z=m(1),X=m([]),Y=m(0),Z=m(1);function Pe(s){return{register:"注册验证",reset:"密码重置",bind:"邮箱绑定",task_complete:"任务完成",security_alert:"安全告警"}[s]||s}function oe(s){return s?.username&&s?.user_id?`${s.username} (#${s.user_id})`:s?.user_id?`用户#${s.user_id}`:"系统"}const Ce=G(()=>[{key:"total_sent",label:"总发送",value:h.value?.total_sent||0,tone:"blue"},{key:"total_success",label:"成功",value:h.value?.total_success||0,tone:"green"},{key:"total_failed",label:"失败",value:h.value?.total_failed||0,tone:"red"},{key:"success_rate",label:"成功率",value:`${h.value?.success_rate||0}%`,tone:"purple"}]),Be=G(()=>[{key:"register_sent",label:"注册验证",value:h.value?.register_sent||0,tone:"cyan"},{key:"reset_sent",label:"密码重置",value:h.value?.reset_sent||0,tone:"orange"},{key:"bind_sent",label:"邮箱绑定",value:h.value?.bind_sent||0,tone:"purple"},{key:"task_complete_sent",label:"任务完成",value:h.value?.task_complete_sent||0,tone:"green"}]);async function Me(){A.value=!0;try{h.value=await Fe()}catch{h.value={}}finally{A.value=!1}}async function D(s=1){W.value=!0;try{const e={page:s,page_size:fe};F.value&&(e.type=F.value),I.value&&(e.status=I.value);const i=await De(e);X.value=i?.logs||[],Y.value=i?.total||0,z.value=i?.page||s,Z.value=i?.total_pages||1}catch{X.value=[],Y.value=0,Z.value=1}finally{W.value=!1}}async function Ue(){let s;try{const e=await B.prompt("请输入保留天数(将删除该天数之前的日志)","清理日志",{inputValue:"30",confirmButtonText:"清理",cancelButtonText:"取消",inputValidator:i=>{const r=parseInt(String(i),10);return Number.isFinite(r)&&r>=7},inputErrorMessage:"天数必须大于等于7"});s=parseInt(String(e.value),10)}catch{return}try{await B.confirm(`确定删除 ${s} 天之前的邮件日志吗?`,"二次确认",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await He(s);if(!e?.success){d.error(e?.error||"清理失败");return}d.success(`已清理 ${e.deleted} 条日志`),await D(1)}catch{}}async function Le(){await Promise.all([ae(),$(),Me(),D(1)])}return je(Le),(s,e)=>{const i=c("el-switch"),r=c("el-form-item"),Ee=c("el-divider"),C=c("el-input"),ie=c("el-form"),Q=c("el-card"),T=c("el-button"),ue=c("el-tag"),y=c("el-table-column"),re=c("el-table"),w=c("el-option"),ee=c("el-select"),qe=c("el-pagination"),$e=c("el-link"),le=c("el-input-number"),Ae=c("el-dialog"),j=Ge("loading");return f(),x("div",Ze,[e[43]||(e[43]=u("div",{class:"app-page-title"},[u("h2",null,"邮件配置")],-1)),K((f(),M(Q,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:n(()=>[e[29]||(e[29]=u("h3",{class:"section-title"},"全局设置",-1)),t(ie,{"label-width":"140px"},{default:n(()=>[t(r,{label:"启用邮件功能"},{default:n(()=>[t(i,{modelValue:o.enabled,"onUpdate:modelValue":e[0]||(e[0]=l=>o.enabled=l),disabled:g.value,onChange:E},null,8,["modelValue","disabled"])]),_:1}),t(r,{label:"启用故障转移"},{default:n(()=>[t(i,{modelValue:o.failover_enabled,"onUpdate:modelValue":e[1]||(e[1]=l=>o.failover_enabled=l),disabled:g.value,onChange:E},null,8,["modelValue","disabled"])]),_:1}),t(r,{label:"启用注册邮箱验证"},{default:n(()=>[t(i,{modelValue:o.register_verify_enabled,"onUpdate:modelValue":e[2]||(e[2]=l=>o.register_verify_enabled=l),disabled:g.value,onChange:E},null,8,["modelValue","disabled"])]),_:1}),t(Ee,{"content-position":"left"},{default:n(()=>[...e[26]||(e[26]=[p("通知设置",-1)])]),_:1}),t(r,{label:"启用任务完成通知"},{default:n(()=>[t(i,{modelValue:o.task_notify_enabled,"onUpdate:modelValue":e[3]||(e[3]=l=>o.task_notify_enabled=l),disabled:g.value,onChange:E},null,8,["modelValue","disabled"])]),_:1}),t(r,{label:"新设备登录提醒"},{default:n(()=>[t(i,{modelValue:o.login_alert_enabled,"onUpdate:modelValue":e[4]||(e[4]=l=>o.login_alert_enabled=l),disabled:g.value,onChange:E},null,8,["modelValue","disabled"]),e[27]||(e[27]=u("div",{class:"help"},"当检测到新设备或新IP登录时,发送邮件提醒用户",-1))]),_:1}),t(r,{label:"网站基础URL"},{default:n(()=>[t(C,{modelValue:o.base_url,"onUpdate:modelValue":e[5]||(e[5]=l=>o.base_url=l),placeholder:"例如: https://example.com",disabled:g.value,onBlur:E},null,8,["modelValue","disabled"]),e[28]||(e[28]=u("div",{class:"help"},"用于生成邮件中的验证链接,留空则使用默认配置。",-1))]),_:1})]),_:1}),u("div",el,"最近更新时间:"+_(o.updated_at||"-"),1)]),_:1})),[[j,v.value]]),t(Q,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:n(()=>[u("div",ll,[e[31]||(e[31]=u("h3",{class:"section-title"},"SMTP配置列表",-1)),t(T,{type:"primary",onClick:ge},{default:n(()=>[...e[30]||(e[30]=[p("+ 添加配置",-1)])]),_:1})]),u("div",tl,[K((f(),M(re,{data:R.value,style:{width:"100%"}},{default:n(()=>[t(y,{label:"状态",width:"90"},{default:n(({row:l})=>[t(ue,{type:ne(l).type,effect:"light"},{default:n(()=>[p(_(ne(l).label),1)]),_:2},1032,["type"])]),_:1}),t(y,{prop:"name",label:"名称","min-width":"160"}),t(y,{label:"服务器","min-width":"200"},{default:n(({row:l})=>[p(_(l.host)+":"+_(l.port),1)]),_:1}),t(y,{label:"今日/限额",width:"110"},{default:n(({row:l})=>[p(_(he(l)),1)]),_:1}),t(y,{label:"成功率",width:"100"},{default:n(({row:l})=>[p(_(l.success_rate)+"%",1)]),_:1}),t(y,{label:"操作",width:"120",fixed:"right"},{default:n(({row:l})=>[t(T,{size:"small",onClick:de=>ke(l)},{default:n(()=>[...e[32]||(e[32]=[p("编辑",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[j,O.value]])])]),_:1}),K((f(),M(Q,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:n(()=>[e[33]||(e[33]=u("h3",{class:"section-title"},"邮件发送统计",-1)),t(me,{items:Ce.value,loading:A.value,"min-width":160},null,8,["items","loading"]),u("div",al,[t(me,{items:Be.value,loading:A.value,"min-width":150},null,8,["items","loading"])]),u("div",sl,"最后更新:"+_(h.value.last_updated||"-"),1)]),_:1})),[[j,A.value]]),t(Q,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:n(()=>[u("div",nl,[e[35]||(e[35]=u("h3",{class:"section-title"},"邮件发送日志",-1)),u("div",ol,[t(ee,{modelValue:F.value,"onUpdate:modelValue":e[6]||(e[6]=l=>F.value=l),style:{width:"140px"},onChange:e[7]||(e[7]=l=>D(1))},{default:n(()=>[t(w,{label:"全部类型",value:""}),t(w,{label:"注册验证",value:"register"}),t(w,{label:"密码重置",value:"reset"}),t(w,{label:"邮箱绑定",value:"bind"}),t(w,{label:"任务完成",value:"task_complete"}),t(w,{label:"安全告警",value:"security_alert"})]),_:1},8,["modelValue"]),t(ee,{modelValue:I.value,"onUpdate:modelValue":e[8]||(e[8]=l=>I.value=l),style:{width:"120px"},onChange:e[9]||(e[9]=l=>D(1))},{default:n(()=>[t(w,{label:"全部状态",value:""}),t(w,{label:"成功",value:"success"}),t(w,{label:"失败",value:"failed"})]),_:1},8,["modelValue"]),t(T,{type:"danger",plain:"",onClick:Ue},{default:n(()=>[...e[34]||(e[34]=[p("清理日志",-1)])]),_:1})])]),u("div",il,[K((f(),M(re,{data:X.value,style:{width:"100%"}},{default:n(()=>[t(y,{prop:"created_at",label:"时间",width:"180"}),t(y,{prop:"email_to",label:"收件人","min-width":"180"}),t(y,{label:"来源用户","min-width":"160"},{default:n(({row:l})=>[u("span",{class:"ellipsis",title:oe(l)},_(oe(l)),9,ul)]),_:1}),t(y,{label:"类型",width:"120"},{default:n(({row:l})=>[p(_(Pe(l.email_type)),1)]),_:1}),t(y,{label:"主题","min-width":"220"},{default:n(({row:l})=>[u("span",{class:"ellipsis",title:l.subject},_(l.subject),9,rl)]),_:1}),t(y,{label:"状态",width:"90"},{default:n(({row:l})=>[t(ue,{type:l.status==="success"?"success":"danger",effect:"light"},{default:n(()=>[p(_(l.status==="success"?"成功":"失败"),1)]),_:2},1032,["type"])]),_:1}),t(y,{label:"错误","min-width":"200"},{default:n(({row:l})=>[u("span",{class:"ellipsis",title:l.error_message||""},_(l.error_message||"-"),9,dl)]),_:1})]),_:1},8,["data"])),[[j,W.value]])]),u("div",ml,[t(qe,{"current-page":z.value,"onUpdate:currentPage":e[10]||(e[10]=l=>z.value=l),"page-size":fe,total:Y.value,layout:"prev, pager, next, ->, total",onCurrentChange:D},null,8,["current-page","total"]),u("div",pl,"第 "+_(z.value)+" / "+_(Z.value)+" 页",1)])]),_:1}),t(Ae,{modelValue:S.value,"onUpdate:modelValue":e[25]||(e[25]=l=>S.value=l),title:k.value?"编辑SMTP配置":"添加SMTP配置",width:"min(560px, 92vw)"},{footer:n(()=>[u("div",yl,[t(T,{onClick:we},{default:n(()=>[...e[36]||(e[36]=[p("测试连接",-1)])]),_:1}),k.value&&H.value?(f(),M(T,{key:0,type:"warning",plain:"",onClick:Te},{default:n(()=>[...e[37]||(e[37]=[p("取消主配置",-1)])]),_:1})):P("",!0),k.value&&!H.value?(f(),M(T,{key:1,onClick:Se},{default:n(()=>[...e[38]||(e[38]=[p("设为主配置",-1)])]),_:1})):P("",!0),k.value?(f(),M(T,{key:2,type:"danger",plain:"",onClick:xe},{default:n(()=>[...e[39]||(e[39]=[p("删除配置",-1)])]),_:1})):P("",!0),e[42]||(e[42]=u("div",{class:"spacer"},null,-1)),t(T,{onClick:e[24]||(e[24]=l=>S.value=!1)},{default:n(()=>[...e[40]||(e[40]=[p("取消",-1)])]),_:1}),t(T,{type:"primary",onClick:Ve},{default:n(()=>[...e[41]||(e[41]=[p("保存",-1)])]),_:1})])]),default:n(()=>[t(ie,{"label-width":"120px"},{default:n(()=>[t(r,{label:"名称"},{default:n(()=>[t(C,{modelValue:a.name,"onUpdate:modelValue":e[11]||(e[11]=l=>a.name=l)},null,8,["modelValue"])]),_:1}),t(r,{label:"启用"},{default:n(()=>[t(i,{modelValue:a.enabled,"onUpdate:modelValue":e[12]||(e[12]=l=>a.enabled=l)},null,8,["modelValue"])]),_:1}),t(r,{label:"邮箱模板"},{default:n(()=>[u("div",cl,[t(ee,{modelValue:q.value,"onUpdate:modelValue":e[13]||(e[13]=l=>q.value=l),placeholder:"选择常用邮箱模板",style:{width:"100%"},onChange:ye},{default:n(()=>[(f(),x(te,null,ce(N,l=>t(w,{key:l.key,label:l.label,value:l.key},null,8,["label","value"])),64))]),_:1},8,["modelValue"]),V.value.note||V.value.links&&V.value.links.length?(f(),x("div",fl,[V.value.note?(f(),x("span",_l,_(V.value.note),1)):P("",!0),V.value.links&&V.value.links.length?(f(),x(te,{key:1},[V.value.note?(f(),x("span",bl," · ")):P("",!0),(f(!0),x(te,null,ce(V.value.links,(l,de)=>(f(),x("span",{key:l.url},[t($e,{href:l.url,target:"_blank",type:"primary",underline:!1},{default:n(()=>[p(_(l.label),1)]),_:2},1032,["href"]),de[t(C,{modelValue:a.host,"onUpdate:modelValue":e[14]||(e[14]=l=>a.host=l),placeholder:"smtp.example.com"},null,8,["modelValue"])]),_:1}),t(r,{label:"端口"},{default:n(()=>[t(le,{modelValue:a.port,"onUpdate:modelValue":e[15]||(e[15]=l=>a.port=l),min:1,max:65535},null,8,["modelValue"])]),_:1}),t(r,{label:"用户名"},{default:n(()=>[t(C,{modelValue:a.username,"onUpdate:modelValue":e[16]||(e[16]=l=>a.username=l)},null,8,["modelValue"])]),_:1}),t(r,{label:"密码"},{default:n(()=>[t(C,{modelValue:a.password,"onUpdate:modelValue":e[17]||(e[17]=l=>a.password=l),type:"password","show-password":"",placeholder:be.value},null,8,["modelValue","placeholder"])]),_:1}),t(r,{label:"SSL"},{default:n(()=>[t(i,{modelValue:a.use_ssl,"onUpdate:modelValue":e[18]||(e[18]=l=>a.use_ssl=l)},null,8,["modelValue"])]),_:1}),t(r,{label:"TLS"},{default:n(()=>[t(i,{modelValue:a.use_tls,"onUpdate:modelValue":e[19]||(e[19]=l=>a.use_tls=l)},null,8,["modelValue"])]),_:1}),t(r,{label:"发件人名称"},{default:n(()=>[t(C,{modelValue:a.sender_name,"onUpdate:modelValue":e[20]||(e[20]=l=>a.sender_name=l)},null,8,["modelValue"])]),_:1}),t(r,{label:"发件人邮箱"},{default:n(()=>[t(C,{modelValue:a.sender_email,"onUpdate:modelValue":e[21]||(e[21]=l=>a.sender_email=l),placeholder:"可选"},null,8,["modelValue"])]),_:1}),t(r,{label:"每日限额"},{default:n(()=>[t(le,{modelValue:a.daily_limit,"onUpdate:modelValue":e[22]||(e[22]=l=>a.daily_limit=l),min:0,max:1e6},null,8,["modelValue"])]),_:1}),t(r,{label:"优先级"},{default:n(()=>[t(le,{modelValue:a.priority,"onUpdate:modelValue":e[23]||(e[23]=l=>a.priority=l),min:0,max:1e3},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue","title"])])}}},Pl=ze(gl,[["__scopeId","data-v-4f511165"]]);export{Pl as default}; diff --git a/static/admin/assets/FeedbacksPage-BgrVN8tx.js b/static/admin/assets/FeedbacksPage-DadToBbu.js similarity index 97% rename from static/admin/assets/FeedbacksPage-BgrVN8tx.js rename to static/admin/assets/FeedbacksPage-DadToBbu.js index 30d8732..62f9c6a 100644 --- a/static/admin/assets/FeedbacksPage-BgrVN8tx.js +++ b/static/admin/assets/FeedbacksPage-DadToBbu.js @@ -1 +1 @@ -import{_ as $,b as j,r as G,d as L,e as q}from"./index-BMIn4N2u.js";import{M as J}from"./MetricGrid-R-_JZS_i.js";import{E as w,a as k}from"./vendor-element-B5S5pUKo.js";import{i as K,r as f,c as O,o as R,aj as i,ap as U,n as x,q as v,t as s,L as t,E as l,K as F,a3 as A,J as d,F as H,D as Q,I as p,G as W}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";const X={class:"page-stack"},Y={class:"app-page-title"},Z={class:"toolbar"},ee={class:"section-head"},te={class:"app-muted"},ae={class:"table-wrap"},le={class:"ellipsis"},ne={class:"ellipsis"},se={class:"ellipsis"},oe={class:"actions"},ie={__name:"FeedbacksPage",setup(ce){const T=K("refreshNavBadges",null),u=f(!1),b=f(""),c=f({total:0,pending:0,replied:0,closed:0}),_=f([]),V=[{label:"全部状态",value:""},{label:"待处理",value:"pending"},{label:"已回复",value:"replied"},{label:"已关闭",value:"closed"}],M=O(()=>[{key:"total",label:"总反馈",value:c.value.total||0,tone:"blue"},{key:"pending",label:"待处理",value:c.value.pending||0,tone:"orange"},{key:"replied",label:"已回复",value:c.value.replied||0,tone:"green"},{key:"closed",label:"已关闭",value:c.value.closed||0,tone:"purple"}]);function B(n){return n==="pending"?{label:"待处理",type:"warning"}:n==="replied"?{label:"已回复",type:"success"}:n==="closed"?{label:"已关闭",type:"info"}:{label:n||"-",type:"info"}}async function r(){u.value=!0;try{const n=await j(b.value);_.value=n?.feedbacks||[],c.value=n?.stats||{total:0,pending:0,replied:0,closed:0}}catch{_.value=[],c.value={total:0,pending:0,replied:0,closed:0}}finally{u.value=!1}await T?.({pendingFeedbacks:c.value.pending||0})}async function D(n){let a;try{a=(await w.prompt("请输入回复内容","回复反馈",{inputType:"textarea",inputPlaceholder:"回复内容",confirmButtonText:"提交",cancelButtonText:"取消",inputValidator:g=>!!String(g||"").trim(),inputErrorMessage:"回复内容不能为空"})).value}catch{return}try{const m=await G(n.id,String(a||"").trim());k.success(m?.message||"回复成功"),await r()}catch{}}async function E(n){try{await w.confirm("确定要关闭这个反馈吗?","关闭反馈",{confirmButtonText:"关闭",cancelButtonText:"取消",type:"warning"})}catch{return}try{const a=await L(n.id);k.success(a?.message||"反馈已关闭"),await r()}catch{}}async function N(n){try{await w.confirm("确定要删除这个反馈吗?此操作不可恢复!","删除反馈",{confirmButtonText:"删除",cancelButtonText:"取消",type:"error"})}catch{return}try{const a=await q(n.id);k.success(a?.message||"反馈已删除"),await r()}catch{}}return R(r),(n,a)=>{const m=i("el-option"),g=i("el-select"),o=i("el-table-column"),y=i("el-tooltip"),I=i("el-tag"),h=i("el-button"),z=i("el-table"),P=i("el-card"),S=U("loading");return v(),x("div",X,[s("div",Y,[a[1]||(a[1]=s("h2",null,"反馈管理",-1)),s("div",Z,[t(g,{modelValue:b.value,"onUpdate:modelValue":a[0]||(a[0]=e=>b.value=e),style:{width:"160px"},onChange:r},{default:l(()=>[(v(),x(F,null,A(V,e=>t(m,{key:e.value,label:e.label,value:e.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"])])]),t(J,{items:M.value,loading:u.value,"min-width":165},null,8,["items","loading"]),t(P,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[s("div",ee,[a[2]||(a[2]=s("h3",{class:"section-title"},"反馈列表",-1)),s("div",te,"共 "+d(_.value.length)+" 条(当前筛选)",1)]),s("div",ae,[H((v(),Q(z,{data:_.value,style:{width:"100%"}},{default:l(()=>[t(o,{prop:"id",label:"ID",width:"80"}),t(o,{prop:"username",label:"用户",width:"140"}),t(o,{label:"标题","min-width":"180"},{default:l(({row:e})=>[t(y,{content:e.title,placement:"top","show-after":300},{default:l(()=>[s("span",le,d(e.title),1)]),_:2},1032,["content"])]),_:1}),t(o,{label:"描述","min-width":"220"},{default:l(({row:e})=>[t(y,{content:e.description,placement:"top","show-after":300},{default:l(()=>[s("span",ne,d(e.description),1)]),_:2},1032,["content"])]),_:1}),t(o,{prop:"contact",label:"联系方式","min-width":"160"},{default:l(({row:e})=>[p(d(e.contact||"-"),1)]),_:1}),t(o,{label:"状态",width:"110"},{default:l(({row:e})=>[t(I,{type:B(e.status).type,effect:"light"},{default:l(()=>[p(d(B(e.status).label),1)]),_:2},1032,["type"])]),_:1}),t(o,{prop:"created_at",label:"提交时间",width:"180"}),t(o,{label:"回复","min-width":"180"},{default:l(({row:e})=>[t(y,{content:e.admin_reply||"",placement:"top","show-after":300},{default:l(()=>[s("span",se,d(e.admin_reply||"-"),1)]),_:2},1032,["content"])]),_:1}),t(o,{label:"操作",width:"220",fixed:"right"},{default:l(({row:e})=>[s("div",oe,[e.status!=="closed"?(v(),x(F,{key:0},[t(h,{type:"primary",size:"small",onClick:C=>D(e)},{default:l(()=>[...a[3]||(a[3]=[p("回复",-1)])]),_:1},8,["onClick"]),t(h,{size:"small",onClick:C=>E(e)},{default:l(()=>[...a[4]||(a[4]=[p("关闭",-1)])]),_:1},8,["onClick"])],64)):W("",!0),t(h,{type:"danger",size:"small",onClick:C=>N(e)},{default:l(()=>[...a[5]||(a[5]=[p("删除",-1)])]),_:1},8,["onClick"])])]),_:1})]),_:1},8,["data"])),[[S,u.value]])])]),_:1})])}}},fe=$(ie,[["__scopeId","data-v-910fe89b"]]);export{fe as default}; +import{_ as $,b as j,r as G,d as L,e as q}from"./index-BwP1dZnj.js";import{M as J}from"./MetricGrid-COFDfeGs.js";import{E as w,a as k}from"./vendor-element-B5S5pUKo.js";import{i as K,r as f,c as O,o as R,aj as i,ap as U,n as x,q as v,t as s,L as t,E as l,K as F,a3 as A,J as d,F as H,D as Q,I as p,G as W}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";const X={class:"page-stack"},Y={class:"app-page-title"},Z={class:"toolbar"},ee={class:"section-head"},te={class:"app-muted"},ae={class:"table-wrap"},le={class:"ellipsis"},ne={class:"ellipsis"},se={class:"ellipsis"},oe={class:"actions"},ie={__name:"FeedbacksPage",setup(ce){const T=K("refreshNavBadges",null),u=f(!1),b=f(""),c=f({total:0,pending:0,replied:0,closed:0}),_=f([]),V=[{label:"全部状态",value:""},{label:"待处理",value:"pending"},{label:"已回复",value:"replied"},{label:"已关闭",value:"closed"}],M=O(()=>[{key:"total",label:"总反馈",value:c.value.total||0,tone:"blue"},{key:"pending",label:"待处理",value:c.value.pending||0,tone:"orange"},{key:"replied",label:"已回复",value:c.value.replied||0,tone:"green"},{key:"closed",label:"已关闭",value:c.value.closed||0,tone:"purple"}]);function B(n){return n==="pending"?{label:"待处理",type:"warning"}:n==="replied"?{label:"已回复",type:"success"}:n==="closed"?{label:"已关闭",type:"info"}:{label:n||"-",type:"info"}}async function r(){u.value=!0;try{const n=await j(b.value);_.value=n?.feedbacks||[],c.value=n?.stats||{total:0,pending:0,replied:0,closed:0}}catch{_.value=[],c.value={total:0,pending:0,replied:0,closed:0}}finally{u.value=!1}await T?.({pendingFeedbacks:c.value.pending||0})}async function D(n){let a;try{a=(await w.prompt("请输入回复内容","回复反馈",{inputType:"textarea",inputPlaceholder:"回复内容",confirmButtonText:"提交",cancelButtonText:"取消",inputValidator:g=>!!String(g||"").trim(),inputErrorMessage:"回复内容不能为空"})).value}catch{return}try{const m=await G(n.id,String(a||"").trim());k.success(m?.message||"回复成功"),await r()}catch{}}async function E(n){try{await w.confirm("确定要关闭这个反馈吗?","关闭反馈",{confirmButtonText:"关闭",cancelButtonText:"取消",type:"warning"})}catch{return}try{const a=await L(n.id);k.success(a?.message||"反馈已关闭"),await r()}catch{}}async function N(n){try{await w.confirm("确定要删除这个反馈吗?此操作不可恢复!","删除反馈",{confirmButtonText:"删除",cancelButtonText:"取消",type:"error"})}catch{return}try{const a=await q(n.id);k.success(a?.message||"反馈已删除"),await r()}catch{}}return R(r),(n,a)=>{const m=i("el-option"),g=i("el-select"),o=i("el-table-column"),y=i("el-tooltip"),I=i("el-tag"),h=i("el-button"),z=i("el-table"),P=i("el-card"),S=U("loading");return v(),x("div",X,[s("div",Y,[a[1]||(a[1]=s("h2",null,"反馈管理",-1)),s("div",Z,[t(g,{modelValue:b.value,"onUpdate:modelValue":a[0]||(a[0]=e=>b.value=e),style:{width:"160px"},onChange:r},{default:l(()=>[(v(),x(F,null,A(V,e=>t(m,{key:e.value,label:e.label,value:e.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"])])]),t(J,{items:M.value,loading:u.value,"min-width":165},null,8,["items","loading"]),t(P,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[s("div",ee,[a[2]||(a[2]=s("h3",{class:"section-title"},"反馈列表",-1)),s("div",te,"共 "+d(_.value.length)+" 条(当前筛选)",1)]),s("div",ae,[H((v(),Q(z,{data:_.value,style:{width:"100%"}},{default:l(()=>[t(o,{prop:"id",label:"ID",width:"80"}),t(o,{prop:"username",label:"用户",width:"140"}),t(o,{label:"标题","min-width":"180"},{default:l(({row:e})=>[t(y,{content:e.title,placement:"top","show-after":300},{default:l(()=>[s("span",le,d(e.title),1)]),_:2},1032,["content"])]),_:1}),t(o,{label:"描述","min-width":"220"},{default:l(({row:e})=>[t(y,{content:e.description,placement:"top","show-after":300},{default:l(()=>[s("span",ne,d(e.description),1)]),_:2},1032,["content"])]),_:1}),t(o,{prop:"contact",label:"联系方式","min-width":"160"},{default:l(({row:e})=>[p(d(e.contact||"-"),1)]),_:1}),t(o,{label:"状态",width:"110"},{default:l(({row:e})=>[t(I,{type:B(e.status).type,effect:"light"},{default:l(()=>[p(d(B(e.status).label),1)]),_:2},1032,["type"])]),_:1}),t(o,{prop:"created_at",label:"提交时间",width:"180"}),t(o,{label:"回复","min-width":"180"},{default:l(({row:e})=>[t(y,{content:e.admin_reply||"",placement:"top","show-after":300},{default:l(()=>[s("span",se,d(e.admin_reply||"-"),1)]),_:2},1032,["content"])]),_:1}),t(o,{label:"操作",width:"220",fixed:"right"},{default:l(({row:e})=>[s("div",oe,[e.status!=="closed"?(v(),x(F,{key:0},[t(h,{type:"primary",size:"small",onClick:C=>D(e)},{default:l(()=>[...a[3]||(a[3]=[p("回复",-1)])]),_:1},8,["onClick"]),t(h,{size:"small",onClick:C=>E(e)},{default:l(()=>[...a[4]||(a[4]=[p("关闭",-1)])]),_:1},8,["onClick"])],64)):W("",!0),t(h,{type:"danger",size:"small",onClick:C=>N(e)},{default:l(()=>[...a[5]||(a[5]=[p("删除",-1)])]),_:1},8,["onClick"])])]),_:1})]),_:1},8,["data"])),[[S,u.value]])])]),_:1})])}}},fe=$(ie,[["__scopeId","data-v-910fe89b"]]);export{fe as default}; diff --git a/static/admin/assets/LogsPage-D86va6oN.js b/static/admin/assets/LogsPage-CsJ25c1g.js similarity index 98% rename from static/admin/assets/LogsPage-D86va6oN.js rename to static/admin/assets/LogsPage-CsJ25c1g.js index 2907f6e..fc86b96 100644 --- a/static/admin/assets/LogsPage-D86va6oN.js +++ b/static/admin/assets/LogsPage-CsJ25c1g.js @@ -1 +1 @@ -import{f as K}from"./users-DoPbHko8.js";import{g as G,h as H}from"./tasks-DaPM55hg.js";import{_ as Q}from"./index-BMIn4N2u.js";import{E as N,a as X}from"./vendor-element-B5S5pUKo.js";import{r as u,c as Z,o as ee,aj as r,ap as te,n as P,q as b,t as f,L as t,E as l,K as ae,a3 as le,D as F,I as m,F as oe,J as d}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";function ne(p){return String(p||"").trim()}function se(p){return!p.startsWith("user_scheduled")||!p.includes(":")?"":p.split(":",2)[1]||""}function ue(p){const s=ne(p);if(!s||s==="manual")return{group:"manual",label:"手动",type:"success",tooltip:""};if(s==="scheduled")return{group:"scheduled",label:"定时任务",type:"primary",tooltip:"系统定时"};if(s.startsWith("user_scheduled")){const i=se(s),v=String(i||"").replace(/^batch_/,"");return{group:"scheduled",label:"定时任务",type:"primary",tooltip:v?`用户定时批次:${v}`:"用户定时"}}return{group:"manual",label:"手动",type:"success",tooltip:{batch:"手动批量",manual_screenshot:"手动截图",immediate:"立即执行",resumed:"断点恢复"}[s]||s}}const re={class:"page-stack"},ie={class:"filters"},ce={class:"table-wrap"},de={class:"ellipsis"},pe={class:"pagination"},me={class:"page-hint app-muted"},B=20,fe={__name:"LogsPage",setup(p){const s=u(!1),S=u([]),y=u(0),i=u(1),v=u(!1),T=u([]),h=u(""),w=u(""),V=u(""),x=u(""),k=u(""),$=Z(()=>Math.max(1,Math.ceil((y.value||0)/B)));function Y(o){if(o==null)return"-";const e=Number(o);return Number.isFinite(e)?e<60?`${e}秒`:`${Math.floor(e/60)}分${e%60}秒`:"-"}function _(o){const e=ue(o);return{key:e.group,label:e.label,type:e.type,tooltip:e.tooltip}}function I(o){return o==="success"?{label:"成功",type:"success"}:o==="failed"?{label:"失败",type:"danger"}:{label:o||"-",type:"info"}}async function z(){v.value=!0;try{const o=await K();T.value=(o||[]).map(e=>({id:e.id,username:e.username}))}catch{T.value=[]}finally{v.value=!1}}async function M(){s.value=!0;try{const o=(i.value-1)*B,e={limit:B,offset:o};h.value&&(e.date=h.value),w.value&&(e.status=w.value),V.value&&(e.source=V.value),x.value&&(e.user_id=x.value),k.value&&(e.account=k.value);const g=await G(e);S.value=g?.logs||[],y.value=g?.total||0}catch{S.value=[],y.value=0}finally{s.value=!1}}function O(){i.value=1,M()}function j(){h.value="",w.value="",V.value="",x.value="",k.value="",i.value=1,M()}async function R(){let o;try{const e=await N.prompt("请输入要清理多少天前的日志(默认30天)","清理旧日志",{inputValue:"30",confirmButtonText:"下一步",cancelButtonText:"取消",inputValidator:g=>{const n=parseInt(String(g),10);return Number.isFinite(n)&&n>=1},inputErrorMessage:"请输入有效的天数(大于0的整数)"});o=parseInt(String(e.value),10)}catch{return}try{await N.confirm(`确定要删除 ${o} 天前的所有日志吗?此操作不可恢复!`,"二次确认",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await H(o);X.success(e?.message||"清理成功"),i.value=1,await M()}catch{}}return ee(async()=>{await z(),await M()}),(o,e)=>{const g=r("el-date-picker"),n=r("el-option"),U=r("el-select"),W=r("el-input"),C=r("el-button"),L=r("el-card"),c=r("el-table-column"),D=r("el-tag"),E=r("el-tooltip"),q=r("el-table"),A=r("el-pagination"),J=te("loading");return b(),P("div",re,[e[9]||(e[9]=f("div",{class:"app-page-title"},[f("h2",null,"任务日志")],-1)),t(L,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[f("div",ie,[t(g,{modelValue:h.value,"onUpdate:modelValue":e[0]||(e[0]=a=>h.value=a),type:"date","value-format":"YYYY-MM-DD",placeholder:"日期",style:{width:"150px"}},null,8,["modelValue"]),t(U,{modelValue:w.value,"onUpdate:modelValue":e[1]||(e[1]=a=>w.value=a),placeholder:"状态",style:{width:"120px"}},{default:l(()=>[t(n,{label:"全部",value:""}),t(n,{label:"成功",value:"success"}),t(n,{label:"失败",value:"failed"})]),_:1},8,["modelValue"]),t(U,{modelValue:V.value,"onUpdate:modelValue":e[2]||(e[2]=a=>V.value=a),placeholder:"来源",style:{width:"120px"}},{default:l(()=>[t(n,{label:"全部",value:""}),t(n,{label:"手动",value:"manual"}),t(n,{label:"定时任务(系统)",value:"scheduled"}),t(n,{label:"定时任务(用户)",value:"user_scheduled"}),t(n,{label:"手动(批量)",value:"batch"}),t(n,{label:"手动(截图)",value:"manual_screenshot"}),t(n,{label:"手动(立即)",value:"immediate"}),t(n,{label:"手动(恢复)",value:"resumed"})]),_:1},8,["modelValue"]),t(U,{modelValue:x.value,"onUpdate:modelValue":e[3]||(e[3]=a=>x.value=a),placeholder:"用户",style:{width:"140px"},loading:v.value,filterable:"",clearable:""},{default:l(()=>[t(n,{label:"全部",value:""}),(b(!0),P(ae,null,le(T.value,a=>(b(),F(n,{key:a.id,label:a.username,value:String(a.id)},null,8,["label","value"]))),128))]),_:1},8,["modelValue","loading"]),t(W,{modelValue:k.value,"onUpdate:modelValue":e[4]||(e[4]=a=>k.value=a),placeholder:"账号关键字",style:{width:"170px"},clearable:""},null,8,["modelValue"]),t(C,{type:"primary",onClick:O},{default:l(()=>[...e[6]||(e[6]=[m("筛选",-1)])]),_:1}),t(C,{onClick:j},{default:l(()=>[...e[7]||(e[7]=[m("重置",-1)])]),_:1}),t(C,{type:"danger",plain:"",onClick:R},{default:l(()=>[...e[8]||(e[8]=[m("清理旧日志",-1)])]),_:1})])]),_:1}),t(L,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[f("div",ce,[oe((b(),F(q,{data:S.value,style:{width:"100%"}},{default:l(()=>[t(c,{prop:"created_at",label:"时间",width:"180"}),t(c,{label:"来源",width:"110"},{default:l(({row:a})=>[_(a.source).tooltip?(b(),F(E,{key:0,content:_(a.source).tooltip,placement:"top","show-after":300},{default:l(()=>[t(D,{type:_(a.source).type,effect:"light"},{default:l(()=>[m(d(_(a.source).label),1)]),_:2},1032,["type"])]),_:2},1032,["content"])):(b(),F(D,{key:1,type:_(a.source).type,effect:"light"},{default:l(()=>[m(d(_(a.source).label),1)]),_:2},1032,["type"]))]),_:1}),t(c,{prop:"user_username",label:"用户",width:"140"}),t(c,{prop:"username",label:"账号",width:"160"}),t(c,{prop:"browse_type",label:"浏览类型",width:"120"}),t(c,{label:"状态",width:"90"},{default:l(({row:a})=>[t(D,{type:I(a.status).type,effect:"light"},{default:l(()=>[m(d(I(a.status).label),1)]),_:2},1032,["type"])]),_:1}),t(c,{label:"内容/附件",width:"110"},{default:l(({row:a})=>[m(d(a.total_items)+" / "+d(a.total_attachments),1)]),_:1}),t(c,{label:"用时",width:"90"},{default:l(({row:a})=>[m(d(Y(a.duration)),1)]),_:1}),t(c,{label:"失败原因","min-width":"220"},{default:l(({row:a})=>[t(E,{content:a.error_message||"",placement:"top","show-after":300},{default:l(()=>[f("span",de,d(a.error_message||"-"),1)]),_:2},1032,["content"])]),_:1})]),_:1},8,["data"])),[[J,s.value]])]),f("div",pe,[t(A,{"current-page":i.value,"onUpdate:currentPage":e[5]||(e[5]=a=>i.value=a),"page-size":B,total:y.value,layout:"prev, pager, next, jumper, ->, total",onCurrentChange:M},null,8,["current-page","total"]),f("div",me,"第 "+d(i.value)+" / "+d($.value)+" 页",1)])]),_:1})])}}},Ve=Q(fe,[["__scopeId","data-v-8803eb08"]]);export{Ve as default}; +import{f as K}from"./users-B3RByMlV.js";import{g as G,h as H}from"./tasks-D5YLLzN-.js";import{_ as Q}from"./index-BwP1dZnj.js";import{E as N,a as X}from"./vendor-element-B5S5pUKo.js";import{r as u,c as Z,o as ee,aj as r,ap as te,n as P,q as b,t as f,L as t,E as l,K as ae,a3 as le,D as F,I as m,F as oe,J as d}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";function ne(p){return String(p||"").trim()}function se(p){return!p.startsWith("user_scheduled")||!p.includes(":")?"":p.split(":",2)[1]||""}function ue(p){const s=ne(p);if(!s||s==="manual")return{group:"manual",label:"手动",type:"success",tooltip:""};if(s==="scheduled")return{group:"scheduled",label:"定时任务",type:"primary",tooltip:"系统定时"};if(s.startsWith("user_scheduled")){const i=se(s),v=String(i||"").replace(/^batch_/,"");return{group:"scheduled",label:"定时任务",type:"primary",tooltip:v?`用户定时批次:${v}`:"用户定时"}}return{group:"manual",label:"手动",type:"success",tooltip:{batch:"手动批量",manual_screenshot:"手动截图",immediate:"立即执行",resumed:"断点恢复"}[s]||s}}const re={class:"page-stack"},ie={class:"filters"},ce={class:"table-wrap"},de={class:"ellipsis"},pe={class:"pagination"},me={class:"page-hint app-muted"},B=20,fe={__name:"LogsPage",setup(p){const s=u(!1),S=u([]),y=u(0),i=u(1),v=u(!1),T=u([]),h=u(""),w=u(""),V=u(""),x=u(""),k=u(""),$=Z(()=>Math.max(1,Math.ceil((y.value||0)/B)));function Y(o){if(o==null)return"-";const e=Number(o);return Number.isFinite(e)?e<60?`${e}秒`:`${Math.floor(e/60)}分${e%60}秒`:"-"}function _(o){const e=ue(o);return{key:e.group,label:e.label,type:e.type,tooltip:e.tooltip}}function I(o){return o==="success"?{label:"成功",type:"success"}:o==="failed"?{label:"失败",type:"danger"}:{label:o||"-",type:"info"}}async function z(){v.value=!0;try{const o=await K();T.value=(o||[]).map(e=>({id:e.id,username:e.username}))}catch{T.value=[]}finally{v.value=!1}}async function M(){s.value=!0;try{const o=(i.value-1)*B,e={limit:B,offset:o};h.value&&(e.date=h.value),w.value&&(e.status=w.value),V.value&&(e.source=V.value),x.value&&(e.user_id=x.value),k.value&&(e.account=k.value);const g=await G(e);S.value=g?.logs||[],y.value=g?.total||0}catch{S.value=[],y.value=0}finally{s.value=!1}}function O(){i.value=1,M()}function j(){h.value="",w.value="",V.value="",x.value="",k.value="",i.value=1,M()}async function R(){let o;try{const e=await N.prompt("请输入要清理多少天前的日志(默认30天)","清理旧日志",{inputValue:"30",confirmButtonText:"下一步",cancelButtonText:"取消",inputValidator:g=>{const n=parseInt(String(g),10);return Number.isFinite(n)&&n>=1},inputErrorMessage:"请输入有效的天数(大于0的整数)"});o=parseInt(String(e.value),10)}catch{return}try{await N.confirm(`确定要删除 ${o} 天前的所有日志吗?此操作不可恢复!`,"二次确认",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await H(o);X.success(e?.message||"清理成功"),i.value=1,await M()}catch{}}return ee(async()=>{await z(),await M()}),(o,e)=>{const g=r("el-date-picker"),n=r("el-option"),U=r("el-select"),W=r("el-input"),C=r("el-button"),L=r("el-card"),c=r("el-table-column"),D=r("el-tag"),E=r("el-tooltip"),q=r("el-table"),A=r("el-pagination"),J=te("loading");return b(),P("div",re,[e[9]||(e[9]=f("div",{class:"app-page-title"},[f("h2",null,"任务日志")],-1)),t(L,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[f("div",ie,[t(g,{modelValue:h.value,"onUpdate:modelValue":e[0]||(e[0]=a=>h.value=a),type:"date","value-format":"YYYY-MM-DD",placeholder:"日期",style:{width:"150px"}},null,8,["modelValue"]),t(U,{modelValue:w.value,"onUpdate:modelValue":e[1]||(e[1]=a=>w.value=a),placeholder:"状态",style:{width:"120px"}},{default:l(()=>[t(n,{label:"全部",value:""}),t(n,{label:"成功",value:"success"}),t(n,{label:"失败",value:"failed"})]),_:1},8,["modelValue"]),t(U,{modelValue:V.value,"onUpdate:modelValue":e[2]||(e[2]=a=>V.value=a),placeholder:"来源",style:{width:"120px"}},{default:l(()=>[t(n,{label:"全部",value:""}),t(n,{label:"手动",value:"manual"}),t(n,{label:"定时任务(系统)",value:"scheduled"}),t(n,{label:"定时任务(用户)",value:"user_scheduled"}),t(n,{label:"手动(批量)",value:"batch"}),t(n,{label:"手动(截图)",value:"manual_screenshot"}),t(n,{label:"手动(立即)",value:"immediate"}),t(n,{label:"手动(恢复)",value:"resumed"})]),_:1},8,["modelValue"]),t(U,{modelValue:x.value,"onUpdate:modelValue":e[3]||(e[3]=a=>x.value=a),placeholder:"用户",style:{width:"140px"},loading:v.value,filterable:"",clearable:""},{default:l(()=>[t(n,{label:"全部",value:""}),(b(!0),P(ae,null,le(T.value,a=>(b(),F(n,{key:a.id,label:a.username,value:String(a.id)},null,8,["label","value"]))),128))]),_:1},8,["modelValue","loading"]),t(W,{modelValue:k.value,"onUpdate:modelValue":e[4]||(e[4]=a=>k.value=a),placeholder:"账号关键字",style:{width:"170px"},clearable:""},null,8,["modelValue"]),t(C,{type:"primary",onClick:O},{default:l(()=>[...e[6]||(e[6]=[m("筛选",-1)])]),_:1}),t(C,{onClick:j},{default:l(()=>[...e[7]||(e[7]=[m("重置",-1)])]),_:1}),t(C,{type:"danger",plain:"",onClick:R},{default:l(()=>[...e[8]||(e[8]=[m("清理旧日志",-1)])]),_:1})])]),_:1}),t(L,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[f("div",ce,[oe((b(),F(q,{data:S.value,style:{width:"100%"}},{default:l(()=>[t(c,{prop:"created_at",label:"时间",width:"180"}),t(c,{label:"来源",width:"110"},{default:l(({row:a})=>[_(a.source).tooltip?(b(),F(E,{key:0,content:_(a.source).tooltip,placement:"top","show-after":300},{default:l(()=>[t(D,{type:_(a.source).type,effect:"light"},{default:l(()=>[m(d(_(a.source).label),1)]),_:2},1032,["type"])]),_:2},1032,["content"])):(b(),F(D,{key:1,type:_(a.source).type,effect:"light"},{default:l(()=>[m(d(_(a.source).label),1)]),_:2},1032,["type"]))]),_:1}),t(c,{prop:"user_username",label:"用户",width:"140"}),t(c,{prop:"username",label:"账号",width:"160"}),t(c,{prop:"browse_type",label:"浏览类型",width:"120"}),t(c,{label:"状态",width:"90"},{default:l(({row:a})=>[t(D,{type:I(a.status).type,effect:"light"},{default:l(()=>[m(d(I(a.status).label),1)]),_:2},1032,["type"])]),_:1}),t(c,{label:"内容/附件",width:"110"},{default:l(({row:a})=>[m(d(a.total_items)+" / "+d(a.total_attachments),1)]),_:1}),t(c,{label:"用时",width:"90"},{default:l(({row:a})=>[m(d(Y(a.duration)),1)]),_:1}),t(c,{label:"失败原因","min-width":"220"},{default:l(({row:a})=>[t(E,{content:a.error_message||"",placement:"top","show-after":300},{default:l(()=>[f("span",de,d(a.error_message||"-"),1)]),_:2},1032,["content"])]),_:1})]),_:1},8,["data"])),[[J,s.value]])]),f("div",pe,[t(A,{"current-page":i.value,"onUpdate:currentPage":e[5]||(e[5]=a=>i.value=a),"page-size":B,total:y.value,layout:"prev, pager, next, jumper, ->, total",onCurrentChange:M},null,8,["current-page","total"]),f("div",me,"第 "+d(i.value)+" / "+d($.value)+" 页",1)])]),_:1})])}}},Ve=Q(fe,[["__scopeId","data-v-8803eb08"]]);export{Ve as default}; diff --git a/static/admin/assets/MetricGrid-R-_JZS_i.js b/static/admin/assets/MetricGrid-COFDfeGs.js similarity index 94% rename from static/admin/assets/MetricGrid-R-_JZS_i.js rename to static/admin/assets/MetricGrid-COFDfeGs.js index 01d4e0c..7f1fe6b 100644 --- a/static/admin/assets/MetricGrid-R-_JZS_i.js +++ b/static/admin/assets/MetricGrid-COFDfeGs.js @@ -1 +1 @@ -import{_}from"./index-BMIn4N2u.js";import{aj as c,n as s,q as t,K as r,a3 as u,y as p,t as o,G as l,L as y,E as h,D as i,H as v,J as n,I as k,x as f}from"./vendor-vue-CVxSw_oJ.js";const b={class:"metric-top"},x={key:0,class:"metric-icon"},g={class:"metric-label"},B={class:"metric-value"},C={key:0,class:"metric-hint app-muted"},N={__name:"MetricGrid",props:{items:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1},minWidth:{type:Number,default:180}},setup(a){return(V,D)=>{const d=c("el-icon"),m=c("el-skeleton");return t(),s("div",{class:"metric-grid",style:f({"--metric-min":`${a.minWidth}px`})},[(t(!0),s(r,null,u(a.items,e=>(t(),s("div",{key:e?.key||e?.label,class:p(["metric-card",`metric-tone--${e?.tone||"blue"}`])},[o("div",b,[e?.icon?(t(),s("div",x,[y(d,null,{default:h(()=>[(t(),i(v(e.icon)))]),_:2},1024)])):l("",!0),o("div",g,n(e?.label||"-"),1)]),o("div",B,[a.loading?(t(),i(m,{key:0,rows:1,animated:""})):(t(),s(r,{key:1},[k(n(e?.value??0),1)],64))]),e?.hint||e?.sub?(t(),s("div",C,n(e?.hint||e?.sub),1)):l("",!0)],2))),128))],4)}}},w=_(N,[["__scopeId","data-v-00e217d4"]]);export{w as M}; +import{_}from"./index-BwP1dZnj.js";import{aj as c,n as s,q as t,K as r,a3 as u,y as p,t as o,G as l,L as y,E as h,D as i,H as v,J as n,I as k,x as f}from"./vendor-vue-CVxSw_oJ.js";const b={class:"metric-top"},x={key:0,class:"metric-icon"},g={class:"metric-label"},B={class:"metric-value"},C={key:0,class:"metric-hint app-muted"},N={__name:"MetricGrid",props:{items:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1},minWidth:{type:Number,default:180}},setup(a){return(V,D)=>{const d=c("el-icon"),m=c("el-skeleton");return t(),s("div",{class:"metric-grid",style:f({"--metric-min":`${a.minWidth}px`})},[(t(!0),s(r,null,u(a.items,e=>(t(),s("div",{key:e?.key||e?.label,class:p(["metric-card",`metric-tone--${e?.tone||"blue"}`])},[o("div",b,[e?.icon?(t(),s("div",x,[y(d,null,{default:h(()=>[(t(),i(v(e.icon)))]),_:2},1024)])):l("",!0),o("div",g,n(e?.label||"-"),1)]),o("div",B,[a.loading?(t(),i(m,{key:0,rows:1,animated:""})):(t(),s(r,{key:1},[k(n(e?.value??0),1)],64))]),e?.hint||e?.sub?(t(),s("div",C,n(e?.hint||e?.sub),1)):l("",!0)],2))),128))],4)}}},w=_(N,[["__scopeId","data-v-00e217d4"]]);export{w as M}; diff --git a/static/admin/assets/ReportPage-T1JNMZd3.js b/static/admin/assets/ReportPage-mvWNEhXv.js similarity index 98% rename from static/admin/assets/ReportPage-T1JNMZd3.js rename to static/admin/assets/ReportPage-mvWNEhXv.js index 6b4d72e..cdf1fac 100644 --- a/static/admin/assets/ReportPage-T1JNMZd3.js +++ b/static/admin/assets/ReportPage-mvWNEhXv.js @@ -1 +1 @@ -import{f as tl,g as al,h as sl,k as ul,j as ol,n as nl,o as rl}from"./vendor-element-B5S5pUKo.js";import{c as il,a as cl,_ as vl,f as dl}from"./index-BMIn4N2u.js";import{f as _l}from"./email-DX46gPSl.js";import{f as ml,a as pl,b as bl,c as fl,d as hl,e as wl}from"./tasks-DaPM55hg.js";import{f as gl}from"./system-CeJP0y2Z.js";import{M as kl}from"./MetricGrid-R-_JZS_i.js";import{i as de,r as m,c as a,o as yl,O as Sl,aj as R,n as S,q as k,t as s,L as u,G as D,J as d,K as _e,a3 as me,E as w,I as pe,D as ql,y as xl}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-misc-BeoNyvBp.js";import"./vendor-axios-B9ygI19o.js";const $l=il(async()=>{const{data:P}=await cl.get("/browser_pool/stats");return P},4e3);async function Tl(P={}){return $l.run(P)}const Ll={class:"page-stack"},Rl={class:"report-hero"},Ml={class:"hero-head"},Al={class:"hero-main"},Pl={class:"hero-meta app-muted"},Cl={key:0},Nl={key:1,class:"hero-dot"},Il={key:2},Dl={class:"mobile-report"},El={class:"mobile-module-head"},Wl={class:"mobile-module-title"},Ql={class:"mobile-module-desc app-muted"},Vl={class:"mobile-metrics"},zl={class:"mobile-metric-label app-muted"},Bl={class:"mobile-metric-value"},Ol={key:0,class:"module-extra-actions"},Ul={class:"request-dialog-summary app-muted"},Fl={class:"request-dialog-block"},Gl={class:"table-wrap"},jl={class:"request-dialog-block"},Hl={class:"table-wrap"},Zl={class:"request-dialog-summary app-muted"},Yl={class:"request-dialog-block"},Jl={class:"table-wrap"},Kl={class:"request-dialog-block"},Xl={class:"table-wrap"},et=3,lt=5e3,tt=2e4,at={__name:"ReportPage",setup(P){const be=de("refreshStats",null),fe=de("adminStats",null),E=m(!1),W=m(!1),T=m(""),Q=m(null),b=m(null),p=m(null),y=m(null),g=m(null),C=m(null),L=m(null),f=m(null),v=m(null),r=m(null),V=m(!1),z=m(!1);m("running");function he(){try{T.value=new Date().toLocaleString("zh-CN",{hour12:!1,timeZone:"Asia/Shanghai"})}catch{T.value=""}}function l(t){const e=Number(t);return Number.isFinite(e)?e:0}function we(t){const e=String(t??"").trim();if(!e)return 0;const o=e.endsWith("%")?e.slice(0,-1):e,_=Number(o);return!Number.isFinite(_)||_<0?0:_>1e3?1e3:_}function B(t){return`${Math.round(we(t))}%`}function c(t){const e=Number(t);return!Number.isFinite(e)||e<0?"-":e>=100?`${Math.round(e)}ms`:`${e.toFixed(1)}ms`}function Z(t){const e=Number(t);if(!Number.isFinite(e)||e<=0)return"-";try{return new Date(e*1e3).toLocaleTimeString("zh-CN",{hour12:!1,timeZone:"Asia/Shanghai"})}catch{return"-"}}function O(t){const e=Number(t);if(!Number.isFinite(e)||e<=0)return"-";try{return new Date(e*1e3).toLocaleString("zh-CN",{hour12:!1,timeZone:"Asia/Shanghai"})}catch{return"-"}}function ge(t){const e=String(t??"").trim();return!e||e==="manual"?"手动":e==="scheduled"?"系统定时":e==="batch"?"批量执行":e==="resumed"?"断点续跑":e.startsWith("user_scheduled:")?"用户定时":e}const Y=a(()=>{const t=fe?.value||{},e=l(b.value?.max_concurrent);return[{label:"总用户数",value:l(t.total_users),icon:tl,tone:"blue"},{label:"今日注册",value:l(t.new_users_today),icon:al,tone:"green"},{label:"近7天注册",value:l(t.new_users_7d),icon:sl,tone:"purple"},{label:"总账号数",value:l(t.total_accounts),icon:ul,tone:"cyan"},{label:"VIP用户",value:l(t.vip_users),icon:ol,tone:"orange"},{label:"运行中任务",value:l(b.value?.running_count),icon:nl,tone:"green",sub:e?`并发上限 ${e}`:""},{label:"排队任务",value:l(b.value?.queuing_count),icon:rl,tone:"purple"}]}),h=a(()=>Q.value?.today||{}),q=a(()=>Q.value?.total||{});a(()=>b.value?.running||[]);const N=a(()=>b.value?.queuing||[]),ke=a(()=>l(b.value?.running_count)),ye=a(()=>l(b.value?.queuing_count)),Se=a(()=>{const t=L.value?.workers;return Array.isArray(t)?[...t].sort((e,o)=>l(e?.worker_id)-l(o?.worker_id)):[]}),J=a(()=>l(L.value?.total_workers)),U=a(()=>Se.value.filter(t=>!!t?.has_browser).length),K=a(()=>l(L.value?.idle_workers)),X=a(()=>l(L.value?.queue_size)),F=a(()=>l(L.value?.active_workers)),ee=a(()=>{const t=l(h.value.success_tasks),e=l(h.value.failed_tasks),o=t+e;return o>0?Math.round(t/o*1e3)/10:0}),G=a(()=>l(p.value?.success_rate));a(()=>[{label:"总任务",value:l(h.value.total_tasks),tone:"blue"},{label:"成功",value:l(h.value.success_tasks),tone:"green"},{label:"失败",value:l(h.value.failed_tasks),tone:"red"},{label:"浏览内容",value:l(h.value.total_items),tone:"purple"},{label:"查看附件",value:l(h.value.total_attachments),tone:"cyan"}]),a(()=>[{label:"总任务",value:l(q.value.total_tasks),tone:"blue"},{label:"成功",value:l(q.value.success_tasks),tone:"green"},{label:"失败",value:l(q.value.failed_tasks),tone:"red"},{label:"浏览内容",value:l(q.value.total_items),tone:"purple"},{label:"查看附件",value:l(q.value.total_attachments),tone:"cyan"}]),a(()=>[{label:"总发送",value:l(p.value?.total_sent),tone:"blue"},{label:"成功",value:l(p.value?.total_success),tone:"green"},{label:"失败",value:l(p.value?.total_failed),tone:"red"},{label:"成功率",value:`${G.value}%`,tone:"purple"}]),a(()=>[{label:"注册验证",value:l(p.value?.register_sent),tone:"cyan"},{label:"密码重置",value:l(p.value?.reset_sent),tone:"orange"},{label:"邮箱绑定",value:l(p.value?.bind_sent),tone:"purple"},{label:"任务完成",value:l(p.value?.task_complete_sent),tone:"green"}]),a(()=>[{label:"总反馈",value:l(y.value?.total),tone:"blue"},{label:"待处理",value:l(y.value?.pending),tone:"orange"},{label:"已回复",value:l(y.value?.replied),tone:"green"}]),a(()=>[{label:"总 Worker",value:J.value,tone:"blue"},{label:"活跃 Worker",value:U.value,tone:"green"},{label:"空闲 Worker",value:K.value,tone:"cyan"},{label:"忙碌 Worker",value:F.value,tone:"orange"},{label:"队列",value:X.value,tone:"purple"}]);const qe=a(()=>(f.value?.schedule_enabled??0)===1),xe=a(()=>f.value?.schedule_time||"-"),$e=a(()=>f.value?.schedule_browse_type||"-"),Te=a(()=>String(f.value?.schedule_weekdays||"").trim());a(()=>{const t=Te.value;if(!t)return"";const e={1:"周一",2:"周二",3:"周三",4:"周四",5:"周五",6:"周六",7:"周日"},o=t.split(",").map(_=>_.trim()).filter(Boolean);return o.length?o.map(_=>e[Number(_)]||_).join("、"):t});const Le=a(()=>(f.value?.proxy_enabled??0)===1);a(()=>f.value?.proxy_api_url||"");const le=a(()=>l(f.value?.proxy_expire_minutes)),j=a(()=>l(f.value?.max_concurrent_global)),Re=a(()=>l(f.value?.max_concurrent_per_account)),Me=a(()=>l(f.value?.max_screenshot_concurrent)),Ae=a(()=>{const t=l(b.value?.running_count),e=l(b.value?.queuing_count),o=l(b.value?.max_concurrent);return`运行中 ${t} / 排队 ${e} / 并发上限 ${o||j.value||"-"}`}),Pe=a(()=>Y.value.map(t=>({label:t.label,value:t.sub?`${t.value}(${t.sub})`:t.value}))),Ce=a(()=>[{label:"今日总任务",value:l(h.value.total_tasks)},{label:"今日成功",value:l(h.value.success_tasks)},{label:"今日失败",value:l(h.value.failed_tasks)},{label:"今日成功率",value:`${ee.value}%`},{label:"累计任务",value:l(q.value.total_tasks)},{label:"累计成功",value:l(q.value.success_tasks)}]),Ne=a(()=>[{label:"运行中",value:ke.value},{label:"排队中",value:ye.value},{label:"并发上限",value:l(b.value?.max_concurrent)||j.value||"-"},{label:"排队首条来源",value:ge(N.value[0]?.source)},{label:"排队首条状态",value:N.value[0]?.detail_status||N.value[0]?.status||"-"},{label:"最长等待",value:N.value[0]?.elapsed_display||"-"}]),Ie=a(()=>[{label:"总发送",value:l(p.value?.total_sent)},{label:"成功",value:l(p.value?.total_success)},{label:"失败",value:l(p.value?.total_failed)},{label:"成功率",value:`${G.value}%`},{label:"注册验证",value:l(p.value?.register_sent)},{label:"重置密码",value:l(p.value?.reset_sent)}]),De=a(()=>[{label:"总反馈",value:l(y.value?.total)},{label:"待处理",value:l(y.value?.pending)},{label:"已回复",value:l(y.value?.replied)}]),Ee=a(()=>[{label:"CPU",value:B(g.value?.cpu_percent)},{label:"内存",value:B(g.value?.memory_percent)},{label:"磁盘",value:B(g.value?.disk_percent)},{label:"容器状态",value:C.value?.status||"-"},{label:"容器名",value:C.value?.container_name||"-"},{label:"容器运行",value:C.value?.uptime||"-"}]),We=a(()=>[{label:"总 Worker",value:J.value},{label:"活跃 Worker",value:U.value},{label:"忙碌 Worker",value:F.value},{label:"空闲 Worker",value:K.value},{label:"任务队列",value:X.value}]),Qe=a(()=>{const t=v.value?.top_paths;return Array.isArray(t)?t.slice(0,3):[]}),Ve=a(()=>{const t=[{label:"总请求",value:l(v.value?.total_requests)},{label:"API请求",value:l(v.value?.api_requests)},{label:"慢请求",value:l(v.value?.slow_requests)},{label:"错误请求",value:l(v.value?.error_requests)}];return Qe.value.forEach((e,o)=>{const _=String(e?.path||"-");t.push({label:`慢接口${o+1}`,value:`${_} · 峰值 ${c(e?.max_ms)}`})}),t}),ze=a(()=>{const t=c(v.value?.avg_duration_ms),e=c(v.value?.max_duration_ms),o=Z(v.value?.last_request_ts),_=c(v.value?.slow_threshold_ms);return`均值 ${t} · 峰值 ${e} · 慢阈 ${_} · 最近 ${o}`}),Be=a(()=>(Array.isArray(r.value?.top_sql)?r.value.top_sql:[]).slice(0,3)),te=a(()=>{const t=l(r.value?.window_seconds);return t<=0?24:Math.max(1,Math.round(t/3600))}),Oe=a(()=>{const t=[{label:`慢SQL(${te.value}h)`,value:l(r.value?.total_slow_queries)},{label:"去重SQL",value:l(r.value?.unique_sql)},{label:"平均耗时",value:c(r.value?.avg_duration_ms)},{label:"峰值耗时",value:c(r.value?.max_duration_ms)}];return Be.value.forEach((e,o)=>{t.push({label:`慢SQL${o+1}`,value:`${c(e?.max_ms)} · ${String(e?.sql||"-")}`})}),t}),Ue=a(()=>{const t=c(r.value?.slow_threshold_ms),e=Z(r.value?.last_slow_ts);return`窗口 ${te.value}h · 慢阈 ${t} · 最近 ${e}`}),Fe=a(()=>(Array.isArray(r.value?.top_sql)?r.value.top_sql:[]).map((e,o)=>({rank:o+1,sql:String(e?.sql||"-"),count:l(e?.count),avg_ms:c(e?.avg_ms),max_ms:c(e?.max_ms),last_seen:O(e?.last_ts),sample_params:String(e?.sample_params||"-")}))),Ge=a(()=>[...Array.isArray(r.value?.recent_slow_sql)?r.value.recent_slow_sql:[]].sort((e,o)=>Number(o?.time||0)-Number(e?.time||0)).map(e=>({time_text:O(e?.time),sql:String(e?.sql||"-"),duration_ms:c(e?.duration_ms),params:String(e?.params||"-")}))),je=a(()=>(Array.isArray(v.value?.top_paths)?v.value.top_paths:[]).map((e,o)=>({rank:o+1,path:String(e?.path||"-"),count:l(e?.count),avg_ms:c(e?.avg_ms),max_ms:c(e?.max_ms),status_5xx:l(e?.status_5xx)}))),He=a(()=>[...Array.isArray(v.value?.recent_slow)?v.value.recent_slow:[]].sort((e,o)=>Number(o?.time||0)-Number(e?.time||0)).map(e=>({time_text:O(e?.time),method:String(e?.method||"-").toUpperCase(),path:String(e?.path||"-"),status:l(e?.status),duration_ms:c(e?.duration_ms)})));function Ze(t){const e=l(t);return e>=500?"danger":e>=400?"warning":e>=300?"info":"success"}function Ye(){V.value=!0}function Je(){z.value=!0}const ae=a(()=>{const t=r.value?.slow_threshold_ms;if(t!=null)return c(t);const e=f.value?.db_slow_query_ms;return e!=null?c(e):"-"}),Ke=a(()=>[{label:"定时任务",value:qe.value?"启用":"关闭"},{label:"执行时间",value:xe.value||"-"},{label:"浏览类型",value:$e.value||"-"},{label:"代理",value:Le.value?"启用":"关闭"},{label:"代理有效期",value:le.value?`${le.value} 分钟`:"-"},{label:"全局并发",value:j.value||"-"},{label:"单账号并发",value:Re.value||"-"},{label:"截图并发",value:Me.value||"-"},{label:"慢SQL阈值",value:ae.value}]),Xe=a(()=>[{key:"overview",title:"平台概览",desc:T.value?`更新 ${T.value}`:"核心指标",tone:"blue",items:Pe.value},{key:"task",title:"任务概览",desc:l(h.value.total_tasks)>0?`今日成功率 ${ee.value}%`:"今日暂无任务",tone:"purple",items:Ce.value},{key:"queue",title:"队列监控",desc:Ae.value,tone:"blue",items:Ne.value},{key:"email",title:"邮件报表",desc:`成功率 ${G.value}%`,tone:"cyan",items:Ie.value},{key:"feedback",title:"反馈概览",desc:`待处理 ${l(y.value?.pending)} 条`,tone:"orange",items:De.value},{key:"resource",title:"系统资源",desc:g.value?.uptime?`运行 ${g.value.uptime}`:"运行状态获取中",tone:"green",items:Ee.value},{key:"request",title:"接口性能",desc:ze.value,tone:"purple",items:Ve.value},{key:"slow_sql",title:"慢SQL监控",desc:Ue.value,tone:"red",items:Oe.value},{key:"worker",title:"截图线程池",desc:`活跃 ${U.value} · 忙碌 ${F.value}`,tone:"cyan",items:We.value},{key:"config",title:"配置概览",desc:"并发 / 代理 / 定时任务",tone:"red",items:Ke.value}]);let se=1;async function ue(t={}){const e=t.showLoading??!0;if(W.value)return;const o=!!t.forceStatsSync,_=o||se%et===0;se+=1,W.value=!0,e&&(E.value=!0);try{const[n,x,I,A,i,$,re,ie,ce,ve]=await Promise.allSettled([ml(),pl(),_l(),dl(),bl(),fl(),Tl(),hl(),wl(),gl()]);n.status==="fulfilled"&&(Q.value=n.value),x.status==="fulfilled"&&(b.value=x.value),I.status==="fulfilled"&&(p.value=I.value),A.status==="fulfilled"&&(y.value=A.value),i.status==="fulfilled"&&(g.value=i.value),$.status==="fulfilled"&&(C.value=$.value),re.status==="fulfilled"&&(L.value=re.value),ie.status==="fulfilled"&&(v.value=ie.value),ce.status==="fulfilled"&&(r.value=ce.value),ve.status==="fulfilled"&&(f.value=ve.value),_&&await be?.({force:o}),he()}finally{W.value=!1,e&&(E.value=!1)}}let M=null;function el(){return typeof document>"u"?!1:document.visibilityState==="hidden"}function ll(){return el()?tt:lt}function oe(){M&&(clearTimeout(M),M=null)}function H(){oe(),M=window.setTimeout(async()=>{M=null,await ue({showLoading:!1}).catch(()=>{}),H()},ll())}function ne(){H()}return yl(()=>{ue({showLoading:!1}).catch(()=>{}).finally(()=>{H()}),window.addEventListener("visibilitychange",ne)}),Sl(()=>{oe(),window.removeEventListener("visibilitychange",ne)}),(t,e)=>{const o=R("el-button"),_=R("el-card"),n=R("el-table-column"),x=R("el-table"),I=R("el-tag"),A=R("el-dialog");return k(),S("div",Ll,[s("section",Rl,[s("div",Ml,[s("div",Al,[e[3]||(e[3]=s("h2",null,"报表中心",-1)),s("div",Pl,[T.value?(k(),S("span",Cl,"更新时间:"+d(T.value),1)):D("",!0),e[2]||(e[2]=s("span",{class:"hero-dot"},"·",-1)),s("span",null,"慢SQL阈值 "+d(ae.value),1),g.value?.uptime?(k(),S("span",Nl,"·")):D("",!0),g.value?.uptime?(k(),S("span",Il,"运行 "+d(g.value.uptime),1)):D("",!0)])])]),u(kl,{class:"hero-overview-grid",items:Y.value,loading:E.value,"min-width":165},null,8,["items","loading"])]),s("section",Dl,[(k(!0),S(_e,null,me(Xe.value,i=>(k(),ql(_,{key:i.key,shadow:"never",class:xl(["mobile-module-card",`mobile-tone-${i.tone}`]),"body-style":{padding:"12px"}},{default:w(()=>[s("div",El,[s("div",Wl,d(i.title),1),s("div",Ql,d(i.desc),1)]),s("div",Vl,[(k(!0),S(_e,null,me(i.items,$=>(k(),S("div",{key:`${i.key}-${$.label}`,class:"mobile-metric-item"},[s("div",zl,d($.label),1),s("div",Bl,d($.value),1)]))),128))]),i.key==="request"||i.key==="slow_sql"?(k(),S("div",Ol,[u(o,{size:"small",type:"primary",plain:"",onClick:$=>i.key==="request"?Ye():Je()},{default:w(()=>[pe(d(i.key==="request"?"查看慢接口详情":"查看慢SQL详情"),1)]),_:2},1032,["onClick"])])):D("",!0)]),_:2},1032,["class"]))),128))]),u(A,{modelValue:V.value,"onUpdate:modelValue":e[0]||(e[0]=i=>V.value=i),title:"慢接口详情",width:"min(1080px, 96vw)"},{default:w(()=>[s("div",Ul,[s("span",null,"总请求:"+d(l(v.value?.total_requests)),1),s("span",null,"API请求:"+d(l(v.value?.api_requests)),1),s("span",null,"慢请求:"+d(l(v.value?.slow_requests)),1),s("span",null,"错误请求:"+d(l(v.value?.error_requests)),1)]),s("div",Fl,[e[4]||(e[4]=s("div",{class:"request-dialog-title"},"慢接口排行榜",-1)),s("div",Gl,[u(x,{data:je.value,size:"small","max-height":"280"},{default:w(()=>[u(n,{prop:"rank",label:"#",width:"60"}),u(n,{prop:"path",label:"接口路径","min-width":"340","show-overflow-tooltip":""}),u(n,{prop:"count",label:"请求数",width:"100"}),u(n,{prop:"avg_ms",label:"平均耗时",width:"120"}),u(n,{prop:"max_ms",label:"峰值耗时",width:"120"}),u(n,{prop:"status_5xx",label:"5xx",width:"90"})]),_:1},8,["data"])])]),s("div",jl,[e[5]||(e[5]=s("div",{class:"request-dialog-title"},"最近慢请求",-1)),s("div",Hl,[u(x,{data:He.value,size:"small","max-height":"320"},{default:w(()=>[u(n,{prop:"time_text",label:"时间",width:"180"}),u(n,{prop:"method",label:"方法",width:"90"}),u(n,{prop:"path",label:"接口路径","min-width":"320","show-overflow-tooltip":""}),u(n,{label:"状态",width:"100"},{default:w(i=>[u(I,{size:"small",type:Ze(i.row.status)},{default:w(()=>[pe(d(i.row.status||"-"),1)]),_:2},1032,["type"])]),_:1}),u(n,{prop:"duration_ms",label:"耗时",width:"110"})]),_:1},8,["data"])])])]),_:1},8,["modelValue"]),u(A,{modelValue:z.value,"onUpdate:modelValue":e[1]||(e[1]=i=>z.value=i),title:"慢SQL详情(近24小时)",width:"min(1080px, 96vw)"},{default:w(()=>[s("div",Zl,[s("span",null,"慢SQL总数:"+d(l(r.value?.total_slow_queries)),1),s("span",null,"去重SQL:"+d(l(r.value?.unique_sql)),1),s("span",null,"平均耗时:"+d(c(r.value?.avg_duration_ms)),1),s("span",null,"峰值耗时:"+d(c(r.value?.max_duration_ms)),1),s("span",null,"慢阈值:"+d(c(r.value?.slow_threshold_ms)),1)]),s("div",Yl,[e[6]||(e[6]=s("div",{class:"request-dialog-title"},"TOP 慢SQL(按出现次数)",-1)),s("div",Jl,[u(x,{data:Fe.value,size:"small","max-height":"320"},{default:w(()=>[u(n,{prop:"rank",label:"#",width:"60"}),u(n,{prop:"sql",label:"SQL","min-width":"400","show-overflow-tooltip":""}),u(n,{prop:"count",label:"次数",width:"90"}),u(n,{prop:"avg_ms",label:"平均耗时",width:"120"}),u(n,{prop:"max_ms",label:"峰值耗时",width:"120"}),u(n,{prop:"last_seen",label:"最近出现",width:"180"}),u(n,{prop:"sample_params",label:"参数样本","min-width":"140","show-overflow-tooltip":""})]),_:1},8,["data"])])]),s("div",Kl,[e[7]||(e[7]=s("div",{class:"request-dialog-title"},"最近慢SQL",-1)),s("div",Xl,[u(x,{data:Ge.value,size:"small","max-height":"320"},{default:w(()=>[u(n,{prop:"time_text",label:"时间",width:"180"}),u(n,{prop:"sql",label:"SQL","min-width":"420","show-overflow-tooltip":""}),u(n,{prop:"duration_ms",label:"耗时",width:"110"}),u(n,{prop:"params",label:"参数","min-width":"130","show-overflow-tooltip":""})]),_:1},8,["data"])])])]),_:1},8,["modelValue"])])}}},_t=vl(at,[["__scopeId","data-v-d610e788"]]);export{_t as default}; +import{f as tl,g as al,h as sl,k as ul,j as ol,n as nl,o as rl}from"./vendor-element-B5S5pUKo.js";import{c as il,a as cl,_ as vl,f as dl}from"./index-BwP1dZnj.js";import{f as _l}from"./email-BoZeA2tF.js";import{f as ml,a as pl,b as bl,c as fl,d as hl,e as wl}from"./tasks-D5YLLzN-.js";import{f as gl}from"./system-Dluvi0rE.js";import{M as kl}from"./MetricGrid-COFDfeGs.js";import{i as de,r as m,c as a,o as yl,O as Sl,aj as R,n as S,q as k,t as s,L as u,G as D,J as d,K as _e,a3 as me,E as w,I as pe,D as ql,y as xl}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-misc-BeoNyvBp.js";import"./vendor-axios-B9ygI19o.js";const $l=il(async()=>{const{data:P}=await cl.get("/browser_pool/stats");return P},4e3);async function Tl(P={}){return $l.run(P)}const Ll={class:"page-stack"},Rl={class:"report-hero"},Ml={class:"hero-head"},Al={class:"hero-main"},Pl={class:"hero-meta app-muted"},Cl={key:0},Nl={key:1,class:"hero-dot"},Il={key:2},Dl={class:"mobile-report"},El={class:"mobile-module-head"},Wl={class:"mobile-module-title"},Ql={class:"mobile-module-desc app-muted"},Vl={class:"mobile-metrics"},zl={class:"mobile-metric-label app-muted"},Bl={class:"mobile-metric-value"},Ol={key:0,class:"module-extra-actions"},Ul={class:"request-dialog-summary app-muted"},Fl={class:"request-dialog-block"},Gl={class:"table-wrap"},jl={class:"request-dialog-block"},Hl={class:"table-wrap"},Zl={class:"request-dialog-summary app-muted"},Yl={class:"request-dialog-block"},Jl={class:"table-wrap"},Kl={class:"request-dialog-block"},Xl={class:"table-wrap"},et=3,lt=5e3,tt=2e4,at={__name:"ReportPage",setup(P){const be=de("refreshStats",null),fe=de("adminStats",null),E=m(!1),W=m(!1),T=m(""),Q=m(null),b=m(null),p=m(null),y=m(null),g=m(null),C=m(null),L=m(null),f=m(null),v=m(null),r=m(null),V=m(!1),z=m(!1);m("running");function he(){try{T.value=new Date().toLocaleString("zh-CN",{hour12:!1,timeZone:"Asia/Shanghai"})}catch{T.value=""}}function l(t){const e=Number(t);return Number.isFinite(e)?e:0}function we(t){const e=String(t??"").trim();if(!e)return 0;const o=e.endsWith("%")?e.slice(0,-1):e,_=Number(o);return!Number.isFinite(_)||_<0?0:_>1e3?1e3:_}function B(t){return`${Math.round(we(t))}%`}function c(t){const e=Number(t);return!Number.isFinite(e)||e<0?"-":e>=100?`${Math.round(e)}ms`:`${e.toFixed(1)}ms`}function Z(t){const e=Number(t);if(!Number.isFinite(e)||e<=0)return"-";try{return new Date(e*1e3).toLocaleTimeString("zh-CN",{hour12:!1,timeZone:"Asia/Shanghai"})}catch{return"-"}}function O(t){const e=Number(t);if(!Number.isFinite(e)||e<=0)return"-";try{return new Date(e*1e3).toLocaleString("zh-CN",{hour12:!1,timeZone:"Asia/Shanghai"})}catch{return"-"}}function ge(t){const e=String(t??"").trim();return!e||e==="manual"?"手动":e==="scheduled"?"系统定时":e==="batch"?"批量执行":e==="resumed"?"断点续跑":e.startsWith("user_scheduled:")?"用户定时":e}const Y=a(()=>{const t=fe?.value||{},e=l(b.value?.max_concurrent);return[{label:"总用户数",value:l(t.total_users),icon:tl,tone:"blue"},{label:"今日注册",value:l(t.new_users_today),icon:al,tone:"green"},{label:"近7天注册",value:l(t.new_users_7d),icon:sl,tone:"purple"},{label:"总账号数",value:l(t.total_accounts),icon:ul,tone:"cyan"},{label:"VIP用户",value:l(t.vip_users),icon:ol,tone:"orange"},{label:"运行中任务",value:l(b.value?.running_count),icon:nl,tone:"green",sub:e?`并发上限 ${e}`:""},{label:"排队任务",value:l(b.value?.queuing_count),icon:rl,tone:"purple"}]}),h=a(()=>Q.value?.today||{}),q=a(()=>Q.value?.total||{});a(()=>b.value?.running||[]);const N=a(()=>b.value?.queuing||[]),ke=a(()=>l(b.value?.running_count)),ye=a(()=>l(b.value?.queuing_count)),Se=a(()=>{const t=L.value?.workers;return Array.isArray(t)?[...t].sort((e,o)=>l(e?.worker_id)-l(o?.worker_id)):[]}),J=a(()=>l(L.value?.total_workers)),U=a(()=>Se.value.filter(t=>!!t?.has_browser).length),K=a(()=>l(L.value?.idle_workers)),X=a(()=>l(L.value?.queue_size)),F=a(()=>l(L.value?.active_workers)),ee=a(()=>{const t=l(h.value.success_tasks),e=l(h.value.failed_tasks),o=t+e;return o>0?Math.round(t/o*1e3)/10:0}),G=a(()=>l(p.value?.success_rate));a(()=>[{label:"总任务",value:l(h.value.total_tasks),tone:"blue"},{label:"成功",value:l(h.value.success_tasks),tone:"green"},{label:"失败",value:l(h.value.failed_tasks),tone:"red"},{label:"浏览内容",value:l(h.value.total_items),tone:"purple"},{label:"查看附件",value:l(h.value.total_attachments),tone:"cyan"}]),a(()=>[{label:"总任务",value:l(q.value.total_tasks),tone:"blue"},{label:"成功",value:l(q.value.success_tasks),tone:"green"},{label:"失败",value:l(q.value.failed_tasks),tone:"red"},{label:"浏览内容",value:l(q.value.total_items),tone:"purple"},{label:"查看附件",value:l(q.value.total_attachments),tone:"cyan"}]),a(()=>[{label:"总发送",value:l(p.value?.total_sent),tone:"blue"},{label:"成功",value:l(p.value?.total_success),tone:"green"},{label:"失败",value:l(p.value?.total_failed),tone:"red"},{label:"成功率",value:`${G.value}%`,tone:"purple"}]),a(()=>[{label:"注册验证",value:l(p.value?.register_sent),tone:"cyan"},{label:"密码重置",value:l(p.value?.reset_sent),tone:"orange"},{label:"邮箱绑定",value:l(p.value?.bind_sent),tone:"purple"},{label:"任务完成",value:l(p.value?.task_complete_sent),tone:"green"}]),a(()=>[{label:"总反馈",value:l(y.value?.total),tone:"blue"},{label:"待处理",value:l(y.value?.pending),tone:"orange"},{label:"已回复",value:l(y.value?.replied),tone:"green"}]),a(()=>[{label:"总 Worker",value:J.value,tone:"blue"},{label:"活跃 Worker",value:U.value,tone:"green"},{label:"空闲 Worker",value:K.value,tone:"cyan"},{label:"忙碌 Worker",value:F.value,tone:"orange"},{label:"队列",value:X.value,tone:"purple"}]);const qe=a(()=>(f.value?.schedule_enabled??0)===1),xe=a(()=>f.value?.schedule_time||"-"),$e=a(()=>f.value?.schedule_browse_type||"-"),Te=a(()=>String(f.value?.schedule_weekdays||"").trim());a(()=>{const t=Te.value;if(!t)return"";const e={1:"周一",2:"周二",3:"周三",4:"周四",5:"周五",6:"周六",7:"周日"},o=t.split(",").map(_=>_.trim()).filter(Boolean);return o.length?o.map(_=>e[Number(_)]||_).join("、"):t});const Le=a(()=>(f.value?.proxy_enabled??0)===1);a(()=>f.value?.proxy_api_url||"");const le=a(()=>l(f.value?.proxy_expire_minutes)),j=a(()=>l(f.value?.max_concurrent_global)),Re=a(()=>l(f.value?.max_concurrent_per_account)),Me=a(()=>l(f.value?.max_screenshot_concurrent)),Ae=a(()=>{const t=l(b.value?.running_count),e=l(b.value?.queuing_count),o=l(b.value?.max_concurrent);return`运行中 ${t} / 排队 ${e} / 并发上限 ${o||j.value||"-"}`}),Pe=a(()=>Y.value.map(t=>({label:t.label,value:t.sub?`${t.value}(${t.sub})`:t.value}))),Ce=a(()=>[{label:"今日总任务",value:l(h.value.total_tasks)},{label:"今日成功",value:l(h.value.success_tasks)},{label:"今日失败",value:l(h.value.failed_tasks)},{label:"今日成功率",value:`${ee.value}%`},{label:"累计任务",value:l(q.value.total_tasks)},{label:"累计成功",value:l(q.value.success_tasks)}]),Ne=a(()=>[{label:"运行中",value:ke.value},{label:"排队中",value:ye.value},{label:"并发上限",value:l(b.value?.max_concurrent)||j.value||"-"},{label:"排队首条来源",value:ge(N.value[0]?.source)},{label:"排队首条状态",value:N.value[0]?.detail_status||N.value[0]?.status||"-"},{label:"最长等待",value:N.value[0]?.elapsed_display||"-"}]),Ie=a(()=>[{label:"总发送",value:l(p.value?.total_sent)},{label:"成功",value:l(p.value?.total_success)},{label:"失败",value:l(p.value?.total_failed)},{label:"成功率",value:`${G.value}%`},{label:"注册验证",value:l(p.value?.register_sent)},{label:"重置密码",value:l(p.value?.reset_sent)}]),De=a(()=>[{label:"总反馈",value:l(y.value?.total)},{label:"待处理",value:l(y.value?.pending)},{label:"已回复",value:l(y.value?.replied)}]),Ee=a(()=>[{label:"CPU",value:B(g.value?.cpu_percent)},{label:"内存",value:B(g.value?.memory_percent)},{label:"磁盘",value:B(g.value?.disk_percent)},{label:"容器状态",value:C.value?.status||"-"},{label:"容器名",value:C.value?.container_name||"-"},{label:"容器运行",value:C.value?.uptime||"-"}]),We=a(()=>[{label:"总 Worker",value:J.value},{label:"活跃 Worker",value:U.value},{label:"忙碌 Worker",value:F.value},{label:"空闲 Worker",value:K.value},{label:"任务队列",value:X.value}]),Qe=a(()=>{const t=v.value?.top_paths;return Array.isArray(t)?t.slice(0,3):[]}),Ve=a(()=>{const t=[{label:"总请求",value:l(v.value?.total_requests)},{label:"API请求",value:l(v.value?.api_requests)},{label:"慢请求",value:l(v.value?.slow_requests)},{label:"错误请求",value:l(v.value?.error_requests)}];return Qe.value.forEach((e,o)=>{const _=String(e?.path||"-");t.push({label:`慢接口${o+1}`,value:`${_} · 峰值 ${c(e?.max_ms)}`})}),t}),ze=a(()=>{const t=c(v.value?.avg_duration_ms),e=c(v.value?.max_duration_ms),o=Z(v.value?.last_request_ts),_=c(v.value?.slow_threshold_ms);return`均值 ${t} · 峰值 ${e} · 慢阈 ${_} · 最近 ${o}`}),Be=a(()=>(Array.isArray(r.value?.top_sql)?r.value.top_sql:[]).slice(0,3)),te=a(()=>{const t=l(r.value?.window_seconds);return t<=0?24:Math.max(1,Math.round(t/3600))}),Oe=a(()=>{const t=[{label:`慢SQL(${te.value}h)`,value:l(r.value?.total_slow_queries)},{label:"去重SQL",value:l(r.value?.unique_sql)},{label:"平均耗时",value:c(r.value?.avg_duration_ms)},{label:"峰值耗时",value:c(r.value?.max_duration_ms)}];return Be.value.forEach((e,o)=>{t.push({label:`慢SQL${o+1}`,value:`${c(e?.max_ms)} · ${String(e?.sql||"-")}`})}),t}),Ue=a(()=>{const t=c(r.value?.slow_threshold_ms),e=Z(r.value?.last_slow_ts);return`窗口 ${te.value}h · 慢阈 ${t} · 最近 ${e}`}),Fe=a(()=>(Array.isArray(r.value?.top_sql)?r.value.top_sql:[]).map((e,o)=>({rank:o+1,sql:String(e?.sql||"-"),count:l(e?.count),avg_ms:c(e?.avg_ms),max_ms:c(e?.max_ms),last_seen:O(e?.last_ts),sample_params:String(e?.sample_params||"-")}))),Ge=a(()=>[...Array.isArray(r.value?.recent_slow_sql)?r.value.recent_slow_sql:[]].sort((e,o)=>Number(o?.time||0)-Number(e?.time||0)).map(e=>({time_text:O(e?.time),sql:String(e?.sql||"-"),duration_ms:c(e?.duration_ms),params:String(e?.params||"-")}))),je=a(()=>(Array.isArray(v.value?.top_paths)?v.value.top_paths:[]).map((e,o)=>({rank:o+1,path:String(e?.path||"-"),count:l(e?.count),avg_ms:c(e?.avg_ms),max_ms:c(e?.max_ms),status_5xx:l(e?.status_5xx)}))),He=a(()=>[...Array.isArray(v.value?.recent_slow)?v.value.recent_slow:[]].sort((e,o)=>Number(o?.time||0)-Number(e?.time||0)).map(e=>({time_text:O(e?.time),method:String(e?.method||"-").toUpperCase(),path:String(e?.path||"-"),status:l(e?.status),duration_ms:c(e?.duration_ms)})));function Ze(t){const e=l(t);return e>=500?"danger":e>=400?"warning":e>=300?"info":"success"}function Ye(){V.value=!0}function Je(){z.value=!0}const ae=a(()=>{const t=r.value?.slow_threshold_ms;if(t!=null)return c(t);const e=f.value?.db_slow_query_ms;return e!=null?c(e):"-"}),Ke=a(()=>[{label:"定时任务",value:qe.value?"启用":"关闭"},{label:"执行时间",value:xe.value||"-"},{label:"浏览类型",value:$e.value||"-"},{label:"代理",value:Le.value?"启用":"关闭"},{label:"代理有效期",value:le.value?`${le.value} 分钟`:"-"},{label:"全局并发",value:j.value||"-"},{label:"单账号并发",value:Re.value||"-"},{label:"截图并发",value:Me.value||"-"},{label:"慢SQL阈值",value:ae.value}]),Xe=a(()=>[{key:"overview",title:"平台概览",desc:T.value?`更新 ${T.value}`:"核心指标",tone:"blue",items:Pe.value},{key:"task",title:"任务概览",desc:l(h.value.total_tasks)>0?`今日成功率 ${ee.value}%`:"今日暂无任务",tone:"purple",items:Ce.value},{key:"queue",title:"队列监控",desc:Ae.value,tone:"blue",items:Ne.value},{key:"email",title:"邮件报表",desc:`成功率 ${G.value}%`,tone:"cyan",items:Ie.value},{key:"feedback",title:"反馈概览",desc:`待处理 ${l(y.value?.pending)} 条`,tone:"orange",items:De.value},{key:"resource",title:"系统资源",desc:g.value?.uptime?`运行 ${g.value.uptime}`:"运行状态获取中",tone:"green",items:Ee.value},{key:"request",title:"接口性能",desc:ze.value,tone:"purple",items:Ve.value},{key:"slow_sql",title:"慢SQL监控",desc:Ue.value,tone:"red",items:Oe.value},{key:"worker",title:"截图线程池",desc:`活跃 ${U.value} · 忙碌 ${F.value}`,tone:"cyan",items:We.value},{key:"config",title:"配置概览",desc:"并发 / 代理 / 定时任务",tone:"red",items:Ke.value}]);let se=1;async function ue(t={}){const e=t.showLoading??!0;if(W.value)return;const o=!!t.forceStatsSync,_=o||se%et===0;se+=1,W.value=!0,e&&(E.value=!0);try{const[n,x,I,A,i,$,re,ie,ce,ve]=await Promise.allSettled([ml(),pl(),_l(),dl(),bl(),fl(),Tl(),hl(),wl(),gl()]);n.status==="fulfilled"&&(Q.value=n.value),x.status==="fulfilled"&&(b.value=x.value),I.status==="fulfilled"&&(p.value=I.value),A.status==="fulfilled"&&(y.value=A.value),i.status==="fulfilled"&&(g.value=i.value),$.status==="fulfilled"&&(C.value=$.value),re.status==="fulfilled"&&(L.value=re.value),ie.status==="fulfilled"&&(v.value=ie.value),ce.status==="fulfilled"&&(r.value=ce.value),ve.status==="fulfilled"&&(f.value=ve.value),_&&await be?.({force:o}),he()}finally{W.value=!1,e&&(E.value=!1)}}let M=null;function el(){return typeof document>"u"?!1:document.visibilityState==="hidden"}function ll(){return el()?tt:lt}function oe(){M&&(clearTimeout(M),M=null)}function H(){oe(),M=window.setTimeout(async()=>{M=null,await ue({showLoading:!1}).catch(()=>{}),H()},ll())}function ne(){H()}return yl(()=>{ue({showLoading:!1}).catch(()=>{}).finally(()=>{H()}),window.addEventListener("visibilitychange",ne)}),Sl(()=>{oe(),window.removeEventListener("visibilitychange",ne)}),(t,e)=>{const o=R("el-button"),_=R("el-card"),n=R("el-table-column"),x=R("el-table"),I=R("el-tag"),A=R("el-dialog");return k(),S("div",Ll,[s("section",Rl,[s("div",Ml,[s("div",Al,[e[3]||(e[3]=s("h2",null,"报表中心",-1)),s("div",Pl,[T.value?(k(),S("span",Cl,"更新时间:"+d(T.value),1)):D("",!0),e[2]||(e[2]=s("span",{class:"hero-dot"},"·",-1)),s("span",null,"慢SQL阈值 "+d(ae.value),1),g.value?.uptime?(k(),S("span",Nl,"·")):D("",!0),g.value?.uptime?(k(),S("span",Il,"运行 "+d(g.value.uptime),1)):D("",!0)])])]),u(kl,{class:"hero-overview-grid",items:Y.value,loading:E.value,"min-width":165},null,8,["items","loading"])]),s("section",Dl,[(k(!0),S(_e,null,me(Xe.value,i=>(k(),ql(_,{key:i.key,shadow:"never",class:xl(["mobile-module-card",`mobile-tone-${i.tone}`]),"body-style":{padding:"12px"}},{default:w(()=>[s("div",El,[s("div",Wl,d(i.title),1),s("div",Ql,d(i.desc),1)]),s("div",Vl,[(k(!0),S(_e,null,me(i.items,$=>(k(),S("div",{key:`${i.key}-${$.label}`,class:"mobile-metric-item"},[s("div",zl,d($.label),1),s("div",Bl,d($.value),1)]))),128))]),i.key==="request"||i.key==="slow_sql"?(k(),S("div",Ol,[u(o,{size:"small",type:"primary",plain:"",onClick:$=>i.key==="request"?Ye():Je()},{default:w(()=>[pe(d(i.key==="request"?"查看慢接口详情":"查看慢SQL详情"),1)]),_:2},1032,["onClick"])])):D("",!0)]),_:2},1032,["class"]))),128))]),u(A,{modelValue:V.value,"onUpdate:modelValue":e[0]||(e[0]=i=>V.value=i),title:"慢接口详情",width:"min(1080px, 96vw)"},{default:w(()=>[s("div",Ul,[s("span",null,"总请求:"+d(l(v.value?.total_requests)),1),s("span",null,"API请求:"+d(l(v.value?.api_requests)),1),s("span",null,"慢请求:"+d(l(v.value?.slow_requests)),1),s("span",null,"错误请求:"+d(l(v.value?.error_requests)),1)]),s("div",Fl,[e[4]||(e[4]=s("div",{class:"request-dialog-title"},"慢接口排行榜",-1)),s("div",Gl,[u(x,{data:je.value,size:"small","max-height":"280"},{default:w(()=>[u(n,{prop:"rank",label:"#",width:"60"}),u(n,{prop:"path",label:"接口路径","min-width":"340","show-overflow-tooltip":""}),u(n,{prop:"count",label:"请求数",width:"100"}),u(n,{prop:"avg_ms",label:"平均耗时",width:"120"}),u(n,{prop:"max_ms",label:"峰值耗时",width:"120"}),u(n,{prop:"status_5xx",label:"5xx",width:"90"})]),_:1},8,["data"])])]),s("div",jl,[e[5]||(e[5]=s("div",{class:"request-dialog-title"},"最近慢请求",-1)),s("div",Hl,[u(x,{data:He.value,size:"small","max-height":"320"},{default:w(()=>[u(n,{prop:"time_text",label:"时间",width:"180"}),u(n,{prop:"method",label:"方法",width:"90"}),u(n,{prop:"path",label:"接口路径","min-width":"320","show-overflow-tooltip":""}),u(n,{label:"状态",width:"100"},{default:w(i=>[u(I,{size:"small",type:Ze(i.row.status)},{default:w(()=>[pe(d(i.row.status||"-"),1)]),_:2},1032,["type"])]),_:1}),u(n,{prop:"duration_ms",label:"耗时",width:"110"})]),_:1},8,["data"])])])]),_:1},8,["modelValue"]),u(A,{modelValue:z.value,"onUpdate:modelValue":e[1]||(e[1]=i=>z.value=i),title:"慢SQL详情(近24小时)",width:"min(1080px, 96vw)"},{default:w(()=>[s("div",Zl,[s("span",null,"慢SQL总数:"+d(l(r.value?.total_slow_queries)),1),s("span",null,"去重SQL:"+d(l(r.value?.unique_sql)),1),s("span",null,"平均耗时:"+d(c(r.value?.avg_duration_ms)),1),s("span",null,"峰值耗时:"+d(c(r.value?.max_duration_ms)),1),s("span",null,"慢阈值:"+d(c(r.value?.slow_threshold_ms)),1)]),s("div",Yl,[e[6]||(e[6]=s("div",{class:"request-dialog-title"},"TOP 慢SQL(按出现次数)",-1)),s("div",Jl,[u(x,{data:Fe.value,size:"small","max-height":"320"},{default:w(()=>[u(n,{prop:"rank",label:"#",width:"60"}),u(n,{prop:"sql",label:"SQL","min-width":"400","show-overflow-tooltip":""}),u(n,{prop:"count",label:"次数",width:"90"}),u(n,{prop:"avg_ms",label:"平均耗时",width:"120"}),u(n,{prop:"max_ms",label:"峰值耗时",width:"120"}),u(n,{prop:"last_seen",label:"最近出现",width:"180"}),u(n,{prop:"sample_params",label:"参数样本","min-width":"140","show-overflow-tooltip":""})]),_:1},8,["data"])])]),s("div",Kl,[e[7]||(e[7]=s("div",{class:"request-dialog-title"},"最近慢SQL",-1)),s("div",Xl,[u(x,{data:Ge.value,size:"small","max-height":"320"},{default:w(()=>[u(n,{prop:"time_text",label:"时间",width:"180"}),u(n,{prop:"sql",label:"SQL","min-width":"420","show-overflow-tooltip":""}),u(n,{prop:"duration_ms",label:"耗时",width:"110"}),u(n,{prop:"params",label:"参数","min-width":"130","show-overflow-tooltip":""})]),_:1},8,["data"])])])]),_:1},8,["modelValue"])])}}},_t=vl(at,[["__scopeId","data-v-d610e788"]]);export{_t as default}; diff --git a/static/admin/assets/SecurityPage-BtFrxpZs.js b/static/admin/assets/SecurityPage-DgYgSgTK.js similarity index 99% rename from static/admin/assets/SecurityPage-BtFrxpZs.js rename to static/admin/assets/SecurityPage-DgYgSgTK.js index 236a396..6e44d4f 100644 --- a/static/admin/assets/SecurityPage-BtFrxpZs.js +++ b/static/admin/assets/SecurityPage-DgYgSgTK.js @@ -1,4 +1,4 @@ -import{a as g,_ as qe}from"./index-BMIn4N2u.js";import{M as Ee}from"./MetricGrid-R-_JZS_i.js";import{E as ee,a as w}from"./vendor-element-B5S5pUKo.js";import{r as d,c as oe,o as ze,aj as v,ap as Ae,n as P,q as c,t as p,L as a,E as l,I as i,K as Ge,a3 as Ke,D as b,F as te,J as f,G as ue}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";async function Oe(){const{data:u}=await g.get("/admin/security/dashboard");return u}async function He(u){const{data:m}=await g.get("/admin/security/threats",{params:u});return m}async function Je(){const{data:u}=await g.get("/admin/security/banned-ips");return u}async function Qe(){const{data:u}=await g.get("/admin/security/banned-users");return u}async function We(u){const{data:m}=await g.post("/admin/security/ban-ip",u);return m}async function Xe(u){const{data:m}=await g.post("/admin/security/unban-ip",{ip:u});return m}async function Ye(u){const{data:m}=await g.post("/admin/security/ban-user",u);return m}async function Ze(u){const{data:m}=await g.post("/admin/security/unban-user",{user_id:u});return m}async function et(u){const m=encodeURIComponent(String(u||"").trim()),{data:V}=await g.get(`/admin/security/ip-risk/${m}`);return V}async function tt(u){const{data:m}=await g.post("/admin/security/ip-risk/clear",{ip:u});return m}async function at(u){const m=encodeURIComponent(String(u||"").trim()),{data:V}=await g.get(`/admin/security/user-risk/${m}`);return V}async function lt(){const{data:u}=await g.post("/admin/security/cleanup",{});return u}const nt={class:"page-stack"},it={class:"app-page-title"},st={class:"toolbar"},ot={class:"filters"},ut={class:"table-wrap"},rt={key:1},dt={key:1},pt={class:"mono ellipsis"},ct={class:"ellipsis"},ft={class:"pagination"},mt={class:"page-hint app-muted"},vt={class:"toolbar"},_t={class:"table-wrap"},yt={class:"table-wrap"},bt={class:"filters"},gt={class:"filters"},kt={class:"risk-head"},ht={class:"risk-title"},wt={key:0},It={key:1},Vt={class:"toolbar"},xt={class:"table-wrap"},Ct={class:"mono ellipsis"},St={class:"ellipsis"},Tt={class:"dialog-actions"},re=20,Pt={__name:"SecurityPage",setup(u){const m=d("threats"),V=d(!1),L=d(null),ae=d(!1),q=d([]),E=d(0),C=d(1),U=d(""),B=d(""),$=d(!1),de=d([]),pe=d([]),ce=d("ips"),S=d(!1),R=d(!1),o=d({kind:"ip",ip:"",user_id:"",reason:"",duration_hours:24,permanent:!1}),z=d("ip"),k=d(!1),A=d(""),G=d(""),_=d(null),h=d(""),Ie=["sql_injection","xss","path_traversal","command_injection","ssrf","scanner","bruteforce","csrf","xxe","file_upload"];function le(n){const e=Number(n);return Number.isFinite(e)?e:0}function D(n){const e=Number(n||0);return e>=80?{label:"高",type:"danger"}:e>=50?{label:"中",type:"warning"}:{label:"低",type:"success"}}function fe(n){const e=String(n||"").trim();return e||"永久"}function me(n){const e=[];return n?.field_name&&e.push(`字段: ${n.field_name}`),n?.rule&&e.push(`规则: ${n.rule}`),n?.matched&&e.push(`匹配: ${n.matched}`),n?.value_preview&&e.push(`值: ${n.value_preview}`),e.length?e.join(" · "):"-"}function K(n){const e=String(n?.request_method||"").trim(),s=String(n?.request_path||"").trim();return`${e} ${s}`.trim()||"-"}const Ve=oe(()=>{const n=new Set(Ie),e=L.value?.recent_threat_events||[];for(const s of e){const y=String(s?.threat_type||"").trim();y&&n.add(y)}for(const s of q.value||[]){const y=String(s?.threat_type||"").trim();y&&n.add(y)}return Array.from(n).sort((s,y)=>s.localeCompare(y)).map(s=>({label:s,value:s}))}),xe=oe(()=>{const n=L.value||{};return[{key:"threat_events_24h",label:"最近24小时威胁事件",value:le(n.threat_events_24h),tone:"red",hint:"用于衡量当前攻击面活跃度"},{key:"banned_ip_count",label:"当前封禁 IP 数",value:le(n.banned_ip_count),tone:"orange",hint:"自动与人工封禁总量"},{key:"banned_user_count",label:"当前封禁用户数",value:le(n.banned_user_count),tone:"purple",hint:"高风险账户拦截情况"}]}),Ce=oe(()=>Math.max(1,Math.ceil((E.value||0)/re)));async function N(){V.value=!0;try{L.value=await Oe()}catch{L.value=null}finally{V.value=!1}}async function O(){ae.value=!0;try{const n={page:C.value,per_page:re};U.value&&(n.event_type=U.value),B.value&&(n.severity=B.value);const e=await He(n);q.value=e?.items||[],E.value=e?.total||0}catch{q.value=[],E.value=0}finally{ae.value=!1}}async function F(){if(!$.value){$.value=!0;try{const[n,e]=await Promise.allSettled([Je(),Qe()]);de.value=n.status==="fulfilled"?n.value?.items||[]:[],pe.value=e.status==="fulfilled"?e.value?.items||[]:[]}finally{$.value=!1}}}async function ve(){await Promise.allSettled([N(),O(),F()])}function Se(){C.value=1,O()}function Te(){U.value="",B.value="",C.value=1,O()}function _e(){o.value={kind:"ip",ip:"",user_id:"",reason:"",duration_hours:24,permanent:!1}}function H(n="ip",e={}){_e(),o.value.kind=n==="user"?"user":"ip",o.value.kind==="ip"?o.value.ip=String(e.ip||"").trim():o.value.user_id=String(e.user_id||"").trim(),e.reason&&(o.value.reason=String(e.reason||"").trim()),S.value=!0}async function Pe(){const n=o.value.kind,e=String(o.value.reason||"").trim(),s=!!o.value.permanent,y=Number(o.value.duration_hours||24);if(!e){w.error("原因不能为空");return}if(n==="ip"){const I=String(o.value.ip||"").trim();if(!I){w.error("IP不能为空");return}R.value=!0;try{await We({ip:I,reason:e,duration_hours:y,permanent:s}),w.success("IP已封禁"),S.value=!1,await Promise.allSettled([N(),F()])}catch{}finally{R.value=!1}return}const Q=String(o.value.user_id||"").trim(),r=Number.parseInt(Q,10);if(!Number.isFinite(r)){w.error("用户ID无效");return}R.value=!0;try{await Ye({user_id:r,reason:e,duration_hours:y,permanent:s}),w.success("用户已封禁"),S.value=!1,await Promise.allSettled([N(),F()])}catch{}finally{R.value=!1}}async function ye(n){const e=String(n||"").trim();if(e){try{await ee.confirm(`确定解除对 IP ${e} 的封禁吗?`,"解除封禁",{confirmButtonText:"解除",cancelButtonText:"取消",type:"warning"})}catch{return}try{await Xe(e),w.success("已解除IP封禁"),await Promise.allSettled([N(),F()])}catch{}}}async function be(n){const e=Number.parseInt(String(n||"").trim(),10);if(Number.isFinite(e)){try{await ee.confirm(`确定解除对 用户ID ${e} 的封禁吗?`,"解除封禁",{confirmButtonText:"解除",cancelButtonText:"取消",type:"warning"})}catch{return}try{await Ze(e),w.success("已解除用户封禁"),await Promise.allSettled([N(),F()])}catch{}}}function ge(n){const e=String(n||"").trim();e&&(m.value="risk",z.value="ip",A.value=e,J())}function ke(n){const e=String(n||"").trim();e&&(m.value="risk",z.value="user",G.value=e,ne())}async function J(){const n=String(A.value||"").trim();if(!n){w.error("请输入IP");return}k.value=!0;try{_.value=await et(n),h.value="ip"}catch{_.value=null,h.value=""}finally{k.value=!1}}async function ne(){const n=String(G.value||"").trim(),e=Number.parseInt(n,10);if(!Number.isFinite(e)){w.error("请输入有效的用户ID");return}k.value=!0;try{_.value=await at(e),h.value="user"}catch{_.value=null,h.value=""}finally{k.value=!1}}function Ue(){!_.value||!h.value||(h.value==="ip"?H("ip",{ip:_.value?.ip,reason:"风险查询手动封禁"}):H("user",{user_id:_.value?.user_id,reason:"风险查询手动封禁"}))}async function Be(){!_.value||!h.value||(h.value==="ip"?(await ye(_.value?.ip),await J()):(await be(_.value?.user_id),await ne()))}async function $e(){if(h.value!=="ip")return;const n=String(_.value?.ip||"").trim();if(n){try{await ee.confirm(`确定清除 IP ${n} 的风险分吗? +import{a as g,_ as qe}from"./index-BwP1dZnj.js";import{M as Ee}from"./MetricGrid-COFDfeGs.js";import{E as ee,a as w}from"./vendor-element-B5S5pUKo.js";import{r as d,c as oe,o as ze,aj as v,ap as Ae,n as P,q as c,t as p,L as a,E as l,I as i,K as Ge,a3 as Ke,D as b,F as te,J as f,G as ue}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";async function Oe(){const{data:u}=await g.get("/admin/security/dashboard");return u}async function He(u){const{data:m}=await g.get("/admin/security/threats",{params:u});return m}async function Je(){const{data:u}=await g.get("/admin/security/banned-ips");return u}async function Qe(){const{data:u}=await g.get("/admin/security/banned-users");return u}async function We(u){const{data:m}=await g.post("/admin/security/ban-ip",u);return m}async function Xe(u){const{data:m}=await g.post("/admin/security/unban-ip",{ip:u});return m}async function Ye(u){const{data:m}=await g.post("/admin/security/ban-user",u);return m}async function Ze(u){const{data:m}=await g.post("/admin/security/unban-user",{user_id:u});return m}async function et(u){const m=encodeURIComponent(String(u||"").trim()),{data:V}=await g.get(`/admin/security/ip-risk/${m}`);return V}async function tt(u){const{data:m}=await g.post("/admin/security/ip-risk/clear",{ip:u});return m}async function at(u){const m=encodeURIComponent(String(u||"").trim()),{data:V}=await g.get(`/admin/security/user-risk/${m}`);return V}async function lt(){const{data:u}=await g.post("/admin/security/cleanup",{});return u}const nt={class:"page-stack"},it={class:"app-page-title"},st={class:"toolbar"},ot={class:"filters"},ut={class:"table-wrap"},rt={key:1},dt={key:1},pt={class:"mono ellipsis"},ct={class:"ellipsis"},ft={class:"pagination"},mt={class:"page-hint app-muted"},vt={class:"toolbar"},_t={class:"table-wrap"},yt={class:"table-wrap"},bt={class:"filters"},gt={class:"filters"},kt={class:"risk-head"},ht={class:"risk-title"},wt={key:0},It={key:1},Vt={class:"toolbar"},xt={class:"table-wrap"},Ct={class:"mono ellipsis"},St={class:"ellipsis"},Tt={class:"dialog-actions"},re=20,Pt={__name:"SecurityPage",setup(u){const m=d("threats"),V=d(!1),L=d(null),ae=d(!1),q=d([]),E=d(0),C=d(1),U=d(""),B=d(""),$=d(!1),de=d([]),pe=d([]),ce=d("ips"),S=d(!1),R=d(!1),o=d({kind:"ip",ip:"",user_id:"",reason:"",duration_hours:24,permanent:!1}),z=d("ip"),k=d(!1),A=d(""),G=d(""),_=d(null),h=d(""),Ie=["sql_injection","xss","path_traversal","command_injection","ssrf","scanner","bruteforce","csrf","xxe","file_upload"];function le(n){const e=Number(n);return Number.isFinite(e)?e:0}function D(n){const e=Number(n||0);return e>=80?{label:"高",type:"danger"}:e>=50?{label:"中",type:"warning"}:{label:"低",type:"success"}}function fe(n){const e=String(n||"").trim();return e||"永久"}function me(n){const e=[];return n?.field_name&&e.push(`字段: ${n.field_name}`),n?.rule&&e.push(`规则: ${n.rule}`),n?.matched&&e.push(`匹配: ${n.matched}`),n?.value_preview&&e.push(`值: ${n.value_preview}`),e.length?e.join(" · "):"-"}function K(n){const e=String(n?.request_method||"").trim(),s=String(n?.request_path||"").trim();return`${e} ${s}`.trim()||"-"}const Ve=oe(()=>{const n=new Set(Ie),e=L.value?.recent_threat_events||[];for(const s of e){const y=String(s?.threat_type||"").trim();y&&n.add(y)}for(const s of q.value||[]){const y=String(s?.threat_type||"").trim();y&&n.add(y)}return Array.from(n).sort((s,y)=>s.localeCompare(y)).map(s=>({label:s,value:s}))}),xe=oe(()=>{const n=L.value||{};return[{key:"threat_events_24h",label:"最近24小时威胁事件",value:le(n.threat_events_24h),tone:"red",hint:"用于衡量当前攻击面活跃度"},{key:"banned_ip_count",label:"当前封禁 IP 数",value:le(n.banned_ip_count),tone:"orange",hint:"自动与人工封禁总量"},{key:"banned_user_count",label:"当前封禁用户数",value:le(n.banned_user_count),tone:"purple",hint:"高风险账户拦截情况"}]}),Ce=oe(()=>Math.max(1,Math.ceil((E.value||0)/re)));async function N(){V.value=!0;try{L.value=await Oe()}catch{L.value=null}finally{V.value=!1}}async function O(){ae.value=!0;try{const n={page:C.value,per_page:re};U.value&&(n.event_type=U.value),B.value&&(n.severity=B.value);const e=await He(n);q.value=e?.items||[],E.value=e?.total||0}catch{q.value=[],E.value=0}finally{ae.value=!1}}async function F(){if(!$.value){$.value=!0;try{const[n,e]=await Promise.allSettled([Je(),Qe()]);de.value=n.status==="fulfilled"?n.value?.items||[]:[],pe.value=e.status==="fulfilled"?e.value?.items||[]:[]}finally{$.value=!1}}}async function ve(){await Promise.allSettled([N(),O(),F()])}function Se(){C.value=1,O()}function Te(){U.value="",B.value="",C.value=1,O()}function _e(){o.value={kind:"ip",ip:"",user_id:"",reason:"",duration_hours:24,permanent:!1}}function H(n="ip",e={}){_e(),o.value.kind=n==="user"?"user":"ip",o.value.kind==="ip"?o.value.ip=String(e.ip||"").trim():o.value.user_id=String(e.user_id||"").trim(),e.reason&&(o.value.reason=String(e.reason||"").trim()),S.value=!0}async function Pe(){const n=o.value.kind,e=String(o.value.reason||"").trim(),s=!!o.value.permanent,y=Number(o.value.duration_hours||24);if(!e){w.error("原因不能为空");return}if(n==="ip"){const I=String(o.value.ip||"").trim();if(!I){w.error("IP不能为空");return}R.value=!0;try{await We({ip:I,reason:e,duration_hours:y,permanent:s}),w.success("IP已封禁"),S.value=!1,await Promise.allSettled([N(),F()])}catch{}finally{R.value=!1}return}const Q=String(o.value.user_id||"").trim(),r=Number.parseInt(Q,10);if(!Number.isFinite(r)){w.error("用户ID无效");return}R.value=!0;try{await Ye({user_id:r,reason:e,duration_hours:y,permanent:s}),w.success("用户已封禁"),S.value=!1,await Promise.allSettled([N(),F()])}catch{}finally{R.value=!1}}async function ye(n){const e=String(n||"").trim();if(e){try{await ee.confirm(`确定解除对 IP ${e} 的封禁吗?`,"解除封禁",{confirmButtonText:"解除",cancelButtonText:"取消",type:"warning"})}catch{return}try{await Xe(e),w.success("已解除IP封禁"),await Promise.allSettled([N(),F()])}catch{}}}async function be(n){const e=Number.parseInt(String(n||"").trim(),10);if(Number.isFinite(e)){try{await ee.confirm(`确定解除对 用户ID ${e} 的封禁吗?`,"解除封禁",{confirmButtonText:"解除",cancelButtonText:"取消",type:"warning"})}catch{return}try{await Ze(e),w.success("已解除用户封禁"),await Promise.allSettled([N(),F()])}catch{}}}function ge(n){const e=String(n||"").trim();e&&(m.value="risk",z.value="ip",A.value=e,J())}function ke(n){const e=String(n||"").trim();e&&(m.value="risk",z.value="user",G.value=e,ne())}async function J(){const n=String(A.value||"").trim();if(!n){w.error("请输入IP");return}k.value=!0;try{_.value=await et(n),h.value="ip"}catch{_.value=null,h.value=""}finally{k.value=!1}}async function ne(){const n=String(G.value||"").trim(),e=Number.parseInt(n,10);if(!Number.isFinite(e)){w.error("请输入有效的用户ID");return}k.value=!0;try{_.value=await at(e),h.value="user"}catch{_.value=null,h.value=""}finally{k.value=!1}}function Ue(){!_.value||!h.value||(h.value==="ip"?H("ip",{ip:_.value?.ip,reason:"风险查询手动封禁"}):H("user",{user_id:_.value?.user_id,reason:"风险查询手动封禁"}))}async function Be(){!_.value||!h.value||(h.value==="ip"?(await ye(_.value?.ip),await J()):(await be(_.value?.user_id),await ne()))}async function $e(){if(h.value!=="ip")return;const n=String(_.value?.ip||"").trim();if(n){try{await ee.confirm(`确定清除 IP ${n} 的风险分吗? 清除风险分不会删除威胁历史,也不会解除封禁。`,"清除风险分",{confirmButtonText:"清除",cancelButtonText:"取消",type:"warning"})}catch{return}if(!k.value){k.value=!0;try{await tt(n),w.success("IP风险分已清零")}catch{}finally{k.value=!1}await J()}}}const ie=d(!1);async function Re(){try{await ee.confirm(`确定清理过期封禁记录,并衰减风险分吗? diff --git a/static/admin/assets/SettingsPage-BAa-Qu3q.css b/static/admin/assets/SettingsPage-BAa-Qu3q.css new file mode 100644 index 0000000..a4f0e76 --- /dev/null +++ b/static/admin/assets/SettingsPage-BAa-Qu3q.css @@ -0,0 +1 @@ +.page-stack[data-v-fb202365]{display:flex;flex-direction:column;gap:14px;min-width:0}.card[data-v-fb202365]{border-radius:var(--app-radius);border:1px solid var(--app-border);background:var(--app-card-bg);box-shadow:var(--app-shadow-soft)}.section-title[data-v-fb202365]{margin:0 0 12px;font-size:15px;font-weight:800;letter-spacing:.2px}.help[data-v-fb202365]{margin-top:10px;font-size:12px;color:var(--app-muted)}.help-alert[data-v-fb202365]{margin-bottom:12px} diff --git a/static/admin/assets/SettingsPage-BFVngq9z.js b/static/admin/assets/SettingsPage-BFVngq9z.js deleted file mode 100644 index c6e2cea..0000000 --- a/static/admin/assets/SettingsPage-BFVngq9z.js +++ /dev/null @@ -1 +0,0 @@ -import{a as g,_ as X}from"./index-BMIn4N2u.js";import{a as u,E as D}from"./vendor-element-B5S5pUKo.js";import{r as f,o as Y,aj as y,ap as Z,n as K,q as V,t as _,L as s,E as l,I as C,F as Q,D as I}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";async function W(t){const{data:e}=await g.put("/admin/username",{new_username:t});return e}async function ee(t={}){const e=String(t.currentPassword||""),r=String(t.newPassword||""),{data:o}=await g.put("/admin/password",{current_password:e,new_password:r});return o}async function ae(){const{data:t}=await g.post("/logout");return t}async function te(){const{data:t}=await g.get("/admin/passkeys");return t}async function M(t={}){const{data:e}=await g.post("/admin/passkeys/register/options",t);return e}async function ne(t={}){const{data:e}=await g.post("/admin/passkeys/register/verify",t);return e}async function se(t){const{data:e}=await g.delete(`/admin/passkeys/${t}`);return e}async function re(t={}){const{data:e}=await g.post("/admin/passkeys/client-error",t);return e}function le(t){if(!t||typeof t!="object")throw new Error("Passkey参数无效");return t.publicKey&&typeof t.publicKey=="object"?t.publicKey:t}function U(t){const e=String(t||""),r="=".repeat((4-e.length%4)%4),o=(e+r).replace(/-/g,"+").replace(/_/g,"/"),m=window.atob(o),i=new Uint8Array(m.length);for(let w=0;w({...o,id:U(o.id)}))),r}function ie(t){if(!t)return null;const e=t.response||{},r={id:t.id,rawId:h(t.rawId),type:t.type,authenticatorAttachment:t.authenticatorAttachment||void 0,response:{}};return e.clientDataJSON&&(r.response.clientDataJSON=h(e.clientDataJSON)),e.attestationObject&&(r.response.attestationObject=h(e.attestationObject)),e.authenticatorData&&(r.response.authenticatorData=h(e.authenticatorData)),e.signature&&(r.response.signature=h(e.signature)),e.userHandle?r.response.userHandle=h(e.userHandle):r.response.userHandle=null,typeof e.getTransports=="function"&&(r.response.transports=e.getTransports()||[]),r}function ue(){return typeof window<"u"&&window.isSecureContext&&!!window.PublicKeyCredential&&!!navigator.credentials}async function de(t){const e=oe(t),r=await navigator.credentials.create({publicKey:e});return ie(r)}const ce={class:"page-stack"},pe=24e4,fe={__name:"SettingsPage",setup(t){const e=f(""),r=f(""),o=f(""),m=f(""),i=f(!1),w=f(!1),S=f(!1),A=f(""),k=f([]),v=f(null),b=f(0);function j(n){const a=String(n||"");return a.length<8?{ok:!1,message:"密码长度至少8位"}:a.length>128?{ok:!1,message:"密码长度不能超过128个字符"}:!/[a-zA-Z]/.test(a)||!/\d/.test(a)?{ok:!1,message:"密码必须包含字母和数字"}:{ok:!0,message:""}}async function E(){try{await ae()}catch{}finally{window.location.href="/yuyx"}}async function H(){const n=e.value.trim();if(!n){u.error("请输入新用户名");return}try{await D.confirm(`确定将管理员用户名修改为「${n}」吗?修改后需要重新登录。`,"修改用户名",{confirmButtonText:"确认修改",cancelButtonText:"取消",type:"warning"})}catch{return}i.value=!0;try{await W(n),u.success("用户名修改成功,请重新登录"),e.value="",setTimeout(E,1200)}catch{}finally{i.value=!1}}async function R(){const n=r.value,a=o.value,d=m.value;if(!n){u.error("请输入当前密码");return}if(!a){u.error("请输入新密码");return}const c=j(a);if(!c.ok){u.error(c.message);return}if(a!==d){u.error("两次输入的新密码不一致");return}try{await D.confirm("确定修改管理员密码吗?修改后需要重新登录。","修改密码",{confirmButtonText:"确认修改",cancelButtonText:"取消",type:"warning"})}catch{return}i.value=!0;try{await ee({currentPassword:n,newPassword:a}),u.success("密码修改成功,请重新登录"),r.value="",o.value="",m.value="",setTimeout(E,1200)}catch{}finally{i.value=!1}}async function T(){w.value=!0;try{const n=await te();k.value=Array.isArray(n?.items)?n.items:[],k.value.length<3?await N():(v.value=null,b.value=0)}catch{k.value=[],v.value=null,b.value=0}finally{w.value=!1}}function $(){return!v.value||Date.now()-Number(b.value||0)>pe?null:v.value}async function N(){try{const n=await M({});v.value=n,b.value=Date.now()}catch{v.value=null,b.value=0}}async function z(){if(!ue()){u.error("当前浏览器或环境不支持Passkey(需 HTTPS)");return}if(k.value.length>=3){u.error("最多可绑定3台设备");return}S.value=!0;try{let n=$();n||(n=await M({}));const a=await de(n?.publicKey||{});await ne({credential:a,device_name:A.value.trim()}),v.value=null,b.value=0,A.value="",u.success("Passkey设备添加成功"),await T()}catch(n){try{await re({stage:"register",source:"admin-settings",name:n?.name||"",message:n?.message||"",code:n?.code||"",user_agent:navigator.userAgent||""})}catch{}v.value=null,b.value=0,await N();const a=n?.response?.data,d=n?.message?String(n.message):"",c=a?.error||(n?.name==="NotAllowedError"?`Passkey注册未完成(浏览器返回:${d||"未提供详细原因"})`:d||"Passkey添加失败");u.error(c)}finally{S.value=!1}}async function J(n){try{await D.confirm(`确定删除设备「${n?.device_name||"未命名设备"}」吗?`,"删除Passkey设备",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}try{await se(n.id),u.success("设备已删除"),await T()}catch(a){const d=a?.response?.data;u.error(d?.error||"删除失败")}}return Y(()=>{T()}),(n,a)=>{const d=y("el-input"),c=y("el-form-item"),O=y("el-form"),x=y("el-button"),B=y("el-card"),L=y("el-alert"),F=y("el-empty"),P=y("el-table-column"),q=y("el-table"),G=Z("loading");return V(),K("div",ce,[a[13]||(a[13]=_("div",{class:"app-page-title"},[_("h2",null,"设置"),_("span",{class:"app-muted"},"管理员账号设置")],-1)),s(B,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[a[6]||(a[6]=_("h3",{class:"section-title"},"修改管理员用户名",-1)),s(O,{"label-width":"120px"},{default:l(()=>[s(c,{label:"新用户名"},{default:l(()=>[s(d,{modelValue:e.value,"onUpdate:modelValue":a[0]||(a[0]=p=>e.value=p),placeholder:"输入新用户名",disabled:i.value},null,8,["modelValue","disabled"])]),_:1})]),_:1}),s(x,{type:"primary",loading:i.value,onClick:H},{default:l(()=>[...a[5]||(a[5]=[C("保存用户名",-1)])]),_:1},8,["loading"])]),_:1}),s(B,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[a[8]||(a[8]=_("h3",{class:"section-title"},"修改管理员密码",-1)),s(O,{"label-width":"120px"},{default:l(()=>[s(c,{label:"当前密码"},{default:l(()=>[s(d,{modelValue:r.value,"onUpdate:modelValue":a[1]||(a[1]=p=>r.value=p),type:"password","show-password":"",placeholder:"输入当前密码",disabled:i.value},null,8,["modelValue","disabled"])]),_:1}),s(c,{label:"新密码"},{default:l(()=>[s(d,{modelValue:o.value,"onUpdate:modelValue":a[2]||(a[2]=p=>o.value=p),type:"password","show-password":"",placeholder:"输入新密码",disabled:i.value},null,8,["modelValue","disabled"])]),_:1}),s(c,{label:"确认新密码"},{default:l(()=>[s(d,{modelValue:m.value,"onUpdate:modelValue":a[3]||(a[3]=p=>m.value=p),type:"password","show-password":"",placeholder:"再次输入新密码",disabled:i.value},null,8,["modelValue","disabled"])]),_:1})]),_:1}),s(x,{type:"primary",loading:i.value,onClick:R},{default:l(()=>[...a[7]||(a[7]=[C("保存密码",-1)])]),_:1},8,["loading"]),a[9]||(a[9]=_("div",{class:"help"},"建议使用更强密码(至少8位且包含字母与数字)。",-1))]),_:1}),s(B,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[a[12]||(a[12]=_("h3",{class:"section-title"},"Passkey设备",-1)),s(L,{type:"info",closable:!1,title:"最多可绑定3台设备,可用于管理员无密码登录。","show-icon":"",class:"help-alert"}),s(O,{inline:""},{default:l(()=>[s(c,{label:"设备备注"},{default:l(()=>[s(d,{modelValue:A.value,"onUpdate:modelValue":a[4]||(a[4]=p=>A.value=p),placeholder:"例如:值班iPhone / 办公Mac",maxlength:"40","show-word-limit":""},null,8,["modelValue"])]),_:1}),s(c,null,{default:l(()=>[s(x,{type:"primary",loading:S.value,onClick:z},{default:l(()=>[...a[10]||(a[10]=[C("添加Passkey设备",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),Q((V(),K("div",null,[k.value.length===0?(V(),I(F,{key:0,description:"暂无Passkey设备"})):(V(),I(q,{key:1,data:k.value,size:"small",style:{width:"100%"}},{default:l(()=>[s(P,{prop:"device_name",label:"设备备注","min-width":"160"}),s(P,{prop:"credential_id_preview",label:"凭据ID","min-width":"180"}),s(P,{prop:"last_used_at",label:"最近使用","min-width":"140"}),s(P,{prop:"created_at",label:"创建时间","min-width":"140"}),s(P,{label:"操作",width:"100",fixed:"right"},{default:l(({row:p})=>[s(x,{type:"danger",text:"",onClick:ye=>J(p)},{default:l(()=>[...a[11]||(a[11]=[C("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]))])),[[G,w.value]])]),_:1})])}}},_e=X(fe,[["__scopeId","data-v-bb93be75"]]);export{_e as default}; diff --git a/static/admin/assets/SettingsPage-qQfORNZC.css b/static/admin/assets/SettingsPage-qQfORNZC.css deleted file mode 100644 index 193a5a0..0000000 --- a/static/admin/assets/SettingsPage-qQfORNZC.css +++ /dev/null @@ -1 +0,0 @@ -.page-stack[data-v-bb93be75]{display:flex;flex-direction:column;gap:14px;min-width:0}.card[data-v-bb93be75]{border-radius:var(--app-radius);border:1px solid var(--app-border);background:var(--app-card-bg);box-shadow:var(--app-shadow-soft)}.section-title[data-v-bb93be75]{margin:0 0 12px;font-size:15px;font-weight:800;letter-spacing:.2px}.help[data-v-bb93be75]{margin-top:10px;font-size:12px;color:var(--app-muted)}.help-alert[data-v-bb93be75]{margin-bottom:12px} diff --git a/static/admin/assets/SettingsPage-za1oQElD.js b/static/admin/assets/SettingsPage-za1oQElD.js new file mode 100644 index 0000000..3d91ff8 --- /dev/null +++ b/static/admin/assets/SettingsPage-za1oQElD.js @@ -0,0 +1 @@ +import{a as v,_ as L}from"./index-BwP1dZnj.js";import{a as u,E as O}from"./vendor-element-B5S5pUKo.js";import{r as p,o as Y,aj as m,ap as Z,n as N,q as C,t as b,L as r,E as o,I as S,F as Q,D as K}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";async function W(t){const{data:e}=await v.put("/admin/username",{new_username:t});return e}async function ee(t={}){const e=String(t.currentPassword||""),n=String(t.newPassword||""),{data:l}=await v.put("/admin/password",{current_password:e,new_password:n});return l}async function te(){const{data:t}=await v.post("/logout");return t}async function ae(){const{data:t}=await v.get("/admin/passkeys");return t}async function $(t={}){const{data:e}=await v.post("/admin/passkeys/register/options",t);return e}async function ne(t={}){const{data:e}=await v.post("/admin/passkeys/register/verify",t);return e}async function se(t){const{data:e}=await v.delete(`/admin/passkeys/${t}`);return e}async function re(t={}){const{data:e}=await v.post("/admin/passkeys/client-error",t);return e}function le(t){if(!t||typeof t!="object")throw new Error("Passkey参数无效");return t.publicKey&&typeof t.publicKey=="object"?t.publicKey:t}function D(t){const e=String(t||""),n="=".repeat((4-e.length%4)%4),l=(e+n).replace(/-/g,"+").replace(/_/g,"/"),y=window.atob(l),i=new Uint8Array(y.length);for(let w=0;w({...l,id:D(l.id)}))),n}function ie(t){if(!t)return null;const e=t.response||{},n={id:t.id,rawId:h(t.rawId),type:t.type,authenticatorAttachment:t.authenticatorAttachment||void 0,response:{}};return e.clientDataJSON&&(n.response.clientDataJSON=h(e.clientDataJSON)),e.attestationObject&&(n.response.attestationObject=h(e.attestationObject)),e.authenticatorData&&(n.response.authenticatorData=h(e.authenticatorData)),e.signature&&(n.response.signature=h(e.signature)),e.userHandle?n.response.userHandle=h(e.userHandle):n.response.userHandle=null,typeof e.getTransports=="function"&&(n.response.transports=e.getTransports()||[]),n}function ue(){return typeof window<"u"&&window.isSecureContext&&!!window.PublicKeyCredential&&!!navigator.credentials}function de(){const t=String(window?.navigator?.userAgent||"");return/MiuiBrowser|XiaoMi\/MiuiBrowser/i.test(t)}function ce(t,e="Passkey操作"){const n=String(t?.name||"").trim(),l=String(t?.message||"").trim();return n==="NotAllowedError"?`${e}未完成(可能已取消、超时或设备未响应)`:n==="NotReadableError"?/credential manager/i.test(l)&&de()?"当前小米浏览器与系统凭据管理器兼容性较差,请改用系统 Chrome 或 Edge 后重试。":/credential manager/i.test(l)?"系统凭据管理器返回异常,请确认已设置系统锁屏并改用系统 Chrome/Edge 后重试。":l||`${e}失败(设备读取异常)`:n==="SecurityError"?"当前环境安全策略不满足 Passkey 要求,请确认使用 HTTPS 且证书有效。":l||`${e}失败`}async function pe(t){const e=oe(t),n=await navigator.credentials.create({publicKey:e});return ie(n)}const fe={class:"page-stack"},me=24e4,ye={__name:"SettingsPage",setup(t){const e=p(""),n=p(""),l=p(""),y=p(""),i=p(!1),w=p(!1),V=p(!1),A=p(""),k=p([]),g=p(null),_=p(0);function H(s){const a=String(s||"");return a.length<8?{ok:!1,message:"密码长度至少8位"}:a.length>128?{ok:!1,message:"密码长度不能超过128个字符"}:!/[a-zA-Z]/.test(a)||!/\d/.test(a)?{ok:!1,message:"密码必须包含字母和数字"}:{ok:!0,message:""}}async function U(){try{await te()}catch{}finally{window.location.href="/yuyx"}}async function I(){const s=e.value.trim();if(!s){u.error("请输入新用户名");return}try{await O.confirm(`确定将管理员用户名修改为「${s}」吗?修改后需要重新登录。`,"修改用户名",{confirmButtonText:"确认修改",cancelButtonText:"取消",type:"warning"})}catch{return}i.value=!0;try{await W(s),u.success("用户名修改成功,请重新登录"),e.value="",setTimeout(U,1200)}catch{}finally{i.value=!1}}async function R(){const s=n.value,a=l.value,d=y.value;if(!s){u.error("请输入当前密码");return}if(!a){u.error("请输入新密码");return}const f=H(a);if(!f.ok){u.error(f.message);return}if(a!==d){u.error("两次输入的新密码不一致");return}try{await O.confirm("确定修改管理员密码吗?修改后需要重新登录。","修改密码",{confirmButtonText:"确认修改",cancelButtonText:"取消",type:"warning"})}catch{return}i.value=!0;try{await ee({currentPassword:s,newPassword:a}),u.success("密码修改成功,请重新登录"),n.value="",l.value="",y.value="",setTimeout(U,1200)}catch{}finally{i.value=!1}}async function T(){w.value=!0;try{const s=await ae();k.value=Array.isArray(s?.items)?s.items:[],k.value.length<3?await M():(g.value=null,_.value=0)}catch{k.value=[],g.value=null,_.value=0}finally{w.value=!1}}function j(){return!g.value||Date.now()-Number(_.value||0)>me?null:g.value}async function M(){try{const s=await $({});g.value=s,_.value=Date.now()}catch{g.value=null,_.value=0}}async function z(){if(!ue()){u.error("当前浏览器或环境不支持Passkey(需 HTTPS)");return}if(k.value.length>=3){u.error("最多可绑定3台设备");return}V.value=!0;try{let s=j();s||(s=await $({}));const a=await pe(s?.publicKey||{});await ne({credential:a,device_name:A.value.trim()}),g.value=null,_.value=0,A.value="",u.success("Passkey设备添加成功"),await T()}catch(s){try{await re({stage:"register",source:"admin-settings",name:s?.name||"",message:s?.message||"",code:s?.code||"",user_agent:navigator.userAgent||""})}catch{}g.value=null,_.value=0,await M();const d=s?.response?.data?.error||ce(s,"Passkey注册");u.error(d)}finally{V.value=!1}}async function J(s){try{await O.confirm(`确定删除设备「${s?.device_name||"未命名设备"}」吗?`,"删除Passkey设备",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}try{await se(s.id),u.success("设备已删除"),await T()}catch(a){const d=a?.response?.data;u.error(d?.error||"删除失败")}}return Y(()=>{T()}),(s,a)=>{const d=m("el-input"),f=m("el-form-item"),E=m("el-form"),x=m("el-button"),B=m("el-card"),F=m("el-alert"),X=m("el-empty"),P=m("el-table-column"),q=m("el-table"),G=Z("loading");return C(),N("div",fe,[a[13]||(a[13]=b("div",{class:"app-page-title"},[b("h2",null,"设置"),b("span",{class:"app-muted"},"管理员账号设置")],-1)),r(B,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:o(()=>[a[6]||(a[6]=b("h3",{class:"section-title"},"修改管理员用户名",-1)),r(E,{"label-width":"120px"},{default:o(()=>[r(f,{label:"新用户名"},{default:o(()=>[r(d,{modelValue:e.value,"onUpdate:modelValue":a[0]||(a[0]=c=>e.value=c),placeholder:"输入新用户名",disabled:i.value},null,8,["modelValue","disabled"])]),_:1})]),_:1}),r(x,{type:"primary",loading:i.value,onClick:I},{default:o(()=>[...a[5]||(a[5]=[S("保存用户名",-1)])]),_:1},8,["loading"])]),_:1}),r(B,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:o(()=>[a[8]||(a[8]=b("h3",{class:"section-title"},"修改管理员密码",-1)),r(E,{"label-width":"120px"},{default:o(()=>[r(f,{label:"当前密码"},{default:o(()=>[r(d,{modelValue:n.value,"onUpdate:modelValue":a[1]||(a[1]=c=>n.value=c),type:"password","show-password":"",placeholder:"输入当前密码",disabled:i.value},null,8,["modelValue","disabled"])]),_:1}),r(f,{label:"新密码"},{default:o(()=>[r(d,{modelValue:l.value,"onUpdate:modelValue":a[2]||(a[2]=c=>l.value=c),type:"password","show-password":"",placeholder:"输入新密码",disabled:i.value},null,8,["modelValue","disabled"])]),_:1}),r(f,{label:"确认新密码"},{default:o(()=>[r(d,{modelValue:y.value,"onUpdate:modelValue":a[3]||(a[3]=c=>y.value=c),type:"password","show-password":"",placeholder:"再次输入新密码",disabled:i.value},null,8,["modelValue","disabled"])]),_:1})]),_:1}),r(x,{type:"primary",loading:i.value,onClick:R},{default:o(()=>[...a[7]||(a[7]=[S("保存密码",-1)])]),_:1},8,["loading"]),a[9]||(a[9]=b("div",{class:"help"},"建议使用更强密码(至少8位且包含字母与数字)。",-1))]),_:1}),r(B,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:o(()=>[a[12]||(a[12]=b("h3",{class:"section-title"},"Passkey设备",-1)),r(F,{type:"info",closable:!1,title:"最多可绑定3台设备,可用于管理员无密码登录。","show-icon":"",class:"help-alert"}),r(E,{inline:""},{default:o(()=>[r(f,{label:"设备备注"},{default:o(()=>[r(d,{modelValue:A.value,"onUpdate:modelValue":a[4]||(a[4]=c=>A.value=c),placeholder:"例如:值班iPhone / 办公Mac",maxlength:"40","show-word-limit":""},null,8,["modelValue"])]),_:1}),r(f,null,{default:o(()=>[r(x,{type:"primary",loading:V.value,onClick:z},{default:o(()=>[...a[10]||(a[10]=[S("添加Passkey设备",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),Q((C(),N("div",null,[k.value.length===0?(C(),K(X,{key:0,description:"暂无Passkey设备"})):(C(),K(q,{key:1,data:k.value,size:"small",style:{width:"100%"}},{default:o(()=>[r(P,{prop:"device_name",label:"设备备注","min-width":"160"}),r(P,{prop:"credential_id_preview",label:"凭据ID","min-width":"180"}),r(P,{prop:"last_used_at",label:"最近使用","min-width":"140"}),r(P,{prop:"created_at",label:"创建时间","min-width":"140"}),r(P,{label:"操作",width:"100",fixed:"right"},{default:o(({row:c})=>[r(x,{type:"danger",text:"",onClick:we=>J(c)},{default:o(()=>[...a[11]||(a[11]=[S("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]))])),[[G,w.value]])]),_:1})])}}},he=L(ye,[["__scopeId","data-v-fb202365"]]);export{he as default}; diff --git a/static/admin/assets/SystemPage-eaCcaVxM.js b/static/admin/assets/SystemPage-D_lad_h_.js similarity index 99% rename from static/admin/assets/SystemPage-eaCcaVxM.js rename to static/admin/assets/SystemPage-D_lad_h_.js index 44e4d3d..5ec0a83 100644 --- a/static/admin/assets/SystemPage-eaCcaVxM.js +++ b/static/admin/assets/SystemPage-D_lad_h_.js @@ -1,4 +1,4 @@ -import{f as Ce,u as ne}from"./system-CeJP0y2Z.js";import{a as C,_ as Se}from"./index-BMIn4N2u.js";import{E as me,a as m}from"./vendor-element-B5S5pUKo.js";import{r as n,c as le,l as Pe,R as Ie,o as Ae,aj as p,ap as Ne,F as De,q as P,n as I,t as o,L as a,E as s,I as f,G as ae,y as Ke,J as te}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";async function ue(r={},c={}){const{data:v}=await C.get("/kdocs/status",{params:r,...c});return v}async function Ee(r={}){const c={force:!0,...r},{data:v}=await C.post("/kdocs/qr",c);return v}async function Le(){const{data:r}=await C.post("/kdocs/clear-login",{});return r}async function Qe(){const{data:r}=await C.get("/proxy/config");return r}async function Te(r){const{data:c}=await C.post("/proxy/config",r);return c}async function qe(r){const{data:c}=await C.post("/proxy/test",r);return c}const Be={class:"page-stack"},$e={class:"config-grid"},Re={class:"row-actions"},Me={class:"row-actions"},Fe={class:"row-actions"},he={class:"section-head"},ze={class:"status-inline app-muted"},He={key:0,class:"status-dots","aria-hidden":"true"},Ge={class:"kdocs-inline"},Oe={class:"kdocs-range"},je={class:"row-actions"},Je={key:0,class:"help"},We={key:1,class:"help"},Xe={class:"kdocs-qr"},Ye=["src"],Ze={__name:"SystemPage",setup(r){const c=n(!1),v=n(2),A=n(1),N=n(3),D=n(120),S=n(!1),_=n(""),K=n(3),E=n(!1),L=n(10),Q=n(7),T=n(!1),q=n(""),B=n(""),$=n(""),R=n(0),M=n("A"),F=n("D"),h=n(0),z=n(0),H=n(!1),G=n(""),y=n({}),k=n(!1),b=n(""),oe=n(!1),x=n(!1),w=n(!1),U=n(!1),O=n(!1),j=n("");let J=null;const de=le(()=>x.value||w.value||U.value),se=le(()=>O.value||x.value||oe.value),W=le(()=>{if(se.value)return"检测中";const l=y.value||{};return l?.logged_in===!0||l?.last_login_ok===!0?"已登录":l?.logged_in===!1||l?.last_login_ok===!1||l?.login_required===!0?"未登录":l?.last_error?"异常":"未知"}),ce=le(()=>se.value?"is-checking":W.value==="已登录"?"is-online":W.value==="未登录"?"is-offline":W.value==="异常"?"is-error":"is-unknown");function d(l){if(!l){j.value="";return}const e=new Date().toLocaleTimeString("zh-CN",{hour12:!1});j.value=`${l} (${e})`}async function ve(){c.value=!0;try{const[l,e]=await Promise.all([Ce(),Qe()]);v.value=l.max_concurrent_global??2,A.value=l.max_concurrent_per_account??1,N.value=l.max_screenshot_concurrent??3,D.value=l.db_slow_query_ms??120,E.value=(l.auto_approve_enabled??0)===1,L.value=l.auto_approve_hourly_limit??10,Q.value=l.auto_approve_vip_days??7,S.value=(e.proxy_enabled??0)===1,_.value=e.proxy_api_url||"",K.value=e.proxy_expire_minutes??3,T.value=(l.kdocs_enabled??0)===1,q.value=l.kdocs_doc_url||"",B.value=l.kdocs_default_unit||"",$.value=l.kdocs_sheet_name||"",R.value=l.kdocs_sheet_index??0,M.value=(l.kdocs_unit_column||"A").toUpperCase(),F.value=(l.kdocs_image_column||"D").toUpperCase(),h.value=l.kdocs_row_start??0,z.value=l.kdocs_row_end??0,H.value=(l.kdocs_admin_notify_enabled??0)===1,G.value=l.kdocs_admin_notify_email||""}catch{}finally{c.value=!1}pe()}async function pe(){if(!(O.value||x.value)){O.value=!0;try{const l=await ue({},{__silent:!0,__no_retry:!0,timeout:8e3});y.value=l||{}}catch{}finally{O.value=!1}}}async function fe(){const l={max_concurrent_global:Number(v.value),max_concurrent_per_account:Number(A.value),max_screenshot_concurrent:Number(N.value),db_slow_query_ms:Number(D.value)};try{await me.confirm(`确定更新并发配置吗? +import{f as Ce,u as ne}from"./system-Dluvi0rE.js";import{a as C,_ as Se}from"./index-BwP1dZnj.js";import{E as me,a as m}from"./vendor-element-B5S5pUKo.js";import{r as n,c as le,l as Pe,R as Ie,o as Ae,aj as p,ap as Ne,F as De,q as P,n as I,t as o,L as a,E as s,I as f,G as ae,y as Ke,J as te}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";async function ue(r={},c={}){const{data:v}=await C.get("/kdocs/status",{params:r,...c});return v}async function Ee(r={}){const c={force:!0,...r},{data:v}=await C.post("/kdocs/qr",c);return v}async function Le(){const{data:r}=await C.post("/kdocs/clear-login",{});return r}async function Qe(){const{data:r}=await C.get("/proxy/config");return r}async function Te(r){const{data:c}=await C.post("/proxy/config",r);return c}async function qe(r){const{data:c}=await C.post("/proxy/test",r);return c}const Be={class:"page-stack"},$e={class:"config-grid"},Re={class:"row-actions"},Me={class:"row-actions"},Fe={class:"row-actions"},he={class:"section-head"},ze={class:"status-inline app-muted"},He={key:0,class:"status-dots","aria-hidden":"true"},Ge={class:"kdocs-inline"},Oe={class:"kdocs-range"},je={class:"row-actions"},Je={key:0,class:"help"},We={key:1,class:"help"},Xe={class:"kdocs-qr"},Ye=["src"],Ze={__name:"SystemPage",setup(r){const c=n(!1),v=n(2),A=n(1),N=n(3),D=n(120),S=n(!1),_=n(""),K=n(3),E=n(!1),L=n(10),Q=n(7),T=n(!1),q=n(""),B=n(""),$=n(""),R=n(0),M=n("A"),F=n("D"),h=n(0),z=n(0),H=n(!1),G=n(""),y=n({}),k=n(!1),b=n(""),oe=n(!1),x=n(!1),w=n(!1),U=n(!1),O=n(!1),j=n("");let J=null;const de=le(()=>x.value||w.value||U.value),se=le(()=>O.value||x.value||oe.value),W=le(()=>{if(se.value)return"检测中";const l=y.value||{};return l?.logged_in===!0||l?.last_login_ok===!0?"已登录":l?.logged_in===!1||l?.last_login_ok===!1||l?.login_required===!0?"未登录":l?.last_error?"异常":"未知"}),ce=le(()=>se.value?"is-checking":W.value==="已登录"?"is-online":W.value==="未登录"?"is-offline":W.value==="异常"?"is-error":"is-unknown");function d(l){if(!l){j.value="";return}const e=new Date().toLocaleTimeString("zh-CN",{hour12:!1});j.value=`${l} (${e})`}async function ve(){c.value=!0;try{const[l,e]=await Promise.all([Ce(),Qe()]);v.value=l.max_concurrent_global??2,A.value=l.max_concurrent_per_account??1,N.value=l.max_screenshot_concurrent??3,D.value=l.db_slow_query_ms??120,E.value=(l.auto_approve_enabled??0)===1,L.value=l.auto_approve_hourly_limit??10,Q.value=l.auto_approve_vip_days??7,S.value=(e.proxy_enabled??0)===1,_.value=e.proxy_api_url||"",K.value=e.proxy_expire_minutes??3,T.value=(l.kdocs_enabled??0)===1,q.value=l.kdocs_doc_url||"",B.value=l.kdocs_default_unit||"",$.value=l.kdocs_sheet_name||"",R.value=l.kdocs_sheet_index??0,M.value=(l.kdocs_unit_column||"A").toUpperCase(),F.value=(l.kdocs_image_column||"D").toUpperCase(),h.value=l.kdocs_row_start??0,z.value=l.kdocs_row_end??0,H.value=(l.kdocs_admin_notify_enabled??0)===1,G.value=l.kdocs_admin_notify_email||""}catch{}finally{c.value=!1}pe()}async function pe(){if(!(O.value||x.value)){O.value=!0;try{const l=await ue({},{__silent:!0,__no_retry:!0,timeout:8e3});y.value=l||{}}catch{}finally{O.value=!1}}}async function fe(){const l={max_concurrent_global:Number(v.value),max_concurrent_per_account:Number(A.value),max_screenshot_concurrent:Number(N.value),db_slow_query_ms:Number(D.value)};try{await me.confirm(`确定更新并发配置吗? 全局并发数: ${l.max_concurrent_global} 单账号并发数: ${l.max_concurrent_per_account} diff --git a/static/admin/assets/UsersPage-o8CptFMp.js b/static/admin/assets/UsersPage-CMgBpiWX.js similarity index 99% rename from static/admin/assets/UsersPage-o8CptFMp.js rename to static/admin/assets/UsersPage-CMgBpiWX.js index 1ad57bf..400ca4a 100644 --- a/static/admin/assets/UsersPage-o8CptFMp.js +++ b/static/admin/assets/UsersPage-CMgBpiWX.js @@ -1 +1 @@ -import{a as W,r as Z,s as F,b as G,c as J,d as H,f as K}from"./users-DoPbHko8.js";import{_ as O}from"./index-BMIn4N2u.js";import{E as v,a as h}from"./vendor-element-B5S5pUKo.js";import{i as Q,r as P,o as X,aj as _,ap as Y,n as V,q as r,t as y,L as l,E as s,F as ee,D as f,G as p,J as b,I as c}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";function I(g){if(!g)return null;if(g instanceof Date)return g;let a=String(g).trim();if(!a)return null;/^\d{4}-\d{2}-\d{2}$/.test(a)&&(a=`${a}T00:00:00`);let o=a.includes("T")?a:a.replace(" ","T");o=o.replace(/\.(\d{3})\d+/,".$1"),/([zZ]|[+-]\d{2}:\d{2})$/.test(o)||(o=`${o}+08:00`);const u=new Date(o);return Number.isNaN(u.getTime())?null:u}function D(g){const a=String(g||"");if(!a)return{ok:!1,message:"密码不能为空"};if(a.length<8)return{ok:!1,message:"密码长度不能少于8个字符"};if(a.length>128)return{ok:!1,message:"密码长度不能超过128个字符"};const o=/[a-zA-Z]/.test(a),x=/\d/.test(a);return!o||!x?{ok:!1,message:"密码必须包含字母和数字"}:{ok:!0,message:""}}const te={class:"page-stack"},ne={class:"table-wrap"},se={class:"user-block"},ae={class:"user-main"},ie={key:0,class:"app-muted user-sub"},re={key:1,class:"vip-sub"},oe={key:0,class:"app-muted"},le={class:"actions"},ce={__name:"UsersPage",setup(g){const a=Q("refreshStats",null),o=P(!1),x=P([]);function u(n){const e=n?.vip_expire_time;if(!e)return!1;if(String(e).startsWith("2099-12-31"))return!0;const i=I(e);return i?i.getTime()>Date.now():!1}function C(n){const e=n?.vip_expire_time;if(!e||!u(n))return"";if(String(e).startsWith("2099-12-31"))return"永久VIP";const i=I(e);if(!i)return`到期: ${e}`;const d=Math.ceil((i.getTime()-Date.now())/(1e3*60*60*24));return`到期: ${e}(剩${d}天)`}function B(n){return n==="rejected"?{label:"禁用",type:"danger"}:{label:"正常",type:"success"}}async function w(){o.value=!0;try{x.value=await K()}catch{x.value=[]}finally{o.value=!1}}async function U(){await w()}async function z(n){try{await v.confirm(`确定启用用户「${n.username}」吗?启用后用户可正常登录。`,"启用用户",{confirmButtonText:"启用",cancelButtonText:"取消",type:"success"})}catch{return}try{await W(n.id),h.success("用户已启用"),await w(),await a?.({force:!0})}catch{}}async function S(n){try{await v.confirm(`确定禁用用户「${n.username}」吗?禁用后用户将无法登录。`,"禁用用户",{confirmButtonText:"禁用",cancelButtonText:"取消",type:"warning"})}catch{return}try{await Z(n.id),h.success("用户已禁用"),await w(),await a?.({force:!0})}catch{}}async function E(n){try{await v.confirm(`确定删除用户「${n.username}」吗?此操作将删除该用户的所有数据,不可恢复!`,"删除用户",{confirmButtonText:"删除",cancelButtonText:"取消",type:"error"})}catch{return}try{await H(n.id),h.success("用户已删除"),await w(),await a?.({force:!0})}catch{}}async function $(n,e){const i={7:"一周",30:"一个月",365:"一年",999999:"永久"}[e]||`${e}天`;try{await v.confirm(`确定为用户「${n.username}」开通 ${i} VIP 吗?`,"设置VIP",{confirmButtonText:"确认",cancelButtonText:"取消",type:"warning"})}catch{return}try{const d=await F(n.id,e);h.success(d?.message||"VIP设置成功"),await w(),await a?.({force:!0})}catch{}}async function N(n){try{await v.confirm(`确定移除用户「${n.username}」的 VIP 吗?`,"移除VIP",{confirmButtonText:"移除",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await G(n.id);h.success(e?.message||"VIP已移除"),await w(),await a?.({force:!0})}catch{}}async function M(n){let e;try{e=(await v.prompt("请输入新密码(至少8位且包含字母和数字)","重置密码",{confirmButtonText:"提交",cancelButtonText:"取消",inputType:"password",inputPlaceholder:"新密码",inputValidator:k=>D(k).ok,inputErrorMessage:"密码至少8位且包含字母和数字"})).value}catch{return}const i=D(e);if(!i.ok){h.error(i.message);return}try{await v.confirm(`确定将用户「${n.username}」的密码重置为该新密码吗?`,"二次确认",{confirmButtonText:"确认重置",cancelButtonText:"取消",type:"warning"})}catch{return}try{const d=await J(n.id,e);h.success(d?.message||"密码重置成功")}catch{}}return X(U),(n,e)=>{const i=_("el-table-column"),d=_("el-tag"),k=_("el-button"),T=_("el-dropdown-item"),j=_("el-dropdown-menu"),L=_("el-dropdown"),A=_("el-table"),R=_("el-card"),q=Y("loading");return r(),V("div",te,[e[11]||(e[11]=y("div",{class:"app-page-title"},[y("h2",null,"用户")],-1)),l(R,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:s(()=>[y("div",ne,[ee((r(),f(A,{data:x.value,style:{width:"100%"}},{default:s(()=>[l(i,{prop:"id",label:"ID",width:"80"}),l(i,{label:"用户","min-width":"240"},{default:s(({row:t})=>[y("div",se,[y("div",ae,[y("strong",null,b(t.username),1),u(t)?(r(),f(d,{key:0,type:"warning",effect:"light",size:"small"},{default:s(()=>[...e[0]||(e[0]=[c("VIP",-1)])]),_:1})):p("",!0)]),t.email?(r(),V("div",ie,b(t.email),1)):p("",!0),C(t)?(r(),V("div",re,b(C(t)),1)):p("",!0)])]),_:1}),l(i,{label:"状态",width:"120"},{default:s(({row:t})=>[l(d,{type:B(t.status).type,effect:"light"},{default:s(()=>[c(b(B(t.status).label),1)]),_:2},1032,["type"])]),_:1}),l(i,{label:"时间","min-width":"220"},{default:s(({row:t})=>[y("div",null,b(t.created_at),1),t.vip_expire_time?(r(),V("div",oe,"VIP到期: "+b(t.vip_expire_time),1)):p("",!0)]),_:1}),l(i,{label:"操作",width:"280",fixed:"right"},{default:s(({row:t})=>[y("div",le,[t.status==="rejected"?(r(),f(k,{key:0,type:"success",size:"small",onClick:m=>z(t)},{default:s(()=>[...e[1]||(e[1]=[c("启用",-1)])]),_:1},8,["onClick"])):(r(),f(k,{key:1,type:"warning",size:"small",onClick:m=>S(t)},{default:s(()=>[...e[2]||(e[2]=[c("禁用",-1)])]),_:1},8,["onClick"])),l(L,{trigger:"click"},{dropdown:s(()=>[l(j,null,{default:s(()=>[u(t)?p("",!0):(r(),f(T,{key:0,onClick:m=>$(t,7)},{default:s(()=>[...e[4]||(e[4]=[c("开通一周",-1)])]),_:1},8,["onClick"])),u(t)?p("",!0):(r(),f(T,{key:1,onClick:m=>$(t,30)},{default:s(()=>[...e[5]||(e[5]=[c("开通一月",-1)])]),_:1},8,["onClick"])),u(t)?p("",!0):(r(),f(T,{key:2,onClick:m=>$(t,365)},{default:s(()=>[...e[6]||(e[6]=[c("开通一年",-1)])]),_:1},8,["onClick"])),u(t)?p("",!0):(r(),f(T,{key:3,onClick:m=>$(t,999999)},{default:s(()=>[...e[7]||(e[7]=[c("永久VIP",-1)])]),_:1},8,["onClick"])),u(t)?(r(),f(T,{key:4,onClick:m=>N(t)},{default:s(()=>[...e[8]||(e[8]=[c("移除VIP",-1)])]),_:1},8,["onClick"])):p("",!0)]),_:2},1024)]),default:s(()=>[l(k,{size:"small"},{default:s(()=>[...e[3]||(e[3]=[c("VIP",-1)])]),_:1})]),_:2},1024),l(k,{size:"small",onClick:m=>M(t)},{default:s(()=>[...e[9]||(e[9]=[c("重置密码",-1)])]),_:1},8,["onClick"]),l(k,{type:"danger",size:"small",onClick:m=>E(t)},{default:s(()=>[...e[10]||(e[10]=[c("删除",-1)])]),_:1},8,["onClick"])])]),_:1})]),_:1},8,["data"])),[[q,o.value]])])]),_:1})])}}},ye=O(ce,[["__scopeId","data-v-11f4f270"]]);export{ye as default}; +import{a as W,r as Z,s as F,b as G,c as J,d as H,f as K}from"./users-B3RByMlV.js";import{_ as O}from"./index-BwP1dZnj.js";import{E as v,a as h}from"./vendor-element-B5S5pUKo.js";import{i as Q,r as P,o as X,aj as _,ap as Y,n as V,q as r,t as y,L as l,E as s,F as ee,D as f,G as p,J as b,I as c}from"./vendor-vue-CVxSw_oJ.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";function I(g){if(!g)return null;if(g instanceof Date)return g;let a=String(g).trim();if(!a)return null;/^\d{4}-\d{2}-\d{2}$/.test(a)&&(a=`${a}T00:00:00`);let o=a.includes("T")?a:a.replace(" ","T");o=o.replace(/\.(\d{3})\d+/,".$1"),/([zZ]|[+-]\d{2}:\d{2})$/.test(o)||(o=`${o}+08:00`);const u=new Date(o);return Number.isNaN(u.getTime())?null:u}function D(g){const a=String(g||"");if(!a)return{ok:!1,message:"密码不能为空"};if(a.length<8)return{ok:!1,message:"密码长度不能少于8个字符"};if(a.length>128)return{ok:!1,message:"密码长度不能超过128个字符"};const o=/[a-zA-Z]/.test(a),x=/\d/.test(a);return!o||!x?{ok:!1,message:"密码必须包含字母和数字"}:{ok:!0,message:""}}const te={class:"page-stack"},ne={class:"table-wrap"},se={class:"user-block"},ae={class:"user-main"},ie={key:0,class:"app-muted user-sub"},re={key:1,class:"vip-sub"},oe={key:0,class:"app-muted"},le={class:"actions"},ce={__name:"UsersPage",setup(g){const a=Q("refreshStats",null),o=P(!1),x=P([]);function u(n){const e=n?.vip_expire_time;if(!e)return!1;if(String(e).startsWith("2099-12-31"))return!0;const i=I(e);return i?i.getTime()>Date.now():!1}function C(n){const e=n?.vip_expire_time;if(!e||!u(n))return"";if(String(e).startsWith("2099-12-31"))return"永久VIP";const i=I(e);if(!i)return`到期: ${e}`;const d=Math.ceil((i.getTime()-Date.now())/(1e3*60*60*24));return`到期: ${e}(剩${d}天)`}function B(n){return n==="rejected"?{label:"禁用",type:"danger"}:{label:"正常",type:"success"}}async function w(){o.value=!0;try{x.value=await K()}catch{x.value=[]}finally{o.value=!1}}async function U(){await w()}async function z(n){try{await v.confirm(`确定启用用户「${n.username}」吗?启用后用户可正常登录。`,"启用用户",{confirmButtonText:"启用",cancelButtonText:"取消",type:"success"})}catch{return}try{await W(n.id),h.success("用户已启用"),await w(),await a?.({force:!0})}catch{}}async function S(n){try{await v.confirm(`确定禁用用户「${n.username}」吗?禁用后用户将无法登录。`,"禁用用户",{confirmButtonText:"禁用",cancelButtonText:"取消",type:"warning"})}catch{return}try{await Z(n.id),h.success("用户已禁用"),await w(),await a?.({force:!0})}catch{}}async function E(n){try{await v.confirm(`确定删除用户「${n.username}」吗?此操作将删除该用户的所有数据,不可恢复!`,"删除用户",{confirmButtonText:"删除",cancelButtonText:"取消",type:"error"})}catch{return}try{await H(n.id),h.success("用户已删除"),await w(),await a?.({force:!0})}catch{}}async function $(n,e){const i={7:"一周",30:"一个月",365:"一年",999999:"永久"}[e]||`${e}天`;try{await v.confirm(`确定为用户「${n.username}」开通 ${i} VIP 吗?`,"设置VIP",{confirmButtonText:"确认",cancelButtonText:"取消",type:"warning"})}catch{return}try{const d=await F(n.id,e);h.success(d?.message||"VIP设置成功"),await w(),await a?.({force:!0})}catch{}}async function N(n){try{await v.confirm(`确定移除用户「${n.username}」的 VIP 吗?`,"移除VIP",{confirmButtonText:"移除",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await G(n.id);h.success(e?.message||"VIP已移除"),await w(),await a?.({force:!0})}catch{}}async function M(n){let e;try{e=(await v.prompt("请输入新密码(至少8位且包含字母和数字)","重置密码",{confirmButtonText:"提交",cancelButtonText:"取消",inputType:"password",inputPlaceholder:"新密码",inputValidator:k=>D(k).ok,inputErrorMessage:"密码至少8位且包含字母和数字"})).value}catch{return}const i=D(e);if(!i.ok){h.error(i.message);return}try{await v.confirm(`确定将用户「${n.username}」的密码重置为该新密码吗?`,"二次确认",{confirmButtonText:"确认重置",cancelButtonText:"取消",type:"warning"})}catch{return}try{const d=await J(n.id,e);h.success(d?.message||"密码重置成功")}catch{}}return X(U),(n,e)=>{const i=_("el-table-column"),d=_("el-tag"),k=_("el-button"),T=_("el-dropdown-item"),j=_("el-dropdown-menu"),L=_("el-dropdown"),A=_("el-table"),R=_("el-card"),q=Y("loading");return r(),V("div",te,[e[11]||(e[11]=y("div",{class:"app-page-title"},[y("h2",null,"用户")],-1)),l(R,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:s(()=>[y("div",ne,[ee((r(),f(A,{data:x.value,style:{width:"100%"}},{default:s(()=>[l(i,{prop:"id",label:"ID",width:"80"}),l(i,{label:"用户","min-width":"240"},{default:s(({row:t})=>[y("div",se,[y("div",ae,[y("strong",null,b(t.username),1),u(t)?(r(),f(d,{key:0,type:"warning",effect:"light",size:"small"},{default:s(()=>[...e[0]||(e[0]=[c("VIP",-1)])]),_:1})):p("",!0)]),t.email?(r(),V("div",ie,b(t.email),1)):p("",!0),C(t)?(r(),V("div",re,b(C(t)),1)):p("",!0)])]),_:1}),l(i,{label:"状态",width:"120"},{default:s(({row:t})=>[l(d,{type:B(t.status).type,effect:"light"},{default:s(()=>[c(b(B(t.status).label),1)]),_:2},1032,["type"])]),_:1}),l(i,{label:"时间","min-width":"220"},{default:s(({row:t})=>[y("div",null,b(t.created_at),1),t.vip_expire_time?(r(),V("div",oe,"VIP到期: "+b(t.vip_expire_time),1)):p("",!0)]),_:1}),l(i,{label:"操作",width:"280",fixed:"right"},{default:s(({row:t})=>[y("div",le,[t.status==="rejected"?(r(),f(k,{key:0,type:"success",size:"small",onClick:m=>z(t)},{default:s(()=>[...e[1]||(e[1]=[c("启用",-1)])]),_:1},8,["onClick"])):(r(),f(k,{key:1,type:"warning",size:"small",onClick:m=>S(t)},{default:s(()=>[...e[2]||(e[2]=[c("禁用",-1)])]),_:1},8,["onClick"])),l(L,{trigger:"click"},{dropdown:s(()=>[l(j,null,{default:s(()=>[u(t)?p("",!0):(r(),f(T,{key:0,onClick:m=>$(t,7)},{default:s(()=>[...e[4]||(e[4]=[c("开通一周",-1)])]),_:1},8,["onClick"])),u(t)?p("",!0):(r(),f(T,{key:1,onClick:m=>$(t,30)},{default:s(()=>[...e[5]||(e[5]=[c("开通一月",-1)])]),_:1},8,["onClick"])),u(t)?p("",!0):(r(),f(T,{key:2,onClick:m=>$(t,365)},{default:s(()=>[...e[6]||(e[6]=[c("开通一年",-1)])]),_:1},8,["onClick"])),u(t)?p("",!0):(r(),f(T,{key:3,onClick:m=>$(t,999999)},{default:s(()=>[...e[7]||(e[7]=[c("永久VIP",-1)])]),_:1},8,["onClick"])),u(t)?(r(),f(T,{key:4,onClick:m=>N(t)},{default:s(()=>[...e[8]||(e[8]=[c("移除VIP",-1)])]),_:1},8,["onClick"])):p("",!0)]),_:2},1024)]),default:s(()=>[l(k,{size:"small"},{default:s(()=>[...e[3]||(e[3]=[c("VIP",-1)])]),_:1})]),_:2},1024),l(k,{size:"small",onClick:m=>M(t)},{default:s(()=>[...e[9]||(e[9]=[c("重置密码",-1)])]),_:1},8,["onClick"]),l(k,{type:"danger",size:"small",onClick:m=>E(t)},{default:s(()=>[...e[10]||(e[10]=[c("删除",-1)])]),_:1},8,["onClick"])])]),_:1})]),_:1},8,["data"])),[[q,o.value]])])]),_:1})])}}},ye=O(ce,[["__scopeId","data-v-11f4f270"]]);export{ye as default}; diff --git a/static/admin/assets/email-DX46gPSl.js b/static/admin/assets/email-BoZeA2tF.js similarity index 88% rename from static/admin/assets/email-DX46gPSl.js rename to static/admin/assets/email-BoZeA2tF.js index f0f4010..0083cfc 100644 --- a/static/admin/assets/email-DX46gPSl.js +++ b/static/admin/assets/email-BoZeA2tF.js @@ -1 +1 @@ -import{c as s,a as e}from"./index-BMIn4N2u.js";const n=s(async()=>{const{data:a}=await e.get("/email/stats");return a},1e4);async function i(){const{data:a}=await e.get("/email/settings");return a}async function r(a){const{data:t}=await e.post("/email/settings",a);return n.clear(),t}async function o(a={}){return n.run(a)}async function l(a){const{data:t}=await e.get("/email/logs",{params:a});return t}async function u(a){const{data:t}=await e.post("/email/logs/cleanup",{days:a});return n.clear(),t}export{l as a,i as b,u as c,o as f,r as u}; +import{c as s,a as e}from"./index-BwP1dZnj.js";const n=s(async()=>{const{data:a}=await e.get("/email/stats");return a},1e4);async function i(){const{data:a}=await e.get("/email/settings");return a}async function r(a){const{data:t}=await e.post("/email/settings",a);return n.clear(),t}async function o(a={}){return n.run(a)}async function l(a){const{data:t}=await e.get("/email/logs",{params:a});return t}async function u(a){const{data:t}=await e.post("/email/logs/cleanup",{days:a});return n.clear(),t}export{l as a,i as b,u as c,o as f,r as u}; diff --git a/static/admin/assets/index-BMIn4N2u.js b/static/admin/assets/index-BwP1dZnj.js similarity index 89% rename from static/admin/assets/index-BMIn4N2u.js rename to static/admin/assets/index-BwP1dZnj.js index 76ee53b..eb4c891 100644 --- a/static/admin/assets/index-BMIn4N2u.js +++ b/static/admin/assets/index-BwP1dZnj.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ReportPage-T1JNMZd3.js","./vendor-element-B5S5pUKo.js","./vendor-vue-CVxSw_oJ.js","./vendor-misc-BeoNyvBp.js","./vendor-element-C68yOrAy.css","./email-DX46gPSl.js","./tasks-DaPM55hg.js","./system-CeJP0y2Z.js","./MetricGrid-R-_JZS_i.js","./MetricGrid-yP_dkP6X.css","./vendor-axios-B9ygI19o.js","./ReportPage-BCQBCnjY.css","./UsersPage-o8CptFMp.js","./users-DoPbHko8.js","./UsersPage-BNDnhJe0.css","./FeedbacksPage-BgrVN8tx.js","./FeedbacksPage-mrXjCiV2.css","./LogsPage-D86va6oN.js","./LogsPage-D1bozCEo.css","./AnnouncementsPage-BY4ToZ0K.js","./AnnouncementsPage-DOwZaaOu.css","./EmailPage-DLwV2mnS.js","./EmailPage-BmPCDPYC.css","./SecurityPage-BtFrxpZs.js","./SecurityPage-DN76ndc_.css","./SystemPage-eaCcaVxM.js","./SystemPage-CfMGkvmW.css","./SettingsPage-BFVngq9z.js","./SettingsPage-qQfORNZC.css"])))=>i.map(i=>d[i]); -import{aj as p,D as S,q as _,ax as _e,ay as he,r as L,c as Y,o as ye,R as ge,E as r,G as z,L as m,t as f,n as D,K as W,a3 as X,H as J,J as A,I as Q,az as be,p as V,aA as ve,aB as we,as as Ee}from"./vendor-vue-CVxSw_oJ.js";import{E as ne,a as ae,d as Se,u as Te,c as ke,l as Pe,b as Re,m as Le,e as Ae,t as Oe,s as xe,i as Be,z as Ne}from"./vendor-element-B5S5pUKo.js";import{a as De}from"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))s(n);new MutationObserver(n=>{for(const o of n)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function a(n){const o={};return n.integrity&&(o.integrity=n.integrity),n.referrerPolicy&&(o.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?o.credentials="include":n.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(n){if(n.ep)return;n.ep=!0;const o=a(n);fetch(n.href,o)}})();const se=(e,t)=>{const a=e.__vccOpts||e;for(const[s,n]of t)a[s]=n;return a},Ce={};function Ve(e,t){const a=p("RouterView");return _(),S(a)}const Me=se(Ce,[["render",Ve]]),Ie="modulepreload",$e=function(e,t){return new URL(e,t).href},Z={},T=function(t,a,s){let n=Promise.resolve();if(a&&a.length>0){let k=function(d){return Promise.all(d.map(h=>Promise.resolve(h).then(w=>({status:"fulfilled",value:w}),w=>({status:"rejected",reason:w}))))};const i=document.getElementsByTagName("link"),u=document.querySelector("meta[property=csp-nonce]"),v=u?.nonce||u?.getAttribute("nonce");n=k(a.map(d=>{if(d=$e(d,s),d in Z)return;Z[d]=!0;const h=d.endsWith(".css"),w=h?'[rel="stylesheet"]':"";if(s)for(let P=i.length-1;P>=0;P--){const E=i[P];if(E.href===d&&(!h||E.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${d}"]${w}`))return;const y=document.createElement("link");if(y.rel=h?"stylesheet":Ie,h||(y.as="script"),y.crossOrigin="",y.href=d,v&&y.setAttribute("nonce",v),document.head.appendChild(y),h)return new Promise((P,E)=>{y.addEventListener("load",P),y.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${d}`)))})}))}function o(i){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=i,window.dispatchEvent(u),!u.defaultPrevented)throw i}return n.then(i=>{for(const u of i||[])u.status==="rejected"&&o(u.reason);return t().catch(o)})};let ee="",te=0;const Fe=new Set([408,425,429,500,502,503,504]),Ue=1,qe=300;function O(e,t,a=1500){const s=Date.now();e===ee&&s-te=Ue)return!1;const s=String(e?.code||"");if(s==="ECONNABORTED"||s==="ERR_NETWORK")return!0;const n=Number(e?.response?.status||0);return Fe.has(n)}function He(e){return new Promise(t=>{window.setTimeout(t,Math.max(0,Number(e||0)))})}async function Ye(e,t){const a=e?.config||{},s=Number(a.__retry_count||0);a.__retry_count=s+1;const n=qe*(s+1);return await He(n),t.request(a)}const b=De.create({baseURL:"/yuyx/api",timeout:3e4,withCredentials:!0});let x=null;async function ze(){return x||(x=ne.prompt("请输入管理员密码进行二次确认","安全确认",{inputType:"password",inputPlaceholder:"管理员密码",confirmButtonText:"确认",cancelButtonText:"取消",inputValidator:e=>!!String(e||"").trim(),inputErrorMessage:"密码不能为空"}).then(async e=>{const t=String(e.value||"").trim();await b.post("/admin/reauth",{password:t}),ae.success("已通过安全确认")}).finally(()=>{x=null}),x)}b.interceptors.request.use(e=>{const t=String(e?.method||"GET").toUpperCase();if(!["GET","HEAD","OPTIONS"].includes(t)){const a=Ge("csrf_token");a&&(e.headers=e.headers||{},e.headers["X-CSRF-Token"]=a)}return e});b.interceptors.response.use(e=>e,async e=>{const t=e?.response?.status,a=e?.response?.data,s=a?.error||a?.message||e?.message||"请求失败",n=!!e?.config?.__silent;if(a?.code==="reauth_required"&&e?.config&&!e.config.__reauth_retry)try{return e.config.__reauth_retry=!0,await ze(),b.request(e.config)}catch{return Promise.reject(e)}return je(e)?Ye(e,b):(t===401?(n||O("401",s,3e3),(window.location?.pathname||"").startsWith("/yuyx")||(window.location.href="/yuyx")):t===403?n||O("403",s,5e3):t?n||O(`http:${t}:${s}`,s):e?.code==="ECONNABORTED"?n||O("timeout","请求超时",3e3):n||O(`net:${s}`,s,3e3),Promise.reject(e))});function oe(e,t=0){let a=!1,s=null,n=0,o=null;async function i(v={}){const k=!!v?.force,d=Date.now();return!k&&a&&de()).then(h=>{s=h,a=!0;const w=Math.max(0,Number(t)||0);return n=Date.now()+w,h}).finally(()=>{o=null})),o)}function u(){a=!1,s=null,n=0,o=null}return{run:i,clear:u}}const We=1e4,re=oe(async()=>{const{data:e}=await b.get("/feedbacks",{params:{limit:1,offset:0}});return e?.stats},We);async function Rt(e=""){const{data:t}=await b.get("/feedbacks",{params:e?{status:e}:{}});return t}async function Xe(e={}){return re.run(e)}function M(){re.clear()}async function Lt(e,t){const{data:a}=await b.post(`/feedbacks/${e}/reply`,{reply:t});return M(),a}async function At(e){const{data:t}=await b.post(`/feedbacks/${e}/close`);return M(),t}async function Ot(e){const{data:t}=await b.delete(`/feedbacks/${e}`);return M(),t}const Je=15e3,Qe=oe(async()=>{const{data:e}=await b.get("/stats");return e},Je);async function Ze(e={}){return Qe.run(e)}const et={class:"menu-label"},tt={key:1,class:"menu-label"},nt={class:"header-left"},at={class:"header-right"},st={class:"admin-name"},ot={class:"main-shell"},rt={class:"menu-label"},ct={key:1,class:"menu-label"},lt=6e4,it=18e4,ut={__name:"AdminLayout",setup(e){const t=_e(),a=he(),s=L({}),n=Y(()=>s.value?.admin_username||"");async function o(g={}){s.value=await Ze(g)}const i=L(!1),u=L(0);let v=null;async function k(g=null){if(g&&typeof g=="object"){Object.prototype.hasOwnProperty.call(g,"pendingFeedbacks")&&(u.value=Number(g.pendingFeedbacks||0));return}if(!i.value){i.value=!0;try{const c=await Xe();u.value=Number(c?.pending||0)}finally{i.value=!1}}}function d(){return typeof document>"u"?!1:document.visibilityState==="hidden"}function h(){return d()?it:lt}function w(){v&&(window.clearTimeout(v),v=null)}function y(){w(),v=window.setTimeout(async()=>{v=null,await k().catch(()=>{}),y()},h())}function P(){y()}V("refreshStats",o),V("adminStats",s),V("refreshNavBadges",k);const E=L(!1),R=L(!1);let B;function C(){E.value=!!B?.matches,E.value||(R.value=!1)}ye(async()=>{B=window.matchMedia("(max-width: 768px)"),B.addEventListener?.("change",C),C(),await o(),await k(),y(),window.addEventListener("visibilitychange",P)}),ge(()=>{B?.removeEventListener?.("change",C),w(),window.removeEventListener("visibilitychange",P)});const I=[{path:"/reports",label:"报表",icon:Se},{path:"/users",label:"用户",icon:Te},{path:"/feedbacks",label:"反馈",icon:ke,badgeKey:"feedbacks"},{path:"/logs",label:"任务日志",icon:Pe},{path:"/announcements",label:"公告",icon:Re},{path:"/email",label:"邮件",icon:Le},{path:"/security",label:"安全防护",icon:Ae},{path:"/system",label:"系统配置",icon:Oe},{path:"/settings",label:"设置",icon:xe}],$=Y(()=>t.path);function N(g){return g?.badgeKey&&g.badgeKey==="feedbacks"?Number(u.value||0):0}async function ce(){try{await ne.confirm("确定退出管理员登录吗?","退出登录",{confirmButtonText:"退出",cancelButtonText:"取消",type:"warning"})}catch{return}try{await b.post("/logout")}finally{window.location.href="/yuyx"}}async function F(g){await a.push(g),R.value=!1}return(g,c)=>{const U=p("el-icon"),q=p("el-badge"),G=p("el-menu-item"),K=p("el-menu"),le=p("el-aside"),j=p("el-button"),ie=p("el-header"),ue=p("RouterView"),de=p("el-skeleton"),fe=p("el-card"),me=p("el-main"),H=p("el-container"),pe=p("el-drawer");return _(),S(H,{class:"layout-root"},{default:r(()=>[E.value?z("",!0):(_(),S(le,{key:0,width:"220px",class:"layout-aside"},{default:r(()=>[c[2]||(c[2]=f("div",{class:"brand"},[f("div",{class:"brand-title"},"后台管理"),f("div",{class:"brand-sub app-muted"},"知识管理平台")],-1)),m(K,{"default-active":$.value,class:"aside-menu",router:"",onSelect:F},{default:r(()=>[(_(),D(W,null,X(I,l=>m(G,{key:l.path,index:l.path},{default:r(()=>[m(U,null,{default:r(()=>[(_(),S(J(l.icon)))]),_:2},1024),N(l)>0?(_(),S(q,{key:0,value:N(l),max:99,class:"menu-badge"},{default:r(()=>[f("span",et,A(l.label),1)]),_:2},1032,["value"])):(_(),D("span",tt,A(l.label),1))]),_:2},1032,["index"])),64))]),_:1},8,["default-active"])]),_:1})),m(H,null,{default:r(()=>[m(ie,{class:"layout-header"},{default:r(()=>[f("div",nt,[E.value?(_(),S(j,{key:0,text:"",class:"header-menu-btn",onClick:c[0]||(c[0]=l=>R.value=!0)},{default:r(()=>[...c[3]||(c[3]=[Q(" 菜单 ",-1)])]),_:1})):z("",!0),c[4]||(c[4]=f("div",{class:"header-title"},"后台管理系统",-1))]),f("div",at,[f("div",st,[c[5]||(c[5]=f("span",{class:"app-muted"},"管理员",-1)),f("strong",null,A(n.value||"-"),1)]),m(j,{type:"primary",plain:"",class:"logout-btn",onClick:ce},{default:r(()=>[...c[6]||(c[6]=[Q("退出",-1)])]),_:1})])]),_:1}),m(me,{class:"layout-main"},{default:r(()=>[f("div",ot,[(_(),S(be,null,{default:r(()=>[m(ue)]),fallback:r(()=>[m(fe,{shadow:"never","body-style":{padding:"16px"},class:"fallback-card"},{default:r(()=>[m(de,{rows:5,animated:""})]),_:1})]),_:1}))])]),_:1})]),_:1}),m(pe,{modelValue:R.value,"onUpdate:modelValue":c[1]||(c[1]=l=>R.value=l),size:"min(82vw, 280px)",direction:"ltr","with-header":!1},{default:r(()=>[c[7]||(c[7]=f("div",{class:"drawer-brand"},[f("div",{class:"brand-title"},"后台管理"),f("div",{class:"brand-sub app-muted"},"知识管理平台")],-1)),m(K,{"default-active":$.value,class:"aside-menu",router:"",onSelect:F},{default:r(()=>[(_(),D(W,null,X(I,l=>m(G,{key:l.path,index:l.path},{default:r(()=>[m(U,null,{default:r(()=>[(_(),S(J(l.icon)))]),_:2},1024),N(l)>0?(_(),S(q,{key:0,value:N(l),max:99,class:"menu-badge"},{default:r(()=>[f("span",rt,A(l.label),1)]),_:2},1032,["value"])):(_(),D("span",ct,A(l.label),1))]),_:2},1032,["index"])),64))]),_:1},8,["default-active"])]),_:1},8,["modelValue"])]),_:1})}}},dt=se(ut,[["__scopeId","data-v-62384b9b"]]),ft=()=>T(()=>import("./ReportPage-T1JNMZd3.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url),mt=()=>T(()=>import("./UsersPage-o8CptFMp.js"),__vite__mapDeps([12,13,1,2,3,4,10,14]),import.meta.url),pt=()=>T(()=>import("./FeedbacksPage-BgrVN8tx.js"),__vite__mapDeps([15,8,2,9,1,3,4,10,16]),import.meta.url),_t=()=>T(()=>import("./LogsPage-D86va6oN.js"),__vite__mapDeps([17,13,6,1,2,3,4,10,18]),import.meta.url),ht=()=>T(()=>import("./AnnouncementsPage-BY4ToZ0K.js"),__vite__mapDeps([19,1,2,3,4,10,20]),import.meta.url),yt=()=>T(()=>import("./EmailPage-DLwV2mnS.js"),__vite__mapDeps([21,5,8,2,9,1,3,4,10,22]),import.meta.url),gt=()=>T(()=>import("./SecurityPage-BtFrxpZs.js"),__vite__mapDeps([23,8,2,9,1,3,4,10,24]),import.meta.url),bt=()=>T(()=>import("./SystemPage-eaCcaVxM.js"),__vite__mapDeps([25,7,1,2,3,4,10,26]),import.meta.url),vt=()=>T(()=>import("./SettingsPage-BFVngq9z.js"),__vite__mapDeps([27,1,2,3,4,10,28]),import.meta.url),wt=[{path:"/",component:dt,children:[{path:"",redirect:"/reports"},{path:"/pending",redirect:"/reports"},{path:"/stats",redirect:"/reports"},{path:"/reports",name:"reports",component:ft},{path:"/users",name:"users",component:mt},{path:"/feedbacks",name:"feedbacks",component:pt},{path:"/logs",name:"logs",component:_t},{path:"/announcements",name:"announcements",component:ht},{path:"/email",name:"email",component:yt},{path:"/security",name:"security",component:gt},{path:"/system",name:"system",component:bt},{path:"/settings",name:"settings",component:vt}]}],Et=ve({history:we(),routes:wt});Ee(Me).use(Et).use(Be,{locale:Ne}).mount("#app");export{se as _,b as a,Rt as b,oe as c,At as d,Ot as e,Xe as f,Lt as r}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ReportPage-mvWNEhXv.js","./vendor-element-B5S5pUKo.js","./vendor-vue-CVxSw_oJ.js","./vendor-misc-BeoNyvBp.js","./vendor-element-C68yOrAy.css","./email-BoZeA2tF.js","./tasks-D5YLLzN-.js","./system-Dluvi0rE.js","./MetricGrid-COFDfeGs.js","./MetricGrid-yP_dkP6X.css","./vendor-axios-B9ygI19o.js","./ReportPage-BCQBCnjY.css","./UsersPage-CMgBpiWX.js","./users-B3RByMlV.js","./UsersPage-BNDnhJe0.css","./FeedbacksPage-DadToBbu.js","./FeedbacksPage-mrXjCiV2.css","./LogsPage-CsJ25c1g.js","./LogsPage-D1bozCEo.css","./AnnouncementsPage-BZcUuw5h.js","./AnnouncementsPage-DOwZaaOu.css","./EmailPage-2qqiYZlu.js","./EmailPage-BmPCDPYC.css","./SecurityPage-DgYgSgTK.js","./SecurityPage-DN76ndc_.css","./SystemPage-D_lad_h_.js","./SystemPage-CfMGkvmW.css","./SettingsPage-za1oQElD.js","./SettingsPage-BAa-Qu3q.css"])))=>i.map(i=>d[i]); +import{aj as p,D as S,q as _,ax as _e,ay as he,r as L,c as Y,o as ye,R as ge,E as r,G as z,L as m,t as f,n as D,K as W,a3 as X,H as J,J as A,I as Q,az as be,p as V,aA as ve,aB as we,as as Ee}from"./vendor-vue-CVxSw_oJ.js";import{E as ne,a as ae,d as Se,u as Te,c as ke,l as Pe,b as Re,m as Le,e as Ae,t as Oe,s as xe,i as Be,z as Ne}from"./vendor-element-B5S5pUKo.js";import{a as De}from"./vendor-axios-B9ygI19o.js";import"./vendor-misc-BeoNyvBp.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))s(n);new MutationObserver(n=>{for(const o of n)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function a(n){const o={};return n.integrity&&(o.integrity=n.integrity),n.referrerPolicy&&(o.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?o.credentials="include":n.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(n){if(n.ep)return;n.ep=!0;const o=a(n);fetch(n.href,o)}})();const se=(e,t)=>{const a=e.__vccOpts||e;for(const[s,n]of t)a[s]=n;return a},Ce={};function Ve(e,t){const a=p("RouterView");return _(),S(a)}const Me=se(Ce,[["render",Ve]]),Ie="modulepreload",$e=function(e,t){return new URL(e,t).href},Z={},T=function(t,a,s){let n=Promise.resolve();if(a&&a.length>0){let k=function(d){return Promise.all(d.map(h=>Promise.resolve(h).then(w=>({status:"fulfilled",value:w}),w=>({status:"rejected",reason:w}))))};const i=document.getElementsByTagName("link"),u=document.querySelector("meta[property=csp-nonce]"),v=u?.nonce||u?.getAttribute("nonce");n=k(a.map(d=>{if(d=$e(d,s),d in Z)return;Z[d]=!0;const h=d.endsWith(".css"),w=h?'[rel="stylesheet"]':"";if(s)for(let P=i.length-1;P>=0;P--){const E=i[P];if(E.href===d&&(!h||E.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${d}"]${w}`))return;const y=document.createElement("link");if(y.rel=h?"stylesheet":Ie,h||(y.as="script"),y.crossOrigin="",y.href=d,v&&y.setAttribute("nonce",v),document.head.appendChild(y),h)return new Promise((P,E)=>{y.addEventListener("load",P),y.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${d}`)))})}))}function o(i){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=i,window.dispatchEvent(u),!u.defaultPrevented)throw i}return n.then(i=>{for(const u of i||[])u.status==="rejected"&&o(u.reason);return t().catch(o)})};let ee="",te=0;const Fe=new Set([408,425,429,500,502,503,504]),Ue=1,qe=300;function O(e,t,a=1500){const s=Date.now();e===ee&&s-te=Ue)return!1;const s=String(e?.code||"");if(s==="ECONNABORTED"||s==="ERR_NETWORK")return!0;const n=Number(e?.response?.status||0);return Fe.has(n)}function He(e){return new Promise(t=>{window.setTimeout(t,Math.max(0,Number(e||0)))})}async function Ye(e,t){const a=e?.config||{},s=Number(a.__retry_count||0);a.__retry_count=s+1;const n=qe*(s+1);return await He(n),t.request(a)}const b=De.create({baseURL:"/yuyx/api",timeout:3e4,withCredentials:!0});let x=null;async function ze(){return x||(x=ne.prompt("请输入管理员密码进行二次确认","安全确认",{inputType:"password",inputPlaceholder:"管理员密码",confirmButtonText:"确认",cancelButtonText:"取消",inputValidator:e=>!!String(e||"").trim(),inputErrorMessage:"密码不能为空"}).then(async e=>{const t=String(e.value||"").trim();await b.post("/admin/reauth",{password:t}),ae.success("已通过安全确认")}).finally(()=>{x=null}),x)}b.interceptors.request.use(e=>{const t=String(e?.method||"GET").toUpperCase();if(!["GET","HEAD","OPTIONS"].includes(t)){const a=Ge("csrf_token");a&&(e.headers=e.headers||{},e.headers["X-CSRF-Token"]=a)}return e});b.interceptors.response.use(e=>e,async e=>{const t=e?.response?.status,a=e?.response?.data,s=a?.error||a?.message||e?.message||"请求失败",n=!!e?.config?.__silent;if(a?.code==="reauth_required"&&e?.config&&!e.config.__reauth_retry)try{return e.config.__reauth_retry=!0,await ze(),b.request(e.config)}catch{return Promise.reject(e)}return je(e)?Ye(e,b):(t===401?(n||O("401",s,3e3),(window.location?.pathname||"").startsWith("/yuyx")||(window.location.href="/yuyx")):t===403?n||O("403",s,5e3):t?n||O(`http:${t}:${s}`,s):e?.code==="ECONNABORTED"?n||O("timeout","请求超时",3e3):n||O(`net:${s}`,s,3e3),Promise.reject(e))});function oe(e,t=0){let a=!1,s=null,n=0,o=null;async function i(v={}){const k=!!v?.force,d=Date.now();return!k&&a&&de()).then(h=>{s=h,a=!0;const w=Math.max(0,Number(t)||0);return n=Date.now()+w,h}).finally(()=>{o=null})),o)}function u(){a=!1,s=null,n=0,o=null}return{run:i,clear:u}}const We=1e4,re=oe(async()=>{const{data:e}=await b.get("/feedbacks",{params:{limit:1,offset:0}});return e?.stats},We);async function Rt(e=""){const{data:t}=await b.get("/feedbacks",{params:e?{status:e}:{}});return t}async function Xe(e={}){return re.run(e)}function M(){re.clear()}async function Lt(e,t){const{data:a}=await b.post(`/feedbacks/${e}/reply`,{reply:t});return M(),a}async function At(e){const{data:t}=await b.post(`/feedbacks/${e}/close`);return M(),t}async function Ot(e){const{data:t}=await b.delete(`/feedbacks/${e}`);return M(),t}const Je=15e3,Qe=oe(async()=>{const{data:e}=await b.get("/stats");return e},Je);async function Ze(e={}){return Qe.run(e)}const et={class:"menu-label"},tt={key:1,class:"menu-label"},nt={class:"header-left"},at={class:"header-right"},st={class:"admin-name"},ot={class:"main-shell"},rt={class:"menu-label"},ct={key:1,class:"menu-label"},lt=6e4,it=18e4,ut={__name:"AdminLayout",setup(e){const t=_e(),a=he(),s=L({}),n=Y(()=>s.value?.admin_username||"");async function o(g={}){s.value=await Ze(g)}const i=L(!1),u=L(0);let v=null;async function k(g=null){if(g&&typeof g=="object"){Object.prototype.hasOwnProperty.call(g,"pendingFeedbacks")&&(u.value=Number(g.pendingFeedbacks||0));return}if(!i.value){i.value=!0;try{const c=await Xe();u.value=Number(c?.pending||0)}finally{i.value=!1}}}function d(){return typeof document>"u"?!1:document.visibilityState==="hidden"}function h(){return d()?it:lt}function w(){v&&(window.clearTimeout(v),v=null)}function y(){w(),v=window.setTimeout(async()=>{v=null,await k().catch(()=>{}),y()},h())}function P(){y()}V("refreshStats",o),V("adminStats",s),V("refreshNavBadges",k);const E=L(!1),R=L(!1);let B;function C(){E.value=!!B?.matches,E.value||(R.value=!1)}ye(async()=>{B=window.matchMedia("(max-width: 768px)"),B.addEventListener?.("change",C),C(),await o(),await k(),y(),window.addEventListener("visibilitychange",P)}),ge(()=>{B?.removeEventListener?.("change",C),w(),window.removeEventListener("visibilitychange",P)});const I=[{path:"/reports",label:"报表",icon:Se},{path:"/users",label:"用户",icon:Te},{path:"/feedbacks",label:"反馈",icon:ke,badgeKey:"feedbacks"},{path:"/logs",label:"任务日志",icon:Pe},{path:"/announcements",label:"公告",icon:Re},{path:"/email",label:"邮件",icon:Le},{path:"/security",label:"安全防护",icon:Ae},{path:"/system",label:"系统配置",icon:Oe},{path:"/settings",label:"设置",icon:xe}],$=Y(()=>t.path);function N(g){return g?.badgeKey&&g.badgeKey==="feedbacks"?Number(u.value||0):0}async function ce(){try{await ne.confirm("确定退出管理员登录吗?","退出登录",{confirmButtonText:"退出",cancelButtonText:"取消",type:"warning"})}catch{return}try{await b.post("/logout")}finally{window.location.href="/yuyx"}}async function F(g){await a.push(g),R.value=!1}return(g,c)=>{const U=p("el-icon"),q=p("el-badge"),G=p("el-menu-item"),K=p("el-menu"),le=p("el-aside"),j=p("el-button"),ie=p("el-header"),ue=p("RouterView"),de=p("el-skeleton"),fe=p("el-card"),me=p("el-main"),H=p("el-container"),pe=p("el-drawer");return _(),S(H,{class:"layout-root"},{default:r(()=>[E.value?z("",!0):(_(),S(le,{key:0,width:"220px",class:"layout-aside"},{default:r(()=>[c[2]||(c[2]=f("div",{class:"brand"},[f("div",{class:"brand-title"},"后台管理"),f("div",{class:"brand-sub app-muted"},"知识管理平台")],-1)),m(K,{"default-active":$.value,class:"aside-menu",router:"",onSelect:F},{default:r(()=>[(_(),D(W,null,X(I,l=>m(G,{key:l.path,index:l.path},{default:r(()=>[m(U,null,{default:r(()=>[(_(),S(J(l.icon)))]),_:2},1024),N(l)>0?(_(),S(q,{key:0,value:N(l),max:99,class:"menu-badge"},{default:r(()=>[f("span",et,A(l.label),1)]),_:2},1032,["value"])):(_(),D("span",tt,A(l.label),1))]),_:2},1032,["index"])),64))]),_:1},8,["default-active"])]),_:1})),m(H,null,{default:r(()=>[m(ie,{class:"layout-header"},{default:r(()=>[f("div",nt,[E.value?(_(),S(j,{key:0,text:"",class:"header-menu-btn",onClick:c[0]||(c[0]=l=>R.value=!0)},{default:r(()=>[...c[3]||(c[3]=[Q(" 菜单 ",-1)])]),_:1})):z("",!0),c[4]||(c[4]=f("div",{class:"header-title"},"后台管理系统",-1))]),f("div",at,[f("div",st,[c[5]||(c[5]=f("span",{class:"app-muted"},"管理员",-1)),f("strong",null,A(n.value||"-"),1)]),m(j,{type:"primary",plain:"",class:"logout-btn",onClick:ce},{default:r(()=>[...c[6]||(c[6]=[Q("退出",-1)])]),_:1})])]),_:1}),m(me,{class:"layout-main"},{default:r(()=>[f("div",ot,[(_(),S(be,null,{default:r(()=>[m(ue)]),fallback:r(()=>[m(fe,{shadow:"never","body-style":{padding:"16px"},class:"fallback-card"},{default:r(()=>[m(de,{rows:5,animated:""})]),_:1})]),_:1}))])]),_:1})]),_:1}),m(pe,{modelValue:R.value,"onUpdate:modelValue":c[1]||(c[1]=l=>R.value=l),size:"min(82vw, 280px)",direction:"ltr","with-header":!1},{default:r(()=>[c[7]||(c[7]=f("div",{class:"drawer-brand"},[f("div",{class:"brand-title"},"后台管理"),f("div",{class:"brand-sub app-muted"},"知识管理平台")],-1)),m(K,{"default-active":$.value,class:"aside-menu",router:"",onSelect:F},{default:r(()=>[(_(),D(W,null,X(I,l=>m(G,{key:l.path,index:l.path},{default:r(()=>[m(U,null,{default:r(()=>[(_(),S(J(l.icon)))]),_:2},1024),N(l)>0?(_(),S(q,{key:0,value:N(l),max:99,class:"menu-badge"},{default:r(()=>[f("span",rt,A(l.label),1)]),_:2},1032,["value"])):(_(),D("span",ct,A(l.label),1))]),_:2},1032,["index"])),64))]),_:1},8,["default-active"])]),_:1},8,["modelValue"])]),_:1})}}},dt=se(ut,[["__scopeId","data-v-62384b9b"]]),ft=()=>T(()=>import("./ReportPage-mvWNEhXv.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url),mt=()=>T(()=>import("./UsersPage-CMgBpiWX.js"),__vite__mapDeps([12,13,1,2,3,4,10,14]),import.meta.url),pt=()=>T(()=>import("./FeedbacksPage-DadToBbu.js"),__vite__mapDeps([15,8,2,9,1,3,4,10,16]),import.meta.url),_t=()=>T(()=>import("./LogsPage-CsJ25c1g.js"),__vite__mapDeps([17,13,6,1,2,3,4,10,18]),import.meta.url),ht=()=>T(()=>import("./AnnouncementsPage-BZcUuw5h.js"),__vite__mapDeps([19,1,2,3,4,10,20]),import.meta.url),yt=()=>T(()=>import("./EmailPage-2qqiYZlu.js"),__vite__mapDeps([21,5,8,2,9,1,3,4,10,22]),import.meta.url),gt=()=>T(()=>import("./SecurityPage-DgYgSgTK.js"),__vite__mapDeps([23,8,2,9,1,3,4,10,24]),import.meta.url),bt=()=>T(()=>import("./SystemPage-D_lad_h_.js"),__vite__mapDeps([25,7,1,2,3,4,10,26]),import.meta.url),vt=()=>T(()=>import("./SettingsPage-za1oQElD.js"),__vite__mapDeps([27,1,2,3,4,10,28]),import.meta.url),wt=[{path:"/",component:dt,children:[{path:"",redirect:"/reports"},{path:"/pending",redirect:"/reports"},{path:"/stats",redirect:"/reports"},{path:"/reports",name:"reports",component:ft},{path:"/users",name:"users",component:mt},{path:"/feedbacks",name:"feedbacks",component:pt},{path:"/logs",name:"logs",component:_t},{path:"/announcements",name:"announcements",component:ht},{path:"/email",name:"email",component:yt},{path:"/security",name:"security",component:gt},{path:"/system",name:"system",component:bt},{path:"/settings",name:"settings",component:vt}]}],Et=ve({history:we(),routes:wt});Ee(Me).use(Et).use(Be,{locale:Ne}).mount("#app");export{se as _,b as a,Rt as b,oe as c,At as d,Ot as e,Xe as f,Lt as r}; diff --git a/static/admin/assets/system-CeJP0y2Z.js b/static/admin/assets/system-Dluvi0rE.js similarity index 76% rename from static/admin/assets/system-CeJP0y2Z.js rename to static/admin/assets/system-Dluvi0rE.js index 17d92a6..bc4f878 100644 --- a/static/admin/assets/system-CeJP0y2Z.js +++ b/static/admin/assets/system-Dluvi0rE.js @@ -1 +1 @@ -import{c as s,a}from"./index-BMIn4N2u.js";const e=s(async()=>{const{data:t}=await a.get("/system/config");return t},15e3);async function o(t={}){return e.run(t)}async function r(t){const{data:n}=await a.post("/system/config",t);return e.clear(),n}export{o as f,r as u}; +import{c as s,a}from"./index-BwP1dZnj.js";const e=s(async()=>{const{data:t}=await a.get("/system/config");return t},15e3);async function o(t={}){return e.run(t)}async function r(t){const{data:n}=await a.post("/system/config",t);return e.clear(),n}export{o as f,r as u}; diff --git a/static/admin/assets/tasks-DaPM55hg.js b/static/admin/assets/tasks-D5YLLzN-.js similarity index 93% rename from static/admin/assets/tasks-DaPM55hg.js rename to static/admin/assets/tasks-D5YLLzN-.js index 8892c49..01cf0e0 100644 --- a/static/admin/assets/tasks-DaPM55hg.js +++ b/static/admin/assets/tasks-D5YLLzN-.js @@ -1 +1 @@ -import{c as s,a}from"./index-BMIn4N2u.js";const c=s(async()=>{const{data:t}=await a.get("/server/info");return t},3e4),o=s(async()=>{const{data:t}=await a.get("/docker_stats");return t},8e3),u=s(async()=>{const{data:t}=await a.get("/request_metrics");return t},1e4),i=s(async()=>{const{data:t}=await a.get("/slow_sql_metrics");return t},1e4),e=s(async()=>{const{data:t}=await a.get("/task/stats");return t},4e3),r=s(async()=>{const{data:t}=await a.get("/task/running");return t},2e3);async function g(t={}){return c.run(t)}async function y(t={}){return o.run(t)}async function d(t={}){return u.run(t)}async function k(t={}){return i.run(t)}async function l(t={}){return e.run(t)}async function w(t={}){return r.run(t)}async function _(t){const{data:n}=await a.get("/task/logs",{params:t});return n}async function h(t){const{data:n}=await a.post("/task/logs/clear",{days:t});return e.clear(),r.clear(),n}export{w as a,g as b,y as c,d,k as e,l as f,_ as g,h}; +import{c as s,a}from"./index-BwP1dZnj.js";const c=s(async()=>{const{data:t}=await a.get("/server/info");return t},3e4),o=s(async()=>{const{data:t}=await a.get("/docker_stats");return t},8e3),u=s(async()=>{const{data:t}=await a.get("/request_metrics");return t},1e4),i=s(async()=>{const{data:t}=await a.get("/slow_sql_metrics");return t},1e4),e=s(async()=>{const{data:t}=await a.get("/task/stats");return t},4e3),r=s(async()=>{const{data:t}=await a.get("/task/running");return t},2e3);async function g(t={}){return c.run(t)}async function y(t={}){return o.run(t)}async function d(t={}){return u.run(t)}async function k(t={}){return i.run(t)}async function l(t={}){return e.run(t)}async function w(t={}){return r.run(t)}async function _(t){const{data:n}=await a.get("/task/logs",{params:t});return n}async function h(t){const{data:n}=await a.post("/task/logs/clear",{days:t});return e.clear(),r.clear(),n}export{w as a,g as b,y as c,d,k as e,l as f,_ as g,h}; diff --git a/static/admin/assets/users-DoPbHko8.js b/static/admin/assets/users-B3RByMlV.js similarity index 90% rename from static/admin/assets/users-DoPbHko8.js rename to static/admin/assets/users-B3RByMlV.js index 0a5343b..c2a788b 100644 --- a/static/admin/assets/users-DoPbHko8.js +++ b/static/admin/assets/users-B3RByMlV.js @@ -1 +1 @@ -import{a as t}from"./index-BMIn4N2u.js";async function n(){const{data:s}=await t.get("/users");return s}async function o(s){const{data:a}=await t.post(`/users/${s}/approve`);return a}async function c(s){const{data:a}=await t.post(`/users/${s}/reject`);return a}async function i(s){const{data:a}=await t.delete(`/users/${s}`);return a}async function u(s,a){const{data:e}=await t.post(`/users/${s}/vip`,{days:a});return e}async function p(s){const{data:a}=await t.delete(`/users/${s}/vip`);return a}async function d(s,a){const{data:e}=await t.post(`/users/${s}/reset_password`,{new_password:a});return e}export{o as a,p as b,d as c,i as d,n as f,c as r,u as s}; +import{a as t}from"./index-BwP1dZnj.js";async function n(){const{data:s}=await t.get("/users");return s}async function o(s){const{data:a}=await t.post(`/users/${s}/approve`);return a}async function c(s){const{data:a}=await t.post(`/users/${s}/reject`);return a}async function i(s){const{data:a}=await t.delete(`/users/${s}`);return a}async function u(s,a){const{data:e}=await t.post(`/users/${s}/vip`,{days:a});return e}async function p(s){const{data:a}=await t.delete(`/users/${s}/vip`);return a}async function d(s,a){const{data:e}=await t.post(`/users/${s}/reset_password`,{new_password:a});return e}export{o as a,p as b,d as c,i as d,n as f,c as r,u as s}; diff --git a/static/admin/index.html b/static/admin/index.html index a8df84e..48e7d94 100644 --- a/static/admin/index.html +++ b/static/admin/index.html @@ -5,7 +5,7 @@ 后台管理 - 知识管理平台 - + diff --git a/static/app/.vite/manifest.json b/static/app/.vite/manifest.json index 1df3cc3..a33a8f1 100644 --- a/static/app/.vite/manifest.json +++ b/static/app/.vite/manifest.json @@ -193,7 +193,7 @@ "name": "vendor-vue" }, "index.html": { - "file": "assets/app-CfFNNMbF.js", + "file": "assets/app-Cm7xb8k5.js", "name": "app", "src": "index.html", "isEntry": true, @@ -224,7 +224,7 @@ ] }, "src/layouts/AppLayout.vue": { - "file": "assets/AppLayout-BVxPO9-W.js", + "file": "assets/AppLayout-CJ_Pqzl7.js", "name": "AppLayout", "src": "src/layouts/AppLayout.vue", "isDynamicEntry": true, @@ -242,7 +242,7 @@ "_vendor-axios-B9ygI19o.js" ], "css": [ - "assets/AppLayout-eF3aodBF.css" + "assets/AppLayout-B8xVcK25.css" ] }, "src/pages/AccountsPage.vue": { diff --git a/static/app/assets/AppLayout-eF3aodBF.css b/static/app/assets/AppLayout-B8xVcK25.css similarity index 95% rename from static/app/assets/AppLayout-eF3aodBF.css rename to static/app/assets/AppLayout-B8xVcK25.css index 864fbab..63675d9 100644 --- a/static/app/assets/AppLayout-eF3aodBF.css +++ b/static/app/assets/AppLayout-B8xVcK25.css @@ -1 +1 @@ -:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{background-color:var(--el-mask-color);inset:0;margin:0;position:absolute;transition:opacity var(--el-transition-duration);z-index:2000}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size))/2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{margin-top:calc((0px - var(--el-loading-spinner-size))/2);position:absolute;text-align:center;top:50%;width:100%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);font-size:14px;margin:3px 0}.el-loading-spinner .circular{animation:loading-rotate 2s linear infinite;display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size)}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@keyframes loading-rotate{to{transform:rotate(1turn)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,.15);--el-table-index:var(--el-index-normal);background-color:var(--el-table-bg-color);box-sizing:border-box;color:var(--el-table-text-color);font-size:var(--el-font-size-base);height:-moz-fit-content;height:fit-content;max-width:100%;overflow:hidden;position:relative;width:100%}.el-table__inner-wrapper{display:flex;flex-direction:column;height:100%;position:relative}.el-table__inner-wrapper:before{bottom:0;height:1px;left:0}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell,.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{align-items:center;display:flex;justify-content:center;left:0;min-height:60px;position:sticky;text-align:center;width:100%}.el-table__empty-text{color:var(--el-text-color-secondary);line-height:60px;width:50%}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-table__expand-icon{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);cursor:pointer;font-size:12px;height:23px;line-height:12px;margin:0;outline:none;padding:0;transition:transform var(--el-transition-duration-fast) ease-in-out;width:min(23px,100%)}.el-table__expand-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:-2px}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-bottom:0;border-right:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--fit .el-table__inner-wrapper:before{width:100%}.el-table thead{color:var(--el-table-header-text-color)}.el-table thead th{font-weight:600}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{box-sizing:border-box;min-width:0;padding:8px 0;position:relative;text-align:left;text-overflow:ellipsis;vertical-align:middle;z-index:var(--el-table-index)}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{border-bottom-width:0;border-right-width:0;padding:0;width:15px}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;line-height:23px;overflow:hidden;overflow-wrap:break-word;padding:0 12px;text-overflow:ellipsis;white-space:normal}.el-table .cell.el-tooltip{min-width:50px;white-space:nowrap}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:var(--el-font-size-base)}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:var(--el-font-size-extra-small)}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{background:#ff4d51;border-radius:50%;content:"";display:inline-block;height:8px;margin-right:5px;vertical-align:middle;width:8px}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border .el-table__inner-wrapper:after,.el-table--border:after,.el-table--border:before,.el-table__inner-wrapper:before{background-color:var(--el-table-border-color);content:"";position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table--border .el-table__inner-wrapper:after{height:1px;left:0;top:0;width:100%;z-index:calc(var(--el-table-index) + 2)}.el-table--border:before{height:100%;left:0;top:-1px;width:1px}.el-table--border:after{height:100%;right:0;top:-1px;width:1px}.el-table--border .el-table__inner-wrapper{border-bottom:none;border-right:none}.el-table--border .el-table__footer-wrapper{flex-shrink:0;position:relative}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right,.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background:inherit;position:sticky!important;z-index:calc(var(--el-table-index) + 1)}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{bottom:-1px;box-shadow:none;content:"";overflow-x:hidden;overflow-y:hidden;pointer-events:none;position:absolute;top:0;touch-action:none;width:10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{right:-10px}.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch,.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch{background:#fff;position:sticky!important;right:0;z-index:calc(var(--el-table-index) + 1)}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body,.el-table__footer,.el-table__header{border-collapse:separate;table-layout:fixed}.el-table__header-wrapper{overflow:hidden}.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__footer-wrapper{flex-shrink:0;overflow:hidden}.el-table__footer-wrapper tfoot td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__body-wrapper .el-table-column--selection>.cell,.el-table__header-wrapper .el-table-column--selection>.cell{align-items:center;display:inline-flex;height:23px}.el-table__body-wrapper .el-table-column--selection .el-checkbox,.el-table__header-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{flex:1;overflow:hidden;position:relative}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);cursor:pointer;display:inline-flex;flex-direction:column;height:14px;margin:0;outline:none;overflow:initial;padding:0;position:relative;transition:transform var(--el-transition-duration-fast) ease-in-out;vertical-align:middle;width:24px}.el-table .caret-wrapper:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table .sort-caret{border:5px solid transparent;height:0;left:7px;position:absolute;width:0}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{position:absolute;visibility:hidden;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr>td.hover-cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table.el-table--scrollable-y .el-table__body-header{position:sticky;top:0;z-index:calc(var(--el-table-index) + 2)}.el-table.el-table--scrollable-y .el-table__body-footer{bottom:0;position:sticky;z-index:calc(var(--el-table-index) + 2)}.el-table__column-resize-proxy{border-left:var(--el-table-border);bottom:0;left:200px;position:absolute;top:0;width:0;z-index:calc(var(--el-table-index) + 9)}.el-table__column-filter-trigger{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);cursor:pointer;display:inline-block;margin:0;outline:none;padding:0;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table__column-filter-trigger:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{height:100%;top:0;width:1px}.el-table__border-bottom-patch,.el-table__border-left-patch{background-color:var(--el-table-border-color);left:0;position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table__border-bottom-patch{height:1px}.el-table__border-right-patch{background-color:var(--el-table-border-color);height:100%;position:absolute;top:0;width:1px;z-index:calc(var(--el-table-index) + 2)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;text-align:center;width:20px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{background-color:#fff;border:1px solid var(--el-border-color-lighter);border-radius:2px;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{list-style:none;margin:0;min-width:100px;outline:none;padding:5px 0}.el-table-filter__list-item{cursor:pointer;font-size:var(--el-font-size-base);line-height:36px;outline:none;padding:0 10px}.el-table-filter__list-item:focus,.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__multiple{outline:none}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);margin:0;outline:none;padding:0 3px;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table-filter__bottom button:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{align-items:center;display:flex;height:unset;margin-bottom:12px;margin-left:5px;margin-right:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-divider{position:relative}.el-divider--horizontal{border-top:1px var(--el-border-color) var(--el-border-style);display:block;height:1px;margin:24px 0;width:100%}.el-divider--vertical{border-left:1px var(--el-border-color) var(--el-border-style);display:inline-block;height:1em;margin:0 8px;position:relative;vertical-align:middle;width:1px}.el-divider__text{background-color:var(--el-bg-color);color:var(--el-text-color-primary);font-size:14px;font-weight:500;padding:0 20px;position:absolute}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translate(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-tabs{--el-tabs-header-height:40px;display:flex}.el-tabs__header{align-items:center;display:flex;justify-content:space-between;margin:0 0 15px;padding:0;position:relative}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{background-color:var(--el-color-primary);bottom:0;height:2px;left:0;list-style:none;position:absolute;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);z-index:1}.el-tabs__active-bar.is-bottom{bottom:auto}.el-tabs__new-tab{align-items:center;border:1px solid var(--el-border-color);border-radius:3px;color:var(--el-text-color-primary);cursor:pointer;display:flex;flex-shrink:0;font-size:12px;height:20px;justify-content:center;line-height:20px;margin:10px 0 10px 10px;text-align:center;transition:all .15s;width:20px}.el-tabs__new-tab .is-icon-plus{height:inherit;transform:scale(.8);width:inherit}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__new-tab-vertical{margin-left:0}.el-tabs__nav-wrap{flex:1 auto;margin-bottom:-1px;overflow:hidden;position:relative}.el-tabs__nav-wrap:after{background-color:var(--el-border-color-light);bottom:0;content:"";height:2px;left:0;position:absolute;width:100%;z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-bottom:after{bottom:auto;top:0}.el-tabs__nav-wrap.is-scrollable{box-sizing:border-box;padding:0 20px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;line-height:44px;position:absolute;text-align:center;width:20px}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;float:left;position:relative;transition:transform var(--el-transition-duration);white-space:nowrap;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{display:flex;min-width:100%}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{align-items:center;box-sizing:border-box;color:var(--el-text-color-primary);display:flex;font-size:var(--el-font-size-base);font-weight:500;height:var(--el-tabs-header-height);justify-content:center;list-style:none;padding:0 20px;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{border-radius:3px;box-shadow:0 0 2px 2px var(--el-color-primary) inset}.el-tabs__item .is-icon-close{border-radius:50%;margin-left:5px;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active{color:var(--el-color-primary)}.el-tabs__item:hover{color:var(--el-color-primary);cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{flex-grow:1;overflow:hidden;position:relative}.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);box-sizing:border-box;height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{font-size:12px;height:14px;overflow:hidden;position:relative;right:-2px;transform-origin:100% 50%;width:0}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);margin-top:-1px;transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{border:1px solid transparent;color:var(--el-text-color-secondary);margin-top:-1px;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background-color:var(--el-bg-color-overlay);border-left-color:var(--el-border-color);border-right-color:var(--el-border-color);color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom{flex-direction:column}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-bottom:0;margin-top:-1px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{bottom:auto;height:auto;top:0;width:2px}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{cursor:pointer;height:30px;line-height:30px;text-align:center;width:100%}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{bottom:auto;height:100%;top:0;width:2px}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left{flex-direction:row}.el-tabs--left .el-tabs__header.is-left{margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__active-bar.is-left{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-bottom:none;border-left:none;border-right:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-radius:4px 0 0 4px;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:rgb(209,219,229) transparent}.el-tabs--left>.el-tabs__content+.el-tabs__header{order:-1}.el-tabs--right .el-tabs__header.is-right{margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:1px solid #fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:rgb(209,219,229) transparent}.el-tabs--top{flex-direction:column}.el-tabs--top>.el-tabs__content+.el-tabs__header{order:-1}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);left:0;position:absolute;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);left:0;position:absolute;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform:translate(100%);transform-origin:0 0}to{opacity:1;transform:translate(0);transform-origin:0 0}}@keyframes slideInRight-leave{0%{opacity:1;transform:translate(0);transform-origin:0 0}to{opacity:0;transform:translate(100%);transform-origin:0 0}}@keyframes slideInLeft-enter{0%{opacity:0;transform:translate(-100%);transform-origin:0 0}to{opacity:1;transform:translate(0);transform-origin:0 0}}@keyframes slideInLeft-leave{0%{opacity:1;transform:translate(0);transform-origin:0 0}to{opacity:0;transform:translate(-100%);transform-origin:0 0}}.el-collapse{--el-collapse-border-color:var(--el-border-color-lighter);--el-collapse-header-height:48px;--el-collapse-header-bg-color:var(--el-fill-color-blank);--el-collapse-header-text-color:var(--el-text-color-primary);--el-collapse-header-font-size:13px;--el-collapse-content-bg-color:var(--el-fill-color-blank);--el-collapse-content-font-size:13px;--el-collapse-content-text-color:var(--el-text-color-primary);border-bottom:1px solid var(--el-collapse-border-color);border-top:1px solid var(--el-collapse-border-color)}.el-collapse-item.is-disabled .el-collapse-item__header{color:var(--el-text-color-disabled);cursor:not-allowed}.el-collapse-item__header{align-items:center;background-color:var(--el-collapse-header-bg-color);border:none;border-bottom:1px solid var(--el-collapse-border-color);color:var(--el-collapse-header-text-color);cursor:pointer;display:flex;font-size:var(--el-collapse-header-font-size);font-weight:500;line-height:var(--el-collapse-header-height);min-height:var(--el-collapse-header-height);outline:none;padding:0;transition:border-bottom-color var(--el-transition-duration);width:100%}.el-collapse-item__arrow{font-weight:300;transition:transform var(--el-transition-duration)}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__title{flex:auto;text-align:left}.el-collapse-item__header.focusing:focus:not(:hover){color:var(--el-color-primary)}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{background-color:var(--el-collapse-content-bg-color);border-bottom:1px solid var(--el-collapse-border-color);box-sizing:border-box;overflow:hidden;will-change:height}.el-collapse-item__content{color:var(--el-collapse-content-text-color);font-size:var(--el-collapse-content-font-size);line-height:1.7692307692;padding-bottom:25px}.el-collapse-item:last-child{margin-bottom:-1px}.el-collapse-icon-position-left .el-collapse-item__header{gap:8px}.el-collapse-icon-position-left .el-collapse-item__title{order:1}.el-collapse-icon-position-right .el-collapse-item__header{padding-right:8px}.el-overlay.is-drawer{overflow:hidden}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color,var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary,20px);--el-drawer-dragger-size:8px;background-color:var(--el-drawer-bg-color);box-shadow:var(--el-box-shadow-dark);box-sizing:border-box;display:flex;flex-direction:column;position:absolute;transition:all var(--el-transition-duration)}.el-drawer .btt,.el-drawer .ltr,.el-drawer .rtl,.el-drawer .ttb{transform:translate(0)}.el-drawer__sr-focus:focus{outline:none!important}.el-drawer__header{align-items:center;color:var(--el-text-color-primary);display:flex;margin-bottom:32px;overflow:hidden;padding:var(--el-drawer-padding-primary);padding-bottom:0}.el-drawer__header>:first-child{flex:1}.el-drawer__title{flex:1;font-size:16px;line-height:inherit;margin:0}.el-drawer__footer{overflow:hidden;padding:var(--el-drawer-padding-primary);padding-top:10px;text-align:right}.el-drawer__close-btn{background-color:transparent;border:none;color:inherit;cursor:pointer;display:inline-flex;font-size:var(--el-font-size-extra-large);outline:none}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{flex:1;overflow:auto;padding:var(--el-drawer-padding-primary)}.el-drawer__body>*{box-sizing:border-box}.el-drawer.is-dragging{transition:none}.el-drawer__dragger{background-color:transparent;position:absolute;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-drawer__dragger:before{background-color:transparent;content:"";position:absolute;transition:all .2s}.el-drawer__dragger:hover:before{background-color:var(--el-color-primary)}.el-drawer.ltr,.el-drawer.rtl{bottom:0;height:100%;top:0}.el-drawer.ltr>.el-drawer__dragger,.el-drawer.rtl>.el-drawer__dragger{bottom:0;cursor:ew-resize;height:100%;top:0;width:var(--el-drawer-dragger-size)}.el-drawer.ltr>.el-drawer__dragger:before,.el-drawer.rtl>.el-drawer__dragger:before{bottom:0;top:0;width:3px}.el-drawer.btt,.el-drawer.ttb{left:0;right:0;width:100%}.el-drawer.btt>.el-drawer__dragger,.el-drawer.ttb>.el-drawer__dragger{cursor:ns-resize;height:var(--el-drawer-dragger-size);left:0;right:0;width:100%}.el-drawer.btt>.el-drawer__dragger:before,.el-drawer.ttb>.el-drawer__dragger:before{height:3px;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.ltr>.el-drawer__dragger{right:0}.el-drawer.ltr>.el-drawer__dragger:before{right:-2px}.el-drawer.rtl{right:0}.el-drawer.rtl>.el-drawer__dragger{left:0}.el-drawer.rtl>.el-drawer__dragger:before{left:-2px}.el-drawer.ttb{top:0}.el-drawer.ttb>.el-drawer__dragger{bottom:0}.el-drawer.ttb>.el-drawer__dragger:before{bottom:-2px}.el-drawer.btt{bottom:0}.el-drawer.btt>.el-drawer__dragger{top:0}.el-drawer.btt>.el-drawer__dragger:before{top:-2px}.el-modal-drawer.is-penetrable{pointer-events:none}.el-modal-drawer.is-penetrable .el-drawer{pointer-events:auto}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-active,.el-drawer-fade-enter-from,.el-drawer-fade-enter-to,.el-drawer-fade-leave-active,.el-drawer-fade-leave-from,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{background-color:transparent!important}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translate(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translate(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-container{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0}.el-container.is-vertical{flex-direction:column}.el-aside{box-sizing:border-box;flex-shrink:0;overflow:auto;width:var(--el-aside-width,300px)}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-footer-height);padding:var(--el-footer-padding)}.el-header{--el-header-padding:0 20px;--el-header-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.el-main{--el-main-padding:20px;box-sizing:border-box;display:block;flex:1;flex-basis:auto;overflow:auto;padding:var(--el-main-padding)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transform-origin:center top;transition:var(--el-transition-md-fade)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transform-origin:center bottom;transition:var(--el-transition-md-fade)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transform-origin:top left;transition:var(--el-transition-md-fade)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}:root{--el-menu-active-color:var(--el-color-primary);--el-menu-text-color:var(--el-text-color-primary);--el-menu-hover-text-color:var(--el-color-primary);--el-menu-bg-color:var(--el-fill-color-blank);--el-menu-hover-bg-color:var(--el-color-primary-light-9);--el-menu-item-height:56px;--el-menu-sub-item-height:calc(var(--el-menu-item-height) - 6px);--el-menu-horizontal-height:60px;--el-menu-horizontal-sub-item-height:36px;--el-menu-item-font-size:var(--el-font-size-base);--el-menu-item-hover-fill:var(--el-color-primary-light-9);--el-menu-border-color:var(--el-border-color);--el-menu-base-level-padding:20px;--el-menu-level-padding:20px;--el-menu-icon-width:24px}.el-menu{background-color:var(--el-menu-bg-color);border-right:1px solid var(--el-menu-border-color);box-sizing:border-box;list-style:none;margin:0;padding-left:0;position:relative}.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item-group__title,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-sub-menu__title{padding-left:calc(var(--el-menu-base-level-padding) + var(--el-menu-level)*var(--el-menu-level-padding));white-space:nowrap}.el-menu:not(.el-menu--collapse) .el-sub-menu__title{padding-right:calc(var(--el-menu-base-level-padding) + var(--el-menu-icon-width))}.el-menu--horizontal{border-right:none;display:flex;flex-wrap:nowrap;height:var(--el-menu-horizontal-height)}.el-menu--horizontal.el-menu--popup-container{height:unset}.el-menu--horizontal.el-menu{border-bottom:1px solid var(--el-menu-border-color)}.el-menu--horizontal>.el-menu-item{align-items:center;border-bottom:2px solid transparent;color:var(--el-menu-text-color);display:inline-flex;height:100%;justify-content:center;margin:0}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-sub-menu:focus,.el-menu--horizontal>.el-sub-menu:hover{outline:none}.el-menu--horizontal>.el-sub-menu:hover .el-sub-menu__title{color:var(--el-menu-hover-text-color)}.el-menu--horizontal>.el-sub-menu.is-active .el-sub-menu__title{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title{border-bottom:2px solid transparent;color:var(--el-menu-text-color);height:100%}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover{background-color:var(--el-menu-bg-color)}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-sub-menu__title{align-items:center;background-color:var(--el-menu-bg-color);color:var(--el-menu-text-color);display:flex;height:var(--el-menu-horizontal-sub-item-height);line-height:var(--el-menu-horizontal-sub-item-height);padding:0 10px}.el-menu--horizontal .el-menu .el-sub-menu__title{padding-right:40px}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-menu-item.is-active:hover,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title:hover{color:var(--el-menu-active-color)}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{background-color:var(--el-menu-hover-bg-color);color:var(--el-menu-active-color,var(--el-menu-hover-text-color));outline:none}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)!important}.el-menu--collapse{width:calc(var(--el-menu-icon-width) + var(--el-menu-base-level-padding)*2)}.el-menu--collapse>.el-menu-item [class^=el-icon],.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title [class^=el-icon],.el-menu--collapse>.el-sub-menu>.el-sub-menu__title [class^=el-icon]{margin:0;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-menu--collapse>.el-menu-item .el-sub-menu__icon-arrow,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title>span,.el-menu--collapse>.el-menu-item>span,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title>span{display:inline-block;height:0;overflow:hidden;visibility:hidden;width:0}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-sub-menu{min-width:200px}.el-menu--collapse .el-sub-menu.is-active .el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--popup{border:none;border-radius:var(--el-border-radius-small);box-shadow:var(--el-box-shadow-light);min-width:200px;padding:5px 0;z-index:100}.el-menu .el-icon{flex-shrink:0}.el-menu-item{align-items:center;box-sizing:border-box;color:var(--el-menu-text-color);cursor:pointer;display:flex;font-size:var(--el-menu-item-font-size);height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);list-style:none;padding:0 var(--el-menu-base-level-padding);position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);white-space:nowrap}.el-menu-item *{vertical-align:bottom}.el-menu-item i{color:inherit}.el-menu-item:focus,.el-menu-item:hover{outline:none}.el-menu-item:hover{background-color:var(--el-menu-hover-bg-color)}.el-menu-item.is-disabled{background:none!important;cursor:not-allowed;opacity:.25}.el-menu-item [class^=el-icon]{font-size:18px;margin-right:5px;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-menu-item.is-active{color:var(--el-menu-active-color)}.el-menu-item.is-active i{color:inherit}.el-menu-item .el-menu-tooltip__trigger{align-items:center;box-sizing:border-box;display:inline-flex;height:100%;left:0;padding:0 var(--el-menu-base-level-padding);position:absolute;top:0;width:100%}.el-sub-menu{list-style:none;margin:0;padding-left:0}.el-sub-menu__title{align-items:center;box-sizing:border-box;color:var(--el-menu-text-color);cursor:pointer;display:flex;font-size:var(--el-menu-item-font-size);height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);list-style:none;padding:0 var(--el-menu-base-level-padding);position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);white-space:nowrap}.el-sub-menu__title *{vertical-align:bottom}.el-sub-menu__title i{color:inherit}.el-sub-menu__title:focus,.el-sub-menu__title:hover{outline:none}.el-sub-menu__title.is-disabled{background:none!important;cursor:not-allowed;opacity:.25}.el-sub-menu__title:hover{background-color:var(--el-menu-hover-bg-color)}.el-sub-menu .el-menu{border:none}.el-sub-menu .el-menu-item{height:var(--el-menu-sub-item-height);line-height:var(--el-menu-sub-item-height)}.el-sub-menu.el-sub-menu__hide-arrow .el-sub-menu__title{padding-right:var(--el-menu-base-level-padding)}.el-sub-menu__hide-arrow .el-sub-menu__icon-arrow{display:none!important}.el-sub-menu.is-active .el-sub-menu__title{border-bottom-color:var(--el-menu-active-color)}.el-sub-menu.is-disabled .el-menu-item,.el-sub-menu.is-disabled .el-sub-menu__title{background:none!important;cursor:not-allowed;opacity:.25}.el-sub-menu .el-icon{font-size:18px;margin-right:5px;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-sub-menu .el-icon.el-sub-menu__icon-more{margin-right:0!important}.el-sub-menu .el-sub-menu__icon-arrow{font-size:12px;margin-right:0;margin-top:-6px;position:absolute;right:var(--el-menu-base-level-padding);top:50%;transition:transform var(--el-transition-duration);width:inherit}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{color:var(--el-text-color-secondary);font-size:12px;line-height:normal;padding:7px 0 7px var(--el-menu-base-level-padding)}.horizontal-collapse-transition .el-sub-menu__title .el-sub-menu__icon-arrow{opacity:0;transition:var(--el-transition-duration-fast)}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;display:inline-block;position:relative;vertical-align:middle;width:-moz-fit-content;width:fit-content}.el-badge__content{align-items:center;background-color:var(--el-badge-bg-color);border:1px solid var(--el-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);display:inline-flex;font-size:var(--el-badge-font-size);height:var(--el-badge-size);justify-content:center;padding:0 var(--el-badge-padding);white-space:nowrap}.el-badge__content.is-fixed{position:absolute;right:calc(1px + var(--el-badge-size)/2);top:0;transform:translateY(-50%) translate(100%);z-index:var(--el-index-normal)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{border-radius:50%;height:8px;padding:0;right:0;width:8px}.el-badge__content.is-hide-zero{display:none}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:11px 15px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary);align-items:center;background-color:var(--el-message-bg-color);border-color:var(--el-message-border-color);border-radius:var(--el-border-radius-base);border-style:var(--el-border-style);border-width:var(--el-border-width);box-sizing:border-box;display:flex;gap:8px;max-width:calc(100% - 32px);padding:var(--el-message-padding);position:fixed;transition:opacity var(--el-transition-duration),transform .4s,top .4s,bottom .4s;width:-moz-fit-content;width:fit-content}.el-message.is-left{left:16px}.el-message.is-right{right:16px}.el-message.is-center{left:0;margin:0 auto;right:0}.el-message.is-plain{background-color:var(--el-bg-color-overlay);border-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-message p{margin:0}.el-message--primary{--el-message-bg-color:var(--el-color-primary-light-9);--el-message-border-color:var(--el-color-primary-light-8);--el-message-text-color:var(--el-color-primary)}.el-message--primary .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--primary{color:var(--el-message-text-color)}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message .el-message__badge{position:absolute;right:-8px;top:-8px}.el-message__content{font-size:14px;line-height:1;padding:0}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{color:var(--el-message-close-icon-color);cursor:pointer;font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0;transform:translateY(-100%)}.el-message-fade-enter-from.is-bottom,.el-message-fade-leave-to.is-bottom{transform:translateY(100%)}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-box-shadow:var(--el-box-shadow);--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:12px;--el-messagebox-font-line-height:var(--el-font-line-height-primary);backface-visibility:hidden;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);box-shadow:var(--el-messagebox-box-shadow);box-sizing:border-box;display:inline-block;font-size:var(--el-messagebox-font-size);max-width:var(--el-messagebox-width);overflow:hidden;overflow-wrap:break-word;padding:var(--el-messagebox-padding-primary);position:relative;text-align:left;vertical-align:middle;width:100%}.el-message-box:focus{outline:none!important}.is-message-box .el-overlay-message-box{inset:0;overflow:auto;padding:16px;position:fixed;text-align:center}.is-message-box .el-overlay-message-box:after{content:"";display:inline-block;height:100%;vertical-align:middle;width:0}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-message-box__header{padding-bottom:var(--el-messagebox-padding-primary)}.el-message-box__header.show-close{padding-right:calc(var(--el-messagebox-padding-primary) + var(--el-message-close-size, 16px))}.el-message-box__title{color:var(--el-messagebox-title-color);font-size:var(--el-messagebox-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:40px;outline:none;padding:0;position:absolute;right:0;top:0;width:40px}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{align-items:center;display:flex;gap:12px}.el-message-box__input{padding-top:12px}.el-message-box__input div.invalid>input{border-color:var(--el-color-error)}.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{font-size:24px}.el-message-box__status.el-message-box-icon--primary{--el-messagebox-color:var(--el-color-primary);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{margin:0;min-width:0}.el-message-box__message p{line-height:var(--el-messagebox-font-line-height);margin:0}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__btns{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-end;padding-top:var(--el-messagebox-padding-primary)}.el-message-box--center .el-message-box__title{align-items:center;display:flex;gap:6px;justify-content:center}.el-message-box--center .el-message-box__status{font-size:inherit}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__container{justify-content:center}.el-message-box-parent--hidden{overflow:hidden}.fade-in-linear-enter-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@keyframes msgbox-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}.layout-root[data-v-ec18bcb1]{height:100%}.layout-aside[data-v-ec18bcb1]{background:#fff;border-right:1px solid var(--app-border)}.brand[data-v-ec18bcb1],.drawer-brand[data-v-ec18bcb1]{padding:18px 16px 10px}.brand-title[data-v-ec18bcb1]{font-size:15px;font-weight:800;letter-spacing:.2px}.brand-sub[data-v-ec18bcb1]{margin-top:2px;font-size:12px}.aside-menu[data-v-ec18bcb1]{border-right:none}.layout-header[data-v-ec18bcb1]{display:flex;align-items:center;justify-content:space-between;gap:12px;background:#f6f7fb99;-webkit-backdrop-filter:saturate(180%) blur(10px);backdrop-filter:saturate(180%) blur(10px);border-bottom:1px solid var(--app-border)}.header-left[data-v-ec18bcb1]{display:flex;align-items:center;gap:10px;min-width:0}.header-title[data-v-ec18bcb1]{font-size:14px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.header-menu-btn[data-v-ec18bcb1]{padding-left:0;padding-right:0}.header-right[data-v-ec18bcb1]{display:flex;align-items:center;gap:12px}.user-meta[data-v-ec18bcb1]{display:flex;align-items:center;gap:8px;min-width:0}.user-name[data-v-ec18bcb1]{font-size:13px;font-weight:700;max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.vip-warn[data-v-ec18bcb1]{font-size:12px;color:var(--app-muted);white-space:nowrap}.layout-main[data-v-ec18bcb1]{padding:16px}.drawer-user[data-v-ec18bcb1]{padding:0 16px 10px;display:flex;align-items:center;gap:8px}.drawer-actions[data-v-ec18bcb1]{padding:12px 16px 4px;border-top:1px solid var(--app-border)}.announcement-body[data-v-ec18bcb1]{min-height:80px}.announcement-content[data-v-ec18bcb1]{white-space:pre-wrap;line-height:1.6;font-size:14px}.announcement-image[data-v-ec18bcb1]{margin-top:12px;display:flex;justify-content:center}.announcement-image img[data-v-ec18bcb1]{max-width:100%;max-height:320px;border-radius:10px;border:1px solid var(--app-border);object-fit:contain}.feedback-title[data-v-ec18bcb1]{display:flex;align-items:center;gap:10px;width:100%;min-width:0}.feedback-title-text[data-v-ec18bcb1]{font-weight:800;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feedback-time[data-v-ec18bcb1]{margin-left:auto;font-size:12px;white-space:nowrap}.feedback-body[data-v-ec18bcb1]{padding:6px 0 2px}.feedback-section+.feedback-section[data-v-ec18bcb1]{margin-top:12px}.feedback-label[data-v-ec18bcb1]{font-size:12px;margin-bottom:6px}.feedback-text[data-v-ec18bcb1]{white-space:pre-wrap;line-height:1.6;font-size:13px}.settings-section[data-v-ec18bcb1]{padding:6px 2px 2px}.settings-alert[data-v-ec18bcb1]{margin-bottom:12px}.email-row[data-v-ec18bcb1]{display:flex;align-items:center;justify-content:space-between;gap:12px}.email-value[data-v-ec18bcb1]{font-weight:800;min-width:0;overflow:hidden;text-overflow:ellipsis}.notify-row[data-v-ec18bcb1]{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.notify-title[data-v-ec18bcb1]{font-weight:800}.notify-desc[data-v-ec18bcb1]{margin-top:4px;font-size:12px}.settings-hint[data-v-ec18bcb1]{margin-top:10px}.vip-info[data-v-ec18bcb1]{margin-top:12px;display:grid;gap:10px}.vip-line[data-v-ec18bcb1]{display:flex;align-items:center;justify-content:space-between;gap:12px}@media(max-width:768px){.layout-header[data-v-ec18bcb1]{flex-wrap:wrap;height:auto;padding-top:10px;padding-bottom:10px}.header-right[data-v-ec18bcb1]{width:100%;justify-content:flex-end}.layout-main[data-v-ec18bcb1]{padding:12px}.user-name[data-v-ec18bcb1]{max-width:120px}} +:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{background-color:var(--el-mask-color);inset:0;margin:0;position:absolute;transition:opacity var(--el-transition-duration);z-index:2000}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size))/2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{margin-top:calc((0px - var(--el-loading-spinner-size))/2);position:absolute;text-align:center;top:50%;width:100%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);font-size:14px;margin:3px 0}.el-loading-spinner .circular{animation:loading-rotate 2s linear infinite;display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size)}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@keyframes loading-rotate{to{transform:rotate(1turn)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,.15);--el-table-index:var(--el-index-normal);background-color:var(--el-table-bg-color);box-sizing:border-box;color:var(--el-table-text-color);font-size:var(--el-font-size-base);height:-moz-fit-content;height:fit-content;max-width:100%;overflow:hidden;position:relative;width:100%}.el-table__inner-wrapper{display:flex;flex-direction:column;height:100%;position:relative}.el-table__inner-wrapper:before{bottom:0;height:1px;left:0}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell,.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{align-items:center;display:flex;justify-content:center;left:0;min-height:60px;position:sticky;text-align:center;width:100%}.el-table__empty-text{color:var(--el-text-color-secondary);line-height:60px;width:50%}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-table__expand-icon{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);cursor:pointer;font-size:12px;height:23px;line-height:12px;margin:0;outline:none;padding:0;transition:transform var(--el-transition-duration-fast) ease-in-out;width:min(23px,100%)}.el-table__expand-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:-2px}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-bottom:0;border-right:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--fit .el-table__inner-wrapper:before{width:100%}.el-table thead{color:var(--el-table-header-text-color)}.el-table thead th{font-weight:600}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{box-sizing:border-box;min-width:0;padding:8px 0;position:relative;text-align:left;text-overflow:ellipsis;vertical-align:middle;z-index:var(--el-table-index)}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{border-bottom-width:0;border-right-width:0;padding:0;width:15px}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;line-height:23px;overflow:hidden;overflow-wrap:break-word;padding:0 12px;text-overflow:ellipsis;white-space:normal}.el-table .cell.el-tooltip{min-width:50px;white-space:nowrap}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:var(--el-font-size-base)}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:var(--el-font-size-extra-small)}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{background:#ff4d51;border-radius:50%;content:"";display:inline-block;height:8px;margin-right:5px;vertical-align:middle;width:8px}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border .el-table__inner-wrapper:after,.el-table--border:after,.el-table--border:before,.el-table__inner-wrapper:before{background-color:var(--el-table-border-color);content:"";position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table--border .el-table__inner-wrapper:after{height:1px;left:0;top:0;width:100%;z-index:calc(var(--el-table-index) + 2)}.el-table--border:before{height:100%;left:0;top:-1px;width:1px}.el-table--border:after{height:100%;right:0;top:-1px;width:1px}.el-table--border .el-table__inner-wrapper{border-bottom:none;border-right:none}.el-table--border .el-table__footer-wrapper{flex-shrink:0;position:relative}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right,.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background:inherit;position:sticky!important;z-index:calc(var(--el-table-index) + 1)}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{bottom:-1px;box-shadow:none;content:"";overflow-x:hidden;overflow-y:hidden;pointer-events:none;position:absolute;top:0;touch-action:none;width:10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{right:-10px}.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch,.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch{background:#fff;position:sticky!important;right:0;z-index:calc(var(--el-table-index) + 1)}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body,.el-table__footer,.el-table__header{border-collapse:separate;table-layout:fixed}.el-table__header-wrapper{overflow:hidden}.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__footer-wrapper{flex-shrink:0;overflow:hidden}.el-table__footer-wrapper tfoot td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__body-wrapper .el-table-column--selection>.cell,.el-table__header-wrapper .el-table-column--selection>.cell{align-items:center;display:inline-flex;height:23px}.el-table__body-wrapper .el-table-column--selection .el-checkbox,.el-table__header-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{flex:1;overflow:hidden;position:relative}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);cursor:pointer;display:inline-flex;flex-direction:column;height:14px;margin:0;outline:none;overflow:initial;padding:0;position:relative;transition:transform var(--el-transition-duration-fast) ease-in-out;vertical-align:middle;width:24px}.el-table .caret-wrapper:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table .sort-caret{border:5px solid transparent;height:0;left:7px;position:absolute;width:0}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{position:absolute;visibility:hidden;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr>td.hover-cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table.el-table--scrollable-y .el-table__body-header{position:sticky;top:0;z-index:calc(var(--el-table-index) + 2)}.el-table.el-table--scrollable-y .el-table__body-footer{bottom:0;position:sticky;z-index:calc(var(--el-table-index) + 2)}.el-table__column-resize-proxy{border-left:var(--el-table-border);bottom:0;left:200px;position:absolute;top:0;width:0;z-index:calc(var(--el-table-index) + 9)}.el-table__column-filter-trigger{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);cursor:pointer;display:inline-block;margin:0;outline:none;padding:0;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table__column-filter-trigger:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{height:100%;top:0;width:1px}.el-table__border-bottom-patch,.el-table__border-left-patch{background-color:var(--el-table-border-color);left:0;position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table__border-bottom-patch{height:1px}.el-table__border-right-patch{background-color:var(--el-table-border-color);height:100%;position:absolute;top:0;width:1px;z-index:calc(var(--el-table-index) + 2)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;text-align:center;width:20px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{background-color:#fff;border:1px solid var(--el-border-color-lighter);border-radius:2px;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{list-style:none;margin:0;min-width:100px;outline:none;padding:5px 0}.el-table-filter__list-item{cursor:pointer;font-size:var(--el-font-size-base);line-height:36px;outline:none;padding:0 10px}.el-table-filter__list-item:focus,.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__multiple{outline:none}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);margin:0;outline:none;padding:0 3px;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table-filter__bottom button:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{align-items:center;display:flex;height:unset;margin-bottom:12px;margin-left:5px;margin-right:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-divider{position:relative}.el-divider--horizontal{border-top:1px var(--el-border-color) var(--el-border-style);display:block;height:1px;margin:24px 0;width:100%}.el-divider--vertical{border-left:1px var(--el-border-color) var(--el-border-style);display:inline-block;height:1em;margin:0 8px;position:relative;vertical-align:middle;width:1px}.el-divider__text{background-color:var(--el-bg-color);color:var(--el-text-color-primary);font-size:14px;font-weight:500;padding:0 20px;position:absolute}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translate(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-tabs{--el-tabs-header-height:40px;display:flex}.el-tabs__header{align-items:center;display:flex;justify-content:space-between;margin:0 0 15px;padding:0;position:relative}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{background-color:var(--el-color-primary);bottom:0;height:2px;left:0;list-style:none;position:absolute;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);z-index:1}.el-tabs__active-bar.is-bottom{bottom:auto}.el-tabs__new-tab{align-items:center;border:1px solid var(--el-border-color);border-radius:3px;color:var(--el-text-color-primary);cursor:pointer;display:flex;flex-shrink:0;font-size:12px;height:20px;justify-content:center;line-height:20px;margin:10px 0 10px 10px;text-align:center;transition:all .15s;width:20px}.el-tabs__new-tab .is-icon-plus{height:inherit;transform:scale(.8);width:inherit}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__new-tab-vertical{margin-left:0}.el-tabs__nav-wrap{flex:1 auto;margin-bottom:-1px;overflow:hidden;position:relative}.el-tabs__nav-wrap:after{background-color:var(--el-border-color-light);bottom:0;content:"";height:2px;left:0;position:absolute;width:100%;z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-bottom:after{bottom:auto;top:0}.el-tabs__nav-wrap.is-scrollable{box-sizing:border-box;padding:0 20px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;line-height:44px;position:absolute;text-align:center;width:20px}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;float:left;position:relative;transition:transform var(--el-transition-duration);white-space:nowrap;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{display:flex;min-width:100%}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{align-items:center;box-sizing:border-box;color:var(--el-text-color-primary);display:flex;font-size:var(--el-font-size-base);font-weight:500;height:var(--el-tabs-header-height);justify-content:center;list-style:none;padding:0 20px;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{border-radius:3px;box-shadow:0 0 2px 2px var(--el-color-primary) inset}.el-tabs__item .is-icon-close{border-radius:50%;margin-left:5px;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active{color:var(--el-color-primary)}.el-tabs__item:hover{color:var(--el-color-primary);cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{flex-grow:1;overflow:hidden;position:relative}.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);box-sizing:border-box;height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{font-size:12px;height:14px;overflow:hidden;position:relative;right:-2px;transform-origin:100% 50%;width:0}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);margin-top:-1px;transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{border:1px solid transparent;color:var(--el-text-color-secondary);margin-top:-1px;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background-color:var(--el-bg-color-overlay);border-left-color:var(--el-border-color);border-right-color:var(--el-border-color);color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom{flex-direction:column}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-bottom:0;margin-top:-1px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{bottom:auto;height:auto;top:0;width:2px}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{cursor:pointer;height:30px;line-height:30px;text-align:center;width:100%}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{bottom:auto;height:100%;top:0;width:2px}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left{flex-direction:row}.el-tabs--left .el-tabs__header.is-left{margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__active-bar.is-left{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-bottom:none;border-left:none;border-right:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-radius:4px 0 0 4px;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:rgb(209,219,229) transparent}.el-tabs--left>.el-tabs__content+.el-tabs__header{order:-1}.el-tabs--right .el-tabs__header.is-right{margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:1px solid #fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:rgb(209,219,229) transparent}.el-tabs--top{flex-direction:column}.el-tabs--top>.el-tabs__content+.el-tabs__header{order:-1}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);left:0;position:absolute;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);left:0;position:absolute;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform:translate(100%);transform-origin:0 0}to{opacity:1;transform:translate(0);transform-origin:0 0}}@keyframes slideInRight-leave{0%{opacity:1;transform:translate(0);transform-origin:0 0}to{opacity:0;transform:translate(100%);transform-origin:0 0}}@keyframes slideInLeft-enter{0%{opacity:0;transform:translate(-100%);transform-origin:0 0}to{opacity:1;transform:translate(0);transform-origin:0 0}}@keyframes slideInLeft-leave{0%{opacity:1;transform:translate(0);transform-origin:0 0}to{opacity:0;transform:translate(-100%);transform-origin:0 0}}.el-collapse{--el-collapse-border-color:var(--el-border-color-lighter);--el-collapse-header-height:48px;--el-collapse-header-bg-color:var(--el-fill-color-blank);--el-collapse-header-text-color:var(--el-text-color-primary);--el-collapse-header-font-size:13px;--el-collapse-content-bg-color:var(--el-fill-color-blank);--el-collapse-content-font-size:13px;--el-collapse-content-text-color:var(--el-text-color-primary);border-bottom:1px solid var(--el-collapse-border-color);border-top:1px solid var(--el-collapse-border-color)}.el-collapse-item.is-disabled .el-collapse-item__header{color:var(--el-text-color-disabled);cursor:not-allowed}.el-collapse-item__header{align-items:center;background-color:var(--el-collapse-header-bg-color);border:none;border-bottom:1px solid var(--el-collapse-border-color);color:var(--el-collapse-header-text-color);cursor:pointer;display:flex;font-size:var(--el-collapse-header-font-size);font-weight:500;line-height:var(--el-collapse-header-height);min-height:var(--el-collapse-header-height);outline:none;padding:0;transition:border-bottom-color var(--el-transition-duration);width:100%}.el-collapse-item__arrow{font-weight:300;transition:transform var(--el-transition-duration)}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__title{flex:auto;text-align:left}.el-collapse-item__header.focusing:focus:not(:hover){color:var(--el-color-primary)}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{background-color:var(--el-collapse-content-bg-color);border-bottom:1px solid var(--el-collapse-border-color);box-sizing:border-box;overflow:hidden;will-change:height}.el-collapse-item__content{color:var(--el-collapse-content-text-color);font-size:var(--el-collapse-content-font-size);line-height:1.7692307692;padding-bottom:25px}.el-collapse-item:last-child{margin-bottom:-1px}.el-collapse-icon-position-left .el-collapse-item__header{gap:8px}.el-collapse-icon-position-left .el-collapse-item__title{order:1}.el-collapse-icon-position-right .el-collapse-item__header{padding-right:8px}.el-overlay.is-drawer{overflow:hidden}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color,var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary,20px);--el-drawer-dragger-size:8px;background-color:var(--el-drawer-bg-color);box-shadow:var(--el-box-shadow-dark);box-sizing:border-box;display:flex;flex-direction:column;position:absolute;transition:all var(--el-transition-duration)}.el-drawer .btt,.el-drawer .ltr,.el-drawer .rtl,.el-drawer .ttb{transform:translate(0)}.el-drawer__sr-focus:focus{outline:none!important}.el-drawer__header{align-items:center;color:var(--el-text-color-primary);display:flex;margin-bottom:32px;overflow:hidden;padding:var(--el-drawer-padding-primary);padding-bottom:0}.el-drawer__header>:first-child{flex:1}.el-drawer__title{flex:1;font-size:16px;line-height:inherit;margin:0}.el-drawer__footer{overflow:hidden;padding:var(--el-drawer-padding-primary);padding-top:10px;text-align:right}.el-drawer__close-btn{background-color:transparent;border:none;color:inherit;cursor:pointer;display:inline-flex;font-size:var(--el-font-size-extra-large);outline:none}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{flex:1;overflow:auto;padding:var(--el-drawer-padding-primary)}.el-drawer__body>*{box-sizing:border-box}.el-drawer.is-dragging{transition:none}.el-drawer__dragger{background-color:transparent;position:absolute;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-drawer__dragger:before{background-color:transparent;content:"";position:absolute;transition:all .2s}.el-drawer__dragger:hover:before{background-color:var(--el-color-primary)}.el-drawer.ltr,.el-drawer.rtl{bottom:0;height:100%;top:0}.el-drawer.ltr>.el-drawer__dragger,.el-drawer.rtl>.el-drawer__dragger{bottom:0;cursor:ew-resize;height:100%;top:0;width:var(--el-drawer-dragger-size)}.el-drawer.ltr>.el-drawer__dragger:before,.el-drawer.rtl>.el-drawer__dragger:before{bottom:0;top:0;width:3px}.el-drawer.btt,.el-drawer.ttb{left:0;right:0;width:100%}.el-drawer.btt>.el-drawer__dragger,.el-drawer.ttb>.el-drawer__dragger{cursor:ns-resize;height:var(--el-drawer-dragger-size);left:0;right:0;width:100%}.el-drawer.btt>.el-drawer__dragger:before,.el-drawer.ttb>.el-drawer__dragger:before{height:3px;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.ltr>.el-drawer__dragger{right:0}.el-drawer.ltr>.el-drawer__dragger:before{right:-2px}.el-drawer.rtl{right:0}.el-drawer.rtl>.el-drawer__dragger{left:0}.el-drawer.rtl>.el-drawer__dragger:before{left:-2px}.el-drawer.ttb{top:0}.el-drawer.ttb>.el-drawer__dragger{bottom:0}.el-drawer.ttb>.el-drawer__dragger:before{bottom:-2px}.el-drawer.btt{bottom:0}.el-drawer.btt>.el-drawer__dragger{top:0}.el-drawer.btt>.el-drawer__dragger:before{top:-2px}.el-modal-drawer.is-penetrable{pointer-events:none}.el-modal-drawer.is-penetrable .el-drawer{pointer-events:auto}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-active,.el-drawer-fade-enter-from,.el-drawer-fade-enter-to,.el-drawer-fade-leave-active,.el-drawer-fade-leave-from,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{background-color:transparent!important}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translate(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translate(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-container{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0}.el-container.is-vertical{flex-direction:column}.el-aside{box-sizing:border-box;flex-shrink:0;overflow:auto;width:var(--el-aside-width,300px)}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-footer-height);padding:var(--el-footer-padding)}.el-header{--el-header-padding:0 20px;--el-header-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.el-main{--el-main-padding:20px;box-sizing:border-box;display:block;flex:1;flex-basis:auto;overflow:auto;padding:var(--el-main-padding)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transform-origin:center top;transition:var(--el-transition-md-fade)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transform-origin:center bottom;transition:var(--el-transition-md-fade)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transform-origin:top left;transition:var(--el-transition-md-fade)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}:root{--el-menu-active-color:var(--el-color-primary);--el-menu-text-color:var(--el-text-color-primary);--el-menu-hover-text-color:var(--el-color-primary);--el-menu-bg-color:var(--el-fill-color-blank);--el-menu-hover-bg-color:var(--el-color-primary-light-9);--el-menu-item-height:56px;--el-menu-sub-item-height:calc(var(--el-menu-item-height) - 6px);--el-menu-horizontal-height:60px;--el-menu-horizontal-sub-item-height:36px;--el-menu-item-font-size:var(--el-font-size-base);--el-menu-item-hover-fill:var(--el-color-primary-light-9);--el-menu-border-color:var(--el-border-color);--el-menu-base-level-padding:20px;--el-menu-level-padding:20px;--el-menu-icon-width:24px}.el-menu{background-color:var(--el-menu-bg-color);border-right:1px solid var(--el-menu-border-color);box-sizing:border-box;list-style:none;margin:0;padding-left:0;position:relative}.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item-group__title,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-sub-menu__title{padding-left:calc(var(--el-menu-base-level-padding) + var(--el-menu-level)*var(--el-menu-level-padding));white-space:nowrap}.el-menu:not(.el-menu--collapse) .el-sub-menu__title{padding-right:calc(var(--el-menu-base-level-padding) + var(--el-menu-icon-width))}.el-menu--horizontal{border-right:none;display:flex;flex-wrap:nowrap;height:var(--el-menu-horizontal-height)}.el-menu--horizontal.el-menu--popup-container{height:unset}.el-menu--horizontal.el-menu{border-bottom:1px solid var(--el-menu-border-color)}.el-menu--horizontal>.el-menu-item{align-items:center;border-bottom:2px solid transparent;color:var(--el-menu-text-color);display:inline-flex;height:100%;justify-content:center;margin:0}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-sub-menu:focus,.el-menu--horizontal>.el-sub-menu:hover{outline:none}.el-menu--horizontal>.el-sub-menu:hover .el-sub-menu__title{color:var(--el-menu-hover-text-color)}.el-menu--horizontal>.el-sub-menu.is-active .el-sub-menu__title{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title{border-bottom:2px solid transparent;color:var(--el-menu-text-color);height:100%}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover{background-color:var(--el-menu-bg-color)}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-sub-menu__title{align-items:center;background-color:var(--el-menu-bg-color);color:var(--el-menu-text-color);display:flex;height:var(--el-menu-horizontal-sub-item-height);line-height:var(--el-menu-horizontal-sub-item-height);padding:0 10px}.el-menu--horizontal .el-menu .el-sub-menu__title{padding-right:40px}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-menu-item.is-active:hover,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title:hover{color:var(--el-menu-active-color)}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{background-color:var(--el-menu-hover-bg-color);color:var(--el-menu-active-color,var(--el-menu-hover-text-color));outline:none}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)!important}.el-menu--collapse{width:calc(var(--el-menu-icon-width) + var(--el-menu-base-level-padding)*2)}.el-menu--collapse>.el-menu-item [class^=el-icon],.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title [class^=el-icon],.el-menu--collapse>.el-sub-menu>.el-sub-menu__title [class^=el-icon]{margin:0;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-menu--collapse>.el-menu-item .el-sub-menu__icon-arrow,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title>span,.el-menu--collapse>.el-menu-item>span,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title>span{display:inline-block;height:0;overflow:hidden;visibility:hidden;width:0}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-sub-menu{min-width:200px}.el-menu--collapse .el-sub-menu.is-active .el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--popup{border:none;border-radius:var(--el-border-radius-small);box-shadow:var(--el-box-shadow-light);min-width:200px;padding:5px 0;z-index:100}.el-menu .el-icon{flex-shrink:0}.el-menu-item{align-items:center;box-sizing:border-box;color:var(--el-menu-text-color);cursor:pointer;display:flex;font-size:var(--el-menu-item-font-size);height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);list-style:none;padding:0 var(--el-menu-base-level-padding);position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);white-space:nowrap}.el-menu-item *{vertical-align:bottom}.el-menu-item i{color:inherit}.el-menu-item:focus,.el-menu-item:hover{outline:none}.el-menu-item:hover{background-color:var(--el-menu-hover-bg-color)}.el-menu-item.is-disabled{background:none!important;cursor:not-allowed;opacity:.25}.el-menu-item [class^=el-icon]{font-size:18px;margin-right:5px;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-menu-item.is-active{color:var(--el-menu-active-color)}.el-menu-item.is-active i{color:inherit}.el-menu-item .el-menu-tooltip__trigger{align-items:center;box-sizing:border-box;display:inline-flex;height:100%;left:0;padding:0 var(--el-menu-base-level-padding);position:absolute;top:0;width:100%}.el-sub-menu{list-style:none;margin:0;padding-left:0}.el-sub-menu__title{align-items:center;box-sizing:border-box;color:var(--el-menu-text-color);cursor:pointer;display:flex;font-size:var(--el-menu-item-font-size);height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);list-style:none;padding:0 var(--el-menu-base-level-padding);position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);white-space:nowrap}.el-sub-menu__title *{vertical-align:bottom}.el-sub-menu__title i{color:inherit}.el-sub-menu__title:focus,.el-sub-menu__title:hover{outline:none}.el-sub-menu__title.is-disabled{background:none!important;cursor:not-allowed;opacity:.25}.el-sub-menu__title:hover{background-color:var(--el-menu-hover-bg-color)}.el-sub-menu .el-menu{border:none}.el-sub-menu .el-menu-item{height:var(--el-menu-sub-item-height);line-height:var(--el-menu-sub-item-height)}.el-sub-menu.el-sub-menu__hide-arrow .el-sub-menu__title{padding-right:var(--el-menu-base-level-padding)}.el-sub-menu__hide-arrow .el-sub-menu__icon-arrow{display:none!important}.el-sub-menu.is-active .el-sub-menu__title{border-bottom-color:var(--el-menu-active-color)}.el-sub-menu.is-disabled .el-menu-item,.el-sub-menu.is-disabled .el-sub-menu__title{background:none!important;cursor:not-allowed;opacity:.25}.el-sub-menu .el-icon{font-size:18px;margin-right:5px;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-sub-menu .el-icon.el-sub-menu__icon-more{margin-right:0!important}.el-sub-menu .el-sub-menu__icon-arrow{font-size:12px;margin-right:0;margin-top:-6px;position:absolute;right:var(--el-menu-base-level-padding);top:50%;transition:transform var(--el-transition-duration);width:inherit}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{color:var(--el-text-color-secondary);font-size:12px;line-height:normal;padding:7px 0 7px var(--el-menu-base-level-padding)}.horizontal-collapse-transition .el-sub-menu__title .el-sub-menu__icon-arrow{opacity:0;transition:var(--el-transition-duration-fast)}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;display:inline-block;position:relative;vertical-align:middle;width:-moz-fit-content;width:fit-content}.el-badge__content{align-items:center;background-color:var(--el-badge-bg-color);border:1px solid var(--el-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);display:inline-flex;font-size:var(--el-badge-font-size);height:var(--el-badge-size);justify-content:center;padding:0 var(--el-badge-padding);white-space:nowrap}.el-badge__content.is-fixed{position:absolute;right:calc(1px + var(--el-badge-size)/2);top:0;transform:translateY(-50%) translate(100%);z-index:var(--el-index-normal)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{border-radius:50%;height:8px;padding:0;right:0;width:8px}.el-badge__content.is-hide-zero{display:none}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:11px 15px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary);align-items:center;background-color:var(--el-message-bg-color);border-color:var(--el-message-border-color);border-radius:var(--el-border-radius-base);border-style:var(--el-border-style);border-width:var(--el-border-width);box-sizing:border-box;display:flex;gap:8px;max-width:calc(100% - 32px);padding:var(--el-message-padding);position:fixed;transition:opacity var(--el-transition-duration),transform .4s,top .4s,bottom .4s;width:-moz-fit-content;width:fit-content}.el-message.is-left{left:16px}.el-message.is-right{right:16px}.el-message.is-center{left:0;margin:0 auto;right:0}.el-message.is-plain{background-color:var(--el-bg-color-overlay);border-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-message p{margin:0}.el-message--primary{--el-message-bg-color:var(--el-color-primary-light-9);--el-message-border-color:var(--el-color-primary-light-8);--el-message-text-color:var(--el-color-primary)}.el-message--primary .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--primary{color:var(--el-message-text-color)}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message .el-message__badge{position:absolute;right:-8px;top:-8px}.el-message__content{font-size:14px;line-height:1;padding:0}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{color:var(--el-message-close-icon-color);cursor:pointer;font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0;transform:translateY(-100%)}.el-message-fade-enter-from.is-bottom,.el-message-fade-leave-to.is-bottom{transform:translateY(100%)}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-box-shadow:var(--el-box-shadow);--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:12px;--el-messagebox-font-line-height:var(--el-font-line-height-primary);backface-visibility:hidden;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);box-shadow:var(--el-messagebox-box-shadow);box-sizing:border-box;display:inline-block;font-size:var(--el-messagebox-font-size);max-width:var(--el-messagebox-width);overflow:hidden;overflow-wrap:break-word;padding:var(--el-messagebox-padding-primary);position:relative;text-align:left;vertical-align:middle;width:100%}.el-message-box:focus{outline:none!important}.is-message-box .el-overlay-message-box{inset:0;overflow:auto;padding:16px;position:fixed;text-align:center}.is-message-box .el-overlay-message-box:after{content:"";display:inline-block;height:100%;vertical-align:middle;width:0}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-message-box__header{padding-bottom:var(--el-messagebox-padding-primary)}.el-message-box__header.show-close{padding-right:calc(var(--el-messagebox-padding-primary) + var(--el-message-close-size, 16px))}.el-message-box__title{color:var(--el-messagebox-title-color);font-size:var(--el-messagebox-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:40px;outline:none;padding:0;position:absolute;right:0;top:0;width:40px}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{align-items:center;display:flex;gap:12px}.el-message-box__input{padding-top:12px}.el-message-box__input div.invalid>input{border-color:var(--el-color-error)}.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{font-size:24px}.el-message-box__status.el-message-box-icon--primary{--el-messagebox-color:var(--el-color-primary);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{margin:0;min-width:0}.el-message-box__message p{line-height:var(--el-messagebox-font-line-height);margin:0}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__btns{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-end;padding-top:var(--el-messagebox-padding-primary)}.el-message-box--center .el-message-box__title{align-items:center;display:flex;gap:6px;justify-content:center}.el-message-box--center .el-message-box__status{font-size:inherit}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__container{justify-content:center}.el-message-box-parent--hidden{overflow:hidden}.fade-in-linear-enter-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@keyframes msgbox-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}.layout-root[data-v-a6c642de]{height:100%}.layout-aside[data-v-a6c642de]{background:#fff;border-right:1px solid var(--app-border)}.brand[data-v-a6c642de],.drawer-brand[data-v-a6c642de]{padding:18px 16px 10px}.brand-title[data-v-a6c642de]{font-size:15px;font-weight:800;letter-spacing:.2px}.brand-sub[data-v-a6c642de]{margin-top:2px;font-size:12px}.aside-menu[data-v-a6c642de]{border-right:none}.layout-header[data-v-a6c642de]{display:flex;align-items:center;justify-content:space-between;gap:12px;background:#f6f7fb99;-webkit-backdrop-filter:saturate(180%) blur(10px);backdrop-filter:saturate(180%) blur(10px);border-bottom:1px solid var(--app-border)}.header-left[data-v-a6c642de]{display:flex;align-items:center;gap:10px;min-width:0}.header-title[data-v-a6c642de]{font-size:14px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.header-menu-btn[data-v-a6c642de]{padding-left:0;padding-right:0}.header-right[data-v-a6c642de]{display:flex;align-items:center;gap:12px}.user-meta[data-v-a6c642de]{display:flex;align-items:center;gap:8px;min-width:0}.user-name[data-v-a6c642de]{font-size:13px;font-weight:700;max-width:180px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.vip-warn[data-v-a6c642de]{font-size:12px;color:var(--app-muted);white-space:nowrap}.layout-main[data-v-a6c642de]{padding:16px}.drawer-user[data-v-a6c642de]{padding:0 16px 10px;display:flex;align-items:center;gap:8px}.drawer-actions[data-v-a6c642de]{padding:12px 16px 4px;border-top:1px solid var(--app-border)}.announcement-body[data-v-a6c642de]{min-height:80px}.announcement-content[data-v-a6c642de]{white-space:pre-wrap;line-height:1.6;font-size:14px}.announcement-image[data-v-a6c642de]{margin-top:12px;display:flex;justify-content:center}.announcement-image img[data-v-a6c642de]{max-width:100%;max-height:320px;border-radius:10px;border:1px solid var(--app-border);object-fit:contain}.feedback-title[data-v-a6c642de]{display:flex;align-items:center;gap:10px;width:100%;min-width:0}.feedback-title-text[data-v-a6c642de]{font-weight:800;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feedback-time[data-v-a6c642de]{margin-left:auto;font-size:12px;white-space:nowrap}.feedback-body[data-v-a6c642de]{padding:6px 0 2px}.feedback-section+.feedback-section[data-v-a6c642de]{margin-top:12px}.feedback-label[data-v-a6c642de]{font-size:12px;margin-bottom:6px}.feedback-text[data-v-a6c642de]{white-space:pre-wrap;line-height:1.6;font-size:13px}.settings-section[data-v-a6c642de]{padding:6px 2px 2px}.settings-alert[data-v-a6c642de]{margin-bottom:12px}.email-row[data-v-a6c642de]{display:flex;align-items:center;justify-content:space-between;gap:12px}.email-value[data-v-a6c642de]{font-weight:800;min-width:0;overflow:hidden;text-overflow:ellipsis}.notify-row[data-v-a6c642de]{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.notify-title[data-v-a6c642de]{font-weight:800}.notify-desc[data-v-a6c642de]{margin-top:4px;font-size:12px}.settings-hint[data-v-a6c642de]{margin-top:10px}.vip-info[data-v-a6c642de]{margin-top:12px;display:grid;gap:10px}.vip-line[data-v-a6c642de]{display:flex;align-items:center;justify-content:space-between;gap:12px}@media(max-width:768px){.layout-header[data-v-a6c642de]{flex-wrap:wrap;height:auto;padding-top:10px;padding-bottom:10px}.header-right[data-v-a6c642de]{width:100%;justify-content:flex-end}.layout-main[data-v-a6c642de]{padding:12px}.user-name[data-v-a6c642de]{max-width:120px}} diff --git a/static/app/assets/AppLayout-BVxPO9-W.js b/static/app/assets/AppLayout-CJ_Pqzl7.js similarity index 75% rename from static/app/assets/AppLayout-BVxPO9-W.js rename to static/app/assets/AppLayout-CJ_Pqzl7.js index f766e75..822806e 100644 --- a/static/app/assets/AppLayout-BVxPO9-W.js +++ b/static/app/assets/AppLayout-CJ_Pqzl7.js @@ -1 +1 @@ -import{e as Hl,f as Wl,g as Fa,h as Tn,k as Ba,j as Ha,l as Wa,m as Va,n as _l,o as an,p as za,S as Ka,q as Da,r as ot,s as at,b as ze,t as Re,u as re,v as lt,_ as xe,d as st,x as It,y as ht,z as Ua,A as We,B as Ge,C as ja,D as qa,F as Ya,G as Ft,H as Mn,I as Xe,J as Ot,K as Ve,T as Xa,L as Rn,M as Te,N as on,O as sn,P as Ga,Q as gt,R as On,U as rn,V as Ja,W as Qa,X as Za,Y as eo,Z as to,$ as lo,a0 as no,a1 as un,a2 as ao,a3 as Mt,a4 as oo,a5 as so,a6 as ro,E as io}from"./el-button-DWxIvzz-.js";import{i as uo,E as co,a as Pt,o as fo,u as vo,b as po}from"./user-Bl59IefW.js";import{b as mo,f as $n,d as ho,a as go,u as bo,E as yo,c as Co,e as wo,g as tl,C as So,h as _o,i as Ln,j as nt,k as xo,l as Eo,m as ko,n as No,o as To,p as hl}from"./el-overlay-C_JJBVfE.js";import{c as Mo,k as Pn,d as Ro,e as Oo,f as $o,i as Lo,a as Po,b as Ao,E as Io}from"./el-alert-DB2IQLpH.js";import{b as Fo,C as An,U as ll,m as At,c as Gt,t as Ze,u as Bo,d as $t,g as Ct,e as ve,f as Kt,h as Ho,i as wt,j as Wo,k as Vo,l as zo,n as Ko,o as Do,q as dn,p as nl,E as Uo,a as fe}from"./http-CdvgQxJu.js";import{E as xl,A as le,G as q,H as Dt,i as Ue,I as Vl,J as ye,K as Me,g as S,L as pe,h as I,M as St,N as cn,j as te,o as z,B as ue,n as Q,C as y,c as de,s as A,O as zl,P as jo,T as al,Q as _e,k as D,q as M,x as ce,t as be,D as El,m as In,p as Fn,w as Fe,R as dt,S as Kl,U as De,l as he,z as et,f as Qe,V as Se,F as He,W as $e,X as ct,Y as Jt,Z as qo,_ as bt,$ as Bn,a0 as Be,a1 as fn,a2 as Hn,a3 as Wn,r as Ie,a4 as Lt,a5 as Vn,a6 as zn,a7 as Dl,a8 as Yo,a9 as Xo,d as Go,aa as Jo,y as Qo,u as Zo}from"./vendor-vue-DxN60LNb.js";import{u as es,b as ts,a as ls,c as ns,d as vn,e as as,r as os,f as ss,g as rs,h as is,i as us,j as ds,k as cs}from"./settings-Ddo8isuv.js";import{v as fs}from"./password-7ryi82gE.js";import{_ as vs}from"./style-CEbARg1o.js";import{b as ps,i as ms,d as Qt}from"./isArrayLikeObject-BjIRF-cS.js";import"./vendor-axios-B9ygI19o.js";function hs(e,t,l){if(!Hl(l))return!1;var n=typeof t;return(n=="number"?Wl(l)&&Fa(t,l.length):n=="string"&&t in l)?Tn(l[t],e):!1}function gs(e){return ps(function(t,l){var n=-1,a=l.length,s=a>1?l[a-1]:void 0,u=a>2?l[2]:void 0;for(s=e.length>3&&typeof s=="function"?(a--,s):void 0,u&&hs(l[0],l[1],u)&&(s=a<3?void 0:s,a=1),t=Object(t);++not?window.requestAnimationFrame(e):setTimeout(e,16),ks=e=>ot?window.cancelAnimationFrame(e):clearTimeout(e),Ns=(e,t,l)=>$n(e.subTree).filter(s=>{var u;return Vl(s)&&((u=s.type)==null?void 0:u.name)===t&&!!s.component}).map(s=>s.component.uid).map(s=>l[s]).filter(s=>!!s),Ts=(e,t)=>{const l=xl({}),n=xl([]),a=new WeakMap,s=c=>{l.value[c.uid]=c,Dt(l),Ue(()=>{const f=c.getVnode().el,v=f.parentNode;if(!a.has(v)){a.set(v,[]);const d=v.insertBefore.bind(v);v.insertBefore=(p,m)=>(a.get(v).some(L=>p===L||m===L)&&Dt(l),d(p,m))}a.get(v).push(f)})},u=c=>{delete l.value[c.uid],Dt(l);const f=c.getVnode().el,v=f.parentNode,d=a.get(v),p=d.indexOf(f);d.splice(p,1)},o=()=>{n.value=Ns(e,t,l.value)},r=c=>c.render(),i=le({setup(c,{slots:f}){return()=>(o(),f.default?q(r,{render:f.default}):null)}});return{children:n,addChild:s,removeChild:u,ChildrenSorter:i}},pn=e=>at(e)||ye(e)||Me(e),Ms=ze({accordion:Boolean,modelValue:{type:Re([Array,String,Number]),default:()=>At([])},expandIconPosition:{type:Re([String]),default:"right"},beforeCollapse:{type:Re(Function)}}),Rs={[ll]:pn,[An]:pn},Yn=Symbol("collapseContextKey"),Os="ElCollapse",$s=(e,t)=>{const l=S(Gt(e.modelValue)),n=u=>{l.value=u;const o=e.accordion?l.value[0]:l.value;t(ll,o),t(An,o)},a=u=>{if(e.accordion)n([l.value[0]===u?"":u]);else{const o=[...l.value],r=o.indexOf(u);r>-1?o.splice(r,1):o.push(u),n(o)}},s=async u=>{const{beforeCollapse:o}=e;if(!o){a(u);return}const r=o(u);[cn(r),lt(r)].includes(!0)||Ze(Os,"beforeCollapse must return type `Promise` or `boolean`"),cn(r)?r.then(c=>{c!==!1&&a(u)}).catch(c=>{}):r&&a(u)};return pe(()=>e.modelValue,()=>l.value=Gt(e.modelValue),{deep:!0}),St(Yn,{activeNames:l,handleItemClick:s}),{activeNames:l,setActiveNames:n}},Ls=e=>{const t=re("collapse");return{rootKls:I(()=>[t.b(),t.b(`icon-position-${e.expandIconPosition}`)])}},Ps=le({name:"ElCollapse"}),As=le({...Ps,props:Ms,emits:Rs,setup(e,{expose:t,emit:l}){const n=e,{activeNames:a,setActiveNames:s}=$s(n,l),{rootKls:u}=Ls(n);return t({activeNames:a,setActiveNames:s}),(o,r)=>(z(),te("div",{class:Q(y(u))},[ue(o.$slots,"default")],2))}});var Is=xe(As,[["__file","collapse.vue"]]);const Fs=le({name:"ElCollapseTransition"}),Bs=le({...Fs,setup(e){const t=re("collapse-transition"),l=a=>{a.style.maxHeight="",a.style.overflow=a.dataset.oldOverflow,a.style.paddingTop=a.dataset.oldPaddingTop,a.style.paddingBottom=a.dataset.oldPaddingBottom},n={beforeEnter(a){a.dataset||(a.dataset={}),a.dataset.oldPaddingTop=a.style.paddingTop,a.dataset.oldPaddingBottom=a.style.paddingBottom,a.style.height&&(a.dataset.elExistsHeight=a.style.height),a.style.maxHeight=0,a.style.paddingTop=0,a.style.paddingBottom=0},enter(a){requestAnimationFrame(()=>{a.dataset.oldOverflow=a.style.overflow,a.dataset.elExistsHeight?a.style.maxHeight=a.dataset.elExistsHeight:a.scrollHeight!==0?a.style.maxHeight=`${a.scrollHeight}px`:a.style.maxHeight=0,a.style.paddingTop=a.dataset.oldPaddingTop,a.style.paddingBottom=a.dataset.oldPaddingBottom,a.style.overflow="hidden"})},afterEnter(a){a.style.maxHeight="",a.style.overflow=a.dataset.oldOverflow},enterCancelled(a){l(a)},beforeLeave(a){a.dataset||(a.dataset={}),a.dataset.oldPaddingTop=a.style.paddingTop,a.dataset.oldPaddingBottom=a.style.paddingBottom,a.dataset.oldOverflow=a.style.overflow,a.style.maxHeight=`${a.scrollHeight}px`,a.style.overflow="hidden"},leave(a){a.scrollHeight!==0&&(a.style.maxHeight=0,a.style.paddingTop=0,a.style.paddingBottom=0)},afterLeave(a){l(a)},leaveCancelled(a){l(a)}};return(a,s)=>(z(),de(al,zl({name:y(t).b()},jo(n)),{default:A(()=>[ue(a.$slots,"default")]),_:3},16,["name"]))}});var Hs=xe(Bs,[["__file","collapse-transition.vue"]]);const Xn=st(Hs),Ws=ze({title:{type:String,default:""},name:{type:Re([String,Number]),default:void 0},icon:{type:ht,default:It},disabled:Boolean}),Vs=e=>{const t=_e(Yn),{namespace:l}=re("collapse"),n=S(!1),a=S(!1),s=Ua(),u=I(()=>s.current++),o=I(()=>{var v;return(v=e.name)!=null?v:`${l.value}-id-${s.prefix}-${y(u)}`}),r=I(()=>t?.activeNames.value.includes(y(o)));return{focusing:n,id:u,isActive:r,handleFocus:()=>{setTimeout(()=>{a.value?a.value=!1:n.value=!0},50)},handleHeaderClick:v=>{if(e.disabled)return;const d=v.target;d?.closest("input, textarea, select")||(t?.handleItemClick(y(o)),n.value=!1,a.value=!0)},handleEnterClick:v=>{const d=v.target;d?.closest("input, textarea, select")||(v.preventDefault(),t?.handleItemClick(y(o)))}}},zs=(e,{focusing:t,isActive:l,id:n})=>{const a=re("collapse"),s=I(()=>[a.b("item"),a.is("active",y(l)),a.is("disabled",e.disabled)]),u=I(()=>[a.be("item","header"),a.is("active",y(l)),{focusing:y(t)&&!e.disabled}]),o=I(()=>[a.be("item","arrow"),a.is("active",y(l))]),r=I(()=>[a.be("item","title")]),i=I(()=>a.be("item","wrap")),c=I(()=>a.be("item","content")),f=I(()=>a.b(`content-${y(n)}`)),v=I(()=>a.b(`head-${y(n)}`));return{itemTitleKls:r,arrowKls:o,headKls:u,rootKls:s,itemWrapperKls:i,itemContentKls:c,scopedContentId:f,scopedHeadId:v}},Ks=le({name:"ElCollapseItem"}),Ds=le({...Ks,props:Ws,setup(e,{expose:t}){const l=e,{focusing:n,id:a,isActive:s,handleFocus:u,handleHeaderClick:o,handleEnterClick:r}=Vs(l),{arrowKls:i,headKls:c,rootKls:f,itemTitleKls:v,itemWrapperKls:d,itemContentKls:p,scopedContentId:m,scopedHeadId:w}=zs(l,{focusing:n,isActive:s,id:a});return t({isActive:s}),(L,O)=>(z(),te("div",{class:Q(y(f))},[D("div",{id:y(w),class:Q(y(c)),"aria-expanded":y(s),"aria-controls":y(m),"aria-describedby":y(m),tabindex:L.disabled?void 0:0,"aria-disabled":L.disabled,role:"button",onClick:y(o),onKeydown:In(Fn(y(r),["stop"]),["space","enter"]),onFocus:y(u),onBlur:E=>n.value=!1},[D("span",{class:Q(y(v))},[ue(L.$slots,"title",{isActive:y(s)},()=>[ce(be(L.title),1)])],2),ue(L.$slots,"icon",{isActive:y(s)},()=>[M(y(We),{class:Q(y(i))},{default:A(()=>[(z(),de(El(L.icon)))]),_:1},8,["class"])])],42,["id","aria-expanded","aria-controls","aria-describedby","tabindex","aria-disabled","onClick","onKeydown","onFocus","onBlur"]),M(y(Xn),null,{default:A(()=>[Fe(D("div",{id:y(m),role:"region",class:Q(y(d)),"aria-hidden":!y(s),"aria-labelledby":y(w)},[D("div",{class:Q(y(p))},[ue(L.$slots,"default")],2)],10,["id","aria-hidden","aria-labelledby"]),[[dt,y(s)]])]),_:3})],2))}});var Gn=xe(Ds,[["__file","collapse-item.vue"]]);const Us=st(Is,{CollapseItem:Gn}),js=Ge(Gn),qs=le({name:"ElContainer"}),Ys=le({...qs,props:ze({direction:{type:String,values:["horizontal","vertical"]}}),setup(e){const t=e,l=Kl(),n=re("container"),a=I(()=>t.direction==="vertical"?!0:t.direction==="horizontal"?!1:l&&l.default?l.default().some(u=>{const o=u.type.name;return o==="ElHeader"||o==="ElFooter"}):!1);return(s,u)=>(z(),te("section",{class:Q([y(n).b(),y(n).is("vertical",y(a))])},[ue(s.$slots,"default")],2))}});var Xs=xe(Ys,[["__file","container.vue"]]);const Gs=le({name:"ElAside"}),Js=le({...Gs,props:{width:{type:String,default:null}},setup(e){const t=e,l=re("aside"),n=I(()=>t.width?l.cssVarBlock({width:t.width}):{});return(a,s)=>(z(),te("aside",{class:Q(y(l).b()),style:De(y(n))},[ue(a.$slots,"default")],6))}});var Jn=xe(Js,[["__file","aside.vue"]]);const Qs=le({name:"ElFooter"}),Zs=le({...Qs,props:{height:{type:String,default:null}},setup(e){const t=e,l=re("footer"),n=I(()=>t.height?l.cssVarBlock({height:t.height}):{});return(a,s)=>(z(),te("footer",{class:Q(y(l).b()),style:De(y(n))},[ue(a.$slots,"default")],6))}});var Qn=xe(Zs,[["__file","footer.vue"]]);const er=le({name:"ElHeader"}),tr=le({...er,props:{height:{type:String,default:null}},setup(e){const t=e,l=re("header"),n=I(()=>t.height?l.cssVarBlock({height:t.height}):{});return(a,s)=>(z(),te("header",{class:Q(y(l).b()),style:De(y(n))},[ue(a.$slots,"default")],6))}});var Zn=xe(tr,[["__file","header.vue"]]);const lr=le({name:"ElMain"}),nr=le({...lr,setup(e){const t=re("main");return(l,n)=>(z(),te("main",{class:Q(y(t).b())},[ue(l.$slots,"default")],2))}});var ea=xe(nr,[["__file","main.vue"]]);const ar=st(Xs,{Aside:Jn,Footer:Qn,Header:Zn,Main:ea}),or=Ge(Jn);Ge(Qn);const sr=Ge(Zn),rr=Ge(ea),ir=ze({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:Re(String),default:"solid"}}),ur=le({name:"ElDivider"}),dr=le({...ur,props:ir,setup(e){const t=e,l=re("divider"),n=I(()=>l.cssVar({"border-style":t.borderStyle}));return(a,s)=>(z(),te("div",{class:Q([y(l).b(),y(l).m(a.direction)]),style:De(y(n)),role:"separator"},[a.$slots.default&&a.direction!=="vertical"?(z(),te("div",{key:0,class:Q([y(l).e("text"),y(l).is(a.contentPosition)])},[ue(a.$slots,"default")],2)):he("v-if",!0)],6))}});var cr=xe(dr,[["__file","divider.vue"]]);const fr=st(cr),vr=ze({...go,direction:{type:String,default:"rtl",values:["ltr","rtl","ttb","btt"]},resizable:Boolean,size:{type:[String,Number],default:"30%"},withHeader:{type:Boolean,default:!0},modalFade:{type:Boolean,default:!0},headerAriaLevel:{type:String,default:"2"}}),pr={...ho,"resize-start":(e,t)=>e instanceof MouseEvent&&typeof t=="number",resize:(e,t)=>e instanceof MouseEvent&&typeof t=="number","resize-end":(e,t)=>e instanceof MouseEvent&&typeof t=="number"};function mr(e,t,l){const{width:n,height:a}=Bo(),s=I(()=>["ltr","rtl"].includes(e.direction)),u=I(()=>["ltr","ttb"].includes(e.direction)?1:-1),o=I(()=>s.value?n.value:a.value),r=I(()=>ja(i.value+u.value*c.value,4,o.value)),i=S(0),c=S(0),f=S(!1),v=S(!1);let d=[],p=[];const m=()=>{var h;const g=(h=t.value)==null?void 0:h.closest('[aria-modal="true"]');return g?s.value?g.offsetWidth:g.offsetHeight:100};pe(()=>[e.size,e.resizable],()=>{v.value=!1,i.value=0,c.value=0,O()});const w=h=>{e.resizable&&(v.value||(i.value=m(),v.value=!0),d=[h.pageX,h.pageY],f.value=!0,l("resize-start",h,i.value),p.push($t(window,"mouseup",O),$t(window,"mousemove",L)))},L=h=>{const{pageX:g,pageY:x}=h,C=g-d[0],_=x-d[1];c.value=s.value?C:_,l("resize",h,r.value)},O=h=>{f.value&&(d=[],i.value=r.value,c.value=0,f.value=!1,p.forEach(g=>g?.()),p=[],h&&l("resize-end",h,i.value))},E=$t(t,"mousedown",w);return et(()=>{E(),O()}),{size:I(()=>v.value?`${r.value}px`:qa(e.size)),isResizing:f,isHorizontal:s}}const hr=le({name:"ElDrawer",inheritAttrs:!1}),gr=le({...hr,props:vr,emits:pr,setup(e,{expose:t,emit:l}){const n=e,a=Kl();Ya({scope:"el-drawer",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/drawer.html#slots"},I(()=>!!a.title));const s=S(),u=S(),o=S(),r=re("drawer"),{t:i}=Ft(),{afterEnter:c,afterLeave:f,beforeLeave:v,visible:d,rendered:p,titleId:m,bodyId:w,zIndex:L,onModalClick:O,onOpenAutoFocus:E,onCloseAutoFocus:h,onFocusoutPrevented:g,onCloseRequested:x,handleClose:C}=bo(n,s),{isHorizontal:_,size:P,isResizing:F}=mr(n,o,l),V=I(()=>n.modalPenetrable&&!n.modal);return t({handleClose:C,afterEnter:c,afterLeave:f}),(B,G)=>(z(),de(y(wo),{to:B.appendTo,disabled:B.appendTo!=="body"?!1:!B.appendToBody},{default:A(()=>[M(al,{name:y(r).b("fade"),onAfterEnter:y(c),onAfterLeave:y(f),onBeforeLeave:y(v),persisted:""},{default:A(()=>{var Y;return[Fe(M(y(yo),{mask:B.modal,"overlay-class":[y(r).is("drawer"),(Y=B.modalClass)!=null?Y:"",`${y(r).namespace.value}-modal-drawer`,y(r).is("penetrable",y(V))],"z-index":y(L),onClick:y(O)},{default:A(()=>[M(y(Co),{loop:"",trapped:y(d),"focus-trap-el":s.value,"focus-start-el":u.value,onFocusAfterTrapped:y(E),onFocusAfterReleased:y(h),onFocusoutPrevented:y(g),onReleaseRequested:y(x)},{default:A(()=>[D("div",zl({ref_key:"drawerRef",ref:s,"aria-modal":"true","aria-label":B.title||void 0,"aria-labelledby":B.title?void 0:y(m),"aria-describedby":y(w)},B.$attrs,{class:[y(r).b(),B.direction,y(d)&&"open",y(r).is("dragging",y(F))],style:{[y(_)?"width":"height"]:y(P)},role:"dialog",onClick:Fn(()=>{},["stop"])}),[D("span",{ref_key:"focusStartRef",ref:u,class:Q(y(r).e("sr-focus")),tabindex:"-1"},null,2),B.withHeader?(z(),te("header",{key:0,class:Q([y(r).e("header"),B.headerClass])},[B.$slots.title?ue(B.$slots,"title",{key:1},()=>[he(" DEPRECATED SLOT ")]):ue(B.$slots,"header",{key:0,close:y(C),titleId:y(m),titleClass:y(r).e("title")},()=>[D("span",{id:y(m),role:"heading","aria-level":B.headerAriaLevel,class:Q(y(r).e("title"))},be(B.title),11,["id","aria-level"])]),B.showClose?(z(),te("button",{key:2,"aria-label":y(i)("el.drawer.close"),class:Q(y(r).e("close-btn")),type:"button",onClick:y(C)},[M(y(We),{class:Q(y(r).e("close"))},{default:A(()=>[M(y(Mn))]),_:1},8,["class"])],10,["aria-label","onClick"])):he("v-if",!0)],2)):he("v-if",!0),y(p)?(z(),te("div",{key:1,id:y(w),class:Q([y(r).e("body"),B.bodyClass])},[ue(B.$slots,"default")],10,["id"])):he("v-if",!0),B.$slots.footer?(z(),te("div",{key:2,class:Q([y(r).e("footer"),B.footerClass])},[ue(B.$slots,"footer")],2)):he("v-if",!0),B.resizable?(z(),te("div",{key:3,ref_key:"draggerRef",ref:o,style:De({zIndex:y(L)}),class:Q(y(r).e("dragger"))},null,6)):he("v-if",!0)],16,["aria-label","aria-labelledby","aria-describedby","onClick"])]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])]),_:3},8,["mask","overlay-class","z-index","onClick"]),[[dt,y(d)]])]}),_:3},8,["name","onAfterEnter","onAfterLeave","onBeforeLeave"])]),_:3},8,["to","disabled"]))}});var br=xe(gr,[["__file","drawer.vue"]]);const yr=st(br);let Cr=class{constructor(t,l){this.parent=t,this.domNode=l,this.subIndex=0,this.subIndex=0,this.init()}init(){this.subMenuItems=this.domNode.querySelectorAll("li"),this.addListeners()}gotoSubIndex(t){t===this.subMenuItems.length?t=0:t<0&&(t=this.subMenuItems.length-1),this.subMenuItems[t].focus(),this.subIndex=t}addListeners(){const t=this.parent.domNode;Array.prototype.forEach.call(this.subMenuItems,l=>{l.addEventListener("keydown",n=>{const a=Ct(n);let s=!1;switch(a){case ve.down:{this.gotoSubIndex(this.subIndex+1),s=!0;break}case ve.up:{this.gotoSubIndex(this.subIndex-1),s=!0;break}case ve.tab:{Kt(t,"mouseleave");break}case ve.enter:case ve.numpadEnter:case ve.space:{s=!0,n.currentTarget.click();break}}return s&&(n.preventDefault(),n.stopPropagation()),!1})})}},wr=class{constructor(t,l){this.domNode=t,this.submenu=null,this.submenu=null,this.init(l)}init(t){this.domNode.setAttribute("tabindex","0");const l=this.domNode.querySelector(`.${t}-menu`);l&&(this.submenu=new Cr(this,l)),this.addListeners()}addListeners(){this.domNode.addEventListener("keydown",t=>{const l=Ct(t);let n=!1;switch(l){case ve.down:{Kt(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(0),n=!0;break}case ve.up:{Kt(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(this.submenu.subMenuItems.length-1),n=!0;break}case ve.tab:{Kt(t.currentTarget,"mouseleave");break}case ve.enter:case ve.numpadEnter:case ve.space:{n=!0,t.currentTarget.click();break}}n&&t.preventDefault()})}},Sr=class{constructor(t,l){this.domNode=t,this.init(l)}init(t){const l=this.domNode.childNodes;Array.from(l).forEach(n=>{n.nodeType===1&&new wr(n,t)})}};const _r=le({name:"ElMenuCollapseTransition"}),xr=le({..._r,setup(e){const t=re("menu"),l={onBeforeEnter:n=>n.style.opacity="0.2",onEnter(n,a){Xe(n,`${t.namespace.value}-opacity-transition`),n.style.opacity="1",a()},onAfterEnter(n){Ve(n,`${t.namespace.value}-opacity-transition`),n.style.opacity=""},onBeforeLeave(n){n.dataset||(n.dataset={}),Ot(n,t.m("collapse"))?(Ve(n,t.m("collapse")),n.dataset.oldOverflow=n.style.overflow,n.dataset.scrollWidth=n.clientWidth.toString(),Xe(n,t.m("collapse"))):(Xe(n,t.m("collapse")),n.dataset.oldOverflow=n.style.overflow,n.dataset.scrollWidth=n.clientWidth.toString(),Ve(n,t.m("collapse"))),n.style.width=`${n.scrollWidth}px`,n.style.overflow="hidden"},onLeave(n){Xe(n,"horizontal-collapse-transition"),n.style.width=`${n.dataset.scrollWidth}px`}};return(n,a)=>(z(),de(al,zl({mode:"out-in"},y(l)),{default:A(()=>[ue(n.$slots,"default")]),_:3},16))}});var Er=xe(xr,[["__file","menu-collapse-transition.vue"]]);function ta(e,t){const l=I(()=>{let a=e.parent;const s=[t.value];for(;a.type.name!=="ElMenu";)a.props.index&&s.unshift(a.props.index),a=a.parent;return s});return{parentMenu:I(()=>{let a=e.parent;for(;a&&!["ElMenu","ElSubMenu"].includes(a.type.name);)a=a.parent;return a}),indexPath:l}}function kr(e){return I(()=>{const l=e.backgroundColor;return l?new Xa(l).shade(20).toString():""})}const la=(e,t)=>{const l=re("menu");return I(()=>l.cssVarBlock({"text-color":e.textColor||"","hover-text-color":e.textColor||"","bg-color":e.backgroundColor||"","hover-bg-color":kr(e).value||"","active-color":e.activeTextColor||"",level:`${t}`}))},Ul="rootMenu",Zt="subMenu:",Nr=ze({index:{type:String,required:!0},showTimeout:Number,hideTimeout:Number,popperClass:String,popperStyle:{type:Re([String,Object])},disabled:Boolean,teleported:{type:Boolean,default:void 0},popperOffset:Number,expandCloseIcon:{type:ht},expandOpenIcon:{type:ht},collapseCloseIcon:{type:ht},collapseOpenIcon:{type:ht}}),gl="ElSubMenu";var jl=le({name:gl,props:Nr,setup(e,{slots:t,expose:l}){const n=Se(),{indexPath:a,parentMenu:s}=ta(n,I(()=>e.index)),u=re("menu"),o=re("sub-menu"),r=_e(Ul);r||Ze(gl,"can not inject root menu");const i=_e(`${Zt}${s.value.uid}`);i||Ze(gl,"can not inject sub menu");const c=S({}),f=S({});let v;const d=S(!1),p=S(),m=S(),w=I(()=>i.level===0),L=I(()=>_.value==="horizontal"&&w.value?"bottom-start":"right-start"),O=I(()=>_.value==="horizontal"&&w.value||_.value==="vertical"&&!r.props.collapse?e.expandCloseIcon&&e.expandOpenIcon?x.value?e.expandOpenIcon:e.expandCloseIcon:Rn:e.collapseCloseIcon&&e.collapseOpenIcon?x.value?e.collapseOpenIcon:e.collapseCloseIcon:It),E=I(()=>{const R=e.teleported;return Te(R)?w.value:R}),h=I(()=>r.props.collapse?`${u.namespace.value}-zoom-in-left`:`${u.namespace.value}-zoom-in-top`),g=I(()=>_.value==="horizontal"&&w.value?["bottom-start","bottom-end","top-start","top-end","right-start","left-start"]:["right-start","right","right-end","left-start","bottom-start","bottom-end","top-start","top-end"]),x=I(()=>r.openedMenus.includes(e.index)),C=I(()=>[...Object.values(c.value),...Object.values(f.value)].some(({active:R})=>R)),_=I(()=>r.props.mode),P=I(()=>r.props.persistent),F=Qe({index:e.index,indexPath:a,active:C}),V=la(r.props,i.level+1),B=I(()=>{var R;return(R=e.popperOffset)!=null?R:r.props.popperOffset}),G=I(()=>{var R;return(R=e.popperClass)!=null?R:r.props.popperClass}),Y=I(()=>{var R;return(R=e.popperStyle)!=null?R:r.props.popperStyle}),ie=I(()=>{var R;return(R=e.showTimeout)!=null?R:r.props.showTimeout}),J=I(()=>{var R;return(R=e.hideTimeout)!=null?R:r.props.hideTimeout}),N=()=>{var R,K,U;return(U=(K=(R=m.value)==null?void 0:R.popperRef)==null?void 0:K.popperInstanceRef)==null?void 0:U.destroy()},$=R=>{R||N()},H=()=>{r.props.menuTrigger==="hover"&&r.props.mode==="horizontal"||r.props.collapse&&r.props.mode==="vertical"||e.disabled||r.handleSubMenuClick({index:e.index,indexPath:a.value,active:C.value})},k=(R,K=ie.value)=>{var U;if(R.type!=="focus"){if(r.props.menuTrigger==="click"&&r.props.mode==="horizontal"||!r.props.collapse&&r.props.mode==="vertical"||e.disabled){i.mouseInChild.value=!0;return}i.mouseInChild.value=!0,v?.(),{stop:v}=on(()=>{r.openMenu(e.index,a.value)},K),E.value&&((U=s.value.vnode.el)==null||U.dispatchEvent(new MouseEvent("mouseenter"))),R.type==="mouseenter"&&R.target&&$e(()=>{Ho(R.target,{preventScroll:!0})})}},W=(R=!1)=>{var K;if(r.props.menuTrigger==="click"&&r.props.mode==="horizontal"||!r.props.collapse&&r.props.mode==="vertical"){i.mouseInChild.value=!1;return}v?.(),i.mouseInChild.value=!1,{stop:v}=on(()=>!d.value&&r.closeMenu(e.index,a.value),J.value),E.value&&R&&((K=i.handleMouseleave)==null||K.call(i,!0))};pe(()=>r.props.collapse,R=>$(!!R));{const R=U=>{f.value[U.index]=U},K=U=>{delete f.value[U.index]};St(`${Zt}${n.uid}`,{addSubMenu:R,removeSubMenu:K,handleMouseleave:W,mouseInChild:d,level:i.level+1})}return l({opened:x}),Ue(()=>{r.addSubMenu(F),i.addSubMenu(F)}),et(()=>{i.removeSubMenu(F),r.removeSubMenu(F)}),()=>{var R;const K=[(R=t.title)==null?void 0:R.call(t),q(We,{class:o.e("icon-arrow"),style:{transform:x.value?e.expandCloseIcon&&e.expandOpenIcon||e.collapseCloseIcon&&e.collapseOpenIcon&&r.props.collapse?"none":"rotateZ(180deg)":"none"}},{default:()=>ye(O.value)?q(n.appContext.components[O.value]):q(O.value)})],U=r.isMenuPopup?q(tl,{ref:m,visible:x.value,effect:"light",pure:!0,offset:B.value,showArrow:!1,persistent:P.value,popperClass:G.value,popperStyle:Y.value,placement:L.value,teleported:E.value,fallbackPlacements:g.value,transition:h.value,gpuAcceleration:!1},{content:()=>{var Z;return q("div",{class:[u.m(_.value),u.m("popup-container"),G.value],onMouseenter:ne=>k(ne,100),onMouseleave:()=>W(!0),onFocus:ne=>k(ne,100)},[q("ul",{class:[u.b(),u.m("popup"),u.m(`popup-${L.value}`)],style:V.value},[(Z=t.default)==null?void 0:Z.call(t)])])},default:()=>q("div",{class:o.e("title"),onClick:H},K)}):q(He,{},[q("div",{class:o.e("title"),ref:p,onClick:H},K),q(Xn,{},{default:()=>{var Z;return Fe(q("ul",{role:"menu",class:[u.b(),u.m("inline")],style:V.value},[(Z=t.default)==null?void 0:Z.call(t)]),[[dt,x.value]])}})]);return q("li",{class:[o.b(),o.is("active",C.value),o.is("opened",x.value),o.is("disabled",e.disabled)],role:"menuitem",ariaHaspopup:!0,ariaExpanded:x.value,onMouseenter:k,onMouseleave:()=>W(),onFocus:k},[U])}}});const Tr=ze({mode:{type:String,values:["horizontal","vertical"],default:"vertical"},defaultActive:{type:String,default:""},defaultOpeneds:{type:Re(Array),default:()=>At([])},uniqueOpened:Boolean,router:Boolean,menuTrigger:{type:String,values:["hover","click"],default:"hover"},collapse:Boolean,backgroundColor:String,textColor:String,activeTextColor:String,closeOnClickOutside:Boolean,collapseTransition:{type:Boolean,default:!0},ellipsis:{type:Boolean,default:!0},popperOffset:{type:Number,default:6},ellipsisIcon:{type:ht,default:()=>Ga},popperEffect:{type:Re(String),default:"dark"},popperClass:String,popperStyle:{type:Re([String,Object])},showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300},persistent:{type:Boolean,default:!0}}),bl=e=>Me(e)&&e.every(t=>ye(t)),Mr={close:(e,t)=>ye(e)&&bl(t),open:(e,t)=>ye(e)&&bl(t),select:(e,t,l,n)=>ye(e)&&bl(t)&&ct(l)&&(Te(n)||n instanceof Promise)},mn=64;var Rr=le({name:"ElMenu",props:Tr,emits:Mr,setup(e,{emit:t,slots:l,expose:n}){const a=Se(),s=a.appContext.config.globalProperties.$router,u=S(),o=S(),r=re("menu"),i=re("sub-menu");let c=mn;const f=S(-1),v=S(e.defaultOpeneds&&!e.collapse?e.defaultOpeneds.slice(0):[]),d=S(e.defaultActive),p=S({}),m=S({}),w=I(()=>e.mode==="horizontal"||e.mode==="vertical"&&e.collapse),L=()=>{const N=d.value&&p.value[d.value];if(!N||e.mode==="horizontal"||e.collapse)return;N.indexPath.forEach(H=>{const k=m.value[H];k&&O(H,k.indexPath)})},O=(N,$)=>{v.value.includes(N)||(e.uniqueOpened&&(v.value=v.value.filter(H=>$.includes(H))),v.value.push(N),t("open",N,$))},E=N=>{const $=v.value.indexOf(N);$!==-1&&v.value.splice($,1)},h=(N,$)=>{E(N),t("close",N,$)},g=({index:N,indexPath:$})=>{v.value.includes(N)?h(N,$):O(N,$)},x=N=>{(e.mode==="horizontal"||e.collapse)&&(v.value=[]);const{index:$,indexPath:H}=N;if(!(sn($)||sn(H)))if(e.router&&s){const k=N.route||$,W=s.push(k).then(R=>(R||(d.value=$),R));t("select",$,H,{index:$,indexPath:H,route:k},W)}else d.value=$,t("select",$,H,{index:$,indexPath:H})},C=N=>{var $;const H=p.value,k=H[N]||d.value&&H[d.value]||H[e.defaultActive];d.value=($=k?.index)!=null?$:N},_=N=>{const $=getComputedStyle(N),H=Number.parseInt($.marginLeft,10),k=Number.parseInt($.marginRight,10);return N.offsetWidth+H+k||0},P=()=>{if(!u.value)return-1;const N=Array.from(u.value.childNodes).filter(U=>U.nodeName!=="#comment"&&(U.nodeName!=="#text"||U.nodeValue)),$=getComputedStyle(u.value),H=Number.parseInt($.paddingLeft,10),k=Number.parseInt($.paddingRight,10),W=u.value.clientWidth-H-k;let R=0,K=0;return N.forEach((U,Z)=>{R+=_(U),R<=W-c&&(K=Z+1)}),K===N.length?-1:K},F=N=>m.value[N].indexPath,V=(N,$=33.34)=>{let H;return()=>{H&&clearTimeout(H),H=setTimeout(()=>{N()},$)}};let B=!0;const G=()=>{const N=Wo(o);if(N&&(c=_(N)||mn),f.value===P())return;const $=()=>{f.value=-1,$e(()=>{f.value=P()})};B?$():V($)(),B=!1};pe(()=>e.defaultActive,N=>{p.value[N]||(d.value=""),C(N)}),pe(()=>e.collapse,N=>{N&&(v.value=[])}),pe(p.value,L);let Y;Jt(()=>{e.mode==="horizontal"&&e.ellipsis?Y=wt(u,G).stop:Y?.()});const ie=S(!1);{const N=W=>{m.value[W.index]=W},$=W=>{delete m.value[W.index]};St(Ul,Qe({props:e,openedMenus:v,items:p,subMenus:m,activeIndex:d,isMenuPopup:w,addMenuItem:W=>{p.value[W.index]=W},removeMenuItem:W=>{delete p.value[W.index]},addSubMenu:N,removeSubMenu:$,openMenu:O,closeMenu:h,handleMenuItemClick:x,handleSubMenuClick:g})),St(`${Zt}${a.uid}`,{addSubMenu:N,removeSubMenu:$,mouseInChild:ie,level:0})}Ue(()=>{e.mode==="horizontal"&&new Sr(a.vnode.el,r.namespace.value)}),n({open:$=>{const{indexPath:H}=m.value[$];H.forEach(k=>O(k,H))},close:E,updateActiveIndex:C,handleResize:G});const J=la(e,0);return()=>{var N,$;let H=($=(N=l.default)==null?void 0:N.call(l))!=null?$:[];const k=[];if(e.mode==="horizontal"&&u.value){const K=$n(H).filter(ne=>ne?.shapeFlag!==8),U=f.value===-1?K:K.slice(0,f.value),Z=f.value===-1?[]:K.slice(f.value);Z?.length&&e.ellipsis&&(H=U,k.push(q(jl,{ref:o,index:"sub-menu-more",class:i.e("hide-arrow"),popperOffset:e.popperOffset},{title:()=>q(We,{class:i.e("icon-more")},{default:()=>q(e.ellipsisIcon)}),default:()=>Z})))}const W=e.closeOnClickOutside?[[So,()=>{v.value.length&&(ie.value||(v.value.forEach(K=>t("close",K,F(K))),v.value=[]))}]]:[],R=Fe(q("ul",{key:String(e.collapse),role:"menubar",ref:u,style:J.value,class:{[r.b()]:!0,[r.m(e.mode)]:!0,[r.m("collapse")]:e.collapse}},[...H,...k]),W);return e.collapseTransition&&e.mode==="vertical"?q(Er,()=>R):R}}});const Or=ze({index:{type:Re([String,null]),default:null},route:{type:Re([String,Object])},disabled:Boolean}),$r={click:e=>ye(e.index)&&Me(e.indexPath)},Tl="ElMenuItem",Lr=le({name:Tl}),Pr=le({...Lr,props:Or,emits:$r,setup(e,{expose:t,emit:l}){const n=e;gt(n.index)&&Vo();const a=Se(),s=_e(Ul),u=re("menu"),o=re("menu-item");s||Ze(Tl,"can not inject root menu");const{parentMenu:r,indexPath:i}=ta(a,qo(n,"index")),c=_e(`${Zt}${r.value.uid}`);c||Ze(Tl,"can not inject sub menu");const f=I(()=>n.index===s.activeIndex),v=Qe({index:n.index,indexPath:i,active:f}),d=()=>{n.disabled||(s.handleMenuItemClick({index:n.index,indexPath:i.value,route:n.route}),l("click",v))};return Ue(()=>{c.addSubMenu(v),s.addMenuItem(v)}),et(()=>{c.removeSubMenu(v),s.removeMenuItem(v)}),t({parentMenu:r,rootMenu:s,active:f,nsMenu:u,nsMenuItem:o,handleClick:d}),(p,m)=>(z(),te("li",{class:Q([y(o).b(),y(o).is("active",y(f)),y(o).is("disabled",p.disabled)]),role:"menuitem",tabindex:"-1",onClick:d},[y(r).type.name==="ElMenu"&&y(s).props.collapse&&p.$slots.title?(z(),de(y(tl),{key:0,effect:y(s).props.popperEffect,placement:"right","fallback-placements":["left"],"popper-class":y(s).props.popperClass,"popper-style":y(s).props.popperStyle,persistent:y(s).props.persistent,"focus-on-target":""},{content:A(()=>[ue(p.$slots,"title")]),default:A(()=>[D("div",{class:Q(y(u).be("tooltip","trigger"))},[ue(p.$slots,"default")],2)]),_:3},8,["effect","popper-class","popper-style","persistent"])):(z(),te(He,{key:1},[ue(p.$slots,"default"),ue(p.$slots,"title")],64))],2))}});var na=xe(Pr,[["__file","menu-item.vue"]]);const Ar={title:String},Ir=le({name:"ElMenuItemGroup"}),Fr=le({...Ir,props:Ar,setup(e){const t=re("menu-item-group");return(l,n)=>(z(),te("li",{class:Q(y(t).b())},[D("div",{class:Q(y(t).e("title"))},[l.$slots.title?ue(l.$slots,"title",{key:1}):(z(),te(He,{key:0},[ce(be(l.title),1)],64))],2),D("ul",null,[ue(l.$slots,"default")])],2))}});var aa=xe(Fr,[["__file","menu-item-group.vue"]]);const Br=st(Rr,{MenuItem:na,MenuItemGroup:aa,SubMenu:jl}),Hr=Ge(na);Ge(aa);Ge(jl);const Wr="horizontal",Vr="vertical",zr={[Wr]:"deltaX",[Vr]:"deltaY"},Kr=({atEndEdge:e,atStartEdge:t,layout:l},n)=>{let a,s=0;const u=r=>r<0&&t.value||r>0&&e.value;return{hasReachedEdge:u,onWheel:r=>{ks(a);const i=r[zr[l.value]];u(s)&&u(s+i)||(s+=i,zo()||r.preventDefault(),a=qn(()=>{n(s),s=0}))}}},yl=function(e){var t;return(t=e.target)==null?void 0:t.closest("td")},Dr=function(e,t,l,n,a){if(!t&&!n&&(!a||Me(a)&&!a.length))return e;ye(l)?l=l==="descending"?-1:1:l=l&&l<0?-1:1;const s=n?null:function(o,r){return a?Un(Gt(a),i=>ye(i)?rn(o,i):i(o,r,e)):(t!=="$key"&&ct(o)&&"$value"in o&&(o=o.$value),[ct(o)?t?rn(o,t):null:o])},u=function(o,r){var i,c,f,v,d,p;if(n)return n(o.value,r.value);for(let m=0,w=(c=(i=o.key)==null?void 0:i.length)!=null?c:0;m((p=r.key)==null?void 0:p[m]))return 1}return 0};return e.map((o,r)=>({value:o,index:r,key:s?s(o,r):null})).sort((o,r)=>{let i=u(o,r);return i||(i=o.index-r.index),i*+l}).map(o=>o.value)},oa=function(e,t){let l=null;return e.columns.forEach(n=>{n.id===t&&(l=n)}),l},Ur=function(e,t){let l=null;for(let n=0;n{if(!e)throw new Error("Row is required when get row identity");if(ye(t)){if(!t.includes("."))return`${e[t]}`;const l=t.split(".");let n=e;for(const a of l)n=n[a];return`${n}`}else if(Be(t))return t.call(null,e);return""},yt=function(e,t,l=!1,n="children"){const a=e||[],s={};return a.forEach((u,o)=>{if(s[Ee(u,t)]={row:u,index:o},l){const r=u[n];Me(r)&&Object.assign(s,yt(r,t,!0,n))}}),s};function jr(e,t){const l={};let n;for(n in e)l[n]=e[n];for(n in t)if(bt(t,n)){const a=t[n];Te(a)||(l[n]=a)}return l}function ql(e){return e===""||Te(e)||(e=Number.parseInt(e,10),Number.isNaN(e)&&(e="")),e}function sa(e){return e===""||Te(e)||(e=ql(e),Number.isNaN(e)&&(e=80)),e}function qr(e){return at(e)?e:ye(e)?/^\d+(?:px)?$/.test(e)?Number.parseInt(e,10):e:null}function Yr(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,l)=>(...n)=>t(l(...n)))}function el(e,t,l,n,a,s,u){let o=s??0,r=!1;const c=(()=>{if(!u)return e.indexOf(t);const m=Ee(t,u);return e.findIndex(w=>Ee(w,u)===m)})(),f=c!==-1,v=a?.call(null,t,o),d=m=>{m==="add"?e.push(t):e.splice(c,1),r=!0},p=m=>{let w=0;const L=n?.children&&m[n.children];return L&&Me(L)&&(w+=L.length,L.forEach(O=>{w+=p(O)})),w};return(!a||v)&&(lt(l)?l&&!f?d("add"):!l&&f&&d("remove"):d(f?"remove":"add")),!n?.checkStrictly&&n?.children&&Me(t[n.children])&&t[n.children].forEach(m=>{const w=el(e,m,l??!f,n,a,o+1,u);o+=p(m)+1,w&&(r=w)}),r}function Xr(e,t,l="children",n="hasChildren",a=!1){const s=o=>!(Me(o)&&o.length);function u(o,r,i){t(o,r,i),r.forEach(c=>{if(c[n]&&a){t(c,null,i+1);return}const f=c[l];s(f)||u(c,f,i+1)})}e.forEach(o=>{if(o[n]&&a){t(o,null,0);return}const r=o[l];s(r)||u(o,r,0)})}const Gr=(e,t,l,n)=>{const a={strategy:"fixed",...e.popperOptions},s=Be(n?.tooltipFormatter)?n.tooltipFormatter({row:l,column:n,cellValue:On(l,n.property).value}):void 0;return Vl(s)?{slotContent:s,content:null,...e,popperOptions:a}:{slotContent:null,content:s??t,...e,popperOptions:a}};let Ne=null;function Jr(e,t,l,n,a,s){var u;const o=Gr(e,t,l,n),r={...o,slotContent:void 0};if(Ne?.trigger===a){const p=(u=Ne.vm)==null?void 0:u.component;jn(p?.props,r),p&&o.slotContent&&(p.slots.content=()=>[o.slotContent]);return}Ne?.();const i=s?.refs.tableWrapper,c=i?.dataset.prefix,f=M(tl,{virtualTriggering:!0,virtualRef:a,appendTo:i,placement:"top",transition:"none",offset:0,hideAfter:0,...r},o.slotContent?{content:()=>o.slotContent}:void 0);f.appContext={...s.appContext,...s};const v=document.createElement("div");fn(f,v),f.component.exposed.onOpen();const d=i?.querySelector(`.${c}-scrollbar__wrap`);Ne=()=>{var p,m;(m=(p=f.component)==null?void 0:p.exposed)!=null&&m.onClose&&f.component.exposed.onClose(),fn(null,v);const w=Ne;d?.removeEventListener("scroll",w),w.trigger=void 0,w.vm=void 0,Ne=null},Ne.trigger=a??void 0,Ne.vm=f,d?.addEventListener("scroll",Ne)}function ra(e){return e.children?Un(e.children,ra):[e]}function gn(e,t){return e+t.colSpan}const ia=(e,t,l,n)=>{let a=0,s=e;const u=l.states.columns.value;if(n){const r=ra(n[e]);a=u.slice(0,u.indexOf(r[0])).reduce(gn,0),s=a+r.reduce(gn,0)-1}else a=e;let o;switch(t){case"left":s=u.length-l.states.rightFixedLeafColumnsLength.value&&(o="right");break;default:s=u.length-l.states.rightFixedLeafColumnsLength.value&&(o="right")}return o?{direction:o,start:a,after:s}:{}},Yl=(e,t,l,n,a,s=0)=>{const u=[],{direction:o,start:r,after:i}=ia(t,l,n,a);if(o){const c=o==="left";u.push(`${e}-fixed-column--${o}`),c&&i+s===n.states.fixedLeafColumnsLength.value-1?u.push("is-last-column"):!c&&r-s===n.states.columns.value.length-n.states.rightFixedLeafColumnsLength.value&&u.push("is-first-column")}return u};function bn(e,t){return e+(Bt(t.realWidth)||Number.isNaN(t.realWidth)?Number(t.width):t.realWidth)}const Xl=(e,t,l,n)=>{const{direction:a,start:s=0,after:u=0}=ia(e,t,l,n);if(!a)return;const o={},r=a==="left",i=l.states.columns.value;return r?o.left=i.slice(0,s).reduce(bn,0):o.right=i.slice(u+1).reverse().reduce(bn,0),o},_t=(e,t)=>{e&&(Number.isNaN(e[t])||(e[t]=`${e[t]}px`))};function ua(e){return e.some(t=>Vl(t)?!(t.type===Bn||t.type===He&&!ua(t.children)):!0)?e:null}function Qr(e){const t=Se(),l=S(!1),n=S([]);return{updateExpandRows:()=>{const r=e.data.value||[],i=e.rowKey.value;if(l.value)n.value=r.slice();else if(i){const c=yt(n.value,i);n.value=r.reduce((f,v)=>{const d=Ee(v,i);return c[d]&&f.push(v),f},[])}else n.value=[]},toggleRowExpansion:(r,i)=>{el(n.value,r,i,void 0,void 0,void 0,e.rowKey.value)&&t.emit("expand-change",r,n.value.slice())},setExpandRowKeys:r=>{t.store.assertRowKey();const i=e.data.value||[],c=e.rowKey.value,f=yt(i,c);n.value=r.reduce((v,d)=>{const p=f[d];return p&&v.push(p.row),v},[])},isRowExpanded:r=>{const i=e.rowKey.value;return i?!!yt(n.value,i)[Ee(r,i)]:n.value.includes(r)},states:{expandRows:n,defaultExpandAll:l}}}function Zr(e){const t=Se(),l=S(null),n=S(null),a=i=>{t.store.assertRowKey(),l.value=i,u(i)},s=()=>{l.value=null},u=i=>{var c;const{data:f,rowKey:v}=e;let d=null;v.value&&(d=(c=(y(f)||[]).find(p=>Ee(p,v.value)===i))!=null?c:null),n.value=d??null,t.emit("current-change",n.value,null)};return{setCurrentRowKey:a,restoreCurrentRowKey:s,setCurrentRowByKey:u,updateCurrentRow:i=>{const c=n.value;if(i&&i!==c){n.value=i,t.emit("current-change",n.value,c);return}!i&&c&&(n.value=null,t.emit("current-change",null,c))},updateCurrentRowData:()=>{const i=e.rowKey.value,c=e.data.value||[],f=n.value;if(f&&!c.includes(f)){if(i){const v=Ee(f,i);u(v)}else n.value=null;Bt(n.value)&&t.emit("current-change",null,f)}else l.value&&(u(l.value),s())},states:{_currentRowKey:l,currentRow:n}}}function ei(e){const t=S([]),l=S({}),n=S(16),a=S(!1),s=S({}),u=S("hasChildren"),o=S("children"),r=S(!1),i=Se(),c=I(()=>{if(!e.rowKey.value)return{};const h=e.data.value||[];return v(h)}),f=I(()=>{const h=e.rowKey.value,g=Object.keys(s.value),x={};return g.length&&g.forEach(C=>{if(s.value[C].length){const _={children:[]};s.value[C].forEach(P=>{const F=Ee(P,h);_.children.push(F),P[u.value]&&!x[F]&&(x[F]={children:[]})}),x[C]=_}}),x}),v=h=>{const g=e.rowKey.value,x={};return Xr(h,(C,_,P)=>{const F=Ee(C,g);Me(_)?x[F]={children:_.map(V=>Ee(V,g)),level:P}:a.value&&(x[F]={children:[],lazy:!0,level:P})},o.value,u.value,a.value),x},d=(h=!1,g)=>{var x,C;g||(g=(x=i.store)==null?void 0:x.states.defaultExpandAll.value);const _=c.value,P=f.value,F=Object.keys(_),V={};if(F.length){const B=y(l),G=[],Y=(J,N)=>{if(h)return t.value?g||t.value.includes(N):!!(g||J?.expanded);{const $=g||t.value&&t.value.includes(N);return!!(J?.expanded||$)}};F.forEach(J=>{const N=B[J],$={..._[J]};if($.expanded=Y(N,J),$.lazy){const{loaded:H=!1,loading:k=!1}=N||{};$.loaded=!!H,$.loading=!!k,G.push(J)}V[J]=$});const ie=Object.keys(P);a.value&&ie.length&&G.length&&ie.forEach(J=>{var N;const $=B[J],H=P[J].children;if(G.includes(J)){if(((N=V[J].children)==null?void 0:N.length)!==0)throw new Error("[ElTable]children must be an empty array.");V[J].children=H}else{const{loaded:k=!1,loading:W=!1}=$||{};V[J]={lazy:!0,loaded:!!k,loading:!!W,expanded:Y($,J),children:H,level:void 0}}})}l.value=V,(C=i.store)==null||C.updateTableScrollY()};pe(()=>t.value,()=>{d(!0)}),pe(()=>c.value,()=>{d()}),pe(()=>f.value,()=>{d()});const p=h=>{t.value=h,d()},m=h=>a.value&&h&&"loaded"in h&&!h.loaded,w=(h,g)=>{i.store.assertRowKey();const x=e.rowKey.value,C=Ee(h,x),_=C&&l.value[C];if(C&&_&&"expanded"in _){const P=_.expanded;g=Te(g)?!_.expanded:g,l.value[C].expanded=g,P!==g&&i.emit("expand-change",h,g),g&&m(_)&&O(h,C,_),i.store.updateTableScrollY()}},L=h=>{i.store.assertRowKey();const g=e.rowKey.value,x=Ee(h,g),C=l.value[x];m(C)?O(h,x,C):w(h,void 0)},O=(h,g,x)=>{const{load:C}=i.props;C&&!l.value[g].loaded&&(l.value[g].loading=!0,C(h,x,_=>{if(!Me(_))throw new TypeError("[ElTable] data must be an array");l.value[g].loading=!1,l.value[g].loaded=!0,l.value[g].expanded=!0,_.length&&(s.value[g]=_),i.emit("expand-change",h,!0)}))};return{loadData:O,loadOrToggle:L,toggleTreeExpansion:w,updateTreeExpandKeys:p,updateTreeData:d,updateKeyChildren:(h,g)=>{const{lazy:x,rowKey:C}=i.props;if(x){if(!C)throw new Error("[Table] rowKey is required in updateKeyChild");s.value[h]&&(s.value[h]=g)}},normalize:v,states:{expandRowKeys:t,treeData:l,indent:n,lazy:a,lazyTreeNodeMap:s,lazyColumnIdentifier:u,childrenColumnName:o,checkStrictly:r}}}const ti=(e,t)=>{const l=t.sortingColumn;return!l||ye(l.sortable)?e:Dr(e,t.sortProp,t.sortOrder,l.sortMethod,l.sortBy)},Ut=e=>{const t=[];return e.forEach(l=>{l.children&&l.children.length>0?t.push.apply(t,Ut(l.children)):t.push(l)}),t};function li(){var e;const t=Se(),{size:l}=Hn((e=t.proxy)==null?void 0:e.$props),n=S(null),a=S([]),s=S([]),u=S(!1),o=S([]),r=S([]),i=S([]),c=S([]),f=S([]),v=S([]),d=S([]),p=S([]),m=[],w=S(0),L=S(0),O=S(0),E=S(!1),h=S([]),g=S(!1),x=S(!1),C=S(null),_=S({}),P=S(null),F=S(null),V=S(null),B=S(null),G=S(null),Y=I(()=>n.value?yt(h.value,n.value):void 0);pe(a,()=>{var j;t.state&&($(!1),t.props.tableLayout==="auto"&&((j=t.refs.tableHeaderRef)==null||j.updateFixedColumnStyle()))},{deep:!0});const ie=()=>{if(!n.value)throw new Error("[ElTable] prop row-key is required")},J=j=>{var oe;(oe=j.children)==null||oe.forEach(se=>{se.fixed=j.fixed,J(se)})},N=()=>{o.value.forEach(ae=>{J(ae)}),c.value=o.value.filter(ae=>[!0,"left"].includes(ae.fixed));const j=o.value.find(ae=>ae.type==="selection");let oe;j&&j.fixed!=="right"&&!c.value.includes(j)&&o.value.indexOf(j)===0&&c.value.length&&(c.value.unshift(j),oe=!0),f.value=o.value.filter(ae=>ae.fixed==="right");const se=o.value.filter(ae=>(oe?ae.type!=="selection":!0)&&!ae.fixed);r.value=Array.from(c.value).concat(se).concat(f.value);const T=Ut(se),b=Ut(c.value),ee=Ut(f.value);w.value=T.length,L.value=b.length,O.value=ee.length,i.value=Array.from(b).concat(T).concat(ee),u.value=c.value.length>0||f.value.length>0},$=(j,oe=!1)=>{j&&N(),oe?t.state.doLayout():t.state.debouncedUpdateLayout()},H=j=>Y.value?!!Y.value[Ee(j,n.value)]:h.value.includes(j),k=()=>{E.value=!1;const j=h.value;h.value=[],j.length&&t.emit("selection-change",[])},W=()=>{var j,oe;let se;if(n.value){se=[];const T=(oe=(j=t?.store)==null?void 0:j.states)==null?void 0:oe.childrenColumnName.value,b=yt(a.value,n.value,!0,T);for(const ee in Y.value)bt(Y.value,ee)&&!b[ee]&&se.push(Y.value[ee].row)}else se=h.value.filter(T=>!a.value.includes(T));if(se.length){const T=h.value.filter(b=>!se.includes(b));h.value=T,t.emit("selection-change",T.slice())}},R=()=>(h.value||[]).slice(),K=(j,oe,se=!0,T=!1)=>{var b,ee,ae,we;const Ae={children:(ee=(b=t?.store)==null?void 0:b.states)==null?void 0:ee.childrenColumnName.value,checkStrictly:(we=(ae=t?.store)==null?void 0:ae.states)==null?void 0:we.checkStrictly.value};if(el(h.value,j,oe,Ae,T?void 0:C.value,a.value.indexOf(j),n.value)){const qe=(h.value||[]).slice();se&&t.emit("select",qe,j),t.emit("selection-change",qe)}},U=()=>{var j,oe;const se=x.value?!E.value:!(E.value||h.value.length);E.value=se;let T=!1,b=0;const ee=(oe=(j=t?.store)==null?void 0:j.states)==null?void 0:oe.rowKey.value,{childrenColumnName:ae}=t.store.states,we={children:ae.value,checkStrictly:!1};a.value.forEach((Ae,ge)=>{const qe=ge+b;el(h.value,Ae,se,we,C.value,qe,ee)&&(T=!0),b+=ne(Ee(Ae,ee))}),T&&t.emit("selection-change",h.value?h.value.slice():[]),t.emit("select-all",(h.value||[]).slice())},Z=()=>{var j;if(((j=a.value)==null?void 0:j.length)===0){E.value=!1;return}const{childrenColumnName:oe}=t.store.states;let se=0,T=0;const b=ae=>{var we;for(const Ae of ae){const ge=C.value&&C.value.call(null,Ae,se);if(H(Ae))T++;else if(!C.value||ge)return!1;if(se++,(we=Ae[oe.value])!=null&&we.length&&!b(Ae[oe.value]))return!1}return!0},ee=b(a.value||[]);E.value=T===0?!1:ee},ne=j=>{var oe;if(!t||!t.store)return 0;const{treeData:se}=t.store.states;let T=0;const b=(oe=se.value[j])==null?void 0:oe.children;return b&&(T+=b.length,b.forEach(ee=>{T+=ne(ee)})),T},me=(j,oe)=>{const se={};return Gt(j).forEach(T=>{_.value[T.id]=oe,se[T.columnKey||T.id]=oe}),se},Ce=(j,oe,se)=>{F.value&&F.value!==j&&(F.value.order=null),F.value=j,V.value=oe,B.value=se},ke=()=>{let j=y(s);Object.keys(_.value).forEach(oe=>{const se=_.value[oe];if(!se||se.length===0)return;const T=oa({columns:i.value},oe);T&&T.filterMethod&&(j=j.filter(b=>se.some(ee=>T.filterMethod.call(null,ee,b,T))))}),P.value=j},Le=()=>{var j;a.value=ti((j=P.value)!=null?j:[],{sortingColumn:F.value,sortProp:V.value,sortOrder:B.value})},Ke=(j=void 0)=>{j?.filter||ke(),Le()},tt=j=>{const{tableHeaderRef:oe}=t.refs;if(!oe)return;const se=Object.assign({},oe.filterPanels),T=Object.keys(se);if(T.length)if(ye(j)&&(j=[j]),Me(j)){const b=j.map(ee=>Ur({columns:i.value},ee));T.forEach(ee=>{const ae=b.find(we=>we.id===ee);ae&&(ae.filteredValue=[])}),t.store.commit("filterChange",{column:b,values:[],silent:!0,multi:!0})}else T.forEach(b=>{const ee=i.value.find(ae=>ae.id===b);ee&&(ee.filteredValue=[])}),_.value={},t.store.commit("filterChange",{column:{},values:[],silent:!0})},xt=()=>{F.value&&(Ce(null,null,null),t.store.commit("changeSortCondition",{silent:!0}))},{setExpandRowKeys:Et,toggleRowExpansion:ft,updateExpandRows:Pe,states:vt,isRowExpanded:Ht}=Qr({data:a,rowKey:n}),{updateTreeExpandKeys:sl,toggleTreeExpansion:rl,updateTreeData:il,updateKeyChildren:kt,loadOrToggle:ul,states:Wt}=ei({data:a,rowKey:n}),{updateCurrentRowData:dl,updateCurrentRow:cl,setCurrentRowKey:fl,states:vl}=Zr({data:a,rowKey:n});return{assertRowKey:ie,updateColumns:N,scheduleLayout:$,isSelected:H,clearSelection:k,cleanSelection:W,getSelectionRows:R,toggleRowSelection:K,_toggleAllSelection:U,toggleAllSelection:null,updateAllSelected:Z,updateFilters:me,updateCurrentRow:cl,updateSort:Ce,execFilter:ke,execSort:Le,execQuery:Ke,clearFilter:tt,clearSort:xt,toggleRowExpansion:ft,setExpandRowKeysAdapter:j=>{Et(j),sl(j)},setCurrentRowKey:fl,toggleRowExpansionAdapter:(j,oe)=>{i.value.some(({type:T})=>T==="expand")?ft(j,oe):rl(j,oe)},isRowExpanded:Ht,updateExpandRows:Pe,updateCurrentRowData:dl,loadOrToggle:ul,updateTreeData:il,updateKeyChildren:kt,states:{tableSize:l,rowKey:n,data:a,_data:s,isComplex:u,_columns:o,originColumns:r,columns:i,fixedColumns:c,rightFixedColumns:f,leafColumns:v,fixedLeafColumns:d,rightFixedLeafColumns:p,updateOrderFns:m,leafColumnsLength:w,fixedLeafColumnsLength:L,rightFixedLeafColumnsLength:O,isAllSelected:E,selection:h,reserveSelection:g,selectOnIndeterminate:x,selectable:C,filters:_,filteredData:P,sortingColumn:F,sortProp:V,sortOrder:B,hoverRow:G,...vt,...Wt,...vl}}}function Ml(e,t){return e.map(l=>{var n;return l.id===t.id?t:((n=l.children)!=null&&n.length&&(l.children=Ml(l.children,t)),l)})}function Rl(e){e.forEach(t=>{var l,n;t.no=(l=t.getColumnIndex)==null?void 0:l.call(t),(n=t.children)!=null&&n.length&&Rl(t.children)}),e.sort((t,l)=>t.no-l.no)}function ni(){const e=Se(),t=li(),l=re("table"),{t:n}=Ft();return{ns:l,t:n,...t,mutations:{setData(o,r){const i=y(o._data)!==r;o.data.value=r,o._data.value=r,e.store.execQuery(),e.store.updateCurrentRowData(),e.store.updateExpandRows(),e.store.updateTreeData(e.store.states.defaultExpandAll.value),y(o.reserveSelection)?e.store.assertRowKey():i?e.store.clearSelection():e.store.cleanSelection(),e.store.updateAllSelected(),e.$ready&&e.store.scheduleLayout()},insertColumn(o,r,i,c){var f;const v=y(o._columns);let d=[];i?(i&&!i.children&&(i.children=[]),(f=i.children)==null||f.push(r),d=Ml(v,i)):(v.push(r),d=v),Rl(d),o._columns.value=d,o.updateOrderFns.push(c),r.type==="selection"&&(o.selectable.value=r.selectable,o.reserveSelection.value=r.reserveSelection),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},updateColumnOrder(o,r){var i;((i=r.getColumnIndex)==null?void 0:i.call(r))!==r.no&&(Rl(o._columns.value),e.$ready&&e.store.updateColumns())},removeColumn(o,r,i,c){var f;const v=y(o._columns)||[];if(i)(f=i.children)==null||f.splice(i.children.findIndex(p=>p.id===r.id),1),$e(()=>{var p;((p=i.children)==null?void 0:p.length)===0&&delete i.children}),o._columns.value=Ml(v,i);else{const p=v.indexOf(r);p>-1&&(v.splice(p,1),o._columns.value=v)}const d=o.updateOrderFns.indexOf(c);d>-1&&o.updateOrderFns.splice(d,1),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},sort(o,r){const{prop:i,order:c,init:f}=r;if(i){const v=y(o.columns).find(d=>d.property===i);v&&(v.order=c,e.store.updateSort(v,i,c),e.store.commit("changeSortCondition",{init:f}))}},changeSortCondition(o,r){const{sortingColumn:i,sortProp:c,sortOrder:f}=o,v=y(i),d=y(c),p=y(f);Bt(p)&&(o.sortingColumn.value=null,o.sortProp.value=null);const m={filter:!0};e.store.execQuery(m),(!r||!(r.silent||r.init))&&e.emit("sort-change",{column:v,prop:d,order:p}),e.store.updateTableScrollY()},filterChange(o,r){const{column:i,values:c,silent:f}=r,v=e.store.updateFilters(i,c);e.store.execQuery(),f||e.emit("filter-change",v),e.store.updateTableScrollY()},toggleAllSelection(){var o,r;(r=(o=e.store).toggleAllSelection)==null||r.call(o)},rowSelectedChanged(o,r){e.store.toggleRowSelection(r),e.store.updateAllSelected()},setHoverRow(o,r){o.hoverRow.value=r},setCurrentRow(o,r){e.store.updateCurrentRow(r)}},commit:function(o,...r){const i=e.store.mutations;if(i[o])i[o].apply(e,[e.store.states,...r]);else throw new Error(`Action not found: ${o}`)},updateTableScrollY:function(){$e(()=>e.layout.updateScrollY.apply(e.layout))}}}const Gl={rowKey:"rowKey",defaultExpandAll:"defaultExpandAll",selectOnIndeterminate:"selectOnIndeterminate",indent:"indent",lazy:"lazy",data:"data","treeProps.hasChildren":{key:"lazyColumnIdentifier",default:"hasChildren"},"treeProps.children":{key:"childrenColumnName",default:"children"},"treeProps.checkStrictly":{key:"checkStrictly",default:!1}};function ai(e,t){if(!e)throw new Error("Table is required.");const l=ni();return l.toggleAllSelection=Qt(l._toggleAllSelection,10),Object.keys(Gl).forEach(n=>{da(ca(t,n),n,l)}),oi(l,t),l}function oi(e,t){Object.keys(Gl).forEach(l=>{pe(()=>ca(t,l),n=>{da(n,l,e)})})}function da(e,t,l){let n=e,a=Gl[t];ct(a)&&(n=n||a.default,a=a.key),l.states[a].value=n}function ca(e,t){if(t.includes(".")){const l=t.split(".");let n=e;return l.forEach(a=>{n=n[a]}),n}else return e[t]}class si{constructor(t){this.observers=[],this.table=null,this.store=null,this.columns=[],this.fit=!0,this.showHeader=!0,this.height=S(null),this.scrollX=S(!1),this.scrollY=S(!1),this.bodyWidth=S(null),this.fixedWidth=S(null),this.rightFixedWidth=S(null),this.gutterWidth=0;for(const l in t)bt(t,l)&&(Wn(this[l])?this[l].value=t[l]:this[l]=t[l]);if(!this.table)throw new Error("Table is required for Table Layout");if(!this.store)throw new Error("Store is required for Table Layout")}updateScrollY(){const t=this.height.value;if(Bt(t))return!1;const l=this.table.refs.scrollBarRef;if(this.table.vnode.el&&l?.wrapRef){let n=!0;const a=this.scrollY.value;return n=l.wrapRef.scrollHeight>l.wrapRef.clientHeight,this.scrollY.value=n,a!==n}return!1}setHeight(t,l="height"){if(!ot)return;const n=this.table.vnode.el;if(t=qr(t),this.height.value=Number(t),!n&&(t||t===0)){$e(()=>this.setHeight(t,l));return}n&&at(t)?(n.style[l]=`${t}px`,this.updateElsHeight()):n&&ye(t)&&(n.style[l]=t,this.updateElsHeight())}setMaxHeight(t){this.setHeight(t,"max-height")}getFlattenColumns(){const t=[];return this.table.store.states.columns.value.forEach(n=>{n.isColumnGroup?t.push.apply(t,n.columns):t.push(n)}),t}updateElsHeight(){this.updateScrollY(),this.notifyObservers("scrollable")}headerDisplayNone(t){if(!t)return!0;let l=t;for(;l.tagName!=="DIV";){if(getComputedStyle(l).display==="none")return!0;l=l.parentElement}return!1}updateColumnsWidth(){var t;if(!ot)return;const l=this.fit,n=(t=this.table.vnode.el)==null?void 0:t.clientWidth;let a=0;const s=this.getFlattenColumns(),u=s.filter(i=>!at(i.width));if(s.forEach(i=>{at(i.width)&&i.realWidth&&(i.realWidth=null)}),u.length>0&&l){if(s.forEach(i=>{a+=Number(i.width||i.minWidth||80)}),a<=n){this.scrollX.value=!1;const i=n-a;if(u.length===1)u[0].realWidth=Number(u[0].minWidth||80)+i;else{const c=u.reduce((d,p)=>d+Number(p.minWidth||80),0),f=i/c;let v=0;u.forEach((d,p)=>{if(p===0)return;const m=Math.floor(Number(d.minWidth||80)*f);v+=m,d.realWidth=Number(d.minWidth||80)+m}),u[0].realWidth=Number(u[0].minWidth||80)+i-v}}else this.scrollX.value=!0,u.forEach(i=>{i.realWidth=Number(i.minWidth)});this.bodyWidth.value=Math.max(a,n),this.table.state.resizeState.value.width=this.bodyWidth.value}else s.forEach(i=>{!i.width&&!i.minWidth?i.realWidth=80:i.realWidth=Number(i.width||i.minWidth),a+=i.realWidth}),this.scrollX.value=a>n,this.bodyWidth.value=a;const o=this.store.states.fixedColumns.value;if(o.length>0){let i=0;o.forEach(c=>{i+=Number(c.realWidth||c.width)}),this.fixedWidth.value=i}const r=this.store.states.rightFixedColumns.value;if(r.length>0){let i=0;r.forEach(c=>{i+=Number(c.realWidth||c.width)}),this.rightFixedWidth.value=i}this.notifyObservers("columns")}addObserver(t){this.observers.push(t)}removeObserver(t){const l=this.observers.indexOf(t);l!==-1&&this.observers.splice(l,1)}notifyObservers(t){this.observers.forEach(n=>{var a,s;switch(t){case"columns":(a=n.state)==null||a.onColumnsChange(this);break;case"scrollable":(s=n.state)==null||s.onScrollableChange(this);break;default:throw new Error(`Table Layout don't have event ${t}.`)}})}}const ri=le({name:"ElTableFilterPanel",components:{ElCheckbox:Pt,ElCheckboxGroup:co,ElScrollbar:Ln,ElTooltip:tl,ElIcon:We,ArrowDown:Rn,ArrowUp:Ja},props:{placement:{type:String,default:"bottom-start"},store:{type:Object},column:{type:Object},upDataColumn:{type:Function},appendTo:_o.appendTo},setup(e){const t=Se(),{t:l}=Ft(),n=re("table-filter"),a=t?.parent;e.column&&!a.filterPanels.value[e.column.id]&&(a.filterPanels.value[e.column.id]=t);const s=S(null),u=S(null),o=S(0),r=I(()=>e.column&&e.column.filters),i=I(()=>e.column&&e.column.filterClassName?`${n.b()} ${e.column.filterClassName}`:n.b()),c=I({get:()=>{var C;return(((C=e.column)==null?void 0:C.filteredValue)||[])[0]},set:C=>{f.value&&(gt(C)?f.value.splice(0,1):f.value.splice(0,1,C))}}),f=I({get(){return e.column?e.column.filteredValue||[]:[]},set(C){var _;e.column&&((_=e.upDataColumn)==null||_.call(e,"filteredValue",C))}}),v=I(()=>e.column?e.column.filterMultiple:!0),d=C=>C.value===c.value,p=()=>{var C;(C=s.value)==null||C.onClose()},m=()=>{O(f.value),p()},w=()=>{f.value=[],O(f.value),p()},L=(C,_)=>{c.value=C,o.value=_,gt(C)?O([]):O(f.value),p()},O=C=>{var _,P;(_=e.store)==null||_.commit("filterChange",{column:e.column,values:C}),(P=e.store)==null||P.updateAllSelected()},E=()=>{var C,_;(C=u.value)==null||C.focus(),!v.value&&g(),e.column&&((_=e.upDataColumn)==null||_.call(e,"filterOpened",!0))},h=()=>{var C;e.column&&((C=e.upDataColumn)==null||C.call(e,"filterOpened",!1))},g=()=>{if(gt(c)){o.value=0;return}const C=(r.value||[]).findIndex(_=>_.value===c.value);o.value=C>=0?C+1:0};return{multiple:v,filterClassName:i,filteredValue:f,filterValue:c,filters:r,handleConfirm:m,handleReset:w,handleSelect:L,isPropAbsent:gt,isActive:d,t:l,ns:n,tooltipRef:s,rootRef:u,checkedIndex:o,handleShowTooltip:E,handleHideTooltip:h,handleKeydown:C=>{var _,P;const F=Ct(C),V=(r.value?r.value.length:0)+1;let B=o.value,G=!0;switch(F){case ve.down:case ve.right:B=(B+1)%V;break;case ve.up:case ve.left:B=(B-1+V)%V;break;case ve.tab:p(),G=!1;break;case ve.enter:case ve.space:if(B===0)L(null,0);else{const Y=(r.value||[])[B-1];Y.value&&L(Y.value,B)}break;default:G=!1;break}G&&C.preventDefault(),o.value=B,(P=(_=u.value)==null?void 0:_.querySelector(`.${n.e("list-item")}:nth-child(${B+1})`))==null||P.focus()}}}});function ii(e,t,l,n,a,s){const u=Ie("el-checkbox"),o=Ie("el-checkbox-group"),r=Ie("el-scrollbar"),i=Ie("arrow-up"),c=Ie("arrow-down"),f=Ie("el-icon"),v=Ie("el-tooltip");return z(),de(v,{ref:"tooltipRef",offset:0,placement:e.placement,"show-arrow":!1,trigger:"click",role:"dialog",teleported:"",effect:"light",pure:"",loop:"","popper-class":e.filterClassName,persistent:"","append-to":e.appendTo,onShow:e.handleShowTooltip,onHide:e.handleHideTooltip},{content:A(()=>[e.multiple?(z(),te("div",{key:0,ref:"rootRef",tabindex:"-1",class:Q(e.ns.e("multiple"))},[D("div",{class:Q(e.ns.e("content"))},[M(r,{"wrap-class":e.ns.e("wrap")},{default:A(()=>[M(o,{modelValue:e.filteredValue,"onUpdate:modelValue":d=>e.filteredValue=d,class:Q(e.ns.e("checkbox-group"))},{default:A(()=>[(z(!0),te(He,null,Lt(e.filters,d=>(z(),de(u,{key:d.value,value:d.value},{default:A(()=>[ce(be(d.text),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue","onUpdate:modelValue","class"])]),_:1},8,["wrap-class"])],2),D("div",{class:Q(e.ns.e("bottom"))},[D("button",{class:Q(e.ns.is("disabled",e.filteredValue.length===0)),disabled:e.filteredValue.length===0,type:"button",onClick:e.handleConfirm},be(e.t("el.table.confirmFilter")),11,["disabled","onClick"]),D("button",{type:"button",onClick:e.handleReset},be(e.t("el.table.resetFilter")),9,["onClick"])],2)],2)):(z(),te("ul",{key:1,ref:"rootRef",tabindex:"-1",role:"radiogroup",class:Q(e.ns.e("list")),onKeydown:e.handleKeydown},[D("li",{role:"radio",class:Q([e.ns.e("list-item"),e.ns.is("active",e.isPropAbsent(e.filterValue))]),tabindex:e.checkedIndex===0?0:-1,"aria-checked":e.isPropAbsent(e.filterValue),onClick:d=>e.handleSelect(null,0)},be(e.t("el.table.clearFilter")),11,["tabindex","aria-checked","onClick"]),(z(!0),te(He,null,Lt(e.filters,(d,p)=>(z(),te("li",{key:d.value,role:"radio",class:Q([e.ns.e("list-item"),e.ns.is("active",e.isActive(d))]),tabindex:e.checkedIndex===p+1?0:-1,"aria-checked":e.isActive(d),onClick:m=>e.handleSelect(d.value,p+1)},be(d.text),11,["tabindex","aria-checked","onClick"]))),128))],42,["onKeydown"]))]),default:A(()=>{var d;return[D("button",{type:"button",class:Q(`${e.ns.namespace.value}-table__column-filter-trigger`),"aria-label":e.t("el.table.filterLabel",{column:((d=e.column)==null?void 0:d.label)||""})},[M(f,null,{default:A(()=>[ue(e.$slots,"filter-icon",{},()=>{var p;return[(p=e.column)!=null&&p.filterOpened?(z(),de(i,{key:0})):(z(),de(c,{key:1}))]})]),_:3})],10,["aria-label"])]}),_:3},8,["placement","popper-class","append-to","onShow","onHide"])}var ui=xe(ri,[["render",ii],["__file","filter-panel.vue"]]);function Jl(e){const t=Se();Vn(()=>{l.value.addObserver(t)}),Ue(()=>{n(l.value),a(l.value)}),zn(()=>{n(l.value),a(l.value)}),Dl(()=>{l.value.removeObserver(t)});const l=I(()=>{const s=e.layout;if(!s)throw new Error("Can not find table layout.");return s}),n=s=>{var u;const o=((u=e.vnode.el)==null?void 0:u.querySelectorAll("colgroup > col"))||[];if(!o.length)return;const r=s.getFlattenColumns(),i={};r.forEach(c=>{i[c.id]=c});for(let c=0,f=o.length;c{var u,o;const r=((u=e.vnode.el)==null?void 0:u.querySelectorAll("colgroup > col[name=gutter]"))||[];for(let c=0,f=r.length;c{m.stopPropagation()},s=(m,w)=>{!w.filters&&w.sortable?p(m,w,!1):w.filterable&&!w.sortable&&a(m),n?.emit("header-click",w,m)},u=(m,w)=>{n?.emit("header-contextmenu",w,m)},o=S(null),r=S(!1),i=S(),c=(m,w)=>{var L,O;if(ot&&!(w.children&&w.children.length>0)&&o.value&&e.border&&o.value.id===w.id){r.value=!0;const E=n;t("set-drag-visible",!0);const h=E?.vnode.el,g=h?.getBoundingClientRect().left,x=(O=(L=l?.vnode)==null?void 0:L.el)==null?void 0:O.querySelector(`th.${w.id}`),C=x.getBoundingClientRect(),_=C.left-g+30;Xe(x,"noclick"),i.value={startMouseLeft:m.clientX,startLeft:C.right-g,startColumnLeft:C.left-g,tableLeft:g};const P=E?.refs.resizeProxy;P.style.left=`${i.value.startLeft}px`,document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};const F=B=>{const G=B.clientX-i.value.startMouseLeft,Y=i.value.startLeft+G;P.style.left=`${Math.max(_,Y)}px`},V=()=>{if(r.value){const{startColumnLeft:B,startLeft:G}=i.value,ie=Number.parseInt(P.style.left,10)-B;w.width=w.realWidth=ie,E?.emit("header-dragend",w.width,G-B,w,m),requestAnimationFrame(()=>{e.store.scheduleLayout(!1,!0)}),document.body.style.cursor="",r.value=!1,o.value=null,i.value=void 0,t("set-drag-visible",!1)}document.removeEventListener("mousemove",F),document.removeEventListener("mouseup",V),document.onselectstart=null,document.ondragstart=null,setTimeout(()=>{Ve(x,"noclick")},0)};document.addEventListener("mousemove",F),document.addEventListener("mouseup",V)}},f=(m,w)=>{var L;if(!e.border||w.children&&w.children.length>0)return;const O=m.target,E=Qa(O)?O.closest("th"):null;if(!E)return;const h=Ot(E,"is-sortable");if(h){const F=r.value?"col-resize":"";E.style.cursor=F;const V=E.querySelector(".caret-wrapper");V&&(V.style.cursor=F)}if(!w.resizable||r.value){o.value=null;return}const g=E.getBoundingClientRect(),x=((L=E.parentNode)==null?void 0:L.lastElementChild)===E,C=e.allowDragLastColumn||!x,_=g.width>12&&g.right-m.clientX<8&&C,P=_?"col-resize":"";document.body.style.cursor=P,o.value=_?w:null,h&&(E.style.cursor=P)},v=()=>{!ot||r.value||(document.body.style.cursor="")},d=({order:m,sortOrders:w})=>{if(m==="")return w[0];const L=w.indexOf(m||null);return w[L>w.length-2?0:L+1]},p=(m,w,L)=>{var O;m.stopPropagation();const E=w.order===L?null:L||d(w),h=(O=m.target)==null?void 0:O.closest("th");if(h&&Ot(h,"noclick")){Ve(h,"noclick");return}if(!w.sortable)return;const g=m.currentTarget;if(["ascending","descending"].some(F=>Ot(g,F)&&!w.sortOrders.includes(F)))return;const x=e.store.states;let C=x.sortProp.value,_;const P=x.sortingColumn.value;(P!==w||P===w&&Bt(P.order))&&(P&&(P.order=null),x.sortingColumn.value=w,C=w.property),E?_=w.order=E:_=w.order=null,x.sortProp.value=C,x.sortOrder.value=_,n?.store.commit("changeSortCondition")};return{handleHeaderClick:s,handleHeaderContextMenu:u,handleMouseDown:c,handleMouseMove:f,handleMouseOut:v,handleSortClick:p,handleFilterClick:a}}function ci(e){const t=_e(je),l=re("table");return{getHeaderRowStyle:o=>{const r=t?.props.headerRowStyle;return Be(r)?r.call(null,{rowIndex:o}):r},getHeaderRowClass:o=>{const r=[],i=t?.props.headerRowClassName;return ye(i)?r.push(i):Be(i)&&r.push(i.call(null,{rowIndex:o})),r.join(" ")},getHeaderCellStyle:(o,r,i,c)=>{var f;let v=(f=t?.props.headerCellStyle)!=null?f:{};Be(v)&&(v=v.call(null,{rowIndex:o,columnIndex:r,row:i,column:c}));const d=Xl(r,c.fixed,e.store,i);return _t(d,"left"),_t(d,"right"),Object.assign({},v,d)},getHeaderCellClass:(o,r,i,c)=>{const f=Yl(l.b(),r,c.fixed,e.store,i),v=[c.id,c.order,c.headerAlign,c.className,c.labelClassName,...f];c.children||v.push("is-leaf"),c.sortable&&v.push("is-sortable");const d=t?.props.headerCellClassName;return ye(d)?v.push(d):Be(d)&&v.push(d.call(null,{rowIndex:o,columnIndex:r,row:i,column:c})),v.push(l.e("cell")),v.filter(p=>!!p).join(" ")}}}const fa=e=>{const t=[];return e.forEach(l=>{l.children?(t.push(l),t.push.apply(t,fa(l.children))):t.push(l)}),t},va=e=>{let t=1;const l=(s,u)=>{if(u&&(s.level=u.level+1,t{l(r,s),o+=r.colSpan}),s.colSpan=o}else s.colSpan=1};e.forEach(s=>{s.level=1,l(s,void 0)});const n=[];for(let s=0;s{s.children?(s.rowSpan=1,s.children.forEach(u=>u.isSubColumn=!0)):s.rowSpan=t-s.level+1,n[s.level-1].push(s)}),n};function fi(e){const t=_e(je),l=I(()=>va(e.store.states.originColumns.value));return{isGroup:I(()=>{const s=l.value.length>1;return s&&t&&(t.state.isGroup.value=!0),s}),toggleAllSelection:s=>{s.stopPropagation(),t?.store.commit("toggleAllSelection")},columnRows:l}}var vi=le({name:"ElTableHeader",components:{ElCheckbox:Pt},props:{fixed:{type:String,default:""},store:{required:!0,type:Object},border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})},appendFilterPanelTo:{type:String},allowDragLastColumn:{type:Boolean}},setup(e,{emit:t}){const l=Se(),n=_e(je),a=re("table"),s=S({}),{onColumnsChange:u,onScrollableChange:o}=Jl(n),r=n?.props.tableLayout==="auto",i=Qe(new Map),c=S();let f;const v=()=>{f=setTimeout(()=>{i.size>0&&(i.forEach((B,G)=>{const Y=c.value.querySelector(`.${G.replace(/\s/g,".")}`);if(Y){const ie=Y.getBoundingClientRect().width;B.width=ie||B.width}}),i.clear())})};pe(i,v),et(()=>{f&&(clearTimeout(f),f=void 0)}),Ue(async()=>{await $e(),await $e();const{prop:B,order:G}=e.defaultSort;n?.store.commit("sort",{prop:B,order:G,init:!0}),v()});const{handleHeaderClick:d,handleHeaderContextMenu:p,handleMouseDown:m,handleMouseMove:w,handleMouseOut:L,handleSortClick:O,handleFilterClick:E}=di(e,t),{getHeaderRowStyle:h,getHeaderRowClass:g,getHeaderCellStyle:x,getHeaderCellClass:C}=ci(e),{isGroup:_,toggleAllSelection:P,columnRows:F}=fi(e),{t:V}=Ft();return l.state={onColumnsChange:u,onScrollableChange:o},l.filterPanels=s,{ns:a,t:V,filterPanels:s,onColumnsChange:u,onScrollableChange:o,columnRows:F,getHeaderRowClass:g,getHeaderRowStyle:h,getHeaderCellClass:C,getHeaderCellStyle:x,handleHeaderClick:d,handleHeaderContextMenu:p,handleMouseDown:m,handleMouseMove:w,handleMouseOut:L,handleSortClick:O,handleFilterClick:E,isGroup:_,toggleAllSelection:P,saveIndexSelection:i,isTableLayoutAuto:r,theadRef:c,updateFixedColumnStyle:v}},render(){const{ns:e,t,isGroup:l,columnRows:n,getHeaderCellStyle:a,getHeaderCellClass:s,getHeaderRowClass:u,getHeaderRowStyle:o,handleHeaderClick:r,handleHeaderContextMenu:i,handleMouseDown:c,handleMouseMove:f,handleSortClick:v,handleMouseOut:d,store:p,$parent:m,saveIndexSelection:w,isTableLayoutAuto:L}=this;let O=1;return q("thead",{ref:"theadRef",class:e.is("group",l)},n.map((E,h)=>q("tr",{class:u(h),key:h,style:o(h)},E.map((g,x)=>{g.rowSpan>O&&(O=g.rowSpan);const C=s(h,x,E,g);return L&&g.fixed&&w.set(C,g),q("th",{class:C,colspan:g.colSpan,key:`${g.id}-thead`,rowspan:g.rowSpan,scope:g.colSpan>1?"colgroup":"col",style:a(h,x,E,g),onClick:_=>{var P;(P=_.currentTarget)!=null&&P.classList.contains("noclick")||r(_,g)},onContextmenu:_=>i(_,g),onMousedown:_=>c(_,g),onMousemove:_=>f(_,g),onMouseout:d},[q("div",{class:["cell",g.filteredValue&&g.filteredValue.length>0?"highlight":""]},[g.renderHeader?g.renderHeader({column:g,$index:x,store:p,_self:m}):g.label,g.sortable&&q("button",{type:"button",class:"caret-wrapper","aria-label":t("el.table.sortLabel",{column:g.label||""}),onClick:_=>v(_,g)},[q("i",{onClick:_=>v(_,g,"ascending"),class:"sort-caret ascending"}),q("i",{onClick:_=>v(_,g,"descending"),class:"sort-caret descending"})]),g.filterable&&q(ui,{store:p,placement:g.filterPlacement||"bottom-start",appendTo:m?.appendFilterPanelTo,column:g,upDataColumn:(_,P)=>{g[_]=P}},{"filter-icon":()=>g.renderFilterIcon?g.renderFilterIcon({filterOpened:g.filterOpened}):null})])])}))))}});function Cl(e,t,l=.03){return e-t>l}function pi(e){const t=_e(je),l=S(""),n=S(q("div")),a=(p,m,w)=>{var L,O,E;const h=t,g=yl(p);let x=null;const C=(L=h?.vnode.el)==null?void 0:L.dataset.prefix;g&&(x=hn({columns:(E=(O=e.store)==null?void 0:O.states.columns.value)!=null?E:[]},g,C),x&&h?.emit(`cell-${w}`,m,x,g,p)),h?.emit(`row-${w}`,m,x,p)},s=(p,m)=>{a(p,m,"dblclick")},u=(p,m)=>{var w;(w=e.store)==null||w.commit("setCurrentRow",m),a(p,m,"click")},o=(p,m)=>{a(p,m,"contextmenu")},r=Qt(p=>{var m;(m=e.store)==null||m.commit("setHoverRow",p)},30),i=Qt(()=>{var p;(p=e.store)==null||p.commit("setHoverRow",null)},30),c=p=>{const m=window.getComputedStyle(p,null),w=Number.parseInt(m.paddingLeft,10)||0,L=Number.parseInt(m.paddingRight,10)||0,O=Number.parseInt(m.paddingTop,10)||0,E=Number.parseInt(m.paddingBottom,10)||0;return{left:w,right:L,top:O,bottom:E}},f=(p,m,w)=>{var L;let O=(L=m?.target)==null?void 0:L.parentNode;for(;p>1&&(O=O?.nextSibling,!(!O||O.nodeName!=="TR"));)w(O,"hover-row hover-fixed-row"),p--};return{handleDoubleClick:s,handleClick:u,handleContextMenu:o,handleMouseEnter:r,handleMouseLeave:i,handleCellMouseEnter:(p,m,w)=>{var L,O,E,h,g,x,C,_,P;if(!t)return;const F=t,V=yl(p),B=(L=F?.vnode.el)==null?void 0:L.dataset.prefix;let G=null;if(V){if(G=hn({columns:(E=(O=e.store)==null?void 0:O.states.columns.value)!=null?E:[]},V,B),!G)return;V.rowSpan>1&&f(V.rowSpan,p,Xe);const ne=F.hoverState={cell:V,column:G,row:m};F?.emit("cell-mouse-enter",ne.row,ne.column,ne.cell,p)}if(!w){((h=Ne)==null?void 0:h.trigger)===V&&((g=Ne)==null||g());return}const Y=p.target.querySelector(".cell");if(!(Ot(Y,`${B}-tooltip`)&&Y.childNodes.length&&((x=Y.textContent)!=null&&x.trim())))return;const ie=document.createRange();ie.setStart(Y,0),ie.setEnd(Y,Y.childNodes.length);const{width:J,height:N}=ie.getBoundingClientRect(),{width:$,height:H}=Y.getBoundingClientRect(),{top:k,left:W,right:R,bottom:K}=c(Y),U=W+R,Z=k+K;Cl(J+U,$)||Cl(N+Z,H)||Cl(Y.scrollWidth,$)?Jr(w,(C=V?.innerText||V?.textContent)!=null?C:"",m,G,V,F):((_=Ne)==null?void 0:_.trigger)===V&&((P=Ne)==null||P())},handleCellMouseLeave:p=>{const m=yl(p);if(!m)return;m.rowSpan>1&&f(m.rowSpan,p,Ve);const w=t?.hoverState;t?.emit("cell-mouse-leave",w?.row,w?.column,w?.cell,p)},tooltipContent:l,tooltipTrigger:n}}function mi(e){const t=_e(je),l=re("table");return{getRowStyle:(i,c)=>{const f=t?.props.rowStyle;return Be(f)?f.call(null,{row:i,rowIndex:c}):f||null},getRowClass:(i,c,f)=>{var v;const d=[l.e("row")];t?.props.highlightCurrentRow&&i===((v=e.store)==null?void 0:v.states.currentRow.value)&&d.push("current-row"),e.stripe&&f%2===1&&d.push(l.em("row","striped"));const p=t?.props.rowClassName;return ye(p)?d.push(p):Be(p)&&d.push(p.call(null,{row:i,rowIndex:c})),d},getCellStyle:(i,c,f,v)=>{const d=t?.props.cellStyle;let p=d??{};Be(d)&&(p=d.call(null,{rowIndex:i,columnIndex:c,row:f,column:v}));const m=Xl(c,e?.fixed,e.store);return _t(m,"left"),_t(m,"right"),Object.assign({},p,m)},getCellClass:(i,c,f,v,d)=>{const p=Yl(l.b(),c,e?.fixed,e.store,void 0,d),m=[v.id,v.align,v.className,...p],w=t?.props.cellClassName;return ye(w)?m.push(w):Be(w)&&m.push(w.call(null,{rowIndex:i,columnIndex:c,row:f,column:v})),m.push(l.e("cell")),m.filter(L=>!!L).join(" ")},getSpan:(i,c,f,v)=>{let d=1,p=1;const m=t?.props.spanMethod;if(Be(m)){const w=m({row:i,column:c,rowIndex:f,columnIndex:v});Me(w)?(d=w[0],p=w[1]):ct(w)&&(d=w.rowspan,p=w.colspan)}return{rowspan:d,colspan:p}},getColspanRealWidth:(i,c,f)=>{if(c<1)return i[f].realWidth;const v=i.map(({realWidth:d,width:p})=>d||p).slice(f,f+c);return Number(v.reduce((d,p)=>Number(d)+Number(p),-1))}}}const hi=le({name:"TableTdWrapper"}),gi=le({...hi,props:{colspan:{type:Number,default:1},rowspan:{type:Number,default:1}},setup(e){return(t,l)=>(z(),te("td",{colspan:e.colspan,rowspan:e.rowspan},[ue(t.$slots,"default")],8,["colspan","rowspan"]))}});var bi=xe(gi,[["__file","td-wrapper.vue"]]);function yi(e){const t=_e(je),l=re("table"),{handleDoubleClick:n,handleClick:a,handleContextMenu:s,handleMouseEnter:u,handleMouseLeave:o,handleCellMouseEnter:r,handleCellMouseLeave:i,tooltipContent:c,tooltipTrigger:f}=pi(e),{getRowStyle:v,getRowClass:d,getCellStyle:p,getCellClass:m,getSpan:w,getColspanRealWidth:L}=mi(e);let O=-1;const E=I(()=>{var _;return(_=e.store)==null?void 0:_.states.columns.value.findIndex(({type:P})=>P==="default")}),h=(_,P)=>{var F;const V=(F=t?.props)==null?void 0:F.rowKey;return V?Ee(_,V):P},g=(_,P,F,V=!1)=>{const{tooltipEffect:B,tooltipOptions:G,store:Y}=e,{indent:ie,columns:J}=Y.states,N=[];let $=!0;return F&&(N.push(l.em("row",`level-${F.level}`)),$=!!F.display),P===0&&(O=-1),e.stripe&&$&&O++,N.push(...d(_,P,O)),q("tr",{style:[$?null:{display:"none"},v(_,P)],class:N,key:h(_,P),onDblclick:k=>n(k,_),onClick:k=>a(k,_),onContextmenu:k=>s(k,_),onMouseenter:()=>u(P),onMouseleave:o},J.value.map((k,W)=>{const{rowspan:R,colspan:K}=w(_,k,P,W);if(!R||!K)return null;const U=Object.assign({},k);U.realWidth=L(J.value,K,W);const Z={store:Y,_self:e.context||t,column:U,row:_,$index:P,cellIndex:W,expanded:V};W===E.value&&F&&(Z.treeNode={indent:F.level&&F.level*ie.value,level:F.level},lt(F.expanded)&&(Z.treeNode.expanded=F.expanded,"loading"in F&&(Z.treeNode.loading=F.loading),"noLazyChildren"in F&&(Z.treeNode.noLazyChildren=F.noLazyChildren)));const ne=`${h(_,P)},${W}`,me=U.columnKey||U.rawColumnKey||"",Ce=k.showOverflowTooltip&&jn({effect:B},G,k.showOverflowTooltip);return q(bi,{style:p(P,W,_,k),class:m(P,W,_,k,K-1),key:`${me}${ne}`,rowspan:R,colspan:K,onMouseenter:ke=>r(ke,_,Ce),onMouseleave:i},{default:()=>x(W,k,Z)})}))},x=(_,P,F)=>P.renderCell(F);return{wrappedRowRender:(_,P)=>{const F=e.store,{isRowExpanded:V,assertRowKey:B}=F,{treeData:G,lazyTreeNodeMap:Y,childrenColumnName:ie,rowKey:J}=F.states,N=F.states.columns.value;if(N.some(({type:H})=>H==="expand")){const H=V(_),k=g(_,P,void 0,H),W=t?.renderExpanded;if(!W)return console.error("[Element Error]renderExpanded is required."),k;const R=[[k]];return(t.props.preserveExpandedContent||H)&&R[0].push(q("tr",{key:`expanded-row__${k.key}`,style:{display:H?"":"none"}},[q("td",{colspan:N.length,class:`${l.e("cell")} ${l.e("expanded-cell")}`},[W({row:_,$index:P,store:F,expanded:H})])])),R}else if(Object.keys(G.value).length){B();const H=Ee(_,J.value);let k=G.value[H],W=null;k&&(W={expanded:k.expanded,level:k.level,display:!0,noLazyChildren:void 0,loading:void 0},lt(k.lazy)&&(W&<(k.loaded)&&k.loaded&&(W.noLazyChildren=!(k.children&&k.children.length)),W.loading=k.loading));const R=[g(_,P,W??void 0)];if(k){let K=0;const U=(ne,me)=>{ne&&ne.length&&me&&ne.forEach(Ce=>{const ke={display:me.display&&me.expanded,level:me.level+1,expanded:!1,noLazyChildren:!1,loading:!1},Le=Ee(Ce,J.value);if(gt(Le))throw new Error("For nested data item, row-key is required.");if(k={...G.value[Le]},k&&(ke.expanded=k.expanded,k.level=k.level||ke.level,k.display=!!(k.expanded&&ke.display),lt(k.lazy)&&(lt(k.loaded)&&k.loaded&&(ke.noLazyChildren=!(k.children&&k.children.length)),ke.loading=k.loading)),K++,R.push(g(Ce,P+K,ke)),k){const Ke=Y.value[Le]||Ce[ie.value];U(Ke,k)}})};k.display=!0;const Z=Y.value[H]||_[ie.value];U(Z,k)}return R}else return g(_,P,void 0)},tooltipContent:c,tooltipTrigger:f}}const Ci={store:{required:!0,type:Object},stripe:Boolean,tooltipEffect:String,tooltipOptions:{type:Object},context:{default:()=>({}),type:Object},rowClassName:[String,Function],rowStyle:[Object,Function],fixed:{type:String,default:""},highlight:Boolean};var wi=le({name:"ElTableBody",props:Ci,setup(e){var t;const l=Se(),n=_e(je),a=re("table"),{wrappedRowRender:s,tooltipContent:u,tooltipTrigger:o}=yi(e),{onColumnsChange:r,onScrollableChange:i}=Jl(n),c=[];return pe((t=e.store)==null?void 0:t.states.hoverRow,(f,v)=>{var d,p;const m=l?.vnode.el,w=Array.from(m?.children||[]).filter(E=>E?.classList.contains(`${a.e("row")}`));let L=f;const O=(d=w[L])==null?void 0:d.childNodes;if(O?.length){let E=0;Array.from(O).reduce((g,x,C)=>{var _,P;return((_=O[C])==null?void 0:_.colSpan)>1&&(E=(P=O[C])==null?void 0:P.colSpan),x.nodeName!=="TD"&&E===0&&g.push(C),E>0&&E--,g},[]).forEach(g=>{var x;for(L=f;L>0;){const C=(x=w[L-1])==null?void 0:x.childNodes;if(C[g]&&C[g].nodeName==="TD"&&C[g].rowSpan>1){Xe(C[g],"hover-cell"),c.push(C[g]);break}L--}})}else c.forEach(E=>Ve(E,"hover-cell")),c.length=0;!((p=e.store)!=null&&p.states.isComplex.value)||!ot||qn(()=>{const E=w[v],h=w[f];E&&!E.classList.contains("hover-fixed-row")&&Ve(E,"hover-row"),h&&Xe(h,"hover-row")})}),Dl(()=>{var f;(f=Ne)==null||f()}),{ns:a,onColumnsChange:r,onScrollableChange:i,wrappedRowRender:s,tooltipContent:u,tooltipTrigger:o}},render(){const{wrappedRowRender:e,store:t}=this,l=t?.states.data.value||[];return q("tbody",{tabIndex:-1},[l.reduce((n,a)=>n.concat(e(a,n.length)),[])])}});function Si(){const e=_e(je),t=e?.store,l=I(()=>{var o;return(o=t?.states.fixedLeafColumnsLength.value)!=null?o:0}),n=I(()=>{var o;return(o=t?.states.rightFixedColumns.value.length)!=null?o:0}),a=I(()=>{var o;return(o=t?.states.columns.value.length)!=null?o:0}),s=I(()=>{var o;return(o=t?.states.fixedColumns.value.length)!=null?o:0}),u=I(()=>{var o;return(o=t?.states.rightFixedColumns.value.length)!=null?o:0});return{leftFixedLeafCount:l,rightFixedLeafCount:n,columnsCount:a,leftFixedCount:s,rightFixedCount:u,columns:I(()=>{var o;return(o=t?.states.columns.value)!=null?o:[]})}}function _i(e){const{columns:t}=Si(),l=re("table");return{getCellClasses:(s,u)=>{const o=s[u],r=[l.e("cell"),o.id,o.align,o.labelClassName,...Yl(l.b(),u,o.fixed,e.store)];return o.className&&r.push(o.className),o.children||r.push(l.is("leaf")),r},getCellStyles:(s,u)=>{const o=Xl(u,s.fixed,e.store);return _t(o,"left"),_t(o,"right"),o},columns:t}}var xi=le({name:"ElTableFooter",props:{fixed:{type:String,default:""},store:{required:!0,type:Object},summaryMethod:Function,sumText:String,border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e){const t=_e(je),l=re("table"),{getCellClasses:n,getCellStyles:a,columns:s}=_i(e),{onScrollableChange:u,onColumnsChange:o}=Jl(t);return{ns:l,onScrollableChange:u,onColumnsChange:o,getCellClasses:n,getCellStyles:a,columns:s}},render(){const{columns:e,getCellStyles:t,getCellClasses:l,summaryMethod:n,sumText:a}=this,s=this.store.states.data.value;let u=[];return n?u=n({columns:e,data:s}):e.forEach((o,r)=>{if(r===0){u[r]=a;return}const i=s.map(d=>Number(d[o.property])),c=[];let f=!0;i.forEach(d=>{if(!Number.isNaN(+d)){f=!1;const p=`${d}`.split(".")[1];c.push(p?p.length:0)}});const v=Math.max.apply(null,c);f?u[r]="":u[r]=i.reduce((d,p)=>{const m=Number(p);return Number.isNaN(+m)?d:Number.parseFloat((d+p).toFixed(Math.min(v,20)))},0)}),q(q("tfoot",[q("tr",{},[...e.map((o,r)=>q("td",{key:r,colspan:o.colSpan,rowspan:o.rowSpan,class:l(e,r),style:t(o,r)},[q("div",{class:["cell",o.labelClassName]},[u[r]])]))])]))}});function Ei(e){return{setCurrentRow:f=>{e.commit("setCurrentRow",f)},getSelectionRows:()=>e.getSelectionRows(),toggleRowSelection:(f,v,d=!0)=>{e.toggleRowSelection(f,v,!1,d),e.updateAllSelected()},clearSelection:()=>{e.clearSelection()},clearFilter:f=>{e.clearFilter(f)},toggleAllSelection:()=>{e.commit("toggleAllSelection")},toggleRowExpansion:(f,v)=>{e.toggleRowExpansionAdapter(f,v)},clearSort:()=>{e.clearSort()},sort:(f,v)=>{e.commit("sort",{prop:f,order:v})},updateKeyChildren:(f,v)=>{e.updateKeyChildren(f,v)}}}function ki(e,t,l,n){const a=S(!1),s=S(null),u=S(!1),o=N=>{u.value=N},r=S({width:null,height:null,headerHeight:null}),i=S(!1),c={display:"inline-block",verticalAlign:"middle"},f=S(),v=S(0),d=S(0),p=S(0),m=S(0),w=S(0);pe(()=>e.height,N=>{t.setHeight(N??null)},{immediate:!0}),pe(()=>e.maxHeight,N=>{t.setMaxHeight(N??null)},{immediate:!0}),pe(()=>[e.currentRowKey,l.states.rowKey],([N,$])=>{!y($)||!y(N)||l.setCurrentRowKey(`${N}`)},{immediate:!0}),pe(()=>e.data,N=>{n.store.commit("setData",N)},{immediate:!0,deep:!0}),Jt(()=>{e.expandRowKeys&&l.setExpandRowKeysAdapter(e.expandRowKeys)});const L=()=>{n.store.commit("setHoverRow",null),n.hoverState&&(n.hoverState=null)},O=(N,$)=>{const{pixelX:H,pixelY:k}=$;Math.abs(H)>=Math.abs(k)&&(n.refs.bodyWrapper.scrollLeft+=$.pixelX/5)},E=I(()=>e.height||e.maxHeight||l.states.fixedColumns.value.length>0||l.states.rightFixedColumns.value.length>0),h=I(()=>({width:t.bodyWidth.value?`${t.bodyWidth.value}px`:""})),g=()=>{E.value&&t.updateElsHeight(),t.updateColumnsWidth(),!(typeof window>"u")&&requestAnimationFrame(P)};Ue(async()=>{await $e(),l.updateColumns(),F(),requestAnimationFrame(g);const N=n.vnode.el,$=n.refs.headerWrapper;e.flexible&&N&&N.parentElement&&(N.parentElement.style.minWidth="0"),r.value={width:f.value=N.offsetWidth,height:N.offsetHeight,headerHeight:e.showHeader&&$?$.offsetHeight:null},l.states.columns.value.forEach(H=>{H.filteredValue&&H.filteredValue.length&&n.store.commit("filterChange",{column:H,values:H.filteredValue,silent:!0})}),n.$ready=!0});const x=(N,$)=>{if(!N)return;const H=Array.from(N.classList).filter(k=>!k.startsWith("is-scrolling-"));H.push(t.scrollX.value?$:"is-scrolling-none"),N.className=H.join(" ")},C=N=>{const{tableWrapper:$}=n.refs;x($,N)},_=N=>{const{tableWrapper:$}=n.refs;return!!($&&$.classList.contains(N))},P=function(){if(!n.refs.scrollBarRef)return;if(!t.scrollX.value){const U="is-scrolling-none";_(U)||C(U);return}const N=n.refs.scrollBarRef.wrapRef;if(!N)return;const{scrollLeft:$,offsetWidth:H,scrollWidth:k}=N,{headerWrapper:W,footerWrapper:R}=n.refs;W&&(W.scrollLeft=$),R&&(R.scrollLeft=$);const K=k-H-1;$>=K?C("is-scrolling-right"):C($===0?"is-scrolling-left":"is-scrolling-middle")},F=()=>{n.refs.scrollBarRef&&(n.refs.scrollBarRef.wrapRef&&$t(n.refs.scrollBarRef.wrapRef,"scroll",P,{passive:!0}),e.fit?wt(n.vnode.el,V):$t(window,"resize",V),wt(n.refs.tableInnerWrapper,()=>{var N,$;V(),($=(N=n.refs)==null?void 0:N.scrollBarRef)==null||$.update()}))},V=()=>{var N,$,H,k;const W=n.vnode.el;if(!n.$ready||!W)return;let R=!1;const{width:K,height:U,headerHeight:Z}=r.value,ne=f.value=W.offsetWidth;K!==ne&&(R=!0);const me=W.offsetHeight;(e.height||E.value)&&U!==me&&(R=!0);const Ce=e.tableLayout==="fixed"?n.refs.headerWrapper:(N=n.refs.tableHeaderRef)==null?void 0:N.$el;e.showHeader&&Ce?.offsetHeight!==Z&&(R=!0),v.value=(($=n.refs.tableWrapper)==null?void 0:$.scrollHeight)||0,p.value=Ce?.scrollHeight||0,m.value=((H=n.refs.footerWrapper)==null?void 0:H.offsetHeight)||0,w.value=((k=n.refs.appendWrapper)==null?void 0:k.offsetHeight)||0,d.value=v.value-p.value-m.value-w.value,R&&(r.value={width:ne,height:me,headerHeight:e.showHeader&&Ce?.offsetHeight||0},g())},B=Za(),G=I(()=>{const{bodyWidth:N,scrollY:$,gutterWidth:H}=t;return N.value?`${N.value-($.value?H:0)}px`:""}),Y=I(()=>e.maxHeight?"fixed":e.tableLayout),ie=I(()=>{if(e.data&&e.data.length)return;let N="100%";e.height&&d.value&&(N=`${d.value}px`);const $=f.value;return{width:$?`${$}px`:"",height:N}}),J=I(()=>e.height?{height:"100%"}:e.maxHeight?Number.isNaN(Number(e.maxHeight))?{maxHeight:`calc(${e.maxHeight} - ${p.value+m.value}px)`}:{maxHeight:`${+e.maxHeight-p.value-m.value}px`}:{});return{isHidden:a,renderExpanded:s,setDragVisible:o,isGroup:i,handleMouseLeave:L,handleHeaderFooterMousewheel:O,tableSize:B,emptyBlockStyle:ie,resizeProxyVisible:u,bodyWidth:G,resizeState:r,doLayout:g,tableBodyStyles:h,tableLayout:Y,scrollbarViewStyle:c,scrollbarStyle:J}}function Ni(e){const t=S(),l=()=>{const a=e.vnode.el.querySelector(".hidden-columns"),s={childList:!0,subtree:!0},u=e.store.states.updateOrderFns;t.value=new MutationObserver(()=>{u.forEach(o=>o())}),t.value.observe(a,s)};Ue(()=>{l()}),Dl(()=>{var n;(n=t.value)==null||n.disconnect()})}var Ti={data:{type:Array,default:()=>[]},size:eo,width:[String,Number],height:[String,Number],maxHeight:[String,Number],fit:{type:Boolean,default:!0},stripe:Boolean,border:Boolean,rowKey:[String,Function],showHeader:{type:Boolean,default:!0},showSummary:Boolean,sumText:String,summaryMethod:Function,rowClassName:[String,Function],rowStyle:[Object,Function],cellClassName:[String,Function],cellStyle:[Object,Function],headerRowClassName:[String,Function],headerRowStyle:[Object,Function],headerCellClassName:[String,Function],headerCellStyle:[Object,Function],highlightCurrentRow:Boolean,currentRowKey:[String,Number],emptyText:String,expandRowKeys:Array,defaultExpandAll:Boolean,defaultSort:Object,tooltipEffect:String,tooltipOptions:Object,spanMethod:Function,selectOnIndeterminate:{type:Boolean,default:!0},indent:{type:Number,default:16},treeProps:{type:Object,default:()=>({hasChildren:"hasChildren",children:"children",checkStrictly:!1})},lazy:Boolean,load:Function,style:{type:[String,Object,Array],default:()=>({})},className:{type:String,default:""},tableLayout:{type:String,default:"fixed"},scrollbarAlwaysOn:Boolean,flexible:Boolean,showOverflowTooltip:[Boolean,Object],tooltipFormatter:Function,appendFilterPanelTo:String,scrollbarTabindex:{type:[Number,String],default:void 0},allowDragLastColumn:{type:Boolean,default:!0},preserveExpandedContent:Boolean,nativeScrollbar:Boolean};function pa(e){const t=e.tableLayout==="auto";let l=e.columns||[];t&&l.every(({width:a})=>Te(a))&&(l=[]);const n=a=>{const s={key:`${e.tableLayout}_${a.id}`,style:{},name:void 0};return t?s.style={width:`${a.width}px`}:s.name=a.id,s};return q("colgroup",{},l.map(a=>q("col",n(a))))}pa.props=["columns","tableLayout"];const Mi=()=>{const e=S(),t=(s,u)=>{const o=e.value;o&&o.scrollTo(s,u)},l=(s,u)=>{const o=e.value;o&&at(u)&&["Top","Left"].includes(s)&&o[`setScroll${s}`](u)};return{scrollBarRef:e,scrollTo:t,setScrollTop:s=>l("Top",s),setScrollLeft:s=>l("Left",s)}};var yn=!1,ut,Ol,$l,jt,qt,ma,Yt,Ll,Pl,Al,ha,Il,Fl,ga,ba;function Oe(){if(!yn){yn=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),l=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(Il=/\b(iPhone|iP[ao]d)/.exec(e),Fl=/\b(iP[ao]d)/.exec(e),Al=/Android/i.exec(e),ga=/FBAN\/\w+;/i.exec(e),ba=/Mobile/i.exec(e),ha=!!/Win64/.exec(e),t){ut=t[1]?parseFloat(t[1]):t[5]?parseFloat(t[5]):NaN,ut&&document&&document.documentMode&&(ut=document.documentMode);var n=/(?:Trident\/(\d+.\d+))/.exec(e);ma=n?parseFloat(n[1])+4:ut,Ol=t[2]?parseFloat(t[2]):NaN,$l=t[3]?parseFloat(t[3]):NaN,jt=t[4]?parseFloat(t[4]):NaN,jt?(t=/(?:Chrome\/(\d+\.\d+))/.exec(e),qt=t&&t[1]?parseFloat(t[1]):NaN):qt=NaN}else ut=Ol=$l=qt=jt=NaN;if(l){if(l[1]){var a=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);Yt=a?parseFloat(a[1].replace("_",".")):!0}else Yt=!1;Ll=!!l[2],Pl=!!l[3]}else Yt=Ll=Pl=!1}}var Bl={ie:function(){return Oe()||ut},ieCompatibilityMode:function(){return Oe()||ma>ut},ie64:function(){return Bl.ie()&&ha},firefox:function(){return Oe()||Ol},opera:function(){return Oe()||$l},webkit:function(){return Oe()||jt},safari:function(){return Bl.webkit()},chrome:function(){return Oe()||qt},windows:function(){return Oe()||Ll},osx:function(){return Oe()||Yt},linux:function(){return Oe()||Pl},iphone:function(){return Oe()||Il},mobile:function(){return Oe()||Il||Fl||Al||ba},nativeApp:function(){return Oe()||ga},android:function(){return Oe()||Al},ipad:function(){return Oe()||Fl}},Ri=Bl,Oi=!!(typeof window<"u"&&window.document&&window.document.createElement),$i={canUseDOM:Oi},ya=$i,Ca;ya.canUseDOM&&(Ca=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0);function Li(e,t){if(!ya.canUseDOM||t&&!("addEventListener"in document))return!1;var l="on"+e,n=l in document;if(!n){var a=document.createElement("div");a.setAttribute(l,"return;"),n=typeof a[l]=="function"}return!n&&Ca&&e==="wheel"&&(n=document.implementation.hasFeature("Events.wheel","3.0")),n}var Pi=Li,Cn=10,wn=40,Sn=800;function wa(e){var t=0,l=0,n=0,a=0;return"detail"in e&&(l=e.detail),"wheelDelta"in e&&(l=-e.wheelDelta/120),"wheelDeltaY"in e&&(l=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=l,l=0),n=t*Cn,a=l*Cn,"deltaY"in e&&(a=e.deltaY),"deltaX"in e&&(n=e.deltaX),(n||a)&&e.deltaMode&&(e.deltaMode==1?(n*=wn,a*=wn):(n*=Sn,a*=Sn)),n&&!t&&(t=n<1?-1:1),a&&!l&&(l=a<1?-1:1),{spinX:t,spinY:l,pixelX:n,pixelY:a}}wa.getEventType=function(){return Ri.firefox()?"DOMMouseScroll":Pi("wheel")?"wheel":"mousewheel"};var Ai=wa;const Xt="_Mousewheel",_n=function(e,t){if(e&&e.addEventListener){Sa(e);const l=function(n){const a=Ai(n);t&&Reflect.apply(t,this,[n,a])};e[Xt]={wheelHandler:l},e.addEventListener("wheel",l,{passive:!0})}},Sa=e=>{var t;(t=e[Xt])!=null&&t.wheelHandler&&(e.removeEventListener("wheel",e[Xt].wheelHandler),e[Xt]=null)},Ii={beforeMount(e,t){_n(e,t.value)},unmounted(e){Sa(e)},updated(e,t){t.value!==t.oldValue&&_n(e,t.value)}};let Fi=1;const Bi=le({name:"ElTable",directives:{Mousewheel:Ii},components:{TableHeader:vi,TableBody:wi,TableFooter:xi,ElScrollbar:Ln,hColgroup:pa},props:Ti,emits:["select","select-all","selection-change","cell-mouse-enter","cell-mouse-leave","cell-contextmenu","cell-click","cell-dblclick","row-click","row-contextmenu","row-dblclick","header-click","header-contextmenu","sort-change","filter-change","current-change","header-dragend","expand-change","scroll"],setup(e){const{t}=Ft(),l=re("table"),n=Se();St(je,n);const a=ai(n,e);n.store=a;const s=new si({store:n.store,table:n,fit:e.fit,showHeader:e.showHeader});n.layout=s;const u=I(()=>(a.states.data.value||[]).length===0),{setCurrentRow:o,getSelectionRows:r,toggleRowSelection:i,clearSelection:c,clearFilter:f,toggleAllSelection:v,toggleRowExpansion:d,clearSort:p,sort:m,updateKeyChildren:w}=Ei(a),{isHidden:L,renderExpanded:O,setDragVisible:E,isGroup:h,handleMouseLeave:g,handleHeaderFooterMousewheel:x,tableSize:C,emptyBlockStyle:_,resizeProxyVisible:P,bodyWidth:F,resizeState:V,doLayout:B,tableBodyStyles:G,tableLayout:Y,scrollbarViewStyle:ie,scrollbarStyle:J}=ki(e,s,a,n),{scrollBarRef:N,scrollTo:$,setScrollLeft:H,setScrollTop:k}=Mi(),W=Qt(B,50),R=`${l.namespace.value}-table_${Fi++}`;n.tableId=R,n.state={isGroup:h,resizeState:V,doLayout:B,debouncedUpdateLayout:W};const K=I(()=>{var ne;return(ne=e.sumText)!=null?ne:t("el.table.sumText")}),U=I(()=>{var ne;return(ne=e.emptyText)!=null?ne:t("el.table.emptyText")}),Z=I(()=>va(a.states.originColumns.value)[0]);return Ni(n),et(()=>{W.cancel()}),{ns:l,layout:s,store:a,columns:Z,handleHeaderFooterMousewheel:x,handleMouseLeave:g,tableId:R,tableSize:C,isHidden:L,isEmpty:u,renderExpanded:O,resizeProxyVisible:P,resizeState:V,isGroup:h,bodyWidth:F,tableBodyStyles:G,emptyBlockStyle:_,debouncedUpdateLayout:W,setCurrentRow:o,getSelectionRows:r,toggleRowSelection:i,clearSelection:c,clearFilter:f,toggleAllSelection:v,toggleRowExpansion:d,clearSort:p,doLayout:B,sort:m,updateKeyChildren:w,t,setDragVisible:E,context:n,computedSumText:K,computedEmptyText:U,tableLayout:Y,scrollbarViewStyle:ie,scrollbarStyle:J,scrollBarRef:N,scrollTo:$,setScrollLeft:H,setScrollTop:k,allowDragLastColumn:e.allowDragLastColumn}}});function Hi(e,t,l,n,a,s){const u=Ie("hColgroup"),o=Ie("table-header"),r=Ie("table-body"),i=Ie("table-footer"),c=Ie("el-scrollbar"),f=Yo("mousewheel");return z(),te("div",{ref:"tableWrapper",class:Q([{[e.ns.m("fit")]:e.fit,[e.ns.m("striped")]:e.stripe,[e.ns.m("border")]:e.border||e.isGroup,[e.ns.m("hidden")]:e.isHidden,[e.ns.m("group")]:e.isGroup,[e.ns.m("fluid-height")]:e.maxHeight,[e.ns.m("scrollable-x")]:e.layout.scrollX.value,[e.ns.m("scrollable-y")]:e.layout.scrollY.value,[e.ns.m("enable-row-hover")]:!e.store.states.isComplex.value,[e.ns.m("enable-row-transition")]:(e.store.states.data.value||[]).length!==0&&(e.store.states.data.value||[]).length<100,"has-footer":e.showSummary},e.ns.m(e.tableSize),e.className,e.ns.b(),e.ns.m(`layout-${e.tableLayout}`)]),style:De(e.style),"data-prefix":e.ns.namespace.value,onMouseleave:e.handleMouseLeave},[D("div",{ref:"tableInnerWrapper",class:Q(e.ns.e("inner-wrapper"))},[D("div",{ref:"hiddenColumns",class:"hidden-columns"},[ue(e.$slots,"default")],512),e.showHeader&&e.tableLayout==="fixed"?Fe((z(),te("div",{key:0,ref:"headerWrapper",class:Q(e.ns.e("header-wrapper"))},[D("table",{ref:"tableHeader",class:Q(e.ns.e("header")),style:De(e.tableBodyStyles),border:"0",cellpadding:"0",cellspacing:"0"},[M(u,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),M(o,{ref:"tableHeaderRef",border:e.border,"default-sort":e.defaultSort,store:e.store,"append-filter-panel-to":e.appendFilterPanelTo,"allow-drag-last-column":e.allowDragLastColumn,onSetDragVisible:e.setDragVisible},null,8,["border","default-sort","store","append-filter-panel-to","allow-drag-last-column","onSetDragVisible"])],6)],2)),[[f,e.handleHeaderFooterMousewheel]]):he("v-if",!0),D("div",{ref:"bodyWrapper",class:Q(e.ns.e("body-wrapper"))},[M(c,{ref:"scrollBarRef","view-style":e.scrollbarViewStyle,"wrap-style":e.scrollbarStyle,always:e.scrollbarAlwaysOn,tabindex:e.scrollbarTabindex,native:e.nativeScrollbar,onScroll:v=>e.$emit("scroll",v)},{default:A(()=>[D("table",{ref:"tableBody",class:Q(e.ns.e("body")),cellspacing:"0",cellpadding:"0",border:"0",style:De({width:e.bodyWidth,tableLayout:e.tableLayout})},[M(u,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),e.showHeader&&e.tableLayout==="auto"?(z(),de(o,{key:0,ref:"tableHeaderRef",class:Q(e.ns.e("body-header")),border:e.border,"default-sort":e.defaultSort,store:e.store,"append-filter-panel-to":e.appendFilterPanelTo,onSetDragVisible:e.setDragVisible},null,8,["class","border","default-sort","store","append-filter-panel-to","onSetDragVisible"])):he("v-if",!0),M(r,{context:e.context,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"tooltip-effect":e.tooltipEffect,"tooltip-options":e.tooltipOptions,"row-style":e.rowStyle,store:e.store,stripe:e.stripe},null,8,["context","highlight","row-class-name","tooltip-effect","tooltip-options","row-style","store","stripe"]),e.showSummary&&e.tableLayout==="auto"?(z(),de(i,{key:1,class:Q(e.ns.e("body-footer")),border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["class","border","default-sort","store","sum-text","summary-method"])):he("v-if",!0)],6),e.isEmpty?(z(),te("div",{key:0,ref:"emptyBlock",style:De(e.emptyBlockStyle),class:Q(e.ns.e("empty-block"))},[D("span",{class:Q(e.ns.e("empty-text"))},[ue(e.$slots,"empty",{},()=>[ce(be(e.computedEmptyText),1)])],2)],6)):he("v-if",!0),e.$slots.append?(z(),te("div",{key:1,ref:"appendWrapper",class:Q(e.ns.e("append-wrapper"))},[ue(e.$slots,"append")],2)):he("v-if",!0)]),_:3},8,["view-style","wrap-style","always","tabindex","native","onScroll"])],2),e.showSummary&&e.tableLayout==="fixed"?Fe((z(),te("div",{key:1,ref:"footerWrapper",class:Q(e.ns.e("footer-wrapper"))},[D("table",{class:Q(e.ns.e("footer")),cellspacing:"0",cellpadding:"0",border:"0",style:De(e.tableBodyStyles)},[M(u,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),M(i,{border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["border","default-sort","store","sum-text","summary-method"])],6)],2)),[[dt,!e.isEmpty],[f,e.handleHeaderFooterMousewheel]]):he("v-if",!0),e.border||e.isGroup?(z(),te("div",{key:2,class:Q(e.ns.e("border-left-patch"))},null,2)):he("v-if",!0)],2),Fe(D("div",{ref:"resizeProxy",class:Q(e.ns.e("column-resize-proxy"))},null,2),[[dt,e.resizeProxyVisible]])],46,["data-prefix","onMouseleave"])}var Wi=xe(Bi,[["render",Hi],["__file","table.vue"]]);const Vi={selection:"table-column--selection",expand:"table__expand-column"},zi={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:""},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},Ki=e=>Vi[e]||"",Di={selection:{renderHeader({store:e}){var t;function l(){return e.states.data.value&&e.states.data.value.length===0}return q(Pt,{disabled:l(),size:e.states.tableSize.value,indeterminate:e.states.selection.value.length>0&&!e.states.isAllSelected.value,"onUpdate:modelValue":(t=e.toggleAllSelection)!=null?t:void 0,modelValue:e.states.isAllSelected.value,ariaLabel:e.t("el.table.selectAllLabel")})},renderCell({row:e,column:t,store:l,$index:n}){return q(Pt,{disabled:t.selectable?!t.selectable.call(null,e,n):!1,size:l.states.tableSize.value,onChange:()=>{l.commit("rowSelectedChanged",e)},onClick:a=>a.stopPropagation(),modelValue:l.isSelected(e),ariaLabel:l.t("el.table.selectRowLabel")})},sortable:!1,resizable:!1},index:{renderHeader({column:e}){return e.label||"#"},renderCell({column:e,$index:t}){let l=t+1;const n=e.index;return at(n)?l=t+n:Be(n)&&(l=n(t)),q("div",{},[l])},sortable:!1},expand:{renderHeader({column:e}){return e.label||""},renderCell({column:e,row:t,store:l,expanded:n}){const{ns:a}=l,s=[a.e("expand-icon")];!e.renderExpand&&n&&s.push(a.em("expand-icon","expanded"));const u=function(o){o.stopPropagation(),l.toggleRowExpansion(t)};return q("button",{type:"button","aria-label":l.t(n?"el.table.collapseRowLabel":"el.table.expandRowLabel"),"aria-expanded":n,class:s,onClick:u},{default:()=>e.renderExpand?[e.renderExpand({expanded:n})]:[q(We,null,{default:()=>[q(It)]})]})},sortable:!1,resizable:!1}};function Ui({row:e,column:t,$index:l}){var n;const a=t.property,s=a&&On(e,a).value;return t&&t.formatter?t.formatter(e,t,s,l):((n=s?.toString)==null?void 0:n.call(s))||""}function ji({row:e,treeNode:t,store:l},n=!1){const{ns:a}=l;if(!t)return n?[q("span",{class:a.e("placeholder")})]:null;const s=[],u=function(o){o.stopPropagation(),!t.loading&&l.loadOrToggle(e)};if(t.indent&&s.push(q("span",{class:a.e("indent"),style:{"padding-left":`${t.indent}px`}})),lt(t.expanded)&&!t.noLazyChildren){const o=[a.e("expand-icon"),t.expanded?a.em("expand-icon","expanded"):""];let r=It;t.loading&&(r=to),s.push(q("button",{type:"button","aria-label":l.t(t.expanded?"el.table.collapseRowLabel":"el.table.expandRowLabel"),"aria-expanded":t.expanded,class:o,onClick:u},{default:()=>[q(We,{class:a.is("loading",t.loading)},{default:()=>[q(r)]})]}))}else s.push(q("span",{class:a.e("placeholder")}));return s}function xn(e,t){return e.reduce((l,n)=>(l[n]=n,l),t)}function qi(e,t){const l=Se();return{registerComplexWatchers:()=>{const s=["fixed"],u={realWidth:"width",realMinWidth:"minWidth"},o=xn(s,u);Object.keys(o).forEach(r=>{const i=u[r];bt(t,i)&&pe(()=>t[i],c=>{let f=c;i==="width"&&r==="realWidth"&&(f=ql(c)),i==="minWidth"&&r==="realMinWidth"&&(f=sa(c)),l.columnConfig.value[i]=f,l.columnConfig.value[r]=f;const v=i==="fixed";e.value.store.scheduleLayout(v)})})},registerNormalWatchers:()=>{const s=["label","filters","filterMultiple","filteredValue","sortable","index","formatter","className","labelClassName","filterClassName","showOverflowTooltip","tooltipFormatter","resizable"],u=["showOverflowTooltip"],o={property:"prop",align:"realAlign",headerAlign:"realHeaderAlign"},r=xn(s,o);Object.keys(r).forEach(i=>{const c=o[i];bt(t,c)&&pe(()=>t[c],f=>{l.columnConfig.value[i]=f,(i==="filters"||i==="filterMethod")&&(l.columnConfig.value.filterable=!!(l.columnConfig.value.filters||l.columnConfig.value.filterMethod))})}),u.forEach(i=>{bt(e.value.props,i)&&pe(()=>e.value.props[i],c=>{l.columnConfig.value[i]=c})})}}}function Yi(e,t,l){const n=Se(),a=S(""),s=S(!1),u=S(),o=S(),r=re("table");Jt(()=>{u.value=e.align?`is-${e.align}`:null,u.value}),Jt(()=>{o.value=e.headerAlign?`is-${e.headerAlign}`:u.value,o.value});const i=I(()=>{let h=n.vnode.vParent||n.parent;for(;h&&!h.tableId&&!h.columnId;)h=h.vnode.vParent||h.parent;return h}),c=I(()=>{const{store:h}=n.parent;if(!h)return!1;const{treeData:g}=h.states,x=g.value;return x&&Object.keys(x).length>0}),f=S(ql(e.width)),v=S(sa(e.minWidth)),d=h=>(f.value&&(h.width=f.value),v.value&&(h.minWidth=v.value),!f.value&&v.value&&(h.width=void 0),h.minWidth||(h.minWidth=80),h.realWidth=Number(Te(h.width)?h.minWidth:h.width),h),p=h=>{const g=h.type,x=Di[g]||{};Object.keys(x).forEach(_=>{const P=x[_];_!=="className"&&!Te(P)&&(h[_]=P)});const C=Ki(g);if(C){const _=`${y(r.namespace)}-${C}`;h.className=h.className?`${h.className} ${_}`:_}return h},m=h=>{Me(h)?h.forEach(x=>g(x)):g(h);function g(x){var C;((C=x?.type)==null?void 0:C.name)==="ElTableColumn"&&(x.vParent=n)}};return{columnId:a,realAlign:u,isSubColumn:s,realHeaderAlign:o,columnOrTableParent:i,setColumnWidth:d,setColumnForcedProps:p,setColumnRenders:h=>{e.renderHeader||h.type!=="selection"&&(h.renderHeader=x=>{if(n.columnConfig.value.label,t.header){const C=t.header(x);if(ua(C))return q(He,C)}return ce(h.label)}),t["filter-icon"]&&(h.renderFilterIcon=x=>ue(t,"filter-icon",x)),t.expand&&(h.renderExpand=x=>ue(t,"expand",x));let g=h.renderCell;return h.type==="expand"?(h.renderCell=x=>q("div",{class:"cell"},[g(x)]),l.value.renderExpanded=x=>t.default?t.default(x):t.default):(g=g||Ui,h.renderCell=x=>{let C=null;if(t.default){const G=t.default(x);C=G.some(Y=>Y.type!==Bn)?G:g(x)}else C=g(x);const{columns:_}=l.value.store.states,P=_.value.findIndex(G=>G.type==="default"),F=c.value&&x.cellIndex===P,V=ji(x,F),B={class:"cell",style:{}};return h.showOverflowTooltip&&(B.class=`${B.class} ${y(r.namespace)}-tooltip`,B.style={width:`${(x.column.realWidth||Number(x.column.width))-1}px`}),m(C),q("div",B,[V,C])}),h},getPropsData:(...h)=>h.reduce((g,x)=>(Me(x)&&x.forEach(C=>{g[C]=e[C]}),g),{}),getColumnElIndex:(h,g)=>Array.prototype.indexOf.call(h,g),updateColumnOrder:()=>{l.value.store.commit("updateColumnOrder",n.columnConfig.value)}}}var Xi={type:{type:String,default:"default"},label:String,className:String,labelClassName:String,property:String,prop:String,width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},renderHeader:Function,sortable:{type:[Boolean,String],default:!1},sortMethod:Function,sortBy:[String,Function,Array],resizable:{type:Boolean,default:!0},columnKey:String,align:String,headerAlign:String,showOverflowTooltip:{type:[Boolean,Object],default:void 0},tooltipFormatter:Function,fixed:[Boolean,String],formatter:Function,selectable:Function,reserveSelection:Boolean,filterMethod:Function,filteredValue:Array,filters:Array,filterPlacement:String,filterMultiple:{type:Boolean,default:!0},filterClassName:String,index:[Number,Function],sortOrders:{type:Array,default:()=>["ascending","descending",null],validator:e=>e.every(t=>["ascending","descending",null].includes(t))}};let Gi=1;var _a=le({name:"ElTableColumn",components:{ElCheckbox:Pt},props:Xi,setup(e,{slots:t}){const l=Se(),n=S({}),a=I(()=>{let E=l.parent;for(;E&&!E.tableId;)E=E.parent;return E}),{registerNormalWatchers:s,registerComplexWatchers:u}=qi(a,e),{columnId:o,isSubColumn:r,realHeaderAlign:i,columnOrTableParent:c,setColumnWidth:f,setColumnForcedProps:v,setColumnRenders:d,getPropsData:p,getColumnElIndex:m,realAlign:w,updateColumnOrder:L}=Yi(e,t,a),O=c.value;o.value=`${"tableId"in O&&O.tableId||"columnId"in O&&O.columnId}_column_${Gi++}`,Vn(()=>{r.value=a.value!==O;const E=e.type||"default",h=e.sortable===""?!0:e.sortable,g=E==="selection"?!1:Te(e.showOverflowTooltip)?O.props.showOverflowTooltip:e.showOverflowTooltip,x=Te(e.tooltipFormatter)?O.props.tooltipFormatter:e.tooltipFormatter,C={...zi[E],id:o.value,type:E,property:e.prop||e.property,align:w,headerAlign:i,showOverflowTooltip:g,tooltipFormatter:x,filterable:e.filters||e.filterMethod,filteredValue:[],filterPlacement:"",filterClassName:"",isColumnGroup:!1,isSubColumn:!1,filterOpened:!1,sortable:h,index:e.index,rawColumnKey:l.vnode.key};let B=p(["columnKey","label","className","labelClassName","type","renderHeader","formatter","fixed","resizable"],["sortMethod","sortBy","sortOrders"],["selectable","reserveSelection"],["filterMethod","filters","filterMultiple","filterOpened","filteredValue","filterPlacement","filterClassName"]);B=jr(C,B),B=Yr(d,f,v)(B),n.value=B,s(),u()}),Ue(()=>{var E,h;const g=c.value,x=r.value?(E=g.vnode.el)==null?void 0:E.children:(h=g.refs.hiddenColumns)==null?void 0:h.children,C=()=>m(x||[],l.vnode.el);n.value.getColumnIndex=C,C()>-1&&a.value.store.commit("insertColumn",n.value,r.value?"columnConfig"in g&&g.columnConfig.value:null,L)}),et(()=>{const E=n.value.getColumnIndex;(E?E():-1)>-1&&a.value.store.commit("removeColumn",n.value,r.value?"columnConfig"in O&&O.columnConfig.value:null,L)}),l.columnId=o.value,l.columnConfig=n},render(){var e,t,l;try{const n=(t=(e=this.$slots).default)==null?void 0:t.call(e,{row:{},column:{},$index:-1}),a=[];if(Me(n))for(const u of n)((l=u.type)==null?void 0:l.name)==="ElTableColumn"||u.shapeFlag&2?a.push(u):u.type===He&&Me(u.children)&&u.children.forEach(o=>{o?.patchFlag!==1024&&!ye(o?.children)&&a.push(o)});return q("div",a)}catch{return q("div",[])}}});const Ji=st(Wi,{TableColumn:_a}),Qi=Ge(_a),ol=Symbol("tabsRootContextKey"),Zi=ze({tabs:{type:Re(Array),default:()=>At([])},tabRefs:{type:Re(Object),default:()=>At({})}}),xa="ElTabBar",eu=le({name:xa}),tu=le({...eu,props:Zi,setup(e,{expose:t}){const l=e,n=_e(ol);n||Ze(xa,"");const a=re("tabs"),s=S(),u=S(),o=I(()=>{var d;return Te(n.props.defaultValue)||!!((d=u.value)!=null&&d.transform)}),r=()=>{let d=0,p=0;const m=["top","bottom"].includes(n.props.tabPosition)?"width":"height",w=m==="width"?"x":"y",L=w==="x"?"left":"top";return l.tabs.every(O=>{if(Te(O.paneName))return!1;const E=l.tabRefs[O.paneName];if(!E)return!1;if(!O.active)return!0;d=E[`offset${nt(L)}`],p=E[`client${nt(m)}`];const h=window.getComputedStyle(E);return m==="width"&&(p-=Number.parseFloat(h.paddingLeft)+Number.parseFloat(h.paddingRight),d+=Number.parseFloat(h.paddingLeft)),!1}),{[m]:`${p}px`,transform:`translate${nt(w)}(${d}px)`}},i=()=>u.value=r(),c=[],f=()=>{c.forEach(d=>d.stop()),c.length=0,Object.values(l.tabRefs).forEach(d=>{c.push(wt(d,i))})};pe(()=>l.tabs,async()=>{await $e(),i(),f()},{immediate:!0});const v=wt(s,()=>i());return et(()=>{c.forEach(d=>d.stop()),c.length=0,v.stop()}),t({ref:s,update:i}),(d,p)=>y(o)?(z(),te("div",{key:0,ref_key:"barRef",ref:s,class:Q([y(a).e("active-bar"),y(a).is(y(n).props.tabPosition)]),style:De(u.value)},null,6)):he("v-if",!0)}});var lu=xe(tu,[["__file","tab-bar.vue"]]);const nu=ze({panes:{type:Re(Array),default:()=>At([])},currentName:{type:[String,Number],default:""},editable:Boolean,type:{type:String,values:["card","border-card",""],default:""},stretch:Boolean,tabindex:{type:[String,Number],default:void 0}}),au={tabClick:(e,t,l)=>l instanceof Event,tabRemove:(e,t)=>t instanceof Event},En="ElTabNav",ou=le({name:En,props:nu,emits:au,setup(e,{expose:t,emit:l}){const n=_e(ol);n||Ze(En,"");const a=re("tabs"),s=Ko(),u=Do(),o=S(),r=S(),i=S(),c=S({}),f=S(),v=S(!1),d=S(0),p=S(!1),m=S(!0),w=xl(),L=I(()=>["top","bottom"].includes(n.props.tabPosition)),O=I(()=>L.value?"width":"height"),E=I(()=>({transform:`translate${O.value==="width"?"X":"Y"}(-${d.value}px)`})),{width:h,height:g}=dn(o),{width:x,height:C}=dn(r,{width:0,height:0},{box:"border-box"}),_=I(()=>L.value?h.value:g.value),P=I(()=>L.value?x.value:C.value),{onWheel:F}=Kr({atStartEdge:I(()=>d.value<=0),atEndEdge:I(()=>P.value-d.value<=_.value),layout:I(()=>L.value?"horizontal":"vertical")},k=>{d.value=xo(d.value+k,0,P.value-_.value)}),V=()=>{if(!o.value)return;const k=o.value[`offset${nt(O.value)}`],W=d.value;if(!W)return;const R=W>k?W-k:0;d.value=R},B=()=>{if(!o.value||!r.value)return;const k=r.value[`offset${nt(O.value)}`],W=o.value[`offset${nt(O.value)}`],R=d.value;if(k-R<=W)return;const K=k-R>W*2?R+W:k-W;d.value=K},G=async()=>{const k=r.value;if(!v.value||!i.value||!o.value||!k)return;await $e();const W=c.value[e.currentName];if(!W)return;const R=o.value,K=W.getBoundingClientRect(),U=R.getBoundingClientRect(),Z=L.value?k.offsetWidth-U.width:k.offsetHeight-U.height,ne=d.value;let me=ne;L.value?(K.leftU.right&&(me=ne+K.right-U.right)):(K.topU.bottom&&(me=ne+(K.bottom-U.bottom))),me=Math.max(me,0),d.value=Math.min(me,Z)},Y=()=>{var k;if(!r.value||!o.value)return;e.stretch&&((k=f.value)==null||k.update());const W=r.value[`offset${nt(O.value)}`],R=o.value[`offset${nt(O.value)}`],K=d.value;R0&&(d.value=0))},ie=k=>{const W=Ct(k);let R=0;switch(W){case ve.left:case ve.up:R=-1;break;case ve.right:case ve.down:R=1;break;default:return}const K=Array.from(k.currentTarget.querySelectorAll("[role=tab]:not(.is-disabled)"));let Z=K.indexOf(k.target)+R;Z<0?Z=K.length-1:Z>=K.length&&(Z=0),K[Z].focus({preventScroll:!0}),K[Z].click(),J()},J=()=>{m.value&&(p.value=!0)},N=()=>p.value=!1,$=(k,W)=>{c.value[W]=k},H=async()=>{await $e();const k=c.value[e.currentName];k?.focus({preventScroll:!0})};return pe(s,k=>{k==="hidden"?m.value=!1:k==="visible"&&setTimeout(()=>m.value=!0,50)}),pe(u,k=>{k?setTimeout(()=>m.value=!0,50):m.value=!1}),wt(i,Y),Ue(()=>setTimeout(()=>G(),0)),zn(()=>Y()),t({scrollToActiveTab:G,removeFocus:N,focusActiveTab:H,tabListRef:r,tabBarRef:f,scheduleRender:()=>Dt(w)}),()=>{const k=v.value?[M("span",{class:[a.e("nav-prev"),a.is("disabled",!v.value.prev)],onClick:V},[M(We,null,{default:()=>[M(lo,null,null)]})]),M("span",{class:[a.e("nav-next"),a.is("disabled",!v.value.next)],onClick:B},[M(We,null,{default:()=>[M(It,null,null)]})])]:null,W=e.panes.map((R,K)=>{var U,Z,ne,me,Ce;const ke=R.uid,Le=R.props.disabled,Ke=(Z=(U=R.props.name)!=null?U:R.index)!=null?Z:`${K}`,tt=!Le&&(R.isClosable||R.props.closable!==!1&&e.editable);R.index=`${K}`;const xt=tt?M(We,{class:"is-icon-close",onClick:Pe=>l("tabRemove",R,Pe)},{default:()=>[M(Mn,null,null)]}):null,Et=((me=(ne=R.slots).label)==null?void 0:me.call(ne))||R.props.label,ft=!Le&&R.active?(Ce=e.tabindex)!=null?Ce:n.props.tabindex:-1;return M("div",{ref:Pe=>$(Pe,Ke),class:[a.e("item"),a.is(n.props.tabPosition),a.is("active",R.active),a.is("disabled",Le),a.is("closable",tt),a.is("focus",p.value)],id:`tab-${Ke}`,key:`tab-${ke}`,"aria-controls":`pane-${Ke}`,role:"tab","aria-selected":R.active,tabindex:ft,onFocus:()=>J(),onBlur:()=>N(),onClick:Pe=>{N(),l("tabClick",R,Ke,Pe)},onKeydown:Pe=>{const vt=Ct(Pe);tt&&(vt===ve.delete||vt===ve.backspace)&&l("tabRemove",R,Pe)}},[Et,xt])});return w.value,M("div",{ref:i,class:[a.e("nav-wrap"),a.is("scrollable",!!v.value),a.is(n.props.tabPosition)]},[k,M("div",{class:a.e("nav-scroll"),ref:o},[e.panes.length>0?M("div",{class:[a.e("nav"),a.is(n.props.tabPosition),a.is("stretch",e.stretch&&["top","bottom"].includes(n.props.tabPosition))],ref:r,style:E.value,role:"tablist",onKeydown:ie,onWheel:F},[e.type?null:M(lu,{ref:f,tabs:[...e.panes],tabRefs:c.value},null),W]):null])])}}}),su=ze({type:{type:String,values:["card","border-card",""],default:""},closable:Boolean,addable:Boolean,modelValue:{type:[String,Number]},defaultValue:{type:[String,Number]},editable:Boolean,tabPosition:{type:String,values:["top","right","bottom","left"],default:"top"},beforeLeave:{type:Re(Function),default:()=>!0},stretch:Boolean,tabindex:{type:[String,Number],default:0}}),wl=e=>ye(e)||at(e),ru={[ll]:e=>wl(e),tabClick:(e,t)=>t instanceof Event,tabChange:e=>wl(e),edit:(e,t)=>["remove","add"].includes(t),tabRemove:e=>wl(e),tabAdd:()=>!0},iu=le({name:"ElTabs",props:su,emits:ru,setup(e,{emit:t,slots:l,expose:n}){var a;const s=re("tabs"),u=I(()=>["left","right"].includes(e.tabPosition)),{children:o,addChild:r,removeChild:i,ChildrenSorter:c}=Ts(Se(),"ElTabPane"),f=S(),v=S((a=Te(e.modelValue)?e.defaultValue:e.modelValue)!=null?a:"0"),d=async(E,h=!1)=>{var g,x,C,_;if(!(v.value===E||Te(E)))try{let P;if(e.beforeLeave){const F=e.beforeLeave(E,v.value);P=F instanceof Promise?await F:F}else P=!0;if(P!==!1){const F=(g=o.value.find(V=>V.paneName===v.value))==null?void 0:g.isFocusInsidePane();v.value=E,h&&(t(ll,E),t("tabChange",E)),(C=(x=f.value)==null?void 0:x.removeFocus)==null||C.call(x),F&&((_=f.value)==null||_.focusActiveTab())}}catch{}},p=(E,h,g)=>{E.props.disabled||(t("tabClick",E,g),d(h,!0))},m=(E,h)=>{E.props.disabled||Te(E.props.name)||(h.stopPropagation(),t("edit",E.props.name,"remove"),t("tabRemove",E.props.name))},w=()=>{t("edit",void 0,"add"),t("tabAdd")},L=E=>{const h=Ct(E);[ve.enter,ve.numpadEnter].includes(h)&&w()},O=E=>{const h=E.el.firstChild,g=["bottom","right"].includes(e.tabPosition)?E.children[0].el:E.children[1].el;h!==g&&h.before(g)};return pe(()=>e.modelValue,E=>d(E)),pe(v,async()=>{var E;await $e(),(E=f.value)==null||E.scrollToActiveTab()}),St(ol,{props:e,currentName:v,registerPane:r,unregisterPane:i,nav$:f}),n({currentName:v,get tabNavRef(){return fo(f.value,["scheduleRender"])}}),()=>{const E=l["add-icon"],h=e.editable||e.addable?M("div",{class:[s.e("new-tab"),u.value&&s.e("new-tab-vertical")],tabindex:e.tabindex,onClick:w,onKeydown:L},[E?ue(l,"add-icon"):M(We,{class:s.is("icon-plus")},{default:()=>[M(no,null,null)]})]):null,g=()=>M(ou,{ref:f,currentName:v.value,editable:e.editable,type:e.type,panes:o.value,stretch:e.stretch,onTabClick:p,onTabRemove:m},null),x=M("div",{class:[s.e("header"),u.value&&s.e("header-vertical"),s.is(e.tabPosition)]},[M(c,null,{default:g,$stable:!0}),h]),C=M("div",{class:s.e("content")},[ue(l,"default")]);return M("div",{class:[s.b(),s.m(e.tabPosition),{[s.m("card")]:e.type==="card",[s.m("border-card")]:e.type==="border-card"}],onVnodeMounted:O,onVnodeUpdated:O},[C,x])}}});var uu=iu;const du=ze({label:{type:String,default:""},name:{type:[String,Number]},closable:{type:Boolean,default:void 0},disabled:Boolean,lazy:Boolean}),Ea="ElTabPane",cu=le({name:Ea}),fu=le({...cu,props:du,setup(e){const t=e,l=Se(),n=Kl(),a=_e(ol);a||Ze(Ea,"usage: ");const s=re("tab-pane"),u=S(),o=S(),r=I(()=>{var m;return(m=t.closable)!=null?m:a.props.closable}),i=un(()=>{var m;return a.currentName.value===((m=t.name)!=null?m:o.value)}),c=S(i.value),f=I(()=>{var m;return(m=t.name)!=null?m:o.value}),v=un(()=>!t.lazy||c.value||i.value),d=()=>{var m;return(m=u.value)==null?void 0:m.contains(document.activeElement)};pe(i,m=>{m&&(c.value=!0)});const p=Qe({uid:l.uid,getVnode:()=>l.vnode,slots:n,props:t,paneName:f,active:i,index:o,isClosable:r,isFocusInsidePane:d});return a.registerPane(p),et(()=>{a.unregisterPane(p)}),Xo(()=>{var m;n.label&&((m=a.nav$.value)==null||m.scheduleRender())}),(m,w)=>y(v)?Fe((z(),te("div",{key:0,id:`pane-${y(f)}`,ref_key:"paneRef",ref:u,class:Q(y(s).b()),role:"tabpanel","aria-hidden":!y(i),"aria-labelledby":`tab-${y(f)}`},[ue(m.$slots,"default")],10,["id","aria-hidden","aria-labelledby"])),[[dt,y(i)]]):he("v-if",!0)}});var ka=xe(fu,[["__file","tab-pane.vue"]]);const vu=st(uu,{TabPane:ka}),pu=Ge(ka);function mu(e,t){let l;const n=S(!1),a=Qe({...e,originalPosition:"",originalOverflow:"",visible:!1});function s(d){a.text=d}function u(){const d=a.parent,p=v.ns;if(!d.vLoadingAddClassList){let m=d.getAttribute("loading-number");m=Number.parseInt(m)-1,m?d.setAttribute("loading-number",m.toString()):(Ve(d,p.bm("parent","relative")),d.removeAttribute("loading-number")),Ve(d,p.bm("parent","hidden"))}o(),f.unmount()}function o(){var d,p;(p=(d=v.$el)==null?void 0:d.parentNode)==null||p.removeChild(v.$el)}function r(){var d;e.beforeClose&&!e.beforeClose()||(n.value=!0,clearTimeout(l),l=setTimeout(i,400),a.visible=!1,(d=e.closed)==null||d.call(e))}function i(){if(!n.value)return;const d=a.parent;n.value=!1,d.vLoadingAddClassList=void 0,u()}const c=le({name:"ElLoading",setup(d,{expose:p}){const{ns:m,zIndex:w}=ao("loading");return p({ns:m,zIndex:w}),()=>{const L=a.spinner||a.svg,O=q("svg",{class:"circular",viewBox:a.svgViewBox?a.svgViewBox:"0 0 50 50",...L?{innerHTML:L}:{}},[q("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none"})]),E=a.text?q("p",{class:m.b("text")},[a.text]):void 0;return q(al,{name:m.b("fade"),onAfterLeave:i},{default:A(()=>[Fe(M("div",{style:{backgroundColor:a.background||""},class:[m.b("mask"),a.customClass,m.is("fullscreen",a.fullscreen)]},[q("div",{class:m.b("spinner")},[O,E])]),[[dt,a.visible]])])})}}}),f=Go(c);Object.assign(f._context,t??{});const v=f.mount(document.createElement("div"));return{...Hn(a),setText:s,removeElLoadingChild:o,close:r,handleAfterLeave:i,vm:v,get $el(){return v.$el}}}let zt;const Ql=function(e={},t){if(!ot)return;const l=hu(e);if(l.fullscreen&&zt)return zt;const n=mu({...l,closed:()=>{var s;(s=l.closed)==null||s.call(l),l.fullscreen&&(zt=void 0)}},t??Ql._context);gu(l,l.parent,n),kn(l,l.parent,n),l.parent.vLoadingAddClassList=()=>kn(l,l.parent,n);let a=l.parent.getAttribute("loading-number");return a?a=`${Number.parseInt(a)+1}`:a="1",l.parent.setAttribute("loading-number",a),l.parent.appendChild(n.$el),$e(()=>n.visible.value=l.visible),l.fullscreen&&(zt=n),n},hu=e=>{var t,l,n,a;let s;return ye(e.target)?s=(t=document.querySelector(e.target))!=null?t:document.body:s=e.target||document.body,{parent:s===document.body||e.body?document.body:s,background:e.background||"",svg:e.svg||"",svgViewBox:e.svgViewBox||"",spinner:e.spinner||!1,text:e.text||"",fullscreen:s===document.body&&((l=e.fullscreen)!=null?l:!0),lock:(n=e.lock)!=null?n:!1,customClass:e.customClass||"",visible:(a=e.visible)!=null?a:!0,beforeClose:e.beforeClose,closed:e.closed,target:s}},gu=async(e,t,l)=>{const{nextZIndex:n}=l.vm.zIndex||l.vm._.exposed.zIndex,a={};if(e.fullscreen)l.originalPosition.value=Mt(document.body,"position"),l.originalOverflow.value=Mt(document.body,"overflow"),a.zIndex=n();else if(e.parent===document.body){l.originalPosition.value=Mt(document.body,"position"),await $e();for(const s of["top","left"]){const u=s==="top"?"scrollTop":"scrollLeft";a[s]=`${e.target.getBoundingClientRect()[s]+document.body[u]+document.documentElement[u]-Number.parseInt(Mt(document.body,`margin-${s}`),10)}px`}for(const s of["height","width"])a[s]=`${e.target.getBoundingClientRect()[s]}px`}else l.originalPosition.value=Mt(t,"position");for(const[s,u]of Object.entries(a))l.$el.style[s]=u},kn=(e,t,l)=>{const n=l.vm.ns||l.vm._.exposed.ns;["absolute","fixed","sticky"].includes(l.originalPosition.value)?Ve(t,n.bm("parent","relative")):Xe(t,n.bm("parent","relative")),e.fullscreen&&e.lock?Xe(t,n.bm("parent","hidden")):Ve(t,n.bm("parent","hidden"))};Ql._context=null;const Rt=Symbol("ElLoading"),it=e=>`element-loading-${Jo(e)}`,Nn=(e,t)=>{var l,n,a,s;const u=t.instance,o=d=>ct(t.value)?t.value[d]:void 0,r=d=>{const p=ye(d)&&u?.[d]||d;return S(p)},i=d=>r(o(d)||e.getAttribute(it(d))),c=(l=o("fullscreen"))!=null?l:t.modifiers.fullscreen,f={text:i("text"),svg:i("svg"),svgViewBox:i("svgViewBox"),spinner:i("spinner"),background:i("background"),customClass:i("customClass"),fullscreen:c,target:(n=o("target"))!=null?n:c?void 0:e,body:(a=o("body"))!=null?a:t.modifiers.body,lock:(s=o("lock"))!=null?s:t.modifiers.lock},v=Ql(f);v._context=Zl._context,e[Rt]={options:f,instance:v}},bu=(e,t)=>{for(const l of Object.keys(e))Wn(e[l])&&(e[l].value=t[l])},Zl={mounted(e,t){t.value&&Nn(e,t)},updated(e,t){const l=e[Rt];if(!t.value){l?.instance.close(),e[Rt]=null;return}l?bu(l.options,ct(t.value)?t.value:{text:e.getAttribute(it("text")),svg:e.getAttribute(it("svg")),svgViewBox:e.getAttribute(it("svgViewBox")),spinner:e.getAttribute(it("spinner")),background:e.getAttribute(it("background")),customClass:e.getAttribute(it("customClass"))}):Nn(e,t)},unmounted(e){var t;(t=e[Rt])==null||t.instance.close(),e[Rt]=null}};Zl._context=null;async function yu(){const{data:e}=await nl.get("/announcements/active");return e}async function Cu(e){const{data:t}=await nl.post(`/announcements/${e}/dismiss`,{});return t}async function wu(e){const{data:t}=await nl.post("/feedback",e);return t}async function Su(){const{data:e}=await nl.get("/feedback");return e}function _u(e){if(!e||typeof e!="object")throw new Error("Passkey参数无效");return e.publicKey&&typeof e.publicKey=="object"?e.publicKey:e}function Sl(e){const t=String(e||""),l="=".repeat((4-t.length%4)%4),n=(t+l).replace(/-/g,"+").replace(/_/g,"/"),a=window.atob(n),s=new Uint8Array(a.length);for(let u=0;u({...n,id:Sl(n.id)}))),l}function Eu(e){if(!e)return null;const t=e.response||{},l={id:e.id,rawId:mt(e.rawId),type:e.type,authenticatorAttachment:e.authenticatorAttachment||void 0,response:{}};return t.clientDataJSON&&(l.response.clientDataJSON=mt(t.clientDataJSON)),t.attestationObject&&(l.response.attestationObject=mt(t.attestationObject)),t.authenticatorData&&(l.response.authenticatorData=mt(t.authenticatorData)),t.signature&&(l.response.signature=mt(t.signature)),t.userHandle?l.response.userHandle=mt(t.userHandle):l.response.userHandle=null,typeof t.getTransports=="function"&&(l.response.transports=t.getTransports()||[]),l}function ku(){return typeof window<"u"&&window.isSecureContext&&!!window.PublicKeyCredential&&!!navigator.credentials}async function Nu(e){const t=xu(e),l=await navigator.credentials.create({publicKey:t});return Eu(l)}const Tu={class:"header-left"},Mu={class:"header-right"},Ru={class:"user-meta"},Ou={class:"user-name"},$u={key:2,class:"vip-warn"},Lu={class:"drawer-user"},Pu={class:"user-name"},Au={class:"drawer-actions"},Iu={class:"announcement-body"},Fu={class:"announcement-content"},Bu={key:0,class:"announcement-image"},Hu=["src"],Wu={class:"feedback-title"},Vu={class:"feedback-title-text"},zu={class:"feedback-time app-muted"},Ku={class:"feedback-body"},Du={class:"feedback-section"},Uu={class:"feedback-text"},ju={key:0,class:"feedback-section"},qu={class:"feedback-text"},Yu={class:"settings-section"},Xu={class:"email-row"},Gu={class:"email-value"},Ju={class:"notify-row"},Qu={class:"settings-section"},Zu={class:"settings-section"},ed={class:"settings-section"},td={class:"settings-section"},ld={key:0,class:"vip-info"},nd={class:"vip-line"},ad={class:"vip-line"},od={key:1,class:"vip-info"},sd=24e4,rd={__name:"AppLayout",setup(e){const t=Qo(),l=Zo(),n=vo(),a=S(!1),s=S(!1);let u;const o=S(!1),r=S(null),i=S(!1),c=(()=>{try{const T=window.performance?.timeOrigin;if(typeof T=="number"&&Number.isFinite(T))return String(T)}catch{}return String(Date.now())})();function f(T){return`announcement_closed_once_${T}`}function v(T){return`announcement_closed_${T}`}function d(T){try{return window.sessionStorage.getItem(f(T))===c}catch{return!1}}function p(T){try{return window.localStorage.getItem(v(T))==="1"}catch{return!1}}function m(T){try{window.sessionStorage.setItem(f(T),c)}catch{}}function w(T){try{window.localStorage.setItem(v(T),"1")}catch{}}const L=S(!1),O=S("new"),E=S(!1),h=S(!1),g=S([]),x=Qe({title:"",description:"",contact:""}),C=S(!1),_=S("email"),P=S(!1),F=S(!1),V=Qe({email:"",email_verified:!1}),B=S(""),G=S(!1),Y=S(!0),ie=S(!1),J=Qe({current_password:"",new_password:"",confirm_password:""}),N=S(!1),$=S(!1),H=S(""),k=S(!1),W=S(!1),R=S(""),K=S([]),U=S(null),Z=S(0);function ne(){a.value=!!u?.matches,a.value||(s.value=!1)}Ue(()=>{u=window.matchMedia("(max-width: 768px)"),u.addEventListener?.("change",ne),ne(),n.refreshVipInfo().catch(()=>{window.location.href="/login"}),j()}),et(()=>{u?.removeEventListener?.("change",ne)});const me=[{path:"/app/accounts",label:"账号管理",icon:oo},{path:"/app/schedules",label:"定时任务",icon:so},{path:"/app/screenshots",label:"截图管理",icon:ro}],Ce=I(()=>t.path);async function ke(T){await l.push(T),s.value=!1}async function Le(){try{await hl.confirm("确定退出登录吗?","退出登录",{confirmButtonText:"退出",cancelButtonText:"取消",type:"warning"})}catch{return}await n.logout(),window.location.href="/login"}function Ke(){O.value="new",x.title="",x.description="",x.contact="",L.value=!0}async function tt(){h.value=!0;try{const T=await Su();g.value=Array.isArray(T)?T:[]}catch{g.value=[]}finally{h.value=!1}}function xt(T){return T==="replied"?"已回复":T==="closed"?"已关闭":"待处理"}function Et(T){return T==="replied"?"success":T==="closed"?"info":"warning"}async function ft(){const T=x.title.trim(),b=x.description.trim(),ee=x.contact.trim();if(!T||!b){fe.error("标题和描述不能为空");return}E.value=!0;try{const ae=await wu({title:T,description:b,contact:ee});fe.success(ae?.message||"反馈提交成功"),L.value=!1,x.title="",x.description="",x.contact=""}catch(ae){const we=ae?.response?.data;fe.error(we?.error||"提交失败")}finally{E.value=!1}}async function Pe(){C.value=!0,_.value="email",await vt()}async function vt(){await Promise.all([Ht(),sl(),rl(),kt()])}async function Ht(){P.value=!0;try{const T=await is();V.email=T?.email||"",V.email_verified=!!T?.email_verified,B.value=V.email||""}catch{V.email="",V.email_verified=!1,B.value=""}finally{P.value=!1}}async function sl(){G.value=!0;try{const T=await ds();Y.value=!!T?.enabled}catch{Y.value=!0}finally{G.value=!1}}async function rl(){N.value=!0;try{const T=await cs();H.value=T?.kdocs_unit||""}catch{H.value=""}finally{N.value=!1}}async function il(){$.value=!0;try{await rs({kdocs_unit:H.value.trim()}),fe.success("已更新表格县区设置")}catch{}finally{$.value=!1}}async function kt(){k.value=!0;try{const T=await us();K.value=Array.isArray(T?.items)?T.items:[],K.value.length<3?await Wt():(U.value=null,Z.value=0)}catch{K.value=[],U.value=null,Z.value=0}finally{k.value=!1}}function ul(){return!U.value||Date.now()-Number(Z.value||0)>sd?null:U.value}async function Wt(){try{const T=await vn({});U.value=T,Z.value=Date.now()}catch{U.value=null,Z.value=0}}async function dl(){if(!ku()){fe.error("当前浏览器或环境不支持Passkey(需 HTTPS)");return}if(K.value.length>=3){fe.error("最多可绑定3台设备");return}W.value=!0;try{let T=ul();T||(T=await vn({}));const b=await Nu(T?.publicKey||{});await as({credential:b,device_name:R.value.trim()}),U.value=null,Z.value=0,R.value="",fe.success("Passkey设备添加成功"),await kt()}catch(T){try{await os({stage:"register",source:"user-settings",name:T?.name||"",message:T?.message||"",code:T?.code||"",user_agent:navigator.userAgent||""})}catch{}U.value=null,Z.value=0,await Wt();const b=T?.response?.data,ee=T?.message?String(T.message):"",ae=b?.error||(T?.name==="NotAllowedError"?`Passkey注册未完成(浏览器返回:${ee||"未提供详细原因"})`:ee||"Passkey添加失败");fe.error(ae)}finally{W.value=!1}}async function cl(T){try{await hl.confirm(`确定删除设备「${T?.device_name||"未命名设备"}」吗?`,"删除Passkey设备",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}try{await ss(T.id),fe.success("设备已删除"),await kt()}catch(b){const ee=b?.response?.data;fe.error(ee?.error||"删除失败")}}async function fl(){const T=B.value.trim().toLowerCase();if(!T){fe.error("请输入邮箱地址");return}if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(T)){fe.error("邮箱格式不正确");return}F.value=!0;try{const ee=await ts({email:T});fe.success(ee?.message||"验证邮件已发送"),V.email=T,V.email_verified=!1}catch(ee){const ae=ee?.response?.data;fe.error(ae?.error||"绑定失败")}finally{F.value=!1}}async function vl(){try{await hl.confirm("确定要解绑当前邮箱吗?","解绑邮箱",{confirmButtonText:"解绑",cancelButtonText:"取消",type:"warning"})}catch{return}try{const T=await es();if(T?.success){fe.success(T?.message||"邮箱已解绑"),await Ht();return}fe.error(T?.error||"解绑失败")}catch(T){const b=T?.response?.data;fe.error(b?.error||"解绑失败")}}async function en(T){const b=Y.value;Y.value=!!T,G.value=!0;try{const ee=await ls({enabled:!!T});if(ee?.success){fe.success("已更新");return}Y.value=b,fe.error(ee?.error||"更新失败")}catch(ee){Y.value=b;const ae=ee?.response?.data;fe.error(ae?.error||"更新失败")}finally{G.value=!1}}async function pl(){const T=J.current_password,b=J.new_password,ee=J.confirm_password;if(!T||!b||!ee){fe.error("请填写完整信息");return}const ae=fs(b);if(!ae.ok){fe.error(ae.message);return}if(b!==ee){fe.error("两次输入的新密码不一致");return}ie.value=!0;try{const we=await ns({current_password:T,new_password:b});if(we?.success){fe.success("密码修改成功"),J.current_password="",J.new_password="",J.confirm_password="";return}fe.error(we?.error||"修改失败")}catch(we){const Ae=we?.response?.data;fe.error(Ae?.error||"修改失败")}finally{ie.value=!1}}async function j(){i.value=!0;try{const b=(await yu())?.announcement;if(!b?.id||p(b.id)||d(b.id))return;r.value=b,o.value=!0}catch{}finally{i.value=!1}}function oe(){const T=r.value;T?.id&&m(T.id),o.value=!1}async function se(){const T=r.value;if(!T?.id){o.value=!1;return}w(T.id);try{(await Cu(T.id))?.success&&fe.success("已永久关闭")}catch{}finally{o.value=!1}}return(T,b)=>{const ee=We,ae=Hr,we=Br,Ae=or,ge=io,qe=Eo,Na=sr,Ta=Ie("RouterView"),Ma=rr,tn=ar,Ra=yr,ml=ko,Je=Uo,Ye=Ao,Nt=Po,rt=pu,Oa=No,ln=To,$a=js,La=Us,nn=vu,pt=Io,Pa=fr,Aa=po,Tt=Qi,Ia=Ji,Vt=Zl;return z(),de(tn,{class:"layout-root"},{default:A(()=>[a.value?he("",!0):(z(),de(Ae,{key:0,width:"220px",class:"layout-aside"},{default:A(()=>[b[19]||(b[19]=D("div",{class:"brand"},[D("div",{class:"brand-title"},"知识管理平台"),D("div",{class:"brand-sub app-muted"},"用户中心")],-1)),M(we,{"default-active":Ce.value,class:"aside-menu",router:"",onSelect:ke},{default:A(()=>[(z(),te(He,null,Lt(me,X=>M(ae,{key:X.path,index:X.path},{default:A(()=>[M(ee,null,{default:A(()=>[(z(),de(El(X.icon)))]),_:2},1024),D("span",null,be(X.label),1)]),_:2},1032,["index"])),64))]),_:1},8,["default-active"])]),_:1})),M(tn,null,{default:A(()=>[M(Na,{class:"layout-header"},{default:A(()=>[D("div",Tu,[a.value?(z(),de(ge,{key:0,text:"",class:"header-menu-btn",onClick:b[0]||(b[0]=X=>s.value=!0)},{default:A(()=>[...b[20]||(b[20]=[ce(" 菜单 ",-1)])]),_:1})):he("",!0),b[21]||(b[21]=D("div",{class:"header-title"},"用户控制台",-1))]),D("div",Mu,[D("div",Ru,[y(n).isVip?(z(),de(qe,{key:0,type:"success",size:"small",effect:"light"},{default:A(()=>[...b[22]||(b[22]=[ce("VIP",-1)])]),_:1})):(z(),de(qe,{key:1,type:"info",size:"small",effect:"light"},{default:A(()=>[...b[23]||(b[23]=[ce("普通",-1)])]),_:1})),D("span",Ou,be(y(n).username||"用户"),1),y(n).isVip&&y(n).vipDaysLeft<=7&&y(n).vipDaysLeft>0?(z(),te("span",$u," ("+be(y(n).vipDaysLeft)+"天后到期) ",1)):he("",!0)]),M(ge,{text:"",type:"primary",onClick:Ke},{default:A(()=>[...b[24]||(b[24]=[ce("反馈",-1)])]),_:1}),M(ge,{text:"",onClick:Pe},{default:A(()=>[...b[25]||(b[25]=[ce("设置",-1)])]),_:1}),M(ge,{type:"primary",plain:"",onClick:Le},{default:A(()=>[...b[26]||(b[26]=[ce("退出",-1)])]),_:1})])]),_:1}),M(Ma,{class:"layout-main"},{default:A(()=>[M(Ta)]),_:1})]),_:1}),M(Ra,{modelValue:s.value,"onUpdate:modelValue":b[1]||(b[1]=X=>s.value=X),size:"240px","with-header":!1},{default:A(()=>[b[32]||(b[32]=D("div",{class:"drawer-brand"},[D("div",{class:"brand-title"},"知识管理平台"),D("div",{class:"brand-sub app-muted"},"用户中心")],-1)),D("div",Lu,[y(n).isVip?(z(),de(qe,{key:0,type:"success",size:"small",effect:"light"},{default:A(()=>[...b[27]||(b[27]=[ce("VIP",-1)])]),_:1})):(z(),de(qe,{key:1,type:"info",size:"small",effect:"light"},{default:A(()=>[...b[28]||(b[28]=[ce("普通",-1)])]),_:1})),D("span",Pu,be(y(n).username||"用户"),1)]),M(we,{"default-active":Ce.value,class:"aside-menu",router:"",onSelect:ke},{default:A(()=>[(z(),te(He,null,Lt(me,X=>M(ae,{key:X.path,index:X.path},{default:A(()=>[M(ee,null,{default:A(()=>[(z(),de(El(X.icon)))]),_:2},1024),D("span",null,be(X.label),1)]),_:2},1032,["index"])),64))]),_:1},8,["default-active"]),D("div",Au,[M(ge,{text:"",type:"primary",style:{width:"100%"},onClick:Ke},{default:A(()=>[...b[29]||(b[29]=[ce("问题反馈",-1)])]),_:1}),M(ge,{text:"",style:{width:"100%"},onClick:Pe},{default:A(()=>[...b[30]||(b[30]=[ce("个人设置",-1)])]),_:1}),M(ge,{type:"primary",plain:"",style:{width:"100%"},onClick:Le},{default:A(()=>[...b[31]||(b[31]=[ce("退出登录",-1)])]),_:1})])]),_:1},8,["modelValue"]),M(ml,{modelValue:o.value,"onUpdate:modelValue":b[2]||(b[2]=X=>o.value=X),width:"min(560px, 92vw)",title:r.value?.title||"系统公告"},{footer:A(()=>[M(ge,{onClick:oe},{default:A(()=>[...b[33]||(b[33]=[ce("当次关闭",-1)])]),_:1}),M(ge,{type:"primary",onClick:se},{default:A(()=>[...b[34]||(b[34]=[ce("永久关闭",-1)])]),_:1})]),default:A(()=>[Fe((z(),te("div",Iu,[D("div",Fu,be(r.value?.content||""),1),r.value?.image_url?(z(),te("div",Bu,[D("img",{src:r.value.image_url,alt:"公告图片",loading:"lazy"},null,8,Hu)])):he("",!0)])),[[Vt,i.value]])]),_:1},8,["modelValue","title"]),M(ml,{modelValue:L.value,"onUpdate:modelValue":b[9]||(b[9]=X=>L.value=X),title:"问题反馈",width:"min(720px, 92vw)"},{footer:A(()=>[M(ge,{onClick:b[8]||(b[8]=X=>L.value=!1)},{default:A(()=>[...b[37]||(b[37]=[ce("关闭",-1)])]),_:1}),O.value==="list"?(z(),de(ge,{key:0,onClick:tt},{default:A(()=>[...b[38]||(b[38]=[ce("刷新",-1)])]),_:1})):he("",!0),O.value==="new"?(z(),de(ge,{key:1,type:"primary",loading:E.value,onClick:ft},{default:A(()=>[...b[39]||(b[39]=[ce("提交",-1)])]),_:1},8,["loading"])):he("",!0)]),default:A(()=>[M(nn,{modelValue:O.value,"onUpdate:modelValue":b[6]||(b[6]=X=>O.value=X),onTabChange:b[7]||(b[7]=X=>X==="list"&&tt())},{default:A(()=>[M(rt,{label:"提交反馈",name:"new"},{default:A(()=>[M(Nt,{"label-position":"top"},{default:A(()=>[M(Ye,{label:"标题"},{default:A(()=>[M(Je,{modelValue:x.title,"onUpdate:modelValue":b[3]||(b[3]=X=>x.title=X),placeholder:"简要描述问题",maxlength:"100","show-word-limit":""},null,8,["modelValue"])]),_:1}),M(Ye,{label:"详细描述"},{default:A(()=>[M(Je,{modelValue:x.description,"onUpdate:modelValue":b[4]||(b[4]=X=>x.description=X),type:"textarea",rows:5,placeholder:"请详细描述您遇到的问题",maxlength:"2000","show-word-limit":""},null,8,["modelValue"])]),_:1}),M(Ye,{label:"联系方式(可选)"},{default:A(()=>[M(Je,{modelValue:x.contact,"onUpdate:modelValue":b[5]||(b[5]=X=>x.contact=X),placeholder:"方便我们联系您"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),M(rt,{label:"我的反馈",name:"list"},{default:A(()=>[h.value?(z(),de(Oa,{key:0,rows:6,animated:""})):(z(),te(He,{key:1},[g.value.length===0?(z(),de(ln,{key:0,description:"暂无反馈"})):(z(),de(La,{key:1,accordion:""},{default:A(()=>[(z(!0),te(He,null,Lt(g.value,X=>(z(),de($a,{key:X.id,name:String(X.id)},{title:A(()=>[D("div",Wu,[D("span",Vu,be(X.title),1),M(qe,{size:"small",effect:"light",type:Et(X.status)},{default:A(()=>[ce(be(xt(X.status)),1)]),_:2},1032,["type"]),D("span",zu,be(X.created_at||""),1)])]),default:A(()=>[D("div",Ku,[D("div",Du,[b[35]||(b[35]=D("div",{class:"feedback-label app-muted"},"描述",-1)),D("div",Uu,be(X.description),1)]),X.admin_reply?(z(),te("div",ju,[b[36]||(b[36]=D("div",{class:"feedback-label app-muted"},"管理员回复",-1)),D("div",qu,be(X.admin_reply),1)])):he("",!0)])]),_:2},1032,["name"]))),128))]),_:1}))],64))]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["modelValue"]),M(ml,{modelValue:C.value,"onUpdate:modelValue":b[18]||(b[18]=X=>C.value=X),title:"个人设置",width:"min(720px, 92vw)"},{footer:A(()=>[M(ge,{onClick:b[17]||(b[17]=X=>C.value=!1)},{default:A(()=>[...b[50]||(b[50]=[ce("关闭",-1)])]),_:1})]),default:A(()=>[M(nn,{modelValue:_.value,"onUpdate:modelValue":b[16]||(b[16]=X=>_.value=X)},{default:A(()=>[M(rt,{label:"邮箱绑定",name:"email"},{default:A(()=>[Fe((z(),te("div",Yu,[V.email&&V.email_verified?(z(),de(pt,{key:0,type:"success",closable:!1,title:"邮箱已绑定并验证","show-icon":"",class:"settings-alert"},{default:A(()=>[D("div",Xu,[D("div",Gu,be(V.email),1),M(ge,{type:"danger",text:"",onClick:vl},{default:A(()=>[...b[40]||(b[40]=[ce("解绑",-1)])]),_:1})])]),_:1})):V.email?(z(),de(pt,{key:1,type:"warning",closable:!1,title:"邮箱待验证:请查收验证邮件(含垃圾箱)","show-icon":"",class:"settings-alert"})):he("",!0),M(Nt,{"label-position":"top"},{default:A(()=>[M(Ye,{label:"邮箱地址"},{default:A(()=>[M(Je,{modelValue:B.value,"onUpdate:modelValue":b[10]||(b[10]=X=>B.value=X),placeholder:"name@example.com"},null,8,["modelValue"])]),_:1}),M(ge,{type:"primary",loading:F.value,onClick:fl},{default:A(()=>[...b[41]||(b[41]=[ce("发送验证邮件",-1)])]),_:1},8,["loading"])]),_:1}),M(Pa),D("div",Ju,[b[42]||(b[42]=D("div",null,[D("div",{class:"notify-title"},"任务完成通知"),D("div",{class:"app-muted notify-desc"},"定时任务完成后发送邮件")],-1)),M(Aa,{"model-value":Y.value,disabled:!V.email_verified||G.value,"inline-prompt":"","active-text":"开","inactive-text":"关",onChange:en},null,8,["model-value","disabled"])]),V.email_verified?he("",!0):(z(),de(pt,{key:2,type:"info",closable:!1,title:"绑定并验证邮箱后可开启邮件通知。","show-icon":"",class:"settings-hint"}))])),[[Vt,P.value]])]),_:1}),M(rt,{label:"修改密码",name:"password"},{default:A(()=>[D("div",Qu,[M(Nt,{"label-position":"top"},{default:A(()=>[M(Ye,{label:"当前密码"},{default:A(()=>[M(Je,{modelValue:J.current_password,"onUpdate:modelValue":b[11]||(b[11]=X=>J.current_password=X),type:"password","show-password":"",autocomplete:"current-password"},null,8,["modelValue"])]),_:1}),M(Ye,{label:"新密码(至少8位且包含字母和数字)"},{default:A(()=>[M(Je,{modelValue:J.new_password,"onUpdate:modelValue":b[12]||(b[12]=X=>J.new_password=X),type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue"])]),_:1}),M(Ye,{label:"确认新密码"},{default:A(()=>[M(Je,{modelValue:J.confirm_password,"onUpdate:modelValue":b[13]||(b[13]=X=>J.confirm_password=X),type:"password","show-password":"",autocomplete:"new-password",onKeyup:In(pl,["enter"])},null,8,["modelValue"])]),_:1}),M(ge,{type:"primary",loading:ie.value,onClick:pl},{default:A(()=>[...b[43]||(b[43]=[ce("确认修改",-1)])]),_:1},8,["loading"])]),_:1})])]),_:1}),M(rt,{label:"Passkey设备",name:"passkeys"},{default:A(()=>[Fe((z(),te("div",Zu,[M(pt,{type:"info",closable:!1,title:"最多可绑定3台设备,用于无密码登录。","show-icon":"",class:"settings-alert"}),M(Nt,{inline:""},{default:A(()=>[M(Ye,{label:"设备备注"},{default:A(()=>[M(Je,{modelValue:R.value,"onUpdate:modelValue":b[14]||(b[14]=X=>R.value=X),placeholder:"例如:我的iPhone / 办公Mac",maxlength:"40","show-word-limit":""},null,8,["modelValue"])]),_:1}),M(Ye,null,{default:A(()=>[M(ge,{type:"primary",loading:W.value,onClick:dl},{default:A(()=>[...b[44]||(b[44]=[ce(" 添加Passkey设备 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),K.value.length===0?(z(),de(ln,{key:0,description:"暂无Passkey设备"})):(z(),de(Ia,{key:1,data:K.value,size:"small",style:{width:"100%"}},{default:A(()=>[M(Tt,{prop:"device_name",label:"设备备注","min-width":"160"}),M(Tt,{prop:"credential_id_preview",label:"凭据ID","min-width":"180"}),M(Tt,{prop:"last_used_at",label:"最近使用","min-width":"140"}),M(Tt,{prop:"created_at",label:"创建时间","min-width":"140"}),M(Tt,{label:"操作",width:"100",fixed:"right"},{default:A(({row:X})=>[M(ge,{type:"danger",text:"",onClick:id=>cl(X)},{default:A(()=>[...b[45]||(b[45]=[ce("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]))])),[[Vt,k.value]])]),_:1}),M(rt,{label:"表格上传",name:"kdocs"},{default:A(()=>[Fe((z(),te("div",ed,[M(Nt,{"label-position":"top"},{default:A(()=>[M(Ye,{label:"县区(可选)"},{default:A(()=>[M(Je,{modelValue:H.value,"onUpdate:modelValue":b[15]||(b[15]=X=>H.value=X),placeholder:"留空使用系统默认县区"},null,8,["modelValue"])]),_:1}),M(ge,{type:"primary",loading:$.value,onClick:il},{default:A(()=>[...b[46]||(b[46]=[ce("保存",-1)])]),_:1},8,["loading"])]),_:1}),M(pt,{type:"info",closable:!1,title:"自动上传开关在“账号管理”页面设置(测试功能)。","show-icon":"",class:"settings-hint"})])),[[Vt,N.value]])]),_:1}),M(rt,{label:"VIP信息",name:"vip"},{default:A(()=>[D("div",td,[M(pt,{type:y(n).isVip?"success":"info",closable:!1,title:y(n).isVip?"当前为 VIP 会员":"当前为普通用户","show-icon":"",class:"settings-alert"},null,8,["type","title"]),y(n).isVip?(z(),te("div",ld,[D("div",nd,[b[47]||(b[47]=D("span",{class:"app-muted"},"到期时间",-1)),D("span",null,be(y(n).vipExpireTime||"未知"),1)]),D("div",ad,[b[48]||(b[48]=D("span",{class:"app-muted"},"剩余天数",-1)),D("span",null,be(y(n).vipDaysLeft),1)])])):(z(),te("div",od,[...b[49]||(b[49]=[D("div",{class:"app-muted"},"升级方式:请通过“反馈”联系管理员开通。",-1)])]))])]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["modelValue"])]),_:1})}}},_d=vs(rd,[["__scopeId","data-v-ec18bcb1"]]);export{_d as default}; +import{e as Hl,f as Wl,g as Fa,h as Tn,k as Ba,j as Ha,l as Wa,m as Va,n as _l,o as an,p as za,S as Ka,q as Da,r as ot,s as at,b as ze,t as Re,u as re,v as lt,_ as xe,d as st,x as It,y as ht,z as Ua,A as We,B as Ge,C as ja,D as qa,F as Ya,G as Ft,H as Mn,I as Xe,J as Ot,K as Ve,T as Xa,L as Rn,M as Te,N as on,O as sn,P as Ga,Q as gt,R as On,U as rn,V as Ja,W as Qa,X as Za,Y as eo,Z as to,$ as lo,a0 as no,a1 as un,a2 as ao,a3 as Mt,a4 as oo,a5 as so,a6 as ro,E as io}from"./el-button-DWxIvzz-.js";import{i as uo,E as co,a as Lt,o as fo,u as vo,b as po}from"./user-Bl59IefW.js";import{b as mo,f as $n,d as ho,a as go,u as bo,E as yo,c as Co,e as wo,g as tl,C as So,h as _o,i as Pn,j as nt,k as xo,l as Eo,m as ko,n as No,o as To,p as hl}from"./el-overlay-C_JJBVfE.js";import{c as Mo,k as Ln,d as Ro,e as Oo,f as $o,i as Po,a as Lo,b as Ao,E as Io}from"./el-alert-DB2IQLpH.js";import{b as Fo,C as An,U as ll,m as At,c as Gt,t as Ze,u as Bo,d as $t,g as Ct,e as ve,f as Kt,h as Ho,i as wt,j as Wo,k as Vo,l as zo,n as Ko,o as Do,q as dn,p as nl,E as Uo,a as fe}from"./http-CdvgQxJu.js";import{E as xl,A as le,G as q,H as Dt,i as Ue,I as Vl,J as ye,K as Me,g as S,L as pe,h as I,M as St,N as cn,j as te,o as z,B as ue,n as Q,C as y,c as de,s as A,O as zl,P as jo,T as al,Q as _e,k as D,q as M,x as ce,t as be,D as El,m as In,p as Fn,w as Fe,R as dt,S as Kl,U as De,l as he,z as et,f as Qe,V as Se,F as He,W as $e,X as ct,Y as Jt,Z as qo,_ as bt,$ as Bn,a0 as Be,a1 as fn,a2 as Hn,a3 as Wn,r as Ie,a4 as Pt,a5 as Vn,a6 as zn,a7 as Dl,a8 as Yo,a9 as Xo,d as Go,aa as Jo,y as Qo,u as Zo}from"./vendor-vue-DxN60LNb.js";import{u as es,b as ts,a as ls,c as ns,d as vn,e as as,r as os,f as ss,g as rs,h as is,i as us,j as ds,k as cs}from"./settings-Ddo8isuv.js";import{v as fs}from"./password-7ryi82gE.js";import{_ as vs}from"./style-CEbARg1o.js";import{b as ps,i as ms,d as Qt}from"./isArrayLikeObject-BjIRF-cS.js";import"./vendor-axios-B9ygI19o.js";function hs(e,t,l){if(!Hl(l))return!1;var n=typeof t;return(n=="number"?Wl(l)&&Fa(t,l.length):n=="string"&&t in l)?Tn(l[t],e):!1}function gs(e){return ps(function(t,l){var n=-1,a=l.length,s=a>1?l[a-1]:void 0,u=a>2?l[2]:void 0;for(s=e.length>3&&typeof s=="function"?(a--,s):void 0,u&&hs(l[0],l[1],u)&&(s=a<3?void 0:s,a=1),t=Object(t);++not?window.requestAnimationFrame(e):setTimeout(e,16),ks=e=>ot?window.cancelAnimationFrame(e):clearTimeout(e),Ns=(e,t,l)=>$n(e.subTree).filter(s=>{var u;return Vl(s)&&((u=s.type)==null?void 0:u.name)===t&&!!s.component}).map(s=>s.component.uid).map(s=>l[s]).filter(s=>!!s),Ts=(e,t)=>{const l=xl({}),n=xl([]),a=new WeakMap,s=c=>{l.value[c.uid]=c,Dt(l),Ue(()=>{const f=c.getVnode().el,v=f.parentNode;if(!a.has(v)){a.set(v,[]);const d=v.insertBefore.bind(v);v.insertBefore=(p,m)=>(a.get(v).some(P=>p===P||m===P)&&Dt(l),d(p,m))}a.get(v).push(f)})},u=c=>{delete l.value[c.uid],Dt(l);const f=c.getVnode().el,v=f.parentNode,d=a.get(v),p=d.indexOf(f);d.splice(p,1)},o=()=>{n.value=Ns(e,t,l.value)},r=c=>c.render(),i=le({setup(c,{slots:f}){return()=>(o(),f.default?q(r,{render:f.default}):null)}});return{children:n,addChild:s,removeChild:u,ChildrenSorter:i}},pn=e=>at(e)||ye(e)||Me(e),Ms=ze({accordion:Boolean,modelValue:{type:Re([Array,String,Number]),default:()=>At([])},expandIconPosition:{type:Re([String]),default:"right"},beforeCollapse:{type:Re(Function)}}),Rs={[ll]:pn,[An]:pn},Yn=Symbol("collapseContextKey"),Os="ElCollapse",$s=(e,t)=>{const l=S(Gt(e.modelValue)),n=u=>{l.value=u;const o=e.accordion?l.value[0]:l.value;t(ll,o),t(An,o)},a=u=>{if(e.accordion)n([l.value[0]===u?"":u]);else{const o=[...l.value],r=o.indexOf(u);r>-1?o.splice(r,1):o.push(u),n(o)}},s=async u=>{const{beforeCollapse:o}=e;if(!o){a(u);return}const r=o(u);[cn(r),lt(r)].includes(!0)||Ze(Os,"beforeCollapse must return type `Promise` or `boolean`"),cn(r)?r.then(c=>{c!==!1&&a(u)}).catch(c=>{}):r&&a(u)};return pe(()=>e.modelValue,()=>l.value=Gt(e.modelValue),{deep:!0}),St(Yn,{activeNames:l,handleItemClick:s}),{activeNames:l,setActiveNames:n}},Ps=e=>{const t=re("collapse");return{rootKls:I(()=>[t.b(),t.b(`icon-position-${e.expandIconPosition}`)])}},Ls=le({name:"ElCollapse"}),As=le({...Ls,props:Ms,emits:Rs,setup(e,{expose:t,emit:l}){const n=e,{activeNames:a,setActiveNames:s}=$s(n,l),{rootKls:u}=Ps(n);return t({activeNames:a,setActiveNames:s}),(o,r)=>(z(),te("div",{class:Q(y(u))},[ue(o.$slots,"default")],2))}});var Is=xe(As,[["__file","collapse.vue"]]);const Fs=le({name:"ElCollapseTransition"}),Bs=le({...Fs,setup(e){const t=re("collapse-transition"),l=a=>{a.style.maxHeight="",a.style.overflow=a.dataset.oldOverflow,a.style.paddingTop=a.dataset.oldPaddingTop,a.style.paddingBottom=a.dataset.oldPaddingBottom},n={beforeEnter(a){a.dataset||(a.dataset={}),a.dataset.oldPaddingTop=a.style.paddingTop,a.dataset.oldPaddingBottom=a.style.paddingBottom,a.style.height&&(a.dataset.elExistsHeight=a.style.height),a.style.maxHeight=0,a.style.paddingTop=0,a.style.paddingBottom=0},enter(a){requestAnimationFrame(()=>{a.dataset.oldOverflow=a.style.overflow,a.dataset.elExistsHeight?a.style.maxHeight=a.dataset.elExistsHeight:a.scrollHeight!==0?a.style.maxHeight=`${a.scrollHeight}px`:a.style.maxHeight=0,a.style.paddingTop=a.dataset.oldPaddingTop,a.style.paddingBottom=a.dataset.oldPaddingBottom,a.style.overflow="hidden"})},afterEnter(a){a.style.maxHeight="",a.style.overflow=a.dataset.oldOverflow},enterCancelled(a){l(a)},beforeLeave(a){a.dataset||(a.dataset={}),a.dataset.oldPaddingTop=a.style.paddingTop,a.dataset.oldPaddingBottom=a.style.paddingBottom,a.dataset.oldOverflow=a.style.overflow,a.style.maxHeight=`${a.scrollHeight}px`,a.style.overflow="hidden"},leave(a){a.scrollHeight!==0&&(a.style.maxHeight=0,a.style.paddingTop=0,a.style.paddingBottom=0)},afterLeave(a){l(a)},leaveCancelled(a){l(a)}};return(a,s)=>(z(),de(al,zl({name:y(t).b()},jo(n)),{default:A(()=>[ue(a.$slots,"default")]),_:3},16,["name"]))}});var Hs=xe(Bs,[["__file","collapse-transition.vue"]]);const Xn=st(Hs),Ws=ze({title:{type:String,default:""},name:{type:Re([String,Number]),default:void 0},icon:{type:ht,default:It},disabled:Boolean}),Vs=e=>{const t=_e(Yn),{namespace:l}=re("collapse"),n=S(!1),a=S(!1),s=Ua(),u=I(()=>s.current++),o=I(()=>{var v;return(v=e.name)!=null?v:`${l.value}-id-${s.prefix}-${y(u)}`}),r=I(()=>t?.activeNames.value.includes(y(o)));return{focusing:n,id:u,isActive:r,handleFocus:()=>{setTimeout(()=>{a.value?a.value=!1:n.value=!0},50)},handleHeaderClick:v=>{if(e.disabled)return;const d=v.target;d?.closest("input, textarea, select")||(t?.handleItemClick(y(o)),n.value=!1,a.value=!0)},handleEnterClick:v=>{const d=v.target;d?.closest("input, textarea, select")||(v.preventDefault(),t?.handleItemClick(y(o)))}}},zs=(e,{focusing:t,isActive:l,id:n})=>{const a=re("collapse"),s=I(()=>[a.b("item"),a.is("active",y(l)),a.is("disabled",e.disabled)]),u=I(()=>[a.be("item","header"),a.is("active",y(l)),{focusing:y(t)&&!e.disabled}]),o=I(()=>[a.be("item","arrow"),a.is("active",y(l))]),r=I(()=>[a.be("item","title")]),i=I(()=>a.be("item","wrap")),c=I(()=>a.be("item","content")),f=I(()=>a.b(`content-${y(n)}`)),v=I(()=>a.b(`head-${y(n)}`));return{itemTitleKls:r,arrowKls:o,headKls:u,rootKls:s,itemWrapperKls:i,itemContentKls:c,scopedContentId:f,scopedHeadId:v}},Ks=le({name:"ElCollapseItem"}),Ds=le({...Ks,props:Ws,setup(e,{expose:t}){const l=e,{focusing:n,id:a,isActive:s,handleFocus:u,handleHeaderClick:o,handleEnterClick:r}=Vs(l),{arrowKls:i,headKls:c,rootKls:f,itemTitleKls:v,itemWrapperKls:d,itemContentKls:p,scopedContentId:m,scopedHeadId:w}=zs(l,{focusing:n,isActive:s,id:a});return t({isActive:s}),(P,O)=>(z(),te("div",{class:Q(y(f))},[D("div",{id:y(w),class:Q(y(c)),"aria-expanded":y(s),"aria-controls":y(m),"aria-describedby":y(m),tabindex:P.disabled?void 0:0,"aria-disabled":P.disabled,role:"button",onClick:y(o),onKeydown:In(Fn(y(r),["stop"]),["space","enter"]),onFocus:y(u),onBlur:E=>n.value=!1},[D("span",{class:Q(y(v))},[ue(P.$slots,"title",{isActive:y(s)},()=>[ce(be(P.title),1)])],2),ue(P.$slots,"icon",{isActive:y(s)},()=>[M(y(We),{class:Q(y(i))},{default:A(()=>[(z(),de(El(P.icon)))]),_:1},8,["class"])])],42,["id","aria-expanded","aria-controls","aria-describedby","tabindex","aria-disabled","onClick","onKeydown","onFocus","onBlur"]),M(y(Xn),null,{default:A(()=>[Fe(D("div",{id:y(m),role:"region",class:Q(y(d)),"aria-hidden":!y(s),"aria-labelledby":y(w)},[D("div",{class:Q(y(p))},[ue(P.$slots,"default")],2)],10,["id","aria-hidden","aria-labelledby"]),[[dt,y(s)]])]),_:3})],2))}});var Gn=xe(Ds,[["__file","collapse-item.vue"]]);const Us=st(Is,{CollapseItem:Gn}),js=Ge(Gn),qs=le({name:"ElContainer"}),Ys=le({...qs,props:ze({direction:{type:String,values:["horizontal","vertical"]}}),setup(e){const t=e,l=Kl(),n=re("container"),a=I(()=>t.direction==="vertical"?!0:t.direction==="horizontal"?!1:l&&l.default?l.default().some(u=>{const o=u.type.name;return o==="ElHeader"||o==="ElFooter"}):!1);return(s,u)=>(z(),te("section",{class:Q([y(n).b(),y(n).is("vertical",y(a))])},[ue(s.$slots,"default")],2))}});var Xs=xe(Ys,[["__file","container.vue"]]);const Gs=le({name:"ElAside"}),Js=le({...Gs,props:{width:{type:String,default:null}},setup(e){const t=e,l=re("aside"),n=I(()=>t.width?l.cssVarBlock({width:t.width}):{});return(a,s)=>(z(),te("aside",{class:Q(y(l).b()),style:De(y(n))},[ue(a.$slots,"default")],6))}});var Jn=xe(Js,[["__file","aside.vue"]]);const Qs=le({name:"ElFooter"}),Zs=le({...Qs,props:{height:{type:String,default:null}},setup(e){const t=e,l=re("footer"),n=I(()=>t.height?l.cssVarBlock({height:t.height}):{});return(a,s)=>(z(),te("footer",{class:Q(y(l).b()),style:De(y(n))},[ue(a.$slots,"default")],6))}});var Qn=xe(Zs,[["__file","footer.vue"]]);const er=le({name:"ElHeader"}),tr=le({...er,props:{height:{type:String,default:null}},setup(e){const t=e,l=re("header"),n=I(()=>t.height?l.cssVarBlock({height:t.height}):{});return(a,s)=>(z(),te("header",{class:Q(y(l).b()),style:De(y(n))},[ue(a.$slots,"default")],6))}});var Zn=xe(tr,[["__file","header.vue"]]);const lr=le({name:"ElMain"}),nr=le({...lr,setup(e){const t=re("main");return(l,n)=>(z(),te("main",{class:Q(y(t).b())},[ue(l.$slots,"default")],2))}});var ea=xe(nr,[["__file","main.vue"]]);const ar=st(Xs,{Aside:Jn,Footer:Qn,Header:Zn,Main:ea}),or=Ge(Jn);Ge(Qn);const sr=Ge(Zn),rr=Ge(ea),ir=ze({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:Re(String),default:"solid"}}),ur=le({name:"ElDivider"}),dr=le({...ur,props:ir,setup(e){const t=e,l=re("divider"),n=I(()=>l.cssVar({"border-style":t.borderStyle}));return(a,s)=>(z(),te("div",{class:Q([y(l).b(),y(l).m(a.direction)]),style:De(y(n)),role:"separator"},[a.$slots.default&&a.direction!=="vertical"?(z(),te("div",{key:0,class:Q([y(l).e("text"),y(l).is(a.contentPosition)])},[ue(a.$slots,"default")],2)):he("v-if",!0)],6))}});var cr=xe(dr,[["__file","divider.vue"]]);const fr=st(cr),vr=ze({...go,direction:{type:String,default:"rtl",values:["ltr","rtl","ttb","btt"]},resizable:Boolean,size:{type:[String,Number],default:"30%"},withHeader:{type:Boolean,default:!0},modalFade:{type:Boolean,default:!0},headerAriaLevel:{type:String,default:"2"}}),pr={...ho,"resize-start":(e,t)=>e instanceof MouseEvent&&typeof t=="number",resize:(e,t)=>e instanceof MouseEvent&&typeof t=="number","resize-end":(e,t)=>e instanceof MouseEvent&&typeof t=="number"};function mr(e,t,l){const{width:n,height:a}=Bo(),s=I(()=>["ltr","rtl"].includes(e.direction)),u=I(()=>["ltr","ttb"].includes(e.direction)?1:-1),o=I(()=>s.value?n.value:a.value),r=I(()=>ja(i.value+u.value*c.value,4,o.value)),i=S(0),c=S(0),f=S(!1),v=S(!1);let d=[],p=[];const m=()=>{var h;const g=(h=t.value)==null?void 0:h.closest('[aria-modal="true"]');return g?s.value?g.offsetWidth:g.offsetHeight:100};pe(()=>[e.size,e.resizable],()=>{v.value=!1,i.value=0,c.value=0,O()});const w=h=>{e.resizable&&(v.value||(i.value=m(),v.value=!0),d=[h.pageX,h.pageY],f.value=!0,l("resize-start",h,i.value),p.push($t(window,"mouseup",O),$t(window,"mousemove",P)))},P=h=>{const{pageX:g,pageY:x}=h,C=g-d[0],_=x-d[1];c.value=s.value?C:_,l("resize",h,r.value)},O=h=>{f.value&&(d=[],i.value=r.value,c.value=0,f.value=!1,p.forEach(g=>g?.()),p=[],h&&l("resize-end",h,i.value))},E=$t(t,"mousedown",w);return et(()=>{E(),O()}),{size:I(()=>v.value?`${r.value}px`:qa(e.size)),isResizing:f,isHorizontal:s}}const hr=le({name:"ElDrawer",inheritAttrs:!1}),gr=le({...hr,props:vr,emits:pr,setup(e,{expose:t,emit:l}){const n=e,a=Kl();Ya({scope:"el-drawer",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/drawer.html#slots"},I(()=>!!a.title));const s=S(),u=S(),o=S(),r=re("drawer"),{t:i}=Ft(),{afterEnter:c,afterLeave:f,beforeLeave:v,visible:d,rendered:p,titleId:m,bodyId:w,zIndex:P,onModalClick:O,onOpenAutoFocus:E,onCloseAutoFocus:h,onFocusoutPrevented:g,onCloseRequested:x,handleClose:C}=bo(n,s),{isHorizontal:_,size:L,isResizing:F}=mr(n,o,l),V=I(()=>n.modalPenetrable&&!n.modal);return t({handleClose:C,afterEnter:c,afterLeave:f}),(B,G)=>(z(),de(y(wo),{to:B.appendTo,disabled:B.appendTo!=="body"?!1:!B.appendToBody},{default:A(()=>[M(al,{name:y(r).b("fade"),onAfterEnter:y(c),onAfterLeave:y(f),onBeforeLeave:y(v),persisted:""},{default:A(()=>{var Y;return[Fe(M(y(yo),{mask:B.modal,"overlay-class":[y(r).is("drawer"),(Y=B.modalClass)!=null?Y:"",`${y(r).namespace.value}-modal-drawer`,y(r).is("penetrable",y(V))],"z-index":y(P),onClick:y(O)},{default:A(()=>[M(y(Co),{loop:"",trapped:y(d),"focus-trap-el":s.value,"focus-start-el":u.value,onFocusAfterTrapped:y(E),onFocusAfterReleased:y(h),onFocusoutPrevented:y(g),onReleaseRequested:y(x)},{default:A(()=>[D("div",zl({ref_key:"drawerRef",ref:s,"aria-modal":"true","aria-label":B.title||void 0,"aria-labelledby":B.title?void 0:y(m),"aria-describedby":y(w)},B.$attrs,{class:[y(r).b(),B.direction,y(d)&&"open",y(r).is("dragging",y(F))],style:{[y(_)?"width":"height"]:y(L)},role:"dialog",onClick:Fn(()=>{},["stop"])}),[D("span",{ref_key:"focusStartRef",ref:u,class:Q(y(r).e("sr-focus")),tabindex:"-1"},null,2),B.withHeader?(z(),te("header",{key:0,class:Q([y(r).e("header"),B.headerClass])},[B.$slots.title?ue(B.$slots,"title",{key:1},()=>[he(" DEPRECATED SLOT ")]):ue(B.$slots,"header",{key:0,close:y(C),titleId:y(m),titleClass:y(r).e("title")},()=>[D("span",{id:y(m),role:"heading","aria-level":B.headerAriaLevel,class:Q(y(r).e("title"))},be(B.title),11,["id","aria-level"])]),B.showClose?(z(),te("button",{key:2,"aria-label":y(i)("el.drawer.close"),class:Q(y(r).e("close-btn")),type:"button",onClick:y(C)},[M(y(We),{class:Q(y(r).e("close"))},{default:A(()=>[M(y(Mn))]),_:1},8,["class"])],10,["aria-label","onClick"])):he("v-if",!0)],2)):he("v-if",!0),y(p)?(z(),te("div",{key:1,id:y(w),class:Q([y(r).e("body"),B.bodyClass])},[ue(B.$slots,"default")],10,["id"])):he("v-if",!0),B.$slots.footer?(z(),te("div",{key:2,class:Q([y(r).e("footer"),B.footerClass])},[ue(B.$slots,"footer")],2)):he("v-if",!0),B.resizable?(z(),te("div",{key:3,ref_key:"draggerRef",ref:o,style:De({zIndex:y(P)}),class:Q(y(r).e("dragger"))},null,6)):he("v-if",!0)],16,["aria-label","aria-labelledby","aria-describedby","onClick"])]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])]),_:3},8,["mask","overlay-class","z-index","onClick"]),[[dt,y(d)]])]}),_:3},8,["name","onAfterEnter","onAfterLeave","onBeforeLeave"])]),_:3},8,["to","disabled"]))}});var br=xe(gr,[["__file","drawer.vue"]]);const yr=st(br);let Cr=class{constructor(t,l){this.parent=t,this.domNode=l,this.subIndex=0,this.subIndex=0,this.init()}init(){this.subMenuItems=this.domNode.querySelectorAll("li"),this.addListeners()}gotoSubIndex(t){t===this.subMenuItems.length?t=0:t<0&&(t=this.subMenuItems.length-1),this.subMenuItems[t].focus(),this.subIndex=t}addListeners(){const t=this.parent.domNode;Array.prototype.forEach.call(this.subMenuItems,l=>{l.addEventListener("keydown",n=>{const a=Ct(n);let s=!1;switch(a){case ve.down:{this.gotoSubIndex(this.subIndex+1),s=!0;break}case ve.up:{this.gotoSubIndex(this.subIndex-1),s=!0;break}case ve.tab:{Kt(t,"mouseleave");break}case ve.enter:case ve.numpadEnter:case ve.space:{s=!0,n.currentTarget.click();break}}return s&&(n.preventDefault(),n.stopPropagation()),!1})})}},wr=class{constructor(t,l){this.domNode=t,this.submenu=null,this.submenu=null,this.init(l)}init(t){this.domNode.setAttribute("tabindex","0");const l=this.domNode.querySelector(`.${t}-menu`);l&&(this.submenu=new Cr(this,l)),this.addListeners()}addListeners(){this.domNode.addEventListener("keydown",t=>{const l=Ct(t);let n=!1;switch(l){case ve.down:{Kt(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(0),n=!0;break}case ve.up:{Kt(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(this.submenu.subMenuItems.length-1),n=!0;break}case ve.tab:{Kt(t.currentTarget,"mouseleave");break}case ve.enter:case ve.numpadEnter:case ve.space:{n=!0,t.currentTarget.click();break}}n&&t.preventDefault()})}},Sr=class{constructor(t,l){this.domNode=t,this.init(l)}init(t){const l=this.domNode.childNodes;Array.from(l).forEach(n=>{n.nodeType===1&&new wr(n,t)})}};const _r=le({name:"ElMenuCollapseTransition"}),xr=le({..._r,setup(e){const t=re("menu"),l={onBeforeEnter:n=>n.style.opacity="0.2",onEnter(n,a){Xe(n,`${t.namespace.value}-opacity-transition`),n.style.opacity="1",a()},onAfterEnter(n){Ve(n,`${t.namespace.value}-opacity-transition`),n.style.opacity=""},onBeforeLeave(n){n.dataset||(n.dataset={}),Ot(n,t.m("collapse"))?(Ve(n,t.m("collapse")),n.dataset.oldOverflow=n.style.overflow,n.dataset.scrollWidth=n.clientWidth.toString(),Xe(n,t.m("collapse"))):(Xe(n,t.m("collapse")),n.dataset.oldOverflow=n.style.overflow,n.dataset.scrollWidth=n.clientWidth.toString(),Ve(n,t.m("collapse"))),n.style.width=`${n.scrollWidth}px`,n.style.overflow="hidden"},onLeave(n){Xe(n,"horizontal-collapse-transition"),n.style.width=`${n.dataset.scrollWidth}px`}};return(n,a)=>(z(),de(al,zl({mode:"out-in"},y(l)),{default:A(()=>[ue(n.$slots,"default")]),_:3},16))}});var Er=xe(xr,[["__file","menu-collapse-transition.vue"]]);function ta(e,t){const l=I(()=>{let a=e.parent;const s=[t.value];for(;a.type.name!=="ElMenu";)a.props.index&&s.unshift(a.props.index),a=a.parent;return s});return{parentMenu:I(()=>{let a=e.parent;for(;a&&!["ElMenu","ElSubMenu"].includes(a.type.name);)a=a.parent;return a}),indexPath:l}}function kr(e){return I(()=>{const l=e.backgroundColor;return l?new Xa(l).shade(20).toString():""})}const la=(e,t)=>{const l=re("menu");return I(()=>l.cssVarBlock({"text-color":e.textColor||"","hover-text-color":e.textColor||"","bg-color":e.backgroundColor||"","hover-bg-color":kr(e).value||"","active-color":e.activeTextColor||"",level:`${t}`}))},Ul="rootMenu",Zt="subMenu:",Nr=ze({index:{type:String,required:!0},showTimeout:Number,hideTimeout:Number,popperClass:String,popperStyle:{type:Re([String,Object])},disabled:Boolean,teleported:{type:Boolean,default:void 0},popperOffset:Number,expandCloseIcon:{type:ht},expandOpenIcon:{type:ht},collapseCloseIcon:{type:ht},collapseOpenIcon:{type:ht}}),gl="ElSubMenu";var jl=le({name:gl,props:Nr,setup(e,{slots:t,expose:l}){const n=Se(),{indexPath:a,parentMenu:s}=ta(n,I(()=>e.index)),u=re("menu"),o=re("sub-menu"),r=_e(Ul);r||Ze(gl,"can not inject root menu");const i=_e(`${Zt}${s.value.uid}`);i||Ze(gl,"can not inject sub menu");const c=S({}),f=S({});let v;const d=S(!1),p=S(),m=S(),w=I(()=>i.level===0),P=I(()=>_.value==="horizontal"&&w.value?"bottom-start":"right-start"),O=I(()=>_.value==="horizontal"&&w.value||_.value==="vertical"&&!r.props.collapse?e.expandCloseIcon&&e.expandOpenIcon?x.value?e.expandOpenIcon:e.expandCloseIcon:Rn:e.collapseCloseIcon&&e.collapseOpenIcon?x.value?e.collapseOpenIcon:e.collapseCloseIcon:It),E=I(()=>{const R=e.teleported;return Te(R)?w.value:R}),h=I(()=>r.props.collapse?`${u.namespace.value}-zoom-in-left`:`${u.namespace.value}-zoom-in-top`),g=I(()=>_.value==="horizontal"&&w.value?["bottom-start","bottom-end","top-start","top-end","right-start","left-start"]:["right-start","right","right-end","left-start","bottom-start","bottom-end","top-start","top-end"]),x=I(()=>r.openedMenus.includes(e.index)),C=I(()=>[...Object.values(c.value),...Object.values(f.value)].some(({active:R})=>R)),_=I(()=>r.props.mode),L=I(()=>r.props.persistent),F=Qe({index:e.index,indexPath:a,active:C}),V=la(r.props,i.level+1),B=I(()=>{var R;return(R=e.popperOffset)!=null?R:r.props.popperOffset}),G=I(()=>{var R;return(R=e.popperClass)!=null?R:r.props.popperClass}),Y=I(()=>{var R;return(R=e.popperStyle)!=null?R:r.props.popperStyle}),ie=I(()=>{var R;return(R=e.showTimeout)!=null?R:r.props.showTimeout}),J=I(()=>{var R;return(R=e.hideTimeout)!=null?R:r.props.hideTimeout}),N=()=>{var R,K,U;return(U=(K=(R=m.value)==null?void 0:R.popperRef)==null?void 0:K.popperInstanceRef)==null?void 0:U.destroy()},$=R=>{R||N()},H=()=>{r.props.menuTrigger==="hover"&&r.props.mode==="horizontal"||r.props.collapse&&r.props.mode==="vertical"||e.disabled||r.handleSubMenuClick({index:e.index,indexPath:a.value,active:C.value})},k=(R,K=ie.value)=>{var U;if(R.type!=="focus"){if(r.props.menuTrigger==="click"&&r.props.mode==="horizontal"||!r.props.collapse&&r.props.mode==="vertical"||e.disabled){i.mouseInChild.value=!0;return}i.mouseInChild.value=!0,v?.(),{stop:v}=on(()=>{r.openMenu(e.index,a.value)},K),E.value&&((U=s.value.vnode.el)==null||U.dispatchEvent(new MouseEvent("mouseenter"))),R.type==="mouseenter"&&R.target&&$e(()=>{Ho(R.target,{preventScroll:!0})})}},W=(R=!1)=>{var K;if(r.props.menuTrigger==="click"&&r.props.mode==="horizontal"||!r.props.collapse&&r.props.mode==="vertical"){i.mouseInChild.value=!1;return}v?.(),i.mouseInChild.value=!1,{stop:v}=on(()=>!d.value&&r.closeMenu(e.index,a.value),J.value),E.value&&R&&((K=i.handleMouseleave)==null||K.call(i,!0))};pe(()=>r.props.collapse,R=>$(!!R));{const R=U=>{f.value[U.index]=U},K=U=>{delete f.value[U.index]};St(`${Zt}${n.uid}`,{addSubMenu:R,removeSubMenu:K,handleMouseleave:W,mouseInChild:d,level:i.level+1})}return l({opened:x}),Ue(()=>{r.addSubMenu(F),i.addSubMenu(F)}),et(()=>{i.removeSubMenu(F),r.removeSubMenu(F)}),()=>{var R;const K=[(R=t.title)==null?void 0:R.call(t),q(We,{class:o.e("icon-arrow"),style:{transform:x.value?e.expandCloseIcon&&e.expandOpenIcon||e.collapseCloseIcon&&e.collapseOpenIcon&&r.props.collapse?"none":"rotateZ(180deg)":"none"}},{default:()=>ye(O.value)?q(n.appContext.components[O.value]):q(O.value)})],U=r.isMenuPopup?q(tl,{ref:m,visible:x.value,effect:"light",pure:!0,offset:B.value,showArrow:!1,persistent:L.value,popperClass:G.value,popperStyle:Y.value,placement:P.value,teleported:E.value,fallbackPlacements:g.value,transition:h.value,gpuAcceleration:!1},{content:()=>{var Z;return q("div",{class:[u.m(_.value),u.m("popup-container"),G.value],onMouseenter:ne=>k(ne,100),onMouseleave:()=>W(!0),onFocus:ne=>k(ne,100)},[q("ul",{class:[u.b(),u.m("popup"),u.m(`popup-${P.value}`)],style:V.value},[(Z=t.default)==null?void 0:Z.call(t)])])},default:()=>q("div",{class:o.e("title"),onClick:H},K)}):q(He,{},[q("div",{class:o.e("title"),ref:p,onClick:H},K),q(Xn,{},{default:()=>{var Z;return Fe(q("ul",{role:"menu",class:[u.b(),u.m("inline")],style:V.value},[(Z=t.default)==null?void 0:Z.call(t)]),[[dt,x.value]])}})]);return q("li",{class:[o.b(),o.is("active",C.value),o.is("opened",x.value),o.is("disabled",e.disabled)],role:"menuitem",ariaHaspopup:!0,ariaExpanded:x.value,onMouseenter:k,onMouseleave:()=>W(),onFocus:k},[U])}}});const Tr=ze({mode:{type:String,values:["horizontal","vertical"],default:"vertical"},defaultActive:{type:String,default:""},defaultOpeneds:{type:Re(Array),default:()=>At([])},uniqueOpened:Boolean,router:Boolean,menuTrigger:{type:String,values:["hover","click"],default:"hover"},collapse:Boolean,backgroundColor:String,textColor:String,activeTextColor:String,closeOnClickOutside:Boolean,collapseTransition:{type:Boolean,default:!0},ellipsis:{type:Boolean,default:!0},popperOffset:{type:Number,default:6},ellipsisIcon:{type:ht,default:()=>Ga},popperEffect:{type:Re(String),default:"dark"},popperClass:String,popperStyle:{type:Re([String,Object])},showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300},persistent:{type:Boolean,default:!0}}),bl=e=>Me(e)&&e.every(t=>ye(t)),Mr={close:(e,t)=>ye(e)&&bl(t),open:(e,t)=>ye(e)&&bl(t),select:(e,t,l,n)=>ye(e)&&bl(t)&&ct(l)&&(Te(n)||n instanceof Promise)},mn=64;var Rr=le({name:"ElMenu",props:Tr,emits:Mr,setup(e,{emit:t,slots:l,expose:n}){const a=Se(),s=a.appContext.config.globalProperties.$router,u=S(),o=S(),r=re("menu"),i=re("sub-menu");let c=mn;const f=S(-1),v=S(e.defaultOpeneds&&!e.collapse?e.defaultOpeneds.slice(0):[]),d=S(e.defaultActive),p=S({}),m=S({}),w=I(()=>e.mode==="horizontal"||e.mode==="vertical"&&e.collapse),P=()=>{const N=d.value&&p.value[d.value];if(!N||e.mode==="horizontal"||e.collapse)return;N.indexPath.forEach(H=>{const k=m.value[H];k&&O(H,k.indexPath)})},O=(N,$)=>{v.value.includes(N)||(e.uniqueOpened&&(v.value=v.value.filter(H=>$.includes(H))),v.value.push(N),t("open",N,$))},E=N=>{const $=v.value.indexOf(N);$!==-1&&v.value.splice($,1)},h=(N,$)=>{E(N),t("close",N,$)},g=({index:N,indexPath:$})=>{v.value.includes(N)?h(N,$):O(N,$)},x=N=>{(e.mode==="horizontal"||e.collapse)&&(v.value=[]);const{index:$,indexPath:H}=N;if(!(sn($)||sn(H)))if(e.router&&s){const k=N.route||$,W=s.push(k).then(R=>(R||(d.value=$),R));t("select",$,H,{index:$,indexPath:H,route:k},W)}else d.value=$,t("select",$,H,{index:$,indexPath:H})},C=N=>{var $;const H=p.value,k=H[N]||d.value&&H[d.value]||H[e.defaultActive];d.value=($=k?.index)!=null?$:N},_=N=>{const $=getComputedStyle(N),H=Number.parseInt($.marginLeft,10),k=Number.parseInt($.marginRight,10);return N.offsetWidth+H+k||0},L=()=>{if(!u.value)return-1;const N=Array.from(u.value.childNodes).filter(U=>U.nodeName!=="#comment"&&(U.nodeName!=="#text"||U.nodeValue)),$=getComputedStyle(u.value),H=Number.parseInt($.paddingLeft,10),k=Number.parseInt($.paddingRight,10),W=u.value.clientWidth-H-k;let R=0,K=0;return N.forEach((U,Z)=>{R+=_(U),R<=W-c&&(K=Z+1)}),K===N.length?-1:K},F=N=>m.value[N].indexPath,V=(N,$=33.34)=>{let H;return()=>{H&&clearTimeout(H),H=setTimeout(()=>{N()},$)}};let B=!0;const G=()=>{const N=Wo(o);if(N&&(c=_(N)||mn),f.value===L())return;const $=()=>{f.value=-1,$e(()=>{f.value=L()})};B?$():V($)(),B=!1};pe(()=>e.defaultActive,N=>{p.value[N]||(d.value=""),C(N)}),pe(()=>e.collapse,N=>{N&&(v.value=[])}),pe(p.value,P);let Y;Jt(()=>{e.mode==="horizontal"&&e.ellipsis?Y=wt(u,G).stop:Y?.()});const ie=S(!1);{const N=W=>{m.value[W.index]=W},$=W=>{delete m.value[W.index]};St(Ul,Qe({props:e,openedMenus:v,items:p,subMenus:m,activeIndex:d,isMenuPopup:w,addMenuItem:W=>{p.value[W.index]=W},removeMenuItem:W=>{delete p.value[W.index]},addSubMenu:N,removeSubMenu:$,openMenu:O,closeMenu:h,handleMenuItemClick:x,handleSubMenuClick:g})),St(`${Zt}${a.uid}`,{addSubMenu:N,removeSubMenu:$,mouseInChild:ie,level:0})}Ue(()=>{e.mode==="horizontal"&&new Sr(a.vnode.el,r.namespace.value)}),n({open:$=>{const{indexPath:H}=m.value[$];H.forEach(k=>O(k,H))},close:E,updateActiveIndex:C,handleResize:G});const J=la(e,0);return()=>{var N,$;let H=($=(N=l.default)==null?void 0:N.call(l))!=null?$:[];const k=[];if(e.mode==="horizontal"&&u.value){const K=$n(H).filter(ne=>ne?.shapeFlag!==8),U=f.value===-1?K:K.slice(0,f.value),Z=f.value===-1?[]:K.slice(f.value);Z?.length&&e.ellipsis&&(H=U,k.push(q(jl,{ref:o,index:"sub-menu-more",class:i.e("hide-arrow"),popperOffset:e.popperOffset},{title:()=>q(We,{class:i.e("icon-more")},{default:()=>q(e.ellipsisIcon)}),default:()=>Z})))}const W=e.closeOnClickOutside?[[So,()=>{v.value.length&&(ie.value||(v.value.forEach(K=>t("close",K,F(K))),v.value=[]))}]]:[],R=Fe(q("ul",{key:String(e.collapse),role:"menubar",ref:u,style:J.value,class:{[r.b()]:!0,[r.m(e.mode)]:!0,[r.m("collapse")]:e.collapse}},[...H,...k]),W);return e.collapseTransition&&e.mode==="vertical"?q(Er,()=>R):R}}});const Or=ze({index:{type:Re([String,null]),default:null},route:{type:Re([String,Object])},disabled:Boolean}),$r={click:e=>ye(e.index)&&Me(e.indexPath)},Tl="ElMenuItem",Pr=le({name:Tl}),Lr=le({...Pr,props:Or,emits:$r,setup(e,{expose:t,emit:l}){const n=e;gt(n.index)&&Vo();const a=Se(),s=_e(Ul),u=re("menu"),o=re("menu-item");s||Ze(Tl,"can not inject root menu");const{parentMenu:r,indexPath:i}=ta(a,qo(n,"index")),c=_e(`${Zt}${r.value.uid}`);c||Ze(Tl,"can not inject sub menu");const f=I(()=>n.index===s.activeIndex),v=Qe({index:n.index,indexPath:i,active:f}),d=()=>{n.disabled||(s.handleMenuItemClick({index:n.index,indexPath:i.value,route:n.route}),l("click",v))};return Ue(()=>{c.addSubMenu(v),s.addMenuItem(v)}),et(()=>{c.removeSubMenu(v),s.removeMenuItem(v)}),t({parentMenu:r,rootMenu:s,active:f,nsMenu:u,nsMenuItem:o,handleClick:d}),(p,m)=>(z(),te("li",{class:Q([y(o).b(),y(o).is("active",y(f)),y(o).is("disabled",p.disabled)]),role:"menuitem",tabindex:"-1",onClick:d},[y(r).type.name==="ElMenu"&&y(s).props.collapse&&p.$slots.title?(z(),de(y(tl),{key:0,effect:y(s).props.popperEffect,placement:"right","fallback-placements":["left"],"popper-class":y(s).props.popperClass,"popper-style":y(s).props.popperStyle,persistent:y(s).props.persistent,"focus-on-target":""},{content:A(()=>[ue(p.$slots,"title")]),default:A(()=>[D("div",{class:Q(y(u).be("tooltip","trigger"))},[ue(p.$slots,"default")],2)]),_:3},8,["effect","popper-class","popper-style","persistent"])):(z(),te(He,{key:1},[ue(p.$slots,"default"),ue(p.$slots,"title")],64))],2))}});var na=xe(Lr,[["__file","menu-item.vue"]]);const Ar={title:String},Ir=le({name:"ElMenuItemGroup"}),Fr=le({...Ir,props:Ar,setup(e){const t=re("menu-item-group");return(l,n)=>(z(),te("li",{class:Q(y(t).b())},[D("div",{class:Q(y(t).e("title"))},[l.$slots.title?ue(l.$slots,"title",{key:1}):(z(),te(He,{key:0},[ce(be(l.title),1)],64))],2),D("ul",null,[ue(l.$slots,"default")])],2))}});var aa=xe(Fr,[["__file","menu-item-group.vue"]]);const Br=st(Rr,{MenuItem:na,MenuItemGroup:aa,SubMenu:jl}),Hr=Ge(na);Ge(aa);Ge(jl);const Wr="horizontal",Vr="vertical",zr={[Wr]:"deltaX",[Vr]:"deltaY"},Kr=({atEndEdge:e,atStartEdge:t,layout:l},n)=>{let a,s=0;const u=r=>r<0&&t.value||r>0&&e.value;return{hasReachedEdge:u,onWheel:r=>{ks(a);const i=r[zr[l.value]];u(s)&&u(s+i)||(s+=i,zo()||r.preventDefault(),a=qn(()=>{n(s),s=0}))}}},yl=function(e){var t;return(t=e.target)==null?void 0:t.closest("td")},Dr=function(e,t,l,n,a){if(!t&&!n&&(!a||Me(a)&&!a.length))return e;ye(l)?l=l==="descending"?-1:1:l=l&&l<0?-1:1;const s=n?null:function(o,r){return a?Un(Gt(a),i=>ye(i)?rn(o,i):i(o,r,e)):(t!=="$key"&&ct(o)&&"$value"in o&&(o=o.$value),[ct(o)?t?rn(o,t):null:o])},u=function(o,r){var i,c,f,v,d,p;if(n)return n(o.value,r.value);for(let m=0,w=(c=(i=o.key)==null?void 0:i.length)!=null?c:0;m((p=r.key)==null?void 0:p[m]))return 1}return 0};return e.map((o,r)=>({value:o,index:r,key:s?s(o,r):null})).sort((o,r)=>{let i=u(o,r);return i||(i=o.index-r.index),i*+l}).map(o=>o.value)},oa=function(e,t){let l=null;return e.columns.forEach(n=>{n.id===t&&(l=n)}),l},Ur=function(e,t){let l=null;for(let n=0;n{if(!e)throw new Error("Row is required when get row identity");if(ye(t)){if(!t.includes("."))return`${e[t]}`;const l=t.split(".");let n=e;for(const a of l)n=n[a];return`${n}`}else if(Be(t))return t.call(null,e);return""},yt=function(e,t,l=!1,n="children"){const a=e||[],s={};return a.forEach((u,o)=>{if(s[Ee(u,t)]={row:u,index:o},l){const r=u[n];Me(r)&&Object.assign(s,yt(r,t,!0,n))}}),s};function jr(e,t){const l={};let n;for(n in e)l[n]=e[n];for(n in t)if(bt(t,n)){const a=t[n];Te(a)||(l[n]=a)}return l}function ql(e){return e===""||Te(e)||(e=Number.parseInt(e,10),Number.isNaN(e)&&(e="")),e}function sa(e){return e===""||Te(e)||(e=ql(e),Number.isNaN(e)&&(e=80)),e}function qr(e){return at(e)?e:ye(e)?/^\d+(?:px)?$/.test(e)?Number.parseInt(e,10):e:null}function Yr(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,l)=>(...n)=>t(l(...n)))}function el(e,t,l,n,a,s,u){let o=s??0,r=!1;const c=(()=>{if(!u)return e.indexOf(t);const m=Ee(t,u);return e.findIndex(w=>Ee(w,u)===m)})(),f=c!==-1,v=a?.call(null,t,o),d=m=>{m==="add"?e.push(t):e.splice(c,1),r=!0},p=m=>{let w=0;const P=n?.children&&m[n.children];return P&&Me(P)&&(w+=P.length,P.forEach(O=>{w+=p(O)})),w};return(!a||v)&&(lt(l)?l&&!f?d("add"):!l&&f&&d("remove"):d(f?"remove":"add")),!n?.checkStrictly&&n?.children&&Me(t[n.children])&&t[n.children].forEach(m=>{const w=el(e,m,l??!f,n,a,o+1,u);o+=p(m)+1,w&&(r=w)}),r}function Xr(e,t,l="children",n="hasChildren",a=!1){const s=o=>!(Me(o)&&o.length);function u(o,r,i){t(o,r,i),r.forEach(c=>{if(c[n]&&a){t(c,null,i+1);return}const f=c[l];s(f)||u(c,f,i+1)})}e.forEach(o=>{if(o[n]&&a){t(o,null,0);return}const r=o[l];s(r)||u(o,r,0)})}const Gr=(e,t,l,n)=>{const a={strategy:"fixed",...e.popperOptions},s=Be(n?.tooltipFormatter)?n.tooltipFormatter({row:l,column:n,cellValue:On(l,n.property).value}):void 0;return Vl(s)?{slotContent:s,content:null,...e,popperOptions:a}:{slotContent:null,content:s??t,...e,popperOptions:a}};let Ne=null;function Jr(e,t,l,n,a,s){var u;const o=Gr(e,t,l,n),r={...o,slotContent:void 0};if(Ne?.trigger===a){const p=(u=Ne.vm)==null?void 0:u.component;jn(p?.props,r),p&&o.slotContent&&(p.slots.content=()=>[o.slotContent]);return}Ne?.();const i=s?.refs.tableWrapper,c=i?.dataset.prefix,f=M(tl,{virtualTriggering:!0,virtualRef:a,appendTo:i,placement:"top",transition:"none",offset:0,hideAfter:0,...r},o.slotContent?{content:()=>o.slotContent}:void 0);f.appContext={...s.appContext,...s};const v=document.createElement("div");fn(f,v),f.component.exposed.onOpen();const d=i?.querySelector(`.${c}-scrollbar__wrap`);Ne=()=>{var p,m;(m=(p=f.component)==null?void 0:p.exposed)!=null&&m.onClose&&f.component.exposed.onClose(),fn(null,v);const w=Ne;d?.removeEventListener("scroll",w),w.trigger=void 0,w.vm=void 0,Ne=null},Ne.trigger=a??void 0,Ne.vm=f,d?.addEventListener("scroll",Ne)}function ra(e){return e.children?Un(e.children,ra):[e]}function gn(e,t){return e+t.colSpan}const ia=(e,t,l,n)=>{let a=0,s=e;const u=l.states.columns.value;if(n){const r=ra(n[e]);a=u.slice(0,u.indexOf(r[0])).reduce(gn,0),s=a+r.reduce(gn,0)-1}else a=e;let o;switch(t){case"left":s=u.length-l.states.rightFixedLeafColumnsLength.value&&(o="right");break;default:s=u.length-l.states.rightFixedLeafColumnsLength.value&&(o="right")}return o?{direction:o,start:a,after:s}:{}},Yl=(e,t,l,n,a,s=0)=>{const u=[],{direction:o,start:r,after:i}=ia(t,l,n,a);if(o){const c=o==="left";u.push(`${e}-fixed-column--${o}`),c&&i+s===n.states.fixedLeafColumnsLength.value-1?u.push("is-last-column"):!c&&r-s===n.states.columns.value.length-n.states.rightFixedLeafColumnsLength.value&&u.push("is-first-column")}return u};function bn(e,t){return e+(Bt(t.realWidth)||Number.isNaN(t.realWidth)?Number(t.width):t.realWidth)}const Xl=(e,t,l,n)=>{const{direction:a,start:s=0,after:u=0}=ia(e,t,l,n);if(!a)return;const o={},r=a==="left",i=l.states.columns.value;return r?o.left=i.slice(0,s).reduce(bn,0):o.right=i.slice(u+1).reverse().reduce(bn,0),o},_t=(e,t)=>{e&&(Number.isNaN(e[t])||(e[t]=`${e[t]}px`))};function ua(e){return e.some(t=>Vl(t)?!(t.type===Bn||t.type===He&&!ua(t.children)):!0)?e:null}function Qr(e){const t=Se(),l=S(!1),n=S([]);return{updateExpandRows:()=>{const r=e.data.value||[],i=e.rowKey.value;if(l.value)n.value=r.slice();else if(i){const c=yt(n.value,i);n.value=r.reduce((f,v)=>{const d=Ee(v,i);return c[d]&&f.push(v),f},[])}else n.value=[]},toggleRowExpansion:(r,i)=>{el(n.value,r,i,void 0,void 0,void 0,e.rowKey.value)&&t.emit("expand-change",r,n.value.slice())},setExpandRowKeys:r=>{t.store.assertRowKey();const i=e.data.value||[],c=e.rowKey.value,f=yt(i,c);n.value=r.reduce((v,d)=>{const p=f[d];return p&&v.push(p.row),v},[])},isRowExpanded:r=>{const i=e.rowKey.value;return i?!!yt(n.value,i)[Ee(r,i)]:n.value.includes(r)},states:{expandRows:n,defaultExpandAll:l}}}function Zr(e){const t=Se(),l=S(null),n=S(null),a=i=>{t.store.assertRowKey(),l.value=i,u(i)},s=()=>{l.value=null},u=i=>{var c;const{data:f,rowKey:v}=e;let d=null;v.value&&(d=(c=(y(f)||[]).find(p=>Ee(p,v.value)===i))!=null?c:null),n.value=d??null,t.emit("current-change",n.value,null)};return{setCurrentRowKey:a,restoreCurrentRowKey:s,setCurrentRowByKey:u,updateCurrentRow:i=>{const c=n.value;if(i&&i!==c){n.value=i,t.emit("current-change",n.value,c);return}!i&&c&&(n.value=null,t.emit("current-change",null,c))},updateCurrentRowData:()=>{const i=e.rowKey.value,c=e.data.value||[],f=n.value;if(f&&!c.includes(f)){if(i){const v=Ee(f,i);u(v)}else n.value=null;Bt(n.value)&&t.emit("current-change",null,f)}else l.value&&(u(l.value),s())},states:{_currentRowKey:l,currentRow:n}}}function ei(e){const t=S([]),l=S({}),n=S(16),a=S(!1),s=S({}),u=S("hasChildren"),o=S("children"),r=S(!1),i=Se(),c=I(()=>{if(!e.rowKey.value)return{};const h=e.data.value||[];return v(h)}),f=I(()=>{const h=e.rowKey.value,g=Object.keys(s.value),x={};return g.length&&g.forEach(C=>{if(s.value[C].length){const _={children:[]};s.value[C].forEach(L=>{const F=Ee(L,h);_.children.push(F),L[u.value]&&!x[F]&&(x[F]={children:[]})}),x[C]=_}}),x}),v=h=>{const g=e.rowKey.value,x={};return Xr(h,(C,_,L)=>{const F=Ee(C,g);Me(_)?x[F]={children:_.map(V=>Ee(V,g)),level:L}:a.value&&(x[F]={children:[],lazy:!0,level:L})},o.value,u.value,a.value),x},d=(h=!1,g)=>{var x,C;g||(g=(x=i.store)==null?void 0:x.states.defaultExpandAll.value);const _=c.value,L=f.value,F=Object.keys(_),V={};if(F.length){const B=y(l),G=[],Y=(J,N)=>{if(h)return t.value?g||t.value.includes(N):!!(g||J?.expanded);{const $=g||t.value&&t.value.includes(N);return!!(J?.expanded||$)}};F.forEach(J=>{const N=B[J],$={..._[J]};if($.expanded=Y(N,J),$.lazy){const{loaded:H=!1,loading:k=!1}=N||{};$.loaded=!!H,$.loading=!!k,G.push(J)}V[J]=$});const ie=Object.keys(L);a.value&&ie.length&&G.length&&ie.forEach(J=>{var N;const $=B[J],H=L[J].children;if(G.includes(J)){if(((N=V[J].children)==null?void 0:N.length)!==0)throw new Error("[ElTable]children must be an empty array.");V[J].children=H}else{const{loaded:k=!1,loading:W=!1}=$||{};V[J]={lazy:!0,loaded:!!k,loading:!!W,expanded:Y($,J),children:H,level:void 0}}})}l.value=V,(C=i.store)==null||C.updateTableScrollY()};pe(()=>t.value,()=>{d(!0)}),pe(()=>c.value,()=>{d()}),pe(()=>f.value,()=>{d()});const p=h=>{t.value=h,d()},m=h=>a.value&&h&&"loaded"in h&&!h.loaded,w=(h,g)=>{i.store.assertRowKey();const x=e.rowKey.value,C=Ee(h,x),_=C&&l.value[C];if(C&&_&&"expanded"in _){const L=_.expanded;g=Te(g)?!_.expanded:g,l.value[C].expanded=g,L!==g&&i.emit("expand-change",h,g),g&&m(_)&&O(h,C,_),i.store.updateTableScrollY()}},P=h=>{i.store.assertRowKey();const g=e.rowKey.value,x=Ee(h,g),C=l.value[x];m(C)?O(h,x,C):w(h,void 0)},O=(h,g,x)=>{const{load:C}=i.props;C&&!l.value[g].loaded&&(l.value[g].loading=!0,C(h,x,_=>{if(!Me(_))throw new TypeError("[ElTable] data must be an array");l.value[g].loading=!1,l.value[g].loaded=!0,l.value[g].expanded=!0,_.length&&(s.value[g]=_),i.emit("expand-change",h,!0)}))};return{loadData:O,loadOrToggle:P,toggleTreeExpansion:w,updateTreeExpandKeys:p,updateTreeData:d,updateKeyChildren:(h,g)=>{const{lazy:x,rowKey:C}=i.props;if(x){if(!C)throw new Error("[Table] rowKey is required in updateKeyChild");s.value[h]&&(s.value[h]=g)}},normalize:v,states:{expandRowKeys:t,treeData:l,indent:n,lazy:a,lazyTreeNodeMap:s,lazyColumnIdentifier:u,childrenColumnName:o,checkStrictly:r}}}const ti=(e,t)=>{const l=t.sortingColumn;return!l||ye(l.sortable)?e:Dr(e,t.sortProp,t.sortOrder,l.sortMethod,l.sortBy)},Ut=e=>{const t=[];return e.forEach(l=>{l.children&&l.children.length>0?t.push.apply(t,Ut(l.children)):t.push(l)}),t};function li(){var e;const t=Se(),{size:l}=Hn((e=t.proxy)==null?void 0:e.$props),n=S(null),a=S([]),s=S([]),u=S(!1),o=S([]),r=S([]),i=S([]),c=S([]),f=S([]),v=S([]),d=S([]),p=S([]),m=[],w=S(0),P=S(0),O=S(0),E=S(!1),h=S([]),g=S(!1),x=S(!1),C=S(null),_=S({}),L=S(null),F=S(null),V=S(null),B=S(null),G=S(null),Y=I(()=>n.value?yt(h.value,n.value):void 0);pe(a,()=>{var j;t.state&&($(!1),t.props.tableLayout==="auto"&&((j=t.refs.tableHeaderRef)==null||j.updateFixedColumnStyle()))},{deep:!0});const ie=()=>{if(!n.value)throw new Error("[ElTable] prop row-key is required")},J=j=>{var ae;(ae=j.children)==null||ae.forEach(se=>{se.fixed=j.fixed,J(se)})},N=()=>{o.value.forEach(oe=>{J(oe)}),c.value=o.value.filter(oe=>[!0,"left"].includes(oe.fixed));const j=o.value.find(oe=>oe.type==="selection");let ae;j&&j.fixed!=="right"&&!c.value.includes(j)&&o.value.indexOf(j)===0&&c.value.length&&(c.value.unshift(j),ae=!0),f.value=o.value.filter(oe=>oe.fixed==="right");const se=o.value.filter(oe=>(ae?oe.type!=="selection":!0)&&!oe.fixed);r.value=Array.from(c.value).concat(se).concat(f.value);const T=Ut(se),b=Ut(c.value),ee=Ut(f.value);w.value=T.length,P.value=b.length,O.value=ee.length,i.value=Array.from(b).concat(T).concat(ee),u.value=c.value.length>0||f.value.length>0},$=(j,ae=!1)=>{j&&N(),ae?t.state.doLayout():t.state.debouncedUpdateLayout()},H=j=>Y.value?!!Y.value[Ee(j,n.value)]:h.value.includes(j),k=()=>{E.value=!1;const j=h.value;h.value=[],j.length&&t.emit("selection-change",[])},W=()=>{var j,ae;let se;if(n.value){se=[];const T=(ae=(j=t?.store)==null?void 0:j.states)==null?void 0:ae.childrenColumnName.value,b=yt(a.value,n.value,!0,T);for(const ee in Y.value)bt(Y.value,ee)&&!b[ee]&&se.push(Y.value[ee].row)}else se=h.value.filter(T=>!a.value.includes(T));if(se.length){const T=h.value.filter(b=>!se.includes(b));h.value=T,t.emit("selection-change",T.slice())}},R=()=>(h.value||[]).slice(),K=(j,ae,se=!0,T=!1)=>{var b,ee,oe,we;const Ae={children:(ee=(b=t?.store)==null?void 0:b.states)==null?void 0:ee.childrenColumnName.value,checkStrictly:(we=(oe=t?.store)==null?void 0:oe.states)==null?void 0:we.checkStrictly.value};if(el(h.value,j,ae,Ae,T?void 0:C.value,a.value.indexOf(j),n.value)){const qe=(h.value||[]).slice();se&&t.emit("select",qe,j),t.emit("selection-change",qe)}},U=()=>{var j,ae;const se=x.value?!E.value:!(E.value||h.value.length);E.value=se;let T=!1,b=0;const ee=(ae=(j=t?.store)==null?void 0:j.states)==null?void 0:ae.rowKey.value,{childrenColumnName:oe}=t.store.states,we={children:oe.value,checkStrictly:!1};a.value.forEach((Ae,ge)=>{const qe=ge+b;el(h.value,Ae,se,we,C.value,qe,ee)&&(T=!0),b+=ne(Ee(Ae,ee))}),T&&t.emit("selection-change",h.value?h.value.slice():[]),t.emit("select-all",(h.value||[]).slice())},Z=()=>{var j;if(((j=a.value)==null?void 0:j.length)===0){E.value=!1;return}const{childrenColumnName:ae}=t.store.states;let se=0,T=0;const b=oe=>{var we;for(const Ae of oe){const ge=C.value&&C.value.call(null,Ae,se);if(H(Ae))T++;else if(!C.value||ge)return!1;if(se++,(we=Ae[ae.value])!=null&&we.length&&!b(Ae[ae.value]))return!1}return!0},ee=b(a.value||[]);E.value=T===0?!1:ee},ne=j=>{var ae;if(!t||!t.store)return 0;const{treeData:se}=t.store.states;let T=0;const b=(ae=se.value[j])==null?void 0:ae.children;return b&&(T+=b.length,b.forEach(ee=>{T+=ne(ee)})),T},me=(j,ae)=>{const se={};return Gt(j).forEach(T=>{_.value[T.id]=ae,se[T.columnKey||T.id]=ae}),se},Ce=(j,ae,se)=>{F.value&&F.value!==j&&(F.value.order=null),F.value=j,V.value=ae,B.value=se},ke=()=>{let j=y(s);Object.keys(_.value).forEach(ae=>{const se=_.value[ae];if(!se||se.length===0)return;const T=oa({columns:i.value},ae);T&&T.filterMethod&&(j=j.filter(b=>se.some(ee=>T.filterMethod.call(null,ee,b,T))))}),L.value=j},Pe=()=>{var j;a.value=ti((j=L.value)!=null?j:[],{sortingColumn:F.value,sortProp:V.value,sortOrder:B.value})},Ke=(j=void 0)=>{j?.filter||ke(),Pe()},tt=j=>{const{tableHeaderRef:ae}=t.refs;if(!ae)return;const se=Object.assign({},ae.filterPanels),T=Object.keys(se);if(T.length)if(ye(j)&&(j=[j]),Me(j)){const b=j.map(ee=>Ur({columns:i.value},ee));T.forEach(ee=>{const oe=b.find(we=>we.id===ee);oe&&(oe.filteredValue=[])}),t.store.commit("filterChange",{column:b,values:[],silent:!0,multi:!0})}else T.forEach(b=>{const ee=i.value.find(oe=>oe.id===b);ee&&(ee.filteredValue=[])}),_.value={},t.store.commit("filterChange",{column:{},values:[],silent:!0})},xt=()=>{F.value&&(Ce(null,null,null),t.store.commit("changeSortCondition",{silent:!0}))},{setExpandRowKeys:Et,toggleRowExpansion:ft,updateExpandRows:Le,states:vt,isRowExpanded:Ht}=Qr({data:a,rowKey:n}),{updateTreeExpandKeys:sl,toggleTreeExpansion:rl,updateTreeData:il,updateKeyChildren:kt,loadOrToggle:ul,states:Wt}=ei({data:a,rowKey:n}),{updateCurrentRowData:dl,updateCurrentRow:cl,setCurrentRowKey:fl,states:vl}=Zr({data:a,rowKey:n});return{assertRowKey:ie,updateColumns:N,scheduleLayout:$,isSelected:H,clearSelection:k,cleanSelection:W,getSelectionRows:R,toggleRowSelection:K,_toggleAllSelection:U,toggleAllSelection:null,updateAllSelected:Z,updateFilters:me,updateCurrentRow:cl,updateSort:Ce,execFilter:ke,execSort:Pe,execQuery:Ke,clearFilter:tt,clearSort:xt,toggleRowExpansion:ft,setExpandRowKeysAdapter:j=>{Et(j),sl(j)},setCurrentRowKey:fl,toggleRowExpansionAdapter:(j,ae)=>{i.value.some(({type:T})=>T==="expand")?ft(j,ae):rl(j,ae)},isRowExpanded:Ht,updateExpandRows:Le,updateCurrentRowData:dl,loadOrToggle:ul,updateTreeData:il,updateKeyChildren:kt,states:{tableSize:l,rowKey:n,data:a,_data:s,isComplex:u,_columns:o,originColumns:r,columns:i,fixedColumns:c,rightFixedColumns:f,leafColumns:v,fixedLeafColumns:d,rightFixedLeafColumns:p,updateOrderFns:m,leafColumnsLength:w,fixedLeafColumnsLength:P,rightFixedLeafColumnsLength:O,isAllSelected:E,selection:h,reserveSelection:g,selectOnIndeterminate:x,selectable:C,filters:_,filteredData:L,sortingColumn:F,sortProp:V,sortOrder:B,hoverRow:G,...vt,...Wt,...vl}}}function Ml(e,t){return e.map(l=>{var n;return l.id===t.id?t:((n=l.children)!=null&&n.length&&(l.children=Ml(l.children,t)),l)})}function Rl(e){e.forEach(t=>{var l,n;t.no=(l=t.getColumnIndex)==null?void 0:l.call(t),(n=t.children)!=null&&n.length&&Rl(t.children)}),e.sort((t,l)=>t.no-l.no)}function ni(){const e=Se(),t=li(),l=re("table"),{t:n}=Ft();return{ns:l,t:n,...t,mutations:{setData(o,r){const i=y(o._data)!==r;o.data.value=r,o._data.value=r,e.store.execQuery(),e.store.updateCurrentRowData(),e.store.updateExpandRows(),e.store.updateTreeData(e.store.states.defaultExpandAll.value),y(o.reserveSelection)?e.store.assertRowKey():i?e.store.clearSelection():e.store.cleanSelection(),e.store.updateAllSelected(),e.$ready&&e.store.scheduleLayout()},insertColumn(o,r,i,c){var f;const v=y(o._columns);let d=[];i?(i&&!i.children&&(i.children=[]),(f=i.children)==null||f.push(r),d=Ml(v,i)):(v.push(r),d=v),Rl(d),o._columns.value=d,o.updateOrderFns.push(c),r.type==="selection"&&(o.selectable.value=r.selectable,o.reserveSelection.value=r.reserveSelection),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},updateColumnOrder(o,r){var i;((i=r.getColumnIndex)==null?void 0:i.call(r))!==r.no&&(Rl(o._columns.value),e.$ready&&e.store.updateColumns())},removeColumn(o,r,i,c){var f;const v=y(o._columns)||[];if(i)(f=i.children)==null||f.splice(i.children.findIndex(p=>p.id===r.id),1),$e(()=>{var p;((p=i.children)==null?void 0:p.length)===0&&delete i.children}),o._columns.value=Ml(v,i);else{const p=v.indexOf(r);p>-1&&(v.splice(p,1),o._columns.value=v)}const d=o.updateOrderFns.indexOf(c);d>-1&&o.updateOrderFns.splice(d,1),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},sort(o,r){const{prop:i,order:c,init:f}=r;if(i){const v=y(o.columns).find(d=>d.property===i);v&&(v.order=c,e.store.updateSort(v,i,c),e.store.commit("changeSortCondition",{init:f}))}},changeSortCondition(o,r){const{sortingColumn:i,sortProp:c,sortOrder:f}=o,v=y(i),d=y(c),p=y(f);Bt(p)&&(o.sortingColumn.value=null,o.sortProp.value=null);const m={filter:!0};e.store.execQuery(m),(!r||!(r.silent||r.init))&&e.emit("sort-change",{column:v,prop:d,order:p}),e.store.updateTableScrollY()},filterChange(o,r){const{column:i,values:c,silent:f}=r,v=e.store.updateFilters(i,c);e.store.execQuery(),f||e.emit("filter-change",v),e.store.updateTableScrollY()},toggleAllSelection(){var o,r;(r=(o=e.store).toggleAllSelection)==null||r.call(o)},rowSelectedChanged(o,r){e.store.toggleRowSelection(r),e.store.updateAllSelected()},setHoverRow(o,r){o.hoverRow.value=r},setCurrentRow(o,r){e.store.updateCurrentRow(r)}},commit:function(o,...r){const i=e.store.mutations;if(i[o])i[o].apply(e,[e.store.states,...r]);else throw new Error(`Action not found: ${o}`)},updateTableScrollY:function(){$e(()=>e.layout.updateScrollY.apply(e.layout))}}}const Gl={rowKey:"rowKey",defaultExpandAll:"defaultExpandAll",selectOnIndeterminate:"selectOnIndeterminate",indent:"indent",lazy:"lazy",data:"data","treeProps.hasChildren":{key:"lazyColumnIdentifier",default:"hasChildren"},"treeProps.children":{key:"childrenColumnName",default:"children"},"treeProps.checkStrictly":{key:"checkStrictly",default:!1}};function ai(e,t){if(!e)throw new Error("Table is required.");const l=ni();return l.toggleAllSelection=Qt(l._toggleAllSelection,10),Object.keys(Gl).forEach(n=>{da(ca(t,n),n,l)}),oi(l,t),l}function oi(e,t){Object.keys(Gl).forEach(l=>{pe(()=>ca(t,l),n=>{da(n,l,e)})})}function da(e,t,l){let n=e,a=Gl[t];ct(a)&&(n=n||a.default,a=a.key),l.states[a].value=n}function ca(e,t){if(t.includes(".")){const l=t.split(".");let n=e;return l.forEach(a=>{n=n[a]}),n}else return e[t]}class si{constructor(t){this.observers=[],this.table=null,this.store=null,this.columns=[],this.fit=!0,this.showHeader=!0,this.height=S(null),this.scrollX=S(!1),this.scrollY=S(!1),this.bodyWidth=S(null),this.fixedWidth=S(null),this.rightFixedWidth=S(null),this.gutterWidth=0;for(const l in t)bt(t,l)&&(Wn(this[l])?this[l].value=t[l]:this[l]=t[l]);if(!this.table)throw new Error("Table is required for Table Layout");if(!this.store)throw new Error("Store is required for Table Layout")}updateScrollY(){const t=this.height.value;if(Bt(t))return!1;const l=this.table.refs.scrollBarRef;if(this.table.vnode.el&&l?.wrapRef){let n=!0;const a=this.scrollY.value;return n=l.wrapRef.scrollHeight>l.wrapRef.clientHeight,this.scrollY.value=n,a!==n}return!1}setHeight(t,l="height"){if(!ot)return;const n=this.table.vnode.el;if(t=qr(t),this.height.value=Number(t),!n&&(t||t===0)){$e(()=>this.setHeight(t,l));return}n&&at(t)?(n.style[l]=`${t}px`,this.updateElsHeight()):n&&ye(t)&&(n.style[l]=t,this.updateElsHeight())}setMaxHeight(t){this.setHeight(t,"max-height")}getFlattenColumns(){const t=[];return this.table.store.states.columns.value.forEach(n=>{n.isColumnGroup?t.push.apply(t,n.columns):t.push(n)}),t}updateElsHeight(){this.updateScrollY(),this.notifyObservers("scrollable")}headerDisplayNone(t){if(!t)return!0;let l=t;for(;l.tagName!=="DIV";){if(getComputedStyle(l).display==="none")return!0;l=l.parentElement}return!1}updateColumnsWidth(){var t;if(!ot)return;const l=this.fit,n=(t=this.table.vnode.el)==null?void 0:t.clientWidth;let a=0;const s=this.getFlattenColumns(),u=s.filter(i=>!at(i.width));if(s.forEach(i=>{at(i.width)&&i.realWidth&&(i.realWidth=null)}),u.length>0&&l){if(s.forEach(i=>{a+=Number(i.width||i.minWidth||80)}),a<=n){this.scrollX.value=!1;const i=n-a;if(u.length===1)u[0].realWidth=Number(u[0].minWidth||80)+i;else{const c=u.reduce((d,p)=>d+Number(p.minWidth||80),0),f=i/c;let v=0;u.forEach((d,p)=>{if(p===0)return;const m=Math.floor(Number(d.minWidth||80)*f);v+=m,d.realWidth=Number(d.minWidth||80)+m}),u[0].realWidth=Number(u[0].minWidth||80)+i-v}}else this.scrollX.value=!0,u.forEach(i=>{i.realWidth=Number(i.minWidth)});this.bodyWidth.value=Math.max(a,n),this.table.state.resizeState.value.width=this.bodyWidth.value}else s.forEach(i=>{!i.width&&!i.minWidth?i.realWidth=80:i.realWidth=Number(i.width||i.minWidth),a+=i.realWidth}),this.scrollX.value=a>n,this.bodyWidth.value=a;const o=this.store.states.fixedColumns.value;if(o.length>0){let i=0;o.forEach(c=>{i+=Number(c.realWidth||c.width)}),this.fixedWidth.value=i}const r=this.store.states.rightFixedColumns.value;if(r.length>0){let i=0;r.forEach(c=>{i+=Number(c.realWidth||c.width)}),this.rightFixedWidth.value=i}this.notifyObservers("columns")}addObserver(t){this.observers.push(t)}removeObserver(t){const l=this.observers.indexOf(t);l!==-1&&this.observers.splice(l,1)}notifyObservers(t){this.observers.forEach(n=>{var a,s;switch(t){case"columns":(a=n.state)==null||a.onColumnsChange(this);break;case"scrollable":(s=n.state)==null||s.onScrollableChange(this);break;default:throw new Error(`Table Layout don't have event ${t}.`)}})}}const ri=le({name:"ElTableFilterPanel",components:{ElCheckbox:Lt,ElCheckboxGroup:co,ElScrollbar:Pn,ElTooltip:tl,ElIcon:We,ArrowDown:Rn,ArrowUp:Ja},props:{placement:{type:String,default:"bottom-start"},store:{type:Object},column:{type:Object},upDataColumn:{type:Function},appendTo:_o.appendTo},setup(e){const t=Se(),{t:l}=Ft(),n=re("table-filter"),a=t?.parent;e.column&&!a.filterPanels.value[e.column.id]&&(a.filterPanels.value[e.column.id]=t);const s=S(null),u=S(null),o=S(0),r=I(()=>e.column&&e.column.filters),i=I(()=>e.column&&e.column.filterClassName?`${n.b()} ${e.column.filterClassName}`:n.b()),c=I({get:()=>{var C;return(((C=e.column)==null?void 0:C.filteredValue)||[])[0]},set:C=>{f.value&&(gt(C)?f.value.splice(0,1):f.value.splice(0,1,C))}}),f=I({get(){return e.column?e.column.filteredValue||[]:[]},set(C){var _;e.column&&((_=e.upDataColumn)==null||_.call(e,"filteredValue",C))}}),v=I(()=>e.column?e.column.filterMultiple:!0),d=C=>C.value===c.value,p=()=>{var C;(C=s.value)==null||C.onClose()},m=()=>{O(f.value),p()},w=()=>{f.value=[],O(f.value),p()},P=(C,_)=>{c.value=C,o.value=_,gt(C)?O([]):O(f.value),p()},O=C=>{var _,L;(_=e.store)==null||_.commit("filterChange",{column:e.column,values:C}),(L=e.store)==null||L.updateAllSelected()},E=()=>{var C,_;(C=u.value)==null||C.focus(),!v.value&&g(),e.column&&((_=e.upDataColumn)==null||_.call(e,"filterOpened",!0))},h=()=>{var C;e.column&&((C=e.upDataColumn)==null||C.call(e,"filterOpened",!1))},g=()=>{if(gt(c)){o.value=0;return}const C=(r.value||[]).findIndex(_=>_.value===c.value);o.value=C>=0?C+1:0};return{multiple:v,filterClassName:i,filteredValue:f,filterValue:c,filters:r,handleConfirm:m,handleReset:w,handleSelect:P,isPropAbsent:gt,isActive:d,t:l,ns:n,tooltipRef:s,rootRef:u,checkedIndex:o,handleShowTooltip:E,handleHideTooltip:h,handleKeydown:C=>{var _,L;const F=Ct(C),V=(r.value?r.value.length:0)+1;let B=o.value,G=!0;switch(F){case ve.down:case ve.right:B=(B+1)%V;break;case ve.up:case ve.left:B=(B-1+V)%V;break;case ve.tab:p(),G=!1;break;case ve.enter:case ve.space:if(B===0)P(null,0);else{const Y=(r.value||[])[B-1];Y.value&&P(Y.value,B)}break;default:G=!1;break}G&&C.preventDefault(),o.value=B,(L=(_=u.value)==null?void 0:_.querySelector(`.${n.e("list-item")}:nth-child(${B+1})`))==null||L.focus()}}}});function ii(e,t,l,n,a,s){const u=Ie("el-checkbox"),o=Ie("el-checkbox-group"),r=Ie("el-scrollbar"),i=Ie("arrow-up"),c=Ie("arrow-down"),f=Ie("el-icon"),v=Ie("el-tooltip");return z(),de(v,{ref:"tooltipRef",offset:0,placement:e.placement,"show-arrow":!1,trigger:"click",role:"dialog",teleported:"",effect:"light",pure:"",loop:"","popper-class":e.filterClassName,persistent:"","append-to":e.appendTo,onShow:e.handleShowTooltip,onHide:e.handleHideTooltip},{content:A(()=>[e.multiple?(z(),te("div",{key:0,ref:"rootRef",tabindex:"-1",class:Q(e.ns.e("multiple"))},[D("div",{class:Q(e.ns.e("content"))},[M(r,{"wrap-class":e.ns.e("wrap")},{default:A(()=>[M(o,{modelValue:e.filteredValue,"onUpdate:modelValue":d=>e.filteredValue=d,class:Q(e.ns.e("checkbox-group"))},{default:A(()=>[(z(!0),te(He,null,Pt(e.filters,d=>(z(),de(u,{key:d.value,value:d.value},{default:A(()=>[ce(be(d.text),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue","onUpdate:modelValue","class"])]),_:1},8,["wrap-class"])],2),D("div",{class:Q(e.ns.e("bottom"))},[D("button",{class:Q(e.ns.is("disabled",e.filteredValue.length===0)),disabled:e.filteredValue.length===0,type:"button",onClick:e.handleConfirm},be(e.t("el.table.confirmFilter")),11,["disabled","onClick"]),D("button",{type:"button",onClick:e.handleReset},be(e.t("el.table.resetFilter")),9,["onClick"])],2)],2)):(z(),te("ul",{key:1,ref:"rootRef",tabindex:"-1",role:"radiogroup",class:Q(e.ns.e("list")),onKeydown:e.handleKeydown},[D("li",{role:"radio",class:Q([e.ns.e("list-item"),e.ns.is("active",e.isPropAbsent(e.filterValue))]),tabindex:e.checkedIndex===0?0:-1,"aria-checked":e.isPropAbsent(e.filterValue),onClick:d=>e.handleSelect(null,0)},be(e.t("el.table.clearFilter")),11,["tabindex","aria-checked","onClick"]),(z(!0),te(He,null,Pt(e.filters,(d,p)=>(z(),te("li",{key:d.value,role:"radio",class:Q([e.ns.e("list-item"),e.ns.is("active",e.isActive(d))]),tabindex:e.checkedIndex===p+1?0:-1,"aria-checked":e.isActive(d),onClick:m=>e.handleSelect(d.value,p+1)},be(d.text),11,["tabindex","aria-checked","onClick"]))),128))],42,["onKeydown"]))]),default:A(()=>{var d;return[D("button",{type:"button",class:Q(`${e.ns.namespace.value}-table__column-filter-trigger`),"aria-label":e.t("el.table.filterLabel",{column:((d=e.column)==null?void 0:d.label)||""})},[M(f,null,{default:A(()=>[ue(e.$slots,"filter-icon",{},()=>{var p;return[(p=e.column)!=null&&p.filterOpened?(z(),de(i,{key:0})):(z(),de(c,{key:1}))]})]),_:3})],10,["aria-label"])]}),_:3},8,["placement","popper-class","append-to","onShow","onHide"])}var ui=xe(ri,[["render",ii],["__file","filter-panel.vue"]]);function Jl(e){const t=Se();Vn(()=>{l.value.addObserver(t)}),Ue(()=>{n(l.value),a(l.value)}),zn(()=>{n(l.value),a(l.value)}),Dl(()=>{l.value.removeObserver(t)});const l=I(()=>{const s=e.layout;if(!s)throw new Error("Can not find table layout.");return s}),n=s=>{var u;const o=((u=e.vnode.el)==null?void 0:u.querySelectorAll("colgroup > col"))||[];if(!o.length)return;const r=s.getFlattenColumns(),i={};r.forEach(c=>{i[c.id]=c});for(let c=0,f=o.length;c{var u,o;const r=((u=e.vnode.el)==null?void 0:u.querySelectorAll("colgroup > col[name=gutter]"))||[];for(let c=0,f=r.length;c{m.stopPropagation()},s=(m,w)=>{!w.filters&&w.sortable?p(m,w,!1):w.filterable&&!w.sortable&&a(m),n?.emit("header-click",w,m)},u=(m,w)=>{n?.emit("header-contextmenu",w,m)},o=S(null),r=S(!1),i=S(),c=(m,w)=>{var P,O;if(ot&&!(w.children&&w.children.length>0)&&o.value&&e.border&&o.value.id===w.id){r.value=!0;const E=n;t("set-drag-visible",!0);const h=E?.vnode.el,g=h?.getBoundingClientRect().left,x=(O=(P=l?.vnode)==null?void 0:P.el)==null?void 0:O.querySelector(`th.${w.id}`),C=x.getBoundingClientRect(),_=C.left-g+30;Xe(x,"noclick"),i.value={startMouseLeft:m.clientX,startLeft:C.right-g,startColumnLeft:C.left-g,tableLeft:g};const L=E?.refs.resizeProxy;L.style.left=`${i.value.startLeft}px`,document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};const F=B=>{const G=B.clientX-i.value.startMouseLeft,Y=i.value.startLeft+G;L.style.left=`${Math.max(_,Y)}px`},V=()=>{if(r.value){const{startColumnLeft:B,startLeft:G}=i.value,ie=Number.parseInt(L.style.left,10)-B;w.width=w.realWidth=ie,E?.emit("header-dragend",w.width,G-B,w,m),requestAnimationFrame(()=>{e.store.scheduleLayout(!1,!0)}),document.body.style.cursor="",r.value=!1,o.value=null,i.value=void 0,t("set-drag-visible",!1)}document.removeEventListener("mousemove",F),document.removeEventListener("mouseup",V),document.onselectstart=null,document.ondragstart=null,setTimeout(()=>{Ve(x,"noclick")},0)};document.addEventListener("mousemove",F),document.addEventListener("mouseup",V)}},f=(m,w)=>{var P;if(!e.border||w.children&&w.children.length>0)return;const O=m.target,E=Qa(O)?O.closest("th"):null;if(!E)return;const h=Ot(E,"is-sortable");if(h){const F=r.value?"col-resize":"";E.style.cursor=F;const V=E.querySelector(".caret-wrapper");V&&(V.style.cursor=F)}if(!w.resizable||r.value){o.value=null;return}const g=E.getBoundingClientRect(),x=((P=E.parentNode)==null?void 0:P.lastElementChild)===E,C=e.allowDragLastColumn||!x,_=g.width>12&&g.right-m.clientX<8&&C,L=_?"col-resize":"";document.body.style.cursor=L,o.value=_?w:null,h&&(E.style.cursor=L)},v=()=>{!ot||r.value||(document.body.style.cursor="")},d=({order:m,sortOrders:w})=>{if(m==="")return w[0];const P=w.indexOf(m||null);return w[P>w.length-2?0:P+1]},p=(m,w,P)=>{var O;m.stopPropagation();const E=w.order===P?null:P||d(w),h=(O=m.target)==null?void 0:O.closest("th");if(h&&Ot(h,"noclick")){Ve(h,"noclick");return}if(!w.sortable)return;const g=m.currentTarget;if(["ascending","descending"].some(F=>Ot(g,F)&&!w.sortOrders.includes(F)))return;const x=e.store.states;let C=x.sortProp.value,_;const L=x.sortingColumn.value;(L!==w||L===w&&Bt(L.order))&&(L&&(L.order=null),x.sortingColumn.value=w,C=w.property),E?_=w.order=E:_=w.order=null,x.sortProp.value=C,x.sortOrder.value=_,n?.store.commit("changeSortCondition")};return{handleHeaderClick:s,handleHeaderContextMenu:u,handleMouseDown:c,handleMouseMove:f,handleMouseOut:v,handleSortClick:p,handleFilterClick:a}}function ci(e){const t=_e(je),l=re("table");return{getHeaderRowStyle:o=>{const r=t?.props.headerRowStyle;return Be(r)?r.call(null,{rowIndex:o}):r},getHeaderRowClass:o=>{const r=[],i=t?.props.headerRowClassName;return ye(i)?r.push(i):Be(i)&&r.push(i.call(null,{rowIndex:o})),r.join(" ")},getHeaderCellStyle:(o,r,i,c)=>{var f;let v=(f=t?.props.headerCellStyle)!=null?f:{};Be(v)&&(v=v.call(null,{rowIndex:o,columnIndex:r,row:i,column:c}));const d=Xl(r,c.fixed,e.store,i);return _t(d,"left"),_t(d,"right"),Object.assign({},v,d)},getHeaderCellClass:(o,r,i,c)=>{const f=Yl(l.b(),r,c.fixed,e.store,i),v=[c.id,c.order,c.headerAlign,c.className,c.labelClassName,...f];c.children||v.push("is-leaf"),c.sortable&&v.push("is-sortable");const d=t?.props.headerCellClassName;return ye(d)?v.push(d):Be(d)&&v.push(d.call(null,{rowIndex:o,columnIndex:r,row:i,column:c})),v.push(l.e("cell")),v.filter(p=>!!p).join(" ")}}}const fa=e=>{const t=[];return e.forEach(l=>{l.children?(t.push(l),t.push.apply(t,fa(l.children))):t.push(l)}),t},va=e=>{let t=1;const l=(s,u)=>{if(u&&(s.level=u.level+1,t{l(r,s),o+=r.colSpan}),s.colSpan=o}else s.colSpan=1};e.forEach(s=>{s.level=1,l(s,void 0)});const n=[];for(let s=0;s{s.children?(s.rowSpan=1,s.children.forEach(u=>u.isSubColumn=!0)):s.rowSpan=t-s.level+1,n[s.level-1].push(s)}),n};function fi(e){const t=_e(je),l=I(()=>va(e.store.states.originColumns.value));return{isGroup:I(()=>{const s=l.value.length>1;return s&&t&&(t.state.isGroup.value=!0),s}),toggleAllSelection:s=>{s.stopPropagation(),t?.store.commit("toggleAllSelection")},columnRows:l}}var vi=le({name:"ElTableHeader",components:{ElCheckbox:Lt},props:{fixed:{type:String,default:""},store:{required:!0,type:Object},border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})},appendFilterPanelTo:{type:String},allowDragLastColumn:{type:Boolean}},setup(e,{emit:t}){const l=Se(),n=_e(je),a=re("table"),s=S({}),{onColumnsChange:u,onScrollableChange:o}=Jl(n),r=n?.props.tableLayout==="auto",i=Qe(new Map),c=S();let f;const v=()=>{f=setTimeout(()=>{i.size>0&&(i.forEach((B,G)=>{const Y=c.value.querySelector(`.${G.replace(/\s/g,".")}`);if(Y){const ie=Y.getBoundingClientRect().width;B.width=ie||B.width}}),i.clear())})};pe(i,v),et(()=>{f&&(clearTimeout(f),f=void 0)}),Ue(async()=>{await $e(),await $e();const{prop:B,order:G}=e.defaultSort;n?.store.commit("sort",{prop:B,order:G,init:!0}),v()});const{handleHeaderClick:d,handleHeaderContextMenu:p,handleMouseDown:m,handleMouseMove:w,handleMouseOut:P,handleSortClick:O,handleFilterClick:E}=di(e,t),{getHeaderRowStyle:h,getHeaderRowClass:g,getHeaderCellStyle:x,getHeaderCellClass:C}=ci(e),{isGroup:_,toggleAllSelection:L,columnRows:F}=fi(e),{t:V}=Ft();return l.state={onColumnsChange:u,onScrollableChange:o},l.filterPanels=s,{ns:a,t:V,filterPanels:s,onColumnsChange:u,onScrollableChange:o,columnRows:F,getHeaderRowClass:g,getHeaderRowStyle:h,getHeaderCellClass:C,getHeaderCellStyle:x,handleHeaderClick:d,handleHeaderContextMenu:p,handleMouseDown:m,handleMouseMove:w,handleMouseOut:P,handleSortClick:O,handleFilterClick:E,isGroup:_,toggleAllSelection:L,saveIndexSelection:i,isTableLayoutAuto:r,theadRef:c,updateFixedColumnStyle:v}},render(){const{ns:e,t,isGroup:l,columnRows:n,getHeaderCellStyle:a,getHeaderCellClass:s,getHeaderRowClass:u,getHeaderRowStyle:o,handleHeaderClick:r,handleHeaderContextMenu:i,handleMouseDown:c,handleMouseMove:f,handleSortClick:v,handleMouseOut:d,store:p,$parent:m,saveIndexSelection:w,isTableLayoutAuto:P}=this;let O=1;return q("thead",{ref:"theadRef",class:e.is("group",l)},n.map((E,h)=>q("tr",{class:u(h),key:h,style:o(h)},E.map((g,x)=>{g.rowSpan>O&&(O=g.rowSpan);const C=s(h,x,E,g);return P&&g.fixed&&w.set(C,g),q("th",{class:C,colspan:g.colSpan,key:`${g.id}-thead`,rowspan:g.rowSpan,scope:g.colSpan>1?"colgroup":"col",style:a(h,x,E,g),onClick:_=>{var L;(L=_.currentTarget)!=null&&L.classList.contains("noclick")||r(_,g)},onContextmenu:_=>i(_,g),onMousedown:_=>c(_,g),onMousemove:_=>f(_,g),onMouseout:d},[q("div",{class:["cell",g.filteredValue&&g.filteredValue.length>0?"highlight":""]},[g.renderHeader?g.renderHeader({column:g,$index:x,store:p,_self:m}):g.label,g.sortable&&q("button",{type:"button",class:"caret-wrapper","aria-label":t("el.table.sortLabel",{column:g.label||""}),onClick:_=>v(_,g)},[q("i",{onClick:_=>v(_,g,"ascending"),class:"sort-caret ascending"}),q("i",{onClick:_=>v(_,g,"descending"),class:"sort-caret descending"})]),g.filterable&&q(ui,{store:p,placement:g.filterPlacement||"bottom-start",appendTo:m?.appendFilterPanelTo,column:g,upDataColumn:(_,L)=>{g[_]=L}},{"filter-icon":()=>g.renderFilterIcon?g.renderFilterIcon({filterOpened:g.filterOpened}):null})])])}))))}});function Cl(e,t,l=.03){return e-t>l}function pi(e){const t=_e(je),l=S(""),n=S(q("div")),a=(p,m,w)=>{var P,O,E;const h=t,g=yl(p);let x=null;const C=(P=h?.vnode.el)==null?void 0:P.dataset.prefix;g&&(x=hn({columns:(E=(O=e.store)==null?void 0:O.states.columns.value)!=null?E:[]},g,C),x&&h?.emit(`cell-${w}`,m,x,g,p)),h?.emit(`row-${w}`,m,x,p)},s=(p,m)=>{a(p,m,"dblclick")},u=(p,m)=>{var w;(w=e.store)==null||w.commit("setCurrentRow",m),a(p,m,"click")},o=(p,m)=>{a(p,m,"contextmenu")},r=Qt(p=>{var m;(m=e.store)==null||m.commit("setHoverRow",p)},30),i=Qt(()=>{var p;(p=e.store)==null||p.commit("setHoverRow",null)},30),c=p=>{const m=window.getComputedStyle(p,null),w=Number.parseInt(m.paddingLeft,10)||0,P=Number.parseInt(m.paddingRight,10)||0,O=Number.parseInt(m.paddingTop,10)||0,E=Number.parseInt(m.paddingBottom,10)||0;return{left:w,right:P,top:O,bottom:E}},f=(p,m,w)=>{var P;let O=(P=m?.target)==null?void 0:P.parentNode;for(;p>1&&(O=O?.nextSibling,!(!O||O.nodeName!=="TR"));)w(O,"hover-row hover-fixed-row"),p--};return{handleDoubleClick:s,handleClick:u,handleContextMenu:o,handleMouseEnter:r,handleMouseLeave:i,handleCellMouseEnter:(p,m,w)=>{var P,O,E,h,g,x,C,_,L;if(!t)return;const F=t,V=yl(p),B=(P=F?.vnode.el)==null?void 0:P.dataset.prefix;let G=null;if(V){if(G=hn({columns:(E=(O=e.store)==null?void 0:O.states.columns.value)!=null?E:[]},V,B),!G)return;V.rowSpan>1&&f(V.rowSpan,p,Xe);const ne=F.hoverState={cell:V,column:G,row:m};F?.emit("cell-mouse-enter",ne.row,ne.column,ne.cell,p)}if(!w){((h=Ne)==null?void 0:h.trigger)===V&&((g=Ne)==null||g());return}const Y=p.target.querySelector(".cell");if(!(Ot(Y,`${B}-tooltip`)&&Y.childNodes.length&&((x=Y.textContent)!=null&&x.trim())))return;const ie=document.createRange();ie.setStart(Y,0),ie.setEnd(Y,Y.childNodes.length);const{width:J,height:N}=ie.getBoundingClientRect(),{width:$,height:H}=Y.getBoundingClientRect(),{top:k,left:W,right:R,bottom:K}=c(Y),U=W+R,Z=k+K;Cl(J+U,$)||Cl(N+Z,H)||Cl(Y.scrollWidth,$)?Jr(w,(C=V?.innerText||V?.textContent)!=null?C:"",m,G,V,F):((_=Ne)==null?void 0:_.trigger)===V&&((L=Ne)==null||L())},handleCellMouseLeave:p=>{const m=yl(p);if(!m)return;m.rowSpan>1&&f(m.rowSpan,p,Ve);const w=t?.hoverState;t?.emit("cell-mouse-leave",w?.row,w?.column,w?.cell,p)},tooltipContent:l,tooltipTrigger:n}}function mi(e){const t=_e(je),l=re("table");return{getRowStyle:(i,c)=>{const f=t?.props.rowStyle;return Be(f)?f.call(null,{row:i,rowIndex:c}):f||null},getRowClass:(i,c,f)=>{var v;const d=[l.e("row")];t?.props.highlightCurrentRow&&i===((v=e.store)==null?void 0:v.states.currentRow.value)&&d.push("current-row"),e.stripe&&f%2===1&&d.push(l.em("row","striped"));const p=t?.props.rowClassName;return ye(p)?d.push(p):Be(p)&&d.push(p.call(null,{row:i,rowIndex:c})),d},getCellStyle:(i,c,f,v)=>{const d=t?.props.cellStyle;let p=d??{};Be(d)&&(p=d.call(null,{rowIndex:i,columnIndex:c,row:f,column:v}));const m=Xl(c,e?.fixed,e.store);return _t(m,"left"),_t(m,"right"),Object.assign({},p,m)},getCellClass:(i,c,f,v,d)=>{const p=Yl(l.b(),c,e?.fixed,e.store,void 0,d),m=[v.id,v.align,v.className,...p],w=t?.props.cellClassName;return ye(w)?m.push(w):Be(w)&&m.push(w.call(null,{rowIndex:i,columnIndex:c,row:f,column:v})),m.push(l.e("cell")),m.filter(P=>!!P).join(" ")},getSpan:(i,c,f,v)=>{let d=1,p=1;const m=t?.props.spanMethod;if(Be(m)){const w=m({row:i,column:c,rowIndex:f,columnIndex:v});Me(w)?(d=w[0],p=w[1]):ct(w)&&(d=w.rowspan,p=w.colspan)}return{rowspan:d,colspan:p}},getColspanRealWidth:(i,c,f)=>{if(c<1)return i[f].realWidth;const v=i.map(({realWidth:d,width:p})=>d||p).slice(f,f+c);return Number(v.reduce((d,p)=>Number(d)+Number(p),-1))}}}const hi=le({name:"TableTdWrapper"}),gi=le({...hi,props:{colspan:{type:Number,default:1},rowspan:{type:Number,default:1}},setup(e){return(t,l)=>(z(),te("td",{colspan:e.colspan,rowspan:e.rowspan},[ue(t.$slots,"default")],8,["colspan","rowspan"]))}});var bi=xe(gi,[["__file","td-wrapper.vue"]]);function yi(e){const t=_e(je),l=re("table"),{handleDoubleClick:n,handleClick:a,handleContextMenu:s,handleMouseEnter:u,handleMouseLeave:o,handleCellMouseEnter:r,handleCellMouseLeave:i,tooltipContent:c,tooltipTrigger:f}=pi(e),{getRowStyle:v,getRowClass:d,getCellStyle:p,getCellClass:m,getSpan:w,getColspanRealWidth:P}=mi(e);let O=-1;const E=I(()=>{var _;return(_=e.store)==null?void 0:_.states.columns.value.findIndex(({type:L})=>L==="default")}),h=(_,L)=>{var F;const V=(F=t?.props)==null?void 0:F.rowKey;return V?Ee(_,V):L},g=(_,L,F,V=!1)=>{const{tooltipEffect:B,tooltipOptions:G,store:Y}=e,{indent:ie,columns:J}=Y.states,N=[];let $=!0;return F&&(N.push(l.em("row",`level-${F.level}`)),$=!!F.display),L===0&&(O=-1),e.stripe&&$&&O++,N.push(...d(_,L,O)),q("tr",{style:[$?null:{display:"none"},v(_,L)],class:N,key:h(_,L),onDblclick:k=>n(k,_),onClick:k=>a(k,_),onContextmenu:k=>s(k,_),onMouseenter:()=>u(L),onMouseleave:o},J.value.map((k,W)=>{const{rowspan:R,colspan:K}=w(_,k,L,W);if(!R||!K)return null;const U=Object.assign({},k);U.realWidth=P(J.value,K,W);const Z={store:Y,_self:e.context||t,column:U,row:_,$index:L,cellIndex:W,expanded:V};W===E.value&&F&&(Z.treeNode={indent:F.level&&F.level*ie.value,level:F.level},lt(F.expanded)&&(Z.treeNode.expanded=F.expanded,"loading"in F&&(Z.treeNode.loading=F.loading),"noLazyChildren"in F&&(Z.treeNode.noLazyChildren=F.noLazyChildren)));const ne=`${h(_,L)},${W}`,me=U.columnKey||U.rawColumnKey||"",Ce=k.showOverflowTooltip&&jn({effect:B},G,k.showOverflowTooltip);return q(bi,{style:p(L,W,_,k),class:m(L,W,_,k,K-1),key:`${me}${ne}`,rowspan:R,colspan:K,onMouseenter:ke=>r(ke,_,Ce),onMouseleave:i},{default:()=>x(W,k,Z)})}))},x=(_,L,F)=>L.renderCell(F);return{wrappedRowRender:(_,L)=>{const F=e.store,{isRowExpanded:V,assertRowKey:B}=F,{treeData:G,lazyTreeNodeMap:Y,childrenColumnName:ie,rowKey:J}=F.states,N=F.states.columns.value;if(N.some(({type:H})=>H==="expand")){const H=V(_),k=g(_,L,void 0,H),W=t?.renderExpanded;if(!W)return console.error("[Element Error]renderExpanded is required."),k;const R=[[k]];return(t.props.preserveExpandedContent||H)&&R[0].push(q("tr",{key:`expanded-row__${k.key}`,style:{display:H?"":"none"}},[q("td",{colspan:N.length,class:`${l.e("cell")} ${l.e("expanded-cell")}`},[W({row:_,$index:L,store:F,expanded:H})])])),R}else if(Object.keys(G.value).length){B();const H=Ee(_,J.value);let k=G.value[H],W=null;k&&(W={expanded:k.expanded,level:k.level,display:!0,noLazyChildren:void 0,loading:void 0},lt(k.lazy)&&(W&<(k.loaded)&&k.loaded&&(W.noLazyChildren=!(k.children&&k.children.length)),W.loading=k.loading));const R=[g(_,L,W??void 0)];if(k){let K=0;const U=(ne,me)=>{ne&&ne.length&&me&&ne.forEach(Ce=>{const ke={display:me.display&&me.expanded,level:me.level+1,expanded:!1,noLazyChildren:!1,loading:!1},Pe=Ee(Ce,J.value);if(gt(Pe))throw new Error("For nested data item, row-key is required.");if(k={...G.value[Pe]},k&&(ke.expanded=k.expanded,k.level=k.level||ke.level,k.display=!!(k.expanded&&ke.display),lt(k.lazy)&&(lt(k.loaded)&&k.loaded&&(ke.noLazyChildren=!(k.children&&k.children.length)),ke.loading=k.loading)),K++,R.push(g(Ce,L+K,ke)),k){const Ke=Y.value[Pe]||Ce[ie.value];U(Ke,k)}})};k.display=!0;const Z=Y.value[H]||_[ie.value];U(Z,k)}return R}else return g(_,L,void 0)},tooltipContent:c,tooltipTrigger:f}}const Ci={store:{required:!0,type:Object},stripe:Boolean,tooltipEffect:String,tooltipOptions:{type:Object},context:{default:()=>({}),type:Object},rowClassName:[String,Function],rowStyle:[Object,Function],fixed:{type:String,default:""},highlight:Boolean};var wi=le({name:"ElTableBody",props:Ci,setup(e){var t;const l=Se(),n=_e(je),a=re("table"),{wrappedRowRender:s,tooltipContent:u,tooltipTrigger:o}=yi(e),{onColumnsChange:r,onScrollableChange:i}=Jl(n),c=[];return pe((t=e.store)==null?void 0:t.states.hoverRow,(f,v)=>{var d,p;const m=l?.vnode.el,w=Array.from(m?.children||[]).filter(E=>E?.classList.contains(`${a.e("row")}`));let P=f;const O=(d=w[P])==null?void 0:d.childNodes;if(O?.length){let E=0;Array.from(O).reduce((g,x,C)=>{var _,L;return((_=O[C])==null?void 0:_.colSpan)>1&&(E=(L=O[C])==null?void 0:L.colSpan),x.nodeName!=="TD"&&E===0&&g.push(C),E>0&&E--,g},[]).forEach(g=>{var x;for(P=f;P>0;){const C=(x=w[P-1])==null?void 0:x.childNodes;if(C[g]&&C[g].nodeName==="TD"&&C[g].rowSpan>1){Xe(C[g],"hover-cell"),c.push(C[g]);break}P--}})}else c.forEach(E=>Ve(E,"hover-cell")),c.length=0;!((p=e.store)!=null&&p.states.isComplex.value)||!ot||qn(()=>{const E=w[v],h=w[f];E&&!E.classList.contains("hover-fixed-row")&&Ve(E,"hover-row"),h&&Xe(h,"hover-row")})}),Dl(()=>{var f;(f=Ne)==null||f()}),{ns:a,onColumnsChange:r,onScrollableChange:i,wrappedRowRender:s,tooltipContent:u,tooltipTrigger:o}},render(){const{wrappedRowRender:e,store:t}=this,l=t?.states.data.value||[];return q("tbody",{tabIndex:-1},[l.reduce((n,a)=>n.concat(e(a,n.length)),[])])}});function Si(){const e=_e(je),t=e?.store,l=I(()=>{var o;return(o=t?.states.fixedLeafColumnsLength.value)!=null?o:0}),n=I(()=>{var o;return(o=t?.states.rightFixedColumns.value.length)!=null?o:0}),a=I(()=>{var o;return(o=t?.states.columns.value.length)!=null?o:0}),s=I(()=>{var o;return(o=t?.states.fixedColumns.value.length)!=null?o:0}),u=I(()=>{var o;return(o=t?.states.rightFixedColumns.value.length)!=null?o:0});return{leftFixedLeafCount:l,rightFixedLeafCount:n,columnsCount:a,leftFixedCount:s,rightFixedCount:u,columns:I(()=>{var o;return(o=t?.states.columns.value)!=null?o:[]})}}function _i(e){const{columns:t}=Si(),l=re("table");return{getCellClasses:(s,u)=>{const o=s[u],r=[l.e("cell"),o.id,o.align,o.labelClassName,...Yl(l.b(),u,o.fixed,e.store)];return o.className&&r.push(o.className),o.children||r.push(l.is("leaf")),r},getCellStyles:(s,u)=>{const o=Xl(u,s.fixed,e.store);return _t(o,"left"),_t(o,"right"),o},columns:t}}var xi=le({name:"ElTableFooter",props:{fixed:{type:String,default:""},store:{required:!0,type:Object},summaryMethod:Function,sumText:String,border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e){const t=_e(je),l=re("table"),{getCellClasses:n,getCellStyles:a,columns:s}=_i(e),{onScrollableChange:u,onColumnsChange:o}=Jl(t);return{ns:l,onScrollableChange:u,onColumnsChange:o,getCellClasses:n,getCellStyles:a,columns:s}},render(){const{columns:e,getCellStyles:t,getCellClasses:l,summaryMethod:n,sumText:a}=this,s=this.store.states.data.value;let u=[];return n?u=n({columns:e,data:s}):e.forEach((o,r)=>{if(r===0){u[r]=a;return}const i=s.map(d=>Number(d[o.property])),c=[];let f=!0;i.forEach(d=>{if(!Number.isNaN(+d)){f=!1;const p=`${d}`.split(".")[1];c.push(p?p.length:0)}});const v=Math.max.apply(null,c);f?u[r]="":u[r]=i.reduce((d,p)=>{const m=Number(p);return Number.isNaN(+m)?d:Number.parseFloat((d+p).toFixed(Math.min(v,20)))},0)}),q(q("tfoot",[q("tr",{},[...e.map((o,r)=>q("td",{key:r,colspan:o.colSpan,rowspan:o.rowSpan,class:l(e,r),style:t(o,r)},[q("div",{class:["cell",o.labelClassName]},[u[r]])]))])]))}});function Ei(e){return{setCurrentRow:f=>{e.commit("setCurrentRow",f)},getSelectionRows:()=>e.getSelectionRows(),toggleRowSelection:(f,v,d=!0)=>{e.toggleRowSelection(f,v,!1,d),e.updateAllSelected()},clearSelection:()=>{e.clearSelection()},clearFilter:f=>{e.clearFilter(f)},toggleAllSelection:()=>{e.commit("toggleAllSelection")},toggleRowExpansion:(f,v)=>{e.toggleRowExpansionAdapter(f,v)},clearSort:()=>{e.clearSort()},sort:(f,v)=>{e.commit("sort",{prop:f,order:v})},updateKeyChildren:(f,v)=>{e.updateKeyChildren(f,v)}}}function ki(e,t,l,n){const a=S(!1),s=S(null),u=S(!1),o=N=>{u.value=N},r=S({width:null,height:null,headerHeight:null}),i=S(!1),c={display:"inline-block",verticalAlign:"middle"},f=S(),v=S(0),d=S(0),p=S(0),m=S(0),w=S(0);pe(()=>e.height,N=>{t.setHeight(N??null)},{immediate:!0}),pe(()=>e.maxHeight,N=>{t.setMaxHeight(N??null)},{immediate:!0}),pe(()=>[e.currentRowKey,l.states.rowKey],([N,$])=>{!y($)||!y(N)||l.setCurrentRowKey(`${N}`)},{immediate:!0}),pe(()=>e.data,N=>{n.store.commit("setData",N)},{immediate:!0,deep:!0}),Jt(()=>{e.expandRowKeys&&l.setExpandRowKeysAdapter(e.expandRowKeys)});const P=()=>{n.store.commit("setHoverRow",null),n.hoverState&&(n.hoverState=null)},O=(N,$)=>{const{pixelX:H,pixelY:k}=$;Math.abs(H)>=Math.abs(k)&&(n.refs.bodyWrapper.scrollLeft+=$.pixelX/5)},E=I(()=>e.height||e.maxHeight||l.states.fixedColumns.value.length>0||l.states.rightFixedColumns.value.length>0),h=I(()=>({width:t.bodyWidth.value?`${t.bodyWidth.value}px`:""})),g=()=>{E.value&&t.updateElsHeight(),t.updateColumnsWidth(),!(typeof window>"u")&&requestAnimationFrame(L)};Ue(async()=>{await $e(),l.updateColumns(),F(),requestAnimationFrame(g);const N=n.vnode.el,$=n.refs.headerWrapper;e.flexible&&N&&N.parentElement&&(N.parentElement.style.minWidth="0"),r.value={width:f.value=N.offsetWidth,height:N.offsetHeight,headerHeight:e.showHeader&&$?$.offsetHeight:null},l.states.columns.value.forEach(H=>{H.filteredValue&&H.filteredValue.length&&n.store.commit("filterChange",{column:H,values:H.filteredValue,silent:!0})}),n.$ready=!0});const x=(N,$)=>{if(!N)return;const H=Array.from(N.classList).filter(k=>!k.startsWith("is-scrolling-"));H.push(t.scrollX.value?$:"is-scrolling-none"),N.className=H.join(" ")},C=N=>{const{tableWrapper:$}=n.refs;x($,N)},_=N=>{const{tableWrapper:$}=n.refs;return!!($&&$.classList.contains(N))},L=function(){if(!n.refs.scrollBarRef)return;if(!t.scrollX.value){const U="is-scrolling-none";_(U)||C(U);return}const N=n.refs.scrollBarRef.wrapRef;if(!N)return;const{scrollLeft:$,offsetWidth:H,scrollWidth:k}=N,{headerWrapper:W,footerWrapper:R}=n.refs;W&&(W.scrollLeft=$),R&&(R.scrollLeft=$);const K=k-H-1;$>=K?C("is-scrolling-right"):C($===0?"is-scrolling-left":"is-scrolling-middle")},F=()=>{n.refs.scrollBarRef&&(n.refs.scrollBarRef.wrapRef&&$t(n.refs.scrollBarRef.wrapRef,"scroll",L,{passive:!0}),e.fit?wt(n.vnode.el,V):$t(window,"resize",V),wt(n.refs.tableInnerWrapper,()=>{var N,$;V(),($=(N=n.refs)==null?void 0:N.scrollBarRef)==null||$.update()}))},V=()=>{var N,$,H,k;const W=n.vnode.el;if(!n.$ready||!W)return;let R=!1;const{width:K,height:U,headerHeight:Z}=r.value,ne=f.value=W.offsetWidth;K!==ne&&(R=!0);const me=W.offsetHeight;(e.height||E.value)&&U!==me&&(R=!0);const Ce=e.tableLayout==="fixed"?n.refs.headerWrapper:(N=n.refs.tableHeaderRef)==null?void 0:N.$el;e.showHeader&&Ce?.offsetHeight!==Z&&(R=!0),v.value=(($=n.refs.tableWrapper)==null?void 0:$.scrollHeight)||0,p.value=Ce?.scrollHeight||0,m.value=((H=n.refs.footerWrapper)==null?void 0:H.offsetHeight)||0,w.value=((k=n.refs.appendWrapper)==null?void 0:k.offsetHeight)||0,d.value=v.value-p.value-m.value-w.value,R&&(r.value={width:ne,height:me,headerHeight:e.showHeader&&Ce?.offsetHeight||0},g())},B=Za(),G=I(()=>{const{bodyWidth:N,scrollY:$,gutterWidth:H}=t;return N.value?`${N.value-($.value?H:0)}px`:""}),Y=I(()=>e.maxHeight?"fixed":e.tableLayout),ie=I(()=>{if(e.data&&e.data.length)return;let N="100%";e.height&&d.value&&(N=`${d.value}px`);const $=f.value;return{width:$?`${$}px`:"",height:N}}),J=I(()=>e.height?{height:"100%"}:e.maxHeight?Number.isNaN(Number(e.maxHeight))?{maxHeight:`calc(${e.maxHeight} - ${p.value+m.value}px)`}:{maxHeight:`${+e.maxHeight-p.value-m.value}px`}:{});return{isHidden:a,renderExpanded:s,setDragVisible:o,isGroup:i,handleMouseLeave:P,handleHeaderFooterMousewheel:O,tableSize:B,emptyBlockStyle:ie,resizeProxyVisible:u,bodyWidth:G,resizeState:r,doLayout:g,tableBodyStyles:h,tableLayout:Y,scrollbarViewStyle:c,scrollbarStyle:J}}function Ni(e){const t=S(),l=()=>{const a=e.vnode.el.querySelector(".hidden-columns"),s={childList:!0,subtree:!0},u=e.store.states.updateOrderFns;t.value=new MutationObserver(()=>{u.forEach(o=>o())}),t.value.observe(a,s)};Ue(()=>{l()}),Dl(()=>{var n;(n=t.value)==null||n.disconnect()})}var Ti={data:{type:Array,default:()=>[]},size:eo,width:[String,Number],height:[String,Number],maxHeight:[String,Number],fit:{type:Boolean,default:!0},stripe:Boolean,border:Boolean,rowKey:[String,Function],showHeader:{type:Boolean,default:!0},showSummary:Boolean,sumText:String,summaryMethod:Function,rowClassName:[String,Function],rowStyle:[Object,Function],cellClassName:[String,Function],cellStyle:[Object,Function],headerRowClassName:[String,Function],headerRowStyle:[Object,Function],headerCellClassName:[String,Function],headerCellStyle:[Object,Function],highlightCurrentRow:Boolean,currentRowKey:[String,Number],emptyText:String,expandRowKeys:Array,defaultExpandAll:Boolean,defaultSort:Object,tooltipEffect:String,tooltipOptions:Object,spanMethod:Function,selectOnIndeterminate:{type:Boolean,default:!0},indent:{type:Number,default:16},treeProps:{type:Object,default:()=>({hasChildren:"hasChildren",children:"children",checkStrictly:!1})},lazy:Boolean,load:Function,style:{type:[String,Object,Array],default:()=>({})},className:{type:String,default:""},tableLayout:{type:String,default:"fixed"},scrollbarAlwaysOn:Boolean,flexible:Boolean,showOverflowTooltip:[Boolean,Object],tooltipFormatter:Function,appendFilterPanelTo:String,scrollbarTabindex:{type:[Number,String],default:void 0},allowDragLastColumn:{type:Boolean,default:!0},preserveExpandedContent:Boolean,nativeScrollbar:Boolean};function pa(e){const t=e.tableLayout==="auto";let l=e.columns||[];t&&l.every(({width:a})=>Te(a))&&(l=[]);const n=a=>{const s={key:`${e.tableLayout}_${a.id}`,style:{},name:void 0};return t?s.style={width:`${a.width}px`}:s.name=a.id,s};return q("colgroup",{},l.map(a=>q("col",n(a))))}pa.props=["columns","tableLayout"];const Mi=()=>{const e=S(),t=(s,u)=>{const o=e.value;o&&o.scrollTo(s,u)},l=(s,u)=>{const o=e.value;o&&at(u)&&["Top","Left"].includes(s)&&o[`setScroll${s}`](u)};return{scrollBarRef:e,scrollTo:t,setScrollTop:s=>l("Top",s),setScrollLeft:s=>l("Left",s)}};var yn=!1,ut,Ol,$l,jt,qt,ma,Yt,Pl,Ll,Al,ha,Il,Fl,ga,ba;function Oe(){if(!yn){yn=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),l=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(Il=/\b(iPhone|iP[ao]d)/.exec(e),Fl=/\b(iP[ao]d)/.exec(e),Al=/Android/i.exec(e),ga=/FBAN\/\w+;/i.exec(e),ba=/Mobile/i.exec(e),ha=!!/Win64/.exec(e),t){ut=t[1]?parseFloat(t[1]):t[5]?parseFloat(t[5]):NaN,ut&&document&&document.documentMode&&(ut=document.documentMode);var n=/(?:Trident\/(\d+.\d+))/.exec(e);ma=n?parseFloat(n[1])+4:ut,Ol=t[2]?parseFloat(t[2]):NaN,$l=t[3]?parseFloat(t[3]):NaN,jt=t[4]?parseFloat(t[4]):NaN,jt?(t=/(?:Chrome\/(\d+\.\d+))/.exec(e),qt=t&&t[1]?parseFloat(t[1]):NaN):qt=NaN}else ut=Ol=$l=qt=jt=NaN;if(l){if(l[1]){var a=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);Yt=a?parseFloat(a[1].replace("_",".")):!0}else Yt=!1;Pl=!!l[2],Ll=!!l[3]}else Yt=Pl=Ll=!1}}var Bl={ie:function(){return Oe()||ut},ieCompatibilityMode:function(){return Oe()||ma>ut},ie64:function(){return Bl.ie()&&ha},firefox:function(){return Oe()||Ol},opera:function(){return Oe()||$l},webkit:function(){return Oe()||jt},safari:function(){return Bl.webkit()},chrome:function(){return Oe()||qt},windows:function(){return Oe()||Pl},osx:function(){return Oe()||Yt},linux:function(){return Oe()||Ll},iphone:function(){return Oe()||Il},mobile:function(){return Oe()||Il||Fl||Al||ba},nativeApp:function(){return Oe()||ga},android:function(){return Oe()||Al},ipad:function(){return Oe()||Fl}},Ri=Bl,Oi=!!(typeof window<"u"&&window.document&&window.document.createElement),$i={canUseDOM:Oi},ya=$i,Ca;ya.canUseDOM&&(Ca=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0);function Pi(e,t){if(!ya.canUseDOM||t&&!("addEventListener"in document))return!1;var l="on"+e,n=l in document;if(!n){var a=document.createElement("div");a.setAttribute(l,"return;"),n=typeof a[l]=="function"}return!n&&Ca&&e==="wheel"&&(n=document.implementation.hasFeature("Events.wheel","3.0")),n}var Li=Pi,Cn=10,wn=40,Sn=800;function wa(e){var t=0,l=0,n=0,a=0;return"detail"in e&&(l=e.detail),"wheelDelta"in e&&(l=-e.wheelDelta/120),"wheelDeltaY"in e&&(l=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=l,l=0),n=t*Cn,a=l*Cn,"deltaY"in e&&(a=e.deltaY),"deltaX"in e&&(n=e.deltaX),(n||a)&&e.deltaMode&&(e.deltaMode==1?(n*=wn,a*=wn):(n*=Sn,a*=Sn)),n&&!t&&(t=n<1?-1:1),a&&!l&&(l=a<1?-1:1),{spinX:t,spinY:l,pixelX:n,pixelY:a}}wa.getEventType=function(){return Ri.firefox()?"DOMMouseScroll":Li("wheel")?"wheel":"mousewheel"};var Ai=wa;const Xt="_Mousewheel",_n=function(e,t){if(e&&e.addEventListener){Sa(e);const l=function(n){const a=Ai(n);t&&Reflect.apply(t,this,[n,a])};e[Xt]={wheelHandler:l},e.addEventListener("wheel",l,{passive:!0})}},Sa=e=>{var t;(t=e[Xt])!=null&&t.wheelHandler&&(e.removeEventListener("wheel",e[Xt].wheelHandler),e[Xt]=null)},Ii={beforeMount(e,t){_n(e,t.value)},unmounted(e){Sa(e)},updated(e,t){t.value!==t.oldValue&&_n(e,t.value)}};let Fi=1;const Bi=le({name:"ElTable",directives:{Mousewheel:Ii},components:{TableHeader:vi,TableBody:wi,TableFooter:xi,ElScrollbar:Pn,hColgroup:pa},props:Ti,emits:["select","select-all","selection-change","cell-mouse-enter","cell-mouse-leave","cell-contextmenu","cell-click","cell-dblclick","row-click","row-contextmenu","row-dblclick","header-click","header-contextmenu","sort-change","filter-change","current-change","header-dragend","expand-change","scroll"],setup(e){const{t}=Ft(),l=re("table"),n=Se();St(je,n);const a=ai(n,e);n.store=a;const s=new si({store:n.store,table:n,fit:e.fit,showHeader:e.showHeader});n.layout=s;const u=I(()=>(a.states.data.value||[]).length===0),{setCurrentRow:o,getSelectionRows:r,toggleRowSelection:i,clearSelection:c,clearFilter:f,toggleAllSelection:v,toggleRowExpansion:d,clearSort:p,sort:m,updateKeyChildren:w}=Ei(a),{isHidden:P,renderExpanded:O,setDragVisible:E,isGroup:h,handleMouseLeave:g,handleHeaderFooterMousewheel:x,tableSize:C,emptyBlockStyle:_,resizeProxyVisible:L,bodyWidth:F,resizeState:V,doLayout:B,tableBodyStyles:G,tableLayout:Y,scrollbarViewStyle:ie,scrollbarStyle:J}=ki(e,s,a,n),{scrollBarRef:N,scrollTo:$,setScrollLeft:H,setScrollTop:k}=Mi(),W=Qt(B,50),R=`${l.namespace.value}-table_${Fi++}`;n.tableId=R,n.state={isGroup:h,resizeState:V,doLayout:B,debouncedUpdateLayout:W};const K=I(()=>{var ne;return(ne=e.sumText)!=null?ne:t("el.table.sumText")}),U=I(()=>{var ne;return(ne=e.emptyText)!=null?ne:t("el.table.emptyText")}),Z=I(()=>va(a.states.originColumns.value)[0]);return Ni(n),et(()=>{W.cancel()}),{ns:l,layout:s,store:a,columns:Z,handleHeaderFooterMousewheel:x,handleMouseLeave:g,tableId:R,tableSize:C,isHidden:P,isEmpty:u,renderExpanded:O,resizeProxyVisible:L,resizeState:V,isGroup:h,bodyWidth:F,tableBodyStyles:G,emptyBlockStyle:_,debouncedUpdateLayout:W,setCurrentRow:o,getSelectionRows:r,toggleRowSelection:i,clearSelection:c,clearFilter:f,toggleAllSelection:v,toggleRowExpansion:d,clearSort:p,doLayout:B,sort:m,updateKeyChildren:w,t,setDragVisible:E,context:n,computedSumText:K,computedEmptyText:U,tableLayout:Y,scrollbarViewStyle:ie,scrollbarStyle:J,scrollBarRef:N,scrollTo:$,setScrollLeft:H,setScrollTop:k,allowDragLastColumn:e.allowDragLastColumn}}});function Hi(e,t,l,n,a,s){const u=Ie("hColgroup"),o=Ie("table-header"),r=Ie("table-body"),i=Ie("table-footer"),c=Ie("el-scrollbar"),f=Yo("mousewheel");return z(),te("div",{ref:"tableWrapper",class:Q([{[e.ns.m("fit")]:e.fit,[e.ns.m("striped")]:e.stripe,[e.ns.m("border")]:e.border||e.isGroup,[e.ns.m("hidden")]:e.isHidden,[e.ns.m("group")]:e.isGroup,[e.ns.m("fluid-height")]:e.maxHeight,[e.ns.m("scrollable-x")]:e.layout.scrollX.value,[e.ns.m("scrollable-y")]:e.layout.scrollY.value,[e.ns.m("enable-row-hover")]:!e.store.states.isComplex.value,[e.ns.m("enable-row-transition")]:(e.store.states.data.value||[]).length!==0&&(e.store.states.data.value||[]).length<100,"has-footer":e.showSummary},e.ns.m(e.tableSize),e.className,e.ns.b(),e.ns.m(`layout-${e.tableLayout}`)]),style:De(e.style),"data-prefix":e.ns.namespace.value,onMouseleave:e.handleMouseLeave},[D("div",{ref:"tableInnerWrapper",class:Q(e.ns.e("inner-wrapper"))},[D("div",{ref:"hiddenColumns",class:"hidden-columns"},[ue(e.$slots,"default")],512),e.showHeader&&e.tableLayout==="fixed"?Fe((z(),te("div",{key:0,ref:"headerWrapper",class:Q(e.ns.e("header-wrapper"))},[D("table",{ref:"tableHeader",class:Q(e.ns.e("header")),style:De(e.tableBodyStyles),border:"0",cellpadding:"0",cellspacing:"0"},[M(u,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),M(o,{ref:"tableHeaderRef",border:e.border,"default-sort":e.defaultSort,store:e.store,"append-filter-panel-to":e.appendFilterPanelTo,"allow-drag-last-column":e.allowDragLastColumn,onSetDragVisible:e.setDragVisible},null,8,["border","default-sort","store","append-filter-panel-to","allow-drag-last-column","onSetDragVisible"])],6)],2)),[[f,e.handleHeaderFooterMousewheel]]):he("v-if",!0),D("div",{ref:"bodyWrapper",class:Q(e.ns.e("body-wrapper"))},[M(c,{ref:"scrollBarRef","view-style":e.scrollbarViewStyle,"wrap-style":e.scrollbarStyle,always:e.scrollbarAlwaysOn,tabindex:e.scrollbarTabindex,native:e.nativeScrollbar,onScroll:v=>e.$emit("scroll",v)},{default:A(()=>[D("table",{ref:"tableBody",class:Q(e.ns.e("body")),cellspacing:"0",cellpadding:"0",border:"0",style:De({width:e.bodyWidth,tableLayout:e.tableLayout})},[M(u,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),e.showHeader&&e.tableLayout==="auto"?(z(),de(o,{key:0,ref:"tableHeaderRef",class:Q(e.ns.e("body-header")),border:e.border,"default-sort":e.defaultSort,store:e.store,"append-filter-panel-to":e.appendFilterPanelTo,onSetDragVisible:e.setDragVisible},null,8,["class","border","default-sort","store","append-filter-panel-to","onSetDragVisible"])):he("v-if",!0),M(r,{context:e.context,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"tooltip-effect":e.tooltipEffect,"tooltip-options":e.tooltipOptions,"row-style":e.rowStyle,store:e.store,stripe:e.stripe},null,8,["context","highlight","row-class-name","tooltip-effect","tooltip-options","row-style","store","stripe"]),e.showSummary&&e.tableLayout==="auto"?(z(),de(i,{key:1,class:Q(e.ns.e("body-footer")),border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["class","border","default-sort","store","sum-text","summary-method"])):he("v-if",!0)],6),e.isEmpty?(z(),te("div",{key:0,ref:"emptyBlock",style:De(e.emptyBlockStyle),class:Q(e.ns.e("empty-block"))},[D("span",{class:Q(e.ns.e("empty-text"))},[ue(e.$slots,"empty",{},()=>[ce(be(e.computedEmptyText),1)])],2)],6)):he("v-if",!0),e.$slots.append?(z(),te("div",{key:1,ref:"appendWrapper",class:Q(e.ns.e("append-wrapper"))},[ue(e.$slots,"append")],2)):he("v-if",!0)]),_:3},8,["view-style","wrap-style","always","tabindex","native","onScroll"])],2),e.showSummary&&e.tableLayout==="fixed"?Fe((z(),te("div",{key:1,ref:"footerWrapper",class:Q(e.ns.e("footer-wrapper"))},[D("table",{class:Q(e.ns.e("footer")),cellspacing:"0",cellpadding:"0",border:"0",style:De(e.tableBodyStyles)},[M(u,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),M(i,{border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["border","default-sort","store","sum-text","summary-method"])],6)],2)),[[dt,!e.isEmpty],[f,e.handleHeaderFooterMousewheel]]):he("v-if",!0),e.border||e.isGroup?(z(),te("div",{key:2,class:Q(e.ns.e("border-left-patch"))},null,2)):he("v-if",!0)],2),Fe(D("div",{ref:"resizeProxy",class:Q(e.ns.e("column-resize-proxy"))},null,2),[[dt,e.resizeProxyVisible]])],46,["data-prefix","onMouseleave"])}var Wi=xe(Bi,[["render",Hi],["__file","table.vue"]]);const Vi={selection:"table-column--selection",expand:"table__expand-column"},zi={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:""},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},Ki=e=>Vi[e]||"",Di={selection:{renderHeader({store:e}){var t;function l(){return e.states.data.value&&e.states.data.value.length===0}return q(Lt,{disabled:l(),size:e.states.tableSize.value,indeterminate:e.states.selection.value.length>0&&!e.states.isAllSelected.value,"onUpdate:modelValue":(t=e.toggleAllSelection)!=null?t:void 0,modelValue:e.states.isAllSelected.value,ariaLabel:e.t("el.table.selectAllLabel")})},renderCell({row:e,column:t,store:l,$index:n}){return q(Lt,{disabled:t.selectable?!t.selectable.call(null,e,n):!1,size:l.states.tableSize.value,onChange:()=>{l.commit("rowSelectedChanged",e)},onClick:a=>a.stopPropagation(),modelValue:l.isSelected(e),ariaLabel:l.t("el.table.selectRowLabel")})},sortable:!1,resizable:!1},index:{renderHeader({column:e}){return e.label||"#"},renderCell({column:e,$index:t}){let l=t+1;const n=e.index;return at(n)?l=t+n:Be(n)&&(l=n(t)),q("div",{},[l])},sortable:!1},expand:{renderHeader({column:e}){return e.label||""},renderCell({column:e,row:t,store:l,expanded:n}){const{ns:a}=l,s=[a.e("expand-icon")];!e.renderExpand&&n&&s.push(a.em("expand-icon","expanded"));const u=function(o){o.stopPropagation(),l.toggleRowExpansion(t)};return q("button",{type:"button","aria-label":l.t(n?"el.table.collapseRowLabel":"el.table.expandRowLabel"),"aria-expanded":n,class:s,onClick:u},{default:()=>e.renderExpand?[e.renderExpand({expanded:n})]:[q(We,null,{default:()=>[q(It)]})]})},sortable:!1,resizable:!1}};function Ui({row:e,column:t,$index:l}){var n;const a=t.property,s=a&&On(e,a).value;return t&&t.formatter?t.formatter(e,t,s,l):((n=s?.toString)==null?void 0:n.call(s))||""}function ji({row:e,treeNode:t,store:l},n=!1){const{ns:a}=l;if(!t)return n?[q("span",{class:a.e("placeholder")})]:null;const s=[],u=function(o){o.stopPropagation(),!t.loading&&l.loadOrToggle(e)};if(t.indent&&s.push(q("span",{class:a.e("indent"),style:{"padding-left":`${t.indent}px`}})),lt(t.expanded)&&!t.noLazyChildren){const o=[a.e("expand-icon"),t.expanded?a.em("expand-icon","expanded"):""];let r=It;t.loading&&(r=to),s.push(q("button",{type:"button","aria-label":l.t(t.expanded?"el.table.collapseRowLabel":"el.table.expandRowLabel"),"aria-expanded":t.expanded,class:o,onClick:u},{default:()=>[q(We,{class:a.is("loading",t.loading)},{default:()=>[q(r)]})]}))}else s.push(q("span",{class:a.e("placeholder")}));return s}function xn(e,t){return e.reduce((l,n)=>(l[n]=n,l),t)}function qi(e,t){const l=Se();return{registerComplexWatchers:()=>{const s=["fixed"],u={realWidth:"width",realMinWidth:"minWidth"},o=xn(s,u);Object.keys(o).forEach(r=>{const i=u[r];bt(t,i)&&pe(()=>t[i],c=>{let f=c;i==="width"&&r==="realWidth"&&(f=ql(c)),i==="minWidth"&&r==="realMinWidth"&&(f=sa(c)),l.columnConfig.value[i]=f,l.columnConfig.value[r]=f;const v=i==="fixed";e.value.store.scheduleLayout(v)})})},registerNormalWatchers:()=>{const s=["label","filters","filterMultiple","filteredValue","sortable","index","formatter","className","labelClassName","filterClassName","showOverflowTooltip","tooltipFormatter","resizable"],u=["showOverflowTooltip"],o={property:"prop",align:"realAlign",headerAlign:"realHeaderAlign"},r=xn(s,o);Object.keys(r).forEach(i=>{const c=o[i];bt(t,c)&&pe(()=>t[c],f=>{l.columnConfig.value[i]=f,(i==="filters"||i==="filterMethod")&&(l.columnConfig.value.filterable=!!(l.columnConfig.value.filters||l.columnConfig.value.filterMethod))})}),u.forEach(i=>{bt(e.value.props,i)&&pe(()=>e.value.props[i],c=>{l.columnConfig.value[i]=c})})}}}function Yi(e,t,l){const n=Se(),a=S(""),s=S(!1),u=S(),o=S(),r=re("table");Jt(()=>{u.value=e.align?`is-${e.align}`:null,u.value}),Jt(()=>{o.value=e.headerAlign?`is-${e.headerAlign}`:u.value,o.value});const i=I(()=>{let h=n.vnode.vParent||n.parent;for(;h&&!h.tableId&&!h.columnId;)h=h.vnode.vParent||h.parent;return h}),c=I(()=>{const{store:h}=n.parent;if(!h)return!1;const{treeData:g}=h.states,x=g.value;return x&&Object.keys(x).length>0}),f=S(ql(e.width)),v=S(sa(e.minWidth)),d=h=>(f.value&&(h.width=f.value),v.value&&(h.minWidth=v.value),!f.value&&v.value&&(h.width=void 0),h.minWidth||(h.minWidth=80),h.realWidth=Number(Te(h.width)?h.minWidth:h.width),h),p=h=>{const g=h.type,x=Di[g]||{};Object.keys(x).forEach(_=>{const L=x[_];_!=="className"&&!Te(L)&&(h[_]=L)});const C=Ki(g);if(C){const _=`${y(r.namespace)}-${C}`;h.className=h.className?`${h.className} ${_}`:_}return h},m=h=>{Me(h)?h.forEach(x=>g(x)):g(h);function g(x){var C;((C=x?.type)==null?void 0:C.name)==="ElTableColumn"&&(x.vParent=n)}};return{columnId:a,realAlign:u,isSubColumn:s,realHeaderAlign:o,columnOrTableParent:i,setColumnWidth:d,setColumnForcedProps:p,setColumnRenders:h=>{e.renderHeader||h.type!=="selection"&&(h.renderHeader=x=>{if(n.columnConfig.value.label,t.header){const C=t.header(x);if(ua(C))return q(He,C)}return ce(h.label)}),t["filter-icon"]&&(h.renderFilterIcon=x=>ue(t,"filter-icon",x)),t.expand&&(h.renderExpand=x=>ue(t,"expand",x));let g=h.renderCell;return h.type==="expand"?(h.renderCell=x=>q("div",{class:"cell"},[g(x)]),l.value.renderExpanded=x=>t.default?t.default(x):t.default):(g=g||Ui,h.renderCell=x=>{let C=null;if(t.default){const G=t.default(x);C=G.some(Y=>Y.type!==Bn)?G:g(x)}else C=g(x);const{columns:_}=l.value.store.states,L=_.value.findIndex(G=>G.type==="default"),F=c.value&&x.cellIndex===L,V=ji(x,F),B={class:"cell",style:{}};return h.showOverflowTooltip&&(B.class=`${B.class} ${y(r.namespace)}-tooltip`,B.style={width:`${(x.column.realWidth||Number(x.column.width))-1}px`}),m(C),q("div",B,[V,C])}),h},getPropsData:(...h)=>h.reduce((g,x)=>(Me(x)&&x.forEach(C=>{g[C]=e[C]}),g),{}),getColumnElIndex:(h,g)=>Array.prototype.indexOf.call(h,g),updateColumnOrder:()=>{l.value.store.commit("updateColumnOrder",n.columnConfig.value)}}}var Xi={type:{type:String,default:"default"},label:String,className:String,labelClassName:String,property:String,prop:String,width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},renderHeader:Function,sortable:{type:[Boolean,String],default:!1},sortMethod:Function,sortBy:[String,Function,Array],resizable:{type:Boolean,default:!0},columnKey:String,align:String,headerAlign:String,showOverflowTooltip:{type:[Boolean,Object],default:void 0},tooltipFormatter:Function,fixed:[Boolean,String],formatter:Function,selectable:Function,reserveSelection:Boolean,filterMethod:Function,filteredValue:Array,filters:Array,filterPlacement:String,filterMultiple:{type:Boolean,default:!0},filterClassName:String,index:[Number,Function],sortOrders:{type:Array,default:()=>["ascending","descending",null],validator:e=>e.every(t=>["ascending","descending",null].includes(t))}};let Gi=1;var _a=le({name:"ElTableColumn",components:{ElCheckbox:Lt},props:Xi,setup(e,{slots:t}){const l=Se(),n=S({}),a=I(()=>{let E=l.parent;for(;E&&!E.tableId;)E=E.parent;return E}),{registerNormalWatchers:s,registerComplexWatchers:u}=qi(a,e),{columnId:o,isSubColumn:r,realHeaderAlign:i,columnOrTableParent:c,setColumnWidth:f,setColumnForcedProps:v,setColumnRenders:d,getPropsData:p,getColumnElIndex:m,realAlign:w,updateColumnOrder:P}=Yi(e,t,a),O=c.value;o.value=`${"tableId"in O&&O.tableId||"columnId"in O&&O.columnId}_column_${Gi++}`,Vn(()=>{r.value=a.value!==O;const E=e.type||"default",h=e.sortable===""?!0:e.sortable,g=E==="selection"?!1:Te(e.showOverflowTooltip)?O.props.showOverflowTooltip:e.showOverflowTooltip,x=Te(e.tooltipFormatter)?O.props.tooltipFormatter:e.tooltipFormatter,C={...zi[E],id:o.value,type:E,property:e.prop||e.property,align:w,headerAlign:i,showOverflowTooltip:g,tooltipFormatter:x,filterable:e.filters||e.filterMethod,filteredValue:[],filterPlacement:"",filterClassName:"",isColumnGroup:!1,isSubColumn:!1,filterOpened:!1,sortable:h,index:e.index,rawColumnKey:l.vnode.key};let B=p(["columnKey","label","className","labelClassName","type","renderHeader","formatter","fixed","resizable"],["sortMethod","sortBy","sortOrders"],["selectable","reserveSelection"],["filterMethod","filters","filterMultiple","filterOpened","filteredValue","filterPlacement","filterClassName"]);B=jr(C,B),B=Yr(d,f,v)(B),n.value=B,s(),u()}),Ue(()=>{var E,h;const g=c.value,x=r.value?(E=g.vnode.el)==null?void 0:E.children:(h=g.refs.hiddenColumns)==null?void 0:h.children,C=()=>m(x||[],l.vnode.el);n.value.getColumnIndex=C,C()>-1&&a.value.store.commit("insertColumn",n.value,r.value?"columnConfig"in g&&g.columnConfig.value:null,P)}),et(()=>{const E=n.value.getColumnIndex;(E?E():-1)>-1&&a.value.store.commit("removeColumn",n.value,r.value?"columnConfig"in O&&O.columnConfig.value:null,P)}),l.columnId=o.value,l.columnConfig=n},render(){var e,t,l;try{const n=(t=(e=this.$slots).default)==null?void 0:t.call(e,{row:{},column:{},$index:-1}),a=[];if(Me(n))for(const u of n)((l=u.type)==null?void 0:l.name)==="ElTableColumn"||u.shapeFlag&2?a.push(u):u.type===He&&Me(u.children)&&u.children.forEach(o=>{o?.patchFlag!==1024&&!ye(o?.children)&&a.push(o)});return q("div",a)}catch{return q("div",[])}}});const Ji=st(Wi,{TableColumn:_a}),Qi=Ge(_a),ol=Symbol("tabsRootContextKey"),Zi=ze({tabs:{type:Re(Array),default:()=>At([])},tabRefs:{type:Re(Object),default:()=>At({})}}),xa="ElTabBar",eu=le({name:xa}),tu=le({...eu,props:Zi,setup(e,{expose:t}){const l=e,n=_e(ol);n||Ze(xa,"");const a=re("tabs"),s=S(),u=S(),o=I(()=>{var d;return Te(n.props.defaultValue)||!!((d=u.value)!=null&&d.transform)}),r=()=>{let d=0,p=0;const m=["top","bottom"].includes(n.props.tabPosition)?"width":"height",w=m==="width"?"x":"y",P=w==="x"?"left":"top";return l.tabs.every(O=>{if(Te(O.paneName))return!1;const E=l.tabRefs[O.paneName];if(!E)return!1;if(!O.active)return!0;d=E[`offset${nt(P)}`],p=E[`client${nt(m)}`];const h=window.getComputedStyle(E);return m==="width"&&(p-=Number.parseFloat(h.paddingLeft)+Number.parseFloat(h.paddingRight),d+=Number.parseFloat(h.paddingLeft)),!1}),{[m]:`${p}px`,transform:`translate${nt(w)}(${d}px)`}},i=()=>u.value=r(),c=[],f=()=>{c.forEach(d=>d.stop()),c.length=0,Object.values(l.tabRefs).forEach(d=>{c.push(wt(d,i))})};pe(()=>l.tabs,async()=>{await $e(),i(),f()},{immediate:!0});const v=wt(s,()=>i());return et(()=>{c.forEach(d=>d.stop()),c.length=0,v.stop()}),t({ref:s,update:i}),(d,p)=>y(o)?(z(),te("div",{key:0,ref_key:"barRef",ref:s,class:Q([y(a).e("active-bar"),y(a).is(y(n).props.tabPosition)]),style:De(u.value)},null,6)):he("v-if",!0)}});var lu=xe(tu,[["__file","tab-bar.vue"]]);const nu=ze({panes:{type:Re(Array),default:()=>At([])},currentName:{type:[String,Number],default:""},editable:Boolean,type:{type:String,values:["card","border-card",""],default:""},stretch:Boolean,tabindex:{type:[String,Number],default:void 0}}),au={tabClick:(e,t,l)=>l instanceof Event,tabRemove:(e,t)=>t instanceof Event},En="ElTabNav",ou=le({name:En,props:nu,emits:au,setup(e,{expose:t,emit:l}){const n=_e(ol);n||Ze(En,"");const a=re("tabs"),s=Ko(),u=Do(),o=S(),r=S(),i=S(),c=S({}),f=S(),v=S(!1),d=S(0),p=S(!1),m=S(!0),w=xl(),P=I(()=>["top","bottom"].includes(n.props.tabPosition)),O=I(()=>P.value?"width":"height"),E=I(()=>({transform:`translate${O.value==="width"?"X":"Y"}(-${d.value}px)`})),{width:h,height:g}=dn(o),{width:x,height:C}=dn(r,{width:0,height:0},{box:"border-box"}),_=I(()=>P.value?h.value:g.value),L=I(()=>P.value?x.value:C.value),{onWheel:F}=Kr({atStartEdge:I(()=>d.value<=0),atEndEdge:I(()=>L.value-d.value<=_.value),layout:I(()=>P.value?"horizontal":"vertical")},k=>{d.value=xo(d.value+k,0,L.value-_.value)}),V=()=>{if(!o.value)return;const k=o.value[`offset${nt(O.value)}`],W=d.value;if(!W)return;const R=W>k?W-k:0;d.value=R},B=()=>{if(!o.value||!r.value)return;const k=r.value[`offset${nt(O.value)}`],W=o.value[`offset${nt(O.value)}`],R=d.value;if(k-R<=W)return;const K=k-R>W*2?R+W:k-W;d.value=K},G=async()=>{const k=r.value;if(!v.value||!i.value||!o.value||!k)return;await $e();const W=c.value[e.currentName];if(!W)return;const R=o.value,K=W.getBoundingClientRect(),U=R.getBoundingClientRect(),Z=P.value?k.offsetWidth-U.width:k.offsetHeight-U.height,ne=d.value;let me=ne;P.value?(K.leftU.right&&(me=ne+K.right-U.right)):(K.topU.bottom&&(me=ne+(K.bottom-U.bottom))),me=Math.max(me,0),d.value=Math.min(me,Z)},Y=()=>{var k;if(!r.value||!o.value)return;e.stretch&&((k=f.value)==null||k.update());const W=r.value[`offset${nt(O.value)}`],R=o.value[`offset${nt(O.value)}`],K=d.value;R0&&(d.value=0))},ie=k=>{const W=Ct(k);let R=0;switch(W){case ve.left:case ve.up:R=-1;break;case ve.right:case ve.down:R=1;break;default:return}const K=Array.from(k.currentTarget.querySelectorAll("[role=tab]:not(.is-disabled)"));let Z=K.indexOf(k.target)+R;Z<0?Z=K.length-1:Z>=K.length&&(Z=0),K[Z].focus({preventScroll:!0}),K[Z].click(),J()},J=()=>{m.value&&(p.value=!0)},N=()=>p.value=!1,$=(k,W)=>{c.value[W]=k},H=async()=>{await $e();const k=c.value[e.currentName];k?.focus({preventScroll:!0})};return pe(s,k=>{k==="hidden"?m.value=!1:k==="visible"&&setTimeout(()=>m.value=!0,50)}),pe(u,k=>{k?setTimeout(()=>m.value=!0,50):m.value=!1}),wt(i,Y),Ue(()=>setTimeout(()=>G(),0)),zn(()=>Y()),t({scrollToActiveTab:G,removeFocus:N,focusActiveTab:H,tabListRef:r,tabBarRef:f,scheduleRender:()=>Dt(w)}),()=>{const k=v.value?[M("span",{class:[a.e("nav-prev"),a.is("disabled",!v.value.prev)],onClick:V},[M(We,null,{default:()=>[M(lo,null,null)]})]),M("span",{class:[a.e("nav-next"),a.is("disabled",!v.value.next)],onClick:B},[M(We,null,{default:()=>[M(It,null,null)]})])]:null,W=e.panes.map((R,K)=>{var U,Z,ne,me,Ce;const ke=R.uid,Pe=R.props.disabled,Ke=(Z=(U=R.props.name)!=null?U:R.index)!=null?Z:`${K}`,tt=!Pe&&(R.isClosable||R.props.closable!==!1&&e.editable);R.index=`${K}`;const xt=tt?M(We,{class:"is-icon-close",onClick:Le=>l("tabRemove",R,Le)},{default:()=>[M(Mn,null,null)]}):null,Et=((me=(ne=R.slots).label)==null?void 0:me.call(ne))||R.props.label,ft=!Pe&&R.active?(Ce=e.tabindex)!=null?Ce:n.props.tabindex:-1;return M("div",{ref:Le=>$(Le,Ke),class:[a.e("item"),a.is(n.props.tabPosition),a.is("active",R.active),a.is("disabled",Pe),a.is("closable",tt),a.is("focus",p.value)],id:`tab-${Ke}`,key:`tab-${ke}`,"aria-controls":`pane-${Ke}`,role:"tab","aria-selected":R.active,tabindex:ft,onFocus:()=>J(),onBlur:()=>N(),onClick:Le=>{N(),l("tabClick",R,Ke,Le)},onKeydown:Le=>{const vt=Ct(Le);tt&&(vt===ve.delete||vt===ve.backspace)&&l("tabRemove",R,Le)}},[Et,xt])});return w.value,M("div",{ref:i,class:[a.e("nav-wrap"),a.is("scrollable",!!v.value),a.is(n.props.tabPosition)]},[k,M("div",{class:a.e("nav-scroll"),ref:o},[e.panes.length>0?M("div",{class:[a.e("nav"),a.is(n.props.tabPosition),a.is("stretch",e.stretch&&["top","bottom"].includes(n.props.tabPosition))],ref:r,style:E.value,role:"tablist",onKeydown:ie,onWheel:F},[e.type?null:M(lu,{ref:f,tabs:[...e.panes],tabRefs:c.value},null),W]):null])])}}}),su=ze({type:{type:String,values:["card","border-card",""],default:""},closable:Boolean,addable:Boolean,modelValue:{type:[String,Number]},defaultValue:{type:[String,Number]},editable:Boolean,tabPosition:{type:String,values:["top","right","bottom","left"],default:"top"},beforeLeave:{type:Re(Function),default:()=>!0},stretch:Boolean,tabindex:{type:[String,Number],default:0}}),wl=e=>ye(e)||at(e),ru={[ll]:e=>wl(e),tabClick:(e,t)=>t instanceof Event,tabChange:e=>wl(e),edit:(e,t)=>["remove","add"].includes(t),tabRemove:e=>wl(e),tabAdd:()=>!0},iu=le({name:"ElTabs",props:su,emits:ru,setup(e,{emit:t,slots:l,expose:n}){var a;const s=re("tabs"),u=I(()=>["left","right"].includes(e.tabPosition)),{children:o,addChild:r,removeChild:i,ChildrenSorter:c}=Ts(Se(),"ElTabPane"),f=S(),v=S((a=Te(e.modelValue)?e.defaultValue:e.modelValue)!=null?a:"0"),d=async(E,h=!1)=>{var g,x,C,_;if(!(v.value===E||Te(E)))try{let L;if(e.beforeLeave){const F=e.beforeLeave(E,v.value);L=F instanceof Promise?await F:F}else L=!0;if(L!==!1){const F=(g=o.value.find(V=>V.paneName===v.value))==null?void 0:g.isFocusInsidePane();v.value=E,h&&(t(ll,E),t("tabChange",E)),(C=(x=f.value)==null?void 0:x.removeFocus)==null||C.call(x),F&&((_=f.value)==null||_.focusActiveTab())}}catch{}},p=(E,h,g)=>{E.props.disabled||(t("tabClick",E,g),d(h,!0))},m=(E,h)=>{E.props.disabled||Te(E.props.name)||(h.stopPropagation(),t("edit",E.props.name,"remove"),t("tabRemove",E.props.name))},w=()=>{t("edit",void 0,"add"),t("tabAdd")},P=E=>{const h=Ct(E);[ve.enter,ve.numpadEnter].includes(h)&&w()},O=E=>{const h=E.el.firstChild,g=["bottom","right"].includes(e.tabPosition)?E.children[0].el:E.children[1].el;h!==g&&h.before(g)};return pe(()=>e.modelValue,E=>d(E)),pe(v,async()=>{var E;await $e(),(E=f.value)==null||E.scrollToActiveTab()}),St(ol,{props:e,currentName:v,registerPane:r,unregisterPane:i,nav$:f}),n({currentName:v,get tabNavRef(){return fo(f.value,["scheduleRender"])}}),()=>{const E=l["add-icon"],h=e.editable||e.addable?M("div",{class:[s.e("new-tab"),u.value&&s.e("new-tab-vertical")],tabindex:e.tabindex,onClick:w,onKeydown:P},[E?ue(l,"add-icon"):M(We,{class:s.is("icon-plus")},{default:()=>[M(no,null,null)]})]):null,g=()=>M(ou,{ref:f,currentName:v.value,editable:e.editable,type:e.type,panes:o.value,stretch:e.stretch,onTabClick:p,onTabRemove:m},null),x=M("div",{class:[s.e("header"),u.value&&s.e("header-vertical"),s.is(e.tabPosition)]},[M(c,null,{default:g,$stable:!0}),h]),C=M("div",{class:s.e("content")},[ue(l,"default")]);return M("div",{class:[s.b(),s.m(e.tabPosition),{[s.m("card")]:e.type==="card",[s.m("border-card")]:e.type==="border-card"}],onVnodeMounted:O,onVnodeUpdated:O},[C,x])}}});var uu=iu;const du=ze({label:{type:String,default:""},name:{type:[String,Number]},closable:{type:Boolean,default:void 0},disabled:Boolean,lazy:Boolean}),Ea="ElTabPane",cu=le({name:Ea}),fu=le({...cu,props:du,setup(e){const t=e,l=Se(),n=Kl(),a=_e(ol);a||Ze(Ea,"usage: ");const s=re("tab-pane"),u=S(),o=S(),r=I(()=>{var m;return(m=t.closable)!=null?m:a.props.closable}),i=un(()=>{var m;return a.currentName.value===((m=t.name)!=null?m:o.value)}),c=S(i.value),f=I(()=>{var m;return(m=t.name)!=null?m:o.value}),v=un(()=>!t.lazy||c.value||i.value),d=()=>{var m;return(m=u.value)==null?void 0:m.contains(document.activeElement)};pe(i,m=>{m&&(c.value=!0)});const p=Qe({uid:l.uid,getVnode:()=>l.vnode,slots:n,props:t,paneName:f,active:i,index:o,isClosable:r,isFocusInsidePane:d});return a.registerPane(p),et(()=>{a.unregisterPane(p)}),Xo(()=>{var m;n.label&&((m=a.nav$.value)==null||m.scheduleRender())}),(m,w)=>y(v)?Fe((z(),te("div",{key:0,id:`pane-${y(f)}`,ref_key:"paneRef",ref:u,class:Q(y(s).b()),role:"tabpanel","aria-hidden":!y(i),"aria-labelledby":`tab-${y(f)}`},[ue(m.$slots,"default")],10,["id","aria-hidden","aria-labelledby"])),[[dt,y(i)]]):he("v-if",!0)}});var ka=xe(fu,[["__file","tab-pane.vue"]]);const vu=st(uu,{TabPane:ka}),pu=Ge(ka);function mu(e,t){let l;const n=S(!1),a=Qe({...e,originalPosition:"",originalOverflow:"",visible:!1});function s(d){a.text=d}function u(){const d=a.parent,p=v.ns;if(!d.vLoadingAddClassList){let m=d.getAttribute("loading-number");m=Number.parseInt(m)-1,m?d.setAttribute("loading-number",m.toString()):(Ve(d,p.bm("parent","relative")),d.removeAttribute("loading-number")),Ve(d,p.bm("parent","hidden"))}o(),f.unmount()}function o(){var d,p;(p=(d=v.$el)==null?void 0:d.parentNode)==null||p.removeChild(v.$el)}function r(){var d;e.beforeClose&&!e.beforeClose()||(n.value=!0,clearTimeout(l),l=setTimeout(i,400),a.visible=!1,(d=e.closed)==null||d.call(e))}function i(){if(!n.value)return;const d=a.parent;n.value=!1,d.vLoadingAddClassList=void 0,u()}const c=le({name:"ElLoading",setup(d,{expose:p}){const{ns:m,zIndex:w}=ao("loading");return p({ns:m,zIndex:w}),()=>{const P=a.spinner||a.svg,O=q("svg",{class:"circular",viewBox:a.svgViewBox?a.svgViewBox:"0 0 50 50",...P?{innerHTML:P}:{}},[q("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none"})]),E=a.text?q("p",{class:m.b("text")},[a.text]):void 0;return q(al,{name:m.b("fade"),onAfterLeave:i},{default:A(()=>[Fe(M("div",{style:{backgroundColor:a.background||""},class:[m.b("mask"),a.customClass,m.is("fullscreen",a.fullscreen)]},[q("div",{class:m.b("spinner")},[O,E])]),[[dt,a.visible]])])})}}}),f=Go(c);Object.assign(f._context,t??{});const v=f.mount(document.createElement("div"));return{...Hn(a),setText:s,removeElLoadingChild:o,close:r,handleAfterLeave:i,vm:v,get $el(){return v.$el}}}let zt;const Ql=function(e={},t){if(!ot)return;const l=hu(e);if(l.fullscreen&&zt)return zt;const n=mu({...l,closed:()=>{var s;(s=l.closed)==null||s.call(l),l.fullscreen&&(zt=void 0)}},t??Ql._context);gu(l,l.parent,n),kn(l,l.parent,n),l.parent.vLoadingAddClassList=()=>kn(l,l.parent,n);let a=l.parent.getAttribute("loading-number");return a?a=`${Number.parseInt(a)+1}`:a="1",l.parent.setAttribute("loading-number",a),l.parent.appendChild(n.$el),$e(()=>n.visible.value=l.visible),l.fullscreen&&(zt=n),n},hu=e=>{var t,l,n,a;let s;return ye(e.target)?s=(t=document.querySelector(e.target))!=null?t:document.body:s=e.target||document.body,{parent:s===document.body||e.body?document.body:s,background:e.background||"",svg:e.svg||"",svgViewBox:e.svgViewBox||"",spinner:e.spinner||!1,text:e.text||"",fullscreen:s===document.body&&((l=e.fullscreen)!=null?l:!0),lock:(n=e.lock)!=null?n:!1,customClass:e.customClass||"",visible:(a=e.visible)!=null?a:!0,beforeClose:e.beforeClose,closed:e.closed,target:s}},gu=async(e,t,l)=>{const{nextZIndex:n}=l.vm.zIndex||l.vm._.exposed.zIndex,a={};if(e.fullscreen)l.originalPosition.value=Mt(document.body,"position"),l.originalOverflow.value=Mt(document.body,"overflow"),a.zIndex=n();else if(e.parent===document.body){l.originalPosition.value=Mt(document.body,"position"),await $e();for(const s of["top","left"]){const u=s==="top"?"scrollTop":"scrollLeft";a[s]=`${e.target.getBoundingClientRect()[s]+document.body[u]+document.documentElement[u]-Number.parseInt(Mt(document.body,`margin-${s}`),10)}px`}for(const s of["height","width"])a[s]=`${e.target.getBoundingClientRect()[s]}px`}else l.originalPosition.value=Mt(t,"position");for(const[s,u]of Object.entries(a))l.$el.style[s]=u},kn=(e,t,l)=>{const n=l.vm.ns||l.vm._.exposed.ns;["absolute","fixed","sticky"].includes(l.originalPosition.value)?Ve(t,n.bm("parent","relative")):Xe(t,n.bm("parent","relative")),e.fullscreen&&e.lock?Xe(t,n.bm("parent","hidden")):Ve(t,n.bm("parent","hidden"))};Ql._context=null;const Rt=Symbol("ElLoading"),it=e=>`element-loading-${Jo(e)}`,Nn=(e,t)=>{var l,n,a,s;const u=t.instance,o=d=>ct(t.value)?t.value[d]:void 0,r=d=>{const p=ye(d)&&u?.[d]||d;return S(p)},i=d=>r(o(d)||e.getAttribute(it(d))),c=(l=o("fullscreen"))!=null?l:t.modifiers.fullscreen,f={text:i("text"),svg:i("svg"),svgViewBox:i("svgViewBox"),spinner:i("spinner"),background:i("background"),customClass:i("customClass"),fullscreen:c,target:(n=o("target"))!=null?n:c?void 0:e,body:(a=o("body"))!=null?a:t.modifiers.body,lock:(s=o("lock"))!=null?s:t.modifiers.lock},v=Ql(f);v._context=Zl._context,e[Rt]={options:f,instance:v}},bu=(e,t)=>{for(const l of Object.keys(e))Wn(e[l])&&(e[l].value=t[l])},Zl={mounted(e,t){t.value&&Nn(e,t)},updated(e,t){const l=e[Rt];if(!t.value){l?.instance.close(),e[Rt]=null;return}l?bu(l.options,ct(t.value)?t.value:{text:e.getAttribute(it("text")),svg:e.getAttribute(it("svg")),svgViewBox:e.getAttribute(it("svgViewBox")),spinner:e.getAttribute(it("spinner")),background:e.getAttribute(it("background")),customClass:e.getAttribute(it("customClass"))}):Nn(e,t)},unmounted(e){var t;(t=e[Rt])==null||t.instance.close(),e[Rt]=null}};Zl._context=null;async function yu(){const{data:e}=await nl.get("/announcements/active");return e}async function Cu(e){const{data:t}=await nl.post(`/announcements/${e}/dismiss`,{});return t}async function wu(e){const{data:t}=await nl.post("/feedback",e);return t}async function Su(){const{data:e}=await nl.get("/feedback");return e}function _u(e){if(!e||typeof e!="object")throw new Error("Passkey参数无效");return e.publicKey&&typeof e.publicKey=="object"?e.publicKey:e}function Sl(e){const t=String(e||""),l="=".repeat((4-t.length%4)%4),n=(t+l).replace(/-/g,"+").replace(/_/g,"/"),a=window.atob(n),s=new Uint8Array(a.length);for(let u=0;u({...n,id:Sl(n.id)}))),l}function Eu(e){if(!e)return null;const t=e.response||{},l={id:e.id,rawId:mt(e.rawId),type:e.type,authenticatorAttachment:e.authenticatorAttachment||void 0,response:{}};return t.clientDataJSON&&(l.response.clientDataJSON=mt(t.clientDataJSON)),t.attestationObject&&(l.response.attestationObject=mt(t.attestationObject)),t.authenticatorData&&(l.response.authenticatorData=mt(t.authenticatorData)),t.signature&&(l.response.signature=mt(t.signature)),t.userHandle?l.response.userHandle=mt(t.userHandle):l.response.userHandle=null,typeof t.getTransports=="function"&&(l.response.transports=t.getTransports()||[]),l}function ku(){return typeof window<"u"&&window.isSecureContext&&!!window.PublicKeyCredential&&!!navigator.credentials}function Nu(){const e=String(window?.navigator?.userAgent||"");return/MiuiBrowser|XiaoMi\/MiuiBrowser/i.test(e)}function Tu(e,t="Passkey操作"){const l=String(e?.name||"").trim(),n=String(e?.message||"").trim();return l==="NotAllowedError"?`${t}未完成(可能已取消、超时或设备未响应)`:l==="NotReadableError"?/credential manager/i.test(n)&&Nu()?"当前小米浏览器与系统凭据管理器兼容性较差,请改用系统 Chrome 或 Edge 后重试。":/credential manager/i.test(n)?"系统凭据管理器返回异常,请确认已设置系统锁屏并改用系统 Chrome/Edge 后重试。":n||`${t}失败(设备读取异常)`:l==="SecurityError"?"当前环境安全策略不满足 Passkey 要求,请确认使用 HTTPS 且证书有效。":n||`${t}失败`}async function Mu(e){const t=xu(e),l=await navigator.credentials.create({publicKey:t});return Eu(l)}const Ru={class:"header-left"},Ou={class:"header-right"},$u={class:"user-meta"},Pu={class:"user-name"},Lu={key:2,class:"vip-warn"},Au={class:"drawer-user"},Iu={class:"user-name"},Fu={class:"drawer-actions"},Bu={class:"announcement-body"},Hu={class:"announcement-content"},Wu={key:0,class:"announcement-image"},Vu=["src"],zu={class:"feedback-title"},Ku={class:"feedback-title-text"},Du={class:"feedback-time app-muted"},Uu={class:"feedback-body"},ju={class:"feedback-section"},qu={class:"feedback-text"},Yu={key:0,class:"feedback-section"},Xu={class:"feedback-text"},Gu={class:"settings-section"},Ju={class:"email-row"},Qu={class:"email-value"},Zu={class:"notify-row"},ed={class:"settings-section"},td={class:"settings-section"},ld={class:"settings-section"},nd={class:"settings-section"},ad={key:0,class:"vip-info"},od={class:"vip-line"},sd={class:"vip-line"},rd={key:1,class:"vip-info"},id=24e4,ud={__name:"AppLayout",setup(e){const t=Qo(),l=Zo(),n=vo(),a=S(!1),s=S(!1);let u;const o=S(!1),r=S(null),i=S(!1),c=(()=>{try{const T=window.performance?.timeOrigin;if(typeof T=="number"&&Number.isFinite(T))return String(T)}catch{}return String(Date.now())})();function f(T){return`announcement_closed_once_${T}`}function v(T){return`announcement_closed_${T}`}function d(T){try{return window.sessionStorage.getItem(f(T))===c}catch{return!1}}function p(T){try{return window.localStorage.getItem(v(T))==="1"}catch{return!1}}function m(T){try{window.sessionStorage.setItem(f(T),c)}catch{}}function w(T){try{window.localStorage.setItem(v(T),"1")}catch{}}const P=S(!1),O=S("new"),E=S(!1),h=S(!1),g=S([]),x=Qe({title:"",description:"",contact:""}),C=S(!1),_=S("email"),L=S(!1),F=S(!1),V=Qe({email:"",email_verified:!1}),B=S(""),G=S(!1),Y=S(!0),ie=S(!1),J=Qe({current_password:"",new_password:"",confirm_password:""}),N=S(!1),$=S(!1),H=S(""),k=S(!1),W=S(!1),R=S(""),K=S([]),U=S(null),Z=S(0);function ne(){a.value=!!u?.matches,a.value||(s.value=!1)}Ue(()=>{u=window.matchMedia("(max-width: 768px)"),u.addEventListener?.("change",ne),ne(),n.refreshVipInfo().catch(()=>{window.location.href="/login"}),j()}),et(()=>{u?.removeEventListener?.("change",ne)});const me=[{path:"/app/accounts",label:"账号管理",icon:oo},{path:"/app/schedules",label:"定时任务",icon:so},{path:"/app/screenshots",label:"截图管理",icon:ro}],Ce=I(()=>t.path);async function ke(T){await l.push(T),s.value=!1}async function Pe(){try{await hl.confirm("确定退出登录吗?","退出登录",{confirmButtonText:"退出",cancelButtonText:"取消",type:"warning"})}catch{return}await n.logout(),window.location.href="/login"}function Ke(){O.value="new",x.title="",x.description="",x.contact="",P.value=!0}async function tt(){h.value=!0;try{const T=await Su();g.value=Array.isArray(T)?T:[]}catch{g.value=[]}finally{h.value=!1}}function xt(T){return T==="replied"?"已回复":T==="closed"?"已关闭":"待处理"}function Et(T){return T==="replied"?"success":T==="closed"?"info":"warning"}async function ft(){const T=x.title.trim(),b=x.description.trim(),ee=x.contact.trim();if(!T||!b){fe.error("标题和描述不能为空");return}E.value=!0;try{const oe=await wu({title:T,description:b,contact:ee});fe.success(oe?.message||"反馈提交成功"),P.value=!1,x.title="",x.description="",x.contact=""}catch(oe){const we=oe?.response?.data;fe.error(we?.error||"提交失败")}finally{E.value=!1}}async function Le(){C.value=!0,_.value="email",await vt()}async function vt(){await Promise.all([Ht(),sl(),rl(),kt()])}async function Ht(){L.value=!0;try{const T=await is();V.email=T?.email||"",V.email_verified=!!T?.email_verified,B.value=V.email||""}catch{V.email="",V.email_verified=!1,B.value=""}finally{L.value=!1}}async function sl(){G.value=!0;try{const T=await ds();Y.value=!!T?.enabled}catch{Y.value=!0}finally{G.value=!1}}async function rl(){N.value=!0;try{const T=await cs();H.value=T?.kdocs_unit||""}catch{H.value=""}finally{N.value=!1}}async function il(){$.value=!0;try{await rs({kdocs_unit:H.value.trim()}),fe.success("已更新表格县区设置")}catch{}finally{$.value=!1}}async function kt(){k.value=!0;try{const T=await us();K.value=Array.isArray(T?.items)?T.items:[],K.value.length<3?await Wt():(U.value=null,Z.value=0)}catch{K.value=[],U.value=null,Z.value=0}finally{k.value=!1}}function ul(){return!U.value||Date.now()-Number(Z.value||0)>id?null:U.value}async function Wt(){try{const T=await vn({});U.value=T,Z.value=Date.now()}catch{U.value=null,Z.value=0}}async function dl(){if(!ku()){fe.error("当前浏览器或环境不支持Passkey(需 HTTPS)");return}if(K.value.length>=3){fe.error("最多可绑定3台设备");return}W.value=!0;try{let T=ul();T||(T=await vn({}));const b=await Mu(T?.publicKey||{});await as({credential:b,device_name:R.value.trim()}),U.value=null,Z.value=0,R.value="",fe.success("Passkey设备添加成功"),await kt()}catch(T){try{await os({stage:"register",source:"user-settings",name:T?.name||"",message:T?.message||"",code:T?.code||"",user_agent:navigator.userAgent||""})}catch{}U.value=null,Z.value=0,await Wt();const ee=T?.response?.data?.error||Tu(T,"Passkey注册");fe.error(ee)}finally{W.value=!1}}async function cl(T){try{await hl.confirm(`确定删除设备「${T?.device_name||"未命名设备"}」吗?`,"删除Passkey设备",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}try{await ss(T.id),fe.success("设备已删除"),await kt()}catch(b){const ee=b?.response?.data;fe.error(ee?.error||"删除失败")}}async function fl(){const T=B.value.trim().toLowerCase();if(!T){fe.error("请输入邮箱地址");return}if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(T)){fe.error("邮箱格式不正确");return}F.value=!0;try{const ee=await ts({email:T});fe.success(ee?.message||"验证邮件已发送"),V.email=T,V.email_verified=!1}catch(ee){const oe=ee?.response?.data;fe.error(oe?.error||"绑定失败")}finally{F.value=!1}}async function vl(){try{await hl.confirm("确定要解绑当前邮箱吗?","解绑邮箱",{confirmButtonText:"解绑",cancelButtonText:"取消",type:"warning"})}catch{return}try{const T=await es();if(T?.success){fe.success(T?.message||"邮箱已解绑"),await Ht();return}fe.error(T?.error||"解绑失败")}catch(T){const b=T?.response?.data;fe.error(b?.error||"解绑失败")}}async function en(T){const b=Y.value;Y.value=!!T,G.value=!0;try{const ee=await ls({enabled:!!T});if(ee?.success){fe.success("已更新");return}Y.value=b,fe.error(ee?.error||"更新失败")}catch(ee){Y.value=b;const oe=ee?.response?.data;fe.error(oe?.error||"更新失败")}finally{G.value=!1}}async function pl(){const T=J.current_password,b=J.new_password,ee=J.confirm_password;if(!T||!b||!ee){fe.error("请填写完整信息");return}const oe=fs(b);if(!oe.ok){fe.error(oe.message);return}if(b!==ee){fe.error("两次输入的新密码不一致");return}ie.value=!0;try{const we=await ns({current_password:T,new_password:b});if(we?.success){fe.success("密码修改成功"),J.current_password="",J.new_password="",J.confirm_password="";return}fe.error(we?.error||"修改失败")}catch(we){const Ae=we?.response?.data;fe.error(Ae?.error||"修改失败")}finally{ie.value=!1}}async function j(){i.value=!0;try{const b=(await yu())?.announcement;if(!b?.id||p(b.id)||d(b.id))return;r.value=b,o.value=!0}catch{}finally{i.value=!1}}function ae(){const T=r.value;T?.id&&m(T.id),o.value=!1}async function se(){const T=r.value;if(!T?.id){o.value=!1;return}w(T.id);try{(await Cu(T.id))?.success&&fe.success("已永久关闭")}catch{}finally{o.value=!1}}return(T,b)=>{const ee=We,oe=Hr,we=Br,Ae=or,ge=io,qe=Eo,Na=sr,Ta=Ie("RouterView"),Ma=rr,tn=ar,Ra=yr,ml=ko,Je=Uo,Ye=Ao,Nt=Lo,rt=pu,Oa=No,ln=To,$a=js,Pa=Us,nn=vu,pt=Io,La=fr,Aa=po,Tt=Qi,Ia=Ji,Vt=Zl;return z(),de(tn,{class:"layout-root"},{default:A(()=>[a.value?he("",!0):(z(),de(Ae,{key:0,width:"220px",class:"layout-aside"},{default:A(()=>[b[19]||(b[19]=D("div",{class:"brand"},[D("div",{class:"brand-title"},"知识管理平台"),D("div",{class:"brand-sub app-muted"},"用户中心")],-1)),M(we,{"default-active":Ce.value,class:"aside-menu",router:"",onSelect:ke},{default:A(()=>[(z(),te(He,null,Pt(me,X=>M(oe,{key:X.path,index:X.path},{default:A(()=>[M(ee,null,{default:A(()=>[(z(),de(El(X.icon)))]),_:2},1024),D("span",null,be(X.label),1)]),_:2},1032,["index"])),64))]),_:1},8,["default-active"])]),_:1})),M(tn,null,{default:A(()=>[M(Na,{class:"layout-header"},{default:A(()=>[D("div",Ru,[a.value?(z(),de(ge,{key:0,text:"",class:"header-menu-btn",onClick:b[0]||(b[0]=X=>s.value=!0)},{default:A(()=>[...b[20]||(b[20]=[ce(" 菜单 ",-1)])]),_:1})):he("",!0),b[21]||(b[21]=D("div",{class:"header-title"},"用户控制台",-1))]),D("div",Ou,[D("div",$u,[y(n).isVip?(z(),de(qe,{key:0,type:"success",size:"small",effect:"light"},{default:A(()=>[...b[22]||(b[22]=[ce("VIP",-1)])]),_:1})):(z(),de(qe,{key:1,type:"info",size:"small",effect:"light"},{default:A(()=>[...b[23]||(b[23]=[ce("普通",-1)])]),_:1})),D("span",Pu,be(y(n).username||"用户"),1),y(n).isVip&&y(n).vipDaysLeft<=7&&y(n).vipDaysLeft>0?(z(),te("span",Lu," ("+be(y(n).vipDaysLeft)+"天后到期) ",1)):he("",!0)]),M(ge,{text:"",type:"primary",onClick:Ke},{default:A(()=>[...b[24]||(b[24]=[ce("反馈",-1)])]),_:1}),M(ge,{text:"",onClick:Le},{default:A(()=>[...b[25]||(b[25]=[ce("设置",-1)])]),_:1}),M(ge,{type:"primary",plain:"",onClick:Pe},{default:A(()=>[...b[26]||(b[26]=[ce("退出",-1)])]),_:1})])]),_:1}),M(Ma,{class:"layout-main"},{default:A(()=>[M(Ta)]),_:1})]),_:1}),M(Ra,{modelValue:s.value,"onUpdate:modelValue":b[1]||(b[1]=X=>s.value=X),size:"240px","with-header":!1},{default:A(()=>[b[32]||(b[32]=D("div",{class:"drawer-brand"},[D("div",{class:"brand-title"},"知识管理平台"),D("div",{class:"brand-sub app-muted"},"用户中心")],-1)),D("div",Au,[y(n).isVip?(z(),de(qe,{key:0,type:"success",size:"small",effect:"light"},{default:A(()=>[...b[27]||(b[27]=[ce("VIP",-1)])]),_:1})):(z(),de(qe,{key:1,type:"info",size:"small",effect:"light"},{default:A(()=>[...b[28]||(b[28]=[ce("普通",-1)])]),_:1})),D("span",Iu,be(y(n).username||"用户"),1)]),M(we,{"default-active":Ce.value,class:"aside-menu",router:"",onSelect:ke},{default:A(()=>[(z(),te(He,null,Pt(me,X=>M(oe,{key:X.path,index:X.path},{default:A(()=>[M(ee,null,{default:A(()=>[(z(),de(El(X.icon)))]),_:2},1024),D("span",null,be(X.label),1)]),_:2},1032,["index"])),64))]),_:1},8,["default-active"]),D("div",Fu,[M(ge,{text:"",type:"primary",style:{width:"100%"},onClick:Ke},{default:A(()=>[...b[29]||(b[29]=[ce("问题反馈",-1)])]),_:1}),M(ge,{text:"",style:{width:"100%"},onClick:Le},{default:A(()=>[...b[30]||(b[30]=[ce("个人设置",-1)])]),_:1}),M(ge,{type:"primary",plain:"",style:{width:"100%"},onClick:Pe},{default:A(()=>[...b[31]||(b[31]=[ce("退出登录",-1)])]),_:1})])]),_:1},8,["modelValue"]),M(ml,{modelValue:o.value,"onUpdate:modelValue":b[2]||(b[2]=X=>o.value=X),width:"min(560px, 92vw)",title:r.value?.title||"系统公告"},{footer:A(()=>[M(ge,{onClick:ae},{default:A(()=>[...b[33]||(b[33]=[ce("当次关闭",-1)])]),_:1}),M(ge,{type:"primary",onClick:se},{default:A(()=>[...b[34]||(b[34]=[ce("永久关闭",-1)])]),_:1})]),default:A(()=>[Fe((z(),te("div",Bu,[D("div",Hu,be(r.value?.content||""),1),r.value?.image_url?(z(),te("div",Wu,[D("img",{src:r.value.image_url,alt:"公告图片",loading:"lazy"},null,8,Vu)])):he("",!0)])),[[Vt,i.value]])]),_:1},8,["modelValue","title"]),M(ml,{modelValue:P.value,"onUpdate:modelValue":b[9]||(b[9]=X=>P.value=X),title:"问题反馈",width:"min(720px, 92vw)"},{footer:A(()=>[M(ge,{onClick:b[8]||(b[8]=X=>P.value=!1)},{default:A(()=>[...b[37]||(b[37]=[ce("关闭",-1)])]),_:1}),O.value==="list"?(z(),de(ge,{key:0,onClick:tt},{default:A(()=>[...b[38]||(b[38]=[ce("刷新",-1)])]),_:1})):he("",!0),O.value==="new"?(z(),de(ge,{key:1,type:"primary",loading:E.value,onClick:ft},{default:A(()=>[...b[39]||(b[39]=[ce("提交",-1)])]),_:1},8,["loading"])):he("",!0)]),default:A(()=>[M(nn,{modelValue:O.value,"onUpdate:modelValue":b[6]||(b[6]=X=>O.value=X),onTabChange:b[7]||(b[7]=X=>X==="list"&&tt())},{default:A(()=>[M(rt,{label:"提交反馈",name:"new"},{default:A(()=>[M(Nt,{"label-position":"top"},{default:A(()=>[M(Ye,{label:"标题"},{default:A(()=>[M(Je,{modelValue:x.title,"onUpdate:modelValue":b[3]||(b[3]=X=>x.title=X),placeholder:"简要描述问题",maxlength:"100","show-word-limit":""},null,8,["modelValue"])]),_:1}),M(Ye,{label:"详细描述"},{default:A(()=>[M(Je,{modelValue:x.description,"onUpdate:modelValue":b[4]||(b[4]=X=>x.description=X),type:"textarea",rows:5,placeholder:"请详细描述您遇到的问题",maxlength:"2000","show-word-limit":""},null,8,["modelValue"])]),_:1}),M(Ye,{label:"联系方式(可选)"},{default:A(()=>[M(Je,{modelValue:x.contact,"onUpdate:modelValue":b[5]||(b[5]=X=>x.contact=X),placeholder:"方便我们联系您"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),M(rt,{label:"我的反馈",name:"list"},{default:A(()=>[h.value?(z(),de(Oa,{key:0,rows:6,animated:""})):(z(),te(He,{key:1},[g.value.length===0?(z(),de(ln,{key:0,description:"暂无反馈"})):(z(),de(Pa,{key:1,accordion:""},{default:A(()=>[(z(!0),te(He,null,Pt(g.value,X=>(z(),de($a,{key:X.id,name:String(X.id)},{title:A(()=>[D("div",zu,[D("span",Ku,be(X.title),1),M(qe,{size:"small",effect:"light",type:Et(X.status)},{default:A(()=>[ce(be(xt(X.status)),1)]),_:2},1032,["type"]),D("span",Du,be(X.created_at||""),1)])]),default:A(()=>[D("div",Uu,[D("div",ju,[b[35]||(b[35]=D("div",{class:"feedback-label app-muted"},"描述",-1)),D("div",qu,be(X.description),1)]),X.admin_reply?(z(),te("div",Yu,[b[36]||(b[36]=D("div",{class:"feedback-label app-muted"},"管理员回复",-1)),D("div",Xu,be(X.admin_reply),1)])):he("",!0)])]),_:2},1032,["name"]))),128))]),_:1}))],64))]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["modelValue"]),M(ml,{modelValue:C.value,"onUpdate:modelValue":b[18]||(b[18]=X=>C.value=X),title:"个人设置",width:"min(720px, 92vw)"},{footer:A(()=>[M(ge,{onClick:b[17]||(b[17]=X=>C.value=!1)},{default:A(()=>[...b[50]||(b[50]=[ce("关闭",-1)])]),_:1})]),default:A(()=>[M(nn,{modelValue:_.value,"onUpdate:modelValue":b[16]||(b[16]=X=>_.value=X)},{default:A(()=>[M(rt,{label:"邮箱绑定",name:"email"},{default:A(()=>[Fe((z(),te("div",Gu,[V.email&&V.email_verified?(z(),de(pt,{key:0,type:"success",closable:!1,title:"邮箱已绑定并验证","show-icon":"",class:"settings-alert"},{default:A(()=>[D("div",Ju,[D("div",Qu,be(V.email),1),M(ge,{type:"danger",text:"",onClick:vl},{default:A(()=>[...b[40]||(b[40]=[ce("解绑",-1)])]),_:1})])]),_:1})):V.email?(z(),de(pt,{key:1,type:"warning",closable:!1,title:"邮箱待验证:请查收验证邮件(含垃圾箱)","show-icon":"",class:"settings-alert"})):he("",!0),M(Nt,{"label-position":"top"},{default:A(()=>[M(Ye,{label:"邮箱地址"},{default:A(()=>[M(Je,{modelValue:B.value,"onUpdate:modelValue":b[10]||(b[10]=X=>B.value=X),placeholder:"name@example.com"},null,8,["modelValue"])]),_:1}),M(ge,{type:"primary",loading:F.value,onClick:fl},{default:A(()=>[...b[41]||(b[41]=[ce("发送验证邮件",-1)])]),_:1},8,["loading"])]),_:1}),M(La),D("div",Zu,[b[42]||(b[42]=D("div",null,[D("div",{class:"notify-title"},"任务完成通知"),D("div",{class:"app-muted notify-desc"},"定时任务完成后发送邮件")],-1)),M(Aa,{"model-value":Y.value,disabled:!V.email_verified||G.value,"inline-prompt":"","active-text":"开","inactive-text":"关",onChange:en},null,8,["model-value","disabled"])]),V.email_verified?he("",!0):(z(),de(pt,{key:2,type:"info",closable:!1,title:"绑定并验证邮箱后可开启邮件通知。","show-icon":"",class:"settings-hint"}))])),[[Vt,L.value]])]),_:1}),M(rt,{label:"修改密码",name:"password"},{default:A(()=>[D("div",ed,[M(Nt,{"label-position":"top"},{default:A(()=>[M(Ye,{label:"当前密码"},{default:A(()=>[M(Je,{modelValue:J.current_password,"onUpdate:modelValue":b[11]||(b[11]=X=>J.current_password=X),type:"password","show-password":"",autocomplete:"current-password"},null,8,["modelValue"])]),_:1}),M(Ye,{label:"新密码(至少8位且包含字母和数字)"},{default:A(()=>[M(Je,{modelValue:J.new_password,"onUpdate:modelValue":b[12]||(b[12]=X=>J.new_password=X),type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue"])]),_:1}),M(Ye,{label:"确认新密码"},{default:A(()=>[M(Je,{modelValue:J.confirm_password,"onUpdate:modelValue":b[13]||(b[13]=X=>J.confirm_password=X),type:"password","show-password":"",autocomplete:"new-password",onKeyup:In(pl,["enter"])},null,8,["modelValue"])]),_:1}),M(ge,{type:"primary",loading:ie.value,onClick:pl},{default:A(()=>[...b[43]||(b[43]=[ce("确认修改",-1)])]),_:1},8,["loading"])]),_:1})])]),_:1}),M(rt,{label:"Passkey设备",name:"passkeys"},{default:A(()=>[Fe((z(),te("div",td,[M(pt,{type:"info",closable:!1,title:"最多可绑定3台设备,用于无密码登录。","show-icon":"",class:"settings-alert"}),M(Nt,{inline:""},{default:A(()=>[M(Ye,{label:"设备备注"},{default:A(()=>[M(Je,{modelValue:R.value,"onUpdate:modelValue":b[14]||(b[14]=X=>R.value=X),placeholder:"例如:我的iPhone / 办公Mac",maxlength:"40","show-word-limit":""},null,8,["modelValue"])]),_:1}),M(Ye,null,{default:A(()=>[M(ge,{type:"primary",loading:W.value,onClick:dl},{default:A(()=>[...b[44]||(b[44]=[ce(" 添加Passkey设备 ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),K.value.length===0?(z(),de(ln,{key:0,description:"暂无Passkey设备"})):(z(),de(Ia,{key:1,data:K.value,size:"small",style:{width:"100%"}},{default:A(()=>[M(Tt,{prop:"device_name",label:"设备备注","min-width":"160"}),M(Tt,{prop:"credential_id_preview",label:"凭据ID","min-width":"180"}),M(Tt,{prop:"last_used_at",label:"最近使用","min-width":"140"}),M(Tt,{prop:"created_at",label:"创建时间","min-width":"140"}),M(Tt,{label:"操作",width:"100",fixed:"right"},{default:A(({row:X})=>[M(ge,{type:"danger",text:"",onClick:dd=>cl(X)},{default:A(()=>[...b[45]||(b[45]=[ce("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"]))])),[[Vt,k.value]])]),_:1}),M(rt,{label:"表格上传",name:"kdocs"},{default:A(()=>[Fe((z(),te("div",ld,[M(Nt,{"label-position":"top"},{default:A(()=>[M(Ye,{label:"县区(可选)"},{default:A(()=>[M(Je,{modelValue:H.value,"onUpdate:modelValue":b[15]||(b[15]=X=>H.value=X),placeholder:"留空使用系统默认县区"},null,8,["modelValue"])]),_:1}),M(ge,{type:"primary",loading:$.value,onClick:il},{default:A(()=>[...b[46]||(b[46]=[ce("保存",-1)])]),_:1},8,["loading"])]),_:1}),M(pt,{type:"info",closable:!1,title:"自动上传开关在“账号管理”页面设置(测试功能)。","show-icon":"",class:"settings-hint"})])),[[Vt,N.value]])]),_:1}),M(rt,{label:"VIP信息",name:"vip"},{default:A(()=>[D("div",nd,[M(pt,{type:y(n).isVip?"success":"info",closable:!1,title:y(n).isVip?"当前为 VIP 会员":"当前为普通用户","show-icon":"",class:"settings-alert"},null,8,["type","title"]),y(n).isVip?(z(),te("div",ad,[D("div",od,[b[47]||(b[47]=D("span",{class:"app-muted"},"到期时间",-1)),D("span",null,be(y(n).vipExpireTime||"未知"),1)]),D("div",sd,[b[48]||(b[48]=D("span",{class:"app-muted"},"剩余天数",-1)),D("span",null,be(y(n).vipDaysLeft),1)])])):(z(),te("div",rd,[...b[49]||(b[49]=[D("div",{class:"app-muted"},"升级方式:请通过“反馈”联系管理员开通。",-1)])]))])]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["modelValue"])]),_:1})}}},Ed=vs(ud,[["__scopeId","data-v-a6c642de"]]);export{Ed as default}; diff --git a/static/app/assets/app-CfFNNMbF.js b/static/app/assets/app-Cm7xb8k5.js similarity index 95% rename from static/app/assets/app-CfFNNMbF.js rename to static/app/assets/app-Cm7xb8k5.js index 8b1c465..7fc8b15 100644 --- a/static/app/assets/app-CfFNNMbF.js +++ b/static/app/assets/app-Cm7xb8k5.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./LoginPage-D5iXLq7p.js","./vendor-vue-DxN60LNb.js","./style-CEbARg1o.js","./style-BHGuKLUF.css","./LoginPage-DTj5KeC4.css","./RegisterPage-4xFnBJCQ.js","./el-button-DWxIvzz-.js","./el-button-DF1Fi_iE.css","./el-card-DfVpO1U5.js","./el-card-BqOrgVp1.css","./el-alert-DB2IQLpH.js","./http-CdvgQxJu.js","./vendor-axios-B9ygI19o.js","./http-D6B3r8CH.css","./el-alert-B-NgiIln.css","./auth-CX9p6ZYg.js","./password-7ryi82gE.js","./RegisterPage-BOcNcW5D.css","./ResetPasswordPage-lX7l6Nbu.js","./ResetPasswordPage-DybfLMAw.css","./VerifyResultPage-bifpPyoE.js","./VerifyResultPage-efSXaaKI.css","./AppLayout-BVxPO9-W.js","./user-Bl59IefW.js","./el-overlay-C_JJBVfE.js","./el-overlay-Bd56Lw6C.css","./user-B7bO5p8k.css","./settings-Ddo8isuv.js","./isArrayLikeObject-BjIRF-cS.js","./AppLayout-eF3aodBF.css","./AccountsPage-DnOxRP7e.js","./accounts-3bM7Wy59.js","./accounts-D_6SYB2i.css","./el-select-B0VMg2td.js","./el-select-D_oyzAZN.css","./vendor-realtime-CA1CrNgP.js","./AccountsPage-iiBFNme8.css","./SchedulesPage-TUv7nqYq.js","./el-pagination-BY1uI-wO.js","./el-pagination-B1FwbX1n.css","./SchedulesPage-BIuHs5oJ.css","./ScreenshotsPage-7CRd3Hlo.js","./ScreenshotsPage-30dzddw-.css"])))=>i.map(i=>d[i]); -import{_ as v}from"./style-CEbARg1o.js";import{r as g,c as R,o as y,a as A,b as L,d as w,e as k}from"./vendor-vue-DxN60LNb.js";const V={};function O(p,l){const a=g("RouterView");return y(),R(a)}const T=v(V,[["render",O]]),b="modulepreload",D=function(p,l){return new URL(p,l).href},f={},r=function(l,a,u){let _=Promise.resolve();if(a&&a.length>0){let P=function(e){return Promise.all(e.map(s=>Promise.resolve(s).then(c=>({status:"fulfilled",value:c}),c=>({status:"rejected",reason:c}))))};const n=document.getElementsByTagName("link"),t=document.querySelector("meta[property=csp-nonce]"),h=t?.nonce||t?.getAttribute("nonce");_=P(a.map(e=>{if(e=D(e,u),e in f)return;f[e]=!0;const s=e.endsWith(".css"),c=s?'[rel="stylesheet"]':"";if(u)for(let i=n.length-1;i>=0;i--){const m=n[i];if(m.href===e&&(!s||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${e}"]${c}`))return;const o=document.createElement("link");if(o.rel=s?"stylesheet":b,s||(o.as="script"),o.crossOrigin="",o.href=e,h&&o.setAttribute("nonce",h),document.head.appendChild(o),s)return new Promise((i,m)=>{o.addEventListener("load",i),o.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${e}`)))})}))}function d(n){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=n,window.dispatchEvent(t),!t.defaultPrevented)throw n}return _.then(n=>{for(const t of n||[])t.status==="rejected"&&d(t.reason);return l().catch(d)})},I=()=>r(()=>import("./LoginPage-D5iXLq7p.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url),S=()=>r(()=>import("./RegisterPage-4xFnBJCQ.js"),__vite__mapDeps([5,6,1,7,8,9,10,11,12,13,14,15,16,2,3,17]),import.meta.url),$=()=>r(()=>import("./ResetPasswordPage-lX7l6Nbu.js"),__vite__mapDeps([18,6,1,7,8,9,10,11,12,13,14,15,16,2,3,19]),import.meta.url),E=()=>r(()=>import("./VerifyResultPage-bifpPyoE.js"),__vite__mapDeps([20,6,1,7,8,9,2,3,21]),import.meta.url),C=()=>r(()=>import("./AppLayout-BVxPO9-W.js"),__vite__mapDeps([22,6,1,7,23,11,12,13,10,14,24,25,26,27,16,2,3,28,29]),import.meta.url),B=()=>r(()=>import("./AccountsPage-DnOxRP7e.js"),__vite__mapDeps([30,6,1,7,24,11,12,13,25,10,14,23,26,31,32,33,34,8,9,27,35,2,3,36]),import.meta.url),N=()=>r(()=>import("./SchedulesPage-TUv7nqYq.js"),__vite__mapDeps([37,6,1,7,24,11,12,13,25,10,14,33,34,23,26,31,32,38,39,8,9,2,3,28,40]),import.meta.url),j=()=>r(()=>import("./ScreenshotsPage-7CRd3Hlo.js"),__vite__mapDeps([41,6,1,7,24,11,12,13,25,38,33,34,39,8,9,2,3,42]),import.meta.url),q=[{path:"/",redirect:"/login"},{path:"/login",name:"login",component:I},{path:"/register",name:"register",component:S},{path:"/reset-password/:token",name:"reset_password",component:$},{path:"/api/verify-email/:token",name:"verify_email",component:E},{path:"/api/verify-bind-email/:token",name:"verify_bind_email",component:E},{path:"/app",component:C,children:[{path:"",redirect:"/app/accounts"},{path:"accounts",name:"accounts",component:B},{path:"schedules",name:"schedules",component:N},{path:"screenshots",name:"screenshots",component:j}]},{path:"/:pathMatch(.*)*",redirect:"/login"}],x=A({history:L(),routes:q});w(T).use(k()).use(x).mount("#app"); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./LoginPage-D5iXLq7p.js","./vendor-vue-DxN60LNb.js","./style-CEbARg1o.js","./style-BHGuKLUF.css","./LoginPage-DTj5KeC4.css","./RegisterPage-4xFnBJCQ.js","./el-button-DWxIvzz-.js","./el-button-DF1Fi_iE.css","./el-card-DfVpO1U5.js","./el-card-BqOrgVp1.css","./el-alert-DB2IQLpH.js","./http-CdvgQxJu.js","./vendor-axios-B9ygI19o.js","./http-D6B3r8CH.css","./el-alert-B-NgiIln.css","./auth-CX9p6ZYg.js","./password-7ryi82gE.js","./RegisterPage-BOcNcW5D.css","./ResetPasswordPage-lX7l6Nbu.js","./ResetPasswordPage-DybfLMAw.css","./VerifyResultPage-bifpPyoE.js","./VerifyResultPage-efSXaaKI.css","./AppLayout-CJ_Pqzl7.js","./user-Bl59IefW.js","./el-overlay-C_JJBVfE.js","./el-overlay-Bd56Lw6C.css","./user-B7bO5p8k.css","./settings-Ddo8isuv.js","./isArrayLikeObject-BjIRF-cS.js","./AppLayout-B8xVcK25.css","./AccountsPage-DnOxRP7e.js","./accounts-3bM7Wy59.js","./accounts-D_6SYB2i.css","./el-select-B0VMg2td.js","./el-select-D_oyzAZN.css","./vendor-realtime-CA1CrNgP.js","./AccountsPage-iiBFNme8.css","./SchedulesPage-TUv7nqYq.js","./el-pagination-BY1uI-wO.js","./el-pagination-B1FwbX1n.css","./SchedulesPage-BIuHs5oJ.css","./ScreenshotsPage-7CRd3Hlo.js","./ScreenshotsPage-30dzddw-.css"])))=>i.map(i=>d[i]); +import{_ as v}from"./style-CEbARg1o.js";import{r as g,c as R,o as y,a as A,b as L,d as w,e as k}from"./vendor-vue-DxN60LNb.js";const V={};function O(p,l){const a=g("RouterView");return y(),R(a)}const T=v(V,[["render",O]]),b="modulepreload",D=function(p,l){return new URL(p,l).href},f={},r=function(l,a,u){let _=Promise.resolve();if(a&&a.length>0){let P=function(e){return Promise.all(e.map(s=>Promise.resolve(s).then(c=>({status:"fulfilled",value:c}),c=>({status:"rejected",reason:c}))))};const n=document.getElementsByTagName("link"),t=document.querySelector("meta[property=csp-nonce]"),h=t?.nonce||t?.getAttribute("nonce");_=P(a.map(e=>{if(e=D(e,u),e in f)return;f[e]=!0;const s=e.endsWith(".css"),c=s?'[rel="stylesheet"]':"";if(u)for(let i=n.length-1;i>=0;i--){const m=n[i];if(m.href===e&&(!s||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${e}"]${c}`))return;const o=document.createElement("link");if(o.rel=s?"stylesheet":b,s||(o.as="script"),o.crossOrigin="",o.href=e,h&&o.setAttribute("nonce",h),document.head.appendChild(o),s)return new Promise((i,m)=>{o.addEventListener("load",i),o.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${e}`)))})}))}function d(n){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=n,window.dispatchEvent(t),!t.defaultPrevented)throw n}return _.then(n=>{for(const t of n||[])t.status==="rejected"&&d(t.reason);return l().catch(d)})},I=()=>r(()=>import("./LoginPage-D5iXLq7p.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url),S=()=>r(()=>import("./RegisterPage-4xFnBJCQ.js"),__vite__mapDeps([5,6,1,7,8,9,10,11,12,13,14,15,16,2,3,17]),import.meta.url),$=()=>r(()=>import("./ResetPasswordPage-lX7l6Nbu.js"),__vite__mapDeps([18,6,1,7,8,9,10,11,12,13,14,15,16,2,3,19]),import.meta.url),E=()=>r(()=>import("./VerifyResultPage-bifpPyoE.js"),__vite__mapDeps([20,6,1,7,8,9,2,3,21]),import.meta.url),C=()=>r(()=>import("./AppLayout-CJ_Pqzl7.js"),__vite__mapDeps([22,6,1,7,23,11,12,13,10,14,24,25,26,27,16,2,3,28,29]),import.meta.url),B=()=>r(()=>import("./AccountsPage-DnOxRP7e.js"),__vite__mapDeps([30,6,1,7,24,11,12,13,25,10,14,23,26,31,32,33,34,8,9,27,35,2,3,36]),import.meta.url),N=()=>r(()=>import("./SchedulesPage-TUv7nqYq.js"),__vite__mapDeps([37,6,1,7,24,11,12,13,25,10,14,33,34,23,26,31,32,38,39,8,9,2,3,28,40]),import.meta.url),j=()=>r(()=>import("./ScreenshotsPage-7CRd3Hlo.js"),__vite__mapDeps([41,6,1,7,24,11,12,13,25,38,33,34,39,8,9,2,3,42]),import.meta.url),q=[{path:"/",redirect:"/login"},{path:"/login",name:"login",component:I},{path:"/register",name:"register",component:S},{path:"/reset-password/:token",name:"reset_password",component:$},{path:"/api/verify-email/:token",name:"verify_email",component:E},{path:"/api/verify-bind-email/:token",name:"verify_bind_email",component:E},{path:"/app",component:C,children:[{path:"",redirect:"/app/accounts"},{path:"accounts",name:"accounts",component:B},{path:"schedules",name:"schedules",component:N},{path:"screenshots",name:"screenshots",component:j}]},{path:"/:pathMatch(.*)*",redirect:"/login"}],x=A({history:L(),routes:q});w(T).use(k()).use(x).mount("#app"); diff --git a/static/app/index.html b/static/app/index.html index 9002975..0e74397 100644 --- a/static/app/index.html +++ b/static/app/index.html @@ -4,7 +4,7 @@ 知识管理平台 - +