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,615 @@
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.tenantName"></el-input>
8
+ </el-form-item>
9
+ <el-form-item label="手机号码">
10
+ <el-input v-model="crud.searchForm.tenantAccount"></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="addTenant()">新增</el-button>
23
+ <el-button type="danger" size="small" round icon="el-icon-delete" @click="removeTenant()">删除</el-button>
24
+ </el-header>
25
+ <el-main style="padding-top:10px;height: 100%;">
26
+ <el-table :data="crud.dataStore.records" :ref="crud.tableRef"
27
+ :header-cell-style="headerCellStyle"
28
+ stripe border height="100%" style="width: 100%;">
29
+ <el-table-column type="selection" width="40" align="center"></el-table-column>
30
+ <el-table-column type="index" label="序号" align="center" width="60"></el-table-column>
31
+ <el-table-column label="租户名称" prop="tenantName" align="center" min-width="200" ></el-table-column>
32
+ <el-table-column label="手机号码" prop="tenantAccount" align="center" width="120" show-overflow-tooltip></el-table-column>
33
+ <el-table-column label="租户类型" prop="tenantType" align="center" width="120" show-overflow-tooltip>
34
+ <template slot-scope="scope">
35
+ {{tenantTypeObj[scope.row.tenantType]}}
36
+ </template>
37
+ </el-table-column>
38
+ <el-table-column label="登录标识" prop="tenantLogincode" align="center" width="250" show-overflow-tooltip>
39
+ </el-table-column>
40
+ <el-table-column label="数据标识" prop="tenantDatacode" align="center" width="150"></el-table-column>
41
+ <el-table-column label="操作" align="center" width="310">
42
+ <template slot-scope="scope">
43
+ <el-button size="mini" icon="el-icon-edit"
44
+ type="primary" @click="update(scope.row)" >修改</el-button>
45
+ <el-button size="mini" icon="el-icon-view"
46
+ type="primary" @click="view(scope.row)">查看</el-button>
47
+ <el-popconfirm
48
+ style="margin-left: 10px"
49
+ confirm-button-text='确定'
50
+ cancel-button-text='取消'
51
+ icon="el-icon-info"
52
+ icon-color="red"
53
+ title="确定重置当前租户密码?"
54
+ @confirm='resetPwd(scope.row.id)'>
55
+ <el-button slot="reference" size="small" type="danger">
56
+ 重置密码
57
+ </el-button>
58
+ </el-popconfirm>
59
+ </template>
60
+ </el-table-column>
61
+ </el-table>
62
+ </el-main>
63
+ <el-footer style="height: 40px">
64
+ <el-pagination
65
+ :ref="crud.pageRef"
66
+ :page-sizes="crud.pageSizes"
67
+ :page-size="crud.pageSize"
68
+ :current-page="crud.page"
69
+ :total="crud.dataStore.total"
70
+ @size-change="crud.sizeChange()"
71
+ @current-change="crud.currentPage()"
72
+ layout="total, sizes, prev, pager, next, jumper">
73
+ </el-pagination>
74
+ </el-footer>
75
+ </el-container>
76
+ </el-main>
77
+
78
+
79
+ <el-dialog :close-on-click-modal=false :title="dialogTitle" top="10vh" :visible.sync="crud.dialogVisible"
80
+ width="70%"
81
+ height="70%"
82
+ v-loading="loading"
83
+ element-loading-text="正在初始化用户相关数据请稍后..."
84
+ element-loading-spinner="el-icon-loading"
85
+ element-loading-background="rgba(0, 0, 0, 0.4)"
86
+ append-to-body>
87
+ <el-form :model="crud.formData" :ref="crud.addFormRef" label-width="110px" :disabled="operate == 'view'" >
88
+ <el-col :span="12">
89
+ <el-form-item label="租户名称" prop="tenantName"
90
+ :class="operate == 'view'?'source-mark-class':''"
91
+ :rules="operate!='view'? plValidate('required'): null" >
92
+ <el-input v-model="crud.formData.tenantName" maxlength="50" show-word-limit v-if="operate != 'view'"></el-input>
93
+ <div v-else class="cloud-div" style="min-height:20px;margin-top: 0px;overflow-y: auto;">
94
+ {{crud.formData.tenantName}}
95
+ </div>
96
+ </el-form-item>
97
+ </el-col>
98
+ <el-col :span="12" >
99
+ <el-form-item label="手机号码" prop="tenantAccount"
100
+ :class="operate == 'view'?'source-mark-class':''"
101
+ :rules="operate!='view'? rules.tenantAccount : null" >
102
+ <el-input v-model="crud.formData.tenantAccount" :disabled="operate != 'add'" v-if="operate != 'view'" show-word-limit ></el-input>
103
+ <div v-else class="cloud-div" style="min-height:20px;margin-top: 0px;overflow-y: auto;">
104
+ {{crud.formData.tenantAccount}}
105
+ </div>
106
+ </el-form-item>
107
+ </el-col>
108
+ <el-col :span="12">
109
+ <el-form-item label="租户类型" prop="tenantType" style="width: 100%" :class="operate == 'view'?'source-mark-class':''">
110
+ <el-radio-group v-model="crud.formData.tenantType"
111
+ v-if="operate != 'view'"
112
+ style="width: 33.3%"
113
+ disabled v-for="(value,key) in tenantTypeObj" :key="key">
114
+ <el-radio :label="key" >{{value}}</el-radio>
115
+ </el-radio-group>
116
+ <div v-if="operate == 'view'" class="cloud-div" style="min-height:20px;margin-top: 0px;overflow-y: auto;">
117
+ {{tenantTypeObj[crud.formData.tenantType]}}
118
+ </div>
119
+ </el-form-item>
120
+ </el-col>
121
+ <el-col :span="12">
122
+ <el-form-item label="登录页" prop="tenantPage" :class="operate == 'view'?'source-mark-class':''">
123
+ <el-select v-model="crud.formData.tenantPage" placeholder="请选择" style="width: 100%" v-if="operate != 'view'">
124
+ <el-option
125
+ v-for="item in tenantPageArr"
126
+ :key="item.value"
127
+ :label="item.label"
128
+ :value="item.value">
129
+ </el-option>
130
+ </el-select>
131
+ <div v-else class="cloud-div" style="min-height:20px;margin-top: 0px;overflow-y: auto;">
132
+ {{tenantPageObj[crud.formData.tenantPage]}}
133
+ </div>
134
+ </el-form-item>
135
+ </el-col>
136
+
137
+ <el-col :span="12">
138
+ <el-form-item label="主题" prop="tenantTheme" :class="operate == 'view'?'source-mark-class':''">
139
+ <el-select v-model="crud.formData.tenantTheme" placeholder="请选择" style="width: 100%" v-if="operate != 'view'">
140
+ <el-option
141
+ v-for="item in tenantThemeArr"
142
+ :key="item.value"
143
+ :label="item.label"
144
+ :value="item.value">
145
+ </el-option>
146
+ </el-select>
147
+ <div v-else class="cloud-div" style="min-height:20px;margin-top: 0px;overflow-y: auto;">
148
+ {{tenantThemeObj[crud.formData.tenantTheme]}}
149
+ </div>
150
+ </el-form-item>
151
+ </el-col>
152
+
153
+ <el-col :span="12">
154
+ <el-form-item label="关联角色" prop="tenantAuth"
155
+ :style="{'padding-right': operate != 'view' ? '120px' : '0'}"
156
+ :class="operate == 'view'?'source-mark-class':''">
157
+ <el-select v-if="operate != 'view'" v-model="crud.formData.tenantAuth" placeholder="请选择" style="width: 100%" >
158
+ <el-option
159
+ v-for="item in tenantAuthArr"
160
+ :key="item.id"
161
+ :label="item.roleName"
162
+ :value="item.id">
163
+ </el-option>
164
+ </el-select>
165
+ <el-button type="warning" icon="el-icon-refresh" style="position: absolute;right: -120px"
166
+ @click="editTenantRole()" v-if="operate != 'view'">配置角色</el-button>
167
+ <div v-if="operate == 'view'" class="cloud-div" style="min-height:20px;margin-top: 0px;overflow-y: auto;">
168
+ {{tenantAuthObj[crud.formData.tenantAuth ||''] || '暂无'}}
169
+ </div>
170
+ </el-form-item>
171
+ </el-col>
172
+ <el-col :span="12">
173
+ <el-form-item label="登录标识" prop="tenantLogincode" :style="{'padding-right': operate != 'view' ? '120px' : '0'}"
174
+ :class="operate == 'view'?'source-mark-class':''"
175
+ :rules="operate!='view'? rules.tenantLogincode : null">
176
+ <el-input v-model="crud.formData.tenantLogincode" show-word-limit v-if="operate != 'view'" ></el-input>
177
+ <el-button type="warning" icon="el-icon-refresh" style="position: absolute;right: -120px"
178
+ @click="getLoginCode()" v-if="operate != 'view'">自动生成</el-button>
179
+
180
+ <div v-if="operate == 'view'" class="cloud-div" style="min-height:20px;margin-top: 0px;overflow-y: auto;">
181
+ {{crud.formData.tenantLogincode}}
182
+ </div>
183
+ </el-form-item>
184
+ </el-col>
185
+ <el-col :span="12">
186
+ <el-form-item label="数据标识" prop="tenantDataCodeSuffix"
187
+ :class="operate == 'view'?'source-mark-class':''"
188
+ :rules="operate=='add'? rules.tenantDatacodeSuffix : null">
189
+ <!--已创建的表名不能修改-->
190
+ <el-input v-model="crud.formData.tenantDataCodeSuffix" :disabled="operate != 'add'"
191
+ v-if="operate != 'view'"
192
+ placeholder="支持正整数、大写字母和下划线" maxlength="8">
193
+ <template slot="prepend">TEN_</template>
194
+ </el-input>
195
+ <div v-if="operate == 'view'" class="cloud-div" style="min-height:20px;margin-top: 0px;overflow-y: auto;">
196
+ {{'TEN_'+crud.formData.tenantDataCodeSuffix}}
197
+ </div>
198
+ </el-form-item>
199
+ </el-col>
200
+ </el-form>
201
+ <div slot="footer" class="dialog-footer">
202
+ <el-button v-if="operate != 'view'" type="primary" @click="submitForm()" :disabled="loading" size="small" icon="el-icon-success">确 定</el-button>
203
+ <el-button @click="crud.dialogVisible = false" size="small" :disabled="loading" icon="el-icon-error">{{operate == 'view'? '关 闭':'取 消'}}</el-button>
204
+ </div>
205
+ </el-dialog>
206
+
207
+ <el-dialog :close-on-click-modal=false top="5vh"
208
+ :close-on-press-escape="false"
209
+ :modal-append-to-body="false"
210
+ :visible.sync="tenantRoleDialogVisible"
211
+ title="关联角色"
212
+ width="95%"
213
+ class="install-dialog-class"
214
+ height="90%" @close="closeTenantRole"
215
+ append-to-body>
216
+ <div class="pos-abs-full" style="top: 5px;left: 5px;right: 5px;bottom: 5px;">
217
+ <tenant-role-manager></tenant-role-manager>
218
+ </div>
219
+ <div slot="footer" class="dialog-footer">
220
+ <el-button @click="closeTenantRole()" size="small" icon="el-icon-error">关 闭</el-button>
221
+ </div>
222
+ </el-dialog>
223
+ </el-container>
224
+
225
+
226
+ </template>
227
+
228
+ <script>
229
+ //租户管理
230
+ import TenantRoleManager from "./tenantRoleManager";
231
+ export default {
232
+ name: "tenantUserManager",
233
+ components: {TenantRoleManager},
234
+ data(){
235
+ //手机号码校验
236
+ let tenantAccountValidate =(rule,value,callback) => {
237
+ if(!value){
238
+ callback();
239
+ }
240
+ //判断输入是否为手机号码
241
+ let flag = /^((\(\d{2,3}\))|(\d{3}\-))?1\d{10}$/.test(value);
242
+ if (!flag){
243
+ return callback(new Error('请输入正确的手机号码!'));
244
+ }else {
245
+ this.axios.post(this.api.SysTenant.find,{tenantAccount:value}).then(res =>{
246
+ if((res.data ||[]).length == 0 || (this.operate == 'update' && this.oldTenantAccount == value)){
247
+ callback();
248
+ }else{
249
+ return callback(new Error('该手机号码已经被注册!'));
250
+ }
251
+ });
252
+ }
253
+ };
254
+ //登录标识校验
255
+ let tenantLogincodeValidate = (rule,value,callback) => {
256
+ if(!value){
257
+ callback();
258
+ }
259
+ this.axios.post(this.api.SysTenant.find,{tenantLogincode:value}).then(res =>{
260
+ if((res.data ||[]).length == 0 || (this.operate == 'update' && this.oldTenantLoginCode == value)){
261
+ callback();
262
+ }else{
263
+ return callback(new Error('该登录标识已经存在!'));
264
+ }
265
+ });
266
+ };
267
+ //数据标识校验
268
+ let tenantDatacodeSuffixValidate = (rule,value,callback) =>{
269
+ if(!value){
270
+ callback();
271
+ }
272
+ let flag = /^[0-9A-Z_]{1,}$/.test(value);
273
+ if (!flag){
274
+ return callback(new Error('数据标识仅支持正整数、大写字母和下划线!'));
275
+ }else {
276
+ this.axios.post(this.api.SysTenant.find,{tenantDatacode:'TEN_'+value}).then(res =>{
277
+ if((res.data ||[]).length == 0){
278
+ callback();
279
+ }else{
280
+ return callback(new Error('该数据标识已存在!'));
281
+ }
282
+ });
283
+ }
284
+ };
285
+
286
+ return{
287
+ crud: new this.CrudUtil({
288
+ vue: this,
289
+ entityName: "SysTenant",
290
+ url: this.api.SysTenant.url,
291
+ searchForm: {order:"UPDATE_TIME DESC,CREATE_TIME DESC"},
292
+ noClearSearchColumns:["order"]
293
+ }),
294
+ tenantTypeObj:{
295
+ "group":"团体",
296
+ "person":"个人"
297
+ },
298
+ operate:'add', //操作类型
299
+
300
+ dialogTitle:'',
301
+ rules:{
302
+ tenantAccount:[
303
+ {required: true, message: '该输入项为必输项'},
304
+ {validator:tenantAccountValidate,trigger:'blur'}
305
+ ],
306
+ tenantLogincode:[
307
+ {required: true, message: '该输入项为必输项'},
308
+ {validator:tenantLogincodeValidate,trigger:'change'}
309
+ ],
310
+
311
+ tenantDatacodeSuffix:[
312
+ {required: true, message: '该输入项为必输项'},
313
+ {validator:tenantDatacodeSuffixValidate,trigger:'blur'}
314
+ ]
315
+
316
+ },
317
+ oldTenantAccount:'',//修改前手机号码
318
+ oldTenantLoginCode:'',//修改前 登录标识
319
+ tenantPageArr:[], //登录页
320
+ tenantPageObj:{}, //登录页
321
+ tenantThemeArr:[], //主题配置
322
+ tenantThemeObj:{},//主题
323
+ tenantAuthArr:[], //租户权限
324
+ tenantAuthObj:{}, //租户
325
+ paramFieldArr:["tenantName","tenantAccount","tenantType","tenantPage","tenantTheme","tenantAuth","tenantLogincode"],
326
+ loading:false,//加载
327
+
328
+ tenantRoleDialogVisible:false,
329
+ }
330
+ },
331
+
332
+ created(){
333
+ this.initTenant();
334
+ },
335
+ methods:{
336
+
337
+ /**
338
+ * 初始化租户相关信息
339
+ */
340
+ initTenant(){
341
+ //获取系统参数 中 登录页面 和主题配置
342
+ this.PARAM_GLOBAL.getByKeyAsync("tenantPage").then(res =>{
343
+ let tenantPageArr = res && res.data ? res.data : [];
344
+ this.tenantPageArr.push({
345
+ label:"默认",value:"default"
346
+ });
347
+ this.tenantPageObj['default'] = "默认";
348
+ tenantPageArr.forEach(item =>{
349
+ this.tenantPageArr.push({
350
+ label:item.label,value:item.value
351
+ });
352
+ this.tenantPageObj[item.value] = item.label;
353
+ })
354
+ });
355
+ this.PARAM_GLOBAL.getByKeyAsync("tenantTheme").then(res =>{
356
+ let tenantThemeArr = (res && res.data) ? res.data : [];
357
+ this.tenantThemeArr.push({
358
+ label:"默认",value:"default"
359
+ });
360
+ this.tenantThemeObj['default'] = "默认";
361
+ tenantThemeArr.forEach(item =>{
362
+ this.tenantThemeArr.push({
363
+ label:item.label,value:item.value
364
+ });
365
+ this.tenantThemeObj[item.value] = item.label;
366
+ })
367
+ });
368
+ },
369
+
370
+ addTenant(){
371
+ this.operate = "add";
372
+ this.dialogTitle = "添加租户信息";
373
+ //生成
374
+
375
+ //获取最新租户权限配置
376
+ this.initTenantAuth().then(res=>{
377
+ this.tenantAuthObj = {};
378
+ this.getDatacode(this.COMMON_FUNC.getUuidByParams(8).toUpperCase()).then(dataCode =>{
379
+ this.tenantAuthArr = res && res.data ? res.data : [];
380
+ this.tenantAuthArr.forEach(authObj =>{
381
+ this.tenantAuthObj[authObj.id] = authObj;
382
+ });
383
+ this.crud.add();
384
+ this.$set(this.crud.formData,'tenantType','group'); //默认团体用户
385
+ this.$set(this.crud.formData,'tenantPage','default'); //默认登录页
386
+ this.$set(this.crud.formData,'tenantTheme','default'); //默认主题
387
+ this.getLoginCode();
388
+ //生成数据标识
389
+ this.$set(this.crud.formData,'tenantDataCodeSuffix',dataCode);
390
+ this.$nextTick(() => {
391
+ this.$refs[this.crud.addFormRef].clearValidate(); //刷新校验
392
+ });
393
+ });
394
+ });
395
+ },
396
+
397
+ /**
398
+ * 删除
399
+ */
400
+ removeTenant(){
401
+ let selection = this.$refs[this.crud.tableRef].selection || [];
402
+ if(selection.length == 0){
403
+ this.$message({
404
+ duration: 1500,
405
+ type: 'info',
406
+ message: '请至少选择一条需要删除的数据!'})
407
+ return;
408
+ }
409
+ this.$confirm('是否确定删除选择的“' + selection.length + '”条数据?', '警告', {
410
+ confirmButtonText: '确定',
411
+ cancelButtonText: '取消',
412
+ }).then(()=> {
413
+ let deleteIds = [];
414
+ selection.forEach(item =>{
415
+ deleteIds.push(item.id)
416
+ });
417
+ let loading = this.$loading({
418
+ target: this.$refs[this.crud.tableRef].$el,
419
+ lock: true,
420
+ text: '正在删除,请稍后...',
421
+ spinner: 'el-icon-loading',
422
+ background: 'rgba(0, 0, 0, 0.6)'
423
+ });
424
+ this.axios.post(this.api.SysTenant.removeTenantUser,{deleteIds:deleteIds.join(",")}).then(res =>{
425
+ if(res && res.data){
426
+ loading && loading.close();
427
+ if(res.data.requestStatus == '1'){
428
+ this.$message({
429
+ type: 'success',
430
+ message: res.data.message || '删除成功!'
431
+ });
432
+ this.crud.search();
433
+ }else {
434
+ this.$message({
435
+ type: 'error',
436
+ message: res.data.message || '删除失败!'
437
+ });
438
+ }
439
+
440
+ }
441
+ })
442
+
443
+ });
444
+ },
445
+
446
+ update(row){
447
+ this.oldTenantAccount = row.tenantAccount;
448
+ this.oldTenantLoginCode = row.tenantLogincode;
449
+ this.operate = "update";
450
+ this.dialogTitle = "修改租户信息";
451
+ let editObj = JSON.parse(JSON.stringify(row));
452
+ //数据标识
453
+ this.initTenantAuth().then(res=>{
454
+ this.tenantAuthArr = res && res.data ? res.data : [];
455
+ this.crud.update(editObj);
456
+ let tenantDatacode = editObj.tenantDatacode;
457
+ this.$set(this.crud.formData,'tenantDataCodeSuffix',tenantDatacode.split("TEN_")[1]);
458
+ this.$nextTick(() => {
459
+ this.$refs[this.crud.addFormRef].clearValidate(); //刷新校验
460
+ });
461
+ });
462
+ },
463
+
464
+ /**
465
+ * 查看租户信息
466
+ */
467
+ view(row){
468
+ this.operate = "view";
469
+ this.dialogTitle = "查看租户信息";
470
+ let editObj = JSON.parse(JSON.stringify(row));
471
+ this.initTenantAuth().then(res=>{
472
+ this.tenantAuthArr = res && res.data ? res.data : [];
473
+ this.crud.update(editObj);
474
+ let tenantDatacode = editObj.tenantDatacode;
475
+ this.$set(this.crud.formData,'tenantDataCodeSuffix',tenantDatacode.split("TEN_")[1]);
476
+ });
477
+ },
478
+
479
+ /**
480
+ * 加载租户权限
481
+ */
482
+ initTenantAuth(){
483
+ return new Promise(resolve => {
484
+ this.axios.post(this.api.SysTenantRole.find,{roleStatus:"1"}).then(res =>{
485
+ resolve(res);
486
+ })
487
+ });
488
+ },
489
+
490
+ /**
491
+ * 自动生成登录标识
492
+ */
493
+ getLoginCode(){
494
+ this.$set(this.crud.formData,'tenantLogincode',this.COMMON_FUNC.getUuidByParams(32));
495
+ },
496
+
497
+ /**
498
+ * 生成数据标识并判断是否重复
499
+ */
500
+ getDatacode(datacode){
501
+ return new Promise(resolve => {
502
+ this.axios.post(this.api.SysTenant.find,{tenantDatacode:'TEN_'+datacode}).then(res =>{
503
+ if((res.data ||[]).length == 0){
504
+ resolve(datacode)
505
+ }else {
506
+ this.getDatacode(this.COMMON_FUNC.getUuidByParams(8).toUpperCase()); //递归判断
507
+ }
508
+ });
509
+ })
510
+ },
511
+
512
+ /**
513
+ * 保存租户信息
514
+ */
515
+ submitForm(){
516
+ this.$refs[this.crud.addFormRef].validate(validate => {
517
+ if(!validate){
518
+ return;
519
+ }
520
+ this.loading = true; //防止重复点击
521
+
522
+ // let loadingInfo = this.$loading({
523
+ // target: this.$refs[this.crud.addFormRef].$el,
524
+ // lock: true,
525
+ // text: '请稍候...',
526
+ // spinner: 'el-icon-loading',
527
+ // background: 'rgba(0, 0, 0, 0.6)'
528
+ // });
529
+
530
+ let paramObj = {};
531
+ let url = this.api.SysTenant.createTenantUser; //默认添加用户
532
+ if(this.operate == 'update'){
533
+ url = this.api.SysTenant.update;
534
+ paramObj["id"] = this.crud.formData.id;
535
+ }
536
+ let tenantDatacode = "TEN_" + this.crud.formData.tenantDataCodeSuffix; //数据库标识
537
+ paramObj["tenantDatacode"] = tenantDatacode;
538
+ this.paramFieldArr.forEach(field =>{
539
+ paramObj[field] = this.crud.formData[field];
540
+ });
541
+ //执行
542
+ this.axios.post(url,paramObj).then(res =>{
543
+ this.crud.search();
544
+ // loadingInfo && loadingInfo.close();
545
+ this.loading = false;
546
+ this.crud.dialogVisible = false;
547
+ if(this.operate == 'add'){ //创建租户
548
+ this.$message.success("创建成功!");
549
+ }else { //修改租户
550
+ this.$message.success("修改成功!");
551
+ }
552
+ });
553
+ });
554
+ },
555
+
556
+ /**
557
+ * 配置租户角色
558
+ */
559
+ editTenantRole(){
560
+ this.tenantRoleDialogVisible = true;
561
+ },
562
+
563
+ /**
564
+ * 关闭租户权限
565
+ */
566
+ closeTenantRole(){
567
+ //刷新角色
568
+ this.initTenantAuth().then(res=>{
569
+ this.tenantAuthArr = res && res.data ? res.data : [];
570
+ this.tenantRoleDialogVisible = false;
571
+ });
572
+ },
573
+
574
+ headerCellStyle({row, column, rowIndex, columnIndex}){
575
+ if (rowIndex === 0) {
576
+ return 'background-color:#F2F2F2;color:#000;font-size:15px;font-weight:600;'
577
+ } else {
578
+ return ''
579
+ }
580
+ },
581
+
582
+ /**
583
+ * 租户密码重置
584
+ * @param tenantId
585
+ */
586
+ resetPwd(tenantId){
587
+ this.axios.post(this.api.SysTenant.resetTenantPwd,{"tenantId":tenantId}).then(res =>{
588
+ let type = "error";
589
+ if(res.data){
590
+ type = res.data.requestStatus == '1'? 'success':'error';
591
+ this.$message({
592
+ type:type,
593
+ message: res.data.message
594
+ })
595
+ }else {
596
+ this.$message({
597
+ type:type,
598
+ message: '密码重置失败!'
599
+ })
600
+ }
601
+ })
602
+ }
603
+ }
604
+ }
605
+ </script>
606
+
607
+ <style scoped>
608
+ .source-mark-class /deep/ label{
609
+ position: relative;
610
+ top: 0px;
611
+ }
612
+ .cloud-div{
613
+ border: 1px dashed #e6e6e6;padding: 0px 10px;box-sizing: border-box;
614
+ }
615
+ </style>