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