flex-mcp 1.0.4 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/configs.js +251 -30
- package/dist/api/configs.js.map +1 -1
- package/dist/mcp/aggregator.d.ts.map +1 -1
- package/dist/mcp/aggregator.js +43 -13
- package/dist/mcp/aggregator.js.map +1 -1
- package/dist/mcp/post-sse-transport.d.ts +4 -0
- package/dist/mcp/post-sse-transport.d.ts.map +1 -1
- package/dist/mcp/post-sse-transport.js +118 -5
- package/dist/mcp/post-sse-transport.js.map +1 -1
- package/dist/mcp/tool-sync.d.ts.map +1 -1
- package/dist/mcp/tool-sync.js +12 -14
- package/dist/mcp/tool-sync.js.map +1 -1
- package/dist/web/assets/{Blank-BerVeAls.js → Blank-2vpGi200.js} +1 -1
- package/dist/web/assets/{Configs-BZ4p1nld.js → Configs-4PrDyfwx.js} +1 -1
- package/dist/web/assets/Dashboard-D8vYINT3.js +30 -0
- package/dist/web/assets/InitScriptEditor-RtEtxdk9.js +679 -0
- package/dist/web/assets/{Layout-Br6VMRob.js → Layout-C5VF6KaE.js} +1 -1
- package/dist/web/assets/{Layout-SLPXm-dk.js → Layout-CYzaFG4l.js} +1 -1
- package/dist/web/assets/{Login-Cn9EfrvS.js → Login-DEm7Yc0V.js} +1 -1
- package/dist/web/assets/{Login-Cm10QZJ1.js → Login-uQx8mYT4.js} +1 -1
- package/dist/web/assets/{Users-Dj8FIlX1.js → Users-zZdxWL7h.js} +1 -1
- package/dist/web/assets/{index-Dy8wTpRZ.js → index-NmCbGUEa.js} +2 -2
- package/dist/web/assets/style-hUGligFl.css +1 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/api/resources.d.ts +0 -6
- package/dist/api/resources.d.ts.map +0 -1
- package/dist/api/resources.js +0 -159
- package/dist/api/resources.js.map +0 -1
- package/dist/web/assets/Dashboard-DVSQDspm.js +0 -27
- package/dist/web/assets/InitScriptEditor-DlF0Jn7f.js +0 -679
- package/dist/web/assets/style-0VyF1s_q.css +0 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import{d as $e,u as Se,r as m,p as le,A as De,c as y,b as a,f as o,w as n,g as l,B as $,k as q,C as Ie,D as ce,o as w,h,N as Ce,j as W,E as ze,n as I,G as ye,H as Ae,I as Te,J as X,K as Ve,L as _e,m as te,F as fe,s as me,t as K,M as He,O as Ue,x as Ne,y as xe,P as Oe,Q as je,R as Le,S as Ee,U as Pe,V as ge,W as Je,X as qe,Y as Fe,Z as Be,_ as We,v as Ke,a as Ye,q as Ge,z as Qe,i as Xe}from"./index-NmCbGUEa.js";import{g as Ze,p as et,_ as tt,u as Re,I as at,C as st,M as lt}from"./InitScriptEditor-RtEtxdk9.js";import{_ as Me}from"./_plugin-vue_export-helper-DlAUqK2U.js";const nt={class:"variables-manager"},ot={class:"variables-toolbar"},rt={class:"variables-table-container"},it={class:"modal-form-wrapper"},ut=$e({__name:"VariablesManager",props:{config:{}},emits:["update"],setup(ne,{emit:_}){const f=ne,p=_,A=Se(),c=m(!1),E=m(!1),z=m(null),O=m(),R=m(""),U={pageSize:10,showSizePicker:!0,pageSizes:[10,20,50]},G=C=>({style:"cursor: pointer; transition: all 0.2s ease;",onMouseenter:u=>{u.currentTarget.style.backgroundColor="rgba(99, 102, 241, 0.04)"},onMouseleave:u=>{u.currentTarget.style.backgroundColor=""}}),H=[{title:"变量名",key:"name",width:100,render(C){return I("strong",C.name)}},{title:"值",key:"value",width:500,render(C){if(C.isSecret)return I(ye,{type:"info",depth:3,italic:!0},{default:()=>"****** (敏感信息)"});const u=String(C.value).split(`
|
|
2
|
+
`).map((b,Q,oe)=>{const ae=[I("span",{class:"value-line"},b)];return Q<oe.length-1&&ae.push(I("br")),ae}).flat();return I("div",{class:"variable-value-cell"},u)}},{title:"描述",key:"description",width:300,render(C){return I(ye,{depth:3},{default:()=>C.description||"-"})}},{title:"操作",key:"actions",width:150,render(C){return I(Ae,{size:"small"},{default:()=>[I($,{size:"small",onClick:()=>V(C)},{default:()=>"编辑"}),I($,{size:"small",type:"error",onClick:()=>P(C.id)},{default:()=>"删除"})]})}}],B=le(()=>{if(!R.value)return f.config.variables;const C=R.value.toLowerCase();return f.config.variables.filter(u=>{var b;return u.name.toLowerCase().includes(C)||((b=u.description)==null?void 0:b.toLowerCase().includes(C))})}),x=m({name:"",value:"",description:"",isSecret:!1}),L={name:{required:!0,message:"请输入变量名",trigger:"blur"},value:{required:!0,message:"请输入变量值",trigger:"blur"}};function V(C){z.value=C,x.value={name:C.name,value:C.value,description:C.description||"",isSecret:C.isSecret||!1},c.value=!0}function P(C){const u=f.config.variables.filter(b=>b.id!==C);p("update",{variables:u})}async function ve(){var C,u;try{await((C=O.value)==null?void 0:C.validate()),E.value=!0;const b={id:((u=z.value)==null?void 0:u.id)||Ze(),name:x.value.name,value:x.value.value,description:x.value.description||void 0,isSecret:x.value.isSecret},Q=[...f.config.variables],oe=Q.findIndex(ae=>ae.id===b.id);oe!==-1?Q[oe]=b:Q.push(b),p("update",{variables:Q}),c.value=!1,J()}catch(b){A.error(b.message)}finally{E.value=!1}}function J(){z.value=null,x.value={name:"",value:"",description:"",isSecret:!1}}return De(()=>c.value,C=>{C||J()}),(C,u)=>(w(),y("div",nt,[a("div",ot,[o(l($),{type:"primary",size:"large",class:"add-variable-btn",onClick:u[0]||(u[0]=b=>c.value=!0)},{icon:n(()=>[...u[8]||(u[8]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M12 4v16m8-8H4",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[u[9]||(u[9]=h(" 添加变量 ",-1))]),_:1}),o(l(q),{value:R.value,"onUpdate:value":u[1]||(u[1]=b=>R.value=b),placeholder:"搜索变量名或描述...",size:"large",clearable:"",class:"search-input"},{prefix:n(()=>[...u[10]||(u[10]=[a("svg",{class:"search-icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1},8,["value"])]),a("div",rt,[o(l(Ie),{columns:H,data:B.value,pagination:U,"row-props":G,class:"modern-table"},null,8,["data"])]),o(l(ce),{show:c.value,"onUpdate:show":u[7]||(u[7]=b=>c.value=b),preset:"dialog",title:z.value?"编辑变量":"添加变量",class:"variable-edit-modal",style:{maxHeight:"90vh"}},{action:n(()=>[o(l($),{onClick:u[6]||(u[6]=b=>c.value=!1)},{default:n(()=>[...u[12]||(u[12]=[h("取消",-1)])]),_:1}),o(l($),{type:"primary",loading:E.value,onClick:ve},{default:n(()=>[...u[13]||(u[13]=[h("保存",-1)])]),_:1},8,["loading"])]),default:n(()=>[a("div",it,[o(l(Ce),{ref_key:"formRef",ref:O,model:x.value,rules:L},{default:n(()=>[o(l(W),{path:"name",label:"变量名"},{default:n(()=>[o(l(q),{value:x.value.name,"onUpdate:value":u[2]||(u[2]=b=>x.value.name=b),placeholder:"例如: API_KEY"},null,8,["value"])]),_:1}),o(l(W),{path:"value",label:"值"},{default:n(()=>[o(l(q),{value:x.value.value,"onUpdate:value":u[3]||(u[3]=b=>x.value.value=b),type:x.value.isSecret?"password":"textarea",rows:x.value.isSecret?void 0:3,placeholder:"变量值"},null,8,["value","type","rows"])]),_:1}),o(l(W),{path:"description",label:"描述"},{default:n(()=>[o(l(q),{value:x.value.description,"onUpdate:value":u[4]||(u[4]=b=>x.value.description=b),type:"textarea",rows:2,placeholder:"可选"},null,8,["value"])]),_:1}),o(l(W),{path:"isSecret",label:"敏感信息"},{default:n(()=>[o(l(ze),{checked:x.value.isSecret,"onUpdate:checked":u[5]||(u[5]=b=>x.value.isSecret=b)},{default:n(()=>[...u[11]||(u[11]=[h("标记为敏感信息(导出时使用占位符)",-1)])]),_:1},8,["checked"])]),_:1})]),_:1},8,["model"])])]),_:1},8,["show","title"])]))}}),dt=Me(ut,[["__scopeId","data-v-f50b6ccd"]]),ct={class:"prompts-manager"},vt={class:"prompts-toolbar"},pt={class:"prompts-table-container"},ft={class:"modal-header"},mt={class:"modal-title"},gt={class:"modal-subtitle"},wt={class:"modal-content-wrapper"},ht={class:"tab-pane-content"},bt={class:"form-section"},kt={class:"form-grid-2"},yt={class:"form-section"},xt={class:"section-header"},Ct={class:"parameters-list"},$t={class:"parameter-header"},St={class:"parameter-index"},Dt={class:"parameter-fields"},Mt={key:0,class:"empty-parameters"},_t={class:"tab-pane-content"},zt={style:{display:"flex","align-items":"center",gap:"8px"}},Tt={viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{width:"18px",height:"18px"}},Ut={class:"messages-section"},Nt={class:"message-header"},jt={class:"save-status-indicator"},It=["title"],Bt={key:0,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},At={key:1,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Vt={key:0,class:"monaco-wrapper"},Et={key:0,class:"empty-messages"},Rt={class:"modal-footer"},Ht={class:"test-content"},Ot={class:"test-messages"},Lt={class:"test-message-header"},Pt={class:"test-message-content"},Jt={key:0,class:"test-message-empty"},qt=$e({__name:"PromptsManager",setup(ne){const _=Se(),f=m(!1),p=m(!1),A=m(!1),c=m(!1),E=m(!1),z=m(null),O=m(),R=m(""),U=m([]),G=m("content"),H=m(!1),B=m(-1),x=m(new Map),L=m(!1),V=[{label:"用户",value:"user"},{label:"助手",value:"assistant"}],P={pageSize:10,showSizePicker:!0,pageSizes:[10,20,50]},ve=d=>({style:"cursor: pointer; transition: all 0.2s ease;",onMouseenter:t=>{t.currentTarget.style.backgroundColor="rgba(99, 102, 241, 0.04)"},onMouseleave:t=>{t.currentTarget.style.backgroundColor=""}}),J=[{title:"名称",key:"name",width:200,render(d){return I("strong",d.name)}},{title:"描述",key:"description",render(d){return I(ye,{depth:3},{default:()=>d.description||"-"})}},{title:"参数数量",key:"arguments",width:120,render(d){return I(ye,{depth:3},{default:()=>{var t;return`${((t=d.arguments)==null?void 0:t.length)||0} 个`}})}},{title:"消息数量",key:"messages",width:120,render(d){return I(ye,{depth:3},{default:()=>{var t;return`${((t=d.messages)==null?void 0:t.length)||0} 条`}})}},{title:"操作",key:"actions",width:200,render(d){return I(Ae,{size:"small"},{default:()=>[I($,{size:"small",onClick:()=>ue(d)},{default:()=>"编辑"}),I($,{size:"small",type:"info",onClick:()=>r(d)},{default:()=>"测试"}),I($,{size:"small",type:"error",onClick:()=>we(d.id)},{default:()=>"删除"})]})}}],C=le(()=>{if(!R.value)return U.value;const d=R.value.toLowerCase();return U.value.filter(t=>{var e;return t.name.toLowerCase().includes(d)||((e=t.description)==null?void 0:e.toLowerCase().includes(d))})}),u=m({name:"",description:"",arguments:[],messages:[]}),b=m({arguments:{}}),Q=le(()=>!p.value||!u.value.messages||u.value.messages.length===0?[]:u.value.messages.filter(t=>t.content.text).map(t=>({...t,content:{...t.content,text:et(t.content.text,b.value.arguments)}}))),oe={name:{required:!0,message:"请输入提示词名称",trigger:"blur"},messages:{required:!0,validator:(d,t)=>!t||t.length===0?new Error("至少需要一条消息"):!0,trigger:"blur"}};function ae(d){return x.value.get(d)||!1}function se(d){x.value.set(d,!0)}function ie(d){H.value&&B.value===d?(H.value=!1,B.value=-1):(H.value=!0,B.value=d)}async function Z(){var d,t;try{E.value=!0;const e=await X.get("/prompts");e.data.success&&(U.value=e.data.data)}catch(e){_.error(((t=(d=e.response)==null?void 0:d.data)==null?void 0:t.error)||"加载提示词失败")}finally{E.value=!1}}function pe(){z.value=null,T(),f.value=!0,G.value="content"}function ue(d){z.value=d,u.value={name:d.name,description:d.description||"",arguments:d.arguments?[...d.arguments]:[],messages:d.messages&&d.messages.length>0?[...d.messages]:[{role:"user",content:{type:"text",text:""}}]},x.value.clear(),f.value=!0,G.value="content"}async function we(d){var t,e;try{await X.delete(`/prompts/${d}`),_.success("删除成功"),await Z()}catch(s){_.error(((e=(t=s.response)==null?void 0:t.data)==null?void 0:e.error)||"删除失败")}}function he(){u.value.arguments.push({name:"",description:"",required:!1})}function re(d){u.value.arguments.splice(d,1)}function be(){u.value.messages.push({role:"user",content:{type:"text",text:""}}),se(u.value.messages.length-1)}function de(d){u.value.messages.splice(d,1),x.value.delete(d),B.value===d?(H.value=!1,B.value=-1):B.value>d&&B.value--}async function ke(){var d,t,e;try{await((d=O.value)==null?void 0:d.validate()),A.value=!0;const s={name:u.value.name,description:u.value.description||void 0,arguments:u.value.arguments.filter(i=>i.name),messages:u.value.messages.filter(i=>i.content.text)};z.value?(await X.put(`/prompts/${z.value.id}`,s),_.success("更新成功")):(await X.post("/prompts",s),_.success("创建成功")),x.value.clear(),f.value=!1,await Z(),T()}catch(s){_.error(((e=(t=s.response)==null?void 0:t.data)==null?void 0:e.error)||"保存失败")}finally{A.value=!1}}async function g(){var d,t,e;try{await((d=O.value)==null?void 0:d.validate()),c.value=!0;const s=u.value.arguments.filter(i=>i.name);b.value.arguments=s.reduce((i,j)=>(i[j.name]=b.value.arguments[j.name]||"",i),{}),p.value=!0}catch(s){_.error(((e=(t=s.response)==null?void 0:t.data)==null?void 0:e.error)||"测试失败")}finally{c.value=!1}}async function r(d){z.value=d,u.value={name:d.name,description:d.description||"",arguments:d.arguments?[...d.arguments]:[],messages:d.messages?[...d.messages]:[]};const t=u.value.arguments.filter(e=>e.name);b.value.arguments=t.reduce((e,s)=>(e[s.name]="",e),{}),await g()}function T(){z.value=null,u.value={name:"",description:"",arguments:[],messages:[{role:"user",content:{type:"text",text:`# 提示词模板
|
|
3
|
+
|
|
4
|
+
## 变量替换
|
|
5
|
+
用户名:{{username}}
|
|
6
|
+
任务类型:{{taskType}}
|
|
7
|
+
|
|
8
|
+
## 条件逻辑
|
|
9
|
+
|
|
10
|
+
{{#if includeDetails}}
|
|
11
|
+
详细信息:{{projectName}} - {{deadline}}
|
|
12
|
+
{{/if}}
|
|
13
|
+
|
|
14
|
+
{{#if urgent}}
|
|
15
|
+
⚠️ 紧急任务
|
|
16
|
+
{{else}}
|
|
17
|
+
普通任务
|
|
18
|
+
{{/if}}
|
|
19
|
+
|
|
20
|
+
{{#ifnot completed}}
|
|
21
|
+
进行中
|
|
22
|
+
{{else}}
|
|
23
|
+
已完成
|
|
24
|
+
{{/ifnot}}`}}]},b.value.arguments={},x.value.clear(),H.value=!1,B.value=-1,L.value=!1}return De(()=>f.value,async d=>{d?(await Le(),await new Promise(t=>setTimeout(t,150)),L.value=!0):(T(),L.value=!1)}),Te(()=>{Z()}),(d,t)=>(w(),y("div",ct,[a("div",vt,[o(l($),{type:"primary",size:"large",class:"add-prompt-btn",onClick:pe},{icon:n(()=>[...t[8]||(t[8]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M12 4v16m8-8H4",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[t[9]||(t[9]=h(" 添加提示词 ",-1))]),_:1}),o(l(q),{value:R.value,"onUpdate:value":t[0]||(t[0]=e=>R.value=e),placeholder:"搜索提示词名称或描述...",size:"large",clearable:"",class:"search-input"},{prefix:n(()=>[...t[10]||(t[10]=[a("svg",{class:"search-icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1},8,["value"])]),a("div",pt,[o(l(Ie),{columns:J,data:C.value,pagination:P,"row-props":ve,loading:E.value,class:"modern-table"},null,8,["data","loading"])]),o(l(ce),{show:f.value,"onUpdate:show":t[5]||(t[5]=e=>f.value=e),preset:"card",bordered:!1,class:"prompt-edit-modal",style:{width:"90vw",maxWidth:"1400px",height:"90vh",maxHeight:"90vh"}},{header:n(()=>[a("div",ft,[t[11]||(t[11]=a("div",{class:"modal-icon"},[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),a("path",{d:"M14 2v6h6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),a("path",{d:"M16 13H8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"}),a("path",{d:"M16 17H8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"}),a("path",{d:"M10 9H8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})])],-1)),a("div",null,[a("h3",mt,K(z.value?"编辑提示词":"创建提示词"),1),a("p",gt,K(z.value?"修改提示词的内容和参数":"定义提示词模板和参数"),1)])])]),footer:n(()=>[a("div",Rt,[o(l($),{size:"large",onClick:t[4]||(t[4]=e=>f.value=!1)},{default:n(()=>[...t[30]||(t[30]=[h("取消",-1)])]),_:1}),o(l($),{type:"info",size:"large",onClick:g,loading:c.value},{default:n(()=>[...t[31]||(t[31]=[h("测试",-1)])]),_:1},8,["loading"]),o(l($),{type:"primary",size:"large",loading:A.value,onClick:ke},{default:n(()=>[h(K(z.value?"保存修改":"创建提示词"),1)]),_:1},8,["loading"])])]),default:n(()=>[a("div",wt,[o(l(Ce),{ref_key:"formRef",ref:O,model:u.value,rules:oe,class:"prompt-form"},{default:n(()=>[o(l(Ve),{value:G.value,"onUpdate:value":t[3]||(t[3]=e=>G.value=e),type:"line",animated:"",size:"large",class:"prompt-config-tabs"},{default:n(()=>[o(l(_e),{name:"config",tab:"参数和描述"},{default:n(()=>[a("div",ht,[a("div",bt,[t[14]||(t[14]=a("h4",{class:"section-title"},"基础信息",-1)),a("div",kt,[o(l(W),{path:"name"},{label:n(()=>[...t[12]||(t[12]=[a("div",{class:"form-label"},[a("svg",{class:"label-icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),a("span",null,"提示词名称")],-1)])]),default:n(()=>[o(l(q),{value:u.value.name,"onUpdate:value":t[1]||(t[1]=e=>u.value.name=e),placeholder:"例如: code-review",size:"large"},null,8,["value"])]),_:1}),o(l(W),{path:"description"},{label:n(()=>[...t[13]||(t[13]=[a("div",{class:"form-label"},[a("svg",{class:"label-icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),a("span",null,"描述")],-1)])]),default:n(()=>[o(l(q),{value:u.value.description,"onUpdate:value":t[2]||(t[2]=e=>u.value.description=e),placeholder:"提示词的描述信息(可选)",size:"large"},null,8,["value"])]),_:1})])]),a("div",yt,[a("div",xt,[t[17]||(t[17]=a("h4",{class:"section-title"},"参数定义",-1)),o(l($),{dashed:"",onClick:he,size:"medium"},{icon:n(()=>[...t[15]||(t[15]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M12 4v16m8-8H4",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[t[16]||(t[16]=h(" 添加参数 ",-1))]),_:1})]),a("div",Ct,[(w(!0),y(fe,null,me(u.value.arguments,(e,s)=>(w(),y("div",{key:s,class:"parameter-card"},[a("div",$t,[a("span",St,"#"+K(s+1),1),o(l($),{type:"error",text:"",size:"small",onClick:i=>re(s)},{icon:n(()=>[...t[18]||(t[18]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[t[19]||(t[19]=h(" 删除 ",-1))]),_:1},8,["onClick"])]),a("div",Dt,[o(l(W),{label:"必填",class:"required-field"},{default:n(()=>[o(l(ze),{checked:e.required,"onUpdate:checked":i=>e.required=i},null,8,["checked","onUpdate:checked"])]),_:2},1024),o(l(W),{label:"参数名",path:`arguments[${s}].name`,rule:{required:!0,message:"必填",trigger:"blur"}},{default:n(()=>[o(l(q),{value:e.name,"onUpdate:value":i=>e.name=i,placeholder:"参数名"},null,8,["value","onUpdate:value"])]),_:2},1032,["path"]),o(l(W),{label:"描述"},{default:n(()=>[o(l(q),{value:e.description,"onUpdate:value":i=>e.description=i,placeholder:"参数描述(可选)"},null,8,["value","onUpdate:value"])]),_:2},1024)])]))),128)),u.value.arguments.length===0?(w(),y("div",Mt,[...t[20]||(t[20]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"2"}),a("path",{d:"M12 16v-4m0-4h.01",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1),a("p",null,"暂无参数,点击上方按钮添加参数",-1)])])):te("",!0)])])])]),_:1}),o(l(_e),{name:"content",tab:"提示词内容"},{default:n(()=>[a("div",_t,[o(l(He),{type:"info",bordered:!1,class:"template-help-alert"},{header:n(()=>[a("div",zt,[(w(),y("svg",Tt,[...t[21]||(t[21]=[a("path",{d:"M12 22c5.421 0 10-4.579 10-10h-2a8 8 0 11-8-8v2c0 5.421-4.579 10-10 10z",fill:"currentColor",opacity:"0.1"},null,-1),a("path",{d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])),t[22]||(t[22]=a("span",{style:{"font-weight":"600"}},"模板语法说明",-1))])]),default:n(()=>[t[23]||(t[23]=a("div",{class:"template-help-content"},[a("p",null,[a("strong",null,"变量替换:"),h("使用 "),a("code",null,"{{变量名}}"),h(" 来替换变量值")]),a("p",null,[a("strong",null,"条件逻辑:")]),a("ul",null,[a("li",null,[a("code",null,"{{#if 变量名}}...{{/if}}"),h(" - 当变量为真值时显示内容")]),a("li",null,[a("code",null,"{{#ifnot 变量名}}...{{/ifnot}}"),h(" - 当变量为假值时显示内容")]),a("li",null,[a("code",null,"{{#if 变量名}}...{{else}}...{{/if}}"),h(" - 支持 else 分支")])]),a("p",null,[a("strong",null,"真值判断:"),h("非空字符串、非零数字、true、非空数组/对象都被视为真值")])],-1))]),_:1}),a("div",Ut,[(w(!0),y(fe,null,me(u.value.messages,(e,s)=>(w(),y("div",{key:s,class:"message-editor-wrapper"},[a("div",Nt,[o(l(Ue),{value:e.role,"onUpdate:value":i=>e.role=i,options:V,size:"small",class:"role-selector"},null,8,["value","onUpdate:value"]),o(l($),{text:"",type:"error",size:"small",onClick:i=>de(s),class:"remove-message-btn"},{icon:n(()=>[...t[24]||(t[24]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1},8,["onClick"])]),a("div",{class:Ne(["editor-container",{fullscreen:H.value&&B.value===s}])},[a("div",jt,[a("div",{class:Ne(["status-dot",{unsaved:ae(s),saved:!ae(s)}]),title:ae(s)?"未保存":"已保存"},null,10,It)]),o(l($),{type:"default",size:"small",class:"fullscreen-btn",onClick:i=>ie(s)},{icon:n(()=>[!H.value||B.value!==s?(w(),y("svg",Bt,[...t[25]||(t[25]=[a("path",{d:"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])):(w(),y("svg",At,[...t[26]||(t[26]=[a("path",{d:"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))]),default:n(()=>[h(" "+K(H.value&&B.value===s?"退出全屏":"全屏"),1)]),_:2},1032,["onClick"]),f.value&&L.value?(w(),y("div",Vt,[o(tt,{modelValue:e.content.text,"onUpdate:modelValue":i=>e.content.text=i,language:"markdown",theme:"vs",options:{minimap:{enabled:!1},fontSize:14,lineHeight:22,padding:{top:16,bottom:16},scrollBeyondLastLine:!1,automaticLayout:!0,wordWrap:"on"},onChange:()=>se(s)},null,8,["modelValue","onUpdate:modelValue","onChange"])])):te("",!0)],2)]))),128)),o(l($),{dashed:"",onClick:be,class:"add-message-btn",size:"small"},{icon:n(()=>[...t[27]||(t[27]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M12 4v16m8-8H4",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[t[28]||(t[28]=h(" 添加消息模板 ",-1))]),_:1}),u.value.messages.length===0?(w(),y("div",Et,[...t[29]||(t[29]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1),a("p",null,"暂无消息,点击下方按钮添加消息模板",-1)])])):te("",!0)])])]),_:1})]),_:1},8,["value"])]),_:1},8,["model"])])]),_:1},8,["show"]),o(l(ce),{show:p.value,"onUpdate:show":t[7]||(t[7]=e=>p.value=e),preset:"card",title:"测试提示词",style:{width:"90vw",maxWidth:"800px"}},{action:n(()=>[o(l($),{onClick:t[6]||(t[6]=e=>p.value=!1)},{default:n(()=>[...t[34]||(t[34]=[h("关闭",-1)])]),_:1})]),default:n(()=>[a("div",Ht,[o(l(Ce),{model:b.value},{default:n(()=>[(w(!0),y(fe,null,me(u.value.arguments,e=>(w(),xe(l(W),{key:e.name,label:e.name,required:e.required},{default:n(()=>[o(l(q),{value:b.value.arguments[e.name],"onUpdate:value":s=>b.value.arguments[e.name]=s,placeholder:e.description||`输入 ${e.name}`,clearable:""},null,8,["value","onUpdate:value","placeholder"])]),_:2},1032,["label","required"]))),128))]),_:1},8,["model"]),o(l(Oe),null,{default:n(()=>[...t[32]||(t[32]=[h("生成的消息(实时预览)",-1)])]),_:1}),a("div",Ot,[(w(!0),y(fe,null,me(Q.value,(e,s)=>(w(),y("div",{key:s,class:"test-message"},[a("div",Lt,[o(l(je),{type:e.role==="user"?"info":"success"},{default:n(()=>[h(K(e.role==="user"?"用户":"助手"),1)]),_:2},1032,["type"])]),a("pre",Pt,K(e.content.text),1)]))),128)),Q.value.length===0?(w(),y("div",Jt,[...t[33]||(t[33]=[a("p",null,"暂无消息内容",-1)])])):te("",!0)])])]),_:1},8,["show"])]))}}),Ft=Me(qt,[["__scopeId","data-v-7fa89c44"]]),Wt={class:"table-editor"},Kt={class:"editor-toolbar"},Yt={class:"toolbar-left"},Gt={key:0,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Qt={key:1,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Xt={class:"toolbar-right"},Zt={class:"save-indicator-wrapper"},ea={key:0,class:"table-container"},ta={class:"table-wrapper",ref:"tableWrapperRef"},aa={key:1,class:"no-table-message"},sa={class:"import-content"},la={class:"json-editor-wrapper"},na={class:"json-editor-actions"},oa={class:"batch-loading-content"},ra={class:"loading-text"},ia=$e({__name:"TableEditor",props:{tableDefinition:{},tableId:{}},emits:["saved"],setup(ne,{emit:_}){const f=Se(),p=ne,A=_,c=m([]),E=m([]),z=m(!1),O=m(!1),R=m(!1),U=m(!0),G=m(50),H=m(1),B=m(""),x=m(!1),L=m("正在处理..."),V=le(()=>({page:H.value,pageSize:G.value,showSizePicker:!0,pageSizes:[20,50,100,200],showQuickJumper:!0,onUpdatePage:t=>{H.value=t},onUpdatePageSize:t=>{G.value=t,H.value=1}})),P=le(()=>p.tableDefinition?[{type:"selection",width:50,fixed:"left"},...p.tableDefinition.columns.map(e=>({title:()=>{const s=I("span",{class:"column-name",title:e.description||void 0},e.name);return I("div",{class:"column-header-cell"},[e.description?I(Ee,{trigger:"hover",placement:"top"},{default:()=>e.description,trigger:()=>s}):s,I(je,{size:"tiny",type:ke(e.type),style:"margin-left: 6px"},{default:()=>e.type}),e.nullable?null:I("span",{class:"required-mark"},"*")])},key:e.name,minWidth:120,resizable:!0,render(s){return I("div",{class:"cell-wrapper excel-cell"},[e.type==="string"?I(q,{value:s.rowData[e.name],placeholder:"",size:"tiny",class:"excel-input",disabled:U.value,onUpdateValue:i=>{U.value||(s.rowData[e.name]=i,ie(s))},onBlur:()=>Z(s,e)}):e.type==="number"?I("input",{type:"number",value:s.rowData[e.name]??"",placeholder:"",class:"excel-input-native",disabled:U.value,onInput:i=>{if(U.value)return;const v=i.target.value,S=Number(v);(!isNaN(S)||v==="")&&(s.rowData[e.name]=v===""?null:S,ie(s))},onBlur:()=>Z(s,e)}):e.type==="boolean"?I(ze,{checked:s.rowData[e.name],disabled:U.value,onUpdateChecked:i=>{U.value||(s.rowData[e.name]=i,ie(s))}}):e.type==="date"?I("input",{type:"datetime-local",value:pe(s.rowData[e.name]),class:"excel-input-native",disabled:U.value,onInput:i=>{if(U.value)return;const v=i.target.value;if(v){const S=new Date(v);s.rowData[e.name]=S.toISOString()}else s.rowData[e.name]=null;ie(s)},onBlur:()=>Z(s,e)}):e.type==="json"?I(q,{type:"textarea",value:typeof s.rowData[e.name]=="string"?s.rowData[e.name]:JSON.stringify(s.rowData[e.name]||{},null,2),placeholder:"",rows:2,size:"tiny",class:"excel-textarea",disabled:U.value,onUpdateValue:i=>{U.value||(s.rowData[e.name]=i)},onBlur:()=>{Z(s,e)}}):null])}}))]:[]),ve=le(()=>{if(p.tableDefinition)return 50+p.tableDefinition.columns.length*120});function J(t){const e=t.id||`new-${c.value.indexOf(t)}`;return{class:E.value.includes(e)?"row-selected":"",style:"cursor: pointer;"}}De(()=>p.tableId,async t=>{t&&p.tableDefinition?await b():(c.value=[],E.value=[])},{immediate:!0});let C=null;Te(()=>{C=()=>{we()},window.addEventListener("beforeunload",C)});const u=m(!0);Pe(()=>{u.value=!1,C&&(window.removeEventListener("beforeunload",C),C=null),se.forEach(t=>{clearTimeout(t)}),se.clear()});async function b(){var t,e;if(p.tableId)try{const s=await X.get(`/tables/data/${p.tableId}`);s.data.success&&(c.value=s.data.data)}catch(s){f.error("加载数据失败: "+(((e=(t=s.response)==null?void 0:t.data)==null?void 0:e.error)||s.message))}}async function Q(){if(!p.tableDefinition)return;const t={tableId:p.tableId||"",rowData:{}};p.tableDefinition.columns.forEach(e=>{if(e.defaultValue!==void 0)t.rowData[e.name]=e.defaultValue;else if(e.nullable)t.rowData[e.name]=null;else switch(e.type){case"string":t.rowData[e.name]="";break;case"number":t.rowData[e.name]=0;break;case"boolean":t.rowData[e.name]=!1;break;case"date":t.rowData[e.name]=new Date().toISOString();break;case"json":t.rowData[e.name]={};break}}),c.value.push(t),await re(t)}async function oe(){const t=[...E.value],e=c.value.filter(s=>{const i=s.id||`new-${c.value.indexOf(s)}`;return t.includes(i)});if(e.length!==0){x.value=!0,L.value=`正在删除 ${e.length} 条数据...`;try{let s=0,i=0;for(const j of e)if(j.id&&p.tableId)try{await X.delete(`/tables/data/${p.tableId}/${j.id}`),s++}catch(v){console.error("Delete row failed:",v),i++}c.value=c.value.filter(j=>{const v=j.id||`new-${c.value.indexOf(j)}`;return!t.includes(v)}),E.value=[],A("saved"),i>0?f.warning(`成功删除 ${s} 条,失败 ${i} 条`):f.success(`成功删除 ${s} 条数据`)}finally{x.value=!1}}}function ae(t){E.value=t}const se=new Map;async function ie(t,e){await he(t)}async function Z(t,e){const s=t.rowData[e.name];if((s==null||s==="")&&!e.nullable&&e.defaultValue===void 0){f.warning(`列 ${e.name} 不能为空`),await re(t);return}try{switch(e.type){case"number":if(typeof s!="number"&&s!==""&&s!==null){const i=Number(s);isNaN(i)?(f.error(`列 ${e.name} 必须是数字`),t.rowData[e.name]=e.defaultValue??0):t.rowData[e.name]=i}break;case"boolean":typeof s!="boolean"&&s!==null&&s!==void 0&&(t.rowData[e.name]=!!s);break;case"date":if(typeof s=="string"&&s){const i=new Date(s);isNaN(i.getTime())?(f.error(`列 ${e.name} 必须是有效的日期`),t.rowData[e.name]=e.defaultValue??new Date().toISOString()):t.rowData[e.name]=i.toISOString()}break;case"json":if(typeof s=="string"&&s)try{t.rowData[e.name]=JSON.parse(s)}catch{f.error(`列 ${e.name} 必须是有效的 JSON`);return}break}await re(t)}catch(i){console.error(`列 ${e.name} 数据格式错误:`,i),await re(t)}}function pe(t){if(!t)return"";const e=new Date(t);if(isNaN(e.getTime()))return"";const s=e.getFullYear(),i=String(e.getMonth()+1).padStart(2,"0"),j=String(e.getDate()).padStart(2,"0"),v=String(e.getHours()).padStart(2,"0"),S=String(e.getMinutes()).padStart(2,"0");return`${s}-${i}-${j}T${v}:${S}`}let ue=!1;async function we(){ue||!p.tableId||!p.tableDefinition||c.value.length===0||await be()}async function he(t){if(!p.tableId||!p.tableDefinition)return;const e=se.get(t);e&&clearTimeout(e);const s=setTimeout(async()=>{await re(t),se.delete(t)},300);se.set(t,s)}async function re(t){var i,j;if(!p.tableId||!p.tableDefinition||!u.value)return;const e=se.get(t);e&&(clearTimeout(e),se.delete(t));const s={};p.tableDefinition.columns.forEach(v=>{const S=t.rowData[v.name];if(S===void 0)if(v.defaultValue!==void 0)s[v.name]=v.defaultValue;else if(v.nullable)s[v.name]=null;else switch(v.type){case"string":s[v.name]="";break;case"number":s[v.name]=0;break;case"boolean":s[v.name]=!1;break;case"date":s[v.name]=new Date().toISOString();break;case"json":s[v.name]={};break}else s[v.name]=S});try{if(t.id){const v=await X.put(`/tables/data/${p.tableId}/${t.id}`,{rowData:s});if(!u.value)return;if(v.data.success){const S=v.data.data;t.createdAt=S.createdAt,t.updatedAt=S.updatedAt,de(),A("saved")}else console.error("Save row failed:",v.data.error),u.value&&f.error("保存失败: "+(v.data.error||"未知错误"))}else{const v=await X.post(`/tables/data/${p.tableId}`,{rowData:s});if(!u.value)return;if(v.data.success){const S=v.data.data;t.id=S.id,t.createdAt=S.createdAt,t.updatedAt=S.updatedAt,de(),A("saved")}else console.error("Create row failed:",v.data.error),u.value&&f.error("保存失败: "+(v.data.error||"未知错误"))}}catch(v){if(console.error("Save single row failed:",v),u.value){const S=((j=(i=v.response)==null?void 0:i.data)==null?void 0:j.error)||v.message||"保存失败";if(S.includes("Row not found")&&!u.value)return;f.error("保存失败: "+S)}}}async function be(){var t,e,s,i,j;if(!ue&&u.value){if(!p.tableId){console.warn("performSave: tableId is missing");return}if(!p.tableDefinition){console.warn("performSave: tableDefinition is missing");return}if(c.value.length!==0){ue=!0,z.value=!0;try{const v=c.value.map(M=>{const N={};return p.tableDefinition.columns.forEach(D=>{const k=M.rowData[D.name];if(k===void 0)if(D.defaultValue!==void 0)N[D.name]=D.defaultValue;else if(D.nullable)N[D.name]=null;else switch(D.type){case"string":N[D.name]="";break;case"number":N[D.name]=0;break;case"boolean":N[D.name]=!1;break;case"date":N[D.name]=new Date().toISOString();break;case"json":N[D.name]={};break}else N[D.name]=k}),{id:M.id,rowData:N}}),S=await X.put(`/tables/data/${p.tableId}/batch`,{rows:v});if(S.data.success){const M=S.data.data||[];if(M.length>0){const N=new Map;M.forEach(k=>{k.id&&N.set(k.id,k)});const D=new Set;c.value.forEach(k=>{if(k.id&&N.has(k.id)){const Y=N.get(k.id);k.createdAt=Y.createdAt,k.updatedAt=Y.updatedAt,D.add(k.id)}}),c.value.forEach(k=>{if(!k.id){const Y=M.find(F=>F.id&&!D.has(F.id));Y&&Y.id&&(k.id=Y.id,k.createdAt=Y.createdAt,k.updatedAt=Y.updatedAt,D.add(Y.id))}})}u.value&&(de(),A("saved"))}else if(console.error("Save failed:",S.data),u.value){const M=((t=S.data)==null?void 0:t.error)||"未知错误";f.error("保存失败: "+M)}}catch(v){if(console.error("Auto save failed:",v),u.value){const S=((s=(e=v.response)==null?void 0:e.data)==null?void 0:s.error)||v.message||"保存失败";if(S.includes("Row not found")){console.warn("Save failed after component unmount, ignoring error");return}console.error("Error details:",{message:v.message,response:(i=v.response)==null?void 0:i.data,status:(j=v.response)==null?void 0:j.status}),f.error("保存失败: "+S)}}finally{ue=!1,z.value=!1}}}}function de(){O.value=!0,setTimeout(()=>{O.value=!1},1500)}function ke(t){switch(t){case"string":return"info";case"number":return"success";case"boolean":return"warning";case"date":return"default";case"json":return"error";default:return"default"}}async function g(){if(!p.tableId||!p.tableDefinition){f.error("请先选择要导出的表");return}if(c.value.length===0){f.warning("当前表没有数据可导出");return}try{const t=c.value.map(v=>v.rowData),e=JSON.stringify(t,null,2),s=new Blob([e],{type:"application/json"}),i=URL.createObjectURL(s),j=document.createElement("a");j.href=i,j.download=`${p.tableDefinition.name}_data.json`,document.body.appendChild(j),j.click(),document.body.removeChild(j),URL.revokeObjectURL(i),f.success(`成功导出 ${c.value.length} 条数据`)}catch(t){f.error("导出失败: "+(t.message||"未知错误"))}}async function r(t){var e,s;if(!p.tableId||!p.tableDefinition){f.error("请先选择要导入数据的表");return}try{let i;try{const M=JSON.parse(t);if(Array.isArray(M))i=M;else if(M.data&&Array.isArray(M.data))i=M.data,f.warning("检测到旧格式,将只导入数据部分");else{f.error("JSON 格式错误:需要数据数组格式");return}}catch{f.error("JSON 解析失败:文件格式不正确");return}if(i.length===0){f.warning("导入的数据为空"),R.value=!1;return}const j=p.tableDefinition.columns.map(M=>M.name),v=[],S=[];if(i.forEach((M,N)=>{if(!M||typeof M!="object"||Array.isArray(M)){v.push(`第 ${N+1} 行:数据必须是对象格式`);return}p.tableDefinition.columns.forEach(D=>{const k=M[D.name];if(!D.nullable&&D.defaultValue===void 0&&(k==null||k==="")&&v.push(`第 ${N+1} 行,列 "${D.name}":必填字段不能为空`),k!=null&&k!=="")switch(D.type){case"number":typeof k!="number"&&!(typeof k=="string"&&!isNaN(Number(k)))&&v.push(`第 ${N+1} 行,列 "${D.name}":必须是数字类型`);break;case"boolean":typeof k!="boolean"&&v.push(`第 ${N+1} 行,列 "${D.name}":必须是布尔类型`);break;case"date":(typeof k!="string"||isNaN(new Date(k).getTime()))&&v.push(`第 ${N+1} 行,列 "${D.name}":必须是有效的日期格式`);break;case"json":if(k!==null&&typeof k!="object"&&typeof k!="string"&&v.push(`第 ${N+1} 行,列 "${D.name}":必须是对象、数组或 JSON 字符串`),typeof k=="string")try{JSON.parse(k)}catch{v.push(`第 ${N+1} 行,列 "${D.name}":JSON 字符串格式无效`)}break;case"string":break}}),Object.keys(M).forEach(D=>{j.includes(D)||S.push(`第 ${N+1} 行:包含未知列 "${D}",将被忽略`)})}),S.length>0){const M=S.slice(0,10).join(`
|
|
25
|
+
`),N=S.length>10?`
|
|
26
|
+
... 还有 ${S.length-10} 个警告`:"";f.warning(`导入时将忽略以下额外字段:
|
|
27
|
+
${M}${N}`)}if(v.length>0){const M=v.slice(0,10).join(`
|
|
28
|
+
`),N=v.length>10?`
|
|
29
|
+
... 还有 ${v.length-10} 个错误`:"";f.error(`数据校验失败:
|
|
30
|
+
${M}${N}`);return}z.value=!0,x.value=!0,L.value=`正在导入 ${i.length} 条数据...`;try{const M=i.map(D=>{const k={};return p.tableDefinition.columns.forEach(Y=>{const F=D[Y.name];let ee=F;if(F!=null&&F!=="")switch(Y.type){case"number":ee=typeof F=="string"?Number(F):F;break;case"boolean":ee=typeof F=="boolean"?F:!!F;break;case"date":typeof F=="string"&&(ee=new Date(F).toISOString());break;case"json":if(typeof F=="string")try{ee=JSON.parse(F)}catch{ee=F}break}else if(Y.defaultValue!==void 0)ee=Y.defaultValue;else if(Y.nullable)ee=null;else switch(Y.type){case"string":ee="";break;case"number":ee=0;break;case"boolean":ee=!1;break;case"date":ee=new Date().toISOString();break;case"json":ee={};break}k[Y.name]=ee}),{rowData:k}}),N=await X.put(`/tables/data/${p.tableId}/batch`,{rows:M});N.data.success?(de(),await b(),A("saved"),R.value=!1,f.success(`成功导入 ${i.length} 条数据`)):f.error("导入失败:"+(N.data.error||"未知错误"))}catch(M){f.error("导入失败: "+(((s=(e=M.response)==null?void 0:e.data)==null?void 0:s.error)||M.message))}finally{z.value=!1,x.value=!1}}catch(i){f.error("文件读取失败: "+(i.message||"未知错误"))}}async function T(t){var s;const e=(s=t.fileList[0])==null?void 0:s.file;if(e)try{const i=await e.text();await r(i)}catch(i){f.error("文件读取失败: "+(i.message||"未知错误"))}}async function d(){if(!B.value.trim()){f.warning("请输入 JSON 数据");return}await r(B.value.trim()),B.value=""}return(t,e)=>(w(),y("div",Wt,[a("div",Kt,[a("div",Yt,[o(l($),{size:"large",onClick:e[0]||(e[0]=s=>U.value=!U.value),type:U.value?"warning":"success",ghost:""},{icon:n(()=>[U.value?(w(),y("svg",Gt,[...e[6]||(e[6]=[a("path",{d:"M19 11H5a2 2 0 00-2 2v7a2 2 0 002 2h14a2 2 0 002-2v-7a2 2 0 00-2-2zM7 11V7a5 5 0 0110 0v4",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])):(w(),y("svg",Qt,[...e[7]||(e[7]=[a("path",{d:"M19 11H5a2 2 0 00-2 2v7a2 2 0 002 2h14a2 2 0 002-2v-7a2 2 0 00-2-2zM7 11V7a5 5 0 0110 0v4",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),a("path",{d:"M12 15v2M9 17h6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))]),default:n(()=>[h(" "+K(U.value?"解锁编辑":"锁定编辑"),1)]),_:1},8,["type"]),o(l($),{type:"primary",size:"large",onClick:Q,disabled:!ne.tableDefinition||U.value},{icon:n(()=>[...e[8]||(e[8]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M12 4v16m8-8H4",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[e[9]||(e[9]=h(" 添加行 ",-1))]),_:1},8,["disabled"]),o(l($),{size:"large",onClick:oe,disabled:E.value.length===0||U.value,type:"error",ghost:""},{icon:n(()=>[...e[10]||(e[10]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[h(" 删除选中 ("+K(E.value.length)+") ",1)]),_:1},8,["disabled"]),o(l($),{size:"large",onClick:g,disabled:!ne.tableDefinition||c.value.length===0},{icon:n(()=>[...e[11]||(e[11]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[e[12]||(e[12]=h(" 导出 JSON ",-1))]),_:1},8,["disabled"]),o(l($),{size:"large",onClick:e[1]||(e[1]=s=>R.value=!0),disabled:!ne.tableDefinition},{icon:n(()=>[...e[13]||(e[13]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[e[14]||(e[14]=h(" 导入 JSON ",-1))]),_:1},8,["disabled"])]),a("div",Xt,[a("div",Zt,[O.value?(w(),y("div",{key:0,class:Ne(["save-success-indicator",{flash:O.value}])},null,2)):te("",!0)]),o(l(je),{type:"info",size:"large"},{default:n(()=>[h(" 共 "+K(c.value.length)+" 行(编辑即保存) ",1)]),_:1})])]),ne.tableDefinition?(w(),y("div",ea,[a("div",ta,[o(l(Ie),{columns:P.value,data:c.value,pagination:V.value,"row-key":s=>s.id||`new-${c.value.indexOf(s)}`,"row-props":J,"max-height":600,"scroll-x":ve.value,bordered:!0,"single-line":!1,"onUpdate:checkedRowKeys":ae,class:"editable-data-table excel-table"},null,8,["columns","data","pagination","row-key","scroll-x"])],512)])):(w(),y("div",aa,[o(l(ge),{description:"请先创建或选择表定义"})])),o(l(ce),{show:R.value,"onUpdate:show":e[4]||(e[4]=s=>R.value=s),preset:"card",bordered:!1,class:"import-modal",style:{width:"90vw",maxWidth:"600px"}},{header:n(()=>[...e[15]||(e[15]=[a("div",{class:"modal-header"},[a("div",{class:"modal-icon"},[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])]),a("div",null,[a("h3",{class:"modal-title"},"导入表数据"),a("p",{class:"modal-subtitle"},"从 JSON 文件导入表数据")])],-1)])]),default:n(()=>[a("div",sa,[o(l(Ve),{"default-value":"file",type:"line"},{default:n(()=>[o(l(_e),{name:"file",tab:"文件上传"},{default:n(()=>[o(l(Je),{"file-list":[],accept:".json",max:1,onChange:T},{default:n(()=>[o(l(qe),null,{default:n(()=>[...e[16]||(e[16]=[a("div",{class:"upload-area"},[a("svg",{class:"upload-icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4m17-7l-5-5m0 0L7 8m9-5v12",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),a("p",{class:"upload-text"},"点击或拖拽 JSON 文件到此处"),a("p",{class:"upload-hint"},"支持导入表数据")],-1)])]),_:1})]),_:1})]),_:1}),o(l(_e),{name:"text",tab:"直接编辑/粘贴"},{default:n(()=>[a("div",la,[o(l(q),{value:B.value,"onUpdate:value":e[2]||(e[2]=s=>B.value=s),type:"textarea",placeholder:"请粘贴或输入 JSON 数据(数组格式)...",rows:15,class:"json-textarea"},null,8,["value"]),a("div",na,[o(l($),{onClick:d,type:"primary",disabled:!B.value.trim()},{default:n(()=>[...e[17]||(e[17]=[h(" 导入 ",-1)])]),_:1},8,["disabled"]),o(l($),{onClick:e[3]||(e[3]=s=>B.value="")},{default:n(()=>[...e[18]||(e[18]=[h(" 清空 ",-1)])]),_:1})])])]),_:1})]),_:1})])]),_:1},8,["show"]),o(l(ce),{show:x.value,"onUpdate:show":e[5]||(e[5]=s=>x.value=s),"mask-closable":!1,"close-on-esc":!1,"auto-focus":!1,preset:"dialog",closable:!1,"show-icon":!1,style:{width:"400px"}},{default:n(()=>[a("div",oa,[o(l(Fe),{size:"large"},{description:n(()=>[a("div",ra,K(L.value),1)]),_:1})])]),_:1},8,["show"])]))}}),ua=Me(ia,[["__scopeId","data-v-da42254c"]]),da={class:"tables-page"},ca={class:"tables-toolbar"},va={class:"toolbar-left"},pa={class:"table-select-with-icon"},fa={class:"toolbar-right"},ma={class:"toolbar-switch"},ga={class:"explore-config-panel"},wa={class:"explore-config-list"},ha={key:0,class:"empty-tables-hint"},ba={class:"explore-config-item-info"},ka={class:"table-name"},ya={key:0,class:"table-description"},xa={key:0,class:"tables-table-container"},Ca={key:1,class:"no-table-selected"},$a={class:"columns-section"},Sa={class:"columns-header"},Da={class:"columns-list"},Ma={class:"column-index"},_a={key:0,class:"empty-columns"},za={class:"form-actions"},Ta={class:"modal-header"},Ua={class:"modal-subtitle"},Na={class:"column-descriptions-section"},ja={class:"column-description-label"},Ia={class:"column-name-label"},Ba={key:0,class:"empty-columns-hint"},Aa={class:"form-actions"},Va=$e({__name:"Tables",setup(ne){const _=Se(),f=Re(),p=m([]),A=m(null),c=m(null),E=m(!1),z=m(!1),O=m(!1),R=m(!1),U=m(!1),G=m(!1),H=m(!1),B=m(null),x=m(""),L=m({}),V=m(!0),P=m({}),ve=[{label:"字符串",value:"string"},{label:"数字",value:"number"},{label:"布尔值",value:"boolean"},{label:"日期",value:"date"},{label:"JSON",value:"json"}],J=m({name:"",description:"",columns:[]}),C={name:{required:!0,message:"表名不能为空",trigger:"blur"}},u=le(()=>p.value.map(g=>({label:g.name,value:g.id,description:g.description})));function b(g){if(g){const r=p.value.find(T=>T.id===g);r&&pe(r)}else A.value=null,c.value=null}const Q=le({get:()=>E.value,set:g=>{E.value=g}});Te(async()=>{await Z(),await oe()});async function oe(){try{if(await f.fetchConfig(),f.currentConfig){const g=f.currentConfig;V.value=g.enableExploreTable!==!1}}catch(g){console.error("加载配置失败:",g)}}async function ae(g){H.value=!0;try{await f.updateConfig({enableExploreTable:g}),_.success(g?"已允许 AI 探索数据表":"已禁止 AI 探索数据表")}catch(r){_.error("更新配置失败: "+(r.message||"未知错误")),V.value=!g}finally{H.value=!1}}function se(g){return g.allowExplore!==!1}async function ie(g,r){var T,d;P.value[g]=!0;try{const t=p.value.find(s=>s.id===g);if(!t){_.error("表不存在");return}(await X.put(`/tables/definitions/${g}`,{allowExplore:r})).data.success&&(t.allowExplore=r,_.success(r?`已允许 AI 探索表「${t.name}」`:`已禁止 AI 探索表「${t.name}」`),c.value&&c.value.id===g&&(c.value.allowExplore=r))}catch(t){_.error("更新失败: "+(((d=(T=t.response)==null?void 0:T.data)==null?void 0:d.error)||t.message))}finally{P.value[g]=!1}}async function Z(){var g,r;try{const T=await X.get("/tables/definitions");T.data.success&&(p.value=T.data.data,p.value.length>0&&!A.value&&pe(p.value[0]))}catch(T){_.error("加载表列表失败: "+(((r=(g=T.response)==null?void 0:g.data)==null?void 0:r.error)||T.message))}}function pe(g){A.value=g.id,c.value=g}function ue(){J.value.columns.push({name:"",type:"string",nullable:!0,description:""})}function we(g){J.value.columns.splice(g,1)}async function he(){B.value&&await B.value.validate(async g=>{var r,T;if(!g){if(J.value.columns.length===0){_.warning("至少需要定义一个列");return}U.value=!0;try{const d=await X.post("/tables/definitions",J.value);d.data.success&&(_.success("表创建成功"),E.value=!1,J.value={name:"",description:"",columns:[]},await Z(),pe(d.data.data))}catch(d){_.error("保存失败: "+(((T=(r=d.response)==null?void 0:r.data)==null?void 0:T.error)||d.message))}finally{U.value=!1}}})}async function re(){var g,r;if(c.value){R.value=!0;try{(await X.delete(`/tables/definitions/${c.value.id}`)).data.success&&(_.success("表删除成功"),A.value=null,c.value=null,O.value=!1,await Z())}catch(T){_.error("删除失败: "+(((r=(g=T.response)==null?void 0:g.data)==null?void 0:r.error)||T.message))}finally{R.value=!1}}}function be(){}De(z,g=>{g&&c.value&&(x.value=c.value.description||"",L.value={},c.value.columns&&c.value.columns.forEach(r=>{L.value[r.name]=r.description||""}))});function de(g){switch(g){case"string":return"info";case"number":return"success";case"boolean":return"warning";case"date":return"default";case"json":return"error";default:return"default"}}async function ke(){var g,r;if(!c.value||!A.value){_.error("请先选择一个表");return}G.value=!0;try{const T=c.value.columns.map(t=>({...t,description:L.value[t.name]||void 0})),d=await X.put(`/tables/definitions/${A.value}`,{description:x.value||null,columns:T});d.data.success&&(_.success("表声明和字段声明更新成功"),z.value=!1,c.value&&(c.value.description=d.data.data.description,c.value.columns=d.data.data.columns),await Z())}catch(T){_.error("更新失败: "+(((r=(g=T.response)==null?void 0:g.data)==null?void 0:r.error)||T.message))}finally{G.value=!1}}return(g,r)=>{var d,t;const T=Ke("n-tag");return w(),y("div",da,[a("div",ca,[a("div",va,[a("div",pa,[o(l(Ue),{value:A.value,"onUpdate:value":[r[0]||(r[0]=e=>A.value=e),b],options:u.value,placeholder:"选择表...",size:"large",clearable:"",filterable:"",class:"table-select"},{empty:n(()=>[o(l(ge),{description:"暂无表",size:"small"})]),_:1},8,["value","options"]),(d=c.value)!=null&&d.description?(w(),xe(l(Ee),{key:0,trigger:"hover",placement:"top"},{trigger:n(()=>[...r[14]||(r[14]=[a("div",{class:"table-info-icon"},[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)])]),default:n(()=>[h(" "+K(c.value.description),1)]),_:1})):te("",!0)])]),a("div",fa,[a("div",ma,[o(l(Be),{value:V.value,"onUpdate:value":[r[1]||(r[1]=e=>V.value=e),ae],size:"medium",loading:H.value},{checked:n(()=>[...r[15]||(r[15]=[h("允许 AI 探索数据表",-1)])]),unchecked:n(()=>[...r[16]||(r[16]=[h("禁止 AI 探索数据表",-1)])]),_:1},8,["value","loading"]),o(l(We),{trigger:"hover",placement:"bottom-end",style:{width:"400px",maxHeight:"500px"}},{trigger:n(()=>[...r[17]||(r[17]=[a("div",{class:"explore-config-icon",title:"配置表探索权限"},[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94L14.4 2.81c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z",fill:"currentColor"})])],-1)])]),default:n(()=>[a("div",ga,[r[18]||(r[18]=a("div",{class:"explore-config-header"},[a("h4",null,"配置表探索权限"),a("p",{class:"explore-config-hint"},"控制哪些表允许被 AI 探索(默认为允许)")],-1)),a("div",wa,[p.value.length===0?(w(),y("div",ha,[o(l(ge),{description:"暂无表",size:"small"})])):te("",!0),(w(!0),y(fe,null,me(p.value,e=>(w(),y("div",{key:e.id,class:"explore-config-item"},[a("div",ba,[a("span",ka,K(e.name),1),e.description?(w(),y("span",ya,K(e.description),1)):te("",!0)]),o(l(Be),{value:se(e),"onUpdate:value":s=>ie(e.id,s),size:"small",loading:P.value[e.id]},null,8,["value","onUpdate:value","loading"])]))),128))])])]),_:1})]),c.value?(w(),xe(l($),{key:0,size:"large",ghost:"",onClick:r[2]||(r[2]=e=>z.value=!0),class:"edit-table-btn"},{icon:n(()=>[...r[19]||(r[19]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),a("path",{d:"M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[r[20]||(r[20]=h(" 编辑表声明 ",-1))]),_:1})):te("",!0),c.value?(w(),xe(l($),{key:1,type:"error",size:"large",ghost:"",onClick:r[3]||(r[3]=e=>O.value=!0),class:"delete-table-btn"},{icon:n(()=>[...r[21]||(r[21]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[r[22]||(r[22]=h(" 删除表 ",-1))]),_:1})):te("",!0),o(l($),{type:"primary",size:"large",onClick:r[4]||(r[4]=e=>E.value=!0),class:"create-table-btn"},{icon:n(()=>[...r[23]||(r[23]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M12 4v16m8-8H4",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[r[24]||(r[24]=h(" 创建新表 ",-1))]),_:1})])]),c.value?(w(),y("div",xa,[o(ua,{"table-definition":c.value,"table-id":A.value,onSaved:be},null,8,["table-definition","table-id"])])):(w(),y("div",Ca,[o(l(ge),{description:"请选择一个表进行编辑"})])),o(l(ce),{show:O.value,"onUpdate:show":r[5]||(r[5]=e=>O.value=e),preset:"dialog",type:"warning",title:"确认删除",content:`确定要删除表「${(t=c.value)==null?void 0:t.name}」吗?此操作将同时删除表中的所有数据,且不可恢复。`,"positive-text":"确认删除","negative-text":"取消","positive-button-props":{type:"error"},loading:R.value,onPositiveClick:re,onNegativeClick:r[6]||(r[6]=e=>O.value=!1)},null,8,["show","content","loading"]),o(l(ce),{show:Q.value,"onUpdate:show":r[10]||(r[10]=e=>Q.value=e),preset:"card",bordered:!1,class:"table-definition-modal",style:{width:"90vw",maxWidth:"800px"}},{header:n(()=>[...r[25]||(r[25]=[a("div",{class:"modal-header"},[a("div",{class:"modal-icon"},[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M3 3h18v18H3V3zm2 2v14h14V5H5zm2 2h10v2H7V7zm0 4h10v2H7v-2zm0 4h7v2H7v-2z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])]),a("div",null,[a("h3",{class:"modal-title"}," 创建新表 "),a("p",{class:"modal-subtitle"}," 定义表的结构和列类型(创建后不可修改) ")])],-1)])]),default:n(()=>[o(l(Ce),{ref_key:"tableFormRef",ref:B,model:J.value,rules:C,class:"table-form"},{default:n(()=>[o(l(W),{path:"name",label:"表名"},{default:n(()=>[o(l(q),{value:J.value.name,"onUpdate:value":r[7]||(r[7]=e=>J.value.name=e),placeholder:"例如: users, products",size:"large"},null,8,["value"])]),_:1}),o(l(W),{path:"description",label:"描述"},{default:n(()=>[o(l(q),{value:J.value.description,"onUpdate:value":r[8]||(r[8]=e=>J.value.description=e),placeholder:"表的用途说明",size:"large",type:"textarea",rows:2},null,8,["value"])]),_:1}),o(l(W),{label:"列定义"},{default:n(()=>[a("div",$a,[a("div",Sa,[r[28]||(r[28]=a("span",null,null,-1)),o(l($),{dashed:"",onClick:ue,size:"medium"},{icon:n(()=>[...r[26]||(r[26]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M12 4v16m8-8H4",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[r[27]||(r[27]=h(" 添加列 ",-1))]),_:1})]),a("div",Da,[(w(!0),y(fe,null,me(J.value.columns,(e,s)=>(w(),y("div",{key:s,class:"column-row"},[a("span",Ma,"#"+K(s+1),1),o(l(W),{path:`columns[${s}].name`,"show-label":!1,rule:{required:!0,message:"必填",trigger:"blur"},class:"column-field-name"},{default:n(()=>[o(l(q),{value:e.name,"onUpdate:value":i=>e.name=i,placeholder:"列名"},null,8,["value","onUpdate:value"])]),_:2},1032,["path"]),o(l(W),{path:`columns[${s}].type`,"show-label":!1,rule:{required:!0,message:"必填",trigger:"change"},class:"column-field-type"},{default:n(()=>[o(l(Ue),{value:e.type,"onUpdate:value":i=>e.type=i,options:ve},null,8,["value","onUpdate:value"])]),_:2},1032,["path"]),o(l(ze),{checked:!e.nullable,"onUpdate:checked":i=>e.nullable=!i,class:"column-field-nullable"},{default:n(()=>[...r[29]||(r[29]=[h("必要",-1)])]),_:1},8,["checked","onUpdate:checked"]),o(l(W),{path:`columns[${s}].description`,"show-label":!1,class:"column-field-description"},{default:n(()=>[o(l(q),{value:e.description,"onUpdate:value":i=>e.description=i,placeholder:"列说明(可选)"},null,8,["value","onUpdate:value"])]),_:2},1032,["path"]),o(l($),{type:"error",text:"",size:"small",onClick:i=>we(s),class:"column-delete-btn"},{default:n(()=>[...r[30]||(r[30]=[h(" 删除 ",-1)])]),_:1},8,["onClick"])]))),128)),J.value.columns.length===0?(w(),y("div",_a,[o(l(ge),{description:"暂无列,点击上方添加列按钮添加",size:"small"})])):te("",!0)])])]),_:1}),a("div",za,[o(l($),{size:"large",onClick:r[9]||(r[9]=e=>Q.value=!1)},{default:n(()=>[...r[31]||(r[31]=[h(" 取消 ",-1)])]),_:1}),o(l($),{type:"primary",size:"large",loading:U.value,onClick:he},{default:n(()=>[...r[32]||(r[32]=[h(" 保存 ",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])]),_:1},8,["show"]),o(l(ce),{show:z.value,"onUpdate:show":r[13]||(r[13]=e=>z.value=e),preset:"card",bordered:!1,class:"edit-table-description-modal",style:{width:"90vw",maxWidth:"600px"}},{header:n(()=>{var e;return[a("div",Ta,[r[34]||(r[34]=a("div",{class:"modal-icon"},[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),a("path",{d:"M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),a("div",null,[r[33]||(r[33]=a("h3",{class:"modal-title"}," 编辑表声明 ",-1)),a("p",Ua," 编辑表「"+K((e=c.value)==null?void 0:e.name)+"」的描述信息 ",1)])])]}),default:n(()=>[o(l(Ce),{ref:"editTableFormRef",class:"edit-table-form"},{default:n(()=>[o(l(W),{label:"表声明"},{default:n(()=>[o(l(q),{value:x.value,"onUpdate:value":r[11]||(r[11]=e=>x.value=e),placeholder:"表的用途说明",size:"large",type:"textarea",rows:4},null,8,["value"])]),_:1}),o(l(W),{label:"字段声明"},{default:n(()=>{var e,s;return[a("div",Na,[(w(!0),y(fe,null,me(((e=c.value)==null?void 0:e.columns)||[],i=>(w(),y("div",{key:i.name,class:"column-description-row"},[a("div",ja,[a("span",Ia,K(i.name),1),o(T,{size:"tiny",type:de(i.type),style:{"margin-left":"8px"}},{default:n(()=>[h(K(i.type),1)]),_:2},1032,["type"])]),o(l(q),{value:L.value[i.name],"onUpdate:value":j=>L.value[i.name]=j,placeholder:`${i.name} 字段的说明(可选)`,size:"medium",clearable:""},null,8,["value","onUpdate:value","placeholder"])]))),128)),!((s=c.value)!=null&&s.columns)||c.value.columns.length===0?(w(),y("div",Ba,[o(l(ge),{description:"当前表没有字段",size:"small"})])):te("",!0)])]}),_:1}),a("div",Aa,[o(l($),{size:"large",onClick:r[12]||(r[12]=e=>z.value=!1)},{default:n(()=>[...r[35]||(r[35]=[h(" 取消 ",-1)])]),_:1}),o(l($),{type:"primary",size:"large",loading:G.value,onClick:ke},{default:n(()=>[...r[36]||(r[36]=[h(" 保存 ",-1)])]),_:1},8,["loading"])])]),_:1},512)]),_:1},8,["show"])])}}}),Ea=Me(Va,[["__scopeId","data-v-bf1554c4"]]),Ra={class:"dashboard-container"},Ha={style:{position:"absolute",width:"0",height:"0"}},Oa={key:0,class:"loading-state"},La={key:1,class:"dashboard-content"},Pa=$e({__name:"Dashboard",setup(ne){const _=Se(),f=Re(),p=Ye(),A=Ge(),c=Xe(),E=m(A.query.section||"components"),z=le(()=>f.currentConfig),O=le(()=>f.loading),R=le(()=>{var V;return((V=p.user)==null?void 0:V.role)==="admin"}),U=["variables","tables"],G={components:lt,tools:st,variables:dt,init:at,tables:Ea,prompts:Ft},H=le(()=>G[E.value]);async function B(){try{await f.fetchConfig()}catch(V){_.error(V.message)}}async function x(V){if(z.value)try{await f.updateConfig(V),_.success("更新成功")}catch(P){_.error(P.message)}}function L(V){return R.value&&U.includes(V)?(_.warning("超级管理员不允许访问此功能"),c.replace({name:"UserDashboard",query:{section:"components"}}),E.value="components",!0):!1}return De(()=>A.query.section,V=>{if(!V)return;const P=V;L(P)||(E.value=P)},{immediate:!0}),Te(()=>{const V=A.query.section;L(V),B()}),(V,P)=>(w(),y("div",Ra,[(w(),y("svg",Ha,[...P[0]||(P[0]=[a("defs",null,[a("linearGradient",{id:"loading-gradient",x1:"0%",y1:"0%",x2:"100%",y2:"100%"},[a("stop",{offset:"0%","stop-color":"#6366f1"}),a("stop",{offset:"50%","stop-color":"#8b5cf6"}),a("stop",{offset:"100%","stop-color":"#ec4899"})])],-1)])])),O.value&&!z.value?(w(),y("div",Oa,[...P[1]||(P[1]=[a("div",{class:"loading-spinner"},[a("svg",{class:"spinner",viewBox:"0 0 50 50"},[a("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none","stroke-width":"4"})])],-1),a("p",{class:"loading-text"},"加载配置中...",-1)])])):z.value?(w(),y("div",La,[(w(),xe(Qe(H.value),{config:z.value,onUpdate:x},null,40,["config"]))])):te("",!0)]))}}),Wa=Me(Pa,[["__scopeId","data-v-5f9aa991"]]);export{Wa as default};
|