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,670 @@
1
+ <template>
2
+ <el-container class="form-list" style="height: 100%;">
3
+ <el-header style="height: auto;">
4
+ <div class="search-form-parent el-card">
5
+ <el-form :inline="true" size="small" class="demo-form-inline" onSubmit="return false;">
6
+ <el-form-item label="角色名称">
7
+ <el-input v-model="crud.searchForm.roleName"></el-input>
8
+ </el-form-item>
9
+ <el-form-item label="租户菜单">
10
+ <el-input v-model="crud.searchForm.roleAuth"></el-input>
11
+ </el-form-item>
12
+ <el-form-item>
13
+ <el-button type="primary" icon="el-icon-search" @click="crud.doSearch()">查询</el-button>
14
+ <el-button icon="el-icon-close" @click="crud.resetSearch()">清空</el-button>
15
+ </el-form-item>
16
+ </el-form>
17
+ </div>
18
+ </el-header>
19
+ <el-main style="padding:10px 0 0 0;height: 100%;">
20
+ <el-container style="height: 100%;">
21
+ <el-header style="height: auto;">
22
+ <el-button type="primary" size="small" round icon="el-icon-circle-plus" @click="addTenantRole()">新增</el-button>
23
+ <el-button type="danger" size="small" round icon="el-icon-delete" @click="removeTenantRole()">删除</el-button>
24
+ <el-button type="success" size="small" round @click="changeSelectRoleStatus('1')">启用角色</el-button>
25
+ <el-button type="danger" size="small" round @click="changeSelectRoleStatus('0')">禁用角色</el-button>
26
+ </el-header>
27
+ <el-main style="padding-top:10px;height: 100%;">
28
+ <el-table :data="crud.dataStore.records" :ref="crud.tableRef" stripe border height="100%"
29
+ :header-cell-style="headerCellStyle"
30
+ style="width: 100%;">
31
+ <el-table-column type="selection" width="40" align="center"></el-table-column>
32
+ <el-table-column type="index" label="序号" align="center" width="60"></el-table-column>
33
+ <el-table-column label="角色名称" prop="roleName" align="center" width="120" show-overflow-tooltip></el-table-column>
34
+ <el-table-column label="租户菜单权限" prop="menuNameStr" align="center" min-width="200" show-overflow-tooltip>
35
+ <template slot-scope="scope">
36
+ {{formatterMenuName(scope.row.menuNameStr)}}
37
+ </template>
38
+ </el-table-column>
39
+ <el-table-column label="绑定租户" prop="tenantName" align="center" min-width="200" show-overflow-tooltip>
40
+ <template slot-scope="scope">
41
+ <el-popover
42
+ placement="bottom"
43
+ width="300"
44
+ :content="scope.row.tenantName"
45
+ trigger="click">
46
+ <div slot="reference">
47
+ {{scope.row.tenantName}}
48
+ </div>
49
+ </el-popover>
50
+ </template>
51
+ </el-table-column>
52
+ <el-table-column label="角色状态" prop="roleStatus" align="center" width="100" show-overflow-tooltip>
53
+ <template slot-scope="scope" >
54
+ <el-tag :type="roleStatusTypeObj[scope.row.roleStatus]" @click="changeRoleStatus(scope.row)" style="cursor: pointer">
55
+ {{roleStatusTextObj[scope.row.roleStatus]}}
56
+ </el-tag>
57
+ </template>
58
+ </el-table-column>
59
+
60
+ <el-table-column label="操作" align="center" width="410">
61
+ <template slot-scope="scope">
62
+ <el-button size="mini" icon="el-icon-edit"
63
+ type="primary" @click="update(scope.row)" >修改</el-button>
64
+ <el-popover
65
+ placement="bottom"
66
+ width="500"
67
+ v-model="scope.row.empowermentClick"
68
+ style="margin-left: 10px;margin-right: 10px"
69
+ trigger="manual">
70
+ <el-form size="small">
71
+ <el-form-item style="margin-bottom: 0"
72
+ v-if="scope.row.empowermentClick"
73
+ label="选择租户" :prop="'records.' + scope.$index + '.tenantUserId'" label-width="110px">
74
+ <el-select v-model="scope.row.tenantUserId" multiple filterable clearable >
75
+ <el-option v-for="tenantUser in tenantUserArr" :key="tenantUser.id"
76
+ :label="tenantUser.tenantName"
77
+ :value="tenantUser.id">
78
+ </el-option>
79
+ </el-select>
80
+ <el-button type="primary" style="margin-left: 10px" @click="rapidEmpowerment(scope.row,scope.row.tenantUserId,'1')">确定</el-button>
81
+ </el-form-item>
82
+ </el-form>
83
+ <el-button size="mini" icon="el-icon-view" slot="reference"
84
+ @click="clickRapidEmp(scope.row)"
85
+ type="warning" >
86
+ 快速赋权
87
+ </el-button>
88
+ </el-popover>
89
+
90
+ <el-popover
91
+ placement="bottom"
92
+ width="500"
93
+ v-model="scope.row.unEmpowermentClick"
94
+ trigger="manual">
95
+ <el-form size="small">
96
+ <el-form-item label="解权租户" style="margin-bottom: 0"
97
+ v-if="scope.row.unEmpowermentClick"
98
+ label-width="110px" :prop="'records.' + scope.$index + '.unTenantUserId'">
99
+ <el-select v-model="scope.row.unTenantUserId" multiple filterable clearable>
100
+ <el-option v-for="tenantUser in tenantUnUserArr" :key="tenantUser.id"
101
+ :label="tenantUser.tenantName"
102
+ :value="tenantUser.id">
103
+ </el-option>
104
+ </el-select>
105
+ <el-button type="primary" style="margin-left: 10px" @click="rapidEmpowerment(scope.row,scope.row.unTenantUserId,'0')">确定</el-button>
106
+ </el-form-item>
107
+ </el-form>
108
+ <el-button size="mini" icon="el-icon-view" slot="reference"
109
+ @click="clickUnRapidEmp(scope.row)"
110
+ type="danger" >快速解权</el-button>
111
+ </el-popover>
112
+ </template>
113
+ </el-table-column>
114
+ </el-table>
115
+ </el-main>
116
+ <el-footer style="height: 40px">
117
+ <el-pagination
118
+ :ref="crud.pageRef"
119
+ :page-sizes="crud.pageSizes"
120
+ :page-size="crud.pageSize"
121
+ :current-page="crud.page"
122
+ :total="crud.dataStore.total"
123
+ @size-change="crud.sizeChange()"
124
+ @current-change="crud.currentPage()"
125
+ layout="total, sizes, prev, pager, next, jumper">
126
+ </el-pagination>
127
+ </el-footer>
128
+ </el-container>
129
+ </el-main>
130
+
131
+ <el-dialog :close-on-click-modal=false :title="dialogTitle" top="5vh"
132
+ :visible.sync="crud.dialogVisible"
133
+ width="40%"
134
+ height="90%"
135
+ v-loading="loading"
136
+ element-loading-text="请稍后..."
137
+ element-loading-spinner="el-icon-loading"
138
+ element-loading-background="rgba(0, 0, 0, 0.4)"
139
+ append-to-body>
140
+ <el-form :model="crud.formData" :ref="crud.addFormRef" label-width="110px" :disabled="operate == 'view'" style="height: 100%;width: 100%;overflow-y: hidden">
141
+ <el-form-item label="角色名称" prop="roleName" :rules="operate!='view'? rules.roleName: null" >
142
+ <el-input v-model="crud.formData.roleName" maxlength="50" show-word-limit ></el-input>
143
+ </el-form-item>
144
+ <el-form-item label="选择租户">
145
+ <el-select v-model="crud.formData.roleTenantIdArr" multiple filterable clearable style="width: 100%">
146
+ <el-option v-for="tenantUser in tenantUserArr" :key="tenantUser.id"
147
+ :label="tenantUser.tenantName"
148
+ :value="tenantUser.id">
149
+ </el-option>
150
+ </el-select>
151
+ </el-form-item>
152
+
153
+ <el-form-item label="菜单权限" style="height: calc(100% - 130px)" class="tree-item">
154
+ <el-input v-model="filterText" size="small"
155
+ prefix-icon="el-icon-search" style="margin-bottom: 10px;" placeholder="输入关键字过滤"></el-input>
156
+ <div class="treeClass">
157
+ <common-tree
158
+ v-if="treeShow"
159
+ ref="commonTreeRef"
160
+ :request-url="api.menu.find"
161
+ :request-param="menuInitparam"
162
+ parent-id="menuChiefNum"
163
+ :default-props="defaultProps"
164
+ :filterText="filterText"
165
+ :init-check="initCheck"
166
+ :expandOnclickNode=false
167
+ :initCallBack="initCallBack"
168
+ :renderContentFunc="renderContent"
169
+ default-expand-all
170
+ >
171
+ </common-tree>
172
+ </div>
173
+ </el-form-item>
174
+ </el-form>
175
+ <div slot="footer" class="dialog-footer">
176
+ <el-button v-if="operate != 'view'" type="primary" @click="submitForm()" :disabled="loading" size="small" icon="el-icon-success">确 定</el-button>
177
+ <el-button @click="crud.dialogVisible = false" size="small" :disabled="loading" icon="el-icon-error">{{operate == 'view'? '关 闭':'取 消'}}</el-button>
178
+ </div>
179
+ </el-dialog>
180
+ </el-container>
181
+
182
+
183
+ </template>
184
+
185
+ <script>
186
+ //租户角色管理
187
+ import CommonTree from "../../../../sasp-base/src/components/public/plTree";
188
+ export default {
189
+ name: "tenantRoleManager",
190
+ components: {CommonTree},
191
+ data(){
192
+ //角色名唯一校验
193
+ let roleNameValidate = (rule,value,callback) => {
194
+ if(!value){
195
+ callback();
196
+ }
197
+ this.axios.post(this.api.SysTenantRole.find,{roleName:value}).then(res =>{
198
+ if((res.data ||[]).length == 0 || (this.operate == 'update' && this.oldRoleName == value)){
199
+ callback();
200
+ }else{
201
+ return callback(new Error('该角色名已经存在!'));
202
+ }
203
+ });
204
+ };
205
+ return{
206
+ crud: new this.CrudUtil({
207
+ vue: this,
208
+ entityName: "SysTenantRole",
209
+ url: this.api.SysTenantRole.url,
210
+ searchUrl:this.api.SysTenantRole.findPageParam,
211
+ searchForm: {order:"UPDATE_TIME DESC,CREATE_TIME DESC"},
212
+ noClearSearchColumns:["order"],
213
+ }),
214
+ tenantTypeObj:{
215
+ "group":"团体",
216
+ "person":"个人"
217
+ },
218
+ operate:'add', //操作类型
219
+
220
+ dialogTitle:'',
221
+ oldTenantAccount:'',//修改前手机号码
222
+ oldTenantLoginCode:'',//修改前 登录标识
223
+ tenantPageArr:[], //登录页
224
+ tenantThemeArr:[], //主题配置
225
+ tenantAuthArr:[], //租户权限
226
+ paramFieldArr:["tenantName","tenantAccount","tenantType","tenantPage","tenantTheme","tenantAuth","tenantLogincode"],
227
+ loading:false,//加载
228
+
229
+ treeShow:false,
230
+ menuInitparam:{},
231
+ defaultProps: {
232
+ children: 'children',
233
+ label: 'menuName'
234
+ },
235
+ initCheck:{initCheck:""},
236
+ filterText:'',//搜索菜单的参数
237
+ oldRoleName:'', //原角色名
238
+ rules:{
239
+ roleName:[
240
+ {required: true, message: '该输入项为必输项'},
241
+ {validator:roleNameValidate,trigger:'blur'}
242
+ ]
243
+ },
244
+ roleStatusTextObj:{
245
+ "1":"正常",
246
+ "0":"禁用",
247
+ "":"正常"
248
+ },
249
+ roleStatusTypeObj:{
250
+ "1":"success",
251
+ "0":"danger",
252
+ "":"success"
253
+ },
254
+ empowermentClick:false,
255
+ tenantUserArr:[], //租户
256
+ tenantUnUserArr:[], //快速解权用户
257
+
258
+ oldRoleTenantIdArr:[], //角色配置中租户arr
259
+ }
260
+ },
261
+
262
+ created(){
263
+ this.initAllTenantUser();
264
+ },
265
+ methods:{
266
+ /**
267
+ * 获取租户信息
268
+ */
269
+ initAllTenantUser(){
270
+ this.tenantUserArr = [];
271
+ this.axios.post(this.api.SysTenant.getAllTenantUser).then(res =>{
272
+ if(res && res.data){
273
+ this.tenantUserArr = res.data || [];
274
+ }
275
+ });
276
+ },
277
+ /**
278
+ * 初始化租户相关信息
279
+ */
280
+ initMenuData(){
281
+ //获取系统参数 中 登录页面 和主题配置
282
+ this.treeShow =false;
283
+ this.menuInitparam={'order':'MENU_ORDER','cdss':"dev"};
284
+ this.$nextTick(() => {
285
+ this.treeShow =true;
286
+ })
287
+ },
288
+
289
+ addTenantRole(){
290
+ this.operate = "add";
291
+ this.dialogTitle = "租户权限设置";
292
+
293
+ this.initMenuData();
294
+
295
+ //获取最新租户权限配置
296
+
297
+ this.crud.add();
298
+ this.$set(this.crud.formData,'tenantType','group'); //默认团体用户
299
+ this.$set(this.crud.formData,'tenantPage','default'); //默认登录页
300
+ this.$set(this.crud.formData,'tenantTheme','default'); //默认主题
301
+ this.$set(this.crud.formData,'roleTenantIdArr',[]);
302
+ this.oldRoleTenantIdArr = [];
303
+ //生成数据标识
304
+ this.$nextTick(() => {
305
+ this.$refs[this.crud.addFormRef].clearValidate(); //刷新校验
306
+ });
307
+ },
308
+
309
+ /**
310
+ * 删除租户角色
311
+ */
312
+ removeTenantRole(){
313
+ let selection = this.$refs[this.crud.tableRef].selection || [];
314
+ if(selection.length == 0){
315
+ this.$message({
316
+ duration: 1500,
317
+ type: 'info',
318
+ message: '请至少选择一条需要删除的数据!'})
319
+ return;
320
+ }
321
+ this.$confirm('是否确定删除选择的“' + selection.length + '”条数据?', '警告', {
322
+ confirmButtonText: '确定',
323
+ cancelButtonText: '取消',
324
+ }).then(()=> {
325
+ let deleteIds = [];
326
+ let tenantIds = "";
327
+ selection.forEach(item =>{
328
+ deleteIds.push(item.id);
329
+ if(item.tenantId){
330
+ tenantIds += ","+item.tenantId;
331
+ }
332
+ });
333
+ let loading = this.$loading({
334
+ target: this.$refs[this.crud.tableRef].$el,
335
+ lock: true,
336
+ text: '正在删除,请稍后...',
337
+ spinner: 'el-icon-loading',
338
+ background: 'rgba(0, 0, 0, 0.6)'
339
+ });
340
+ if(tenantIds){
341
+ tenantIds = tenantIds.substring(1);
342
+ }
343
+ this.axios.post(this.api.SysTenantRole.removeTenantRole,{delteIds:deleteIds.join(","),tenantIds:tenantIds}).then(res =>{
344
+ if(res && res.data){
345
+ loading && loading.close();
346
+ if(res.data.requestStatus == '1'){
347
+ this.$message({
348
+ type: 'success',
349
+ message: res.data.message || '删除成功!'
350
+ });
351
+ this.crud.search();
352
+ }else {
353
+ this.$message({
354
+ type: 'error',
355
+ message: res.data.message || '删除失败!'
356
+ });
357
+ }
358
+
359
+ }
360
+ });
361
+ });
362
+
363
+ },
364
+
365
+ update(row){
366
+ this.oldRoleName = row.roleName;
367
+ this.operate = "update";
368
+ this.dialogTitle = "租户权限设置";
369
+ let editObj = JSON.parse(JSON.stringify(row));
370
+ //根据权限
371
+ let roleAuth = editObj.roleAuth || '';
372
+ console.log("roleAuth...",roleAuth);
373
+ let roleChecekdArr = roleAuth.split(",") || [];
374
+ this.initMenuData();
375
+ //数据标识
376
+ this.crud.update(editObj);
377
+ this.oldRoleTenantIdArr = editObj.tenantIdArr || [];
378
+ this.$set(this.crud.formData,'roleTenantIdArr',editObj.tenantIdArr || []);
379
+ this.$set(this.initCheck,"initCheck",roleChecekdArr);
380
+ //获取绑定
381
+ this.$nextTick(() => {
382
+ this.$refs[this.crud.addFormRef].clearValidate(); //刷新校验
383
+ });
384
+ },
385
+
386
+
387
+
388
+ /**
389
+ * 自动生成登录标识
390
+ */
391
+ getLoginCode(){
392
+ this.$set(this.crud.formData,'tenantLogincode',this.COMMON_FUNC.getUuidByParams(32));
393
+ },
394
+
395
+ /**
396
+ * 生成数据标识并判断是否重复
397
+ */
398
+ getDatacode(datacode){
399
+ return new Promise(resolve => {
400
+ this.axios.post(this.api.SysTenant.find,{tenantDatacode:'TEN_'+datacode}).then(res =>{
401
+ if((res.data ||[]).length == 0){
402
+ resolve(datacode)
403
+ }else {
404
+ this.getDatacode(this.COMMON_FUNC.getUuidByParams(8).toUpperCase()); //递归判断
405
+ }
406
+ });
407
+ })
408
+ },
409
+
410
+ // /**
411
+ // * 点击节点s事件
412
+ // */
413
+ // nodeClick(data, node) {
414
+ // let vm = this;
415
+ //
416
+ // },
417
+
418
+ /**
419
+ * 初始化树
420
+ */
421
+ initCallBack(nodeTree){
422
+ //禁用状态
423
+ if(this.operate == 'view'){ //查看状态
424
+ this.disabelTree(nodeTree.data || []);
425
+ }
426
+ },
427
+ /**
428
+ * 禁用树
429
+ */
430
+ disabelTree(treeData){
431
+ treeData.forEach(item =>{
432
+ this.$set(item,'disabled',true);
433
+ if(item.children && item.children.length > 0){
434
+ let arr = item.children;
435
+ this.disabelTree(arr);
436
+ }
437
+ });
438
+ },
439
+
440
+ /**
441
+ * 渲染树
442
+ */
443
+ renderContent(h, {node, data, store}) {
444
+ if (node.data.menuIsUse == "N") {
445
+ return (
446
+ <span class={node.level === 1 ? 'model-color' : ''}
447
+ style={node.level === 1 ? 'letter-spacing:1px' : ''}>
448
+ <i class={data.menuIcon}></i>
449
+ <span
450
+ style={node.level === 2 ? 'font-weight:bold;text-decoration:line-through;font-style:italic;color:#ccc;'
451
+ : "text-decoration:line-through;font-style:italic;color:#ccc;"}>{node.label}</span>
452
+ </span>
453
+ );
454
+ }
455
+ return (
456
+ <span class={node.level === 1 ? 'model-color' : ''}
457
+ style={node.level === 1 ? 'letter-spacing:1px' : ''}>
458
+ <i class={data.menuIcon}></i>
459
+ <span style={node.level === 2 ? 'font-weight:bold' : ""}>{node.label}</span>
460
+ </span>
461
+ );
462
+ },
463
+
464
+
465
+ /**
466
+ * 保存租户信息
467
+ */
468
+ submitForm(){
469
+ this.$refs[this.crud.addFormRef].validate(validate => {
470
+ if(!validate){
471
+ return;
472
+ }
473
+ //获取勾选的菜单
474
+ let checkNodeArr = this.$refs.commonTreeRef.getTreeCheckedNodes("key");
475
+ if(checkNodeArr.length == 0){
476
+ this.$message("请勾选菜单");
477
+ return;
478
+ }
479
+ this.loading = true; //防止重复点击
480
+ let roleAuth = ","+checkNodeArr.join(",");
481
+ let url = this.api.SysTenantRole.add; //默认添加用户
482
+ let paramObj = {};
483
+ if(this.operate == "update"){
484
+ url = this.api.SysTenantRole.update;
485
+ paramObj["id"] = this.crud.formData.id;
486
+ }
487
+ paramObj["roleName"] = this.crud.formData.roleName;
488
+ paramObj["roleAuth"] = roleAuth;
489
+ paramObj["roleStatus"] = "1"; //默认的角色状态
490
+ this.axios.post(url,paramObj).then(res =>{
491
+ //修改关联租户信息
492
+ if(res.data && res.data.operateSuccess){
493
+ //同步更新关联租户
494
+ let roleObj = res.data.operateObj;
495
+ this.axios.post(this.api.SysTenant.saveRoleSynChangeEmpower,{"authId":roleObj.id,"tenantUserIds":this.crud.formData.roleTenantIdArr.join(','),
496
+ "oldTeantUserIds":this.oldRoleTenantIdArr.join(",")}).then(rets =>{
497
+ if(rets.data && rets.data.requestStatus == '1'){
498
+ this.crud.search();
499
+ this.crud.dialogVisible = false;
500
+ }
501
+ })
502
+ }
503
+ this.loading = false;
504
+
505
+ })
506
+ });
507
+ },
508
+
509
+ /**
510
+ * 格式化菜单名称
511
+ * @param menuName
512
+ * @returns {*}
513
+ */
514
+ formatterMenuName(menuName){
515
+ if(menuName && menuName.startsWith("、")){
516
+ return menuName.substring(1);
517
+ }else {
518
+ return menuName;
519
+ }
520
+ },
521
+
522
+
523
+ /**
524
+ * 切换角色状态
525
+ * @param row
526
+ */
527
+ changeRoleStatus(row){
528
+ let roleStatus = row.roleStatus;
529
+ let message = roleStatus == '1' ? '确定禁用该角色?':'确定启用该角色?';
530
+ let updateRoleStatus = roleStatus == '1'? '0' : '1';
531
+ this.$confirm(message, '警告', {
532
+ confirmButtonText: '确定',
533
+ cancelButtonText: '取消',
534
+ }).then(()=> {
535
+ //执行更新
536
+ this.axios.post(this.api.SysTenantRole.update,{id:row.id,roleStatus:updateRoleStatus}).then(res =>{
537
+ if(res.data && res.data.operateSuccess){
538
+ this.crud.search();
539
+ }else {
540
+ this.$message("修改失败!");
541
+ }
542
+ });
543
+ });
544
+ },
545
+
546
+ /**
547
+ * 角色启用与禁用
548
+ * @param roleStatus
549
+ */
550
+ changeSelectRoleStatus(roleStatus){
551
+ let selection = this.$refs[this.crud.tableRef].selection || [];
552
+ if(selection.length == 0){
553
+ this.$message({
554
+ duration: 1500,
555
+ type: 'info',
556
+ message: '请至少选择一条数据!'})
557
+ return;
558
+ }
559
+ let message = roleStatus == '0' ? '确定禁用勾选的'+selection.length+'个角色?':'确定启用'+selection.length+'个角色?';
560
+ let roleIdArr = [];
561
+ selection.forEach(item =>{
562
+ roleIdArr.push(item.id);
563
+ });
564
+ this.$confirm(message, '警告', {
565
+ confirmButtonText: '确定',
566
+ cancelButtonText: '取消',
567
+ }).then(()=> {
568
+ this.axios.post(this.api.SysTenantRole.bantchChangeRoleStatus,{roleIds:roleIdArr.join(","),roleStatus:roleStatus}).then(res =>{
569
+ if(res.data && res.data.requestStatus == '1'){
570
+ this.crud.search();
571
+ }else {
572
+ this.$message("未知错误!");
573
+ }
574
+ });
575
+ });
576
+ },
577
+
578
+ /**
579
+ * 快速赋权和解权
580
+ * @param roleId 角色id
581
+ * @param tenantIds 租户ids
582
+ * @param type
583
+ */
584
+ rapidEmpowerment(row,tenantIds,type){
585
+ //校验
586
+ let roleId = row.id;
587
+ //执行快速赋权
588
+ let tenantUserIds = "";
589
+ if(tenantIds && tenantIds.length > 0){
590
+ tenantUserIds = tenantIds.join(",");
591
+ }else{
592
+ this.$message.warning("请选择租户!");
593
+ return;
594
+ }
595
+ this.axios.post(this.api.SysTenant.fastEmpower,{authId:roleId,tenantUserIds:tenantUserIds,type}).then(res =>{
596
+ if(res.data && res.data.requestStatus == '1'){
597
+ this.$message({
598
+ type:'success',
599
+ message:res.data.message
600
+ })
601
+ this.crud.search();
602
+ }else {
603
+ this.$message({
604
+ type:'error',
605
+ message:'操作失败!'
606
+ })
607
+ }
608
+ })
609
+ },
610
+
611
+
612
+ /**
613
+ * 开始快速解权
614
+ */
615
+ clickRapidEmp(row){
616
+ this.$set(row,"unEmpowermentClick",false);
617
+ this.$set(row,"empowermentClick",!row.empowermentClick);
618
+ //当前行数据
619
+ },
620
+
621
+ /**
622
+ *
623
+ * @param row
624
+ */
625
+ clickUnRapidEmp(row){
626
+ this.$set(row,"unEmpowermentClick",!row.unEmpowermentClick);
627
+ this.$set(row,"empowermentClick",false);
628
+ //赋值
629
+ this.tenantUnUserArr = [];
630
+ let tenantIdArr = row.tenantIdArr || [];
631
+ this.tenantUserArr.forEach(item =>{
632
+ if(tenantIdArr.indexOf(item.id) > -1){
633
+ this.tenantUnUserArr.push(item);
634
+ }
635
+ }) ;
636
+ },
637
+
638
+ headerCellStyle({row, column, rowIndex, columnIndex}){
639
+ if (rowIndex === 0) {
640
+ return 'background-color:#F2F2F2;color:#000;font-size:15px;font-weight:600;'
641
+ } else {
642
+ return ''
643
+ }
644
+ }
645
+ }
646
+ }
647
+ </script>
648
+
649
+ <style scoped lang="scss">
650
+
651
+ .tree-item /deep/ .el-form-item__content{
652
+ height: 100%;
653
+ }
654
+
655
+ .treeClass {
656
+ overflow-y: auto;
657
+ width: 100% !important;
658
+ height: calc(100% - 40px);
659
+ }
660
+
661
+ .treeClass /deep/ .el-tree > .el-tree-node > .el-tree-node__content { /* 选中第一级菜单 */
662
+ background-color: #1A598A;
663
+ text-decoration: none;
664
+ border: 1px silver solid;
665
+ color: #fff;
666
+ text-align: center;
667
+ height: 35px;
668
+ }
669
+
670
+ </style>