You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
7.0 KiB
1 lines
7.0 KiB
import{g as q,B as O,c as i,p as d,H as $,a as t,F as w,r as V,q as R,v as f,l as T,t as r,m as z,x as p,y as H,z as A,o as u}from"./Dv-LAQo6.js";import{u as G}from"./mz7Huk5H.js";import{u as I}from"./D7SVvy69.js";import"./D0vUT4uH.js";const J={class:"flex items-center justify-between mb-5"},K=["disabled"],P={class:"flex items-center gap-3 mb-4"},Q=["value"],W={key:0,class:"bg-white rounded-xl shadow-sm border border-slate-100 text-center text-slate-400 py-16"},X={key:1,class:"bg-white rounded-xl shadow-sm border border-slate-100"},Y={class:"overflow-x-auto"},Z={class:"table"},tt={key:0},et={key:1},st={class:"bg-slate-100/80"},lt={colspan:"4",class:"py-2"},ot={class:"font-semibold text-slate-600 text-sm"},nt={class:"text-xs text-slate-400 ml-2"},at={class:"font-mono text-sm font-medium"},it=["title"],ut={class:"text-sm text-slate-400"},dt={class:"text-right"},rt={class:"inline-flex gap-1"},pt=["onClick"],mt=["onClick"],ct={class:"flex items-center gap-3 mb-5"},vt={class:"text-lg font-semibold text-slate-800"},bt={class:"text-xs text-slate-400"},ft={class:"bg-white rounded-xl shadow-sm border border-slate-100 p-6 max-w-2xl"},xt={class:"form-control mb-4"},yt={class:"form-control mb-4"},gt={class:"form-control mb-4"},wt={class:"form-control mb-6"},_t={class:"flex gap-3"},ht=["disabled"],Ut=q({__name:"appconfig",setup(kt){const{consoleApi:c}=G(),{success:S,error:v}=I(),x=p("list"),m=p([]),a=p(0),b=p([]),_=p(!1),h=p(!1),y=p(!1),k=p(""),o=H({id:0,group:"",key:"",value:"",description:""}),B=A(()=>{const s=m.value.find(e=>e.id===a.value);return s?s.name||s.app_name:""}),U=A(()=>{const s=k.value.trim().toLowerCase();return s?b.value.filter(e=>((e.group||"")+(e.key||"")).toLowerCase().includes(s)):b.value}),M=A(()=>{const s={};return U.value.forEach(l=>{const n=l.group||"";(s[n]=s[n]||[]).push(l)}),Object.keys(s).sort((l,n)=>l===""?-1:n===""?1:l<n?-1:1).map(l=>({key:l,label:l||"未分组",items:s[l]}))});async function D(){try{const s=await c("apps/list",{});m.value=s??[],!a.value&&m.value.length&&(a.value=m.value[0].id,await g())}catch(s){v(s?.message??"获取应用列表失败"),m.value=[]}}async function g(){if(!a.value){b.value=[];return}_.value=!0;try{const s=await c("appcfg/list",{app_id:a.value});b.value=s?.items??[]}catch(s){v(s?.message??"获取配置失败"),b.value=[]}finally{_.value=!1}}function E(){g()}function C(){x.value="list",g()}function L(s){s?(y.value=!0,o.id=s.id||0,o.group=s.group||"",o.key=s.key||"",o.value=s.value||"",o.description=s.description||""):(y.value=!1,o.id=0,o.group="",o.key="",o.value="",o.description=""),x.value="form"}async function F(){if(!a.value){v("请先选择应用");return}h.value=!0;try{const s={app_id:a.value,group:o.group.trim(),key:o.key.trim(),value:o.value,description:o.description.trim()};y.value?(s.id=Number(o.id),await c("appcfg/update",s)):await c("appcfg/add",s),S("保存成功"),C()}catch(s){v(s?.message??"保存失败")}finally{h.value=!1}}function N(s){window.confirm("确定删除该配置项吗?")&&c("appcfg/del",{app_id:a.value,ids:[s.id]}).then(()=>{S("删除成功"),g()}).catch(e=>v(e?.message??"删除失败"))}return O(D),(s,e)=>(u(),i("div",null,[d(t("div",null,[t("div",J,[e[9]||(e[9]=t("div",null,[t("h2",{class:"text-lg font-semibold text-slate-800"},"应用环境配置"),t("p",{class:"text-xs text-slate-400 mt-1"},"应用自有的 key/value 配置(音乐、OSS 等),直接读写所选应用的业务库。结构同「全局环境配置」但不分区域。")],-1)),t("button",{class:"btn btn-primary btn-sm text-white",disabled:!a.value,onClick:e[0]||(e[0]=l=>L())},"+ 新增配置",8,K)]),t("div",P,[e[11]||(e[11]=t("span",{class:"text-sm text-slate-500"},"应用",-1)),d(t("select",{"onUpdate:modelValue":e[1]||(e[1]=l=>a.value=l),class:"select select-bordered select-sm min-w-48",onChange:E},[e[10]||(e[10]=t("option",{value:0,disabled:""},"请选择应用",-1)),(u(!0),i(w,null,V(m.value,l=>(u(),i("option",{key:l.id,value:l.id},r(l.name||l.app_name),9,Q))),128))],544),[[R,a.value,void 0,{number:!0}]]),d(t("input",{"onUpdate:modelValue":e[2]||(e[2]=l=>k.value=l),class:"input input-bordered input-sm w-48",placeholder:"按分组/键搜索"},null,512),[[f,k.value]])]),a.value?(u(),i("div",X,[t("div",Y,[t("table",Z,[e[15]||(e[15]=t("thead",null,[t("tr",null,[t("th",null,"键"),t("th",null,"值"),t("th",null,"描述"),t("th",{class:"text-right"},"操作")])],-1)),t("tbody",null,[_.value?(u(),i("tr",tt,[...e[13]||(e[13]=[t("td",{colspan:"4",class:"text-center py-8"},[t("span",{class:"loading loading-spinner loading-sm"})],-1)])])):U.value.length?T("",!0):(u(),i("tr",et,[...e[14]||(e[14]=[t("td",{colspan:"4",class:"text-center text-slate-400 py-8"},"暂无配置",-1)])])),(u(!0),i(w,null,V(M.value,l=>(u(),i(w,{key:l.key},[t("tr",st,[t("td",lt,[t("span",ot,"▸ "+r(l.label),1),t("span",nt,r(l.items.length)+" 项",1)])]),(u(!0),i(w,null,V(l.items,n=>(u(),i("tr",{key:n.id,class:"hover"},[t("td",at,r(n.key||""),1),t("td",{class:"text-sm text-slate-500 max-w-xs truncate",title:n.value||""},r(n.value||""),9,it),t("td",ut,r(n.description||""),1),t("td",dt,[t("div",rt,[t("button",{class:"btn btn-ghost btn-xs",onClick:j=>L(n)},"编辑",8,pt),t("button",{class:"btn btn-ghost btn-xs text-red-500",onClick:j=>N(n)},"删除",8,mt)])])]))),128))],64))),128))])])])])):(u(),i("div",W,[...e[12]||(e[12]=[t("div",{class:"text-4xl mb-2"},"🗂️",-1),t("p",{class:"text-sm"},"请先在上方选择一个应用",-1)])]))],512),[[$,x.value==="list"]]),d(t("div",null,[t("div",ct,[t("button",{class:"btn btn-ghost btn-sm",onClick:e[3]||(e[3]=l=>C())},"← 返回列表"),t("h2",vt,r(y.value?"编辑配置":"新增配置"),1),t("span",bt,"应用:"+r(B.value),1)]),t("div",ft,[t("form",{onSubmit:z(F,["prevent"])},[t("div",xt,[e[16]||(e[16]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"分组 (group)")],-1)),d(t("input",{"onUpdate:modelValue":e[4]||(e[4]=l=>o.group=l),type:"text",class:"input input-bordered w-full",placeholder:"如 music / oss / other"},null,512),[[f,o.group]])]),t("div",yt,[e[17]||(e[17]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"键 (key) *")],-1)),d(t("input",{"onUpdate:modelValue":e[5]||(e[5]=l=>o.key=l),type:"text",class:"input input-bordered w-full",required:"",placeholder:"如 oss_access_key"},null,512),[[f,o.key]])]),t("div",gt,[e[18]||(e[18]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"值 (value)")],-1)),d(t("textarea",{"onUpdate:modelValue":e[6]||(e[6]=l=>o.value=l),class:"textarea textarea-bordered w-full font-mono text-sm",rows:"3"},null,512),[[f,o.value]])]),t("div",wt,[e[19]||(e[19]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"描述")],-1)),d(t("input",{"onUpdate:modelValue":e[7]||(e[7]=l=>o.description=l),type:"text",class:"input input-bordered w-full"},null,512),[[f,o.description]])]),t("div",_t,[t("button",{type:"button",class:"btn btn-ghost",onClick:e[8]||(e[8]=l=>C())},"取消"),t("button",{type:"submit",class:"btn btn-primary text-white",disabled:h.value},"保存",8,ht)])],32)])],512),[[$,x.value==="form"]])]))}});export{Ut as default};
|
|
|