flex-mcp 1.0.0 → 1.0.1

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.
@@ -0,0 +1 @@
1
+ import{d as e,c as o,o as a}from"./index-Coivokd4.js";import{_ as t}from"./_plugin-vue_export-helper-DlAUqK2U.js";const s={class:"blank-view"},n=e({__name:"Blank",setup(_){return(c,r)=>(a(),o("div",s))}}),m=t(n,[["__scopeId","data-v-1be224a2"]]);export{m as default};
@@ -0,0 +1 @@
1
+ import{d as N,u as P,r as d,p as S,I as j,c as v,b as e,f as s,y as m,m as _,w as o,g as a,B as H,R as T,K as E,e as I,t as b,W as k,D as V,L as D,o as r,h as L,O,P as x}from"./index-Coivokd4.js";import{u as W,M as G,C as K,I as R}from"./InitScriptEditor-CyQQvKeL.js";import{_ as q}from"./_plugin-vue_export-helper-DlAUqK2U.js";const A={class:"configs-page"},F={style:{position:"absolute",width:"0",height:"0"}},J={class:"configs-container"},Q={class:"config-content"},X={class:"user-selector-section"},Y={class:"selector-header"},Z={key:0,class:"loading-state"},$={key:1,class:"config-stats"},ee={class:"stat-card"},te={class:"stat-content"},se={class:"stat-value"},oe={class:"stat-card"},ae={class:"stat-content"},ne={class:"stat-value"},le={key:0,class:"modal-content"},ie={class:"tab-content"},re={class:"tab-content"},de={class:"tab-content"},ce=N({__name:"Configs",setup(ve){const u=P(),p=W(),i=d(null),f=d(!1),y=d([]),g=d(!1),w=d("components"),l=S(()=>p.currentConfig),C=d([]);async function M(){try{const n=await D.get("/users");y.value=n.data.data.filter(t=>t.role!=="admin"),C.value=y.value.map(t=>({label:t.email,value:t.id}))}catch{u.error("加载用户列表失败")}}async function B(){if(i.value){f.value=!0;try{await p.fetchUserConfig(i.value)}catch(n){u.error(n.message)}finally{f.value=!1}}}function U(){l.value&&(w.value="components",g.value=!0)}async function h(n){if(i.value)try{await p.updateUserConfig(i.value,n),u.success("更新成功")}catch(t){u.error(t.message)}}function z(n){i.value=n,n&&B()}return j(()=>{M()}),(n,t)=>(r(),v("div",A,[(r(),v("svg",F,[...t[3]||(t[3]=[e("defs",null,[e("linearGradient",{id:"loading-gradient",x1:"0%",y1:"0%",x2:"100%",y2:"100%"},[e("stop",{offset:"0%","stop-color":"#dc2626"}),e("stop",{offset:"50%","stop-color":"#ea580c"}),e("stop",{offset:"100%","stop-color":"#f59e0b"})])],-1)])])),t[15]||(t[15]=e("div",{class:"page-header"},[e("div",null,[e("h1",{class:"page-title"},"配置管理"),e("p",{class:"page-description"},"查看和编辑用户的 MCP 配置")])],-1)),e("div",J,[e("main",Q,[e("div",X,[e("div",Y,[t[6]||(t[6]=e("div",{class:"selector-label"},[e("svg",{class:"label-icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),e("span",null,"选择用户")],-1)),l.value?(r(),m(a(H),{key:0,type:"primary",size:"large",class:"edit-btn",onClick:U},{icon:o(()=>[...t[4]||(t[4]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:o(()=>[t[5]||(t[5]=L(" 编辑配置 ",-1))]),_:1})):_("",!0)]),s(a(T),{value:i.value,"onUpdate:value":[t[0]||(t[0]=c=>i.value=c),z],options:C.value,placeholder:"请选择要配置的用户",size:"large",filterable:"",clearable:"",class:"user-select"},{empty:o(()=>[s(a(k),{description:"暂无用户"})]),_:1},8,["value","options"])]),s(a(E),{class:"content-divider"}),f.value?(r(),v("div",Z,[...t[7]||(t[7]=[e("div",{class:"loading-spinner"},[e("svg",{class:"spinner",viewBox:"0 0 50 50"},[e("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none","stroke-width":"4"})])],-1),e("p",{class:"loading-text"},"加载配置中...",-1)])])):l.value?(r(),v("div",$,[e("div",ee,[t[9]||(t[9]=I('<div class="stat-icon stat-icon--primary" data-v-e297e9f7><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-e297e9f7><rect x="3" y="3" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect><rect x="14" y="3" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect><rect x="3" y="14" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect><rect x="14" y="14" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect></svg></div>',1)),e("div",te,[e("div",se,b(l.value.components.length),1),t[8]||(t[8]=e("div",{class:"stat-label"},"MCP 组件",-1))])]),e("div",oe,[t[11]||(t[11]=e("div",{class:"stat-icon stat-icon--success"},[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e("div",ae,[e("div",ne,b(l.value.customTools.length),1),t[10]||(t[10]=e("div",{class:"stat-label"},"自定义工具",-1))])])])):i.value?(r(),m(a(k),{key:3,description:"该用户暂无配置或加载失败",class:"empty-placeholder"},{icon:o(()=>[...t[13]||(t[13]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("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"})],-1)])]),_:1})):(r(),m(a(k),{key:2,description:"请选择一个用户查看配置",class:"empty-placeholder"},{icon:o(()=>[...t[12]||(t[12]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1}))])]),s(a(V),{show:g.value,"onUpdate:show":t[2]||(t[2]=c=>g.value=c),preset:"card",bordered:!1,class:"config-edit-modal",style:{width:"90vw",maxWidth:"1400px",height:"90vh"}},{header:o(()=>[...t[14]||(t[14]=[e("div",{class:"modal-header"},[e("div",{class:"modal-icon"},[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])]),e("div",null,[e("h3",{class:"modal-title"},"编辑用户配置"),e("p",{class:"modal-subtitle"},"管理 MCP 组件、工具和脚本")])],-1)])]),default:o(()=>[l.value?(r(),v("div",le,[s(a(O),{value:w.value,"onUpdate:value":t[1]||(t[1]=c=>w.value=c),type:"line",animated:"",size:"large",class:"config-tabs"},{default:o(()=>[s(a(x),{name:"components",tab:"MCP 组件"},{default:o(()=>[e("div",ie,[s(G,{config:l.value,onUpdate:h},null,8,["config"])])]),_:1}),s(a(x),{name:"tools",tab:"自定义工具"},{default:o(()=>[e("div",re,[s(K,{config:l.value,onUpdate:h},null,8,["config"])])]),_:1}),s(a(x),{name:"init",tab:"初始化脚本"},{default:o(()=>[e("div",de,[s(R,{config:l.value,onUpdate:h},null,8,["config"])])]),_:1})]),_:1},8,["value"])])):_("",!0)]),_:1},8,["show"])]))}}),ge=q(ce,[["__scopeId","data-v-e297e9f7"]]);export{ge as default};
@@ -0,0 +1,27 @@
1
+ import{d as $e,u as Se,r as g,p as ae,A as Me,c as y,b as a,f as o,w as l,g as n,B as S,k as W,C as _e,D as de,o as h,h as b,N as Ce,j as K,E as Te,n as D,G as pe,H as Ae,I as Ue,m as ee,J as He,y as we,K as Ie,L as Z,M as xe,t as F,O as Ve,P as ze,F as fe,s as me,Q as Oe,R as Ne,x as je,S as Le,U as Ee,V as Pe,W as ge,X as Je,Y as qe,Z as Fe,_ as Be,$ as We,v as Ke,a as Ye,q as Ge,z as Qe,i as Xe}from"./index-Coivokd4.js";import{g as Ze,p as et,_ as tt,u as Re,I as at,C as st,M as lt}from"./InitScriptEditor-CyQQvKeL.js";import{_ as De}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=_,B=Se(),d=g(!1),V=g(!1),z=g(null),L=g(),H=g(""),T={pageSize:10,showSizePicker:!0,pageSizes:[10,20,50]},Y=$=>({style:"cursor: pointer; transition: all 0.2s ease;",onMouseenter:v=>{v.currentTarget.style.backgroundColor="rgba(99, 102, 241, 0.04)"},onMouseleave:v=>{v.currentTarget.style.backgroundColor=""}}),Q=[{title:"变量名",key:"name",width:100,render($){return D("strong",$.name)}},{title:"值",key:"value",width:500,render($){if($.isSecret)return D(pe,{type:"info",depth:3,italic:!0},{default:()=>"****** (敏感信息)"});const v=String($.value).split(`
2
+ `).map((M,x,G)=>{const se=[D("span",{class:"value-line"},M)];return x<G.length-1&&se.push(D("br")),se}).flat();return D("div",{class:"variable-value-cell"},v)}},{title:"描述",key:"description",width:300,render($){return D(pe,{depth:3},{default:()=>$.description||"-"})}},{title:"操作",key:"actions",width:150,render($){return D(Ae,{size:"small"},{default:()=>[D(S,{size:"small",onClick:()=>j($)},{default:()=>"编辑"}),D(S,{size:"small",type:"error",onClick:()=>P($.id)},{default:()=>"删除"})]})}}],E=ae(()=>{if(!H.value)return f.config.variables;const $=H.value.toLowerCase();return f.config.variables.filter(v=>{var M;return v.name.toLowerCase().includes($)||((M=v.description)==null?void 0:M.toLowerCase().includes($))})}),k=g({name:"",value:"",description:"",isSecret:!1}),O={name:{required:!0,message:"请输入变量名",trigger:"blur"},value:{required:!0,message:"请输入变量值",trigger:"blur"}};function j($){z.value=$,k.value={name:$.name,value:$.value,description:$.description||"",isSecret:$.isSecret||!1},d.value=!0}function P($){const v=f.config.variables.filter(M=>M.id!==$);p("update",{variables:v})}async function ce(){var $,v;try{await(($=L.value)==null?void 0:$.validate()),V.value=!0;const M={id:((v=z.value)==null?void 0:v.id)||Ze(),name:k.value.name,value:k.value.value,description:k.value.description||void 0,isSecret:k.value.isSecret},x=[...f.config.variables],G=x.findIndex(se=>se.id===M.id);G!==-1?x[G]=M:x.push(M),p("update",{variables:x}),d.value=!1,J()}catch(M){B.error(M.message)}finally{V.value=!1}}function J(){z.value=null,k.value={name:"",value:"",description:"",isSecret:!1}}return Me(()=>d.value,$=>{$||J()}),($,v)=>(h(),y("div",nt,[a("div",ot,[o(n(S),{type:"primary",size:"large",class:"add-variable-btn",onClick:v[0]||(v[0]=M=>d.value=!0)},{icon:l(()=>[...v[8]||(v[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:l(()=>[v[9]||(v[9]=b(" 添加变量 ",-1))]),_:1}),o(n(W),{value:H.value,"onUpdate:value":v[1]||(v[1]=M=>H.value=M),placeholder:"搜索变量名或描述...",size:"large",clearable:"",class:"search-input"},{prefix:l(()=>[...v[10]||(v[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(n(_e),{columns:Q,data:E.value,pagination:T,"row-props":Y,class:"modern-table"},null,8,["data"])]),o(n(de),{show:d.value,"onUpdate:show":v[7]||(v[7]=M=>d.value=M),preset:"dialog",title:z.value?"编辑变量":"添加变量",class:"variable-edit-modal",style:{maxHeight:"90vh"}},{action:l(()=>[o(n(S),{onClick:v[6]||(v[6]=M=>d.value=!1)},{default:l(()=>[...v[12]||(v[12]=[b("取消",-1)])]),_:1}),o(n(S),{type:"primary",loading:V.value,onClick:ce},{default:l(()=>[...v[13]||(v[13]=[b("保存",-1)])]),_:1},8,["loading"])]),default:l(()=>[a("div",it,[o(n(Ce),{ref_key:"formRef",ref:L,model:k.value,rules:O},{default:l(()=>[o(n(K),{path:"name",label:"变量名"},{default:l(()=>[o(n(W),{value:k.value.name,"onUpdate:value":v[2]||(v[2]=M=>k.value.name=M),placeholder:"例如: API_KEY"},null,8,["value"])]),_:1}),o(n(K),{path:"value",label:"值"},{default:l(()=>[o(n(W),{value:k.value.value,"onUpdate:value":v[3]||(v[3]=M=>k.value.value=M),type:k.value.isSecret?"password":"textarea",rows:k.value.isSecret?void 0:3,placeholder:"变量值"},null,8,["value","type","rows"])]),_:1}),o(n(K),{path:"description",label:"描述"},{default:l(()=>[o(n(W),{value:k.value.description,"onUpdate:value":v[4]||(v[4]=M=>k.value.description=M),type:"textarea",rows:2,placeholder:"可选"},null,8,["value"])]),_:1}),o(n(K),{path:"isSecret",label:"敏感信息"},{default:l(()=>[o(n(Te),{checked:k.value.isSecret,"onUpdate:checked":v[5]||(v[5]=M=>k.value.isSecret=M)},{default:l(()=>[...v[11]||(v[11]=[b("标记为敏感信息(导出时使用占位符)",-1)])]),_:1},8,["checked"])]),_:1})]),_:1},8,["model"])])]),_:1},8,["show","title"])]))}}),dt=De(ut,[["__scopeId","data-v-f50b6ccd"]]),ct={class:"prompts-manager"},vt={class:"prompts-toolbar"},pt={key:0,class:"mcp-prompts-section"},ft={style:{display:"flex","align-items":"center",gap:"8px"}},mt={style:{width:"20px",height:"20px"},viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},gt={class:"prompts-table-container"},wt={class:"modal-header"},ht={class:"modal-title"},bt={class:"modal-subtitle"},kt={class:"modal-content-wrapper"},yt={class:"tab-pane-content"},xt={class:"form-section"},Ct={class:"form-grid-2"},$t={class:"form-section"},St={class:"section-header"},Mt={class:"parameters-list"},Dt={class:"parameter-header"},_t={class:"parameter-index"},zt={class:"parameter-fields"},Tt={key:0,class:"empty-parameters"},Ut={class:"tab-pane-content"},Nt={style:{display:"flex","align-items":"center",gap:"8px"}},jt={viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{width:"18px",height:"18px"}},It={class:"messages-section"},Bt={class:"message-header"},At={class:"save-status-indicator"},Vt=["title"],Et={key:0,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Rt={key:1,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Ht={key:0,class:"monaco-wrapper"},Ot={key:0,class:"empty-messages"},Lt={class:"modal-footer"},Pt={class:"test-content"},Jt={class:"test-messages"},qt={class:"test-message-header"},Ft={class:"test-message-content"},Wt={key:0,class:"test-message-empty"},Kt=$e({__name:"PromptsManager",setup(ne){const _=Se(),f=g(!1),p=g(!1),B=g(!1),d=g(!1),V=g(!1),z=g(null),L=g(),H=g(""),T=g([]),Y=g([]),Q=g("content"),E=g(!1),k=g(-1),O=g(new Map),j=g(!1),P=[{label:"用户",value:"user"},{label:"助手",value:"assistant"}],ce={pageSize:10,showSizePicker:!0,pageSizes:[10,20,50]},J=e=>({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=""}}),$=[{title:"名称",key:"name",width:250,render(e){return D("strong",{style:"color: #6366f1;"},e.name)}},{title:"描述",key:"description",render(e){return D(pe,{depth:3},{default:()=>e.description||"-"})}},{title:"参数数量",key:"arguments",width:120,render(e){return D(pe,{depth:3},{default:()=>{var t;return`${((t=e.arguments)==null?void 0:t.length)||0} 个`}})}},{title:"来源",key:"source",width:100,render(){return D(xe,{type:"info",size:"small"},{default:()=>"MCP 组件"})}}],v=[{title:"名称",key:"name",width:200,render(e){return D("strong",e.name)}},{title:"描述",key:"description",render(e){return D(pe,{depth:3},{default:()=>e.description||"-"})}},{title:"参数数量",key:"arguments",width:120,render(e){return D(pe,{depth:3},{default:()=>{var t;return`${((t=e.arguments)==null?void 0:t.length)||0} 个`}})}},{title:"消息数量",key:"messages",width:120,render(e){return D(pe,{depth:3},{default:()=>{var t;return`${((t=e.messages)==null?void 0:t.length)||0} 条`}})}},{title:"操作",key:"actions",width:200,render(e){return D(Ae,{size:"small"},{default:()=>[D(S,{size:"small",onClick:()=>be(e)},{default:()=>"编辑"}),D(S,{size:"small",type:"info",onClick:()=>q(e)},{default:()=>"测试"}),D(S,{size:"small",type:"error",onClick:()=>ie(e.id)},{default:()=>"删除"})]})}}],M=ae(()=>{if(!H.value)return T.value;const e=H.value.toLowerCase();return T.value.filter(t=>{var s;return t.name.toLowerCase().includes(e)||((s=t.description)==null?void 0:s.toLowerCase().includes(e))})}),x=g({name:"",description:"",arguments:[],messages:[]}),G=g({arguments:{}}),se=ae(()=>!p.value||!x.value.messages||x.value.messages.length===0?[]:x.value.messages.filter(t=>t.content.text).map(t=>({...t,content:{...t.content,text:et(t.content.text,G.value.arguments)}}))),le={name:{required:!0,message:"请输入提示词名称",trigger:"blur"},messages:{required:!0,validator:(e,t)=>!t||t.length===0?new Error("至少需要一条消息"):!0,trigger:"blur"}};function oe(e){return O.value.get(e)||!1}function te(e){O.value.set(e,!0)}function ve(e){E.value&&k.value===e?(E.value=!1,k.value=-1):(E.value=!0,k.value=e)}async function re(){var e,t;try{V.value=!0;const s=await Z.get("/prompts");s.data.success&&(T.value=s.data.data);try{const c=await Z.get("/prompts/all");c.data.success&&(Y.value=c.data.data.mcp||[])}catch(c){console.warn("Failed to load MCP prompts:",c),Y.value=[]}}catch(s){_.error(((t=(e=s.response)==null?void 0:e.data)==null?void 0:t.error)||"加载提示词失败")}finally{V.value=!1}}function he(){z.value=null,i(),f.value=!0,Q.value="content"}function be(e){z.value=e,x.value={name:e.name,description:e.description||"",arguments:e.arguments?[...e.arguments]:[],messages:e.messages&&e.messages.length>0?[...e.messages]:[{role:"user",content:{type:"text",text:""}}]},O.value.clear(),f.value=!0,Q.value="content"}async function ie(e){var t,s;try{await Z.delete(`/prompts/${e}`),_.success("删除成功"),await re()}catch(c){_.error(((s=(t=c.response)==null?void 0:t.data)==null?void 0:s.error)||"删除失败")}}function ke(){x.value.arguments.push({name:"",description:"",required:!1})}function ue(e){x.value.arguments.splice(e,1)}function ye(){x.value.messages.push({role:"user",content:{type:"text",text:""}}),te(x.value.messages.length-1)}function w(e){x.value.messages.splice(e,1),O.value.delete(e),k.value===e?(E.value=!1,k.value=-1):k.value>e&&k.value--}async function r(){var e,t,s;try{await((e=L.value)==null?void 0:e.validate()),B.value=!0;const c={name:x.value.name,description:x.value.description||void 0,arguments:x.value.arguments.filter(u=>u.name),messages:x.value.messages.filter(u=>u.content.text)};z.value?(await Z.put(`/prompts/${z.value.id}`,c),_.success("更新成功")):(await Z.post("/prompts",c),_.success("创建成功")),O.value.clear(),f.value=!1,await re(),i()}catch(c){_.error(((s=(t=c.response)==null?void 0:t.data)==null?void 0:s.error)||"保存失败")}finally{B.value=!1}}async function U(){var e,t,s;try{await((e=L.value)==null?void 0:e.validate()),d.value=!0;const c=x.value.arguments.filter(u=>u.name);G.value.arguments=c.reduce((u,m)=>(u[m.name]=G.value.arguments[m.name]||"",u),{}),p.value=!0}catch(c){_.error(((s=(t=c.response)==null?void 0:t.data)==null?void 0:s.error)||"测试失败")}finally{d.value=!1}}async function q(e){z.value=e,x.value={name:e.name,description:e.description||"",arguments:e.arguments?[...e.arguments]:[],messages:e.messages?[...e.messages]:[]};const t=x.value.arguments.filter(s=>s.name);G.value.arguments=t.reduce((s,c)=>(s[c.name]="",s),{}),await U()}function i(){z.value=null,x.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}}`}}]},G.value.arguments={},O.value.clear(),E.value=!1,k.value=-1,j.value=!1}return Me(()=>f.value,async e=>{e?(await Le(),await new Promise(t=>setTimeout(t,150)),j.value=!0):(i(),j.value=!1)}),Ue(()=>{re()}),(e,t)=>(h(),y("div",ct,[a("div",vt,[o(n(S),{type:"primary",size:"large",class:"add-prompt-btn",onClick:he},{icon:l(()=>[...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:l(()=>[t[9]||(t[9]=b(" 添加提示词 ",-1))]),_:1}),o(n(W),{value:H.value,"onUpdate:value":t[0]||(t[0]=s=>H.value=s),placeholder:"搜索提示词名称或描述...",size:"large",clearable:"",class:"search-input"},{prefix:l(()=>[...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"])]),Y.value.length>0?(h(),y("div",pt,[o(n(He),{bordered:!0,class:"mcp-prompts-card"},{header:l(()=>[a("div",ft,[(h(),y("svg",mt,[...t[11]||(t[11]=[a("path",{d:"M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])),t[12]||(t[12]=a("span",{style:{"font-weight":"600"}},"MCP 组件提示词(只读)",-1)),o(n(xe),{size:"small",type:"info"},{default:l(()=>[b(F(Y.value.length)+" 个",1)]),_:1})])]),default:l(()=>[o(n(_e),{columns:$,data:Y.value,pagination:!1,size:"small",class:"mcp-prompts-table"},null,8,["data"])]),_:1})])):ee("",!0),a("div",gt,[Y.value.length>0?(h(),we(n(Ie),{key:0},{default:l(()=>[...t[13]||(t[13]=[b("用户自定义提示词",-1)])]),_:1})):ee("",!0),o(n(_e),{columns:v,data:M.value,pagination:ce,"row-props":J,loading:V.value,class:"modern-table"},null,8,["data","loading"])]),o(n(de),{show:f.value,"onUpdate:show":t[5]||(t[5]=s=>f.value=s),preset:"card",bordered:!1,class:"prompt-edit-modal",style:{width:"90vw",maxWidth:"1400px",height:"90vh",maxHeight:"90vh"}},{header:l(()=>[a("div",wt,[t[14]||(t[14]=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",ht,F(z.value?"编辑提示词":"创建提示词"),1),a("p",bt,F(z.value?"修改提示词的内容和参数":"定义提示词模板和参数"),1)])])]),footer:l(()=>[a("div",Lt,[o(n(S),{size:"large",onClick:t[4]||(t[4]=s=>f.value=!1)},{default:l(()=>[...t[33]||(t[33]=[b("取消",-1)])]),_:1}),o(n(S),{type:"info",size:"large",onClick:U,loading:d.value},{default:l(()=>[...t[34]||(t[34]=[b("测试",-1)])]),_:1},8,["loading"]),o(n(S),{type:"primary",size:"large",loading:B.value,onClick:r},{default:l(()=>[b(F(z.value?"保存修改":"创建提示词"),1)]),_:1},8,["loading"])])]),default:l(()=>[a("div",kt,[o(n(Ce),{ref_key:"formRef",ref:L,model:x.value,rules:le,class:"prompt-form"},{default:l(()=>[o(n(Ve),{value:Q.value,"onUpdate:value":t[3]||(t[3]=s=>Q.value=s),type:"line",animated:"",size:"large",class:"prompt-config-tabs"},{default:l(()=>[o(n(ze),{name:"config",tab:"参数和描述"},{default:l(()=>[a("div",yt,[a("div",xt,[t[17]||(t[17]=a("h4",{class:"section-title"},"基础信息",-1)),a("div",Ct,[o(n(K),{path:"name"},{label:l(()=>[...t[15]||(t[15]=[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:l(()=>[o(n(W),{value:x.value.name,"onUpdate:value":t[1]||(t[1]=s=>x.value.name=s),placeholder:"例如: code-review",size:"large"},null,8,["value"])]),_:1}),o(n(K),{path:"description"},{label:l(()=>[...t[16]||(t[16]=[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:l(()=>[o(n(W),{value:x.value.description,"onUpdate:value":t[2]||(t[2]=s=>x.value.description=s),placeholder:"提示词的描述信息(可选)",size:"large"},null,8,["value"])]),_:1})])]),a("div",$t,[a("div",St,[t[20]||(t[20]=a("h4",{class:"section-title"},"参数定义",-1)),o(n(S),{dashed:"",onClick:ke,size:"medium"},{icon:l(()=>[...t[18]||(t[18]=[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:l(()=>[t[19]||(t[19]=b(" 添加参数 ",-1))]),_:1})]),a("div",Mt,[(h(!0),y(fe,null,me(x.value.arguments,(s,c)=>(h(),y("div",{key:c,class:"parameter-card"},[a("div",Dt,[a("span",_t,"#"+F(c+1),1),o(n(S),{type:"error",text:"",size:"small",onClick:u=>ue(c)},{icon:l(()=>[...t[21]||(t[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:l(()=>[t[22]||(t[22]=b(" 删除 ",-1))]),_:1},8,["onClick"])]),a("div",zt,[o(n(K),{label:"必填",class:"required-field"},{default:l(()=>[o(n(Te),{checked:s.required,"onUpdate:checked":u=>s.required=u},null,8,["checked","onUpdate:checked"])]),_:2},1024),o(n(K),{label:"参数名",path:`arguments[${c}].name`,rule:{required:!0,message:"必填",trigger:"blur"}},{default:l(()=>[o(n(W),{value:s.name,"onUpdate:value":u=>s.name=u,placeholder:"参数名"},null,8,["value","onUpdate:value"])]),_:2},1032,["path"]),o(n(K),{label:"描述"},{default:l(()=>[o(n(W),{value:s.description,"onUpdate:value":u=>s.description=u,placeholder:"参数描述(可选)"},null,8,["value","onUpdate:value"])]),_:2},1024)])]))),128)),x.value.arguments.length===0?(h(),y("div",Tt,[...t[23]||(t[23]=[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)])])):ee("",!0)])])])]),_:1}),o(n(ze),{name:"content",tab:"提示词内容"},{default:l(()=>[a("div",Ut,[o(n(Oe),{type:"info",bordered:!1,class:"template-help-alert"},{header:l(()=>[a("div",Nt,[(h(),y("svg",jt,[...t[24]||(t[24]=[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[25]||(t[25]=a("span",{style:{"font-weight":"600"}},"模板语法说明",-1))])]),default:l(()=>[t[26]||(t[26]=a("div",{class:"template-help-content"},[a("p",null,[a("strong",null,"变量替换:"),b("使用 "),a("code",null,"{{变量名}}"),b(" 来替换变量值")]),a("p",null,[a("strong",null,"条件逻辑:")]),a("ul",null,[a("li",null,[a("code",null,"{{#if 变量名}}...{{/if}}"),b(" - 当变量为真值时显示内容")]),a("li",null,[a("code",null,"{{#ifnot 变量名}}...{{/ifnot}}"),b(" - 当变量为假值时显示内容")]),a("li",null,[a("code",null,"{{#if 变量名}}...{{else}}...{{/if}}"),b(" - 支持 else 分支")])]),a("p",null,[a("strong",null,"真值判断:"),b("非空字符串、非零数字、true、非空数组/对象都被视为真值")])],-1))]),_:1}),a("div",It,[(h(!0),y(fe,null,me(x.value.messages,(s,c)=>(h(),y("div",{key:c,class:"message-editor-wrapper"},[a("div",Bt,[o(n(Ne),{value:s.role,"onUpdate:value":u=>s.role=u,options:P,size:"small",class:"role-selector"},null,8,["value","onUpdate:value"]),o(n(S),{text:"",type:"error",size:"small",onClick:u=>w(c),class:"remove-message-btn"},{icon:l(()=>[...t[27]||(t[27]=[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:je(["editor-container",{fullscreen:E.value&&k.value===c}])},[a("div",At,[a("div",{class:je(["status-dot",{unsaved:oe(c),saved:!oe(c)}]),title:oe(c)?"未保存":"已保存"},null,10,Vt)]),o(n(S),{type:"default",size:"small",class:"fullscreen-btn",onClick:u=>ve(c)},{icon:l(()=>[!E.value||k.value!==c?(h(),y("svg",Et,[...t[28]||(t[28]=[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)])])):(h(),y("svg",Rt,[...t[29]||(t[29]=[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:l(()=>[b(" "+F(E.value&&k.value===c?"退出全屏":"全屏"),1)]),_:2},1032,["onClick"]),f.value&&j.value?(h(),y("div",Ht,[o(tt,{modelValue:s.content.text,"onUpdate:modelValue":u=>s.content.text=u,language:"markdown",theme:"vs",options:{minimap:{enabled:!1},fontSize:14,lineHeight:22,padding:{top:16,bottom:16},scrollBeyondLastLine:!1,automaticLayout:!0,wordWrap:"on"},onChange:()=>te(c)},null,8,["modelValue","onUpdate:modelValue","onChange"])])):ee("",!0)],2)]))),128)),o(n(S),{dashed:"",onClick:ye,class:"add-message-btn",size:"small"},{icon:l(()=>[...t[30]||(t[30]=[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:l(()=>[t[31]||(t[31]=b(" 添加消息模板 ",-1))]),_:1}),x.value.messages.length===0?(h(),y("div",Ot,[...t[32]||(t[32]=[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)])])):ee("",!0)])])]),_:1})]),_:1},8,["value"])]),_:1},8,["model"])])]),_:1},8,["show"]),o(n(de),{show:p.value,"onUpdate:show":t[7]||(t[7]=s=>p.value=s),preset:"card",title:"测试提示词",style:{width:"90vw",maxWidth:"800px"}},{action:l(()=>[o(n(S),{onClick:t[6]||(t[6]=s=>p.value=!1)},{default:l(()=>[...t[37]||(t[37]=[b("关闭",-1)])]),_:1})]),default:l(()=>[a("div",Pt,[o(n(Ce),{model:G.value},{default:l(()=>[(h(!0),y(fe,null,me(x.value.arguments,s=>(h(),we(n(K),{key:s.name,label:s.name,required:s.required},{default:l(()=>[o(n(W),{value:G.value.arguments[s.name],"onUpdate:value":c=>G.value.arguments[s.name]=c,placeholder:s.description||`输入 ${s.name}`,clearable:""},null,8,["value","onUpdate:value","placeholder"])]),_:2},1032,["label","required"]))),128))]),_:1},8,["model"]),o(n(Ie),null,{default:l(()=>[...t[35]||(t[35]=[b("生成的消息(实时预览)",-1)])]),_:1}),a("div",Jt,[(h(!0),y(fe,null,me(se.value,(s,c)=>(h(),y("div",{key:c,class:"test-message"},[a("div",qt,[o(n(xe),{type:s.role==="user"?"info":"success"},{default:l(()=>[b(F(s.role==="user"?"用户":"助手"),1)]),_:2},1032,["type"])]),a("pre",Ft,F(s.content.text),1)]))),128)),se.value.length===0?(h(),y("div",Wt,[...t[36]||(t[36]=[a("p",null,"暂无消息内容",-1)])])):ee("",!0)])])]),_:1},8,["show"])]))}}),Yt=De(Kt,[["__scopeId","data-v-86f677ef"]]),Gt={class:"table-editor"},Qt={class:"editor-toolbar"},Xt={class:"toolbar-left"},Zt={key:0,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},ea={key:1,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},ta={class:"toolbar-right"},aa={class:"save-indicator-wrapper"},sa={key:0,class:"table-container"},la={class:"table-wrapper",ref:"tableWrapperRef"},na={key:1,class:"no-table-message"},oa={class:"import-content"},ra={class:"json-editor-wrapper"},ia={class:"json-editor-actions"},ua={class:"batch-loading-content"},da={class:"loading-text"},ca=$e({__name:"TableEditor",props:{tableDefinition:{},tableId:{}},emits:["saved"],setup(ne,{emit:_}){const f=Se(),p=ne,B=_,d=g([]),V=g([]),z=g(!1),L=g(!1),H=g(!1),T=g(!0),Y=g(50),Q=g(1),E=g(""),k=g(!1),O=g("正在处理..."),j=ae(()=>({page:Q.value,pageSize:Y.value,showSizePicker:!0,pageSizes:[20,50,100,200],showQuickJumper:!0,onUpdatePage:i=>{Q.value=i},onUpdatePageSize:i=>{Y.value=i,Q.value=1}})),P=ae(()=>p.tableDefinition?[{type:"selection",width:50,fixed:"left"},...p.tableDefinition.columns.map(e=>({title:()=>{const t=D("span",{class:"column-name",title:e.description||void 0},e.name);return D("div",{class:"column-header-cell"},[e.description?D(Ee,{trigger:"hover",placement:"top"},{default:()=>e.description,trigger:()=>t}):t,D(xe,{size:"tiny",type:ye(e.type),style:"margin-left: 6px"},{default:()=>e.type}),e.nullable?null:D("span",{class:"required-mark"},"*")])},key:e.name,minWidth:120,resizable:!0,render(t){return D("div",{class:"cell-wrapper excel-cell"},[e.type==="string"?D(W,{value:t.rowData[e.name],placeholder:"",size:"tiny",class:"excel-input",disabled:T.value,onUpdateValue:s=>{T.value||(t.rowData[e.name]=s,oe(t))},onBlur:()=>te(t,e)}):e.type==="number"?D("input",{type:"number",value:t.rowData[e.name]??"",placeholder:"",class:"excel-input-native",disabled:T.value,onInput:s=>{if(T.value)return;const u=s.target.value,m=Number(u);(!isNaN(m)||u==="")&&(t.rowData[e.name]=u===""?null:m,oe(t))},onBlur:()=>te(t,e)}):e.type==="boolean"?D(Te,{checked:t.rowData[e.name],disabled:T.value,onUpdateChecked:s=>{T.value||(t.rowData[e.name]=s,oe(t))}}):e.type==="date"?D("input",{type:"datetime-local",value:ve(t.rowData[e.name]),class:"excel-input-native",disabled:T.value,onInput:s=>{if(T.value)return;const u=s.target.value;if(u){const m=new Date(u);t.rowData[e.name]=m.toISOString()}else t.rowData[e.name]=null;oe(t)},onBlur:()=>te(t,e)}):e.type==="json"?D(W,{type:"textarea",value:typeof t.rowData[e.name]=="string"?t.rowData[e.name]:JSON.stringify(t.rowData[e.name]||{},null,2),placeholder:"",rows:2,size:"tiny",class:"excel-textarea",disabled:T.value,onUpdateValue:s=>{T.value||(t.rowData[e.name]=s)},onBlur:()=>{te(t,e)}}):null])}}))]:[]),ce=ae(()=>{if(p.tableDefinition)return 50+p.tableDefinition.columns.length*120});function J(i){const e=i.id||`new-${d.value.indexOf(i)}`;return{class:V.value.includes(e)?"row-selected":"",style:"cursor: pointer;"}}Me(()=>p.tableId,async i=>{i&&p.tableDefinition?await M():(d.value=[],V.value=[])},{immediate:!0});let $=null;Ue(()=>{$=()=>{he()},window.addEventListener("beforeunload",$)});const v=g(!0);Pe(()=>{v.value=!1,$&&(window.removeEventListener("beforeunload",$),$=null),le.forEach(i=>{clearTimeout(i)}),le.clear()});async function M(){var i,e;if(p.tableId)try{const t=await Z.get(`/tables/data/${p.tableId}`);t.data.success&&(d.value=t.data.data)}catch(t){f.error("加载数据失败: "+(((e=(i=t.response)==null?void 0:i.data)==null?void 0:e.error)||t.message))}}async function x(){if(!p.tableDefinition)return;const i={tableId:p.tableId||"",rowData:{}};p.tableDefinition.columns.forEach(e=>{if(e.defaultValue!==void 0)i.rowData[e.name]=e.defaultValue;else if(e.nullable)i.rowData[e.name]=null;else switch(e.type){case"string":i.rowData[e.name]="";break;case"number":i.rowData[e.name]=0;break;case"boolean":i.rowData[e.name]=!1;break;case"date":i.rowData[e.name]=new Date().toISOString();break;case"json":i.rowData[e.name]={};break}}),d.value.push(i),await ie(i)}async function G(){const i=[...V.value],e=d.value.filter(t=>{const s=t.id||`new-${d.value.indexOf(t)}`;return i.includes(s)});if(e.length!==0){k.value=!0,O.value=`正在删除 ${e.length} 条数据...`;try{let t=0,s=0;for(const c of e)if(c.id&&p.tableId)try{await Z.delete(`/tables/data/${p.tableId}/${c.id}`),t++}catch(u){console.error("Delete row failed:",u),s++}d.value=d.value.filter(c=>{const u=c.id||`new-${d.value.indexOf(c)}`;return!i.includes(u)}),V.value=[],B("saved"),s>0?f.warning(`成功删除 ${t} 条,失败 ${s} 条`):f.success(`成功删除 ${t} 条数据`)}finally{k.value=!1}}}function se(i){V.value=i}const le=new Map;async function oe(i,e){await be(i)}async function te(i,e){const t=i.rowData[e.name];if((t==null||t==="")&&!e.nullable&&e.defaultValue===void 0){f.warning(`列 ${e.name} 不能为空`),await ie(i);return}try{switch(e.type){case"number":if(typeof t!="number"&&t!==""&&t!==null){const s=Number(t);isNaN(s)?(f.error(`列 ${e.name} 必须是数字`),i.rowData[e.name]=e.defaultValue??0):i.rowData[e.name]=s}break;case"boolean":typeof t!="boolean"&&t!==null&&t!==void 0&&(i.rowData[e.name]=!!t);break;case"date":if(typeof t=="string"&&t){const s=new Date(t);isNaN(s.getTime())?(f.error(`列 ${e.name} 必须是有效的日期`),i.rowData[e.name]=e.defaultValue??new Date().toISOString()):i.rowData[e.name]=s.toISOString()}break;case"json":if(typeof t=="string"&&t)try{i.rowData[e.name]=JSON.parse(t)}catch{f.error(`列 ${e.name} 必须是有效的 JSON`);return}break}await ie(i)}catch(s){console.error(`列 ${e.name} 数据格式错误:`,s),await ie(i)}}function ve(i){if(!i)return"";const e=new Date(i);if(isNaN(e.getTime()))return"";const t=e.getFullYear(),s=String(e.getMonth()+1).padStart(2,"0"),c=String(e.getDate()).padStart(2,"0"),u=String(e.getHours()).padStart(2,"0"),m=String(e.getMinutes()).padStart(2,"0");return`${t}-${s}-${c}T${u}:${m}`}let re=!1;async function he(){re||!p.tableId||!p.tableDefinition||d.value.length===0||await ke()}async function be(i){if(!p.tableId||!p.tableDefinition)return;const e=le.get(i);e&&clearTimeout(e);const t=setTimeout(async()=>{await ie(i),le.delete(i)},300);le.set(i,t)}async function ie(i){var s,c;if(!p.tableId||!p.tableDefinition||!v.value)return;const e=le.get(i);e&&(clearTimeout(e),le.delete(i));const t={};p.tableDefinition.columns.forEach(u=>{const m=i.rowData[u.name];if(m===void 0)if(u.defaultValue!==void 0)t[u.name]=u.defaultValue;else if(u.nullable)t[u.name]=null;else switch(u.type){case"string":t[u.name]="";break;case"number":t[u.name]=0;break;case"boolean":t[u.name]=!1;break;case"date":t[u.name]=new Date().toISOString();break;case"json":t[u.name]={};break}else t[u.name]=m});try{if(i.id){const u=await Z.put(`/tables/data/${p.tableId}/${i.id}`,{rowData:t});if(!v.value)return;if(u.data.success){const m=u.data.data;i.createdAt=m.createdAt,i.updatedAt=m.updatedAt,ue(),B("saved")}else console.error("Save row failed:",u.data.error),v.value&&f.error("保存失败: "+(u.data.error||"未知错误"))}else{const u=await Z.post(`/tables/data/${p.tableId}`,{rowData:t});if(!v.value)return;if(u.data.success){const m=u.data.data;i.id=m.id,i.createdAt=m.createdAt,i.updatedAt=m.updatedAt,ue(),B("saved")}else console.error("Create row failed:",u.data.error),v.value&&f.error("保存失败: "+(u.data.error||"未知错误"))}}catch(u){if(console.error("Save single row failed:",u),v.value){const m=((c=(s=u.response)==null?void 0:s.data)==null?void 0:c.error)||u.message||"保存失败";if(m.includes("Row not found")&&!v.value)return;f.error("保存失败: "+m)}}}async function ke(){var i,e,t,s,c;if(!re&&v.value){if(!p.tableId){console.warn("performSave: tableId is missing");return}if(!p.tableDefinition){console.warn("performSave: tableDefinition is missing");return}if(d.value.length!==0){re=!0,z.value=!0;try{const u=d.value.map(R=>{const N={};return p.tableDefinition.columns.forEach(C=>{const I=R.rowData[C.name];if(I===void 0)if(C.defaultValue!==void 0)N[C.name]=C.defaultValue;else if(C.nullable)N[C.name]=null;else switch(C.type){case"string":N[C.name]="";break;case"number":N[C.name]=0;break;case"boolean":N[C.name]=!1;break;case"date":N[C.name]=new Date().toISOString();break;case"json":N[C.name]={};break}else N[C.name]=I}),{id:R.id,rowData:N}}),m=await Z.put(`/tables/data/${p.tableId}/batch`,{rows:u});if(m.data.success){const R=m.data.data||[];if(R.length>0){const N=new Map;R.forEach(I=>{I.id&&N.set(I.id,I)});const C=new Set;d.value.forEach(I=>{if(I.id&&N.has(I.id)){const A=N.get(I.id);I.createdAt=A.createdAt,I.updatedAt=A.updatedAt,C.add(I.id)}}),d.value.forEach(I=>{if(!I.id){const A=R.find(X=>X.id&&!C.has(X.id));A&&A.id&&(I.id=A.id,I.createdAt=A.createdAt,I.updatedAt=A.updatedAt,C.add(A.id))}})}v.value&&(ue(),B("saved"))}else if(console.error("Save failed:",m.data),v.value){const R=((i=m.data)==null?void 0:i.error)||"未知错误";f.error("保存失败: "+R)}}catch(u){if(console.error("Auto save failed:",u),v.value){const m=((t=(e=u.response)==null?void 0:e.data)==null?void 0:t.error)||u.message||"保存失败";if(m.includes("Row not found")){console.warn("Save failed after component unmount, ignoring error");return}console.error("Error details:",{message:u.message,response:(s=u.response)==null?void 0:s.data,status:(c=u.response)==null?void 0:c.status}),f.error("保存失败: "+m)}}finally{re=!1,z.value=!1}}}}function ue(){L.value=!0,setTimeout(()=>{L.value=!1},1500)}function ye(i){switch(i){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 w(){if(!p.tableId||!p.tableDefinition){f.error("请先选择要导出的表");return}if(d.value.length===0){f.warning("当前表没有数据可导出");return}try{const i=d.value.map(u=>u.rowData),e=JSON.stringify(i,null,2),t=new Blob([e],{type:"application/json"}),s=URL.createObjectURL(t),c=document.createElement("a");c.href=s,c.download=`${p.tableDefinition.name}_data.json`,document.body.appendChild(c),c.click(),document.body.removeChild(c),URL.revokeObjectURL(s),f.success(`成功导出 ${d.value.length} 条数据`)}catch(i){f.error("导出失败: "+(i.message||"未知错误"))}}async function r(i){var e,t;if(!p.tableId||!p.tableDefinition){f.error("请先选择要导入数据的表");return}try{let s;try{const m=JSON.parse(i);if(Array.isArray(m))s=m;else if(m.data&&Array.isArray(m.data))s=m.data,f.warning("检测到旧格式,将只导入数据部分");else{f.error("JSON 格式错误:需要数据数组格式");return}}catch{f.error("JSON 解析失败:文件格式不正确");return}if(s.length===0){f.warning("导入的数据为空"),H.value=!1;return}const c=p.tableDefinition.columns.map(m=>m.name),u=[];if(s.forEach((m,R)=>{if(!m||typeof m!="object"||Array.isArray(m)){u.push(`第 ${R+1} 行:数据必须是对象格式`);return}p.tableDefinition.columns.forEach(N=>{const C=m[N.name];if(!N.nullable&&N.defaultValue===void 0&&(C==null||C==="")&&u.push(`第 ${R+1} 行,列 "${N.name}":必填字段不能为空`),C!=null&&C!=="")switch(N.type){case"number":typeof C!="number"&&!(typeof C=="string"&&!isNaN(Number(C)))&&u.push(`第 ${R+1} 行,列 "${N.name}":必须是数字类型`);break;case"boolean":typeof C!="boolean"&&u.push(`第 ${R+1} 行,列 "${N.name}":必须是布尔类型`);break;case"date":(typeof C!="string"||isNaN(new Date(C).getTime()))&&u.push(`第 ${R+1} 行,列 "${N.name}":必须是有效的日期格式`);break;case"json":if(C!==null&&typeof C!="object"&&typeof C!="string"&&u.push(`第 ${R+1} 行,列 "${N.name}":必须是对象、数组或 JSON 字符串`),typeof C=="string")try{JSON.parse(C)}catch{u.push(`第 ${R+1} 行,列 "${N.name}":JSON 字符串格式无效`)}break;case"string":break}}),Object.keys(m).forEach(N=>{c.includes(N)||u.push(`第 ${R+1} 行:包含未知列 "${N}",将被忽略`)})}),u.length>0){const m=u.slice(0,10).join(`
25
+ `),R=u.length>10?`
26
+ ... 还有 ${u.length-10} 个错误`:"";f.error(`数据校验失败:
27
+ ${m}${R}`);return}z.value=!0,k.value=!0,O.value=`正在导入 ${s.length} 条数据...`;try{const m=s.map(N=>{const C={};return p.tableDefinition.columns.forEach(I=>{const A=N[I.name];let X=A;if(A!=null&&A!=="")switch(I.type){case"number":X=typeof A=="string"?Number(A):A;break;case"boolean":X=typeof A=="boolean"?A:!!A;break;case"date":typeof A=="string"&&(X=new Date(A).toISOString());break;case"json":if(typeof A=="string")try{X=JSON.parse(A)}catch{X=A}break}else if(I.defaultValue!==void 0)X=I.defaultValue;else if(I.nullable)X=null;else switch(I.type){case"string":X="";break;case"number":X=0;break;case"boolean":X=!1;break;case"date":X=new Date().toISOString();break;case"json":X={};break}C[I.name]=X}),{rowData:C}}),R=await Z.put(`/tables/data/${p.tableId}/batch`,{rows:m});R.data.success?(ue(),await M(),B("saved"),H.value=!1,f.success(`成功导入 ${s.length} 条数据`)):f.error("导入失败:"+(R.data.error||"未知错误"))}catch(m){f.error("导入失败: "+(((t=(e=m.response)==null?void 0:e.data)==null?void 0:t.error)||m.message))}finally{z.value=!1,k.value=!1}}catch(s){f.error("文件读取失败: "+(s.message||"未知错误"))}}async function U(i){var t;const e=(t=i.fileList[0])==null?void 0:t.file;if(e)try{const s=await e.text();await r(s)}catch(s){f.error("文件读取失败: "+(s.message||"未知错误"))}}async function q(){if(!E.value.trim()){f.warning("请输入 JSON 数据");return}await r(E.value.trim()),E.value=""}return(i,e)=>(h(),y("div",Gt,[a("div",Qt,[a("div",Xt,[o(n(S),{size:"large",onClick:e[0]||(e[0]=t=>T.value=!T.value),type:T.value?"warning":"success",ghost:""},{icon:l(()=>[T.value?(h(),y("svg",Zt,[...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)])])):(h(),y("svg",ea,[...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:l(()=>[b(" "+F(T.value?"解锁编辑":"锁定编辑"),1)]),_:1},8,["type"]),o(n(S),{type:"primary",size:"large",onClick:x,disabled:!ne.tableDefinition||T.value},{icon:l(()=>[...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:l(()=>[e[9]||(e[9]=b(" 添加行 ",-1))]),_:1},8,["disabled"]),o(n(S),{size:"large",onClick:G,disabled:V.value.length===0||T.value,type:"error",ghost:""},{icon:l(()=>[...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:l(()=>[b(" 删除选中 ("+F(V.value.length)+") ",1)]),_:1},8,["disabled"]),o(n(S),{size:"large",onClick:w,disabled:!ne.tableDefinition||d.value.length===0},{icon:l(()=>[...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:l(()=>[e[12]||(e[12]=b(" 导出 JSON ",-1))]),_:1},8,["disabled"]),o(n(S),{size:"large",onClick:e[1]||(e[1]=t=>H.value=!0),disabled:!ne.tableDefinition},{icon:l(()=>[...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:l(()=>[e[14]||(e[14]=b(" 导入 JSON ",-1))]),_:1},8,["disabled"])]),a("div",ta,[a("div",aa,[L.value?(h(),y("div",{key:0,class:je(["save-success-indicator",{flash:L.value}])},null,2)):ee("",!0)]),o(n(xe),{type:"info",size:"large"},{default:l(()=>[b(" 共 "+F(d.value.length)+" 行(编辑即保存) ",1)]),_:1})])]),ne.tableDefinition?(h(),y("div",sa,[a("div",la,[o(n(_e),{columns:P.value,data:d.value,pagination:j.value,"row-key":t=>t.id||`new-${d.value.indexOf(t)}`,"row-props":J,"max-height":600,"scroll-x":ce.value,bordered:!0,"single-line":!1,"onUpdate:checkedRowKeys":se,class:"editable-data-table excel-table"},null,8,["columns","data","pagination","row-key","scroll-x"])],512)])):(h(),y("div",na,[o(n(ge),{description:"请先创建或选择表定义"})])),o(n(de),{show:H.value,"onUpdate:show":e[4]||(e[4]=t=>H.value=t),preset:"card",bordered:!1,class:"import-modal",style:{width:"90vw",maxWidth:"600px"}},{header:l(()=>[...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:l(()=>[a("div",oa,[o(n(Ve),{"default-value":"file",type:"line"},{default:l(()=>[o(n(ze),{name:"file",tab:"文件上传"},{default:l(()=>[o(n(Je),{"file-list":[],accept:".json",max:1,onChange:U},{default:l(()=>[o(n(qe),null,{default:l(()=>[...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(n(ze),{name:"text",tab:"直接编辑/粘贴"},{default:l(()=>[a("div",ra,[o(n(W),{value:E.value,"onUpdate:value":e[2]||(e[2]=t=>E.value=t),type:"textarea",placeholder:"请粘贴或输入 JSON 数据(数组格式)...",rows:15,class:"json-textarea"},null,8,["value"]),a("div",ia,[o(n(S),{onClick:q,type:"primary",disabled:!E.value.trim()},{default:l(()=>[...e[17]||(e[17]=[b(" 导入 ",-1)])]),_:1},8,["disabled"]),o(n(S),{onClick:e[3]||(e[3]=t=>E.value="")},{default:l(()=>[...e[18]||(e[18]=[b(" 清空 ",-1)])]),_:1})])])]),_:1})]),_:1})])]),_:1},8,["show"]),o(n(de),{show:k.value,"onUpdate:show":e[5]||(e[5]=t=>k.value=t),"mask-closable":!1,"close-on-esc":!1,"auto-focus":!1,preset:"dialog",closable:!1,"show-icon":!1,style:{width:"400px"}},{default:l(()=>[a("div",ua,[o(n(Fe),{size:"large"},{description:l(()=>[a("div",da,F(O.value),1)]),_:1})])]),_:1},8,["show"])]))}}),va=De(ca,[["__scopeId","data-v-7b10a9ad"]]),pa={class:"tables-page"},fa={class:"tables-toolbar"},ma={class:"toolbar-left"},ga={class:"table-select-with-icon"},wa={class:"toolbar-right"},ha={class:"toolbar-switch"},ba={class:"explore-config-panel"},ka={class:"explore-config-list"},ya={key:0,class:"empty-tables-hint"},xa={class:"explore-config-item-info"},Ca={class:"table-name"},$a={key:0,class:"table-description"},Sa={key:0,class:"tables-table-container"},Ma={key:1,class:"no-table-selected"},Da={class:"columns-section"},_a={class:"columns-header"},za={class:"columns-list"},Ta={class:"column-index"},Ua={key:0,class:"empty-columns"},Na={class:"form-actions"},ja={class:"modal-header"},Ia={class:"modal-subtitle"},Ba={class:"column-descriptions-section"},Aa={class:"column-description-label"},Va={class:"column-name-label"},Ea={key:0,class:"empty-columns-hint"},Ra={class:"form-actions"},Ha=$e({__name:"Tables",setup(ne){const _=Se(),f=Re(),p=g([]),B=g(null),d=g(null),V=g(!1),z=g(!1),L=g(!1),H=g(!1),T=g(!1),Y=g(!1),Q=g(!1),E=g(null),k=g(""),O=g({}),j=g(!0),P=g({}),ce=[{label:"字符串",value:"string"},{label:"数字",value:"number"},{label:"布尔值",value:"boolean"},{label:"日期",value:"date"},{label:"JSON",value:"json"}],J=g({name:"",description:"",columns:[]}),$={name:{required:!0,message:"表名不能为空",trigger:"blur"}},v=ae(()=>p.value.map(w=>({label:w.name,value:w.id,description:w.description})));function M(w){if(w){const r=p.value.find(U=>U.id===w);r&&ve(r)}else B.value=null,d.value=null}const x=ae({get:()=>V.value,set:w=>{V.value=w}});Ue(async()=>{await te(),await G()});async function G(){try{if(await f.fetchConfig(),f.currentConfig){const w=f.currentConfig;j.value=w.enableExploreTable!==!1}}catch(w){console.error("加载配置失败:",w)}}async function se(w){Q.value=!0;try{await f.updateConfig({enableExploreTable:w}),_.success(w?"已允许 AI 探索数据表":"已禁止 AI 探索数据表")}catch(r){_.error("更新配置失败: "+(r.message||"未知错误")),j.value=!w}finally{Q.value=!1}}function le(w){return w.allowExplore!==!1}async function oe(w,r){var U,q;P.value[w]=!0;try{const i=p.value.find(t=>t.id===w);if(!i){_.error("表不存在");return}(await Z.put(`/tables/definitions/${w}`,{allowExplore:r})).data.success&&(i.allowExplore=r,_.success(r?`已允许 AI 探索表「${i.name}」`:`已禁止 AI 探索表「${i.name}」`),d.value&&d.value.id===w&&(d.value.allowExplore=r))}catch(i){_.error("更新失败: "+(((q=(U=i.response)==null?void 0:U.data)==null?void 0:q.error)||i.message))}finally{P.value[w]=!1}}async function te(){var w,r;try{const U=await Z.get("/tables/definitions");U.data.success&&(p.value=U.data.data,p.value.length>0&&!B.value&&ve(p.value[0]))}catch(U){_.error("加载表列表失败: "+(((r=(w=U.response)==null?void 0:w.data)==null?void 0:r.error)||U.message))}}function ve(w){B.value=w.id,d.value=w}function re(){J.value.columns.push({name:"",type:"string",nullable:!0,description:""})}function he(w){J.value.columns.splice(w,1)}async function be(){E.value&&await E.value.validate(async w=>{var r,U;if(!w){if(J.value.columns.length===0){_.warning("至少需要定义一个列");return}T.value=!0;try{const q=await Z.post("/tables/definitions",J.value);q.data.success&&(_.success("表创建成功"),V.value=!1,J.value={name:"",description:"",columns:[]},await te(),ve(q.data.data))}catch(q){_.error("保存失败: "+(((U=(r=q.response)==null?void 0:r.data)==null?void 0:U.error)||q.message))}finally{T.value=!1}}})}async function ie(){var w,r;if(d.value){H.value=!0;try{(await Z.delete(`/tables/definitions/${d.value.id}`)).data.success&&(_.success("表删除成功"),B.value=null,d.value=null,L.value=!1,await te())}catch(U){_.error("删除失败: "+(((r=(w=U.response)==null?void 0:w.data)==null?void 0:r.error)||U.message))}finally{H.value=!1}}}function ke(){}Me(z,w=>{w&&d.value&&(k.value=d.value.description||"",O.value={},d.value.columns&&d.value.columns.forEach(r=>{O.value[r.name]=r.description||""}))});function ue(w){switch(w){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 ye(){var w,r;if(!d.value||!B.value){_.error("请先选择一个表");return}Y.value=!0;try{const U=d.value.columns.map(i=>({...i,description:O.value[i.name]||void 0})),q=await Z.put(`/tables/definitions/${B.value}`,{description:k.value||null,columns:U});q.data.success&&(_.success("表声明和字段声明更新成功"),z.value=!1,d.value&&(d.value.description=q.data.data.description,d.value.columns=q.data.data.columns),await te())}catch(U){_.error("更新失败: "+(((r=(w=U.response)==null?void 0:w.data)==null?void 0:r.error)||U.message))}finally{Y.value=!1}}return(w,r)=>{var q,i;const U=Ke("n-tag");return h(),y("div",pa,[a("div",fa,[a("div",ma,[a("div",ga,[o(n(Ne),{value:B.value,"onUpdate:value":[r[0]||(r[0]=e=>B.value=e),M],options:v.value,placeholder:"选择表...",size:"large",clearable:"",filterable:"",class:"table-select"},{empty:l(()=>[o(n(ge),{description:"暂无表",size:"small"})]),_:1},8,["value","options"]),(q=d.value)!=null&&q.description?(h(),we(n(Ee),{key:0,trigger:"hover",placement:"top"},{trigger:l(()=>[...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:l(()=>[b(" "+F(d.value.description),1)]),_:1})):ee("",!0)])]),a("div",wa,[a("div",ha,[o(n(Be),{value:j.value,"onUpdate:value":[r[1]||(r[1]=e=>j.value=e),se],size:"medium",loading:Q.value},{checked:l(()=>[...r[15]||(r[15]=[b("允许 AI 探索数据表",-1)])]),unchecked:l(()=>[...r[16]||(r[16]=[b("禁止 AI 探索数据表",-1)])]),_:1},8,["value","loading"]),o(n(We),{trigger:"hover",placement:"bottom-end",style:{width:"400px",maxHeight:"500px"}},{trigger:l(()=>[...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:l(()=>[a("div",ba,[r[18]||(r[18]=a("div",{class:"explore-config-header"},[a("h4",null,"配置表探索权限"),a("p",{class:"explore-config-hint"},"控制哪些表允许被 AI 探索(默认为允许)")],-1)),a("div",ka,[p.value.length===0?(h(),y("div",ya,[o(n(ge),{description:"暂无表",size:"small"})])):ee("",!0),(h(!0),y(fe,null,me(p.value,e=>(h(),y("div",{key:e.id,class:"explore-config-item"},[a("div",xa,[a("span",Ca,F(e.name),1),e.description?(h(),y("span",$a,F(e.description),1)):ee("",!0)]),o(n(Be),{value:le(e),"onUpdate:value":t=>oe(e.id,t),size:"small",loading:P.value[e.id]},null,8,["value","onUpdate:value","loading"])]))),128))])])]),_:1})]),d.value?(h(),we(n(S),{key:0,size:"large",ghost:"",onClick:r[2]||(r[2]=e=>z.value=!0),class:"edit-table-btn"},{icon:l(()=>[...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:l(()=>[r[20]||(r[20]=b(" 编辑表声明 ",-1))]),_:1})):ee("",!0),d.value?(h(),we(n(S),{key:1,type:"error",size:"large",ghost:"",onClick:r[3]||(r[3]=e=>L.value=!0),class:"delete-table-btn"},{icon:l(()=>[...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:l(()=>[r[22]||(r[22]=b(" 删除表 ",-1))]),_:1})):ee("",!0),o(n(S),{type:"primary",size:"large",onClick:r[4]||(r[4]=e=>V.value=!0),class:"create-table-btn"},{icon:l(()=>[...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:l(()=>[r[24]||(r[24]=b(" 创建新表 ",-1))]),_:1})])]),d.value?(h(),y("div",Sa,[o(va,{"table-definition":d.value,"table-id":B.value,onSaved:ke},null,8,["table-definition","table-id"])])):(h(),y("div",Ma,[o(n(ge),{description:"请选择一个表进行编辑"})])),o(n(de),{show:L.value,"onUpdate:show":r[5]||(r[5]=e=>L.value=e),preset:"dialog",type:"warning",title:"确认删除",content:`确定要删除表「${(i=d.value)==null?void 0:i.name}」吗?此操作将同时删除表中的所有数据,且不可恢复。`,"positive-text":"确认删除","negative-text":"取消","positive-button-props":{type:"error"},loading:H.value,onPositiveClick:ie,onNegativeClick:r[6]||(r[6]=e=>L.value=!1)},null,8,["show","content","loading"]),o(n(de),{show:x.value,"onUpdate:show":r[10]||(r[10]=e=>x.value=e),preset:"card",bordered:!1,class:"table-definition-modal",style:{width:"90vw",maxWidth:"800px"}},{header:l(()=>[...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:l(()=>[o(n(Ce),{ref_key:"tableFormRef",ref:E,model:J.value,rules:$,class:"table-form"},{default:l(()=>[o(n(K),{path:"name",label:"表名"},{default:l(()=>[o(n(W),{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(n(K),{path:"description",label:"描述"},{default:l(()=>[o(n(W),{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(n(K),{label:"列定义"},{default:l(()=>[a("div",Da,[a("div",_a,[r[28]||(r[28]=a("span",null,null,-1)),o(n(S),{dashed:"",onClick:re,size:"medium"},{icon:l(()=>[...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:l(()=>[r[27]||(r[27]=b(" 添加列 ",-1))]),_:1})]),a("div",za,[(h(!0),y(fe,null,me(J.value.columns,(e,t)=>(h(),y("div",{key:t,class:"column-row"},[a("span",Ta,"#"+F(t+1),1),o(n(K),{path:`columns[${t}].name`,"show-label":!1,rule:{required:!0,message:"必填",trigger:"blur"},class:"column-field-name"},{default:l(()=>[o(n(W),{value:e.name,"onUpdate:value":s=>e.name=s,placeholder:"列名"},null,8,["value","onUpdate:value"])]),_:2},1032,["path"]),o(n(K),{path:`columns[${t}].type`,"show-label":!1,rule:{required:!0,message:"必填",trigger:"change"},class:"column-field-type"},{default:l(()=>[o(n(Ne),{value:e.type,"onUpdate:value":s=>e.type=s,options:ce},null,8,["value","onUpdate:value"])]),_:2},1032,["path"]),o(n(Te),{checked:!e.nullable,"onUpdate:checked":s=>e.nullable=!s,class:"column-field-nullable"},{default:l(()=>[...r[29]||(r[29]=[b("必要",-1)])]),_:1},8,["checked","onUpdate:checked"]),o(n(K),{path:`columns[${t}].description`,"show-label":!1,class:"column-field-description"},{default:l(()=>[o(n(W),{value:e.description,"onUpdate:value":s=>e.description=s,placeholder:"列说明(可选)"},null,8,["value","onUpdate:value"])]),_:2},1032,["path"]),o(n(S),{type:"error",text:"",size:"small",onClick:s=>he(t),class:"column-delete-btn"},{default:l(()=>[...r[30]||(r[30]=[b(" 删除 ",-1)])]),_:1},8,["onClick"])]))),128)),J.value.columns.length===0?(h(),y("div",Ua,[o(n(ge),{description:"暂无列,点击上方添加列按钮添加",size:"small"})])):ee("",!0)])])]),_:1}),a("div",Na,[o(n(S),{size:"large",onClick:r[9]||(r[9]=e=>x.value=!1)},{default:l(()=>[...r[31]||(r[31]=[b(" 取消 ",-1)])]),_:1}),o(n(S),{type:"primary",size:"large",loading:T.value,onClick:be},{default:l(()=>[...r[32]||(r[32]=[b(" 保存 ",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])]),_:1},8,["show"]),o(n(de),{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:l(()=>{var e;return[a("div",ja,[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",Ia," 编辑表「"+F((e=d.value)==null?void 0:e.name)+"」的描述信息 ",1)])])]}),default:l(()=>[o(n(Ce),{ref:"editTableFormRef",class:"edit-table-form"},{default:l(()=>[o(n(K),{label:"表声明"},{default:l(()=>[o(n(W),{value:k.value,"onUpdate:value":r[11]||(r[11]=e=>k.value=e),placeholder:"表的用途说明",size:"large",type:"textarea",rows:4},null,8,["value"])]),_:1}),o(n(K),{label:"字段声明"},{default:l(()=>{var e,t;return[a("div",Ba,[(h(!0),y(fe,null,me(((e=d.value)==null?void 0:e.columns)||[],s=>(h(),y("div",{key:s.name,class:"column-description-row"},[a("div",Aa,[a("span",Va,F(s.name),1),o(U,{size:"tiny",type:ue(s.type),style:{"margin-left":"8px"}},{default:l(()=>[b(F(s.type),1)]),_:2},1032,["type"])]),o(n(W),{value:O.value[s.name],"onUpdate:value":c=>O.value[s.name]=c,placeholder:`${s.name} 字段的说明(可选)`,size:"medium",clearable:""},null,8,["value","onUpdate:value","placeholder"])]))),128)),!((t=d.value)!=null&&t.columns)||d.value.columns.length===0?(h(),y("div",Ea,[o(n(ge),{description:"当前表没有字段",size:"small"})])):ee("",!0)])]}),_:1}),a("div",Ra,[o(n(S),{size:"large",onClick:r[12]||(r[12]=e=>z.value=!1)},{default:l(()=>[...r[35]||(r[35]=[b(" 取消 ",-1)])]),_:1}),o(n(S),{type:"primary",size:"large",loading:Y.value,onClick:ye},{default:l(()=>[...r[36]||(r[36]=[b(" 保存 ",-1)])]),_:1},8,["loading"])])]),_:1},512)]),_:1},8,["show"])])}}}),Oa=De(Ha,[["__scopeId","data-v-bf1554c4"]]),La={class:"dashboard-container"},Pa={style:{position:"absolute",width:"0",height:"0"}},Ja={key:0,class:"loading-state"},qa={key:1,class:"dashboard-content"},Fa=$e({__name:"Dashboard",setup(ne){const _=Se(),f=Re(),p=Ye(),B=Ge(),d=Xe(),V=g(B.query.section||"components"),z=ae(()=>f.currentConfig),L=ae(()=>f.loading),H=ae(()=>{var j;return((j=p.user)==null?void 0:j.role)==="admin"}),T=["variables","tables"],Y={components:lt,tools:st,variables:dt,init:at,tables:Oa,prompts:Yt},Q=ae(()=>Y[V.value]);async function E(){try{await f.fetchConfig()}catch(j){_.error(j.message)}}async function k(j){if(z.value)try{await f.updateConfig(j),_.success("更新成功")}catch(P){_.error(P.message)}}function O(j){return H.value&&T.includes(j)?(_.warning("超级管理员不允许访问此功能"),d.replace({name:"UserDashboard",query:{section:"components"}}),V.value="components",!0):!1}return Me(()=>B.query.section,j=>{if(!j)return;const P=j;O(P)||(V.value=P)},{immediate:!0}),Ue(()=>{const j=B.query.section;O(j),E()}),(j,P)=>(h(),y("div",La,[(h(),y("svg",Pa,[...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)])])),L.value&&!z.value?(h(),y("div",Ja,[...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?(h(),y("div",qa,[(h(),we(Qe(Q.value),{config:z.value,onUpdate:k},null,40,["config"]))])):ee("",!0)]))}}),Ga=De(Fa,[["__scopeId","data-v-5f9aa991"]]);export{Ga as default};