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,1648 @@
1
+ <template>
2
+ <div style="width: 100%;height: 100%" @click="menuVisible=false">
3
+ <el-container style="height: 100%">
4
+ <el-main style="height: 100%;padding: 10px 5px;overflow-y: hidden;" v-loading="loading" class="detail-main">
5
+ <el-tabs type="border-card" style="height: 100%" v-model="activeTabs">
6
+ <el-tab-pane :label="(pageSetting.ognName || '组织')+'信息'" name="1">
7
+ <el-container style="height: 100%;">
8
+ <el-header style="height: auto;">
9
+ <el-collapse accordion style="width: 100%" v-model="activeName">
10
+ <el-collapse-item name="1">
11
+ <template slot="title">
12
+ <i class="header-icon el-icon-info"></i>&nbsp;组织基本信息
13
+ </template>
14
+ <el-form :model="orgObj" size="small">
15
+ <el-row>
16
+ <el-col :span="12">
17
+ <el-form-item label="组织名称" label-width="120px">
18
+ <el-input v-model="formOrgName"></el-input>
19
+ </el-form-item>
20
+ </el-col>
21
+ <el-col :span="12">
22
+ <el-form-item label="组织类型" label-width="120px">
23
+ <el-input v-model="orgTypeObj[orgObj.orgType]" disabled></el-input>
24
+ </el-form-item>
25
+ </el-col>
26
+ <el-col :span="12" v-if="orgObj.orgType === 'dept'">
27
+ <el-form-item label="部门分类" label-width="120px">
28
+ <el-select v-model="classify" style="width: 100%">
29
+ <el-option v-for="(item,index) in orgClassifyArr" :key="index"
30
+ :value="item.value" :label="item.label">
31
+ </el-option>
32
+ </el-select>
33
+ </el-form-item>
34
+ </el-col>
35
+ <el-col :span="12">
36
+ <el-form-item label="上级组织" label-width="120px">
37
+ <el-input v-model="orgObj.orgParentName" disabled></el-input>
38
+ </el-form-item>
39
+ </el-col>
40
+ <el-col :span="12">
41
+ <el-form-item label="顺序" label-width="120px">
42
+ <el-input v-model="orgObj.sort"></el-input>
43
+ </el-form-item>
44
+ </el-col>
45
+ <el-col :span="12">
46
+ <el-form-item label="所属维度" label-width="120px">
47
+ <el-input v-model="dimObj[orgDim]" disabled></el-input>
48
+ </el-form-item>
49
+ </el-col>
50
+ <el-col :span="12">
51
+ <el-form-item label="所在地区" label-width="120px">
52
+ <el-input v-if="areaSetting" v-model="orgLocation" disabled></el-input>
53
+ <el-cascader v-else style="width: 100%" v-model="orgLocation" change-on-select
54
+ :options="areaOptions" :props="{checkStrictly:true,value:'id', label: 'dataName' }" >
55
+ </el-cascader>
56
+ </el-form-item>
57
+ </el-col>
58
+
59
+ </el-row>
60
+ <el-row style="text-align: center">
61
+ <el-button type="primary" @click="updateOrgName" icon="el-icon-success"
62
+ size="small">保存
63
+ </el-button>
64
+ </el-row>
65
+ </el-form>
66
+ </el-collapse-item>
67
+ </el-collapse>
68
+ </el-header>
69
+ <el-main style="height: 100%;padding: 0">
70
+ <el-container style="height: 100%">
71
+ <el-header style="height: auto;">
72
+ <div class="search-form-parent el-card">
73
+ <el-form :inline="true" :model="crud.searchForm" size="small"
74
+ class="demo-form-inline"
75
+ @keyup.enter.native="crud.doSearch()" onSubmit="return false;">
76
+ <el-form-item label="用户名称">
77
+ <el-input v-model="crud.searchForm.userNamePinYin"
78
+ placeholder="中文、拼音全拼、简拼"></el-input>
79
+ </el-form-item>
80
+ <el-form-item label="用户账号">
81
+ <el-input v-model="crud.searchForm.userAccount"></el-input>
82
+ </el-form-item>
83
+ <el-form-item>
84
+ <el-button type="primary" icon="el-icon-search"
85
+ @click="crud.doSearch()">查询
86
+ </el-button>
87
+ <el-button icon="el-icon-close" @click="crud.resetSearch()">清空
88
+ </el-button>
89
+ </el-form-item>
90
+ </el-form>
91
+ </div>
92
+ </el-header>
93
+
94
+ <el-main id="tableMain" style="height: 100%;">
95
+ <el-container style="height:100%" class="table-list-container">
96
+ <el-header style="height: auto;">
97
+ <el-button type="primary" size="small" icon="el-icon-check"
98
+ @click="chooseUser">从用户列表选择
99
+ </el-button>
100
+ <el-button type="success" size="small" icon="el-icon-edit"
101
+ @click="adjustOrder">调整用户顺序
102
+ </el-button>
103
+ <el-button type="danger" size="small" icon="el-icon-delete"
104
+ @click="crud.remove()">删除
105
+ </el-button>
106
+ </el-header>
107
+ <el-main style="height: 100%;" ref="tableMain">
108
+ <el-table :data="crud.dataStore.records" :ref="crud.tableRef" stripe border
109
+ height="100%"
110
+ style="width: 100%;" @row-click="activeOrgRow">
111
+ <el-table-column type="selection" width="40"
112
+ align="center"></el-table-column>
113
+ <el-table-column type="index" label="序号" align="center"
114
+ width="60"></el-table-column>
115
+ <el-table-column label="用户账号" prop="userAccount"
116
+ align="center"></el-table-column>
117
+ <el-table-column label="用户名称" prop="userName"
118
+ align="center"></el-table-column>
119
+ <el-table-column label="所属组织" prop="orgName"
120
+ align="center"></el-table-column>
121
+ <el-table-column label="用户顺序" prop="userLayer"
122
+ align="center"></el-table-column>
123
+ </el-table>
124
+ </el-main>
125
+ </el-container>
126
+ </el-main>
127
+ </el-container>
128
+ </el-main>
129
+ <el-footer style="height: 30px">
130
+ <el-pagination
131
+ :ref="crud.pageRef"
132
+ :page-sizes="crud.pageSizes"
133
+ :page-size="crud.pageSize"
134
+ :current-page="crud.page"
135
+ :total="crud.dataStore.total"
136
+ @size-change="crud.sizeChange()"
137
+ @current-change="crud.currentPage()"
138
+ layout="total, sizes, prev, pager, next, jumper">
139
+ </el-pagination>
140
+ </el-footer>
141
+ </el-container>
142
+ </el-tab-pane>
143
+ <el-tab-pane :label="(pageSetting.posName || '岗位')+'信息'" v-if="!pageSetting.closePos" name="2">
144
+ <el-container style="height: 100%;position: relative">
145
+ <el-menu
146
+ :style="{'position': 'fixed','z-index':'99','top':top,'left':left}"
147
+ class="el-menu-vertical"
148
+ @select="handleRightSelect"
149
+ active-text-color="#fff" v-show="menuVisible"
150
+ text-color="#fff">
151
+ <el-menu-item index="addChild" class="menuItem">
152
+ <span slot="title">添加下级数据(A)</span>
153
+ </el-menu-item>
154
+ <el-menu-item index="addSame" class="menuItem">
155
+ <span slot="title">添加同级数据(C)</span>
156
+ </el-menu-item>
157
+ <hr style="color: #ffffff">
158
+ <el-menu-item index="removeCurrent" class="menuItem">
159
+ <span slot="title">删除当前节点(R)</span>
160
+ </el-menu-item>
161
+ <el-menu-item index="removeCheck" class="menuItem">
162
+ <span slot="title">删除勾选节点(D)</span>
163
+ </el-menu-item>
164
+ </el-menu>
165
+ <el-aside style="width: 250px;">
166
+ <fieldset style="height: 100%;border: 1px solid #EBEEF5;box-sizing: border-box">
167
+ <el-container style="height: 100%;padding-left: 5px">
168
+ <el-header style="height: 50px;line-height: 50px;padding-left: 0">
169
+ <el-button type="primary" size="small" @click="addNode()"
170
+ icon="el-icon-circle-plus">添加岗位
171
+ </el-button>
172
+ <el-button type="danger" size="small" @click="removeNode()"
173
+ icon="el-icon-remove">删除
174
+ </el-button>
175
+ </el-header>
176
+ <el-aside style="width: 100%;height:calc(100% - 50px)">
177
+ <common-tree :request-url="api.sysPos.findNoPage"
178
+ :request-param="posTreeParam" :refresh-proper="orgId"
179
+ :default-props="posTreeProper" parent-id="parentPosId"
180
+ :expandOnclickNode="false"
181
+ :init-call-back="posTreeCallBack" :deal-tree-data="posDealTree"
182
+ :node-click="posNodeClick" ref="posTreeRef"
183
+ :right-click="posTreeRightClick" default-ctrl-key-select
184
+ default-shift-key-select>
185
+
186
+ </common-tree>
187
+ </el-aside>
188
+ </el-container>
189
+ </fieldset>
190
+ </el-aside>
191
+ <el-main style="height: 100%;padding: 0 10px;overflow-y: hidden">
192
+ <el-container style="height: 100%">
193
+ <el-header style="height: auto;">
194
+ <div style="border: 1px solid #ebeef5;">
195
+ <div style="height: 40px;line-height: 40px;padding: 0 5px;box-sizing: border-box;">
196
+ <i class="header-icon el-icon-info"></i>&nbsp;岗位基本信息
197
+ </div>
198
+ <div style="padding: 20px 20px 10px 0;border-top: 1px solid #ebeef5;">
199
+ <el-form :model="posBaseForm" ref="posBaseRef" size="small">
200
+ <el-row>
201
+ <div v-show="!pageSetting.closeMainPos">
202
+ <el-col :span="12">
203
+ <el-form-item label="岗位名称" label-width="120px" prop="posName"
204
+ :rules="plValidate('required')">
205
+ <el-input v-model="posBaseForm.posName"></el-input>
206
+ </el-form-item>
207
+ </el-col>
208
+ <el-col :span="12">
209
+ <el-form-item label="是否是主岗位" label-width="120px">
210
+ <el-radio v-model="posBaseForm.isMainpos" label="1"
211
+ @change="mainPosChange" style="height: 33px">是
212
+ </el-radio>
213
+ <el-radio v-model="posBaseForm.isMainpos" label="0"
214
+ @change="mainPosChange" style="height: 33px">否
215
+ </el-radio>
216
+ </el-form-item>
217
+ </el-col>
218
+ </div>
219
+ <div v-show="pageSetting.closeMainPos">
220
+ <el-col :span="24">
221
+ <el-form-item label="岗位名称" label-width="120px" prop="posName"
222
+ :rules="plValidate('required')">
223
+ <el-input v-model="posBaseForm.posName"></el-input>
224
+ </el-form-item>
225
+ </el-col>
226
+ </div>
227
+ <el-col :span="12">
228
+ <el-form-item label="所属组织" label-width="120px">
229
+ <el-input v-model="posBaseForm.orgName" disabled></el-input>
230
+ </el-form-item>
231
+ </el-col>
232
+ <el-col :span="12" v-if="posBaseForm.layer == '1'">
233
+ <el-form-item label="上级岗位" label-width="120px">
234
+ <tree-select v-model="posBaseForm.parentPosId" :options="parentPosTree" placeholder="请选择"
235
+ :defaultExpandLevel="20"
236
+ noOptionsText="没有数据" style="height: 30px;"
237
+ ></tree-select>
238
+ </el-form-item>
239
+ </el-col>
240
+ <el-col :span="12" v-else>
241
+ <el-form-item label="上级岗位" label-width="120px">
242
+ <el-input v-model="posBaseForm.parentPosName"
243
+ disabled></el-input>
244
+ </el-form-item>
245
+ </el-col>
246
+ </el-row>
247
+ <el-row style="text-align: center">
248
+ <el-button type="primary" @click="updatePosInfo"
249
+ icon="el-icon-success" size="small">保存
250
+ </el-button>
251
+ </el-row>
252
+ </el-form>
253
+ </div>
254
+ </div>
255
+ </el-header>
256
+ <el-main style="height: 100%;padding: 0 10px">
257
+ <el-container style="height: 100%">
258
+ <el-header style="height: auto;padding: 0">
259
+ <div class="search-form-parent el-card">
260
+ <el-form :inline="true" :model="posCrud.searchForm" size="small"
261
+ class="demo-form-inline"
262
+ @keyup.enter.native="posCrud.doSearch()" onSubmit="return false;">
263
+ <el-form-item label="用户账号">
264
+ <el-input v-model="posCrud.searchForm.userAccount"></el-input>
265
+ </el-form-item>
266
+ <el-form-item label="用户名称">
267
+ <el-input v-model="posCrud.searchForm.userNamePinYin"
268
+ placeholder="中文、拼音全拼、简拼"></el-input>
269
+ </el-form-item>
270
+ <el-form-item>
271
+ <el-button type="primary" icon="el-icon-search"
272
+ @click="posCrud.doSearch()">查询
273
+ </el-button>
274
+ <el-button icon="el-icon-close" @click="posCrud.resetSearch()">
275
+ 清空
276
+ </el-button>
277
+ </el-form-item>
278
+ </el-form>
279
+ </div>
280
+ </el-header>
281
+
282
+ <el-main style="height: 100%;padding:10px 0 0;">
283
+ <el-container style="height:100%" class="table-list-container">
284
+ <el-header style="height: auto;">
285
+ <el-button type="primary" size="small" icon="el-icon-check"
286
+ @click="chooseUser('pos')">从用户列表选择
287
+ </el-button>
288
+ <el-button type="success" size="small" icon="el-icon-edit"
289
+ @click="adjustOrder('pos')">调整用户顺序
290
+ </el-button>
291
+ <el-button type="danger" size="small" icon="el-icon-delete"
292
+ @click="posCrud.remove()">删除
293
+ </el-button>
294
+ </el-header>
295
+ <el-main style="height: 100%;">
296
+ <el-table :data="posCrud.dataStore.records" :ref="posCrud.tableRef"
297
+ stripe border height="100%"
298
+ style="width: 100%;" @row-click="activePosRow">
299
+ <el-table-column type="selection" width="40"
300
+ align="center"></el-table-column>
301
+ <el-table-column type="index" label="序号" align="center"
302
+ width="60"></el-table-column>
303
+ <el-table-column label="用户名称" prop="userName"
304
+ align="center"></el-table-column>
305
+ <el-table-column label="所属组织" prop="orgName"
306
+ align="center"></el-table-column>
307
+ <el-table-column label="用户账号" prop="userAccount"
308
+ align="center"></el-table-column>
309
+ <el-table-column label="用户顺序" prop="userLayer"
310
+ align="center"></el-table-column>
311
+ </el-table>
312
+ </el-main>
313
+ </el-container>
314
+ </el-main>
315
+ </el-container>
316
+ </el-main>
317
+ <el-footer style="height: 35px;margin-top: 10px">
318
+ <el-pagination
319
+ :ref="posCrud.pageRef"
320
+ :page-sizes="posCrud.pageSizes"
321
+ :page-size="posCrud.pageSize"
322
+ :current-page="posCrud.page"
323
+ :total="posCrud.dataStore.total || 0"
324
+ @size-change="posCrud.sizeChange()"
325
+ @current-change="posCrud.currentPage()"
326
+ layout="total, sizes, prev, pager, next, jumper">
327
+ </el-pagination>
328
+ </el-footer>
329
+ </el-container>
330
+ </el-main>
331
+ </el-container>
332
+ </el-tab-pane>
333
+ </el-tabs>
334
+ </el-main>
335
+ <el-dialog :close-on-click-modal=false :visible.sync="chooseUserDialog" class="choose-user" title="选择用户" width="80%" height="90%" top="5vh">
336
+ <el-container style="height: 100%">
337
+ <el-main style="height: 100%;padding: 0">
338
+ <el-container style="height: 100%">
339
+ <el-header style="height: auto;">
340
+ <div class="search-form-parent el-card">
341
+ <el-form :inline="true" :model="userCrud.searchForm" size="small"
342
+ class="demo-form-inline"
343
+ @keyup.enter.native="userCrud.doSearch(userSearch)" onSubmit="return false;">
344
+ <el-form-item label="用户账号">
345
+ <el-input v-model="userCrud.searchForm.userAccountLike"></el-input>
346
+ </el-form-item>
347
+ <el-form-item label="用户名称">
348
+ <el-input v-model="userCrud.searchForm.userNamePinYin"
349
+ placeholder="中文、拼音全拼、简拼"></el-input>
350
+ </el-form-item>
351
+ <el-form-item>
352
+ <el-button type="primary" icon="el-icon-search" @click="userCrud.doSearch(userSearch)">
353
+ 查询
354
+ </el-button>
355
+ <el-button icon="el-icon-close" @click="userCrud.resetSearch(userSearch)">清空</el-button>
356
+ </el-form-item>
357
+ </el-form>
358
+ </div>
359
+ </el-header>
360
+
361
+ <el-main style="height: 100%;padding: 10px">
362
+ <el-container style="height:100%" class="table-list-container">
363
+ <el-header style="height: auto;" size="medium">
364
+ <el-button type="primary" size="small" icon="el-icon-check" @click="setUser">选择
365
+ </el-button>
366
+ <el-button type="success" size="small" icon="el-icon-edit" @click="addUser" v-if="pageSetting['allowAddUser']">添加
367
+ </el-button>
368
+ </el-header>
369
+ <el-main style="height: 100%;padding: 0">
370
+ <el-table :data="userCrud.dataStore.records" :ref="userCrud.tableRef" stripe border
371
+ height="100%"
372
+ style="width: 100%;" @row-click="activeUserRow"
373
+ @select="tableSelect"
374
+ @select-all="userSelectAll"
375
+ >
376
+ <el-table-column type="selection" width="40" align="center"></el-table-column>
377
+ <el-table-column type="index" label="序号" align="center"
378
+ width="60"></el-table-column>
379
+ <el-table-column label="用户账号" prop="userAccount" align="center"></el-table-column>
380
+ <el-table-column label="用户名称" prop="userName" align="center"></el-table-column>
381
+ <el-table-column label="用户类型" prop="userType" :formatter="formatterColumn"
382
+ align="center"></el-table-column>
383
+ <!-- <el-table-column label="当前状态" prop="userStatus" :formatter="formatterColumn"-->
384
+ <!-- align="center"></el-table-column>-->
385
+ </el-table>
386
+ </el-main>
387
+ </el-container>
388
+ </el-main>
389
+ </el-container>
390
+ </el-main>
391
+ <el-footer style="height: 40px">
392
+ <el-pagination
393
+ :ref="userCrud.pageRef"
394
+ :page-sizes="userCrud.pageSizes"
395
+ :page-size="userCrud.pageSize"
396
+ :current-page="userCrud.page"
397
+ :total="userCrud.dataStore.total"
398
+ @size-change="userCrud.sizeChange(userSearch)"
399
+ @current-change="userCrud.currentPage(userSearch)"
400
+ layout="total, sizes, prev, pager, next, jumper">
401
+ </el-pagination>
402
+ </el-footer>
403
+ </el-container>
404
+ </el-dialog>
405
+ <el-dialog :close-on-click-modal=false :visible.sync="orderDialog" title="调整用户顺序" class="order-dialog" width="400px" height="80%" top="5vh">
406
+ <el-main style="height: 100%;padding: 0">
407
+ <el-table :data="posUserArr" border stripe>
408
+ <el-table-column prop="userName" label="用户名称" align="center"></el-table-column>
409
+ <el-table-column prop="userLayer" label="组织/岗位内排序" align="center">
410
+ <template slot-scope="scope">
411
+ <el-input v-model="scope.row.userLayer" size="small">
412
+ </el-input>
413
+ </template>
414
+ </el-table-column>
415
+ </el-table>
416
+ </el-main>
417
+ <div slot="footer" class="dialog-footer">
418
+ <el-button type="primary" @click="updateOrder?saveOrder():addOrder()" size="small"
419
+ icon="el-icon-success">确定
420
+ </el-button>
421
+ <el-button @click="orderDialog = false" size="small" icon="el-icon-error">取 消</el-button>
422
+ </div>
423
+ </el-dialog>
424
+ <el-dialog :close-on-click-modal=false title="添加用户" :visible.sync="addUserDialog" top="25vh">
425
+ <el-form :model="addUserForm" ref="addUserRef" :rules="rules">
426
+ <el-row>
427
+ <!-- <el-col :span="12">-->
428
+ <!-- <el-form-item label="用户账号" label-width="150px" prop="userAccount">-->
429
+ <!-- <el-input v-model="addUserForm.userAccount"></el-input>-->
430
+ <!-- </el-form-item>-->
431
+ <!-- </el-col>-->
432
+ <!-- <el-col :span="12">-->
433
+ <!-- <el-form-item label="用户名称" label-width="150px" prop="userName">-->
434
+ <!-- <el-input v-model="addUserForm.userName"></el-input>-->
435
+ <!-- </el-form-item>-->
436
+ <!-- </el-col>-->
437
+ <!-- <el-col :span="12">-->
438
+ <!-- <el-form-item label="用户类型" label-width="150px" prop="userType">-->
439
+ <!-- <el-select v-model="addUserForm.userType" style="width: 100%">-->
440
+ <!-- <el-option v-for="(item,index) in userTypeOptions" :key="index" :label="item.label"-->
441
+ <!-- :value="item.value">-->
442
+ <!-- </el-option>-->
443
+ <!-- </el-select>-->
444
+ <!-- </el-form-item>-->
445
+ <!-- </el-col>-->
446
+ <!-- <el-col :span="12">-->
447
+ <!-- <el-form-item label="用户状态" label-width="150px" prop="userStatus">-->
448
+ <!-- <el-select v-model="addUserForm.userStatus" style="width: 100%">-->
449
+ <!-- <el-option v-for="(item,index) in statusOptions" :key="index" :label="item.label"-->
450
+ <!-- :value="item.value">-->
451
+ <!-- </el-option>-->
452
+ <!-- </el-select>-->
453
+ <!-- </el-form-item>-->
454
+ <!-- </el-col>-->
455
+ <el-col :span="12">
456
+ <el-form-item label="用户账号" label-width="150px" prop="userAccount">
457
+ <el-input v-model="addUserForm.userAccount"></el-input>
458
+ </el-form-item>
459
+ </el-col>
460
+ <el-col :span="12">
461
+ <el-form-item label="用户姓名" label-width="150px" prop="userName">
462
+ <el-input v-model="addUserForm.userName"></el-input>
463
+ </el-form-item>
464
+ </el-col>
465
+ <el-col :span="12">
466
+ <el-form-item label="用户类型" label-width="150px" prop="userType">
467
+ <el-select v-model="addUserForm.userType" style="width: 100%">
468
+ <el-option v-for="item in typeOptions" :key="item.value" :label="item.label"
469
+ :value="item.value">
470
+ </el-option>
471
+ </el-select>
472
+ </el-form-item>
473
+ </el-col>
474
+
475
+ <el-col :span="12">
476
+ <el-form-item label="手机号码" label-width="150px" prop="userPhone">
477
+ <el-input v-model="addUserForm.userPhone"></el-input>
478
+ </el-form-item>
479
+ </el-col>
480
+ <el-col :span="12">
481
+ <el-form-item label="电子邮箱" label-width="150px" prop="userEmail">
482
+ <el-input v-model="addUserForm.userEmail"></el-input>
483
+ </el-form-item>
484
+ </el-col>
485
+
486
+ <el-col :span="12">
487
+ <el-form-item label="身份证号" label-width="150px" prop="userIdcard" :rules="plValidate('idcard')">
488
+ <el-input v-model="addUserForm.userIdcard"></el-input>
489
+ </el-form-item>
490
+ </el-col>
491
+ <el-col :span="12">
492
+ <el-form-item label="用户状态" label-width="150px" prop="userStatus">
493
+ <el-radio-group v-model="addUserForm.userStatus" size="medium">
494
+ <el-radio-button label="10">正常</el-radio-button>
495
+ <el-radio-button label="20">锁定</el-radio-button>
496
+ </el-radio-group>
497
+ </el-form-item>
498
+ </el-col>
499
+ <!-- <el-col :span="12">-->
500
+ <!-- <el-form-item label="用户角色" label-width="150px" prop="userRoleId">-->
501
+ <!-- <el-select v-model="addUserForm.userRoleId" style="width: 100%" clearable>-->
502
+ <!-- <el-option v-for="item in createPushRoleArr" :key="item.id" :label="item.roleName" :value="item.id">-->
503
+
504
+ <!-- </el-option>-->
505
+ <!-- </el-select>-->
506
+ <!-- </el-form-item>-->
507
+ <!-- </el-col>-->
508
+ </el-row>
509
+ </el-form>
510
+ <div slot="footer" class="dialog-footer">
511
+ <el-button type="primary" @click="saveUser()" size="small" icon="el-icon-success">确 定</el-button>
512
+ <el-button @click="addUserDialog = false" size="small" icon="el-icon-error">取 消</el-button>
513
+ </div>
514
+ </el-dialog>
515
+ <el-dialog :close-on-click-modal=false title="添加岗位信息" :visible.sync="addPosDialog" top="25vh">
516
+ <el-form :model="addPosForm" ref="addPosRef">
517
+ <el-row>
518
+ <el-col :span="24">
519
+ <el-form-item label="岗位名称" label-width="120px" prop="posName" :rules="plValidate('required')">
520
+ <el-input type="textarea" :autosize="{ minRows: 3,maxRows:5}"
521
+ v-model="addPosForm.posName"></el-input>
522
+ </el-form-item>
523
+ </el-col>
524
+ <el-col :span="24" v-show="!pageSetting.closeMainPos">
525
+ <el-form-item label="是否是主岗位" label-width="120px">
526
+ <el-radio v-model="addPosForm.isMainpos" label="1" @change="addMainPosChange">是</el-radio>
527
+ <el-radio v-model="addPosForm.isMainpos" label="0" @change="addMainPosChange">否</el-radio>
528
+ </el-form-item>
529
+ </el-col>
530
+ <el-col :span="12">
531
+ <el-form-item label="所属组织" label-width="120px">
532
+ <el-input v-model="addPosForm.orgName" disabled></el-input>
533
+ </el-form-item>
534
+ </el-col>
535
+ <el-col :span="12" v-if="addPosForm.layer == '1'">
536
+ <el-form-item label="上级岗位" label-width="120px">
537
+ <tree-select v-model="addPosForm.parentPosId" placeholder="请选择"
538
+ :options="parentPosTree" noOptionsText="没有数据" style="height: 40px"></tree-select>
539
+ </el-form-item>
540
+ </el-col>
541
+ <el-col :span="12" v-else>
542
+ <el-form-item label="上级岗位" label-width="120px">
543
+ <el-input v-model="addPosForm.parentPosName" disabled></el-input>
544
+ </el-form-item>
545
+ </el-col>
546
+ </el-row>
547
+ </el-form>
548
+ <div slot="footer" class="dialog-footer">
549
+ <el-button type="primary" @click="savePos()" size="small" icon="el-icon-success">确定</el-button>
550
+ <el-button @click="addPosDialog = false" size="small" icon="el-icon-error">取 消</el-button>
551
+ </div>
552
+ </el-dialog>
553
+ </el-container>
554
+ </div>
555
+ </template>
556
+
557
+ <script>
558
+
559
+ export default {
560
+ name: "sys-org-pos-user-detail",
561
+ props: {
562
+ orgId: {type: String, default: ''},
563
+ orgDim: {type: String, default: ''},
564
+ orgObjReal: {
565
+ type: Object, default: function () {
566
+ return {}
567
+ }
568
+ },
569
+ orgTypeObj: {
570
+ type: Object, default: function () {
571
+ return {}
572
+ }
573
+ },
574
+ areaOptions: {
575
+ type:Array,
576
+ default:() => {return [];}
577
+ },
578
+ pageSetting: {
579
+ type: Object, default: function () {
580
+ return {}
581
+ }
582
+ },
583
+ areaSetting:{
584
+ type:Boolean,default:true
585
+ },
586
+ useRefresh:{
587
+ type:Boolean,default:false
588
+ },
589
+ refreshOrgId:{
590
+ type:Boolean,default:false
591
+ },
592
+ updateCallBack: {type: Function, default: null},
593
+ sysDataObj:{type:Object,default:() => {return {};}}
594
+ },
595
+ data() {
596
+ let vm = this;
597
+ let validUserRepeat = (rule, value, callback) => { // 重名验证
598
+ let obj = {"isExit":"true"};
599
+ if(rule.field == "userAccount"){
600
+ obj["isExituserAccount"] = vm.addUserForm.userAccount;
601
+ }else{
602
+ obj["isExitUserName"] = vm.addUserForm.userName;
603
+ }
604
+ vm.axios.post(vm.api.sysUser.find,obj).then(res => {
605
+ let result = res.data || [];
606
+ callback();
607
+ /*if(result.length > 0 && result[0].id != vm.addUserForm.id){
608
+ callback(new Error("名称重复"));
609
+ }else{
610
+ callback();
611
+ }*/
612
+ })
613
+ };
614
+ return {
615
+ crud: new this.CrudUtil({
616
+ vue: this,
617
+ entityName: "sysOrgPosUser",
618
+ url:this.api.sysOrgPosUser.url,
619
+ searchUrl: this.api.sysOrgPosUser.findPageParam,
620
+ searchForm: {"posIdIsNull": "Y", 'commonUserType':'common'},
621
+ noClearSearchColumns: ["orgId", "posIdIsNull","commonUserType","tenantId"],
622
+ initNoSearch: true,
623
+ }),
624
+ userCrud: new this.CrudUtil({
625
+ vue: this,
626
+ entityName: "sysUser",
627
+ url: this.api.sysUser.url,
628
+ searchUrl:this.api.sysUser.findPage,
629
+ searchForm: {"unsup": "sup","userStatus":"10","order":"UPDATE_TIME,ID DESC"},
630
+ noClearSearchColumns: ["userType", "unsup", "noSearchUserByOrgId", "noSearchUserByPosId",
631
+ "notOrg","notPos","orgDim","userStatus","searchEmpowerOrgId","order","tenantId"],
632
+ initNoSearch: true,
633
+ }),
634
+ posCrud: new this.CrudUtil({
635
+ vue: this,
636
+ entityName: "sysOrgPosUser",
637
+ url: this.api.sysOrgPosUser.url,
638
+ searchUrl: this.api.sysOrgPosUser.findPageParam,
639
+ searchForm: {"posId": "$", "orgId": "$", 'commonUserType':'common'},
640
+ noClearSearchColumns: ["orgId", "posId","commonUserType","tenantId"],
641
+ initNoSearch: true,
642
+ //afterRemoveSuccess:this.posRemoveSuc,
643
+ }),
644
+ cascadeOptions: [], // 地区选项
645
+ cascadeOptionsClone:[],
646
+ activeTabs: '1',
647
+ activeName: ['0'], // 默认不激活组织信息吧,如果想默认展开就设为1
648
+ activePosName: ['1'], // 默认激活岗位信息
649
+ dimObj: {}, // id与纬度名称对应关系
650
+ chooseUserDialog: false,
651
+ formOrgName: "", // 当前组织的名称
652
+ orgClassifyArr: [{value: '0', label: '普通部门'}, {value: '1', label: '处室'}, {value: '2', label: '安监局'}],
653
+ classify: "", // 部门分类
654
+ userTypeMap: {
655
+ 'ent': '企业用户', 'gov': '政府用户',
656
+ 'sup': '开发用户', 'dev': '开发用户',
657
+ },
658
+ userStatusMap: {
659
+ 10: "正常", 20: "锁定", 30: "暂时锁定"
660
+ },
661
+ entDim: "",
662
+ sysEntDim: "",
663
+ orderDialog: false, // 排序对话框
664
+ posUserArr: [], // 岗位用户排序数组
665
+ userTypeOptions: [], // 用户类型下拉框
666
+ typeOptions: [], // 所有用户类型
667
+ addUserDialog: false, // 添加用户对话框
668
+ addUserForm: {},
669
+ statusOptions: [
670
+ {value: '10', label: "正常"},
671
+ {value: '20', label: "锁定"}
672
+ ], // 用户状态下拉框
673
+ updateOrder: true, // 是调整用户顺序还是选择用户时添加数据
674
+ posTreeParam: {
675
+ "order": "PARENT_POS_ID,SORT",
676
+ "orgId": "$"
677
+ },
678
+ rules: {
679
+ userAccount: [
680
+ {
681
+ required: true,
682
+ message: '该输入项为必输项',
683
+ trigger: 'blur'
684
+ },
685
+ {
686
+ validator: validUserRepeat,
687
+ trigger: 'blur'
688
+ }
689
+ ],
690
+ userStatus: [
691
+ {
692
+ required: true,
693
+ message: '该输入项为必输项',
694
+ trigger: 'blur'
695
+ }
696
+ ],
697
+ userName: [
698
+ {
699
+ required: true,
700
+ message: '该输入项为必输项',
701
+ trigger: 'blur'
702
+ },
703
+ {
704
+ validator: validUserRepeat,
705
+ trigger: 'blur'
706
+ }
707
+ ],
708
+ userType: this.plValidate('required'),
709
+ userQQ: this.plValidate('qq'),
710
+ userEmail: this.plValidate('email'),
711
+ },
712
+ posTreeProper: {'label': 'name','children':'children'},
713
+ posBaseForm: {}, // 岗位基本信息
714
+ posId: "", // 当前选择的岗位id
715
+ setPos: false, // 当前从用户列表选择的是岗位还是组织
716
+ menuVisible: false, // 右击菜单出现的办法
717
+ addPosDialog: false, // 添加岗位的对话框
718
+ addPosForm: {}, // 添加岗位的表单数据
719
+ orgLocation: null, // 组织所在地区
720
+ loading:false,
721
+ top:0,
722
+ left:0,
723
+ parentPosTree:[], // 上级岗位树
724
+ manyOrg:false, // 一人多岗
725
+ multipleSelection:[],
726
+ multipleSelectionIds:[],
727
+ createPushRoleArr:[], // 推送角色
728
+ orgObj:{}
729
+ }
730
+ },
731
+ created() {
732
+ let vm = this;
733
+ this.orgObj = this.orgObjReal || {};
734
+ document.onkeyup = function (e) { // 右键菜单快捷键
735
+ if(vm.menuVisible){
736
+ let key = e.key.toLowerCase();
737
+ switch (key) {
738
+ case "a":
739
+ vm.menuVisible = false;
740
+ vm.handleRightSelect('addChild');
741
+ break;
742
+ case "c":
743
+ vm.menuVisible = false;
744
+ vm.handleRightSelect('addSame');
745
+ break;
746
+ case "r":
747
+ vm.menuVisible = false;
748
+ vm.handleRightSelect('removeCurrent');
749
+ break;
750
+ case "d":
751
+ vm.menuVisible = false;
752
+ vm.handleRightSelect('removeCheck');
753
+ break;
754
+ default:
755
+ break;
756
+ }
757
+ }
758
+ };
759
+ vm.axios.post(vm.api.sysOrgDimension.find).then(function (res) {
760
+ res.data.forEach(function (dimension) {
761
+ vm.dimObj[dimension["id"]] = dimension["dimName"];
762
+ })
763
+ });
764
+ vm.axios.post(vm.api.param.getSysParams, {"key": "entDim"}).then(function (res) {
765
+ vm.entDim = res.data["entDim"];
766
+ vm.axios.post(vm.api.param.getSysParams, {"key": "sysEntDim.id"}).then(function (paramRes) {
767
+ vm.sysEntDim = paramRes.data["sysEntDim.id"];
768
+ });
769
+ });
770
+ vm.axios.post(vm.api.param.getSysParams, {"key": "manyOrg"}).then(function (res) {
771
+ let resData = res.data || {};
772
+ vm.manyOrg = resData["manyOrg"] == "是";
773
+ });
774
+ vm.axios.post(vm.api.param.getSysParams,{key:"SysUserType"}).then(function (res) { // 是否可以修改用户详情,获取用户的类型
775
+ let result = res.data;
776
+ if(typeof(result) != Object && typeof(result) != "object"){
777
+ result = JSON.parse(result.replace(/'/g, '"'));
778
+ }
779
+ for (let [key, value] of Object.entries(result)) {
780
+ vm.typeOptions.push({"label": value, "value": key})
781
+ }
782
+ });
783
+ vm.init();
784
+ // vm.initCreatePushRole();
785
+ },
786
+ watch: {
787
+ orgId() {
788
+ if(this.useRefresh){
789
+ return;
790
+ }
791
+ this.orgObj = this.orgObjReal;
792
+ this.buildParentTree();
793
+ this.$refs.posTreeRef && this.$refs.posTreeRef.setTreeCurrentKey(null); // 组织切换取消岗位树当前节点
794
+ this.init();
795
+ },
796
+ refreshOrgId(){
797
+ if(!this.refreshOrgId){
798
+ return;
799
+ }
800
+ this.orgObj = this.orgObjReal;
801
+ // this.orgId = this.orgObj.id;
802
+ this.buildParentTree();
803
+ this.$refs.posTreeRef && this.$refs.posTreeRef.setTreeCurrentKey(null); // 组织切换取消岗位树当前节点
804
+ this.init();
805
+ },
806
+ posId() { // 切换时重置分页
807
+ this.posCrud.searchForm["posId"] = this.posId;
808
+ this.$refs[this.posCrud.pageRef]["internalCurrentPage"] = 1;
809
+ this.posCrud.searchForm.page = '0';
810
+ let loginUser = this.USER_GLOBAL.getLoginUser() || {};
811
+ if(loginUser && loginUser.tenantId){
812
+ this.posCrud.searchForm["tenantId"] = loginUser.tenantId;
813
+ }
814
+ this.posCrud.search();
815
+ },
816
+ orgDim() {
817
+ this.activeTabs = '1';
818
+ }
819
+ },
820
+ methods: {
821
+ initCreatePushRole(){
822
+ let loginUser = this.USER_GLOBAL.getLoginUser() || {};
823
+ this.axios.post(this.api.role.find,{"created":loginUser.id,"pushRole":"1"}).then(res => {
824
+ this.createPushRoleArr = res.data || [];
825
+ })
826
+ },
827
+ buildParentTree(){
828
+ let vm = this;
829
+ vm.parentPosTree = [];
830
+ if(vm.orgObj.orgParentTree){
831
+ vm.axios.post(vm.api.sysPos.find,{"parentPosIds":vm.orgObj.orgParentTree}).then(res => {
832
+ let arr = [];
833
+ (res.data || []).forEach(item => {
834
+ arr.push({
835
+ "id":item.id,
836
+ "label":item.posName,
837
+ "parentId":item.parentPosId
838
+ })
839
+ });
840
+ vm.parentPosTree = vm.COMMON_FUNC.buildElTree(arr);
841
+ //递归去除
842
+ function clearTreeChildren(parentPosTreeArr) {
843
+ (parentPosTreeArr || []).forEach(item =>{
844
+ if(item.children){
845
+ if(item.children.length == 0){
846
+ delete item['children'];
847
+ }else {
848
+ clearTreeChildren(item.children);
849
+ }
850
+ }
851
+ })
852
+ }
853
+ clearTreeChildren(vm.parentPosTree);
854
+ })
855
+ }
856
+ },
857
+ init() {
858
+ let vm = this;
859
+ vm.orgId && (vm.posTreeParam["orgId"] = vm.orgId) && (vm.posCrud.searchForm["orgId"] = vm.orgId);
860
+ !vm.orgId && (vm.posTreeParam["orgId"] = "$") && (vm.posCrud.searchForm["orgId"] = "$");
861
+ vm.$refs.posBaseRef && vm.$refs.posBaseRef.clearValidate();
862
+ vm.posCrud.searchForm["posId"] = "$"; // 组织切换时修改岗位id为$,阻止查询
863
+ vm.posId = "$";
864
+ vm.menuVisible = false;
865
+ vm.posBaseForm = {};
866
+ vm.formOrgName = vm.orgObj.orgName || "";
867
+ let arr = ["province", "city", "area", "street","community"];
868
+ let arrTemp = [];
869
+ let arrIdTmp = [];
870
+ for (let elem of arr) {
871
+ if (vm.orgObj[elem] && vm.sysDataObj[vm.orgObj[elem]]) {
872
+ arrTemp.push(vm.sysDataObj[vm.orgObj[elem]].dataName);
873
+ arrIdTmp.push(vm.orgObj[elem]);
874
+ } else {
875
+ break;
876
+ }
877
+ }
878
+ if(vm.areaSetting){
879
+ vm.orgLocation = arrTemp.join(" - "); // 生成所在地区
880
+ }else{
881
+ vm.orgLocation = arrIdTmp;
882
+ }
883
+ vm.classify = vm.orgObj.orgType === 'dept' ? vm.orgObj.orgClassify : "0";
884
+ vm.crud.searchForm["orgId"] = vm.orgId || "$"; // 初始化如果没选中组织则取消查询条件
885
+ vm.$refs[vm.crud.setting.pageRef] && (vm.$refs[vm.crud.setting.pageRef]["internalCurrentPage"] = 1);
886
+ vm.crud.searchForm.page = '0';
887
+
888
+ let loginUser = this.USER_GLOBAL.getLoginUser() || {};
889
+ if(loginUser && loginUser.tenantId){
890
+ vm.crud.searchForm["tenantId"] = loginUser.tenantId;
891
+ }
892
+ vm.crud.search();
893
+ },
894
+ /**
895
+ * 组织信息
896
+ */
897
+ chooseUser(pos) { // 选择用户
898
+ let vm = this;
899
+ if (!vm.orgDim || !vm.orgId) {
900
+ vm.$message("请先选择左侧组织!");
901
+ return;
902
+ }
903
+ vm.userCrud.searchForm["noSearchUserByOrgId"] = "";
904
+ vm.userCrud.searchForm["noSearchUserByPosId"] = "";
905
+ vm.userCrud.searchForm["notOrg"] = "";
906
+ vm.userCrud.searchForm["notPos"] = "";
907
+ vm.multipleSelection=[];
908
+ vm.multipleSelectionIds=[];
909
+ if (pos === "pos") {
910
+ if (!vm.posId || vm.posId == "$") {
911
+ vm.$message("请先选择岗位!");
912
+ return;
913
+ }
914
+ vm.setPos = true;
915
+ if(vm.manyOrg){
916
+ vm.userCrud.searchForm["notOrg"] = vm.orgId;
917
+ vm.userCrud.searchForm["notPos"] = vm.posId;
918
+ delete vm.userCrud.searchForm["noSearchUserByPosId"];
919
+ delete vm.userCrud.searchForm["noSearchUserByOrgId"];
920
+ }else{
921
+ vm.userCrud.searchForm["noSearchUserByPosId"] = vm.posId;
922
+ }
923
+ } else {
924
+ vm.setPos = false;
925
+ if(vm.manyOrg){
926
+ vm.userCrud.searchForm["notOrg"] = vm.orgId;
927
+ delete vm.userCrud.searchForm["noSearchUserByPosId"];
928
+ delete vm.userCrud.searchForm["noSearchUserByOrgId"];
929
+ }else{
930
+ vm.userCrud.searchForm["noSearchUserByOrgId"] = vm.orgId;
931
+ }
932
+ }
933
+ vm.userCrud.searchForm["orgDim"] = vm.orgDim;
934
+ vm.userCrud.searchForm["userType"] = vm.pageSetting["chooseUserType"] || "ent";
935
+ if (vm.orgDim === vm.entDim) {
936
+ vm.userCrud.searchForm["noEntOrgType"] = "1";
937
+ }
938
+ if (vm.orgDim === vm.sysEntDim) {
939
+ vm.userCrud.searchForm["entOrgType"] = "2";
940
+ }
941
+
942
+ let loginUser = vm.USER_GLOBAL.getLoginUser() || {};
943
+ if(loginUser.userType == "empower"){
944
+ let loginDept = this.USER_GLOBAL.getLoginDept();
945
+ vm.userCrud.searchForm["searchEmpowerOrgId"] = loginDept.id;
946
+ }
947
+
948
+ let objData = {};
949
+ let searchForm = vm.userCrud.searchForm;
950
+ vm.userCrud.noClearSearchColumns && vm.userCrud.noClearSearchColumns.forEach(function (key) {
951
+ objData[key] = searchForm[key];
952
+ });
953
+
954
+ if(loginUser && loginUser.tenantId){
955
+ vm.userCrud.searchForm["tenantId"] = loginUser.tenantId;
956
+ }
957
+ vm.userCrud.searchForm = Object.assign({}, objData);
958
+ vm.$refs[vm.userCrud.setting.pageRef] && (vm.$refs[vm.userCrud.setting.pageRef]["internalCurrentPage"] = 1);
959
+ vm.userCrud.searchForm.page = '0';
960
+ vm.userCrud.search();
961
+
962
+ vm.chooseUserDialog = true;
963
+ },
964
+ adjustOrder(pos) { // 打开调整用户顺序
965
+ let vm = this;
966
+ if (!vm.orgId) {
967
+ vm.$message("选择左侧组织后再操作!");
968
+ return;
969
+ }
970
+ if (pos == "pos" && !vm.posId) {
971
+ vm.$message("请先选择岗位!");
972
+ return;
973
+ }
974
+ if (pos == "pos") {
975
+ vm.axios.post(vm.api.sysOrgPosUser.findNoPage, {"posId": vm.posId,"orgId":vm.orgId,"commonUserType":"1"}).then(function (res) {
976
+ vm.posUserArr = res.data;
977
+ });
978
+ } else {
979
+ vm.axios.post(vm.api.sysOrgPosUser.findNoPage, {
980
+ "orgId": vm.orgId,
981
+ "posIdIsNull": "Y",
982
+ "commonUserType":"1"
983
+ }).then(function (res) {
984
+ vm.posUserArr = res.data;
985
+ });
986
+ }
987
+ vm.updateOrder = true;
988
+ vm.orderDialog = true;
989
+ },
990
+ saveOrder() { // 保存顺序
991
+ let vm = this;
992
+ let datas = [];
993
+ vm.posUserArr.forEach(function (posUser) {
994
+ let obj = {};
995
+ obj["id"] = posUser["id"];
996
+ obj["userLayer"] = posUser["userLayer"] || "0";
997
+ datas.push(obj);
998
+ });
999
+ vm.axios.post(vm.api.sysOrgPosUser.batchUpdate, {"updateObj": JSON.stringify(datas)}).then(function (res) {
1000
+ vm.$message({
1001
+ message: res.data.operateMessage,
1002
+ type: "success",
1003
+ duration: 1200
1004
+ });
1005
+ vm.crud.search();
1006
+ let loginUser = vm.USER_GLOBAL.getLoginUser() || {};
1007
+ if(loginUser && loginUser.tenantId){
1008
+ vm.posCrud.searchForm["tenantId"] = loginUser.tenantId;
1009
+ }
1010
+ vm.posCrud.search();
1011
+ });
1012
+ vm.orderDialog = false;
1013
+ },
1014
+ setUser() { // 选择用户
1015
+ let vm = this;
1016
+ let selection = vm.multipleSelection;
1017
+ //let selection = vm.$refs[vm.userCrud.tableRef].selection;
1018
+ if ((selection || []).length == 0) {
1019
+ vm.$message({
1020
+ duration: 1500,
1021
+ type: 'info',
1022
+ message: '请至少选择一条需要操作的数据!'
1023
+ });
1024
+ return;
1025
+ }
1026
+ vm.updateOrder = false;
1027
+ vm.posUserArr = [];
1028
+ let sort = 0;
1029
+ let param = {"order": "USER_LAYER DESC", "posIdIsNull": "Y", "orgId": vm.orgId};
1030
+ if (vm.setPos) {
1031
+ param = {"order": "USER_LAYER DESC", "posId": vm.posId};
1032
+ }
1033
+ vm.axios.post(vm.api.sysOrgPosUser.find, param).then(function (res) {
1034
+ if (res.data.length > 0) {
1035
+ sort = Number(res.data[0].userLayer);
1036
+ }
1037
+ selection.forEach(function (select) {
1038
+ let obj = {};
1039
+ obj["userId"] = select.id;
1040
+ obj["userLayer"] = ++sort;
1041
+ if (vm.setPos) {
1042
+ obj["posId"] = vm.posId;
1043
+ }
1044
+ obj["orgId"] = vm.orgId;
1045
+ obj["userName"] = select.userName;
1046
+ vm.posUserArr.push(obj);
1047
+ });
1048
+ vm.orderDialog = true;
1049
+ })
1050
+ },
1051
+ addOrder() { // 添加至组织下
1052
+ let vm = this;
1053
+ let arr = JSON.parse(JSON.stringify(vm.posUserArr));
1054
+ let submitArr = [];
1055
+ arr.forEach(function (posUser) {
1056
+ delete posUser["userName"];
1057
+ submitArr.push(posUser);
1058
+ });
1059
+ vm.axios.post(vm.api.sysOrgPosUser.batchAdd, {"addObj": JSON.stringify(submitArr)}).then(function (res) {
1060
+ vm.$message({
1061
+ duration: 1200,
1062
+ message: res.data.operateMessage,
1063
+ type: "success"
1064
+ });
1065
+ vm.orderDialog = false;
1066
+ vm.chooseUserDialog = false;
1067
+ let loginUser = vm.USER_GLOBAL.getLoginUser() || {};
1068
+ if(loginUser && loginUser.tenantId){
1069
+ vm.posCrud.searchForm["tenantId"] = loginUser.tenantId;
1070
+ }
1071
+ vm.posCrud.search();
1072
+ vm.crud.search();
1073
+ })
1074
+ },
1075
+ addUser() {// 添加用户
1076
+ let vm = this;
1077
+ vm.addUserForm = {};
1078
+ vm.userTypeOptions = [];
1079
+ let chooseUserTypeArr = (vm.pageSetting["chooseUserType"] || "").split(",");
1080
+ vm.typeOptions.forEach(function (type) {
1081
+ vm.userTypeOptions.push(type);
1082
+ /*if (chooseUserTypeArr.indexOf(type["value"]) > -1) {
1083
+ vm.userTypeOptions.push(type);
1084
+ }*/
1085
+ });
1086
+ vm.$set(vm.addUserForm, "userType", chooseUserTypeArr[0]);
1087
+ vm.$set(vm.addUserForm, "userStatus", "10");
1088
+ vm.addUserDialog = true;
1089
+ vm.$nextTick(function () {
1090
+ vm.$refs.addUserRef.clearValidate(); // 再次添加清除原先的验证
1091
+ })
1092
+ },
1093
+ saveUser() { // 保存用户
1094
+ let vm = this;
1095
+ // vm.addUserForm.userAccount = vm.addUserForm.userName;
1096
+ vm.$refs.addUserRef.validate(function (valid) { // 表单验证
1097
+ if (valid) {
1098
+ vm.axios.post(vm.api.sysUser.validateAccountIsNotExists,
1099
+ {"userAccount": vm.addUserForm.userAccount}).then(function (resValid) { // 验证账号是否存在
1100
+ if (resValid.data) {
1101
+ vm.axios.post(vm.api.sysUser.addUserAndInfo, vm.addUserForm).then(function (res) {
1102
+ vm.$message({
1103
+ duration: 1000,
1104
+ type: 'success',
1105
+ message: res.data.operateMessage
1106
+ });
1107
+ vm.addUserDialog = false;
1108
+ vm.userCrud.search();
1109
+ })
1110
+ } else {
1111
+ vm.$message({
1112
+ message: "账号已存在!",
1113
+ duration: 1200,
1114
+ type: "warning"
1115
+ });
1116
+ }
1117
+ });
1118
+ }
1119
+ });
1120
+ },
1121
+ updateOrgName() { // 更新组织
1122
+ let vm = this;
1123
+ if (!vm.orgId) {
1124
+ vm.$message("选择左侧组织后再操作!");
1125
+ return;
1126
+ }
1127
+ if (!vm.formOrgName) {
1128
+ vm.$message("请设置组织名称!");
1129
+ return;
1130
+ }
1131
+ let arr = ["province", "city", "area", "street","community"];
1132
+ let obj = {"id": vm.orgId, "orgName": vm.formOrgName, "orgClassify": vm.classify,"sort":vm.orgObj.sort};
1133
+ if(vm.orgLocation&&vm.orgLocation.length>0&&typeof vm.orgLocation != 'string'){
1134
+ vm.orgLocation.forEach((item,index)=>{
1135
+ obj[arr[index]] = item;
1136
+ })
1137
+ }
1138
+
1139
+ vm.axios.post(vm.api.sysOrg.updateSysOrg, obj).then(function (res) {
1140
+ vm.$message({
1141
+ message: res.data.operateMessage,
1142
+ duration: 1200,
1143
+ type: "success"
1144
+ });
1145
+ res.data.operateSuccess && vm.updateCallBack && vm.updateCallBack(obj);
1146
+ vm.$emit("saveRollBack",obj);
1147
+ })
1148
+ },
1149
+ formatterColumn(row, column, cellValue) { // 格式化列
1150
+ let vm = this;
1151
+ if (column.property == 'userType') {
1152
+ return vm.userTypeMap[cellValue];
1153
+ } else if (column.property == 'userStatus') {
1154
+ return vm.userStatusMap[cellValue];
1155
+ } else {
1156
+ return cellValue;
1157
+ }
1158
+ },
1159
+ /**
1160
+ * 岗位信息
1161
+ */
1162
+ posTreeCallBack(posTreeVm) { // 岗位初始化全部展开
1163
+ let nodesMap = posTreeVm.getAllNode();
1164
+ let chooseFirstData = {};
1165
+ let chooseFirstNode = {};
1166
+ if((posTreeVm.data || []).length > 0){
1167
+ chooseFirstData = posTreeVm.data[0];
1168
+ }
1169
+ for (let [key, node] of Object.entries(nodesMap)) {
1170
+ node.expanded = true;
1171
+ if(chooseFirstData.id && node.data.id == chooseFirstData.id){
1172
+ chooseFirstNode = node;
1173
+ node.isCurrent = true;
1174
+ }
1175
+ }
1176
+ if(chooseFirstData.id){
1177
+ this.posNodeClick(chooseFirstData,chooseFirstNode);
1178
+ }
1179
+ },
1180
+ posDealTree(data) {
1181
+ let vm = this;
1182
+ data.forEach(function (pos) {
1183
+ pos["name"] = pos["posName"];
1184
+ if (pos["isMainpos"] === '1') {
1185
+ pos["name"] = pos["posName"] + "[主岗位]";
1186
+ pos["className"] = vm.pageSetting["posMainIcon"] || "saspiconfont pl-icon-yonghu";
1187
+ } else {
1188
+ pos["className"] = vm.pageSetting["posIcon"] || "saspiconfont pl-icon-account";
1189
+ }
1190
+ });
1191
+ },
1192
+ posNodeClick(data, node) { // 岗位树节点点击事件
1193
+ let vm = this;
1194
+ vm.posId = data.id;
1195
+ vm.posBaseForm = Object.assign({}, data);
1196
+ if(!vm.posBaseForm || vm.posBaseForm.parentPosId == '-1'){
1197
+ vm.posBaseForm.parentPosId = null;
1198
+ }
1199
+ vm.menuVisible = false;
1200
+ },
1201
+ posTreeRightClick(event, data, node) {
1202
+ let vm = this;
1203
+ let expand = node.expanded;
1204
+ let target = window.event.target;
1205
+ if (target.tagName === 'DIV') {
1206
+ target.click(); // 右键时点击当前节点
1207
+ } else {
1208
+ let pNode = target.parentNode;
1209
+ if (target.className === 'el-checkbox__inner') { // 右击checkBox
1210
+ pNode.parentNode.parentNode.click();
1211
+ } else { // 右击下拉图标
1212
+ pNode.click();
1213
+ }
1214
+ }
1215
+ node.expanded = expand; // 右击仅选中当前节点保持当前节点展开情况不变
1216
+ if (vm.objectID !== data.id) {
1217
+ vm.objectID = data.id;
1218
+ vm.menuVisible = true;
1219
+ } else {
1220
+ vm.menuVisible = !vm.menuVisible;
1221
+ }
1222
+
1223
+ vm.left = window.event.clientX + "px";
1224
+ vm.top = window.event.clientY + "px";
1225
+ },
1226
+ savePos() { // 保存岗位数据addPosForm
1227
+ let vm = this;
1228
+ vm.$refs.addPosRef.validate(function (valid) {
1229
+ if (valid) {
1230
+ if (vm.addPosForm.isMainpos == "1") { // 设置为主岗位时检索当前组织下是否有主岗位
1231
+ vm.axios.post(vm.api.sysPos.find, {
1232
+ "orgId": vm.orgId,
1233
+ "isMainpos": "1"
1234
+ }).then(function (res) {
1235
+ let result = res.data;
1236
+ if ((result || []).length > 0 && result[0].id !== vm.addPosForm.id) {
1237
+ let msg = "目前此组织内已存在主岗位[" + result[0].posName + "],是否确定设置此岗位为主岗位(系统会自动把[" + result[0].posName + "]设置为普通岗位)?";
1238
+ vm.$confirm(msg, '警告', {
1239
+ confirmButtonText: '确定',
1240
+ cancelButtonText: '取消',
1241
+ }).then(async function () {
1242
+ vm.addPosDialog = false;
1243
+ await vm.axios.post(vm.api.sysPos.update, {
1244
+ "id": result[0].id,
1245
+ "isMainpos": "0"
1246
+ });
1247
+ vm.addPosData();
1248
+ }).catch(() => {
1249
+ vm.$message({
1250
+ duration: 1000,
1251
+ type: 'info',
1252
+ message: '已取消'
1253
+ });
1254
+ });
1255
+ } else {
1256
+ vm.addPosDialog = false;
1257
+ vm.addPosData();
1258
+ }
1259
+ })
1260
+ } else {
1261
+ vm.addPosDialog = false;
1262
+ vm.addPosData();
1263
+ }
1264
+ }
1265
+ })
1266
+ },
1267
+ addPosData() { // 添加岗位数据
1268
+ let vm = this;
1269
+ if(!vm.addPosForm.parentPosId){
1270
+ vm.addPosForm.parentPosId = '-1';
1271
+ }
1272
+ vm.axios.post(vm.api.sysPos.add, vm.addPosForm).then(function (res) {
1273
+ vm.$message({
1274
+ duration: 1200,
1275
+ message: res.data.operateMessage,
1276
+ type: "success"
1277
+ });
1278
+ vm.$refs.posTreeRef.init();
1279
+ })
1280
+ },
1281
+ handleRightSelect(key) {
1282
+ let vm = this;
1283
+ switch (key) {
1284
+ case "addChild":
1285
+ case "addSame":
1286
+ vm.addNode(key);
1287
+ break;
1288
+ case "removeCurrent":
1289
+ vm.removeCurrentNode();
1290
+ break;
1291
+ case "removeCheck":
1292
+ vm.removeNode();
1293
+ break;
1294
+ default:
1295
+ console.log("未检测到当前操作的对应方法!");
1296
+ break;
1297
+ }
1298
+ },
1299
+ addNode(key) { // addPosForm
1300
+ let vm = this;
1301
+ if (!vm.orgId || vm.orgId == "$") {
1302
+ vm.$message("请选择左侧组织后继续操作!");
1303
+ return;
1304
+ }
1305
+ vm.addPosForm = {"isMainpos": "0"};
1306
+ key = key ? key : "addChild";
1307
+ let data = vm.$refs.posTreeRef.getTreeCurrentNode();
1308
+ vm.addPosForm["orgId"] = vm.orgId;
1309
+ vm.addPosForm["orgName"] = vm.orgObj["orgName"];
1310
+ if (key == "addChild") {
1311
+ if (!data) { // 直接添加未选择任何节点,默认第一级
1312
+ vm.addPosForm["parentPosId"] = null;
1313
+ vm.addPosForm["parentPosTree"] = "-1";
1314
+ vm.addPosForm["layer"] = "1";
1315
+ } else {
1316
+ vm.addPosForm["parentPosId"] = data.id;
1317
+ vm.addPosForm["parentPosTree"] = data["parentPosTree"] + "," + data["id"];
1318
+ vm.addPosForm["parentPosName"] = data.posName;
1319
+ vm.addPosForm["layer"] = Number(data["layer"]) + 1;
1320
+ }
1321
+ vm.addPosForm["sort"] = vm.getMaxOrder("child");
1322
+ } else { // 添加同级数据
1323
+ vm.addPosForm["parentPosId"] = data["parentPosId"];
1324
+ if(vm.addPosForm["parentPosId"] == "-1"){
1325
+ vm.addPosForm["parentPosId"] = null;
1326
+ }
1327
+ vm.addPosForm["parentPosTree"] = data["parentPosTree"];
1328
+ vm.addPosForm["parentPosName"] = data.parentPosName;
1329
+ vm.addPosForm["layer"] = data["layer"];
1330
+ vm.addPosForm["sort"] = vm.getMaxOrder("same");
1331
+ }
1332
+ vm.addPosDialog = true;
1333
+ vm.$nextTick(function () {
1334
+ vm.$refs.addPosRef.clearValidate();
1335
+ })
1336
+ },
1337
+ getMaxOrder(type) {
1338
+ let vm = this;
1339
+ let currentNode = vm.$refs.posTreeRef.getTreeCurrentNode();
1340
+ let sort = 1;
1341
+ let arr = [];
1342
+ if (type == "same") {
1343
+ let nodesMap = vm.$refs.posTreeRef.getAllNode();
1344
+ if (!currentNode.parentPosId || currentNode.parentPosId == "-1") {
1345
+ for (let [key, node] of Object.entries(nodesMap)) {
1346
+ if (node.level == 1) {
1347
+ arr.push(node.data);
1348
+ }
1349
+ }
1350
+ } else {
1351
+ // 是下级
1352
+ if(nodesMap[currentNode.parentPosId]){
1353
+ arr = nodesMap[currentNode.parentPosId].data.children;
1354
+ }else{ // 第一级
1355
+ Object.keys(nodesMap).forEach(key => {
1356
+ if(nodesMap[key].level == 1){
1357
+ arr.push(nodesMap[key].data);
1358
+ }
1359
+ })
1360
+ }
1361
+ }
1362
+ }
1363
+ if (type == "child") {
1364
+ arr = (currentNode || {}).children;
1365
+ }
1366
+ (arr || []).forEach(function (each) {
1367
+ sort = sort > Number(each["sort"]) ? sort : Number(each["sort"]);
1368
+ });
1369
+ return ++sort;
1370
+ },
1371
+ removeCurrentNode() { // 删除当前节点
1372
+ let vm = this;
1373
+ vm.$confirm('确定删除当前节点?', '警告', {
1374
+ confirmButtonText: '确定',
1375
+ cancelButtonText: '取消',
1376
+ }).then(function () {
1377
+ let currentNode = vm.$refs.posTreeRef.getTreeCurrentNode();
1378
+ let removeNodeArr = vm.$refs.posTreeRef.getCurrentChildren(currentNode, []);
1379
+ vm.axios.post(vm.api.sysPos.delete, {"ids": removeNodeArr.join(",")}).then(function (res) {
1380
+ if (res.data.operateSuccess) {
1381
+ vm.$refs.posTreeRef.defaultTreeRemove(removeNodeArr.join(","));
1382
+ //同步修改下级岗位中
1383
+ vm.axios.post(vm.api.sysPos.updateParentPos, {"parentPosIds": removeNodeArr.join(",")});
1384
+
1385
+ }
1386
+ vm.$message({
1387
+ duration: 1000,
1388
+ type: 'success',
1389
+ message: res.data.operateMessage
1390
+ }
1391
+ );
1392
+ });
1393
+ }).catch(function () {
1394
+ vm.$message({
1395
+ duration: 1000,
1396
+ type: 'info',
1397
+ message: '已取消'
1398
+ });
1399
+ });
1400
+ },
1401
+ removeNode() { // 刪除勾選節點
1402
+ let vm = this;
1403
+ let removeArr = vm.$refs.posTreeRef.getTreeCheckedNodes("key");
1404
+ if (removeArr.length == 0) {
1405
+ vm.$message("请勾选需要删除的节点!");
1406
+ return;
1407
+ }
1408
+ vm.$confirm('确定删除已勾选节点?', '警告', {
1409
+ confirmButtonText: '确定',
1410
+ cancelButtonText: '取消',
1411
+ }).then(function () {
1412
+ vm.loading = true;
1413
+ vm.axios.post(vm.api.sysPos.delete, {"ids": removeArr.join(",")}).then(function (res) {
1414
+ if (res.data.operateSuccess) {
1415
+ vm.$refs.posTreeRef.defaultTreeRemove(removeArr.join(","));
1416
+ }
1417
+ vm.loading = false;
1418
+ vm.$message({
1419
+ duration: 1000,
1420
+ type: 'success',
1421
+ message: res.data.operateMessage
1422
+ }
1423
+ );
1424
+ vm.init();
1425
+ })
1426
+ }).catch(function () {
1427
+ vm.$message({
1428
+ duration: 1000,
1429
+ type: 'info',
1430
+ message: '已取消'
1431
+ });
1432
+ });
1433
+ },
1434
+ updatePosInfo() { // 更新岗位信息
1435
+ let vm = this;
1436
+ if (!vm.posId) {
1437
+ vm.$message("请选择左侧岗位后再操作!");
1438
+ return;
1439
+ }
1440
+ vm.$refs.posBaseRef.validate(function (valid) {
1441
+ if (valid) {
1442
+ if (vm.posBaseForm.isMainpos == "1") { // 设置为主岗位时检索当前组织下是否有主岗位
1443
+ vm.axios.post(vm.api.sysPos.find, {
1444
+ "orgId": vm.orgId,
1445
+ "isMainpos": "1"
1446
+ }).then(function (res) {
1447
+ let result = res.data;
1448
+ if ((result || []).length > 0 && result[0].id != vm.posBaseForm.id) {
1449
+ let msg = "目前此组织内已存在主岗位[" + result[0].posName + "],是否确定设置此岗位为主岗位(系统会自动把[" + result[0].posName + "]设置为普通岗位)?";
1450
+ vm.$confirm(msg, '警告', {
1451
+ confirmButtonText: '确定',
1452
+ cancelButtonText: '取消',
1453
+ }).then(function () {
1454
+ vm.submitPosForm();
1455
+ vm.axios.post(vm.api.sysPos.update, {
1456
+ "id": result[0].id,
1457
+ "isMainpos": "0"
1458
+ });
1459
+ let nodesMap = vm.$refs.posTreeRef.getAllNode();
1460
+ let oldMainPosData = nodesMap[result[0].id].data;
1461
+ oldMainPosData.isMainpos = "0"; // 修改树中的数据
1462
+ oldMainPosData["name"] = oldMainPosData["posName"]; // 修改树中的数据
1463
+ oldMainPosData["className"] = vm.pageSetting["posIcon"] || "saspiconfont pl-icon-account";
1464
+ }).catch(() => {
1465
+ vm.$message({
1466
+ duration: 1000,
1467
+ type: 'info',
1468
+ message: '已取消'
1469
+ });
1470
+ });
1471
+ } else {
1472
+ vm.submitPosForm();
1473
+ }
1474
+ })
1475
+ } else {
1476
+ vm.submitPosForm();
1477
+ }
1478
+ }
1479
+ });
1480
+ },
1481
+ posRemoveSuc(){
1482
+ this.posBaseForm = {};
1483
+ },
1484
+ submitPosForm() { // 提交岗位表单数据
1485
+ let vm = this;
1486
+ let obj = {};
1487
+ obj["id"] = vm.posBaseForm["id"];
1488
+ obj["posName"] = vm.posBaseForm["posName"];
1489
+ obj["isMainpos"] = vm.posBaseForm["isMainpos"];
1490
+ obj["parentPosId"] = vm.posBaseForm["parentPosId"] || "-1";
1491
+ vm.axios.post(vm.api.sysPos.update, obj).then(function (res) {
1492
+ vm.$message({
1493
+ duration: 1200,
1494
+ message: res.data.operateMessage,
1495
+ type: "success"
1496
+ });
1497
+ if (obj["isMainpos"] == "1") {
1498
+ obj["name"] = obj["posName"] + "[主岗位]";
1499
+ } else {
1500
+ obj["name"] = obj["posName"];
1501
+ }
1502
+ let currentNode = vm.$refs.posTreeRef.getTreeCurrentNode();
1503
+ for (let [key, value] of Object.entries(obj)) { // 更新树中的数据
1504
+ currentNode[key] = value;
1505
+ }
1506
+ if (obj["isMainpos"] == "1") {
1507
+ currentNode["className"] = vm.pageSetting["posMainIcon"] || "saspiconfont pl-icon-yonghu";
1508
+ }else{
1509
+ currentNode["className"] = vm.pageSetting["posIcon"] || "saspiconfont pl-icon-account";
1510
+ }
1511
+ })
1512
+ },
1513
+ addMainPosChange(value){
1514
+ let vm = this;
1515
+ if(value == '1' && vm.addPosForm.layer != '1'){
1516
+ vm.$message("非一级岗位不能设置为主岗位!");
1517
+ vm.addPosForm.isMainpos = "0";
1518
+ }
1519
+ },
1520
+ mainPosChange(value) { // 主岗位变化时判断是否可以进行变更
1521
+ let vm = this;
1522
+ let currentNode = vm.$refs.posTreeRef.getTreeCurrentNode();
1523
+ if (!currentNode) { // 未选择树,不操作
1524
+ return;
1525
+ }
1526
+ if (value == "1" && currentNode.layer != '1') {
1527
+ vm.$message("非一级岗位不能设置为主岗位!");
1528
+ vm.posBaseForm.isMainpos = "0";
1529
+ }
1530
+ },
1531
+ activePosRow(row) {
1532
+ this.activeRow(row, this.posCrud.tableRef);
1533
+ },
1534
+ activeUserRow(row) {
1535
+ this.activeRow(row, this.userCrud.tableRef);
1536
+ this.tableSelect([],row);
1537
+ },
1538
+ activeOrgRow(row) {
1539
+ this.activeRow(row, this.crud.tableRef);
1540
+ },
1541
+ activeRow(row, ref) { // 行点击选中当前行
1542
+ this.$refs[ref].toggleRowSelection(row);
1543
+ },
1544
+ //复选框选中/取消事件
1545
+ tableSelect(selection, row) {
1546
+ if (this.multipleSelection.length > 0) {
1547
+ let index = this.multipleSelectionIds.indexOf(row.id);
1548
+ if (this.multipleSelectionIds.indexOf(row.id) == -1) {
1549
+ this.multipleSelection.push(row);
1550
+ this.multipleSelectionIds.push(row.id);
1551
+ } else {
1552
+ this.multipleSelectionIds.splice(index, 1);
1553
+ this.multipleSelection.splice(index, 1);
1554
+ }
1555
+ } else {
1556
+ this.multipleSelection.push(row);
1557
+ this.multipleSelectionIds.push(row.id);
1558
+ }
1559
+ },
1560
+ userSelectAll(selection) {
1561
+ var vm = this;
1562
+ var rows = vm.userCrud.dataStore.records;
1563
+ if (selection.length > 0) {
1564
+ //全选
1565
+ selection.forEach(item => {
1566
+ this.userSelectAllPush(item);
1567
+ });
1568
+ } else {
1569
+ //取消全选
1570
+ rows.forEach(item => {
1571
+ this.userSelectAllCancel(item);
1572
+ })
1573
+ }
1574
+ },
1575
+ userSelectAllPush(row) {
1576
+ if (this.multipleSelectionIds.indexOf(row.id) == -1) {
1577
+ this.multipleSelection.push(row);
1578
+ this.multipleSelectionIds.push(row.id);
1579
+ }
1580
+ },
1581
+ userSelectAllCancel(row) {
1582
+ let index = this.multipleSelectionIds.indexOf(row.id);
1583
+ if (this.multipleSelectionIds.indexOf(row.id) != -1) {
1584
+ this.multipleSelectionIds.splice(index, 1);
1585
+ this.multipleSelection.splice(index, 1);
1586
+ }
1587
+ },
1588
+ userSearch() {
1589
+ let vm = this;
1590
+ vm.$nextTick(() => {
1591
+ vm.userCrud.dataStore.records.forEach(item => {
1592
+ if (vm.multipleSelectionIds.indexOf(item.id) > -1) {
1593
+ vm.$refs[vm.userCrud.tableRef].toggleRowSelection(item);
1594
+ }
1595
+ })
1596
+ });
1597
+ }
1598
+ }
1599
+ }
1600
+ </script>
1601
+
1602
+ <style scoped>
1603
+ .detail-main /deep/ .el-tabs__content {
1604
+ height: calc(100% - 67px);
1605
+ }
1606
+
1607
+ .detail-main /deep/ .el-collapse-item__header, .detail-main /deep/ .el-collapse-item__wrap {
1608
+ border: 1px solid #ebeef5;
1609
+ border-top: 0;
1610
+ padding: 5px;
1611
+ box-sizing: border-box;
1612
+ }
1613
+
1614
+ .detail-main /deep/ .el-tab-pane {
1615
+ height: 100%;
1616
+ }
1617
+
1618
+ .detail-main /deep/ .el-collapse-item__content {
1619
+ padding: 15px 10px 0;
1620
+ box-sizing: border-box;
1621
+ }
1622
+
1623
+ .choose-user /deep/ .el-dialog__body {
1624
+ height: calc(100% - 60px);
1625
+ padding: 0 15px;
1626
+ }
1627
+
1628
+ .el-menu-vertical {
1629
+ background-color: #555C63;
1630
+ opacity: 0.9;
1631
+ border-radius: 8px;
1632
+ width: 150px;
1633
+ z-index: 99;
1634
+ }
1635
+
1636
+ .detail-main /deep/ .el-collapse-item__header {
1637
+ height: 40px;
1638
+ }
1639
+
1640
+ .order-dialog /deep/ .el-table {
1641
+ height: 100%;
1642
+ }
1643
+
1644
+ .order-dialog /deep/ .el-table__body-wrapper {
1645
+ height: 100%;
1646
+ overflow-y: auto;
1647
+ }
1648
+ </style>