You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
8.6 KiB
1 lines
8.6 KiB
import{g as I,j as A,c as a,k as n,v as T,a as e,F as C,r as M,p as P,m as b,l as B,t as d,A as j,n as H,q,s as u,x as z,C as R,o as i}from"./96IDI_OR.js";import{u as G}from"./Do83zqYq.js";import{u as O}from"./CVUxyiJx.js";const Y={class:"flex items-center justify-between mb-5"},J={class:"flex items-center gap-3 mb-4"},K=["value"],Q={class:"bg-white rounded-xl shadow-sm border border-slate-100"},W={class:"overflow-x-auto"},X={class:"table table-zebra"},Z={key:0},ee={key:1},te={class:"font-mono text-sm font-medium"},le={class:"text-sm"},se={class:"badge badge-ghost badge-sm"},oe={class:"badge badge-sm badge-outline"},ne=["title"],ae={class:"text-sm text-slate-400"},ie={key:0},de={key:1,class:"text-slate-300"},re={key:0,class:"badge badge-success badge-sm text-white"},ue={key:1,class:"badge badge-ghost badge-sm"},be={class:"text-right"},me={class:"inline-flex gap-1"},pe=["onClick"],ce=["onClick"],ve={class:"flex items-center gap-3 mb-5"},fe={class:"text-lg font-semibold text-slate-800"},ge={class:"bg-white rounded-xl shadow-sm border border-slate-100 p-6 max-w-2xl"},xe={class:"grid grid-cols-2 gap-4"},ye={class:"form-control mb-4"},we=["readonly"],_e={class:"text-xs text-slate-400 mt-1"},he={class:"form-control mb-4"},ke={class:"form-control mb-4"},Ce=["value"],Me={class:"form-control mb-4"},Pe={class:"form-control mb-4"},Ve={class:"form-control mb-4"},Se={class:"form-control mb-4"},Ue={class:"form-control mb-6"},Te={class:"label cursor-pointer justify-start gap-3"},Le={class:"flex gap-3"},De=["disabled"],Ie=I({__name:"mcpconfig",setup(Ee){const f=[{value:1,label:"中国"},{value:2,label:"美国"},{value:3,label:"东亚"},{value:4,label:"东南亚"},{value:5,label:"南亚"},{value:6,label:"中东"},{value:7,label:"欧洲"},{value:8,label:"俄罗斯"},{value:9,label:"非洲"},{value:10,label:"南美"},{value:11,label:"北美"},{value:12,label:"大洋洲"},{value:13,label:"巴西"},{value:14,label:"印度"}];function L(o){const t=Number(o)||0,l=f.find(k=>k.value===t);return l?l.label:t===0?"通用":"区域"+t}const D={0:"HTTP",1:"SSE"};function E(o){const t=Number(o)||0;return D[t]||String(o??"HTTP")}const{webApi:g}=G(),{success:V,error:x,warn:N}=O(),p=u("list"),c=u([]),y=u(!1),w=u(!1),r=u(!1),m=u(0),_=u(""),s=z({id:"",name:"",region:1,type:0,url:"",tools:"",description:"",enable:!0}),S=R(()=>{const o=_.value.trim().toLowerCase();return o?c.value.filter(t=>((t.id||"")+(t.name||"")).toLowerCase().includes(o)):c.value});async function v(){y.value=!0;try{const o=await g("getmcpservers",{region:m.value});c.value=o?.servers??[]}catch(o){x(o?.message??"获取 MCP 服务失败"),c.value=[]}finally{y.value=!1}}function h(){p.value="list",v()}function U(o){o?(r.value=!0,s.id=o.id||"",s.name=o.name||"",s.region=o.region||1,s.type=o.type!=null?o.type:0,s.url=o.url||"",s.tools=o.tools||"",s.description=o.description||"",s.enable=!!o.enable):(r.value=!1,s.id="",s.name="",s.region=m.value>0?m.value:1,s.type=0,s.url="",s.tools="",s.description="",s.enable=!0),p.value="form"}async function $(){const o={id:s.id.trim(),name:s.name.trim(),region:Number(s.region)||0,type:Number(s.type)||0,url:s.url.trim(),tools:s.tools.trim(),description:s.description.trim(),enable:s.enable};if(!o.id){N("服务ID 必填");return}w.value=!0;try{await g(r.value?"updatemcpserver":"addmcpserver",o),V("保存成功"),h()}catch(t){x(t?.message??"保存失败")}finally{w.value=!1}}function F(o){window.confirm(`确定删除 MCP 服务 "${o}" 吗?`)&&g("delmcpserver",{ids:[o]}).then(()=>{V("删除成功"),v()}).catch(t=>x(t?.message??"删除失败"))}return A(v),(o,t)=>(i(),a("div",null,[n(e("div",null,[e("div",Y,[t[13]||(t[13]=e("div",null,[e("h2",{class:"text-lg font-semibold text-slate-800"},"MCP 配置"),e("p",{class:"text-xs text-slate-400 mt-1"},"MCP(模型上下文协议)服务器,按区域分组,所有应用共享。修改后各服务约 10 分钟内自动同步。")],-1)),e("button",{class:"btn btn-primary btn-sm text-white",onClick:t[0]||(t[0]=l=>U())},"+ 新增 MCP 服务")]),e("div",J,[t[15]||(t[15]=e("span",{class:"text-sm text-slate-500"},"区域筛选",-1)),n(e("select",{"onUpdate:modelValue":t[1]||(t[1]=l=>m.value=l),class:"select select-bordered select-sm",onChange:v},[t[14]||(t[14]=e("option",{value:0},"全部区域",-1)),(i(),a(C,null,M(f,l=>e("option",{key:l.value,value:l.value},d(l.label),9,K)),64))],544),[[P,m.value,void 0,{number:!0}]]),n(e("input",{"onUpdate:modelValue":t[2]||(t[2]=l=>_.value=l),class:"input input-bordered input-sm w-48",placeholder:"按ID/名称搜索"},null,512),[[b,_.value]])]),e("div",Q,[e("div",W,[e("table",X,[t[18]||(t[18]=e("thead",null,[e("tr",null,[e("th",null,"服务ID"),e("th",null,"名称"),e("th",null,"区域"),e("th",null,"类型"),e("th",null,"地址"),e("th",null,"工具"),e("th",null,"状态"),e("th",{class:"text-right"},"操作")])],-1)),e("tbody",null,[y.value?(i(),a("tr",Z,[...t[16]||(t[16]=[e("td",{colspan:"8",class:"text-center py-8"},[e("span",{class:"loading loading-spinner loading-sm"})],-1)])])):S.value.length?B("",!0):(i(),a("tr",ee,[...t[17]||(t[17]=[e("td",{colspan:"8",class:"text-center text-slate-400 py-8"},"暂无 MCP 服务",-1)])])),(i(!0),a(C,null,M(S.value,l=>(i(),a("tr",{key:l.id},[e("td",te,d(l.id||""),1),e("td",le,d(l.name||""),1),e("td",null,[e("span",se,d(L(l.region)),1)]),e("td",null,[e("span",oe,d(E(l.type)),1)]),e("td",{class:"text-sm text-slate-500 max-w-xs truncate",title:l.url||""},d(l.url||""),9,ne),e("td",ae,[l.tools&&l.tools.trim()?(i(),a("span",ie,d(l.tools),1)):(i(),a("span",de,"全部"))]),e("td",null,[l.enable?(i(),a("span",re,"启用")):(i(),a("span",ue,"停用"))]),e("td",be,[e("div",me,[e("button",{class:"btn btn-ghost btn-xs",onClick:k=>U(l)},"编辑",8,pe),e("button",{class:"btn btn-ghost btn-xs text-red-500",onClick:k=>F(l.id)},"删除",8,ce)])])]))),128))])])])])],512),[[T,p.value==="list"]]),n(e("div",null,[e("div",ve,[e("button",{class:"btn btn-ghost btn-sm",onClick:t[3]||(t[3]=l=>h())},"← 返回列表"),e("h2",fe,d(r.value?"编辑 MCP 服务":"新增 MCP 服务"),1)]),e("div",ge,[e("form",{onSubmit:j($,["prevent"])},[e("div",xe,[e("div",ye,[t[19]||(t[19]=e("label",{class:"label"},[e("span",{class:"label-text font-medium"},"服务ID *")],-1)),n(e("input",{"onUpdate:modelValue":t[4]||(t[4]=l=>s.id=l),type:"text",class:H(["input input-bordered w-full",{"bg-slate-100":r.value}]),readonly:r.value,required:"",placeholder:"如 gaode_map"},null,10,we),[[b,s.id]]),e("span",_e,d(r.value?"编辑模式下不可修改":"唯一标识,创建后不可修改"),1)]),e("div",he,[t[20]||(t[20]=e("label",{class:"label"},[e("span",{class:"label-text font-medium"},"名称")],-1)),n(e("input",{"onUpdate:modelValue":t[5]||(t[5]=l=>s.name=l),type:"text",class:"input input-bordered w-full"},null,512),[[b,s.name]])]),e("div",ke,[t[21]||(t[21]=e("label",{class:"label"},[e("span",{class:"label-text font-medium"},"区域 *")],-1)),n(e("select",{"onUpdate:modelValue":t[6]||(t[6]=l=>s.region=l),class:"select select-bordered w-full"},[(i(),a(C,null,M(f,l=>e("option",{key:l.value,value:l.value},d(l.label),9,Ce)),64))],512),[[P,s.region,void 0,{number:!0}]])]),e("div",Me,[t[23]||(t[23]=e("label",{class:"label"},[e("span",{class:"label-text font-medium"},"类型")],-1)),n(e("select",{"onUpdate:modelValue":t[7]||(t[7]=l=>s.type=l),class:"select select-bordered w-full"},[...t[22]||(t[22]=[e("option",{value:0},"HTTP",-1),e("option",{value:1},"SSE",-1)])],512),[[P,s.type,void 0,{number:!0}]])])]),e("div",Pe,[t[24]||(t[24]=e("label",{class:"label"},[e("span",{class:"label-text font-medium"},"服务地址 (url)")],-1)),n(e("input",{"onUpdate:modelValue":t[8]||(t[8]=l=>s.url=l),type:"text",class:"input input-bordered w-full font-mono text-sm",placeholder:"https://..."},null,512),[[b,s.url]])]),e("div",Ve,[t[25]||(t[25]=e("label",{class:"label"},[e("span",{class:"label-text font-medium"},"启用工具 (tools)")],-1)),n(e("input",{"onUpdate:modelValue":t[9]||(t[9]=l=>s.tools=l),type:"text",class:"input input-bordered w-full",placeholder:"逗号分隔,留空表示全部启用"},null,512),[[b,s.tools]])]),e("div",Se,[t[26]||(t[26]=e("label",{class:"label"},[e("span",{class:"label-text font-medium"},"描述")],-1)),n(e("input",{"onUpdate:modelValue":t[10]||(t[10]=l=>s.description=l),type:"text",class:"input input-bordered w-full"},null,512),[[b,s.description]])]),e("div",Ue,[e("label",Te,[n(e("input",{"onUpdate:modelValue":t[11]||(t[11]=l=>s.enable=l),type:"checkbox",class:"toggle toggle-primary"},null,512),[[q,s.enable]]),t[27]||(t[27]=e("span",{class:"label-text font-medium"},"启用该服务",-1))])]),e("div",Le,[e("button",{type:"button",class:"btn btn-ghost",onClick:t[12]||(t[12]=l=>h())},"取消"),e("button",{type:"submit",class:"btn btn-primary text-white",disabled:w.value},"保存",8,De)])],32)])],512),[[T,p.value==="form"]])]))}});export{Ie as default};
|
|
|