2 lines
8.6 KiB
JavaScript
2 lines
8.6 KiB
JavaScript
import{d as ee,r as v,v as N,a as le,o as te,g as s,B as S,c as ne,k as d,e as t,w as n,C as T,z as u,G as y,ax as ae,t as i,x as q,b as A,l as oe,D as re,ay as se,E as x,az as de,an as ue,W as ie,aA as pe,_ as me}from"./index-Csxk1XuF.js";const fe={class:"page-container"},ce={class:"card-header"},ye=ee({__name:"index",setup(_e){const E=v(!1),C=v([]),w={1:{label:"目录",type:"info"},2:{label:"菜单",type:""},3:{label:"按钮",type:"warning"}},c=v(!1),_=v(!1),F=N(()=>_.value?"编辑菜单":"新增菜单"),U=v(),I=v(!1),e=le({id:0,parentId:0,name:"",path:"",component:"",icon:"",menuType:2,permission:"",sortOrder:0,status:1,isExternal:!1,isCache:!0}),R=N(()=>{if(!_.value)return[{id:0,name:"顶级菜单",children:C.value}];const o=l=>l.filter(r=>r.id!==e.id).map(r=>({...r,children:o(r.children||[])}));return[{id:0,name:"顶级菜单",children:o(C.value)}]}),z={name:[{required:!0,message:"请输入菜单名称",trigger:"blur"}],menuType:[{required:!0,message:"请选择菜单类型",trigger:"change"}],path:[{validator:(o,l,r)=>{e.menuType===2&&!l?r(new Error("菜单类型必须填写路由路径")):l&&!e.isExternal&&!l.startsWith("/")?r(new Error("内部路由路径必须以 / 开头")):r()},trigger:"blur"}],component:[{validator:(o,l,r)=>{e.menuType===2&&!l?r(new Error("菜单类型必须填写组件路径")):r()},trigger:"blur"}],permission:[{validator:(o,l,r)=>{e.menuType===3&&!l?r(new Error("按钮类型必须填写权限标识")):r()},trigger:"blur"}],sortOrder:[{type:"number",min:0,message:"排序值必须为非负整数",trigger:"blur"}]},h=()=>{var o;e.id=0,e.parentId=0,e.name="",e.path="",e.component="",e.icon="",e.menuType=2,e.permission="",e.sortOrder=0,e.status=1,e.isExternal=!1,e.isCache=!0,(o=U.value)==null||o.resetFields()},W=async()=>{var l;if(await((l=U.value)==null?void 0:l.validate())){I.value=!0;try{const r={parentId:e.parentId,name:e.name,path:e.path||void 0,component:e.component||void 0,icon:e.icon||void 0,menuType:e.menuType,permission:e.permission||void 0,sortOrder:e.sortOrder,status:e.status,isExternal:e.isExternal,isCache:e.isCache};_.value?(await se(e.id,r),x.success("更新成功")):(await de(r),x.success("创建成功")),c.value=!1,O()}catch(r){x.error(r.message||"操作失败")}finally{I.value=!1}}},O=async()=>{E.value=!0;try{const o=await ue();C.value=o.data}finally{E.value=!1}},G=()=>{h(),_.value=!1,c.value=!0},L=o=>{h(),_.value=!1,e.parentId=o.id,c.value=!0},j=o=>{h(),_.value=!0,e.id=o.id,e.parentId=o.parentId,e.name=o.name,e.path=o.path||"",e.component=o.component||"",e.icon=o.icon||"",e.menuType=o.menuType,e.permission=o.permission||"",e.sortOrder=o.sortOrder,e.status=o.status,e.isExternal=o.isExternal,e.isCache=o.isCache,c.value=!0},H=async o=>{const r=o.children&&o.children.length>0?`菜单 "${o.name}" 下有 ${o.children.length} 个子菜单,删除后子菜单也将被删除。确定要删除吗?`:`确定要删除菜单 "${o.name}" 吗?`;try{await ie.confirm(r,"删除确认",{type:"warning",confirmButtonText:"确定删除",cancelButtonText:"取消"}),await pe(o.id),x.success("删除成功"),O()}catch(m){m!=="cancel"&&x.error(m.message||"删除失败")}};return te(()=>{O()}),(o,l)=>{const r=s("el-icon"),m=s("el-button"),f=s("el-table-column"),D=s("el-tag"),J=s("el-table"),K=s("el-card"),P=s("el-tree-select"),p=s("el-form-item"),g=s("el-radio"),M=s("el-radio-group"),b=s("el-input"),Q=s("el-input-number"),B=s("el-switch"),X=s("el-form"),Y=s("el-dialog"),k=S("permission"),Z=S("loading");return d(),ne("div",fe,[t(K,null,{header:n(()=>[A("div",ce,[l[14]||(l[14]=A("span",null,"菜单管理",-1)),T((d(),u(m,{type:"primary",onClick:G},{default:n(()=>[t(r,null,{default:n(()=>[t(oe(re))]),_:1}),l[13]||(l[13]=i("新增菜单 ",-1))]),_:1})),[[k,"system:menu:add"]])])]),default:n(()=>[T((d(),u(J,{data:C.value,"row-key":"id","tree-props":{children:"children"}},{default:n(()=>[t(f,{prop:"name",label:"菜单名称","min-width":"180"}),t(f,{prop:"icon",label:"图标",width:"80"},{default:n(({row:a})=>[a.icon?(d(),u(r,{key:0},{default:n(()=>[(d(),u(ae(a.icon)))]),_:2},1024)):y("",!0)]),_:1}),t(f,{prop:"path",label:"路由路径","min-width":"150"}),t(f,{prop:"component",label:"组件路径","min-width":"180"}),t(f,{prop:"permission",label:"权限标识","min-width":"120"}),t(f,{prop:"menuType",label:"类型",width:"80"},{default:n(({row:a})=>{var V;return[t(D,{type:(V=w[a.menuType])==null?void 0:V.type},{default:n(()=>{var $;return[i(q(($=w[a.menuType])==null?void 0:$.label),1)]}),_:2},1032,["type"])]}),_:1}),t(f,{prop:"sortOrder",label:"排序",width:"80"}),t(f,{prop:"status",label:"状态",width:"80"},{default:n(({row:a})=>[t(D,{type:a.status===1?"success":"danger"},{default:n(()=>[i(q(a.status===1?"显示":"隐藏"),1)]),_:2},1032,["type"])]),_:1}),t(f,{label:"操作",width:"200",fixed:"right"},{default:n(({row:a})=>[T((d(),u(m,{link:"",type:"primary",onClick:V=>j(a)},{default:n(()=>[...l[15]||(l[15]=[i("编辑",-1)])]),_:1},8,["onClick"])),[[k,"system:menu:edit"]]),T((d(),u(m,{link:"",type:"primary",onClick:V=>L(a)},{default:n(()=>[...l[16]||(l[16]=[i("添加子菜单",-1)])]),_:1},8,["onClick"])),[[k,"system:menu:add"]]),T((d(),u(m,{link:"",type:"danger",onClick:V=>H(a)},{default:n(()=>[...l[17]||(l[17]=[i("删除",-1)])]),_:1},8,["onClick"])),[[k,"system:menu:delete"]])]),_:1})]),_:1},8,["data"])),[[Z,E.value]])]),_:1}),t(Y,{modelValue:c.value,"onUpdate:modelValue":l[12]||(l[12]=a=>c.value=a),title:F.value,width:"550px",onClose:h},{footer:n(()=>[t(m,{onClick:l[11]||(l[11]=a=>c.value=!1)},{default:n(()=>[...l[23]||(l[23]=[i("取消",-1)])]),_:1}),t(m,{type:"primary",onClick:W,loading:I.value},{default:n(()=>[...l[24]||(l[24]=[i("确定",-1)])]),_:1},8,["loading"])]),default:n(()=>[t(X,{ref_key:"formRef",ref:U,model:e,rules:z,"label-width":"100px"},{default:n(()=>[t(p,{label:"上级菜单",prop:"parentId"},{default:n(()=>[t(P,{modelValue:e.parentId,"onUpdate:modelValue":l[0]||(l[0]=a=>e.parentId=a),data:R.value,props:{label:"name",value:"id",children:"children"},"check-strictly":"","render-after-expand":!1,placeholder:"请选择上级菜单",clearable:"",style:{width:"100%"}},null,8,["modelValue","data"])]),_:1}),t(p,{label:"菜单类型",prop:"menuType"},{default:n(()=>[t(M,{modelValue:e.menuType,"onUpdate:modelValue":l[1]||(l[1]=a=>e.menuType=a)},{default:n(()=>[t(g,{value:1},{default:n(()=>[...l[18]||(l[18]=[i("目录",-1)])]),_:1}),t(g,{value:2},{default:n(()=>[...l[19]||(l[19]=[i("菜单",-1)])]),_:1}),t(g,{value:3},{default:n(()=>[...l[20]||(l[20]=[i("按钮",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(p,{label:"菜单名称",prop:"name"},{default:n(()=>[t(b,{modelValue:e.name,"onUpdate:modelValue":l[2]||(l[2]=a=>e.name=a),placeholder:"请输入菜单名称"},null,8,["modelValue"])]),_:1}),e.menuType!==3?(d(),u(p,{key:0,label:"图标",prop:"icon"},{default:n(()=>[t(b,{modelValue:e.icon,"onUpdate:modelValue":l[3]||(l[3]=a=>e.icon=a),placeholder:"请输入图标名称,如 Setting"},null,8,["modelValue"])]),_:1})):y("",!0),e.menuType===2?(d(),u(p,{key:1,label:"路由路径",prop:"path"},{default:n(()=>[t(b,{modelValue:e.path,"onUpdate:modelValue":l[4]||(l[4]=a=>e.path=a),placeholder:"请输入路由路径,如 /system/menu"},null,8,["modelValue"])]),_:1})):y("",!0),e.menuType===2?(d(),u(p,{key:2,label:"组件路径",prop:"component"},{default:n(()=>[t(b,{modelValue:e.component,"onUpdate:modelValue":l[5]||(l[5]=a=>e.component=a),placeholder:"请输入组件路径,如 system/menu/index"},null,8,["modelValue"])]),_:1})):y("",!0),e.menuType===3?(d(),u(p,{key:3,label:"权限标识",prop:"permission"},{default:n(()=>[t(b,{modelValue:e.permission,"onUpdate:modelValue":l[6]||(l[6]=a=>e.permission=a),placeholder:"请输入权限标识,如 menu:create"},null,8,["modelValue"])]),_:1})):y("",!0),t(p,{label:"排序",prop:"sortOrder"},{default:n(()=>[t(Q,{modelValue:e.sortOrder,"onUpdate:modelValue":l[7]||(l[7]=a=>e.sortOrder=a),min:0,max:9999},null,8,["modelValue"])]),_:1}),t(p,{label:"状态",prop:"status"},{default:n(()=>[t(M,{modelValue:e.status,"onUpdate:modelValue":l[8]||(l[8]=a=>e.status=a)},{default:n(()=>[t(g,{value:1},{default:n(()=>[...l[21]||(l[21]=[i("显示",-1)])]),_:1}),t(g,{value:0},{default:n(()=>[...l[22]||(l[22]=[i("隐藏",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),e.menuType===2?(d(),u(p,{key:4,label:"是否外链",prop:"isExternal"},{default:n(()=>[t(B,{modelValue:e.isExternal,"onUpdate:modelValue":l[9]||(l[9]=a=>e.isExternal=a)},null,8,["modelValue"])]),_:1})):y("",!0),e.menuType===2?(d(),u(p,{key:5,label:"是否缓存",prop:"isCache"},{default:n(()=>[t(B,{modelValue:e.isCache,"onUpdate:modelValue":l[10]||(l[10]=a=>e.isCache=a)},null,8,["modelValue"])]),_:1})):y("",!0)]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}}),ge=me(ye,[["__scopeId","data-v-b5561b80"]]);export{ge as default};
|