1 line
7.6 KiB
JavaScript
1 line
7.6 KiB
JavaScript
import{$ as e,H as t,L as n,O as r,P as i,V as a,Wt as o,_ as s,d as c,et as l,f as u,lt as d,p as f,st as p,u as m,v as h}from"./runtime-core.esm-bundler-DbRZbT7v.js";import{l as g,o as _,s as v,t as y}from"./index-DK5nh4op.js";import"./request-BcX6wdRT.js";import{permissionApi as b,roleApi as x}from"./system-cE3W4r-W.js";var ee={class:`p-6 space-y-4`},S={class:`bg-white rounded-2xl border border-gray-100 shadow-sm p-4 flex items-center flex-wrap gap-3`},te={class:`bg-white rounded-2xl border border-gray-100 shadow-sm`},C={class:`flex items-center justify-between px-5 py-4 border-b border-gray-50`},w={class:`px-2`},T={class:`px-5 py-3 border-t border-gray-50`},ne={style:{"min-height":`200px`,"max-height":`480px`,"overflow-y":`auto`}},E=y({__name:`index`,setup(y){let E=d([]),D=d(0),O=d(!1),k=p({keyword:``}),A=p({page:1,page_size:20}),j=d(!1),M=d(`新增角色`),N=d(!1),P=d(!1),F=d(null),I=p({id:null,name:``,code:``,description:``,status:1}),L={name:[{required:!0,message:`请输入角色名称`,trigger:`blur`}],code:[{required:!0,message:`请输入角色标识`,trigger:`blur`},{pattern:/^[a-zA-Z][a-zA-Z0-9_:]*$/,message:`只允许字母、数字、下划线,以字母开头`,trigger:`blur`}]},R=d(!1),z=d(!1),B=d(null),V=d([]),H=d(null),U=d(``),W=d([]),G={label:`name`,children:`children`};async function K(){O.value=!0;try{let e=await x.getList({...k,...A});E.value=e.data?.list||[],D.value=e.data?.total||0}catch{}finally{O.value=!1}}async function q(){try{let e=await b.getList({per_page:500});V.value=J(e.data?.list||e.data?.data||[])}catch{}}function J(e,t=null){return e.filter(e=>(e.parent_id??null)===t).map(t=>({...t,children:J(e,t.id)}))}function Y(){A.page=1,K()}function X(){k.keyword=``,Y()}function re(){P.value=!1,M.value=`新增角色`,Object.assign(I,{id:null,name:``,code:``,description:``,status:1}),j.value=!0}async function ie(e){P.value=!0,M.value=`编辑角色`;let t=(await x.getDetail(e.id)).data;Object.assign(I,{id:t.id,name:t.name,code:t.code,description:t.description||``,status:t.status}),j.value=!0}async function ae(){F.value&&await F.value.validate(async e=>{if(e){N.value=!0;try{P.value?(await x.update(I.id,I),v.success(`角色更新成功`)):(await x.create(I),v.success(`角色创建成功`)),j.value=!1,K()}catch{}finally{N.value=!1}}})}async function Z(e){await _.confirm(`确定删除角色「${e.name}」吗?`,`删除确认`,{confirmButtonText:`确定删除`,cancelButtonText:`取消`,type:`warning`,confirmButtonClass:`el-button--danger`}),await x.delete(e.id),v.success(`删除成功`),K()}async function oe(e){H.value=e.id,U.value=e.name,R.value=!0,z.value=!0;try{V.value.length===0&&await q(),W.value=((await x.getDetail(e.id)).data?.permissions||[]).map(e=>e.id),await r(),B.value&&B.value.setCheckedKeys(W.value,!0)}catch{}finally{z.value=!1}}async function se(){if(!B.value)return;let e=B.value.getCheckedKeys(!1),t=B.value.getHalfCheckedKeys(),n=[...e,...t];try{await x.assignPermissions(H.value,n),v.success(`权限分配成功`),R.value=!1}catch{}}function ce(e){A.page=e,K()}function le(e){A.page_size=e,A.page=1,K()}return i(()=>{K(),q()}),(r,i)=>{let d=a(`Search`),p=a(`el-icon`),_=a(`el-input`),v=a(`el-button`),y=a(`el-table-column`),b=a(`el-tag`),x=a(`el-table`),H=a(`el-pagination`),W=a(`el-form-item`),K=a(`el-radio`),q=a(`el-radio-group`),J=a(`el-form`),Q=a(`el-dialog`),ue=a(`el-tree`),de=a(`el-empty`),$=t(`loading`);return n(),f(`div`,ee,[m(`div`,S,[h(_,{modelValue:k.keyword,"onUpdate:modelValue":i[0]||=e=>k.keyword=e,placeholder:`搜索角色名称/标识`,style:{width:`240px`},clearable:``,onKeydown:g(Y,[`enter`])},{prefix:e(()=>[h(p,null,{default:e(()=>[h(d)]),_:1})]),_:1},8,[`modelValue`]),h(v,{type:`primary`,icon:`Search`,onClick:Y},{default:e(()=>[...i[11]||=[s(`查询`,-1)]]),_:1}),h(v,{icon:`Refresh`,onClick:X},{default:e(()=>[...i[12]||=[s(`重置`,-1)]]),_:1})]),m(`div`,te,[m(`div`,C,[i[14]||=m(`div`,{class:`flex items-center gap-3`},null,-1),h(v,{type:`primary`,icon:`Plus`,onClick:re},{default:e(()=>[...i[13]||=[s(`新增角色`,-1)]]),_:1})]),m(`div`,w,[l((n(),c(x,{data:E.value,style:{width:`100%`}},{default:e(()=>[h(y,{prop:`name`,label:`角色名称`,"min-width":`140`}),h(y,{prop:`code`,label:`角色标识`,"min-width":`140`}),h(y,{prop:`description`,label:`描述`,"min-width":`200`,"show-overflow-tooltip":``}),h(y,{prop:`user_count`,label:`用户数`,width:`90`,align:`center`}),h(y,{label:`状态`,width:`90`,align:`center`},{default:e(({row:t})=>[h(b,{type:t.status===1?`success`:`danger`,size:`small`},{default:e(()=>[s(o(t.status===1?`启用`:`禁用`),1)]),_:2},1032,[`type`])]),_:1}),h(y,{prop:`created_at`,label:`创建时间`,"min-width":`160`}),h(y,{label:`操作`,width:`200`,fixed:`right`,align:`center`},{default:e(({row:t})=>[h(v,{size:`small`,type:`primary`,text:``,onClick:e=>ie(t)},{default:e(()=>[...i[15]||=[s(`编辑`,-1)]]),_:1},8,[`onClick`]),h(v,{size:`small`,type:`warning`,text:``,onClick:e=>oe(t)},{default:e(()=>[...i[16]||=[s(`分配权限`,-1)]]),_:1},8,[`onClick`]),h(v,{size:`small`,type:`danger`,text:``,onClick:e=>Z(t)},{default:e(()=>[...i[17]||=[s(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])),[[$,O.value]])]),m(`div`,T,[h(H,{"current-page":A.page,"onUpdate:currentPage":i[1]||=e=>A.page=e,"page-size":A.page_size,"onUpdate:pageSize":i[2]||=e=>A.page_size=e,total:D.value,"page-sizes":[10,20,50],layout:`total, sizes, prev, pager, next, jumper`,background:``,onCurrentChange:ce,onSizeChange:le},null,8,[`current-page`,`page-size`,`total`])])]),h(Q,{modelValue:j.value,"onUpdate:modelValue":i[8]||=e=>j.value=e,title:M.value,width:`480px`,"destroy-on-close":``},{footer:e(()=>[h(v,{onClick:i[7]||=e=>j.value=!1},{default:e(()=>[...i[21]||=[s(`取消`,-1)]]),_:1}),h(v,{type:`primary`,loading:N.value,onClick:ae},{default:e(()=>[s(o(P.value?`保存修改`:`确认创建`),1)]),_:1},8,[`loading`])]),default:e(()=>[h(J,{ref_key:`formRef`,ref:F,model:I,rules:L,"label-width":`90px`},{default:e(()=>[h(W,{label:`角色名称`,prop:`name`},{default:e(()=>[h(_,{modelValue:I.name,"onUpdate:modelValue":i[3]||=e=>I.name=e,placeholder:`请输入角色名称`},null,8,[`modelValue`])]),_:1}),h(W,{label:`角色标识`,prop:`code`},{default:e(()=>[h(_,{modelValue:I.code,"onUpdate:modelValue":i[4]||=e=>I.code=e,placeholder:`如: admin, nurse_manager`,disabled:P.value},null,8,[`modelValue`,`disabled`]),i[18]||=m(`div`,{class:`form-tip`},`标识用于程序内部权限判断,创建后不可修改`,-1)]),_:1}),h(W,{label:`描述`,prop:`description`},{default:e(()=>[h(_,{modelValue:I.description,"onUpdate:modelValue":i[5]||=e=>I.description=e,type:`textarea`,rows:3,placeholder:`请输入角色描述(选填)`},null,8,[`modelValue`])]),_:1}),h(W,{label:`状态`,prop:`status`},{default:e(()=>[h(q,{modelValue:I.status,"onUpdate:modelValue":i[6]||=e=>I.status=e},{default:e(()=>[h(K,{value:1},{default:e(()=>[...i[19]||=[s(`启用`,-1)]]),_:1}),h(K,{value:0},{default:e(()=>[...i[20]||=[s(`禁用`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1})]),_:1},8,[`model`])]),_:1},8,[`modelValue`,`title`]),h(Q,{modelValue:R.value,"onUpdate:modelValue":i[10]||=e=>R.value=e,title:`分配权限 - ${U.value}`,width:`520px`,"destroy-on-close":``},{footer:e(()=>[h(v,{onClick:i[9]||=e=>R.value=!1},{default:e(()=>[...i[22]||=[s(`取消`,-1)]]),_:1}),h(v,{type:`primary`,onClick:se},{default:e(()=>[...i[23]||=[s(`保存权限`,-1)]]),_:1})]),default:e(()=>[l((n(),f(`div`,ne,[h(ue,{ref_key:`permTreeRef`,ref:B,data:V.value,props:G,"show-checkbox":``,"node-key":`id`,"default-expand-all":``,"check-strictly":``},null,8,[`data`]),!z.value&&V.value.length===0?(n(),c(de,{key:0,description:`暂无权限数据`})):u(``,!0)])),[[$,z.value]])]),_:1},8,[`modelValue`,`title`])])}}},[[`__scopeId`,`data-v-2186d196`]]);export{E as default}; |