更新说明:\n1. 新增用户端与管理员端 Passkey 登录/注册/设备管理(最多3台,支持设备备注、删除设备)。\n2. 修复 Passkey 注册与登录流程中的浏览器/证书/CSRF相关问题,增强错误提示。\n3. 前台登录页改为独立入口,首屏仅加载必要资源,其他页面按需加载。\n4. 系统配置页改为静默获取金山文档状态,避免首屏阻塞,并优化状态展示为“检测中/已登录/未登录/异常”。\n5. 补充后端接口与页面渲染适配,修复多入口下样式依赖注入问题。\n6. 同步更新前后台构建产物与相关静态资源。
7 lines
26 KiB
JavaScript
7 lines
26 KiB
JavaScript
import{b as ge,t as z,_ as _e,u as ve,s as Ue,d as we,w as wt,a7 as bt,a8 as ht,a9 as kt,H as St,A as xt,E as $t}from"./el-button-DWxIvzz-.js";import{m as Vt,l as Ct,n as Tt,o as Et,p as ee}from"./el-overlay-C_JJBVfE.js";import{E as At,a as Pt,b as Nt}from"./el-alert-DB2IQLpH.js";import{m as te,p as Bt,E as It,a as f}from"./http-CdvgQxJu.js";import{u as Ot,a as Lt,b as Ut,E as Dt}from"./user-Bl59IefW.js";import{f as Rt,b as De,a as Re,c as Kt,s as jt,d as Mt,t as zt,e as Ft,g as qt,u as Ht,h as Wt}from"./accounts-3bM7Wy59.js";import{E as Gt,a as Jt}from"./el-select-B0VMg2td.js";import{E as Qt}from"./el-card-DfVpO1U5.js";import{k as Xt,l as Yt,g as Zt}from"./settings-Ddo8isuv.js";import{l as es}from"./vendor-realtime-CA1CrNgP.js";import{_ as ts}from"./style-CEbARg1o.js";import{A as Y,Q as ss,h as g,X as as,c as L,o as y,s as o,B as ie,U as j,n as N,C as u,D as be,a0 as ns,J as Ke,j as $,l as M,k as i,t as b,M as os,g as P,f as X,L as me,i as ls,z as rs,q as n,x as _,F as le,a4 as ye}from"./vendor-vue-DxN60LNb.js";import"./vendor-axios-B9ygI19o.js";const is=ge({tag:{type:String,default:"div"},span:{type:Number,default:24},offset:{type:Number,default:0},pull:{type:Number,default:0},push:{type:Number,default:0},xs:{type:z([Number,Object]),default:()=>te({})},sm:{type:z([Number,Object]),default:()=>te({})},md:{type:z([Number,Object]),default:()=>te({})},lg:{type:z([Number,Object]),default:()=>te({})},xl:{type:z([Number,Object]),default:()=>te({})}}),Me=Symbol("rowContextKey"),us=Y({name:"ElCol"}),ds=Y({...us,props:is,setup(V){const l=V,{gutter:h}=ss(Me,{gutter:g(()=>0)}),c=ve("col"),U=g(()=>{const p={};return h.value&&(p.paddingLeft=p.paddingRight=`${h.value/2}px`),p}),k=g(()=>{const p=[];return["span","offset","pull","push"].forEach(v=>{const B=l[v];Ue(B)&&(v==="span"?p.push(c.b(`${l[v]}`)):B>0&&p.push(c.b(`${v}-${l[v]}`)))}),["xs","sm","md","lg","xl"].forEach(v=>{Ue(l[v])?p.push(c.b(`${v}-${l[v]}`)):as(l[v])&&Object.entries(l[v]).forEach(([B,E])=>{p.push(B!=="span"?c.b(`${v}-${B}-${E}`):c.b(`${v}-${E}`))})}),h.value&&p.push(c.is("guttered")),[c.b(),p]});return(p,S)=>(y(),L(be(p.tag),{class:N(u(k)),style:j(u(U))},{default:o(()=>[ie(p.$slots,"default")]),_:3},8,["class","style"]))}});var cs=_e(ds,[["__file","col.vue"]]);const ps=we(cs),fs=ge({type:{type:String,default:"line",values:["line","circle","dashboard"]},percentage:{type:Number,default:0,validator:V=>V>=0&&V<=100},status:{type:String,default:"",values:["","success","exception","warning"]},indeterminate:Boolean,duration:{type:Number,default:3},strokeWidth:{type:Number,default:6},strokeLinecap:{type:z(String),default:"round"},textInside:Boolean,width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:z([String,Array,Function]),default:""},striped:Boolean,stripedFlow:Boolean,format:{type:z(Function),default:V=>`${V}%`}}),ms=Y({name:"ElProgress"}),ys=Y({...ms,props:fs,setup(V){const l=V,h={success:"#13ce66",exception:"#ff4949",warning:"#e6a23c",default:"#20a0ff"},c=ve("progress"),U=g(()=>{const a={width:`${l.percentage}%`,animationDuration:`${l.duration}s`},d=K(l.percentage);return d.includes("gradient")?a.background=d:a.backgroundColor=d,a}),k=g(()=>(l.strokeWidth/l.width*100).toFixed(1)),p=g(()=>["circle","dashboard"].includes(l.type)?Number.parseInt(`${50-Number.parseFloat(k.value)/2}`,10):0),S=g(()=>{const a=p.value,d=l.type==="dashboard";return`
|
||
M 50 50
|
||
m 0 ${d?"":"-"}${a}
|
||
a ${a} ${a} 0 1 1 0 ${d?"-":""}${a*2}
|
||
a ${a} ${a} 0 1 1 0 ${d?"":"-"}${a*2}
|
||
`}),C=g(()=>2*Math.PI*p.value),v=g(()=>l.type==="dashboard"?.75:1),B=g(()=>`${-1*C.value*(1-v.value)/2}px`),E=g(()=>({strokeDasharray:`${C.value*v.value}px, ${C.value}px`,strokeDashoffset:B.value})),F=g(()=>({strokeDasharray:`${C.value*v.value*(l.percentage/100)}px, ${C.value}px`,strokeDashoffset:B.value,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s"})),q=g(()=>{let a;return l.color?a=K(l.percentage):a=h[l.status]||h.default,a}),A=g(()=>l.status==="warning"?wt:l.type==="line"?l.status==="success"?bt:ht:l.status==="success"?kt:St),se=g(()=>l.type==="line"?12+l.strokeWidth*.4:l.width*.111111+2),D=g(()=>l.format(l.percentage));function R(a){const d=100/a.length;return a.map((w,I)=>Ke(w)?{color:w,percentage:(I+1)*d}:w).sort((w,I)=>w.percentage-I.percentage)}const K=a=>{var d;const{color:O}=l;if(ns(O))return O(a);if(Ke(O))return O;{const w=R(O);for(const I of w)if(I.percentage>a)return I.color;return(d=w[w.length-1])==null?void 0:d.color}};return(a,d)=>(y(),$("div",{class:N([u(c).b(),u(c).m(a.type),u(c).is(a.status),{[u(c).m("without-text")]:!a.showText,[u(c).m("text-inside")]:a.textInside}]),role:"progressbar","aria-valuenow":a.percentage,"aria-valuemin":"0","aria-valuemax":"100"},[a.type==="line"?(y(),$("div",{key:0,class:N(u(c).b("bar"))},[i("div",{class:N(u(c).be("bar","outer")),style:j({height:`${a.strokeWidth}px`})},[i("div",{class:N([u(c).be("bar","inner"),{[u(c).bem("bar","inner","indeterminate")]:a.indeterminate},{[u(c).bem("bar","inner","striped")]:a.striped},{[u(c).bem("bar","inner","striped-flow")]:a.stripedFlow}]),style:j(u(U))},[(a.showText||a.$slots.default)&&a.textInside?(y(),$("div",{key:0,class:N(u(c).be("bar","innerText"))},[ie(a.$slots,"default",{percentage:a.percentage},()=>[i("span",null,b(u(D)),1)])],2)):M("v-if",!0)],6)],6)],2)):(y(),$("div",{key:1,class:N(u(c).b("circle")),style:j({height:`${a.width}px`,width:`${a.width}px`})},[(y(),$("svg",{viewBox:"0 0 100 100"},[i("path",{class:N(u(c).be("circle","track")),d:u(S),stroke:`var(${u(c).cssVarName("fill-color-light")}, #e5e9f2)`,"stroke-linecap":a.strokeLinecap,"stroke-width":u(k),fill:"none",style:j(u(E))},null,14,["d","stroke","stroke-linecap","stroke-width"]),i("path",{class:N(u(c).be("circle","path")),d:u(S),stroke:u(q),fill:"none",opacity:a.percentage?1:0,"stroke-linecap":a.strokeLinecap,"stroke-width":u(k),style:j(u(F))},null,14,["d","stroke","opacity","stroke-linecap","stroke-width"])]))],6)),(a.showText||a.$slots.default)&&!a.textInside?(y(),$("div",{key:2,class:N(u(c).e("text")),style:j({fontSize:`${u(se)}px`})},[ie(a.$slots,"default",{percentage:a.percentage},()=>[a.status?(y(),L(u(xt),{key:1},{default:o(()=>[(y(),L(be(u(A))))]),_:1})):(y(),$("span",{key:0},b(u(D)),1))])],6)):M("v-if",!0)],10,["aria-valuenow"]))}});var gs=_e(ys,[["__file","progress.vue"]]);const _s=we(gs),vs=["start","center","end","space-around","space-between","space-evenly"],ws=["top","middle","bottom"],bs=ge({tag:{type:String,default:"div"},gutter:{type:Number,default:0},justify:{type:String,values:vs,default:"start"},align:{type:String,values:ws}}),hs=Y({name:"ElRow"}),ks=Y({...hs,props:bs,setup(V){const l=V,h=ve("row"),c=g(()=>l.gutter);os(Me,{gutter:c});const U=g(()=>{const p={};return l.gutter&&(p.marginRight=p.marginLeft=`-${l.gutter/2}px`),p}),k=g(()=>[h.b(),h.is(`justify-${l.justify}`,l.justify!=="start"),h.is(`align-${l.align}`,!!l.align)]);return(p,S)=>(y(),L(be(p.tag),{class:N(u(k)),style:j(u(U))},{default:o(()=>[ie(p.$slots,"default")]),_:3},8,["class","style"]))}});var Ss=_e(ks,[["__file","row.vue"]]);const xs=we(Ss);async function $s(){const{data:V}=await Bt.get("/run_stats");return V}let re=null;function Vs(){return re||(re=es({transports:["websocket","polling"],withCredentials:!0}),re)}const Cs={class:"page"},Ts={class:"stat-value"},Es={class:"stat-value"},As={class:"stat-value"},Ps={class:"stat-value"},Ns={class:"stat-value"},Bs={class:"stat-value"},Is={class:"stat-suffix app-muted"},Os={class:"upgrade-actions"},Ls={class:"panel-head"},Us={class:"panel-actions"},Ds={class:"toolbar"},Rs={class:"toolbar-left"},Ks={class:"app-muted"},js={class:"toolbar-middle"},Ms={class:"toolbar-right"},zs={key:1,class:"grid"},Fs={class:"card-top"},qs={class:"card-main"},Hs={class:"card-title"},Ws={class:"card-name"},Gs={class:"card-sub app-muted"},Js={key:0},Qs={key:1},Xs={key:2},Ys={key:3},Zs={key:0,class:"progress"},ea={class:"progress-meta app-muted"},ta={class:"card-controls"},sa={class:"card-buttons"},je="zsglpt:accounts:enable_screenshot",aa=1e4,na=3e4,oa=6e4,la=18e4,ra={__name:"AccountsPage",setup(V){const l=Ot(),h=Vs(),c=P(!1),U=P(!1),k=X({today_completed:0,today_failed:0,current_running:0,today_items:0,today_attachments:0}),p=X({}),S=P([]),C=X({}),v=P("应读");function B(){try{const t=window.localStorage.getItem(je);if(t==="0"||t==="false")return!1;if(t==="1"||t==="true")return!0}catch{}return!0}const E=P(B());me(E,t=>{try{window.localStorage.setItem(je,t?"1":"0")}catch{}});const F=P(!1),q=P(!1),A=X({enabled:!1,online:!1,message:""}),se=P(!1),D=P(!1),R=P(!1),K=P(!1),a=X({username:"",password:"",remark:""}),d=X({id:"",username:"",password:"",remark:"",originalRemark:""}),O=[{label:"应读",value:"应读"},{label:"注册前未读",value:"注册前未读"}],w=g(()=>Object.values(p).sort((t,e)=>String(t.username||"").localeCompare(String(e.username||""),"zh-CN"))),I=g(()=>w.value.length),ze=g(()=>l.isVip?999:3),he=g(()=>S.value.length),Fe=g(()=>I.value>0&&he.value===I.value),qe=g(()=>!l.isVip);function Z(t){const e=p[t.id]||{};p[t.id]={...e,...t}}function ue(t){const e=Array.isArray(t)?t:[],r=new Set(e.map(m=>String(m?.id||"")));for(const m of Object.keys(p))r.has(m)||delete p[m];for(const m of e)Z(m)}function He(){for(const t of w.value)C[t.id]||(C[t.id]="应读")}me(w,He,{immediate:!0});function We(t){t?S.value=w.value.map(e=>e.id):S.value=[]}function ae(t){return l.isVip?!0:(f.warning(`${t}是VIP专属功能`),K.value=!0,!1)}function Ge(t){const e=Number(t.total_items||0),r=Number(t.progress_items||0);return e?Math.max(0,Math.min(100,Math.round(r/e*100))):0}function Je(t=""){const e=String(t);return e.includes("已完成")||e.includes("完成")?"success":e.includes("失败")||e.includes("错误")||e.includes("异常")||e.includes("登录失败")||e.includes("上传截图")?"danger":e.includes("等待上传")||e.includes("排队")||e.includes("运行")||e.includes("截图")?"warning":"info"}function ne(t){if(!t?.is_running)return!1;const e=String(t.status||""),r=String(t.detail_status||"");return!(!e||e==="未开始"||!e.includes("运行")||e.includes("截图")||e.includes("等待截图")||r.includes("截图")||r.includes("等待截图")||r.includes("浏览完成")||r.includes("任务完成")||e.includes("已完成"))}async function H(t={}){const e=!!t?.silent;e||(U.value=!0);try{const r=await $s();k.today_completed=Number(r?.today_completed||0),k.today_failed=Number(r?.today_failed||0),k.current_running=Number(r?.current_running||0),k.today_items=Number(r?.today_items||0),k.today_attachments=Number(r?.today_attachments||0)}catch(r){r?.response?.status===401&&(window.location.href="/login")}finally{e||(U.value=!1)}}async function ke(){c.value=!0;try{const t=await Rt({refresh:!0});ue(t)}catch(t){t?.response?.status===401&&(window.location.href="/login")}finally{c.value=!1}}async function Qe(){q.value=!0;try{const t=await Xt();F.value=Number(t?.kdocs_auto_upload||0)===1}catch{F.value=!1}finally{q.value=!1}}async function Se(){se.value=!0;try{const t=await Yt();A.enabled=!!t?.enabled,A.online=!!t?.online,A.message=t?.message||""}catch{A.enabled=!1,A.online=!1,A.message=""}finally{se.value=!1}}async function Xe(t){q.value=!0;try{await Zt({kdocs_auto_upload:t?1:0}),f.success(t?"已开启自动上传(测试)":"已关闭自动上传")}catch{F.value=!t}finally{q.value=!1}}async function Ye(t){try{await jt(t.id,{browse_type:C[t.id]||"应读",enable_screenshot:E.value})}catch(e){const r=e?.response?.data;f.error(r?.error||"启动失败")}}async function Ze(t){try{await Mt(t.id)}catch(e){const r=e?.response?.data;f.error(r?.error||"停止失败")}}async function et(t){try{await zt(t.id,{browse_type:C[t.id]||"应读"}),f.success("已提交截图")}catch(e){const r=e?.response?.data;f.error(r?.error||"截图失败")}}async function tt(t){try{await ee.confirm(`确定要删除账号「${t.username}」吗?`,"删除账号",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await Ft(t.id);e?.success?(delete p[t.id],S.value=S.value.filter(r=>r!==t.id),f.success("已删除"),await H()):f.error(e?.error||"删除失败")}catch(e){const r=e?.response?.data;f.error(r?.error||"删除失败")}}function st(){a.username="",a.password="",a.remark="",D.value=!0}async function at(){const t=a.username.trim();if(!t||!a.password.trim()){f.error("用户名和密码不能为空");return}try{await qt({username:t,password:a.password,remember:!0,remark:a.remark.trim()}),f.success("添加成功"),D.value=!1,await H()}catch(e){const r=e?.response?.data;f.error(r?.error||"添加失败")}}function nt(t){d.id=t.id,d.username=t.username,d.password="",d.remark=String(t.remark||""),d.originalRemark=String(t.remark||""),R.value=!0}async function ot(){if(!d.id)return;const t=d.password.trim(),e=d.remark.trim();if(!t&&e===d.originalRemark){f.info("没有修改"),R.value=!1;return}try{if(t){const r=await Ht(d.id,{password:t,remember:!0});r?.account&&Z(r.account)}e!==d.originalRemark&&(await Wt(d.id,{remark:e}),Z({id:d.id,remark:e})),f.success("已更新"),R.value=!1}catch(r){const m=r?.response?.data;f.error(m?.error||"更新失败")}}async function lt(){if(ae("批量操作")){if(S.value.length===0){f.warning("请先选择账号");return}try{const t=await De({account_ids:S.value,browse_type:v.value,enable_screenshot:E.value});f.success(`已启动 ${t?.started_count||0} 个账号`)}catch(t){const e=t?.response?.data;f.error(e?.error||"操作失败")}}}async function rt(){if(ae("批量操作")){if(S.value.length===0){f.warning("请先选择账号");return}try{const t=await Re({account_ids:S.value});f.success(`已停止 ${t?.stopped_count||0} 个账号`)}catch(t){const e=t?.response?.data;f.error(e?.error||"操作失败")}}}async function it(){if(ae("全部启动")){if(w.value.length===0){f.warning("没有账号");return}try{await ee.confirm("确定要启动全部账号吗?","全部启动",{confirmButtonText:"启动",cancelButtonText:"取消",type:"warning"})}catch{return}try{const t=await De({account_ids:w.value.map(e=>e.id),browse_type:v.value,enable_screenshot:E.value});f.success(`已启动 ${t?.started_count||0} 个账号`)}catch(t){const e=t?.response?.data;f.error(e?.error||"操作失败")}}}async function ut(){if(ae("全部停止")){if(w.value.length===0){f.warning("没有账号");return}try{await ee.confirm("确定要停止全部账号吗?","全部停止",{confirmButtonText:"停止",cancelButtonText:"取消",type:"warning"})}catch{return}try{const t=await Re({account_ids:w.value.map(e=>e.id)});f.success(`已停止 ${t?.stopped_count||0} 个账号`)}catch(t){const e=t?.response?.data;f.error(e?.error||"操作失败")}}}async function dt(){if(w.value.length===0){f.warning("没有账号");return}try{await ee.confirm("确定要清空所有账号吗?此操作不可恢复!","清空账号",{confirmButtonText:"继续",cancelButtonText:"取消",type:"warning"}),await ee.confirm("再次确认:真的要删除所有账号吗?","二次确认",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}try{const t=await Kt();if(t?.success){ue([]),S.value=[],f.success("已清空所有账号"),await H();return}f.error(t?.error||"操作失败")}catch(t){const e=t?.response?.data;f.error(e?.error||"操作失败")}}function ct(){const t=m=>{ue(m)},e=m=>{Z(m)},r=m=>{m?.account_id&&Z({id:m.account_id,detail_status:m.stage||"",total_items:m.total_items,progress_items:m.browsed_items,total_attachments:m.total_attachments,progress_attachments:m.viewed_attachments,elapsed_seconds:m.elapsed_seconds,elapsed_display:m.elapsed_display})};return h.on("accounts_list",t),h.on("account_update",e),h.on("task_progress",r),h.connected||h.connect(),()=>{h.off("accounts_list",t),h.off("account_update",e),h.off("task_progress",r)}}let de=null,W=null,G=null;function xe(){return typeof document>"u"?!1:document.visibilityState==="hidden"}const oe=g(()=>w.value.some(t=>!(!t?.is_running||String(t.status||"").includes("排队"))));function pt(){return xe()?na:aa}function ce(){W&&(window.clearTimeout(W),W=null)}function $e(){W||!oe.value||(W=window.setTimeout(async()=>{W=null,await H({silent:!0}).catch(()=>{}),$e()},pt()))}function Ve(){$e()}function Ce(t=null){const e=oe.value;t===!0&&e===!1&&H({silent:!0}).catch(()=>{}),e?Ve():ce()}me(oe,(t,e)=>{Ce(e)});function ft(){return xe()?la:oa}function Te(){G&&(window.clearTimeout(G),G=null)}function pe(){G||(G=window.setTimeout(async()=>{G=null,await Se().catch(()=>{}),pe()},ft()))}function Ee(){oe.value&&(ce(),Ve()),Te(),pe()}return ls(async()=>{l.vipInfo||l.refreshVipInfo().catch(()=>{window.location.href="/login"}),de=ct(),await ke(),await Qe(),await Se(),await H(),Ce(),pe(),window.addEventListener("visibilitychange",Ee)}),rs(()=>{de&&de(),ce(),Te(),window.removeEventListener("visibilitychange",Ee)}),(t,e)=>{const r=Qt,m=ps,mt=xs,x=$t,Ae=At,Pe=Lt,Ne=Jt,Be=Gt,Ie=Ut,Oe=Ct,yt=Tt,gt=Et,_t=Dt,vt=_s,J=It,Q=Nt,Le=Pt,fe=Vt;return y(),$("div",Cs,[n(mt,{gutter:12,class:"stats-row"},{default:o(()=>[n(m,{xs:12,sm:8,md:4},{default:o(()=>[n(r,{shadow:"never",class:"stat-card","body-style":{padding:"14px"}},{default:o(()=>[e[17]||(e[17]=i("div",{class:"stat-label app-muted"},"今日完成",-1)),i("div",Ts,b(k.today_completed),1)]),_:1})]),_:1}),n(m,{xs:12,sm:8,md:4},{default:o(()=>[n(r,{shadow:"never",class:"stat-card","body-style":{padding:"14px"}},{default:o(()=>[e[18]||(e[18]=i("div",{class:"stat-label app-muted"},"今日失败",-1)),i("div",Es,b(k.today_failed),1)]),_:1})]),_:1}),n(m,{xs:12,sm:8,md:4},{default:o(()=>[n(r,{shadow:"never",class:"stat-card","body-style":{padding:"14px"}},{default:o(()=>[e[19]||(e[19]=i("div",{class:"stat-label app-muted"},"运行中",-1)),i("div",As,b(k.current_running),1)]),_:1})]),_:1}),n(m,{xs:12,sm:8,md:4},{default:o(()=>[n(r,{shadow:"never",class:"stat-card","body-style":{padding:"14px"}},{default:o(()=>[e[20]||(e[20]=i("div",{class:"stat-label app-muted"},"浏览内容",-1)),i("div",Ps,b(k.today_items),1)]),_:1})]),_:1}),n(m,{xs:12,sm:8,md:4},{default:o(()=>[n(r,{shadow:"never",class:"stat-card","body-style":{padding:"14px"}},{default:o(()=>[e[21]||(e[21]=i("div",{class:"stat-label app-muted"},"查看附件",-1)),i("div",Ns,b(k.today_attachments),1)]),_:1})]),_:1}),n(m,{xs:12,sm:8,md:4},{default:o(()=>[n(r,{shadow:"never",class:"stat-card","body-style":{padding:"14px"}},{default:o(()=>[e[22]||(e[22]=i("div",{class:"stat-label app-muted"},"账号数",-1)),i("div",Bs,[_(b(I.value),1),i("span",Is,"/ "+b(u(l).isVip?"∞":ze.value),1)])]),_:1})]),_:1})]),_:1}),qe.value?(y(),L(Ae,{key:0,type:"info","show-icon":"",closable:!1,class:"upgrade-banner",title:"升级 VIP,解锁更多功能:无限账号 · 优先排队 · 定时任务 · 批量操作"},{default:o(()=>[i("div",Os,[n(x,{type:"primary",plain:"",onClick:e[0]||(e[0]=s=>K.value=!0)},{default:o(()=>[...e[23]||(e[23]=[_("了解VIP特权",-1)])]),_:1})])]),_:1})):M("",!0),n(r,{shadow:"never",class:"panel","body-style":{padding:"14px"}},{default:o(()=>[i("div",Ls,[e[26]||(e[26]=i("div",{class:"panel-title"},"账号管理",-1)),i("div",Us,[n(x,{loading:c.value,onClick:ke},{default:o(()=>[...e[24]||(e[24]=[_("刷新",-1)])]),_:1},8,["loading"]),n(x,{type:"primary",onClick:st},{default:o(()=>[...e[25]||(e[25]=[_("添加账号",-1)])]),_:1})])]),i("div",Ds,[i("div",Rs,[n(Pe,{"model-value":Fe.value,onChange:We},{default:o(()=>[...e[27]||(e[27]=[_("全选",-1)])]),_:1},8,["model-value"]),i("span",Ks,"已选 "+b(he.value)+" 个",1)]),i("div",js,[n(Be,{modelValue:v.value,"onUpdate:modelValue":e[1]||(e[1]=s=>v.value=s),size:"small",style:{width:"120px"}},{default:o(()=>[(y(),$(le,null,ye(O,s=>n(Ne,{key:s.value,label:s.label,value:s.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"]),n(Ie,{modelValue:E.value,"onUpdate:modelValue":e[2]||(e[2]=s=>E.value=s),"inline-prompt":"","active-text":"截图","inactive-text":"不截图"},null,8,["modelValue"]),n(Ie,{modelValue:F.value,"onUpdate:modelValue":e[3]||(e[3]=s=>F.value=s),disabled:q.value,"inline-prompt":"","active-text":"上传","inactive-text":"不传",onChange:Xe},null,8,["modelValue","disabled"]),e[28]||(e[28]=i("span",{class:"app-muted"},"表格(测试)",-1)),A.enabled?(y(),L(Oe,{key:0,type:A.online?"success":"warning",size:"small",effect:"plain"},{default:o(()=>[_(b(A.online?"✅ 就绪":"⚠️ 离线"),1)]),_:1},8,["type"])):M("",!0)]),i("div",Ms,[n(x,{type:"primary",onClick:lt},{default:o(()=>[...e[29]||(e[29]=[_("批量启动",-1)])]),_:1}),n(x,{onClick:rt},{default:o(()=>[...e[30]||(e[30]=[_("批量停止",-1)])]),_:1}),n(x,{type:"success",plain:"",onClick:it},{default:o(()=>[...e[31]||(e[31]=[_("全部启动",-1)])]),_:1}),n(x,{type:"danger",plain:"",onClick:ut},{default:o(()=>[...e[32]||(e[32]=[_("全部停止",-1)])]),_:1}),n(x,{type:"danger",text:"",onClick:dt},{default:o(()=>[...e[33]||(e[33]=[_("清空",-1)])]),_:1})])]),c.value?(y(),L(yt,{key:0,rows:5,animated:""})):(y(),$(le,{key:1},[w.value.length===0?(y(),L(gt,{key:0,description:"暂无账号,点击右上角添加"})):(y(),$("div",zs,[(y(!0),$(le,null,ye(w.value,s=>(y(),L(r,{key:s.id,shadow:"never",class:"account-card","body-style":{padding:"14px"}},{default:o(()=>[i("div",Fs,[n(_t,{modelValue:S.value,"onUpdate:modelValue":e[4]||(e[4]=T=>S.value=T),class:"card-check"},{default:o(()=>[n(Pe,{value:s.id},null,8,["value"])]),_:2},1032,["modelValue"]),i("div",qs,[i("div",Hs,[i("span",Ws,b(s.username),1),n(Oe,{size:"small",type:Je(s.status),effect:"light"},{default:o(()=>[_(b(s.status),1)]),_:2},1032,["type"])]),i("div",Gs,[_(b(s.remark||"—")+" ",1),ne(s)&&s.detail_status?(y(),$("span",Js," · "+b(s.detail_status),1)):M("",!0),ne(s)&&s.elapsed_display?(y(),$("span",Qs," · "+b(s.elapsed_display),1)):M("",!0),String(s.status||"").includes("排队")&&s.queue_ahead!=null?(y(),$("span",Xs," · 前面 "+b(s.queue_ahead)+" 个 · 运行中 "+b(s.queue_running_total??0)+" 个 ",1)):ne(s)&&(s.queue_pending_total!=null||s.queue_running_total!=null)?(y(),$("span",Ys," · 排队 "+b(s.queue_pending_total??0)+" 个 · 运行中 "+b(s.queue_running_total??0)+" 个 ",1)):M("",!0)])])]),ne(s)?(y(),$("div",Zs,[n(vt,{percentage:Ge(s),"stroke-width":10,"show-text":!1},null,8,["percentage"]),i("div",ea,[i("span",null,"内容 "+b(s.progress_items||0),1)])])):M("",!0),i("div",ta,[n(Be,{modelValue:C[s.id],"onUpdate:modelValue":T=>C[s.id]=T,size:"small",style:{width:"130px"}},{default:o(()=>[(y(),$(le,null,ye(O,T=>n(Ne,{key:T.value,label:T.label,value:T.value},null,8,["label","value"])),64))]),_:1},8,["modelValue","onUpdate:modelValue"]),i("div",sa,[n(x,{size:"small",type:"primary",disabled:s.is_running,onClick:T=>Ye(s)},{default:o(()=>[...e[34]||(e[34]=[_("启动",-1)])]),_:1},8,["disabled","onClick"]),n(x,{size:"small",disabled:!s.is_running,onClick:T=>Ze(s)},{default:o(()=>[...e[35]||(e[35]=[_("停止",-1)])]),_:1},8,["disabled","onClick"]),n(x,{size:"small",disabled:s.is_running,onClick:T=>et(s)},{default:o(()=>[...e[36]||(e[36]=[_("截图",-1)])]),_:1},8,["disabled","onClick"]),n(x,{size:"small",disabled:s.is_running,onClick:T=>nt(s)},{default:o(()=>[...e[37]||(e[37]=[_("编辑",-1)])]),_:1},8,["disabled","onClick"]),n(x,{size:"small",type:"danger",text:"",onClick:T=>tt(s)},{default:o(()=>[...e[38]||(e[38]=[_("删除",-1)])]),_:1},8,["onClick"])])])]),_:2},1024))),128))]))],64))]),_:1}),n(fe,{modelValue:D.value,"onUpdate:modelValue":e[9]||(e[9]=s=>D.value=s),title:"添加账号",width:"min(560px, 92vw)"},{footer:o(()=>[n(x,{onClick:e[8]||(e[8]=s=>D.value=!1)},{default:o(()=>[...e[39]||(e[39]=[_("取消",-1)])]),_:1}),n(x,{type:"primary",onClick:at},{default:o(()=>[...e[40]||(e[40]=[_("添加",-1)])]),_:1})]),default:o(()=>[n(Le,{"label-position":"top"},{default:o(()=>[n(Q,{label:"账号"},{default:o(()=>[n(J,{modelValue:a.username,"onUpdate:modelValue":e[5]||(e[5]=s=>a.username=s),placeholder:"请输入账号",autocomplete:"off"},null,8,["modelValue"])]),_:1}),n(Q,{label:"密码"},{default:o(()=>[n(J,{modelValue:a.password,"onUpdate:modelValue":e[6]||(e[6]=s=>a.password=s),type:"password","show-password":"",placeholder:"请输入密码",autocomplete:"off"},null,8,["modelValue"])]),_:1}),n(Q,{label:"备注(可选,最多200字)"},{default:o(()=>[n(J,{modelValue:a.remark,"onUpdate:modelValue":e[7]||(e[7]=s=>a.remark=s),type:"textarea",rows:3,maxlength:"200","show-word-limit":"",placeholder:"例如:部门/用途"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),n(fe,{modelValue:R.value,"onUpdate:modelValue":e[14]||(e[14]=s=>R.value=s),title:"编辑账号",width:"min(560px, 92vw)"},{footer:o(()=>[n(x,{onClick:e[13]||(e[13]=s=>R.value=!1)},{default:o(()=>[...e[41]||(e[41]=[_("取消",-1)])]),_:1}),n(x,{type:"primary",onClick:ot},{default:o(()=>[...e[42]||(e[42]=[_("保存",-1)])]),_:1})]),default:o(()=>[n(Le,{"label-position":"top"},{default:o(()=>[n(Q,{label:"账号"},{default:o(()=>[n(J,{modelValue:d.username,"onUpdate:modelValue":e[10]||(e[10]=s=>d.username=s),disabled:""},null,8,["modelValue"])]),_:1}),n(Q,{label:"新密码(可选)"},{default:o(()=>[n(J,{modelValue:d.password,"onUpdate:modelValue":e[11]||(e[11]=s=>d.password=s),type:"password","show-password":"",placeholder:"留空表示不修改密码",autocomplete:"off"},null,8,["modelValue"])]),_:1}),n(Q,{label:"备注(可选,最多200字)"},{default:o(()=>[n(J,{modelValue:d.remark,"onUpdate:modelValue":e[12]||(e[12]=s=>d.remark=s),type:"textarea",rows:3,maxlength:"200","show-word-limit":"",placeholder:"例如:部门/用途"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),n(fe,{modelValue:K.value,"onUpdate:modelValue":e[16]||(e[16]=s=>K.value=s),title:"VIP 特权",width:"min(560px, 92vw)"},{footer:o(()=>[n(x,{type:"primary",onClick:e[15]||(e[15]=s=>K.value=!1)},{default:o(()=>[...e[43]||(e[43]=[_("我知道了",-1)])]),_:1})]),default:o(()=>[n(Ae,{type:"info",closable:!1,title:"升级 VIP 后可解锁:无限账号、优先排队、定时任务、批量操作。","show-icon":""}),e[44]||(e[44]=i("div",{class:"vip-body"},[i("div",{class:"vip-tip app-muted"},"升级方式:请通过“反馈”联系管理员开通(与后台一致)。")],-1))]),_:1},8,["modelValue"])])}}},ha=ts(ra,[["__scopeId","data-v-a3d05837"]]);export{ha as default};
|