| 1 |
- (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([[90],{"64b5":function(e,t,s){"use strict";s.r(t);var o=function(){var e=this,t=e._self._c;return t("div",{staticClass:"q-pa-md"},[t("q-tabs",{attrs:{dense:"","active-color":"primary","indicator-color":"primary",align:"justify","narrow-indicator":""},model:{value:e.currentTab,callback:function(t){e.currentTab=t},expression:"currentTab"}},[t("q-tab",{attrs:{name:"roles",icon:"groups",label:"角色管理"}}),t("q-tab",{attrs:{name:"staff",icon:"people",label:"成员管理"}}),t("q-tab",{attrs:{name:"permissions",icon:"security",label:"权限管理"}})],1),t("q-separator"),t("q-tab-panels",{attrs:{animated:""},model:{value:e.currentTab,callback:function(t){e.currentTab=t},expression:"currentTab"}},[t("q-tab-panel",{attrs:{name:"roles"}},[t("q-card",{staticClass:"shadow-24"},[t("q-bar",{staticClass:"bg-light-blue-10 text-white"},[t("div",[e._v("角色权限管理")]),t("q-space"),t("q-btn",{attrs:{dense:"",flat:"",icon:"add"},on:{click:e.openRoleDialog}},[t("q-tooltip",[e._v("添加新角色")])],1)],1),t("q-card-section",[t("div",{staticClass:"row q-mb-md"},[t("div",{staticClass:"col-4"},[t("q-select",{attrs:{options:e.roleOptions,label:"选择角色",dense:"",outlined:"","emit-value":"","map-options":""},on:{input:e.loadRolePermissions},model:{value:e.selectedRole,callback:function(t){e.selectedRole=t},expression:"selectedRole"}})],1)]),t("q-table",{staticClass:"my-sticky-header-table",attrs:{data:e.permissions,columns:e.roleColumns,"row-key":"page",separator:"cell",dense:"",flat:"",bordered:""},scopedSlots:e._u([{key:"body",fn:function(s){return[t("q-tr",{attrs:{props:s}},[t("q-td",{key:"page",attrs:{props:s}},[e._v("\n "+e._s(s.row.page)+"\n ")]),t("q-td",{key:"enabled",attrs:{props:s}},[t("q-toggle",{on:{"update:model-value":function(t){return e.updatePageAccess(s.row)}},model:{value:s.row.enabled,callback:function(t){e.$set(s.row,"enabled",t)},expression:"props.row.enabled"}})],1),t("q-td",{key:"components",attrs:{props:s}},[t("q-list",{attrs:{dense:""}},e._l(s.row.components,(function(s,o){return t("q-item",{key:o},[t("q-item-section",[t("div",{staticClass:"row items-center"},[t("div",{staticClass:"col"},[e._v(e._s(s.name))]),t("div",{staticClass:"col-auto"},[t("q-toggle",{model:{value:s.enabled,callback:function(t){e.$set(s,"enabled",t)},expression:"comp.enabled"}})],1)])])],1)})),1)],1),t("q-td",{key:"actions",attrs:{props:s}},[t("q-btn",{attrs:{round:"",flat:"",push:"",color:"primary",icon:"save"},on:{click:function(t){return e.savePagePermissions(s.row)}}},[t("q-tooltip",[e._v("保存页面权限")])],1)],1)],1)]}}])})],1)],1)],1),t("q-tab-panel",{attrs:{name:"staff"}},[t("q-card",{staticClass:"shadow-24"},[t("q-bar",{staticClass:"bg-light-blue-10 text-white rounded-borders"},[t("div",[e._v("成员管理")]),t("q-space"),t("q-btn",{attrs:{dense:"",flat:"",icon:"add"},on:{click:e.openStaffDialog}},[t("q-tooltip",[e._v("添加新成员")])],1)],1),t("q-card-section",[t("q-table",{staticClass:"my-sticky-header-table",attrs:{data:e.staffList,columns:e.staffColumns,"row-key":"id",separator:"cell",dense:"",flat:"",bordered:"",filter:e.staffFilter,pagination:e.staffPagination},scopedSlots:e._u([{key:"top-right",fn:function(){return[t("q-input",{staticClass:"q-mb-md",attrs:{outlined:"",dense:"",placeholder:"搜索成员"},scopedSlots:e._u([{key:"append",fn:function(){return[t("q-icon",{attrs:{name:"search"}})]},proxy:!0}]),model:{value:e.staffFilter,callback:function(t){e.staffFilter=t},expression:"staffFilter"}})]},proxy:!0},{key:"body",fn:function(s){return[t("q-tr",{attrs:{props:s}},[t("q-td",{key:"staff_name",attrs:{props:s}},[e._v("\n "+e._s(s.row.staff_name)+"\n ")]),t("q-td",{key:"staff_type",attrs:{props:s}},[t("q-select",{attrs:{options:e.roleOptions,dense:"",outlined:"","emit-value":"","map-options":""},on:{"update:model-value":function(t){return e.updateStaffRole(s.row)}},model:{value:s.row.staff_type,callback:function(t){e.$set(s.row,"staff_type",t)},expression:"props.row.staff_type"}})],1),t("q-td",{key:"is_lock",attrs:{props:s}},[t("q-toggle",{on:{"update:model-value":function(t){return e.updateStaffStatus(s.row)}},model:{value:s.row.is_lock,callback:function(t){e.$set(s.row,"is_lock",t)},expression:"props.row.is_lock"}})],1),t("q-td",{key:"is_look",attrs:{props:s}},[t("q-toggle",{on:{"update:model-value":function(t){return e.updateStaffStatus(s.row)}},model:{value:s.row.is_look,callback:function(t){e.$set(s.row,"is_look",t)},expression:"props.row.is_look"}})],1),t("q-td",{key:"is_edit",attrs:{props:s}},[t("q-toggle",{on:{"update:model-value":function(t){return e.updateStaffStatus(s.row)}},model:{value:s.row.is_edit,callback:function(t){e.$set(s.row,"is_edit",t)},expression:"props.row.is_edit"}})],1),t("q-td",{key:"actions",attrs:{props:s}},[t("q-btn",{attrs:{round:"",flat:"",push:"",color:"primary",icon:"edit"},on:{click:function(t){return e.editStaff(s.row)}}},[t("q-tooltip",[e._v("编辑成员")])],1),t("q-btn",{attrs:{round:"",flat:"",push:"",color:"negative",icon:"delete"},on:{click:function(t){return e.deleteStaff(s.row)}}},[t("q-tooltip",[e._v("删除成员")])],1)],1)],1)]}}])})],1)],1)],1),t("q-tab-panel",{attrs:{name:"permissions"}},[t("q-card",{staticClass:"shadow-24"},[t("q-bar",{staticClass:"bg-light-blue-10 text-white rounded-borders"},[t("div",[e._v("权限管理")]),t("q-space"),t("q-btn",{attrs:{dense:"",flat:"",icon:"add"},on:{click:e.openPermissionDialog}},[t("q-tooltip",[e._v("添加新权限")])],1)],1),t("q-card-section",[t("q-table",{staticClass:"my-sticky-header-table",attrs:{data:e.permissionList,columns:e.permissionColumns,"row-key":"id",separator:"cell",dense:"",flat:"",bordered:"",filter:e.permissionFilter},scopedSlots:e._u([{key:"top-right",fn:function(){return[t("q-input",{staticClass:"q-mb-md",attrs:{outlined:"",dense:"",placeholder:"搜索权限"},scopedSlots:e._u([{key:"append",fn:function(){return[t("q-icon",{attrs:{name:"search"}})]},proxy:!0}]),model:{value:e.permissionFilter,callback:function(t){e.permissionFilter=t},expression:"permissionFilter"}})]},proxy:!0},{key:"body",fn:function(s){return[t("q-tr",{attrs:{props:s}},[t("q-td",{key:"page",attrs:{props:s}},[e._v("\n "+e._s(s.row.page)+"\n ")]),t("q-td",{key:"name",attrs:{props:s}},[e._v("\n "+e._s(s.row.name)+"\n ")]),t("q-td",{key:"description",attrs:{props:s}},[e._v("\n "+e._s(s.row.description)+"\n ")]),t("q-td",{key:"actions",attrs:{props:s}},[t("q-btn",{attrs:{round:"",flat:"",push:"",color:"primary",icon:"edit"},on:{click:function(t){return e.editPermission(s.row)}}},[t("q-tooltip",[e._v("编辑权限")])],1),t("q-btn",{attrs:{round:"",flat:"",push:"",color:"negative",icon:"delete"},on:{click:function(t){return e.deletePermission(s.row)}}},[t("q-tooltip",[e._v("删除权限")])],1)],1)],1)]}}])})],1)],1)],1)],1),t("q-dialog",{model:{value:e.roleDialog,callback:function(t){e.roleDialog=t},expression:"roleDialog"}},[t("q-card",{staticStyle:{"min-width":"350px"}},[t("q-card-section",[t("div",{staticClass:"text-h6"},[e._v("添加新角色")])]),t("q-card-section",[t("q-input",{attrs:{label:"角色名称",dense:"",outlined:"",autofocus:"",rules:[e=>!!e||"角色名称不能为空"]},model:{value:e.newRoleName,callback:function(t){e.newRoleName=t},expression:"newRoleName"}}),t("div",{staticClass:"q-mt-md"},[t("div",{staticClass:"text-subtitle2"},[e._v("初始权限")]),t("q-select",{attrs:{options:e.permissionOptions,multiple:"","use-chips":"",dense:"",outlined:"","emit-value":"","map-options":"",label:"选择权限"},model:{value:e.newRolePermissions,callback:function(t){e.newRolePermissions=t},expression:"newRolePermissions"}})],1)],1),t("q-card-actions",{attrs:{align:"right"}},[t("q-btn",{directives:[{name:"close-popup",rawName:"v-close-popup"}],attrs:{flat:"",label:"取消",color:"primary"}}),t("q-btn",{attrs:{flat:"",label:"确定",color:"primary"},on:{click:e.createNewRole}})],1)],1)],1),t("q-dialog",{model:{value:e.staffDialog,callback:function(t){e.staffDialog=t},expression:"staffDialog"}},[t("q-card",{staticStyle:{"min-width":"500px"}},[t("q-card-section",[t("div",{staticClass:"text-h6"},[e._v("\n "+e._s(e.editStaffMode?"编辑成员":"添加新成员")+"\n ")])]),t("q-card-section",[t("q-input",{attrs:{label:"成员姓名",dense:"",outlined:"",autofocus:"",rules:[e=>!!e||"成员姓名不能为空"]},model:{value:e.staffForm.staff_name,callback:function(t){e.$set(e.staffForm,"staff_name",t)},expression:"staffForm.staff_name"}}),t("q-select",{staticClass:"q-mt-md",attrs:{options:e.roleOptions,label:"角色",dense:"",outlined:"","emit-value":"","map-options":""},model:{value:e.staffForm.staff_type,callback:function(t){e.$set(e.staffForm,"staff_type",t)},expression:"staffForm.staff_type"}}),t("div",{staticClass:"row q-mt-md"},[t("div",{staticClass:"col"},[t("q-toggle",{attrs:{label:"是否锁定"},model:{value:e.staffForm.is_lock,callback:function(t){e.$set(e.staffForm,"is_lock",t)},expression:"staffForm.is_lock"}})],1),t("div",{staticClass:"col"},[t("q-toggle",{attrs:{label:"查看权限"},model:{value:e.staffForm.is_look,callback:function(t){e.$set(e.staffForm,"is_look",t)},expression:"staffForm.is_look"}})],1),t("div",{staticClass:"col"},[t("q-toggle",{attrs:{label:"编辑权限"},model:{value:e.staffForm.is_edit,callback:function(t){e.$set(e.staffForm,"is_edit",t)},expression:"staffForm.is_edit"}})],1)])],1),t("q-card-actions",{attrs:{align:"right"}},[t("q-btn",{directives:[{name:"close-popup",rawName:"v-close-popup"}],attrs:{flat:"",label:"取消",color:"primary"}}),t("q-btn",{attrs:{flat:"",label:"保存",color:"primary"},on:{click:e.saveStaff}})],1)],1)],1),t("q-dialog",{model:{value:e.permissionDialog,callback:function(t){e.permissionDialog=t},expression:"permissionDialog"}},[t("q-card",{staticStyle:{"min-width":"500px"}},[t("q-card-section",[t("div",{staticClass:"text-h6"},[e._v("\n "+e._s(e.editPermissionMode?"编辑权限":"添加新权限")+"\n ")])]),t("q-card-section",[t("q-input",{attrs:{label:"权限名称",dense:"",outlined:"",autofocus:"",rules:[e=>!!e||"权限名称不能为空"]},model:{value:e.permissionForm.name,callback:function(t){e.$set(e.permissionForm,"name",t)},expression:"permissionForm.name"}}),t("q-input",{staticClass:"q-mt-md",attrs:{label:"权限代码",dense:"",outlined:"",rules:[e=>!!e||"权限代码不能为空"]},model:{value:e.permissionForm.code,callback:function(t){e.$set(e.permissionForm,"code",t)},expression:"permissionForm.code"}}),t("q-input",{staticClass:"q-mt-md",attrs:{label:"权限描述",dense:"",outlined:"",type:"textarea"},model:{value:e.permissionForm.description,callback:function(t){e.$set(e.permissionForm,"description",t)},expression:"permissionForm.description"}})],1),t("q-card-actions",{attrs:{align:"right"}},[t("q-btn",{directives:[{name:"close-popup",rawName:"v-close-popup"}],attrs:{flat:"",label:"取消",color:"primary"}}),t("q-btn",{attrs:{flat:"",label:"保存",color:"primary"},on:{click:e.savePermission}})],1)],1)],1)],1)},i=[],a=s("3004"),n={name:"PermissionManage",data(){return{currentTab:"roles",selectedRole:null,roleOptions:[],permissions:[],roleDialog:!1,newRoleName:"",newRolePermissions:[],staffList:[],staffFilter:"",staffDialog:!1,editStaffMode:!1,staffForm:{id:null,staff_name:"",staff_type:"",is_lock:!1,is_look:!1,is_edit:!1},permissionList:[],permissionFilter:"",permissionDialog:!1,editPermissionMode:!1,permissionForm:{id:null,name:"",code:"",description:""},roleColumns:[{name:"page",required:!0,label:"界面名称",align:"left",field:"page",sortable:!0},{name:"enabled",label:"访问权限",align:"center",field:"enabled"},{name:"components",label:"组件权限",align:"left",field:"components"},{name:"actions",label:"操作",align:"center"}],staffColumns:[{name:"staff_name",required:!0,label:"成员姓名",align:"left",field:"staff_name",sortable:!0},{name:"staff_type",label:"角色",align:"left",field:"staff_type"},{name:"is_lock",label:"锁定状态",align:"center",field:"is_lock"},{name:"is_look",label:"查看权限",align:"center",field:"is_look"},{name:"is_edit",label:"编辑权限",align:"center",field:"is_edit"},{name:"actions",label:"操作",align:"center"}],permissionColumns:[{name:"page",label:"界面",align:"left",field:"code"},{name:"name",required:!0,label:"权限名称",align:"left",field:"name",sortable:!0},{name:"description",label:"权限描述",align:"left",field:"description"},{name:"actions",label:"操作",align:"center"}],staffPagination:{rowsPerPage:10},permissionOptions:[]}},mounted(){this.loadRoles(),this.loadStaffList(),this.loadPermissions(),this.loadPermissionOptions()},methods:{showNotification(e,t="negative"){this.$q?this.$q.notify({message:e,icon:"positive"===t?"check":"close",color:t}):console.log(`${"positive"===t?"✓":"✗"} ${e}`)},async loadRoles(){try{const e=await Object(a["e"])("staff/role-permissions/");this.roleOptions=e.map((e=>({label:e,value:e}))),this.roleOptions.length>0&&(this.selectedRole=this.roleOptions[0].value,this.loadRolePermissions())}catch(e){console.error("加载角色失败:",e),this.showNotification("加载角色失败: "+e.message)}},async loadRolePermissions(){if(this.selectedRole)try{const e=await Object(a["e"])(`staff/role-permissions/${this.selectedRole}/`);this.permissions=e.permissions_group.map((e=>({page:e.page,enabled:e.permissions.some((e=>null===e.component&&e.enabled)),components:e.permissions.filter((e=>null!==e.component)).map((e=>({id:e.id,name:e.name,description:e.description,enabled:e.enabled})))})))}catch(e){console.error("加载权限失败:",e),this.showNotification("加载权限失败: "+e.message)}},async loadStaffList(){try{const e=await Object(a["e"])("staff/");this.staffList=e.results.map((e=>({...e,staff_type:e.staff_type||""})))}catch(e){console.error("加载成员列表失败:",e),this.showNotification("加载成员列表失败: "+e.message)}},async loadPermissions(){try{const e=await Object(a["e"])("staff/permission/");this.permissionList=e.map((e=>({...e})))}catch(e){console.error("加载权限列表失败:",e),this.showNotification("加载权限列表失败: "+e.message)}},async loadPermissionOptions(){try{const e=await Object(a["e"])("staff/permission/");this.permissionOptions=e.map((e=>({label:e.name,value:e.id})))}catch(e){console.error("加载权限选项失败:",e),this.showNotification("加载权限选项失败: "+e.message)}},async updatePageAccess(e){if(this.selectedRole)try{await Object(a["h"])("staff/permission/update/",{role:this.selectedRole,page:e.page,access:e.enabled}),this.showNotification("页面访问权限更新成功","positive")}catch(t){console.error("更新权限失败:",t),this.showNotification("更新失败: "+t.message),e.enabled=!e.enabled}},async savePagePermissions(e){if(this.selectedRole)try{await Object(a["h"])("staff/permission/component/",{role:this.selectedRole,page:e.page,components:e.components.map((e=>({name:e.name,enabled:e.enabled})))}),this.showNotification("组件权限更新成功","positive")}catch(t){console.error("保存权限失败:",t),this.showNotification("保存失败: "+t.message)}},openRoleDialog(){this.newRoleName="",this.newRolePermissions=[],this.roleDialog=!0},openStaffDialog(){this.staffForm={id:null,staff_name:"",staff_type:this.roleOptions.length>0?this.roleOptions[0].value:"",is_lock:!1,is_look:!1,is_edit:!1},this.editStaffMode=!1,this.staffDialog=!0},openPermissionDialog(){this.permissionForm={id:null,name:"",code:"",description:""},this.editPermissionMode=!1,this.permissionDialog=!0},editStaff(e){this.staffForm={id:e.id,staff_name:e.staff_name,staff_type:e.staff_type,is_lock:e.is_lock,is_look:e.is_look,is_edit:e.is_edit},this.editStaffMode=!0,this.staffDialog=!0},editPermission(e){this.permissionForm={id:e.id,name:e.name,code:e.code,description:e.description},this.editPermissionMode=!0,this.permissionDialog=!0},async deleteStaff(e){try{await Object(a["c"])(`staff/${e.id}/`),this.showNotification("成员删除成功","positive"),this.loadStaffList()}catch(t){console.error("删除成员失败:",t),this.showNotification("删除失败: "+t.message)}},async deletePermission(e){try{await Object(a["c"])(`staff/permission/${e.id}/`),this.showNotification("权限删除成功","positive"),this.loadPermissions()}catch(t){console.error("删除权限失败:",t),this.showNotification("删除失败: "+t.message)}},async saveStaff(){try{this.editStaffMode?(await Object(a["i"])(`staff/${this.staffForm.id}/`,this.staffForm),this.showNotification("成员更新成功","positive")):(await Object(a["h"])("staff/",this.staffForm),this.showNotification("成员添加成功","positive")),this.staffDialog=!1,this.loadStaffList()}catch(e){console.error("保存成员失败:",e),this.showNotification("保存失败: "+e.message)}},async savePermission(){try{this.editPermissionMode?(await Object(a["i"])(`staff/permission/${this.permissionForm.id}/`,this.permissionForm),this.showNotification("权限更新成功","positive")):(await Object(a["h"])("staff/permission/",this.permissionForm),this.showNotification("权限添加成功","positive")),this.permissionDialog=!1,this.loadPermissions(),this.loadPermissionOptions()}catch(e){console.error("保存权限失败:",e),this.showNotification("保存失败: "+e.message)}},async updateStaffRole(e){try{await Object(a["i"])(`staff/${e.id}/`,{staff_type:e.staff_type}),this.showNotification("成员角色更新成功","positive")}catch(t){console.error("更新角色失败:",t),this.showNotification("更新失败: "+t.message)}},async updateStaffStatus(e){try{await Object(a["i"])(`staff/${e.id}/`,{is_lock:e.is_lock,is_look:e.is_look,is_edit:e.is_edit}),this.showNotification("成员状态更新成功","positive")}catch(t){console.error("更新状态失败:",t),this.showNotification("更新失败: "+t.message)}},async createNewRole(){if(this.newRoleName)try{await Object(a["h"])("staff/role/",{name:this.newRoleName,description:`新角色: ${this.newRoleName}`,permissions:this.newRolePermissions}),this.roleDialog=!1,this.loadRoles(),this.showNotification("角色创建成功","positive")}catch(e){console.error("创建角色失败:",e),this.showNotification("创建失败: "+e.message)}}}},l=n,r=s("42e1"),c=s("429b"),d=s("7460"),f=s("eb85"),p=s("adad"),m=s("823b"),u=s("f09f"),b=s("d847"),h=s("2c91"),g=s("9c40"),q=s("05c0"),w=s("a370"),_=s("ddd8"),v=s("eaac"),y=s("bd08"),k=s("db86"),F=s("9564"),P=s("1c1c"),x=s("66e5"),S=s("4074"),C=s("27f9"),N=s("0016"),R=s("24e8"),O=s("4b7e"),D=s("7f67"),$=s("eebe"),Q=s.n($),j=Object(r["a"])(l,o,i,!1,null,null,null);t["default"]=j.exports;Q()(j,"components",{QTabs:c["a"],QTab:d["a"],QSeparator:f["a"],QTabPanels:p["a"],QTabPanel:m["a"],QCard:u["a"],QBar:b["a"],QSpace:h["a"],QBtn:g["a"],QTooltip:q["a"],QCardSection:w["a"],QSelect:_["a"],QTable:v["a"],QTr:y["a"],QTd:k["a"],QToggle:F["a"],QList:P["a"],QItem:x["a"],QItemSection:S["a"],QInput:C["a"],QIcon:N["a"],QDialog:R["a"],QCardActions:O["a"]}),Q()(j,"directives",{ClosePopup:D["a"]})}}]);
|