初始化

This commit is contained in:
Ran
2026-08-25 17:59:42 +08:00
commit 4b7380dd9b
408 changed files with 327400 additions and 0 deletions
@@ -0,0 +1 @@
.admin-menu[data-v-74e38916]{gap:5px;padding:12px 1px 8px}.admin-menu--collapsed[data-v-74e38916]{padding-inline:0}.mobile-menu-trigger[data-v-209f12ce]{margin-bottom:16px;background:#fff;border:1px solid var(--color-border);box-shadow:var(--shadow-sm)}
@@ -0,0 +1 @@
import{d as A,c as a,n as g,F as M,l as $,b as r,m as E,o as s,e as o,t as L,p as d,q as N,s as R,a as t,w as S,R as U,h as W,k as f,v as C,r as F,E as O,g as P}from"./index-CcdGGfCj.js";import{_ as h}from"./http-CGjljVXL.js";import{_ as V}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{l as x}from"./logo-DSdTLzUt.js";import{u as T}from"./auth-EXu5ynQ_.js";const q=["title","onClick"],D={key:0},j=A({__name:"AdminMenu",props:{activePath:{},collapsed:{type:Boolean}},emits:["navigate"],setup(c,{emit:m}){const p=m;return(b,v)=>(s(),a("nav",{class:g(["menu admin-menu",{"admin-menu--collapsed":c.collapsed}])},[(s(!0),a(M,null,$(r(E),e=>(s(),a("button",{key:e.path,class:g(["menu-item",{active:c.activePath===e.path}]),type:"button",title:c.collapsed?e.label:void 0,onClick:l=>p("navigate",e.path)},[o(h,{name:e.icon,size:20},null,8,["name"]),c.collapsed?d("",!0):(s(),a("span",D,L(e.label),1))],10,q))),128))],2))}}),z=V(j,[["__scopeId","data-v-74e38916"]]),G={key:0,class:"sidebar"},H=["title"],J={class:"brand-mark"},K=["src"],Q={key:0},X=["title","disabled"],Y={key:0},Z={class:"brand"},ee={class:"brand-mark"},te=["src"],ae=["disabled"],se={class:"shell-main"},ne={class:"page-content"},oe=A({__name:"AdminLayout",setup(c){const m=W(),p=P(),b=T(),v=f(window.innerWidth),e=f(!1),l=f(!1),i=C(()=>v.value<1200),_=C(()=>v.value<768),w=()=>{v.value=window.innerWidth,_.value||(e.value=!1)};N(()=>window.addEventListener("resize",w,{passive:!0})),R(()=>window.removeEventListener("resize",w));async function y(){if(!l.value){try{await O.confirm("退出后需要重新登录,确定退出管理后台吗?","退出登录",{type:"warning",confirmButtonText:"退出登录",cancelButtonText:"取消"})}catch(u){if(u==="cancel"||u==="close")return;throw u}l.value=!0;try{await b.logout(),await p.replace("/login")}finally{l.value=!1}}}function k(u){p.push(u),e.value=!1}return(u,n)=>{const I=F("el-drawer");return s(),a("div",{class:g(["admin-shell",{"is-collapsed":i.value&&!_.value}])},[_.value?d("",!0):(s(),a("aside",G,[t("div",{class:"brand",title:i.value?"剧游AI":void 0},[t("span",J,[t("img",{src:r(x),alt:""},null,8,K)]),i.value?d("",!0):(s(),a("strong",Q,"剧游AI"))],8,H),o(z,{"active-path":r(m).path,collapsed:i.value,onNavigate:k},null,8,["active-path","collapsed"]),t("button",{class:"menu-item logout",type:"button",title:i.value?"退出登录":void 0,disabled:l.value,onClick:y},[o(h,{name:"SwitchButton",size:20}),i.value?d("",!0):(s(),a("span",Y,"退出登录"))],8,X)])),o(I,{modelValue:e.value,"onUpdate:modelValue":n[0]||(n[0]=B=>e.value=B),direction:"ltr",size:"240px","with-header":!1,class:"mobile-drawer"},{default:S(()=>[t("div",Z,[t("span",ee,[t("img",{src:r(x),alt:""},null,8,te)]),n[2]||(n[2]=t("strong",null,"剧游AI",-1))]),o(z,{"active-path":r(m).path,onNavigate:k},null,8,["active-path"]),t("button",{class:"menu-item logout",type:"button",disabled:l.value,onClick:y},[o(h,{name:"SwitchButton",size:20}),n[3]||(n[3]=t("span",null,"退出登录",-1))],8,ae)]),_:1},8,["modelValue"]),t("div",se,[t("main",ne,[_.value?(s(),a("button",{key:0,class:"icon-button mobile-menu-trigger",type:"button",title:"打开菜单",onClick:n[1]||(n[1]=B=>e.value=!0)},[o(h,{name:"Menu",size:22})])):d("",!0),o(r(U))])])],2)}}}),de=V(oe,[["__scopeId","data-v-209f12ce"]]);export{de as default};
@@ -0,0 +1 @@
.admin-number-input[data-v-d9349eae]{width:100%}.admin-number-input[data-v-d9349eae] .el-input__wrapper{min-height:40px;padding:0 12px;border-radius:var(--radius-sm);box-shadow:0 0 0 1px var(--color-border) inset}.admin-number-input[data-v-d9349eae] .el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--color-primary) inset}.admin-number-input[data-v-d9349eae] .el-input__inner{font-variant-numeric:tabular-nums;text-align:left}.admin-number-input.is-readonly[data-v-d9349eae] .el-input__wrapper{background:var(--color-bg)}
@@ -0,0 +1 @@
import{d as g,k as m,B as x,o as N,y as B,n as F,r as I}from"./index-CcdGGfCj.js";import{_ as M}from"./_plugin-vue_export-helper-DlAUqK2U.js";const k=g({__name:"AdminNumberInput",props:{modelValue:{default:null},min:{},max:{},precision:{default:2},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},placeholder:{default:""}},emits:["update:modelValue"],setup(t,{emit:p}){const l=t,u=p,n=m(r(l.modelValue)),i=m(!1);x(()=>l.modelValue,e=>{i.value||(n.value=r(e))});function r(e){if(e==null||e==="")return"";const a=Number(e);if(!Number.isFinite(a))return"";const o=10**l.precision;return String(Math.round(a*o)/o)}function f(e){const a=e.replace(/,/g,".").replace(/[^\d.-]/g,""),o=a.startsWith("-"),s=a.replace(/-/g,""),[d="",...h]=s.split("."),c=o?"-":"";if(l.precision===0)return c+d;const y=s.includes("."),V=h.join("").slice(0,l.precision);return c+d+(y?`.${V}`:"")}function v(e){if(n.value=f(e),n.value===""||n.value==="-"||n.value==="."||n.value==="-."){u("update:modelValue",null);return}const a=Number(n.value);Number.isFinite(a)&&u("update:modelValue",a)}function b(){if(i.value=!1,n.value===""||n.value==="-"||n.value==="."||n.value==="-."){n.value="",u("update:modelValue",null);return}let e=Number(n.value);if(!Number.isFinite(e)){n.value=r(l.modelValue);return}l.min!==void 0&&(e=Math.max(l.min,e)),l.max!==void 0&&(e=Math.min(l.max,e));const a=10**l.precision;e=Math.round(e*a)/a,n.value=String(e),u("update:modelValue",e)}return(e,a)=>{const o=I("el-input");return N(),B(o,{class:F(["admin-number-input",{"is-readonly":t.readonly}]),"model-value":n.value,type:"text",inputmode:t.precision===0?"numeric":"decimal",disabled:t.disabled,readonly:t.readonly,placeholder:t.placeholder,onFocus:a[0]||(a[0]=s=>i.value=!0),onInput:v,onBlur:b},null,8,["class","model-value","inputmode","disabled","readonly","placeholder"])}}}),C=M(k,[["__scopeId","data-v-d9349eae"]]);export{C as A};
@@ -0,0 +1 @@
.column-label[data-v-965ad148],.column-help[data-v-965ad148]{display:inline-flex;align-items:center}.column-label[data-v-965ad148]{gap:var(--space-xs)}.column-help[data-v-965ad148]{color:var(--color-text-secondary);cursor:help}
@@ -0,0 +1 @@
import{d as A,u as Q,q,c as _,e as o,a,C as E,w as l,x as K,F as M,l as U,p as v,y as C,k as y,j,r as i,z as P,o as p,i as d,t as r}from"./index-CcdGGfCj.js";import{h as Z,a as G,_ as D}from"./http-CGjljVXL.js";import{_ as H}from"./PageHeader.vue_vue_type_script_setup_true_lang-ClDoYPHj.js";import{_ as J}from"./_plugin-vue_export-helper-DlAUqK2U.js";const O={class:"page-stack management-page"},R={class:"panel filter-bar"},W={class:"panel table-panel"},X={class:"column-label"},Y={class:"column-help"},ee={class:"column-label"},te={class:"column-help"},ae={key:0,class:"mobile-card-list"},oe=A({__name:"AuditLogsView",setup(ne){const V=Q(),g=y(!1),m=y([]),f=y(0),s=j({keyword:"",page:1,page_size:15}),z={create:"新建",batch_create:"批量新建",update:"修改",batch_update:"批量修改",toggle:"状态变更",delete:"删除",batch_delete:"批量删除",reorder:"调整顺序",generate:"生成",save:"保存",save_draft:"保存草稿",grant_points:"增加积分",password_changed:"修改密码",password_change_failed:"修改密码失败"},I={users:"用户","redemption-codes":"兑换码",styles:"风格",prompts:"提示词",channels:"渠道",models:"模型","admin-auth":"管理员账号"};async function c(){g.value=!0;try{const{data:n}=await Z.get("/audit-logs",{params:s});m.value=n.data.items,f.value=n.data.total}catch(n){const e=G(n);V.error(e.message,e.copyText)}finally{g.value=!1}}function L(){s.keyword="",s.page=1,c()}function b(n){return z[n]||n||"未知操作"}function w(n){return I[n]||n||"未知资源"}function k(n){return n?new Date(String(n)).toLocaleString("zh-CN",{timeZone:"Asia/Shanghai",hour12:!1}):"--"}return q(c),(n,e)=>{const T=i("el-input"),h=i("el-button"),u=i("el-table-column"),N=i("el-tag"),x=i("el-tooltip"),S=i("el-table"),B=i("el-empty"),F=i("el-pagination"),$=P("loading");return p(),_("div",O,[o(H,{title:"审计日志"}),a("section",R,[o(T,{modelValue:s.keyword,"onUpdate:modelValue":e[0]||(e[0]=t=>s.keyword=t),modelModifiers:{trim:!0},clearable:"",placeholder:"管理员、操作、资源、原因、对象 ID 或追踪 ID",onKeyup:e[1]||(e[1]=E(t=>{s.page=1,c()},["enter"]))},null,8,["modelValue"]),o(h,{type:"primary",onClick:e[2]||(e[2]=t=>{s.page=1,c()})},{default:l(()=>[...e[4]||(e[4]=[d("查询",-1)])]),_:1}),o(h,{onClick:L},{default:l(()=>[...e[5]||(e[5]=[d("重置",-1)])]),_:1})]),K((p(),_("section",W,[o(S,{class:"desktop-table",data:m.value},{default:l(()=>[o(u,{prop:"admin_username",label:"管理员","min-width":"120","show-overflow-tooltip":""}),o(u,{label:"操作","min-width":"120"},{default:l(({row:t})=>[o(N,{effect:"plain"},{default:l(()=>[d(r(b(t.action)),1)]),_:2},1024)]),_:1}),o(u,{label:"资源","min-width":"120"},{default:l(({row:t})=>[d(r(w(t.resource_type)),1)]),_:1}),o(u,{prop:"resource_id","min-width":"180","show-overflow-tooltip":""},{header:l(()=>[a("span",X,[e[6]||(e[6]=d(" 对象 ID ",-1)),o(x,{content:"被操作数据的唯一标识;即使对象改名或删除,仍可用它准确定位记录。",placement:"top"},{default:l(()=>[a("span",Y,[o(D,{name:"QuestionFilled"})])]),_:1})])]),_:1}),o(u,{prop:"reason",label:"操作原因","min-width":"180","show-overflow-tooltip":""},{default:l(({row:t})=>[d(r(t.reason||"--"),1)]),_:1}),o(u,{prop:"trace_id","min-width":"180","show-overflow-tooltip":""},{header:l(()=>[a("span",ee,[e[7]||(e[7]=d(" 请求追踪 ID ",-1)),o(x,{content:"本次请求的唯一追踪编号,用于在服务器日志中查找并关联同一次请求。",placement:"top"},{default:l(()=>[a("span",te,[o(D,{name:"QuestionFilled"})])]),_:1})])]),_:1}),o(u,{label:"操作时间","min-width":"180"},{default:l(({row:t})=>[d(r(k(t.created_at)),1)]),_:1})]),_:1},8,["data"]),m.value.length?(p(),_("div",ae,[(p(!0),_(M,null,U(m.value,t=>(p(),_("article",{key:t.id,class:"data-card"},[a("dl",null,[e[8]||(e[8]=a("dt",null,"管理员",-1)),a("dd",null,r(t.admin_username),1),e[9]||(e[9]=a("dt",null,"操作",-1)),a("dd",null,r(b(t.action)),1),e[10]||(e[10]=a("dt",null,"资源",-1)),a("dd",null,r(w(t.resource_type)),1),e[11]||(e[11]=a("dt",null,"对象 ID",-1)),a("dd",null,r(t.resource_id||"--"),1),e[12]||(e[12]=a("dt",null,"操作原因",-1)),a("dd",null,r(t.reason||"--"),1),e[13]||(e[13]=a("dt",null,"请求追踪 ID",-1)),a("dd",null,r(t.trace_id||"--"),1),e[14]||(e[14]=a("dt",null,"操作时间",-1)),a("dd",null,r(k(t.created_at)),1)])]))),128))])):v("",!0),!g.value&&!m.value.length?(p(),C(B,{key:1,description:"暂无审计日志"})):v("",!0),f.value>s.page_size?(p(),C(F,{key:2,"current-page":s.page,"onUpdate:currentPage":e[3]||(e[3]=t=>s.page=t),background:"",layout:"total,prev,pager,next",total:f.value,"page-size":s.page_size,onCurrentChange:c},null,8,["current-page","total","page-size"])):v("",!0)])),[[$,g.value]])])}}}),de=J(oe,[["__scopeId","data-v-965ad148"]]);export{de as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.channel-editor[data-v-ace04131]{display:grid;gap:16px}.channel-section[data-v-ace04131]{padding:18px;border:1px solid var(--color-border-light);border-radius:var(--radius-md);background:var(--color-surface)}.channel-section__header[data-v-ace04131]{display:flex;align-items:flex-start;gap:12px;margin-bottom:18px}.channel-section__icon[data-v-ace04131]{width:34px;height:34px;flex:0 0 34px;display:grid;place-items:center;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-primary-soft);color:var(--color-primary)}.channel-section__header h3[data-v-ace04131]{color:var(--color-text);font-size:15px}.channel-section__header p[data-v-ace04131]{margin-top:3px;color:var(--color-text-secondary);font-size:12px;line-height:1.5}.channel-grid[data-v-ace04131]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 18px}.channel-grid--three[data-v-ace04131]{grid-template-columns:repeat(3,minmax(0,1fr))}.channel-field--full[data-v-ace04131]{grid-column:1 / -1}.masked-key-row[data-v-ace04131]{width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px}.masked-key-row[data-v-ace04131] .el-input__inner{font-variant-numeric:tabular-nums}.masked-key-row>.el-button[data-v-ace04131]{min-height:40px}.api-key-helper-row[data-v-ace04131]{width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px}.exchange-rate-row[data-v-ace04131]{display:grid;grid-template-columns:minmax(0,1fr) 32px minmax(0,1fr);align-items:center;gap:12px}.exchange-rate-row__equals[data-v-ace04131]{margin-top:2px;color:var(--color-text-secondary);font-size:18px;text-align:center}.exchange-rate-summary[data-v-ace04131]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:11px 13px;border:1px solid var(--color-border-light);border-radius:var(--radius-sm);background:var(--color-bg);color:var(--color-text-secondary);font-size:12px}.exchange-rate-summary strong[data-v-ace04131]{color:var(--color-text);font-size:13px;font-variant-numeric:tabular-nums}@media (max-width: 767px){.channel-section[data-v-ace04131]{padding:14px}.channel-grid[data-v-ace04131],.channel-grid--three[data-v-ace04131]{grid-template-columns:1fr}.exchange-rate-row[data-v-ace04131]{grid-template-columns:1fr;gap:0}.exchange-rate-row__equals[data-v-ace04131]{margin:-4px 0 10px}.exchange-rate-summary[data-v-ace04131]{align-items:flex-start;flex-direction:column;gap:3px}.masked-key-row[data-v-ace04131]{grid-template-columns:1fr}}
@@ -0,0 +1 @@
import{d as h,u as v,c as x,a as t,b as p,e as o,w as r,f as k,r as n,g as A,h as T,o as U,i as N,j as R,k as S,D as q}from"./index-CcdGGfCj.js";import{_ as c,a as B}from"./http-CGjljVXL.js";import{l as C}from"./logo-DSdTLzUt.js";import{u as D}from"./auth-EXu5ynQ_.js";const E={class:"login-page"},L={class:"login-panel"},M={class:"login-brand"},I={class:"brand-mark"},j=["src"],G=h({__name:"LoginView",setup(z){const l=D(),f=v(),_=A(),g=T(),s=R({username:"",password:""}),m=S(),w={username:[{required:!0,message:"请输入管理员账号",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]};async function b(){var i;if(!l.loading&&await((i=m.value)==null?void 0:i.validate().catch(()=>!1)))try{await l.login(s.username,s.password),_.replace(String(g.query.redirect||q))}catch(e){const a=B(e);f.error(a.message,a.copyText)}}return(i,e)=>{const a=n("el-input"),d=n("el-form-item"),V=n("el-button"),y=n("el-form");return U(),x("main",E,[t("section",L,[t("div",M,[t("span",I,[t("img",{src:p(C),alt:""},null,8,j)]),e[2]||(e[2]=t("span",null,"剧游AI",-1))]),e[4]||(e[4]=t("div",{class:"login-heading"},[t("h1",{id:"login-title"},"管理后台登录")],-1)),o(y,{ref_key:"formRef",ref:m,model:s,rules:w,"label-position":"top",size:"large",onSubmit:k(b,["prevent"])},{default:r(()=>[o(d,{label:"管理员账号",prop:"username"},{default:r(()=>[o(a,{modelValue:s.username,"onUpdate:modelValue":e[0]||(e[0]=u=>s.username=u),modelModifiers:{trim:!0},autocomplete:"username",placeholder:"请输入管理员账号"},{prefix:r(()=>[o(c,{name:"User"})]),_:1},8,["modelValue"])]),_:1}),o(d,{label:"密码",prop:"password"},{default:r(()=>[o(a,{modelValue:s.password,"onUpdate:modelValue":e[1]||(e[1]=u=>s.password=u),type:"password",autocomplete:"current-password","show-password":"",placeholder:"请输入密码"},{prefix:r(()=>[o(c,{name:"Lock"})]),_:1},8,["modelValue"])]),_:1}),o(V,{class:"login-submit",type:"primary","native-type":"submit",loading:p(l).loading},{default:r(()=>[...e[3]||(e[3]=[N("登录",-1)])]),_:1},8,["loading"])]),_:1},8,["model"])])])}}});export{G as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.el-dialog.managed-scroll-dialog.model-dialog{height:auto}.el-dialog.managed-scroll-dialog.model-dialog .el-dialog__body{max-height:calc(100dvh - 180px);flex:0 1 auto}.model-identity-grid[data-v-d019cb68]{grid-template-columns:repeat(3,minmax(0,1fr))}.price-list[data-v-d019cb68]{display:flex;flex-direction:column;gap:4px;line-height:1.45}.model-price-section[data-v-d019cb68]{margin-top:2px;padding:18px;border:1px solid var(--color-border-light);border-radius:var(--radius-md);background:var(--color-surface)}.model-price-section__header[data-v-d019cb68]{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:16px}.model-price-section h3[data-v-d019cb68]{font-size:14px}.model-price-section__header p[data-v-d019cb68]{margin-top:4px;color:var(--color-text-secondary);font-size:12px;line-height:1.5}.model-price-rates[data-v-d019cb68]{flex:0 0 auto;display:grid;gap:4px;color:var(--color-text-secondary);font-size:12px;font-variant-numeric:tabular-nums;text-align:right}.model-price-grid[data-v-d019cb68]{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.model-price-card[data-v-d019cb68]{min-width:0;padding:14px;border:1px solid var(--color-border-light);border-radius:var(--radius-sm);background:var(--color-bg)}.model-price-card[data-v-d019cb68] .el-form-item{margin-bottom:12px}.price-conversion[data-v-d019cb68]{display:grid;gap:8px;margin:0}.price-conversion>div[data-v-d019cb68]{display:flex;align-items:center;justify-content:space-between;gap:10px}.price-conversion dt[data-v-d019cb68]{color:var(--color-text-secondary);font-size:12px}.price-conversion dd[data-v-d019cb68]{margin:0;color:var(--color-text);font-size:12px;font-variant-numeric:tabular-nums;text-align:right}.text-billing-settings[data-v-d019cb68]{display:grid;grid-template-columns:minmax(0,1fr) minmax(180px,.7fr);gap:16px;align-items:start}.field-hint[data-v-d019cb68]{margin-top:6px;color:var(--color-text-secondary);font-size:12px;line-height:1.5}@media (max-width: 767px){.model-identity-grid[data-v-d019cb68]{grid-template-columns:1fr}.model-price-section[data-v-d019cb68]{padding:14px}.model-price-section__header[data-v-d019cb68]{flex-direction:column;gap:10px}.model-price-rates[data-v-d019cb68]{text-align:left}.model-price-grid[data-v-d019cb68],.text-billing-settings[data-v-d019cb68]{grid-template-columns:1fr}}
@@ -0,0 +1 @@
import{d as s,c as o,a as e,t as n,A as r,o as c}from"./index-CcdGGfCj.js";const l={class:"page-header"},i={class:"page-actions"},_=s({__name:"PageHeader",props:{title:{},description:{}},setup(t){return(a,d)=>(c(),o("header",l,[e("div",null,[e("h2",null,n(t.title),1)]),e("div",i,[r(a.$slots,"default")])]))}});export{_};
@@ -0,0 +1 @@
.master-detail-heading[data-v-0b46c3ec]{align-items:center}.master-detail-panel[data-v-0b46c3ec]{display:grid;flex:none;height:max(760px,calc(100dvh - 118px));min-height:760px;grid-template-columns:300px minmax(0,1fr);overflow:hidden;border:1px solid var(--color-border-light);border-radius:var(--radius-lg);background:#fff;box-shadow:var(--shadow-sm)}.master-list[data-v-0b46c3ec]{display:flex;flex-direction:column;min-width:0;min-height:0;border-right:1px solid var(--color-border-light);background:#f8fafc}.master-list-toolbar[data-v-0b46c3ec]{padding:16px;border-bottom:1px solid var(--color-border-light)}.master-list-items[data-v-0b46c3ec]{flex:1;min-height:0;overflow:auto;padding:8px}.master-editor[data-v-0b46c3ec]{min-width:0;padding:26px 30px;background:#fff}.master-empty[data-v-0b46c3ec]{height:100%;display:grid;place-items:center;color:var(--color-text-secondary);font-size:14px}.master-detail-heading[data-v-0b46c3ec] .page-actions{align-items:center}@media (max-width: 800px){.master-detail-panel[data-v-0b46c3ec]{display:grid;flex:none;height:auto;grid-template-columns:1fr;min-height:0}.master-list[data-v-0b46c3ec]{max-height:280px;border-right:0;border-bottom:1px solid var(--color-border-light)}.master-editor[data-v-0b46c3ec]{padding:20px 16px}}.header-actions[data-v-2c741e31]{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:8px}.header-actions[data-v-2c741e31] .el-button{margin-left:0}.restore-input[data-v-2c741e31]{display:none}.master-item[data-v-2c741e31]{width:100%;padding:12px 13px;display:flex;flex-direction:column;gap:5px;border:1px solid transparent;border-radius:9px;background:transparent;color:var(--color-text);text-align:left;cursor:pointer;transition:background .16s,border-color .16s}.master-item[data-v-2c741e31]:hover{background:#eef4ff}.master-item.active[data-v-2c741e31]{border-color:#b8cff5;background:#eaf2ff}.master-item strong[data-v-2c741e31]{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.master-item span[data-v-2c741e31]{color:var(--color-text-secondary);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.create-prompt-button[data-v-2c741e31]{width:100%;margin:0 0 8px;justify-content:center}.editor-heading[data-v-2c741e31]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding-bottom:18px;border-bottom:1px solid var(--color-border-light)}.editor-heading span[data-v-2c741e31]{color:var(--color-text-secondary);font-size:12px}.editor-heading h3[data-v-2c741e31]{margin-top:4px;font-size:20px}.editor-form[data-v-2c741e31]{display:flex;flex:1;min-height:0;flex-direction:column;padding-top:22px}.form-grid[data-v-2c741e31]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px}.type-select[data-v-2c741e31]{width:100%}.prompt-content-field[data-v-2c741e31]{display:flex;flex:1;min-height:0;flex-direction:column}.prompt-content-field[data-v-2c741e31] .el-form-item__content{flex:1;min-height:0}.prompt-content-field[data-v-2c741e31] .el-textarea{height:100%}.prompt-content-field[data-v-2c741e31] .el-textarea__inner{height:100%;min-height:420px!important}.editor-actions[data-v-2c741e31]{display:flex;justify-content:flex-end;gap:8px;padding-top:18px;border-top:1px solid var(--color-border-light)}[data-v-2c741e31] .master-editor{display:flex;min-height:0;flex-direction:column}@media (max-width: 640px){.header-actions[data-v-2c741e31]{width:100%;justify-content:flex-start}.form-grid[data-v-2c741e31]{grid-template-columns:1fr}.prompt-content-field[data-v-2c741e31] .el-textarea__inner{min-height:360px!important}}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.security-page[data-v-003dbbf8]{max-width:760px}.security-panel[data-v-003dbbf8]{padding:24px}.security-intro[data-v-003dbbf8]{display:flex;align-items:flex-start;gap:14px;padding-bottom:20px;border-bottom:1px solid var(--color-border-light)}.security-icon[data-v-003dbbf8]{width:42px;height:42px;flex:0 0 42px;display:grid;place-items:center;color:var(--color-primary);background:var(--color-primary-soft);border-radius:var(--radius-md)}.security-intro h3[data-v-003dbbf8]{font-size:16px}.security-intro p[data-v-003dbbf8]{margin-top:5px;color:var(--color-text-secondary);font-size:14px}.password-form[data-v-003dbbf8]{max-width:480px;margin-top:22px}.form-actions[data-v-003dbbf8]{display:flex;justify-content:flex-end;padding-top:4px}@media (max-width: 767px){.security-panel[data-v-003dbbf8]{padding:18px}.password-form[data-v-003dbbf8]{max-width:none}.form-actions .el-button[data-v-003dbbf8]{width:100%}}
@@ -0,0 +1 @@
import{d as v,u as V,c as b,e as o,a,w as l,r as d,o as h,i as x,k as m,j as k,g as C}from"./index-CcdGGfCj.js";import{h as S,c as q,a as B,_ as E}from"./http-CGjljVXL.js";import{_ as N}from"./PageHeader.vue_vue_type_script_setup_true_lang-ClDoYPHj.js";import{u as R}from"./auth-EXu5ynQ_.js";import{_ as T}from"./_plugin-vue_export-helper-DlAUqK2U.js";const U={class:"page-stack security-page"},A={class:"panel security-panel"},$={class:"security-intro"},j={class:"security-icon"},z={class:"form-actions"},I=v({__name:"SecurityView",setup(L){const w=C(),f=R(),c=V(),p=m(),u=m(!1),s=k({currentPassword:"",newPassword:"",confirmPassword:""}),_={currentPassword:[{required:!0,message:"请输入当前密码",trigger:"blur"}],newPassword:[{required:!0,message:"请输入新密码",trigger:"blur"},{min:8,max:20,message:"密码长度必须为 820 位",trigger:"blur"}],confirmPassword:[{required:!0,message:"请再次输入新密码",trigger:"blur"},{validator:(n,e,r)=>e===s.newPassword?r():r(new Error("两次输入的新密码不一致")),trigger:"blur"}]};async function g(){var n;if(await((n=p.value)==null?void 0:n.validate().catch(()=>!1))){u.value=!0;try{await S.put("/auth/password",{current_password:s.currentPassword,new_password:s.newPassword,confirm_password:s.confirmPassword}),q(),f.profile=null,c.success("密码已修改,请使用新密码重新登录"),await w.replace("/login")}catch(e){const r=B(e);c.error(r.message,r.copyText)}finally{u.value=!1}}}return(n,e)=>{const r=d("el-input"),i=d("el-form-item"),P=d("el-button"),y=d("el-form");return h(),b("div",U,[o(N,{title:"账号安全"}),a("section",A,[a("div",$,[a("span",j,[o(E,{name:"Lock",size:22})]),e[3]||(e[3]=a("div",null,[a("h3",null,"修改管理员密码"),a("p",null,"需验证当前密码。修改成功后将退出当前账号,请使用新密码重新登录。")],-1))]),o(y,{ref_key:"formRef",ref:p,model:s,rules:_,"label-position":"top",class:"password-form"},{default:l(()=>[o(i,{label:"当前密码",prop:"currentPassword"},{default:l(()=>[o(r,{modelValue:s.currentPassword,"onUpdate:modelValue":e[0]||(e[0]=t=>s.currentPassword=t),type:"password",autocomplete:"current-password","show-password":"",placeholder:"请输入当前密码"},null,8,["modelValue"])]),_:1}),o(i,{label:"新密码",prop:"newPassword"},{default:l(()=>[o(r,{modelValue:s.newPassword,"onUpdate:modelValue":e[1]||(e[1]=t=>s.newPassword=t),type:"password",autocomplete:"new-password","show-password":"",placeholder:"请输入 820 位新密码"},null,8,["modelValue"])]),_:1}),o(i,{label:"确认新密码",prop:"confirmPassword"},{default:l(()=>[o(r,{modelValue:s.confirmPassword,"onUpdate:modelValue":e[2]||(e[2]=t=>s.confirmPassword=t),type:"password",autocomplete:"new-password","show-password":"",placeholder:"请再次输入新密码"},null,8,["modelValue"])]),_:1}),a("div",z,[o(P,{type:"primary",loading:u.value,onClick:g},{default:l(()=>[...e[4]||(e[4]=[x("确认修改",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])])])}}}),K=T(I,[["__scopeId","data-v-003dbbf8"]]);export{K as default};
@@ -0,0 +1 @@
.style-grid-panel[data-v-3dcbb1fc]{flex:1;min-height:0;overflow:auto}.style-card-grid[data-v-3dcbb1fc]{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:16px}.style-card[data-v-3dcbb1fc]{min-width:0;overflow:hidden;background:#fff;border:1px solid var(--color-border);border-radius:var(--radius-lg);transition:border-color .18s,transform .18s}.style-card[data-v-3dcbb1fc]:hover{border-color:var(--color-primary);transform:translateY(-2px)}.style-card.is-dragging[data-v-3dcbb1fc]{opacity:.55}.style-card__visual[data-v-3dcbb1fc]{height:230px;position:relative;overflow:hidden;background:var(--color-bg)}.style-card__visual img[data-v-3dcbb1fc]{width:100%;height:100%;object-fit:cover}.style-card__drag[data-v-3dcbb1fc]{position:absolute;top:10px;left:10px;width:34px;height:34px;display:grid;place-items:center;color:#fff;background:#111827;border-radius:8px;cursor:grab}.style-card__actions[data-v-3dcbb1fc]{position:absolute;top:10px;right:10px;display:flex;gap:6px}.style-card>strong[data-v-3dcbb1fc]{padding:13px 14px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.style-form[data-v-3dcbb1fc]{display:grid;grid-template-columns:180px minmax(0,1fr);gap:var(--space-lg);align-items:start}.style-form__preview-column[data-v-3dcbb1fc],.style-form__fields[data-v-3dcbb1fc]{min-width:0}.style-form__label[data-v-3dcbb1fc]{display:block;margin-bottom:var(--space-sm);color:var(--color-text);font-size:var(--font-size-sm);line-height:22px}.style-form__label[data-v-3dcbb1fc]:before{margin-right:var(--space-xs);color:var(--color-danger);content:"*"}.upload-preview-frame[data-v-3dcbb1fc]{width:100%;aspect-ratio:9 / 16;overflow:hidden;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg)}.upload-preview[data-v-3dcbb1fc]{display:block;width:100%;height:100%;object-fit:contain}.upload-preview-empty[data-v-3dcbb1fc]{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);color:var(--color-text-secondary);font-size:var(--font-size-sm)}.upload-preview-empty[data-v-3dcbb1fc] .el-icon{font-size:28px}.style-form__fields[data-v-3dcbb1fc] .el-form-item:last-child{margin-bottom:0}.field-helper[data-v-3dcbb1fc]{width:100%;margin:var(--space-sm) 0 0;color:var(--color-text-secondary);font-size:var(--font-size-sm);line-height:1.6}@media (max-width: 600px){.style-card-grid[data-v-3dcbb1fc]{grid-template-columns:repeat(2,minmax(0,1fr))}.style-card__visual[data-v-3dcbb1fc]{height:190px}.style-form[data-v-3dcbb1fc]{grid-template-columns:1fr;gap:var(--space-md)}.upload-preview-frame[data-v-3dcbb1fc]{width:min(180px,100%);margin:0 auto}}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.desktop-user-table[data-v-7d96e9a9]{width:100%}.batch-preview[data-v-7d96e9a9]{margin-bottom:0}.batch-helper[data-v-7d96e9a9]{margin-bottom:18px}.limit-cell[data-v-7d96e9a9]{min-width:0;display:flex;align-items:center;gap:6px}.limit-cell>span[data-v-7d96e9a9]{min-width:58px;color:var(--color-text-secondary);font-variant-numeric:tabular-nums}.limit-cell .el-button[data-v-7d96e9a9]{margin:0}.limit-edit-button[data-v-7d96e9a9]{width:28px;height:28px;padding:0}.limit-input[data-v-7d96e9a9]{width:118px}.limit-input[data-v-7d96e9a9] input{font-variant-numeric:tabular-nums}.point-grant-summary[data-v-7d96e9a9]{margin-bottom:var(--space-md);padding:var(--space-sm) var(--space-md);display:flex;flex-direction:column;gap:var(--space-xs);color:var(--color-text);background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-sm)}.point-grant-summary span[data-v-7d96e9a9]{color:var(--color-text-secondary);font-size:var(--font-size-sm);font-variant-numeric:tabular-nums}@media (max-width: 767px){.limit-cell[data-v-7d96e9a9]{justify-content:flex-end}.limit-input[data-v-7d96e9a9]{width:min(128px,100%)}}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
const s=(t,r)=>{const o=t.__vccOpts||t;for(const[c,e]of r)o[c]=e;return o};export{s as _};
+1
View File
@@ -0,0 +1 @@
import{G as s}from"./index-CcdGGfCj.js";import{h as e,c as l,s as n}from"./http-CGjljVXL.js";const h=s("auth",{state:()=>({profile:JSON.parse(localStorage.getItem("admin_profile")||"null"),loading:!1}),getters:{authenticated:()=>!!localStorage.getItem("admin_access_token")},actions:{async login(t,o){this.loading=!0;try{const{data:a}=await e.post("/auth/login",{username:t,password:o});n(a.data),this.profile=a.data.admin}finally{this.loading=!1}},async logout(){const t=localStorage.getItem("admin_refresh_token");try{await e.post("/auth/logout",{refresh_token:t})}finally{l(),this.profile=null}}}});export{h as u};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

+1
View File
@@ -0,0 +1 @@
const o="/admin/assets/logo-CztthSFi.png";export{o as l};
Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB