sasp-admin 0.2.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/index.js +227 -0
  2. package/package.json +19 -0
  3. package/router.js +83 -0
  4. package/src/assets/font/iconfont.css +1346 -0
  5. package/src/assets/font/iconfont.eot +0 -0
  6. package/src/assets/font/iconfont.js +1 -0
  7. package/src/assets/font/iconfont.svg +827 -0
  8. package/src/assets/font/iconfont.ttf +0 -0
  9. package/src/assets/font/iconfont.woff +0 -0
  10. package/src/assets/images/loading-bar.gif +0 -0
  11. package/src/assets/js/adminInstall.js +36 -0
  12. package/src/assets/js/api/apiAdmin.js +613 -0
  13. package/src/assets/js/global/dataGlobal.js +260 -0
  14. package/src/assets/js/global/logGlobal.js +22 -0
  15. package/src/assets/js/global/paramGlobal.js +67 -0
  16. package/src/assets/js/global/resGlobal.js +91 -0
  17. package/src/assets/js/global/userGlobal.js +283 -0
  18. package/src/components/complexViewRendering.vue +601 -0
  19. package/src/components/ifmLink.vue +71 -0
  20. package/src/components/public/data/plDataCascader.vue +85 -0
  21. package/src/components/public/data/plDataRadio.vue +73 -0
  22. package/src/components/public/data/plDataRadioGroup.vue +70 -0
  23. package/src/components/public/data/plDataSelect.vue +856 -0
  24. package/src/components/public/data/plDatePicker.vue +159 -0
  25. package/src/components/public/org/bg.png +0 -0
  26. package/src/components/public/org/sysOrgPosUserSelect.vue +1237 -0
  27. package/src/components/public/org/sysOrgPosUserSelectDark.vue +1402 -0
  28. package/src/components/public/org/sysOrgPosUserSelectNew.vue +1527 -0
  29. package/src/components/public/upload/images/compress.png +0 -0
  30. package/src/components/public/upload/images/emipty.png +0 -0
  31. package/src/components/public/upload/images/excel.png +0 -0
  32. package/src/components/public/upload/images/file.png +0 -0
  33. package/src/components/public/upload/images/pdf.png +0 -0
  34. package/src/components/public/upload/images/powerpoint.png +0 -0
  35. package/src/components/public/upload/images/project.png +0 -0
  36. package/src/components/public/upload/images/sound.png +0 -0
  37. package/src/components/public/upload/images/txt.png +0 -0
  38. package/src/components/public/upload/images/video.png +0 -0
  39. package/src/components/public/upload/images/visio.png +0 -0
  40. package/src/components/public/upload/images/word.png +0 -0
  41. package/src/components/public/upload/plImage.vue +287 -0
  42. package/src/components/public/upload/plImgUpload.vue +137 -0
  43. package/src/components/public/upload/plUpload.vue +1124 -0
  44. package/src/components/public/upload/uploadImg.js +8 -0
  45. package/src/main.js +0 -0
  46. package/src/views/VueMenuView.vue +143 -0
  47. package/src/views/cloudMenuView.vue +125 -0
  48. package/src/views/complex/config/complex.vue +501 -0
  49. package/src/views/complex/config/complexSetting.vue +1250 -0
  50. package/src/views/complex/rendering/complexShow.vue +16 -0
  51. package/src/views/data/dataManage.vue +560 -0
  52. package/src/views/data/sysData.vue +292 -0
  53. package/src/views/event/eventManager/vueEventDiy.vue +1184 -0
  54. package/src/views/event/eventManager/vueEventMain.vue +108 -0
  55. package/src/views/event/eventManager/vueEventSys.vue +296 -0
  56. package/src/views/event/js/apiEvent.js +22 -0
  57. package/src/views/fileLog/fileDownloadLog.vue +437 -0
  58. package/src/views/initData/initData.vue +4316 -0
  59. package/src/views/log/dblog/logdbDevelop.vue +306 -0
  60. package/src/views/log/dblog/logdbEnt.vue +331 -0
  61. package/src/views/log/dblog/logdbGov.vue +395 -0
  62. package/src/views/log/error/logError.vue +553 -0
  63. package/src/views/log/loginlog/logManageDevOrSup.vue +357 -0
  64. package/src/views/log/loginlog/logManageEnt.vue +343 -0
  65. package/src/views/log/loginlog/logManageGov.vue +328 -0
  66. package/src/views/log/sms/logSms.vue +308 -0
  67. package/src/views/menu/component/menuManageComponent.vue +2402 -0
  68. package/src/views/menu/component/menuModule.vue +449 -0
  69. package/src/views/menu/menuLocal.vue +223 -0
  70. package/src/views/menu/menuManage.vue +1135 -0
  71. package/src/views/menu/tenantMenuManage.vue +1132 -0
  72. package/src/views/menuRouter/cview/cviewShow.vue +18 -0
  73. package/src/views/menuRouter/cviewMenuRouter.vue +183 -0
  74. package/src/views/menuRouter/menuView.vue +132 -0
  75. package/src/views/menuRouter/urlMenuRouter.vue +160 -0
  76. package/src/views/org/entOrgTree.vue +1050 -0
  77. package/src/views/org/ownerMenu/ownerMenuTree.vue +269 -0
  78. package/src/views/org/safeValidate/safeValidate.vue +469 -0
  79. package/src/views/org/sysEntOrgUserDetail.vue +3390 -0
  80. package/src/views/org/sysOrgDimension.vue +832 -0
  81. package/src/views/org/sysOrgPosUserDetail.vue +1648 -0
  82. package/src/views/org/sysOrgPosUserTree.vue +1101 -0
  83. package/src/views/org/sysOrgTree.vue +864 -0
  84. package/src/views/param/sysParam.vue +987 -0
  85. package/src/views/preview/pdfViewer.vue +82 -0
  86. package/src/views/resources/js/resourcesCommon.js +137 -0
  87. package/src/views/resources/resRouter/resView.vue +161 -0
  88. package/src/views/resources/resourcesTabs.vue +82 -0
  89. package/src/views/resources/tabs/comp/pageResPreview.vue +309 -0
  90. package/src/views/resources/tabs/comp/pageResRegister.vue +1120 -0
  91. package/src/views/resources/tabs/dataResources.vue +843 -0
  92. package/src/views/resources/tabs/pageResources.vue +970 -0
  93. package/src/views/role/allowMenu.vue +148 -0
  94. package/src/views/role/authRole/authRole.vue +427 -0
  95. package/src/views/role/authRole/component/allocateSetting.vue +1056 -0
  96. package/src/views/role/authRole/component/authSetting.vue +1196 -0
  97. package/src/views/role/commonRole/commonRole.vue +677 -0
  98. package/src/views/role/commonRole/compoment/allocateRoleMenuSetting.vue +335 -0
  99. package/src/views/role/commonRole/compoment/authLinkMenuTree.vue +55 -0
  100. package/src/views/role/commonRole/compoment/authSettingNew.vue +190 -0
  101. package/src/views/role/commonRole/compoment/commonSetting.vue +1576 -0
  102. package/src/views/role/commonRole/compoment/commonSettingAdjust.vue +584 -0
  103. package/src/views/role/commonRole/compoment/commonSettingNew.vue +572 -0
  104. package/src/views/role/commonRole/compoment/roleMenuPower.vue +226 -0
  105. package/src/views/role/commonRole/compoment/roleMenuPowerSetting.vue +69 -0
  106. package/src/views/role/commonRole/compoment/roleMenuSetting.vue +365 -0
  107. package/src/views/role/commonRole/compoment/roleSourceSetting.vue +229 -0
  108. package/src/views/role/commonRole/tenantCommonRole.vue +768 -0
  109. package/src/views/role/role.vue +135 -0
  110. package/src/views/role/roleMenuOption.vue +898 -0
  111. package/src/views/role/roleSynchroRemind.vue +399 -0
  112. package/src/views/role/sysRole.vue +1525 -0
  113. package/src/views/role/viewMenuOptDetail.vue +182 -0
  114. package/src/views/sms/sendSms.vue +164 -0
  115. package/src/views/station/orgStation.vue +561 -0
  116. package/src/views/tenant/appContentManager.vue +938 -0
  117. package/src/views/tenant/appManager.vue +642 -0
  118. package/src/views/tenant/tenantRoleManager.vue +670 -0
  119. package/src/views/tenant/tenantUserManager.vue +615 -0
  120. package/src/views/threeinone/compoment/safeCascadeSelect.vue +327 -0
  121. package/src/views/threeinone/init/safeInitRegion.vue +203 -0
  122. package/src/views/threeinone/safeManager.vue +927 -0
  123. package/src/views/threeinone/safeMenuManage.vue +565 -0
  124. package/src/views/threeinone/safeOrgSpv.vue +364 -0
  125. package/src/views/threeinone/safeSpv/safeSpvLeftTree.vue +109 -0
  126. package/src/views/threeinone/safeSpv/safeSpvMain.vue +335 -0
  127. package/src/views/threeinone/safeSpvEconView.vue +569 -0
  128. package/src/views/threeinone/safeValidateRegion.vue +328 -0
  129. package/src/views/urlResource/urlResource.vue +856 -0
  130. package/src/views/user/empowerUser/empowerEntUserManage.vue +415 -0
  131. package/src/views/user/empowerUser/empowerOrgTree.vue +167 -0
  132. package/src/views/user/empowerUser/empowerUserList.vue +633 -0
  133. package/src/views/user/empowerUser/empowerUserListMenuDeatil.vue +656 -0
  134. package/src/views/user/empowerUser/empowerUserListViewMenuTree.vue +257 -0
  135. package/src/views/user/empowerUser/empowerUserManage.vue +99 -0
  136. package/src/views/user/stationUserManage.vue +934 -0
  137. package/src/views/user/userManage.vue +737 -0
  138. package/src/views/user/userMangement.vue +938 -0
  139. package/src/views/user/viewMenu/viewMenu.vue +113 -0
  140. package/src/views/versionupdatetool/versionUpdateTool.vue +225 -0
  141. package/src/views/versionupdatetool/versioninfomation/verisonInfomationManagement.vue +68 -0
