mirror of
https://github.com/vastxie/99AI.git
synced 2025-09-19 01:56:38 +08:00
9 lines
9.5 KiB
JavaScript
9 lines
9.5 KiB
JavaScript
|
||
/**
|
||
* 由 Fantastic-admin 提供技术支持
|
||
* Powered by Fantastic-admin
|
||
* https://fantastic-admin.github.io
|
||
*/
|
||
|
||
import{_ as be}from"./index.vue_vue_type_script_setup_true_lang-c3O57XSg.js";import{_ as ve}from"./index.vue_vue_type_script_setup_true_lang-BhIKqf2a.js";import{I as C,d as ye,r as p,m as O,n as N,a as we,p as i,q as he,g as y,c as S,b as t,w as n,h as _,y as xe,i as u,z as $,e as d,t as P,F as Ve,s as ke,B as Ie,C as Ce,A as Pe,D as Ue,E as De,G as x,H as E,j as ze,_ as Ae,k as L}from"./index-6QRvoxq4.js";import{Q as Oe}from"./index-BE-LteFu.js";const U={pluginList:g=>C.get("plugin/pluginList",{params:g}),delPlugin:g=>C.post("plugin/delPlugin",g),createPlugin:g=>C.post("plugin/createPlugin",g),updatePlugin:g=>C.post("plugin/updatePlugin",g)},Se=d("div",{class:"flex items-center gap-4"},"插件设置",-1),$e=d("div",{class:"text-sm/6"},[d("div",null," 可自定义插件名称、描述和头像用于前端显示,同时需要设置对应的插件参数。 "),d("div",null,"插件系统包含,内置插件和普通插件两种。"),d("div",null," 插件已支持Suno音乐(参数:suno-music)、Midjourney绘图(参数:midjourney)、Stable Diffusion绘图(参数:stable-diffusion)、 "),d("div",null," Dalle绘画(参数:dall-e-3)、LumaVideo(参数:luma-video)、CogVideoX(参数:cog-video)、Flux绘画(参数:flux-draw),均需通过创意模型配置对应模型。 "),d("div",null," 联网插件(参数:net-search)、思维导图(参数:mind-map)。联网插件需在 插件应用基础配置 中单独配置联网地址。 "),d("div",null," 若内置插件参数不在支持列表内,将以插件参数作为模型,调用对应模型。 ")],-1),je={style:{maxWidth:"350px"}},Fe={style:{maxHeight:"50px",cursor:"pointer"}},Te=["src"],qe={class:"flex justify-end mr-5"},Be=ye({__name:"plugin",setup(g){p();const j=p(0),f=p(!1),V=p(!1),M=["dall-e-3","stable-diffusion","flux-draw","midjourney","suno-music","luma-video","cog-video","net-search","mind-map"],w=O({name:"",pluginImg:"",description:"",demoData:"",isEnabled:1,parameters:"",sortOrder:100,page:1,size:10}),F=p(`/api/upload/file?dir=${encodeURIComponent("system/plugin")}`),D=p(),b=p(0),R=p(!1),G=p(0),o=O({name:"",pluginImg:"",description:"",demoData:"",isEnabled:1,parameters:"",sortOrder:100}),H=O({name:[{required:!0,message:"请填写App名称",trigger:"blur"}],description:[{required:!0,message:"请填写App介绍信息、用于对外展示",trigger:"blur"}],pluginImg:[{required:!1,message:"请上传插件封面",trigger:"blur"}],demoData:[{required:!1,message:"请填写演示数据",trigger:"blur"}],isEnabled:[{required:!0,type:"number",message:"请选择插件状态",trigger:"change"}],parameters:[{required:!0,message:"请填写调用参数",trigger:"blur"}],sortOrder:[{required:!0,type:"number",message:"请填写排序值",trigger:"change"}]}),T=p([]);p([]);const Q=N(()=>b.value?"更新插件":"新增插件"),W=N(()=>b.value?"确认更新":"确认新增");async function h(){try{V.value=!0;const a=await U.pluginList(w),{rows:e,count:s}=a.data;V.value=!1,j.value=s,T.value=e.sort((r,m)=>m.order-r.order)}catch{V.value=!1}}function J(a){b.value=a.id,R.value=a.role==="user",G.value=a.status;const{name:e,pluginImg:s,description:r,demoData:m,isEnabled:z,parameters:c,sortOrder:A}=a;De(()=>{Object.assign(o,{name:e,pluginImg:s,description:r,demoData:m,isEnabled:z,parameters:c,sortOrder:A})}),f.value=!0}function K(a){b.value=0,a==null||a.resetFields()}async function X(a){await U.delPlugin({id:a.id}),x.success("删除分类成功"),h()}const q=(a,e)=>{console.log("response: ",a.data),o.pluginImg=a.data};async function Y(){if(o.pluginImg){const a=await ee(o.pluginImg);Z(a,q)}}function Z(a,e){const s=new FormData;s.append("file",a),E.post(F.value,s,{headers:{"Content-Type":"multipart/form-data"}}).then(r=>{e(r.data)}).catch(r=>{console.error("上传失败",r)})}async function ee(a){const e=await E.get(a,{responseType:"blob"});let s="downloaded_file";const r=e.headers["content-disposition"];if(r){const m=/filename="([^"]+)"/.exec(r);m!=null&&m[1]&&(s=m[1])}else s=te(a);return new File([e.data],s,{type:e.data.type})}function te(a){const s=new URL(a).pathname;return s.substring(s.lastIndexOf("/")+1)}const le=a=>{if(["image/png","image/jpeg","image/gif","image/webp"].includes(a.type)){if(a.size/1024>300)return x.error("当前限制文件最大不超过 300KB!"),!1}else return x.error("当前系统仅支持 PNG、JPEG、GIF 和 WebP 格式的图片!"),!1};function ae(a){a==null||a.validate(async e=>{if(e){if(b.value){const s={id:b.value,...o};await U.updatePlugin(s),x({type:"success",message:"更新插件成功!"})}else await U.createPlugin(o),x({type:"success",message:"创建新的插件成功!"});f.value=!1,h()}})}return we(()=>{h()}),(a,e)=>{const s=ze,r=Ae,m=ve,z=i("el-image"),c=i("el-table-column"),A=i("el-tag"),k=i("el-button"),ne=i("el-popconfirm"),oe=i("el-table"),se=i("el-pagination"),ie=i("el-row"),re=be,I=i("el-input"),v=i("el-form-item"),ue=i("el-switch"),de=i("el-option"),pe=i("el-select"),B=i("el-icon"),me=i("el-upload"),ce=i("el-form"),ge=i("el-dialog"),fe=he("loading");return y(),S("div",null,[t(m,null,{title:n(()=>[Se]),content:n(()=>[$e]),default:n(()=>[t(r,{outline:"",onClick:e[0]||(e[0]=l=>f.value=!0)},{default:n(()=>[t(s,{name:"ic:baseline-plus"}),_(" 添加插件 ")]),_:1})]),_:1}),t(re,{style:{width:"100%"}},{default:n(()=>[xe((y(),$(oe,{border:"",data:u(T),style:{width:"100%"},size:"large"},{default:n(()=>[t(c,{prop:"pluginImg",label:"封面",width:"100"},{default:n(l=>[t(z,{style:{height:"50px"},src:l.row.pluginImg,fit:"fill"},null,8,["src"])]),_:1}),t(c,{prop:"sortOrder",label:"排序",width:"120"}),_(" /> "),t(c,{prop:"name",label:"名称",width:"120"}),t(c,{prop:"parameters",label:"调用参数",width:"120"}),t(c,{prop:"description",label:"描述信息"},{default:n(l=>[d("template",null,[d("div",je,P(l.row.description),1)]),d("div",Fe,P(l.row.description),1)]),_:1}),t(c,{prop:"isEnabled",label:"状态",width:"100"},{default:n(l=>[t(A,{type:l.row.isEnabled===1?"success":"danger"},{default:n(()=>[_(P(u(Oe)[l.row.isEnabled]),1)]),_:2},1032,["type"])]),_:1}),t(c,{label:"操作",width:"200"},{default:n(l=>[t(k,{link:"",type:"primary",size:"small",onClick:_e=>J(l.row)},{default:n(()=>[_(" 编辑 ")]),_:2},1032,["onClick"]),t(ne,{title:"确认删除此插件么?",width:"200","icon-color":"red",onConfirm:_e=>X(l.row)},{reference:n(()=>[t(k,{link:"",type:"danger",size:"small"},{default:n(()=>[_(" 删除 ")]),_:1})]),_:2},1032,["onConfirm"])]),_:1})]),_:1},8,["data"])),[[fe,u(V)]]),t(ie,{class:"flex justify-end mt-5"},{default:n(()=>[t(se,{"current-page":w.page,"onUpdate:currentPage":e[1]||(e[1]=l=>w.page=l),"page-size":w.size,"onUpdate:pageSize":e[2]||(e[2]=l=>w.size=l),class:"mr-5","page-sizes":[10,20,30,50],layout:"total, sizes, prev, pager, next, jumper",total:u(j),onSizeChange:h,onCurrentChange:h},null,8,["current-page","page-size","total"])]),_:1})]),_:1}),t(ge,{modelValue:u(f),"onUpdate:modelValue":e[11]||(e[11]=l=>Ue(f)?f.value=l:null),"close-on-click-modal":!1,title:u(Q),width:"570",onClose:e[12]||(e[12]=l=>K(u(D)))},{footer:n(()=>[d("span",qe,[t(k,{onClick:e[9]||(e[9]=l=>f.value=!1)},{default:n(()=>[_("取消")]),_:1}),t(k,{type:"primary",onClick:e[10]||(e[10]=l=>ae(u(D)))},{default:n(()=>[_(P(u(W)),1)]),_:1})])]),default:n(()=>[t(ce,{ref_key:"formPackageRef",ref:D,"label-position":"right","label-width":"100px",model:o,rules:H},{default:n(()=>[t(v,{label:"插件名称",prop:"name"},{default:n(()=>[t(I,{modelValue:o.name,"onUpdate:modelValue":e[3]||(e[3]=l=>o.name=l),placeholder:"请填写插件名称"},null,8,["modelValue"])]),_:1}),t(v,{label:"插件状态",prop:"isEnabled"},{default:n(()=>[t(ue,{modelValue:o.isEnabled,"onUpdate:modelValue":e[4]||(e[4]=l=>o.isEnabled=l),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1}),t(v,{label:"插件描述",prop:"description"},{default:n(()=>[t(I,{modelValue:o.description,"onUpdate:modelValue":e[5]||(e[5]=l=>o.description=l),type:"textarea",placeholder:"请填写插件描述、用于对外展示...",rows:4},null,8,["modelValue"])]),_:1}),t(v,{label:"插件参数",prop:"parameters"},{default:n(()=>[t(pe,{modelValue:o.parameters,"onUpdate:modelValue":e[6]||(e[6]=l=>o.parameters=l),placeholder:"请选择或填写插件参数",filterable:"","allow-create":"","default-first-option":"",clearable:""},{default:n(()=>[(y(),S(Ve,null,ke(M,l=>t(de,{key:l,label:l,value:l},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1}),t(v,{label:"插件图标",prop:"pluginImg"},{default:n(()=>[t(I,{modelValue:o.pluginImg,"onUpdate:modelValue":e[7]||(e[7]=l=>o.pluginImg=l),placeholder:"请填写或上传插件图标",clearable:""},{append:n(()=>[t(me,{class:"avatar-uploader",action:u(F),"show-file-list":!1,"on-success":q,"before-upload":le,style:{display:"flex","align-items":"center","justify-content":"center"}},{default:n(()=>[o.pluginImg?(y(),S("img",{key:0,src:o.pluginImg,style:{"max-width":"1.5rem","max-height":"1.5rem",margin:"5px 0","object-fit":"contain"}},null,8,Te)):(y(),$(B,{key:1,style:{width:"1rem"}},{default:n(()=>[t(u(Ie))]),_:1}))]),_:1},8,["action"]),o.pluginImg?(y(),$(B,{key:0,onClick:Y,style:{"margin-left":"35px",width:"1rem"}},{default:n(()=>[t(u(Ce))]),_:1})):Pe("",!0)]),_:1},8,["modelValue"])]),_:1}),t(v,{label:"排序ID",prop:"sortOrder"},{default:n(()=>[t(I,{modelValue:o.sortOrder,"onUpdate:modelValue":e[8]||(e[8]=l=>o.sortOrder=l),modelModifiers:{number:!0},placeholder:"请填写排序ID[数字越大越靠前]"},null,8,["modelValue"])]),_:1})]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title"])])}}});typeof L=="function"&&L(Be);export{Be as default};
|