ConfigInfoDrawer.DVlO7z8y.js 18 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import{ao as e,d as l,L as a,q as i,ae as t,af as o,z as s,ad as n,A as u,t as r,a as d,J as p,P as c}from"./element-plus.DUy1TWHM.js";import{P as m,_ as v,v as _,g as f,H as g}from"./index.B1CvNv-2.js";import{u as y}from"./vue-i18n.DXLOBfKS.js";import{E as b}from"./size.mshfn9n4.js";import{M as h,bn as w,bq as j,bE as x,aZ as k,aL as V,u as I,I as D,bJ as P,F as S,s as z,bO as U,t as C,bb as B,aq as O,aU as F,aD as A,a_ as E,H as J,aX as T,v as q,bk as L,bL as N,q as $,aS as M}from"./@vue.DbmRtknU.js";import"./lodash-es.DaM9m3L-.js";import"./async-validator.j0i5Y79Y.js";import"./@popperjs.DxtSUbXb.js";import"./@ctrl.BEgk5vdO.js";import"./dayjs.DCWbrgJ0.js";import"./memoize-one.BAtLgO95.js";import"./normalize-wheel-es.TzhA1irr.js";import"./@floating-ui.8vigAAFV.js";import"./pinia.BlfmsheH.js";import"./@vueuse.Dnsd2JKX.js";import"./nprogress.BTjJXJ-u.js";import"./codemirror.CYSLATvI.js";import"./diff-match-patch.DkK4wJpa.js";import"./vue-web-terminal.D-rog7dz.js";import"./vue.MGxsMDTR.js";/* empty css */import"./axios.Da-QW0H8.js";import"./qs.BQjOrGHM.js";import"./side-channel.4q28KFJj.js";import"./es-errors.DTEWvbA_.js";import"./object-inspect.DvQZIv3_.js";import"./side-channel-list.Do0-XmF5.js";import"./side-channel-map.DNHQ53lO.js";import"./get-intrinsic.Bbe5x-9b.js";import"./es-object-atoms.CyiuHMUS.js";import"./math-intrinsics.pM-JTNwN.js";import"./gopd.BudZp56J.js";import"./es-define-property.F0aoeP8o.js";import"./has-symbols.BcO-SUVM.js";import"./get-proto.Cb_fpw-j.js";import"./dunder-proto.WEH3rgQR.js";import"./call-bind-apply-helpers.DJjIjCF_.js";import"./function-bind.DrnB-baK.js";import"./hasown.BXcyoiLU.js";import"./call-bound.22gFUC2Q.js";import"./side-channel-weakmap.DpSeWE6i.js";import"./vue-router.yxIMtaxH.js";import"./pinia-plugin-persistedstate.COWkwNh5.js";import"./@intlify.DPMNdUn_.js";import"./sql.Cx6wXxe_.js";const W={class:"single-image-upload"},H={key:0,class:"el-upload__tip"},K=v(h({__name:"SingleImageUpload",props:O({
  2. /**
  3. * 请求携带的额外参数
  4. */
  5. data:{type:Object,default:()=>({})},
  6. /**
  7. * 上传文件的参数名
  8. */
  9. name:{type:String,default:"file"},
  10. /**
  11. * 最大文件大小(单位:M)
  12. */
  13. maxFileSize:{type:Number,default:10},
  14. /**
  15. * 上传图片格式,默认支持所有图片(image/*),指定格式示例:'.png,.jpg,.jpeg,.gif,.bmp'
  16. */
  17. accept:{type:String,default:"image/*"},
  18. /**
  19. * 自定义样式,用于设置组件的宽度和高度等其他样式
  20. */
  21. style:{type:Object,default:()=>({width:"150px",height:"150px"})},
  22. /**
  23. * 是否禁用
  24. */
  25. disabled:{type:Boolean,default:!1},
  26. /**
  27. * 是否显示提示信息
  28. */
  29. showTip:{type:Boolean,default:!1},
  30. /**
  31. * 提示文本
  32. */
  33. tipText:{type:String,default:""},
  34. /**
  35. * 是否启用图片预览功能
  36. */
  37. enablePreview:{type:Boolean,default:!0}},{modelValue:{default:""},modelModifiers:{}}),emits:O(["success","error","input","update:modelValue"],["update:modelValue"]),setup(t,{emit:o}){w(e=>({v05f354eb:s.style.width??"150px",v4553109c:s.style.height??"150px"}));const s=t,n=j(t,"modelValue"),u=F([]);x(()=>n.value,e=>{u.value=e?[{name:e.split("/").pop()||"image",url:e}]:[]},{immediate:!0}),x(()=>u.value,e=>{e&&e.length>0&&e[0].url?n.value=e[0].url:n.value=""},{deep:!0});const r=o;function d(e){return s.accept.split(",").map(e=>e.trim()).some(l=>"image/*"===l?e.type.startsWith("image/"):l.startsWith(".")?e.name.toLowerCase().endsWith(l):e.type===l)?!(e.size>1024*s.maxFileSize*1024)||(i.warning(`上传图片不能大于 ${s.maxFileSize}MB`),!1):(i.warning(`上传文件的格式不正确,仅支持:${s.accept}`),!1)}async function p(e){try{const l=e.file,a=new FormData;a.append(s.name,l);for(const[e,i]of Object.entries(s.data))a.append(e,String(i));const t=await m.uploadFile(a);if(0===t.data.code&&t.data){const e=t.data.data;return _(e),e}{const e=t.data.msg||"上传失败";throw i.error(e),new Error(e)}}catch(l){throw f(l instanceof Error?l:new Error(String(l))),l}}function c(){u.value=[]}function v(e){e.stopPropagation(),s.enablePreview&&u.value&&u.value.length>0&&u.value[0].url}const _=e=>{const l=[{name:e.file_name,url:e.file_url}];u.value=l,r("success",e),r("input",e.file_url),r("update:modelValue",e.file_url)},f=e=>{i.error("图片上传失败,请重试"),r("error",e)};return(i,t)=>{const o=e,n=k("CircleCloseFilled"),r=l,m=k("Plus"),g=a;return V(),I("div",W,[D(g,{"file-list":u.value,"onUpdate:fileList":t[0]||(t[0]=e=>u.value=e),class:"single-upload","list-type":"picture-card","show-file-list":!1,accept:s.accept,"before-upload":d,"http-request":p,"on-success":_,"on-error":f,"on-remove":c,disabled:s.disabled},{default:P(()=>[u.value&&u.value.length>0&&u.value[0].url?(V(),I(S,{key:0},[(V(),z(o,{key:u.value[0].url,class:"single-upload__image",src:u.value[0].url,fit:"cover","preview-src-list":s.enablePreview?[u.value[0].url]:[],"preview-teleported":!0,onClick:U(v,["stop"])},null,8,["src","preview-src-list"])),s.disabled?C("",!0):(V(),z(r,{key:0,class:"single-upload__delete-btn",onClick:U(c,["stop"])},{default:P(()=>[D(n)]),_:1}))],64)):(V(),z(r,{key:1,class:"single-upload__add-btn"},{default:P(()=>[D(m)]),_:1}))]),_:1},8,["file-list","accept","disabled"]),s.showTip?(V(),I("div",H,B(s.tipText||`支持 ${s.accept} 格式,文件大小不超过 ${s.maxFileSize}MB`),1)):C("",!0)])}}}),[["__scopeId","data-v-2ff51ea0"]]),G={class:"flex items-center gap-2 w-full"},X={class:"flex items-center gap-2 w-full"},Z={class:"flex items-center gap-2 w-full"},Q={class:"flex items-center gap-2 w-full"},R={class:"space-y-2"},Y={class:"space-y-2"},ee={key:1,class:"space-y-2"},le=v(h({__name:"ConfigInfoDrawer",props:{modelValue:{type:Boolean}},emits:["update:modelValue"],setup(e,{emit:l}){const a=()=>Math.random().toString(36).substr(2,9),v=e=>/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(e),h=_(),w=$(()=>(h.device,g.DESKTOP,"60%")),j=y().t,x=f(),k=F("website"),U=e,C=l,B=$({get:()=>U.modelValue,set:e=>C("update:modelValue",e)}),O=M({id:void 0,config_name:"",config_key:"",config_value:"",config_type:void 0,description:""}),W=M({}),H=e=>{W[e]=!0},le=$(()=>Object.keys(W).length>0),ae=async()=>{var e,l,a;const i=Object.keys(W);if(0!==i.length)try{if("white_api_list_path"in W&&(null==(e=_e.value.white_api_list_path)?void 0:e.id)){const e=ue.value.map(e=>e.value.trim()).filter(Boolean),l=JSON.stringify(e);await m.updateParams(_e.value.white_api_list_path.id,{..._e.value.white_api_list_path,config_value:l})}if("ip_black_list"in W&&(null==(l=fe.value.ip_black_list)?void 0:l.id)){const e=re.value.map(e=>e.value.trim()).filter(Boolean),l=JSON.stringify(e);await m.updateParams(fe.value.ip_black_list.id,{...fe.value.ip_black_list,config_value:l})}if("ip_white_list"in W&&(null==(a=ge.value.ip_white_list)?void 0:a.id)){const e=de.value.map(e=>e.value.trim()).filter(Boolean),l=JSON.stringify(e);await m.updateParams(ge.value.ip_white_list.id,{...ge.value.ip_white_list,config_value:l})}const t=i.filter(e=>!["white_api_list_path","ip_black_list","ip_white_list"].includes(e)).map(e=>{const l=oe.value[e]||ye.value[e]||se.value[e]||ne.value[e]||ge.value[e];return l&&l.id?m.updateParams(l.id,{...l}):Promise.resolve()});await Promise.all(t),i.forEach(e=>{delete W[e]}),x.isConfigLoaded=!1,await x.getConfig(),pe()}catch(t){}};async function ie(){B.value=!1}function te(){(()=>{var e,l,a,i,t;pe();const o=Object.keys(W);for(const s of o)oe.value[s]?oe.value[s].config_value=(null==(e=x.configData[s])?void 0:e.config_value)||"":ye.value[s]?ye.value[s].config_value=(null==(l=x.configData[s])?void 0:l.config_value)||"":se.value[s]?se.value[s].config_value=(null==(a=x.configData[s])?void 0:a.config_value)||"":ne.value[s]?ne.value[s].config_value=(null==(i=x.configData[s])?void 0:i.config_value)||"":ge.value[s]&&"ip_white_list"!==s&&(ge.value[s].config_value=(null==(t=x.configData[s])?void 0:t.config_value)||""),delete W[s];c.close()})()}const oe=$(()=>({sys_web_title:x.configData.sys_web_title,sys_web_version:x.configData.sys_web_version,sys_web_description:x.configData.sys_web_description})),se=$(()=>({sys_help_doc:x.configData.sys_help_doc,sys_git_code:x.configData.sys_git_code,sys_keep_record:x.configData.sys_keep_record,sys_web_copyright:x.configData.sys_web_copyright,sys_web_privacy:x.configData.sys_web_privacy})),ne=$(()=>({sys_web_clause:x.configData.sys_web_clause})),ue=F([]),re=F([]),de=F([]),pe=()=>{var e,l,i;const t=(null==(e=x.configData.white_api_list_path)?void 0:e.config_value)||"";try{const e=JSON.parse(t);Array.isArray(e)?ue.value=e.filter(e=>"string"==typeof e&&e.trim()).map(e=>({id:a(),value:e.trim()})):ue.value=t?t.split("\n").filter(e=>e.trim()).map(e=>({id:a(),value:e.trim()})):[{id:a(),value:""}]}catch{ue.value=t?t.split("\n").filter(e=>e.trim()).map(e=>({id:a(),value:e.trim()})):[{id:a(),value:""}]}const o=(null==(l=x.configData.ip_black_list)?void 0:l.config_value)||"";try{const e=JSON.parse(o);Array.isArray(e)?re.value=e.filter(e=>"string"==typeof e&&e.trim()).map(e=>({id:a(),value:e.trim()})):re.value=o?o.split("\n").filter(e=>e.trim()).map(e=>({id:a(),value:e.trim()})):[{id:a(),value:""}]}catch{re.value=o?o.split("\n").filter(e=>e.trim()).map(e=>({id:a(),value:e.trim()})):[{id:a(),value:""}]}const s=(null==(i=x.configData.ip_white_list)?void 0:i.config_value)||"";try{const e=JSON.parse(s);Array.isArray(e)?de.value=e.filter(e=>"string"==typeof e&&e.trim()).map(e=>({id:a(),value:e.trim()})):de.value=s?s.split("\n").filter(e=>e.trim()).map(e=>({id:a(),value:e.trim()})):[{id:a(),value:""}]}catch{de.value=s?s.split("\n").filter(e=>e.trim()).map(e=>({id:a(),value:e.trim()})):[{id:a(),value:""}]}},ce=()=>{ue.value.push({id:a(),value:""}),H("white_api_list_path")},me=()=>{re.value.push({id:a(),value:""}),H("ip_black_list")},ve=()=>{de.value.push({id:a(),value:""}),H("ip_white_list")},_e=$(()=>({white_api_list_path:x.configData.white_api_list_path})),fe=$(()=>({ip_black_list:x.configData.ip_black_list})),ge=$(()=>({demo_enable:x.configData.demo_enable,ip_white_list:x.configData.ip_white_list})),ye=$(()=>({sys_web_logo:{...x.configData.sys_web_logo,maxFileSize:5},sys_web_favicon:{...x.configData.sys_web_favicon,maxFileSize:5},sys_login_background:{...x.configData.sys_login_background,maxFileSize:10}})),be=e=>{i.error(`上传失败:${e.message||"请稍后重试"}`)};return A(()=>{pe(),x.getConfig()}),(e,l)=>{const a=n,c=r,m=u,_=s,f=o,g=d,y=p,h=t,U=E("hasPerm");return V(),z(b,{modelValue:B.value,"onUpdate:modelValue":l[1]||(l[1]=e=>B.value=e),title:"配置中心",size:w.value,"destroy-on-close":"",onClose:te},{footer:P(()=>[D(g,{onClick:ie},{default:P(()=>[...l[16]||(l[16]=[J("取消",-1)])]),_:1}),N((V(),z(g,{type:"primary",disabled:!le.value,onClick:ae},{default:P(()=>[...l[17]||(l[17]=[J(" 保存 ",-1)])]),_:1},8,["disabled"])),[[U,["module_system:config:update"]]])]),default:P(()=>[D(h,{modelValue:k.value,"onUpdate:modelValue":l[0]||(l[0]=e=>k.value=e),type:"border-card"},{default:P(()=>[D(f,{label:"网站配置",name:"website"},{default:P(()=>[D(_,{model:O,"label-suffix":":","label-width":"auto","label-position":"right"},{default:P(()=>[D(a,null,{default:P(()=>[...l[2]||(l[2]=[J("网站配置",-1)])]),_:1}),(V(!0),I(S,null,T(oe.value,(e,l)=>(V(),I("div",{key:l},[D(m,{label:e.config_name},{default:P(()=>[q("span",G,[D(c,{modelValue:e.config_value,"onUpdate:modelValue":l=>e.config_value=l,placeholder:L(j)("common.inputText"),clearable:"",style:{width:"100%"},onInput:e=>H(l)},null,8,["modelValue","onUpdate:modelValue","placeholder","onInput"])])]),_:2},1032,["label"])]))),128)),D(a,null,{default:P(()=>[...l[3]||(l[3]=[J("网站图标",-1)])]),_:1}),(V(!0),I(S,null,T(ye.value,(e,l)=>(V(),I("div",{key:l},[D(m,{label:e.config_name},{default:P(()=>[q("div",X,[D(K,{modelValue:e.config_value,"onUpdate:modelValue":l=>e.config_value=l,data:{type:l},name:"file","max-file-size":e.maxFileSize,"show-tip":!0,"enable-preview":!0,onSuccess:e=>((e,l)=>{const a=e.file_url;l in x.configData&&(x.configData[l].config_value=a),l in oe.value?oe.value[l].config_value=a:l in ye.value&&(ye.value[l].config_value=a),H(l)})(e,l),onError:be},null,8,["modelValue","onUpdate:modelValue","data","max-file-size","onSuccess"])])]),_:2},1032,["label"])]))),128))]),_:1},8,["model"])]),_:1}),D(f,{label:"安全隐私",name:"securityPrivacy"},{default:P(()=>[D(_,{model:O,"label-suffix":":","label-width":"auto","label-position":"right"},{default:P(()=>[D(a,null,{default:P(()=>[...l[4]||(l[4]=[J("安全隐私",-1)])]),_:1}),(V(!0),I(S,null,T(se.value,(e,l)=>(V(),I("div",{key:l},[D(m,{label:e.config_name},{default:P(()=>[q("span",Z,[D(c,{modelValue:e.config_value,"onUpdate:modelValue":l=>e.config_value=l,placeholder:L(j)("common.inputText"),clearable:"",style:{width:"100%"},onInput:e=>H(l)},null,8,["modelValue","onUpdate:modelValue","placeholder","onInput"])])]),_:2},1032,["label"])]))),128))]),_:1},8,["model"])]),_:1}),D(f,{label:"用户协议",name:"userAgreement"},{default:P(()=>[D(_,{model:O,"label-suffix":":","label-width":"auto","label-position":"right"},{default:P(()=>[D(a,null,{default:P(()=>[...l[5]||(l[5]=[J("用户协议",-1)])]),_:1}),(V(!0),I(S,null,T(ne.value,(e,l)=>(V(),I("div",{key:l},[D(m,{label:e.config_name},{default:P(()=>[q("span",Q,[D(c,{modelValue:e.config_value,"onUpdate:modelValue":l=>e.config_value=l,placeholder:L(j)("common.inputText"),clearable:"",style:{width:"100%"},onInput:e=>H(l)},null,8,["modelValue","onUpdate:modelValue","placeholder","onInput"])])]),_:2},1032,["label"])]))),128))]),_:1},8,["model"])]),_:1}),D(f,{label:"接口白名单",name:"apiWhitelist"},{default:P(()=>[D(_,{model:O,"label-suffix":":","label-width":"auto","label-position":"right"},{default:P(()=>[D(a,null,{default:P(()=>[...l[6]||(l[6]=[J("接口白名单",-1)])]),_:1}),(V(!0),I(S,null,T(_e.value,(e,a)=>(V(),I("div",{key:a},[D(m,{label:e.config_name},{default:P(()=>[q("div",R,[(V(!0),I(S,null,T(ue.value,e=>(V(),I("div",{key:e.id,class:"flex items-center gap-2"},[D(c,{modelValue:e.value,"onUpdate:modelValue":l=>e.value=l,placeholder:"/api/v1/users/get",clearable:"",onInput:e=>H(a),onBlur:l=>{var a;a=e.value,!/^\/[\w\-/]+$/.test(a)&&e.value.trim()&&L(i).warning("请输入有效的接口路径格式(以/开头)")}},null,8,["modelValue","onUpdate:modelValue","onInput","onBlur"]),D(g,{type:"danger",icon:"minus",circle:"",size:"small",onClick:l=>{return a=e.id,void(ue.value.length<=1?i.warning("至少需要保留一个接口白名单配置"):(ue.value=ue.value.filter(e=>e.id!==a),H("white_api_list_path")));var a}},null,8,["onClick"])]))),128)),D(g,{type:"primary",icon:"plus",size:"small",style:{"margin-top":"10px"},onClick:ce},{default:P(()=>[...l[7]||(l[7]=[J(" 添加接口路径 ",-1)])]),_:1}),l[8]||(l[8]=q("div",{class:"text-xs text-gray-500 mt-2"}," 配置说明:添加到白名单的接口路径无需登录即可访问,支持完整路径配置。 ",-1))])]),_:2},1032,["label"])]))),128))]),_:1},8,["model"])]),_:1}),D(f,{label:"IP黑名单",name:"ipBlacklist"},{default:P(()=>[D(_,{model:O,"label-suffix":":","label-width":"auto","label-position":"right"},{default:P(()=>[D(a,null,{default:P(()=>[...l[9]||(l[9]=[J("IP黑名单",-1)])]),_:1}),(V(!0),I(S,null,T(fe.value,(e,a)=>(V(),I("div",{key:a},[D(m,{label:e.config_name},{default:P(()=>[q("div",Y,[(V(!0),I(S,null,T(re.value,e=>(V(),I("div",{key:e.id,class:"flex items-center gap-2"},[D(c,{modelValue:e.value,"onUpdate:modelValue":l=>e.value=l,placeholder:"192.168.1.1",clearable:"",style:{flex:"1"},onInput:e=>H(a),onBlur:l=>{!v(e.value)&&e.value.trim()&&L(i).warning("请输入有效的IP地址格式")}},null,8,["modelValue","onUpdate:modelValue","onInput","onBlur"]),D(g,{type:"danger",icon:"minus",circle:"",size:"small",onClick:l=>{return a=e.id,void(re.value.length<=1?i.warning("至少需要保留一个IP黑名单配置"):(re.value=re.value.filter(e=>e.id!==a),H("ip_black_list")));var a}},null,8,["onClick"])]))),128)),D(g,{type:"primary",icon:"plus",size:"small",style:{"margin-top":"10px"},onClick:me},{default:P(()=>[...l[10]||(l[10]=[J(" 添加IP地址 ",-1)])]),_:1}),l[11]||(l[11]=q("div",{class:"text-xs text-gray-500 mt-2"}," 配置说明:添加到黑名单的IP地址将无法访问系统,支持单个IP配置。 ",-1))])]),_:2},1032,["label"])]))),128))]),_:1},8,["model"])]),_:1}),D(f,{label:"演示环境配置",name:"demo"},{default:P(()=>[D(_,{model:O,"label-suffix":":","label-width":"auto","label-position":"right"},{default:P(()=>[D(a,null,{default:P(()=>[...l[12]||(l[12]=[J("演示环境配置",-1)])]),_:1}),(V(!0),I(S,null,T(ge.value,(e,a)=>(V(),I("div",{key:a},[D(m,{label:e.config_name},{default:P(()=>["demo_enable"===a?(V(),I(S,{key:0},[D(y,{"inline-prompt":"","active-text":"启用","inactive-text":"禁用","model-value":"true"===e.config_value,"onUpdate:modelValue":l=>{e.config_value=l?"true":"false",H(a)}},null,8,["model-value","onUpdate:modelValue"]),l[13]||(l[13]=q("div",{class:"text-xs text-gray-500 mt-1"}," 配置说明:启用后系统将进入演示模式,部分功能可能受限。 ",-1))],64)):"ip_white_list"===a?(V(),I("div",ee,[(V(!0),I(S,null,T(de.value,e=>(V(),I("div",{key:e.id,class:"flex items-center gap-2"},[D(c,{modelValue:e.value,"onUpdate:modelValue":l=>e.value=l,placeholder:"192.168.1.1",clearable:"",style:{flex:"1"},onInput:e=>H(a),onBlur:l=>{!v(e.value)&&e.value.trim()&&L(i).warning("请输入有效的IP地址格式")}},null,8,["modelValue","onUpdate:modelValue","onInput","onBlur"]),D(g,{type:"danger",icon:"minus",circle:"",size:"small",onClick:l=>{return a=e.id,void(de.value.length<=1?i.warning("至少需要保留一个IP白名单配置"):(de.value=de.value.filter(e=>e.id!==a),H("ip_white_list")));var a}},null,8,["onClick"])]))),128)),D(g,{type:"primary",icon:"plus",size:"small",style:{"margin-top":"10px"},onClick:ve},{default:P(()=>[...l[14]||(l[14]=[J(" 添加IP地址 ",-1)])]),_:1}),l[15]||(l[15]=q("div",{class:"text-xs text-gray-500 mt-2"}," 配置说明:演示模式下,只有白名单中的IP地址可以访问系统,支持单个IP配置。 ",-1))])):(V(),z(c,{key:2,modelValue:e.config_value,"onUpdate:modelValue":l=>e.config_value=l,placeholder:L(j)("common.inputText"),clearable:"",style:{width:"100%"},onInput:e=>H(a)},null,8,["modelValue","onUpdate:modelValue","placeholder","onInput"]))]),_:2},1032,["label"])]))),128))]),_:1},8,["model"])]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["modelValue","size"])}}}),[["__scopeId","data-v-1ced9db4"]]);export{le as default};