@@ -0,0 +1,148 @@
1
+ <template>
2
+ <el-container class="allow-menu-contain" style="height: 100%">
3
+ <el-header style="height: 45px" class="allow-menu-header">
4
+ <el-input v-model="filterText" style="width: 275px" size="small" placeholder="菜单名称"></el-input>
5
+ <el-button type="primary" @click="checkedAll()" size="small" icon="el-icon-check">全选</el-button>
6
+ <el-button type="info" @click="noCheckedAll()" size="small" icon="el-icon-close">全部取消</el-button>
7
+ </el-header>
8
+ <el-main style="overflow-y: auto;">
9
+ <common-tree :request-url="api.menu.find" parent-id="menuSjbh" :request-param="requestParam"
10
+ :defaultProps="defaultProps" :deal-tree-data="dealTreeData" :filter-text="filterText"
11
+ :render-content-func="renderContentFunc" :refresh-proper="roleId" :init-check="initCheck"
12
+ :init-call-back="initCallBack" ref="allowMenuTree"
13
+ >
14
+ </common-tree>
15
+ </el-main>
16
+ <el-footer style="text-align: center;line-height: 60px">
17
+ <el-button type="primary" @click="saveMenuSetting()" size="small" icon="el-icon-success">确 定</el-button>
18
+ <el-button @click="closeDialogFunc" size="small" icon="el-icon-error">取 消</el-button>
19
+ </el-footer>
20
+ </el-container>
21
+ </template>
22
+
23
+ <script>
24
+ export default {
25
+ name: "allow-menu",
26
+ props:{
27
+ roleId:{type:String,required:true}, // 当前角色id
28
+ nocdss:{type:String,required:false}, // 数据的过滤条件
29
+ closeDialog:{type:Function,default:null}, // 关闭对话框的办法
30
+ },
31
+ data(){
32
+ return {
33
+ defaultProps:{"label":"name","children":"children"},
34
+ requestParam:{'conditionMap.menuSfqy':"Y"},
35
+ filterText:"",
36
+ initCheck:{},
37
+ }
38
+ },
39
+ created(){
40
+ this.init();
41
+ },
42
+ watch:{
43
+ roleId(){
44
+ this.roleId && this.init();
45
+ }
46
+ },
47
+ methods:{
48
+ init(){
49
+ let vm = this;
50
+ vm.requestParam["nocdss"] = vm.nocdss;
51
+ vm.axios.post(vm.api.role.getById,{"id":vm.roleId}).then(function (res) {
52
+ //allowAllotMenu
53
+ vm.initCheck = {};
54
+ if(res.data){
55
+ let allowAllotMenu = JSON.parse(vm.platStringUtil.replaceAll(res.data.allowAllotMenu,"'","\"") || "{}");
56
+ let checkedKeys = allowAllotMenu["xz"] || "";
57
+ vm.initCheck["initCheck"] = checkedKeys.split(",");
58
+ }
59
+ })
60
+ },
61
+ dealTreeData(data){
62
+ data.forEach(function (each) {
63
+ each["name"] = each["menuName"] + "(" + each["cdss"] + ")";
64
+ })
65
+ },
66
+ renderContentFunc(h, { node, data, store }){
67
+ return (
68
+ <span class="model-color">
69
+ <i class={data.className}></i>
70
+ <span>{node.label}</span>
71
+ </span>
72
+ );
73
+ },
74
+ initCallBack(){
75
+ let vm = this;
76
+ let nodesMap = vm.$refs.allowMenuTree.getAllNode();
77
+ for(let [key,node] of Object.entries(nodesMap)){ // 展开已选择节点
78
+ if(node.checked){
79
+ node.expanded = true;
80
+ let parentNode = nodesMap[node.data.menuSjbh] || {}; // 子类选中展开父级
81
+ parentNode["expanded"] = true;
82
+ }
83
+ }
84
+ },
85
+ checkedAll(){
86
+ let vm = this;
87
+ vm.$refs.allowMenuTree.setTreeCheckedAll();
88
+ },
89
+ noCheckedAll(){
90
+ let vm = this;
91
+ vm.$refs.allowMenuTree.setTreeCheckedKeys([],true);
92
+ },
93
+ saveMenuSetting(){
94
+ let vm = this;
95
+ let checkedNodes = vm.$refs.allowMenuTree.getTreeCheckedNodes();
96
+ let checkedSet = new Set(); // 已选择菜单数据
97
+ let effectSet = new Set(); // 有效的菜单数据,包括路径
98
+ checkedNodes.forEach(function (data) {
99
+ checkedSet.add(data.id);
100
+ effectSet.add(data.id);
101
+ if(data.menuPath){
102
+ data.menuPath.split(",").forEach(function (each) {
103
+ effectSet.add(each);
104
+ })
105
+ }
106
+ });
107
+ let checkedArr = vm.setToArray(checkedSet);
108
+ let effectArr = vm.setToArray(effectSet);
109
+ let allowAllotMenu = {"xz":checkedArr.join(","),"sy":effectArr.join(",")};
110
+ vm.axios.post(vm.api.role.update,{"id":vm.roleId,"allowAllotMenu":JSON.stringify(allowAllotMenu)}).then(function (res) {
111
+ if(res.data.operateSuccess){
112
+ //主动刷新后台菜单缓存时间,重新抓取
113
+ vm.axios.post(vm.api.menu.initMenu).then(function (menuRes) {
114
+ vm.closeDialogFunc();
115
+ })
116
+ }
117
+ vm.$message({
118
+ duration:1200,
119
+ type:"success",
120
+ message:res.data.operateMessage
121
+ })
122
+ })
123
+ },
124
+ setToArray(set){ // set转array
125
+ let arr = [];
126
+ for(let item of set.keys()){
127
+ arr.push(item);
128
+ }
129
+ return arr;
130
+ },
131
+ closeDialogFunc(){
132
+ this.closeDialog && this.closeDialog();
133
+ }
134
+ }
135
+ }
136
+ </script>
137
+
138
+ <style scoped>
139
+ .allow-menu-contain /deep/ .el-main{
140
+ padding: 0;
141
+ }
142
+ .allow-menu-contain /deep/ .el-header{
143
+ padding-right: 0;
144
+ }
145
+ .allow-menu-header /deep/ .el-button{
146
+ margin-left: 10px;
147
+ }
148
+ </style>
@@ -0,0 +1,427 @@
1
+ <template>
2
+ <el-container style="height: 100%">
3
+ <el-header style="height: auto;">
4
+ <div class="search-form-parent el-card">
5
+ <el-form :inline="true" :model="crud.searchForm" size="small" class="demo-form-inline"
6
+ @keyup.enter.native="crud.doSearch()" onSubmit="return false;">
7
+ <el-form-item label="角色名">
8
+ <el-input v-model="crud.searchForm.roleName"></el-input>
9
+ </el-form-item>
10
+ <el-form-item label="菜单名">
11
+ <el-input v-model="crud.searchForm.menuName"></el-input>
12
+ </el-form-item>
13
+ <el-form-item label="角色状态">
14
+ <el-select v-model="crud.searchForm.roleStatus" placeholder="请选择">
15
+ <el-option label="正常" value="10"></el-option>
16
+ <el-option label="锁定" value="20"></el-option>
17
+ </el-select>
18
+ </el-form-item>
19
+ <el-form-item>
20
+ <el-button type="primary" icon="el-icon-search" @click="crud.doSearch()">查询</el-button>
21
+ <el-button icon="el-icon-close" @click="crud.resetSearch()">清空</el-button>
22
+ </el-form-item>
23
+ </el-form>
24
+ </div>
25
+ </el-header>
26
+
27
+ <el-main id="tableMain" style="height: 100%">
28
+ <el-container style="height:100%" class="table-list-container">
29
+ <el-header style="height: auto;" size="medium">
30
+ <el-button type="primary" size="small" round icon="el-icon-circle-plus" @click="add()">新增
31
+ </el-button>
32
+ <el-button type="warning" size="small" round @click="toggleLockedUser('20')"><i class="saspiconfont pl-icon-pwd"></i> 设为锁定
33
+ </el-button>
34
+ <el-button type="success" size="small" round @click="toggleLockedUser('10')"><i class="saspiconfont pl-icon-08" style="position: relative;top:-1px"></i> 解锁
35
+ </el-button>
36
+ <el-button type="danger" size="small" round icon="el-icon-delete" @click="remove()">删除
37
+ </el-button>
38
+ </el-header>
39
+ <el-main style="height: 100%;" ref="tableMain">
40
+ <el-table :data="crud.dataStore.records" :ref="crud.tableRef" stripe border height="100%" header-row-class-name="list-default-row"
41
+ style="width: 100%;">
42
+ <el-table-column type="selection" :selectable="allowCheck" width="50" align="center"></el-table-column>
43
+ <el-table-column label="角色编号" prop="roleNumber" width="150"></el-table-column>
44
+ <el-table-column label="角色名" prop="roleName"></el-table-column>
45
+ <el-table-column label="创建人" prop="roleCreater" width="150" :formatter="createFormatter"></el-table-column>
46
+ <!--<el-table-column label="拥有的菜单" prop="remark">-->
47
+ <!--<template slot-scope="scope" style="cursor: pointer">-->
48
+ <!--<span style="cursor:pointer;overflow-y: hidden;white-space:nowrap; text-overflow:ellipsis;">-->
49
+ <!--{{scope.row.remark}}-->
50
+ <!--</span>-->
51
+ <!--</template>-->
52
+ <!--</el-table-column>-->
53
+ <el-table-column label="角色状态" prop="roleStatus" width="150" align="center">
54
+ <template slot-scope="scope">
55
+ <el-tag :type="scope.row.roleStatus == '20'?'warning':'success'">
56
+ {{statusObj[(scope.row.roleStatus || "10")]}}
57
+ </el-tag>
58
+ </template>
59
+ </el-table-column>
60
+ <el-table-column label="操作" align="center" width="350">
61
+ <template slot-scope="scope">
62
+ <el-tooltip class="item" effect="dark" content="修改" placement="top-end">
63
+ <el-button type="primary" @click="roleUpdate(scope.row)" size="small"><i class="el-icon-edit"></i></el-button>
64
+ </el-tooltip>
65
+ <el-tooltip class="item" effect="dark" content="关联权限设置" placement="top-end">
66
+ <el-button type="primary" @click="roleSetting(scope.row)" size="small"><i class="saspiconfont pl-icon-quanxianshezhi"></i></el-button>
67
+ </el-tooltip>
68
+ <el-tooltip class="item" effect="dark" content="查看可分配菜单" placement="top-end">
69
+ <el-button type="primary" @click="viewRemark(scope.row)" icon="el-icon-zoom-in" size="small"></el-button>
70
+ </el-tooltip>
71
+ </template>
72
+ </el-table-column>
73
+ </el-table>
74
+ </el-main>
75
+ </el-container>
76
+ </el-main>
77
+ <el-footer>
78
+ <el-pagination
79
+ :ref="crud.pageRef"
80
+ :page-sizes="crud.pageSizes"
81
+ :page-size="crud.pageSize"
82
+ :current-page="crud.page"
83
+ :total="crud.dataStore.total"
84
+ @size-change="crud.sizeChange()"
85
+ @current-change="crud.currentPage()"
86
+ layout="total, sizes, prev, pager, next, jumper">
87
+ </el-pagination>
88
+ </el-footer>
89
+ <el-dialog :close-on-click-modal=false title="授权权限" width="60%" top="20vh" :visible.sync="crud.dialogVisible">
90
+ <el-form :model="crud.formData" :ref="crud.addFormRef">
91
+ <el-row>
92
+ <el-col :span="12">
93
+ <el-form-item label="角色编号" label-width="150px" prop="roleNumber" :rules="plValidate('number','required')">
94
+ <el-input v-model="crud.formData.roleNumber"></el-input>
95
+ </el-form-item>
96
+ </el-col>
97
+ <el-col :span="12">
98
+ <el-form-item label="角色名" label-width="150px" prop="roleName" :rules="rules.roleName">
99
+ <el-input v-model="crud.formData.roleName"></el-input>
100
+ </el-form-item>
101
+ </el-col>
102
+ </el-row>
103
+ <el-row>
104
+ <el-col :span="12">
105
+ <el-form-item label="角色状态" label-width="150px" prop="roleNumber" :rules="plValidate('required')">
106
+ <el-select v-model="crud.formData.roleStatus" style="width: 100%">
107
+ <el-option label="正常" value="10"></el-option>
108
+ <el-option label="锁定" value="20"></el-option>
109
+ </el-select>
110
+ </el-form-item>
111
+ </el-col>
112
+ </el-row>
113
+ </el-form>
114
+ <div slot="footer" class="dialog-footer">
115
+ <el-button type="primary" @click="roleFormSubmit()" size="small" icon="el-icon-success">确 定</el-button>
116
+ <el-button @click="crud.dialogVisible = false" size="small" icon="el-icon-error">取 消</el-button>
117
+ </div>
118
+ </el-dialog>
119
+ <el-dialog :close-on-click-modal=false width="80%" height="90%" top="5vh" :visible.sync="roleSettingDialog" class="role-setting-class">
120
+ <auth-setting ref="authRef" :currentRowObj="currentRowObj" :roleSettingDialog="roleSettingDialog"
121
+ v-if="roleSettingDialog"
122
+ @closeSettingDialog="closeSettingDialog">
123
+ </auth-setting>
124
+ <div slot="footer" class="dialog-footer">
125
+ <el-button type="primary" @click="saveSetting()" size="small" icon="el-icon-success">保 存</el-button>
126
+ <el-button @click="roleSettingDialog = false" size="small" icon="el-icon-error">取 消</el-button>
127
+ </div>
128
+ </el-dialog>
129
+ <el-dialog :close-on-click-modal=false title="查看当前角色菜单" width="400px" height="80%" top="10vh" :visible.sync="viewMenuDialog" class="view-menu-dialog">
130
+ <view-menu-opt-detail :role-id="viewMenuRoleId" :refresh-proper="viewMenuDialog"></view-menu-opt-detail>
131
+ <div slot="footer" class="dialog-footer">
132
+ <el-button type="primary" @click="viewMenuDialog = false" size="small" icon="el-icon-error">关闭</el-button>
133
+ </div>
134
+ </el-dialog>
135
+ </el-container>
136
+ </template>
137
+
138
+ <script>
139
+ import AuthSetting from "./component/authSetting";
140
+ import ViewMenuOptDetail from "../viewMenuOptDetail";
141
+ import CommonSettingNew from "../commonRole/compoment/commonSettingNew";
142
+ import AuthSettingNew from "../commonRole/compoment/authSettingNew";
143
+ export default {
144
+ name: "auth-role",
145
+ components: {AuthSettingNew, CommonSettingNew, ViewMenuOptDetail, AuthSetting},
146
+ data() {
147
+ //表单视图名称唯一性验证
148
+ let roleNameValidate =(rule,value,callback) => {
149
+ if(!value){
150
+ callback();
151
+ }
152
+ this.axios.post(this.api.role.find,{roleType:'empower',roleNameEq:value,created:this.loginUser.id}).then(res =>{
153
+ if((res.data ||[]).length == 0 || (this.operate == 'update' && this.oldRoleName == value)){
154
+ callback();
155
+ }else{
156
+ return callback(new Error('该角色名称已经存在!'));
157
+ }
158
+ });
159
+ };
160
+ return {
161
+ crud: new this.CrudUtil({
162
+ vue: this,
163
+ entityName: "role",
164
+ url: this.api.role.url,
165
+ searchUrl:this.api.role.findPage,
166
+ addDefaultData:{"roleType":"empower"},
167
+ searchForm:{"roleType":"empower","orderSql":"ROLE_NUMBER ASC"}, // 授权角色类型直接写死了,就不需要系统参数了
168
+ noClearSearchColumns: ["orderSql","created","roleType"],
169
+ initNoSearch:true
170
+ }),
171
+ currentRowObj:{},
172
+ statusObj:{"10":"正常","20":"锁定"},
173
+ roleSettingDialog:false, // 关联权限设置对话框
174
+ viewMenuDialog:false,
175
+ viewMenuRoleId:"",
176
+ entEmpowerUserRole:"",//企业授权用户默认授权角色权限
177
+
178
+ //唯一标识验证
179
+ rules:{
180
+ //表单视图唯一性
181
+ roleName:[
182
+ {required: true, message: '该输入项为必输项'},
183
+ {validator:roleNameValidate,trigger:'blur'}
184
+ ],
185
+ },
186
+ operate:'add', //操作
187
+ oldRoleName:'',
188
+ }
189
+ },
190
+ created(){
191
+ this.init();
192
+ },
193
+ methods:{
194
+ init(){
195
+ let vm = this;
196
+ vm.axios.post(vm.api.param.getSysParams,{"key":"entEmpowerUserRole"}).then(result => {
197
+ vm.entEmpowerUserRole = result.data || "";
198
+ vm.loginUser = vm.USER_GLOBAL.getLoginUser() || {};
199
+ vm.crud.searchForm["created"] = vm.loginUser.id;
200
+ vm.crud.search();
201
+ });
202
+ },
203
+ allowCheck(row){ // 与系统参数配置的企业默认授权id相同的角色数据不可以被删除
204
+ return !(row.id == this.entEmpowerUserRole);
205
+ },
206
+ viewRemark(row){
207
+ let vm = this;
208
+ if(row.roleStatus == "20"){
209
+ vm.$message({
210
+ duration:1200,
211
+ message:"该角色已被锁定,请解除锁定后继续操作!"
212
+ });
213
+ return;
214
+ }
215
+ this.viewMenuRoleId = row.id;
216
+ this.viewMenuDialog = true;
217
+ },
218
+ roleUpdate(row){
219
+ let vm = this;
220
+ if(row.roleStatus == "20"){
221
+ vm.$message({
222
+ duration:1200,
223
+ message:"该角色已被锁定,请解除锁定后继续操作!"
224
+ });
225
+ return;
226
+ }
227
+ this.operate = "update";
228
+ this.oldRoleName = row.roleName;
229
+ vm.crud.update(row);
230
+ },
231
+ roleSetting(row){
232
+ let vm = this;
233
+ if(row.roleStatus == "20"){
234
+ vm.$message({
235
+ duration:1200,
236
+ message:"该角色已被锁定,请解除锁定后继续操作!"
237
+ });
238
+ return;
239
+ }
240
+ vm.currentRowObj = row;
241
+ vm.roleSettingDialog = true;
242
+ },
243
+ roleFormSubmit(){
244
+ let vm = this;
245
+ vm.$refs[vm.crud.addFormRef].validate(valid => {
246
+ if(!valid){
247
+ return;
248
+ }
249
+ let formData = vm.crud.formData;
250
+ if(formData.id){
251
+ formData.updated = vm.loginUser.id;
252
+ vm.crud.axios.post(vm.api.role.settingLockedRole, {"ids": formData.id,"roleStatus":formData.roleStatus});
253
+ }
254
+ if(!formData.created){
255
+ formData.created = vm.loginUser.id;
256
+ }
257
+ formData.roleCreater = vm.loginUser.userName;
258
+ vm.crud.formSubmit();
259
+ });
260
+ },
261
+ toggleLockedUser(status){
262
+ let vm = this;
263
+ let selection = vm.$refs[vm.crud.setting.tableRef].selection;
264
+ if((selection || []).length == 0){
265
+ vm.$message({
266
+ message:"请选择要操作的角色!",
267
+ duration:1500
268
+ });
269
+ return;
270
+ }
271
+ let message = '角色锁定时,该角色关联的所有权限都将锁定无法使用,确认锁定吗?';
272
+ if(status == '10'){
273
+ message = '是否要将选中的角色设置为正常?';
274
+ }
275
+ vm.$confirm(message, '提示', {
276
+ confirmButtonText: '确定',
277
+ cancelButtonText: '取消',
278
+ dangerouslyUseHTMLString: true
279
+ }).then(function () {
280
+ let arrIds = [];
281
+ selection.forEach(function (data) {
282
+ arrIds.push(data.id);
283
+ });
284
+ vm.crud.axios.post(vm.api.role.settingLockedRole, {"ids": arrIds.join(","),"roleStatus":status}).then(function (response) {
285
+ let obj = {"10":"解锁","20":"锁定"};
286
+ let remindMessage = obj[status] + (response.data.operateSuccess ? "成功" : "失败");
287
+ vm.$message({
288
+ type: 'success',
289
+ message: remindMessage
290
+ });
291
+ vm.crud.search();
292
+ });
293
+ });
294
+ },
295
+ add(){
296
+ let vm = this;
297
+ vm.crud.addDefaultData["roleType"] = "empower";
298
+ vm.crud.addDefaultData["roleStatus"] = "10";
299
+ if(vm.loginUser.userType == "sup"){ // 用户是开发者,
300
+ vm.crud.addDefaultData["parentRoleTree"] = "-1";
301
+ vm.crud.add();
302
+ }else{
303
+ if(!vm.loginUser.empowerId){
304
+ vm.$message({
305
+ duration:1200,
306
+ message:"当前用户没有授权数据,无法新增!"
307
+ });
308
+ return;
309
+ }
310
+ vm.axios.post(vm.api.role.getById,{"id":vm.loginUser.empowerId}).then(res => {
311
+ let data = res.data;
312
+ if(!data.parentRoleTree){
313
+ vm.$message({
314
+ duration:1200,
315
+ message:"当前用户数据异常,请联系管理员!"
316
+ });
317
+ return;
318
+ }
319
+ vm.crud.addDefaultData["parentRoleTree"] = data.parentRoleTree + "," + data.id;
320
+ vm.crud.add();
321
+ })
322
+ }
323
+ },
324
+ remove(){ // 将下级role_id数据一起移除,同时将role_user,role_menu_opt清空
325
+ let vm = this;
326
+
327
+ let selection = vm.$refs[vm.crud.setting.tableRef].selection;
328
+ if ((selection || []).length === 0) {
329
+ vm.$message({
330
+ duration: 1500,
331
+ type: 'info',
332
+ message: '请至少选择一条需要删除的数据!'
333
+ });
334
+ return;
335
+ }
336
+
337
+ vm.$confirm('是否确定删除?这将会清空所有下级关联数据包括权限数据!', '警告', {
338
+ confirmButtonText: '确定',
339
+ cancelButtonText: '取消',
340
+ }).then(function () {
341
+ // 避免重复遮罩
342
+ vm.crud.searchLoading && vm.crud.searchLoading.close();
343
+ vm.crud.searchLoading = vm.$loading({
344
+ target: vm.$refs[vm.crud.tableRef].$el,
345
+ lock: true,
346
+ text: '正在删除,请稍后...',
347
+ spinner: 'el-icon-loading',
348
+ background: 'rgba(0, 0, 0, 0.6)'
349
+ });
350
+ let arrIds = [];
351
+ selection.forEach(function (data) {
352
+ arrIds.push(data.id);
353
+ });
354
+ vm.axios.post(vm.api.role.linkRemove,{"ids":arrIds.join(",")}).then(res => {
355
+ vm.crud.searchLoading && vm.crud.searchLoading.close();
356
+ vm.$message({
357
+ type: 'success',
358
+ message: res.data.operateMessage
359
+ });
360
+ vm.crud.search();
361
+ })
362
+ });
363
+ },
364
+ createFormatter(row){ // 格式化列数据
365
+ return row["roleCreater"] || row["createName"];
366
+ },
367
+ saveSetting(){
368
+ this.$refs.authRef.save();
369
+ },
370
+ closeSettingDialog(){
371
+ this.roleSettingDialog = false;
372
+ this.crud.search();
373
+ }
374
+ }
375
+ }
376
+ </script>
377
+
378
+ <style scoped>
379
+ .role-setting-class /deep/ .el-dialog__body{
380
+ padding: 0;
381
+ }
382
+ .role-setting-class /deep/ .el-tabs{
383
+ height: 100%;
384
+ }
385
+ .role-setting-class /deep/ .el-tabs__content{
386
+ height: calc(100% - 60px);
387
+ }
388
+ .role-setting-class /deep/ .el-tab-pane{
389
+ height: 100%;
390
+ }
391
+ /*.role-setting-class /deep/ .el-card__header{
392
+ background-color: white;
393
+ color:black;
394
+ height: 30px;
395
+ line-height: 30px;
396
+ font-size: 16px;
397
+ box-sizing: border-box;
398
+ border: 0;
399
+ }*/
400
+ .role-setting-class /deep/ .el-card__body{
401
+ min-height: 50px;
402
+ }
403
+ .role-setting-class /deep/ .el-card{
404
+ padding: 5px;
405
+ box-sizing: border-box;
406
+ min-height: 50px;
407
+ }
408
+ .role-setting-class /deep/ .role-menu-opt-card-card{
409
+ min-height: 50px;
410
+ text-align: center;
411
+ line-height: 50px;
412
+ }
413
+ .role-setting-class /deep/ .el-dialog__header{
414
+ border: 0;
415
+ padding: 10px;
416
+ }
417
+ .role-setting-class /deep/ .el-dialog__body{
418
+ height: calc(100% - 62px);
419
+ }
420
+ .role-setting-class /deep/ .el-dialog > .el-dialog__body{
421
+ top: 10px;
422
+ }
423
+ .role-setting-class /deep/ .el-dialog__headerbtn{
424
+ z-index: 99;
425
+ }
426
+
427
+ </style>