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,1237 @@
1
+ <template>
2
+ <el-container class="select-user-box" style="height: 100%;box-sizing: border-box;background-color: white;overflow-y: hidden">
3
+ <el-container class="select-body" :style="{'box-sizing': 'border-box','height': activeName == '1' ? 'calc(100% - 200px)' : 'calc(100% - 40px)'}">
4
+ <el-aside class="asideTree" v-if="userEnable">
5
+ <el-select v-model="currentDim" style="width: 100%;" @change="dimChange" size="small" :disabled="disabledDim">
6
+ <el-option v-for="item in dimArr" :value="item.id" :key="item.id" :label="item.dimName">
7
+
8
+ </el-option>
9
+ </el-select>
10
+ <el-input :placeholder="searchPlaceholder" v-model="filterTree" style="margin-top: 5px" size="small"></el-input>
11
+ <div style="overflow-y: auto;height: calc(100% - 90px);margin-top: 5px">
12
+ <common-tree v-if="showTree" ref="orgSelectTree" :request-url="api.sysOrg.listNopageDim" :request-param="orgSearchParam"
13
+ parent-id="pId" :default-props="defaultProps" :deal-tree-data="dealTreeData" :init-call-back="initExpandOrignOrg"
14
+ :refresh-proper="currentDim" :checkbox="checkbox&&ognEnable" :expand-onclick-node=false :checkel-tree-change="checkelTreeChange"
15
+ :filter-text="filterTree" :node-click="nodeClick" :root-datas="posArr" :root-data-concat-sort=true :init-check="initCheck"
16
+ :render-content-func="renderContentFunc" :tree-node-expand="treeNodeExpand" :tree-node-collapse="treeNodeCollapse"
17
+ :filter-text-call-back="filterTextCallBack">
18
+ </common-tree>
19
+ </div>
20
+ </el-aside>
21
+ <el-main class="mainTree" v-if="!userEnable">
22
+ <el-select v-model="currentDim" style="width: 100%;" @change="dimChange" size="small">
23
+ <el-option v-for="item in dimArr" :value="item.id" :key="item.id" :label="item.dimName">
24
+
25
+ </el-option>
26
+ </el-select>
27
+ <el-input :placeholder="searchPlaceholder" v-model="filterTree" style="margin-top: 5px" size="small"></el-input>
28
+ <div style="overflow-y: auto;height: calc(100% - 90px);margin-top: 5px">
29
+ <common-tree v-if="showTree" ref="orgSelectTree" :request-url="api.sysOrg.listNopageDim" :request-param="orgSearchParam"
30
+ parent-id="pId" :default-props="defaultProps" :deal-tree-data="dealTreeData" :init-call-back="initExpandOrignOrg"
31
+ :refresh-proper="currentDim" :checkbox="checkbox" :expand-onclick-node=false :checkel-tree-change="checkelTreeChange"
32
+ :filter-text="filterTree" :node-click="nodeClick" :root-datas="posArr" :root-data-concat-sort=true :init-check="initCheck"
33
+ :render-content-func="renderContentFunc" :tree-node-expand="treeNodeExpand" :tree-node-collapse="treeNodeCollapse"
34
+ :filter-text-call-back="filterTextCallBack"
35
+
36
+ >
37
+
38
+ </common-tree>
39
+
40
+ </div>
41
+ </el-main>
42
+ <el-main class="detail-info" v-show="userEnable">
43
+ <el-container style="height: 100%">
44
+ <el-header style="height: auto;padding-left: 0">
45
+ <div class="search-form-parent el-card" style="margin-top: 0">
46
+ <el-form :inline="true" :model="crud.searchForm" @submit.native.prevent size="small" class="demo-form-inline"
47
+ @keyup.enter.native="doSearch()" onSubmit="return false;">
48
+ <el-form-item label="用户名称">
49
+ <el-input v-model="crud.searchForm.userNamePinYin" placeholder="中文、拼音全拼、简拼"></el-input>
50
+ </el-form-item>
51
+ <el-form-item>
52
+ <el-button type="primary" icon="el-icon-search" @click="doSearch()">查询</el-button>
53
+ <el-button icon="el-icon-close" @click="resetSearch()">清空</el-button>
54
+ </el-form-item>
55
+ </el-form>
56
+ </div>
57
+ </el-header>
58
+
59
+ <el-main id="tableMain" style="height:100%;width: 100%;padding-bottom: 10px;padding-left: 0">
60
+ <el-table :data="crud.dataStore.records" :ref="crud.tableRef" stripe border @select="tableSelect" :class="checkbox?'':'pos-user-table'"
61
+ @selection-change="selectChange" style="width: 100%;height: 100%" @row-click="rowClick">
62
+ <el-table-column type="selection" width="40" align="center"></el-table-column>
63
+ <el-table-column type="index" label="序号" align="center" width="60"></el-table-column>
64
+ <el-table-column prop="userName" label="用户名称" align="center"></el-table-column>
65
+ <el-table-column prop="orgName" label="所属组织" align="center"></el-table-column>
66
+ <el-table-column prop="posName" label="所属岗位" align="center"></el-table-column>
67
+ </el-table>
68
+ </el-main>
69
+ <el-footer style="height: 40px">
70
+ <el-pagination
71
+ :ref="crud.pageRef"
72
+ :page-sizes="crud.pageSizes"
73
+ :page-size="crud.pageSize"
74
+ :current-page="crud.page"
75
+ :total="crud.dataStore.total"
76
+ @size-change="crud.sizeChange(checkSelected)"
77
+ @current-change="crud.currentPage(checkSelected)"
78
+ layout="total, sizes, prev, pager, next, jumper">
79
+ </el-pagination>
80
+ </el-footer>
81
+ </el-container>
82
+ </el-main>
83
+ </el-container>
84
+ <el-footer :style="{'height':activeName == '1' ? '200px':'40px','box-sizing': 'border-box'}" class="select-footer">
85
+ <el-collapse accordion v-model="activeName">
86
+ <el-collapse-item name="1">
87
+ <template slot="title">
88
+ <i class="saspiconfont pl-icon-yonghu2" style="margin:0 5px 0 10px"></i>已选择信息
89
+ </template>
90
+ <el-row style="height: 160px;overflow-y: auto;box-sizing: border-box;margin-bottom: 0" class="selectRow">
91
+ <el-col :span="blockLength" v-if="ognEnable">
92
+ <fieldset>
93
+ <legend>已选择组织({{checkedOrg.length}})</legend>
94
+ <div class="alreadyChoose">
95
+ <el-tooltip effect="dark" content="点击删除" placement="top-end" v-for="(org,index) in checkedOrg" :key="index">
96
+ <el-button @click="removeOgn(org.id)" plain type="primary" size="small">
97
+ {{org.name}}
98
+ </el-button>
99
+ </el-tooltip>
100
+ </div>
101
+ </fieldset>
102
+ </el-col>
103
+ <el-col :span="blockLength" v-if="posEnable">
104
+ <fieldset>
105
+ <legend>已选择岗位({{checkedPos.length}})</legend>
106
+ <div class="alreadyChoose">
107
+ <el-tooltip effect="dark" content="点击删除" placement="top-end" v-for="(pos,index) in checkedPos" :key="index">
108
+ <el-button @click="removePos(pos.id)" plain type="primary" size="small">
109
+ {{pos.name}}
110
+ </el-button>
111
+ </el-tooltip>
112
+ </div>
113
+ </fieldset>
114
+ </el-col>
115
+ <el-col :span="blockLength" v-if="userEnable">
116
+ <fieldset>
117
+ <legend>已选择用户({{checkedUser.length}})</legend>
118
+ <div class="alreadyChoose">
119
+ <el-tooltip effect="dark" content="点击删除" placement="top-end" v-for="(posUser,index) in checkedUser" :key="index">
120
+ <el-button @click="removePosUser(posUser.id)" plain type="primary" size="small">
121
+ {{posUser.name}}
122
+ </el-button>
123
+ </el-tooltip>
124
+ </div>
125
+ </fieldset>
126
+ </el-col>
127
+ </el-row>
128
+ </el-collapse-item>
129
+ </el-collapse>
130
+ </el-footer>
131
+ </el-container>
132
+ </template>
133
+
134
+ <script>
135
+ /**
136
+ * 使用当前人员选择组件时,在保存时获取的数据为,已选择的岗位:checkedPos,已选择的组织:checkedOrg,已选择的用户:checkedUser(posUser)
137
+ * 使用getCheckedInfo方法获取。
138
+ */
139
+ export default {
140
+ name: "sys-org-pos-user-select",
141
+ props:{
142
+ chooseUrl:{type:String,default:""}, // 已选择信息的url
143
+ chooseParam:{type:Object,default:() => ({})}, // 已选择信息的url参数
144
+ chooseField:{type:String,default:""}, // 获取已选择信息对应的字段
145
+ orgDims:{type:String,default:""}, // 逗号分隔的维度字符串,也就是roleType
146
+ orgTreeIds:{type:String,default:""}, // 过滤组织的条件
147
+ defaultChooseIds:{type:String,default:""}, // 已选择的人员信息
148
+ defaultOrgIds:{type:String,default:""},
149
+ defaultPosIds:{type:String,default:""},
150
+ defaultUserIds:{type:String,default:""},
151
+ ognEnable:{type:Boolean,default:true}, // 组织可用
152
+ posEnable:{type:Boolean,default:true}, // 岗位可用
153
+ userEnable:{type:Boolean,default:true}, // 人员可用
154
+ filterUserSource:{type:String,default:""}, // 限定用户来源
155
+ checkbox:{type:Boolean,default:true}, // 复选(true)、单选(false)
156
+ refreshProper:{type:Boolean,default:false}, // 刷新当前组件的办法(true为刷新,false为不刷新)
157
+ filterUserParam:{type:Object,default:() => ({})}, // 查询用户时需要过滤的额外条件
158
+ caseAuth:{type:Boolean,default:false}, // 如果是授权角色的人员设置需要在移除人员时做提示
159
+ openLowLevelCheckbox:{type:Boolean,default:false},//是否开启组织下级权限复选框
160
+ filterOrgParam:{}, // 过滤组织数据
161
+ filterPosParam:{}, // 过滤岗位数据
162
+
163
+ tenantId:{type:String,default:""}, //租户id
164
+ tenantCreated:{type:String,default:''}, //租户创建者
165
+ },
166
+
167
+ data(){
168
+ return {
169
+ crud: new this.CrudUtil({
170
+ vue: this,
171
+ entityName: "sysOrgPosUser",
172
+ searchUrl: this.api.sysOrgPosUser.findPageParam,
173
+ noClearSearchColumns:["orgTreeId","posTreeId","noneUserId","authUserType",
174
+ "created","empowerId","commonUserType","filterUserSource","userLinkIdPam",'filterLoginUser','tenantId'],
175
+ searchForm:{"orgTreeId":"$$$$$","tenantId":this.tenantId}, // 初始化时虽然不会产生数据因为nosearch,但是输入跳转会触发搜索,当前没条件就会生成所有数据,加上这个不查数据,树节点点击时清空它了
176
+ initNoSearch:true,
177
+ }),
178
+ defaultProps:{children: 'children', label: 'name'}, // 树组件的配置信息
179
+ chooseIds:"", // 已选择数据ids
180
+ chooseOrgIds:"",
181
+ choosePosIds:"",
182
+ chooseUserIds:"",
183
+ dimArr:[], // 维度集合
184
+ currentDim:"", // 当前维度
185
+ searchPlaceholder:"组织名称",
186
+ showTree:false, // 树组件的加载时机
187
+ highlightcurrentKey:"", // 高亮选中项的key
188
+ filterTree:"", // 搜索框过滤
189
+ activeName:"0", // 默认展开的折叠面板
190
+ checkedOrg:[],
191
+ checkedPos:[],
192
+ checkedUser:[],
193
+ blockLength:8, // 已选择信息各个块的宽度
194
+ posArr:[], // 岗位数据
195
+ availabelLength:0, // 可用的模块(组织,列表,岗位)
196
+ initCheck:{}, // 初始化选中的数据
197
+ defaultDim:"", // 初始化默认维度
198
+ orgSearchParam:{},
199
+ posSearchParam:{"sort":"TB.PARENT_POS_ID,TB.SORT"},
200
+ pageSetting:{}, // 页面配置参数
201
+ userDeptDimId:"", // 企业部门id
202
+ loginUser:{}, // 登录用户
203
+ refreshTableId:"", // 刷新当前table的办法
204
+ roleTypeMap:{}, // 权限名称对应的map
205
+ roleTypeName:"", // 政府权限
206
+
207
+ //节点位置
208
+ levelParentOrg:[], // 保存所有的父节点数据
209
+ levelChildrenOrg:[], // 保存所有的子节点数据
210
+ chooseCascadeDataIds:"", // 保存所有开启下级权限的子集数据 id
211
+ chooseCascadeParentDataIds:"",// 保存所有开启下级权限的父级数据id
212
+ isChecked:{},
213
+ expandOrignArr:[], // 保存一级组织Id数组
214
+ stopChange:false, // 阻止节点change事件
215
+ entOrgDim:"",
216
+
217
+ tenantOrgId:'',
218
+ disabledDim:false,
219
+ tenantDim:'',//租户维度
220
+ }
221
+ },
222
+ created(){
223
+ let vm = this;
224
+ if(!vm.tenantId){
225
+ vm.disabledDim = true;
226
+ }
227
+ vm.loginUser = vm.USER_GLOBAL.getLoginUser() || {};
228
+ vm.axios.post(vm.api.param.getSysParams,{"key":"userDimension"}).then(function (res) {
229
+ let sysParamObj = res.data;
230
+ // vm.entOrgDim = JSON.parse(vm.platStringUtil.replaceAll(sysParamObj["sysEntDim.id"],"'","\"") || "{}");;
231
+ vm.roleTypeMap = JSON.parse(vm.platStringUtil.replaceAll(sysParamObj,"'","\"") || "{}");
232
+ vm.init();
233
+ });
234
+ /*vm.axios.post("/sysParamController/getPropertiesParams",{"key":"sysEntDim.id"}).then(function (res) {
235
+ vm.entOrgDim = res.data;
236
+ vm.axios.post("/sysParamController/getSysParams",{"key":"userDimension"}).then(function (res) {
237
+ vm.roleTypeMap = JSON.parse(vm.platStringUtil.replaceAll(res.data.paramVal,"'","\"") || "{}");
238
+ vm.init();
239
+ });
240
+ });*/
241
+ },
242
+ watch:{
243
+ refreshProper(){
244
+ if(!this.refreshProper){
245
+ return;
246
+ }
247
+ this.$refs.orgSelectTree && this.$refs.orgSelectTree.setTreeCurrentKey(null); // 刷新时不选中节点
248
+ this.crud.searchForm["orgTreeId"] = "$$$$$";
249
+ this.crud.search();
250
+ this.init();
251
+ },
252
+ refreshTableId(){ // orgId变化时刷新右边的table内容
253
+ let vm = this;
254
+ let searchForm = vm.crud.searchForm;
255
+ let data = vm.$refs.orgSelectTree.getTreeCurrentNode() || {};
256
+ searchForm["orgTreeId"] = "";
257
+ searchForm["posTreeId"] = "";
258
+ searchForm["page"] = 1;
259
+ searchForm["filterUserSource"] = vm.filterUserSource;
260
+ vm.$refs[vm.crud.setting.pageRef]["internalCurrentPage"] = 1;
261
+ if(vm.currentdim != vm.entorgdim){ // 不等于entorgdim企业部门纬度
262
+ vm.crud.searchform = object.assign({},searchform,vm.pagesetting["userselectdefaultparams"])
263
+ }
264
+ vm.crud.searchForm = Object.assign({},searchForm,(vm.filterUserParam || {}));
265
+ if(data["nodeType"] == 'pos'){
266
+ vm.crud.searchForm["posTreeId"] = data["id"];
267
+ }else{
268
+ vm.crud.searchForm["orgTreeId"] = data["id"] || "$$$$$";
269
+ }
270
+ // if(vm.currentDim == vm.entOrgDim && vm.filterUserParam['authUserType'] != 'empower'){
271
+ // vm.crud.searchForm["userLinkIdPam"]="entDept";
272
+ // }
273
+ if(vm.tenantId){
274
+ vm.crud.searchForm["tenantId"] = vm.tenantId;
275
+ }
276
+ vm.crud.search(vm.checkSelected);
277
+ }
278
+ },
279
+ methods:{
280
+ init(){
281
+ let vm = this;
282
+ let arr = ["ognEnable","posEnable","userEnable"];
283
+ vm.availabelLength = 0;
284
+ arr.forEach(function (name) {
285
+ vm[name] && vm["availabelLength"]++;
286
+ });
287
+ vm.refreshTableId = "";
288
+ vm.chooseIds = vm.defaultChooseIds; // 子组件不能修改父组件的变量,这里用它来接收做改变
289
+ vm.availabelLength && (vm.blockLength = 24/vm.availabelLength) && (vm.activeName = '1');
290
+ !vm.availabelLength && (vm.activeName = '0'); // 初始化可选择的块
291
+ let nameArr = ["checkedOrg","checkedPos","checkedUser"];
292
+ nameArr.forEach(function (name) {
293
+ vm[name] = [];
294
+ });
295
+
296
+ vm.isChecked = {}; //清空
297
+
298
+ vm.levelParentOrg = [];
299
+ vm.levelChildrenOrg = [];
300
+
301
+
302
+ Object.keys(vm.roleTypeMap).forEach(function (key) {
303
+ if(key == (vm.orgDims || "").split(",")[0]){
304
+ vm.roleTypeName = vm.roleTypeMap[key];
305
+ }
306
+ });
307
+ if(vm.chooseUrl && vm.chooseField){
308
+ vm.axios.post(vm.chooseUrl,vm.chooseParam).then(function (chooseRes) {
309
+ vm.chooseCascadeDataIds = "";
310
+ vm.chooseCascadeParentDataIds = "";
311
+ let tempArr = [];
312
+ let orgArr=[];
313
+ let posArr=[];
314
+ let userArr=[];
315
+ let tempCascadeArr = []; //保存所有选中的子集数据
316
+ let tempCascadeParentArr = []; //保存所有的选中的父级数据
317
+
318
+ chooseRes.data.forEach(function (chooseData) {
319
+ if(chooseData["userId"]){
320
+ userArr.push(chooseData[vm.chooseField]);
321
+ tempArr.push(chooseData[vm.chooseField]);
322
+ }else{
323
+ if(chooseData["orgId"]){
324
+ orgArr.push(chooseData["orgId"]);
325
+ }
326
+ if(chooseData["posId"]){
327
+ posArr.push(chooseData["posId"]);
328
+ }
329
+ tempArr.push(chooseData["id"]);
330
+ }
331
+ if(vm.openLowLevelCheckbox){
332
+ if(chooseData.cascadeData == 'true'){
333
+ tempCascadeArr.push(chooseData[vm.chooseField]);
334
+ }
335
+
336
+ //如果是父级勾选的 cascadeData 设置为 parent
337
+ if(chooseData.cascadeData == 'parent'){
338
+ tempCascadeParentArr.push(chooseData[vm.chooseField]);
339
+ }
340
+ }
341
+ });
342
+ vm.chooseOrgIds = orgArr.join(",");
343
+ vm.choosePosIds = posArr.join(",");
344
+ vm.chooseUserIds = userArr.join(",");
345
+ vm.chooseIds += tempArr.join(",");
346
+ vm.chooseCascadeDataIds += tempCascadeArr.join(","); //所有开启下级权限的子集数据
347
+ vm.chooseCascadeParentDataIds += tempCascadeParentArr.join(","); //所有开启下级权限的父级
348
+ vm.initChooseInfo(); // 初始化已选择的内容
349
+ });
350
+ }else{
351
+ vm.initChooseInfo();
352
+ }
353
+ },
354
+ async initChooseInfo(){ // 初始化选中信息
355
+ let vm = this;
356
+ vm.defaultDim = "";
357
+ if(vm.chooseIds){
358
+ let objArr = [{"url":vm.api.sysOrg.find,"name":"orgName","arr":"checkedOrg",param:{"id":vm.defaultOrgIds || vm.chooseOrgIds||vm.chooseIds}},
359
+ {"url":vm.api.sysPos.find,"name":"posName","arr":"checkedPos",param:{"id":vm.defaultPosIds || vm.choosePosIds||vm.chooseIds}},
360
+ {"url":vm.api.sysOrgPosUser.findNoPage,"name":"userName","arr":"checkedUser",param:{"ids":vm.defaultUserIds || vm.chooseUserIds||vm.chooseIds}}];
361
+ for(let obj of objArr){
362
+ await vm.axios.post(obj["url"],obj.param).then(function (result) {
363
+ (result.data || []).forEach(function (data) {
364
+ data["name"] = data[obj["name"]];
365
+ if(vm.openLowLevelCheckbox && (obj["arr"]== "checkedOrg" || obj["arr"] == "checkedPos" )){
366
+ //如果开启 chooseCascadeDataIds
367
+ if(vm.chooseCascadeDataIds == ''){
368
+ vm[obj["arr"]].push(data);
369
+ }
370
+ let chooseCascadeDataArr = (vm.chooseCascadeDataIds || '').split(",") || [];
371
+ if(vm.chooseCascadeDataIds !='' && chooseCascadeDataArr.indexOf(data.id) == -1){ //
372
+ vm[obj["arr"]].push(data);
373
+ }
374
+ }else{
375
+ vm[obj["arr"]].push(data);
376
+ }
377
+ });
378
+ if(result.data.length > 0){
379
+ vm.defaultDim = result.data[0]["orgDim"]; // 当前维度
380
+ }
381
+ });
382
+ }
383
+ vm.dataFinish();
384
+ }else{
385
+ vm.initTeantIdOrg().then(()=>{
386
+ vm.initTree();
387
+ });
388
+ }
389
+ },
390
+ dataFinish(){ // 初始化已选择的信息,当信息获取完成后再初始化树
391
+ let vm = this;
392
+ if(!vm.checkbox){ // 单选,单选时仅保留一个选项
393
+ let arr = ["checkedOrg","checkedPos","checkedUser"];
394
+ for(let name of arr){
395
+ if(vm[name].length > 0){
396
+ arr.forEach(function (empty) {
397
+ if(empty != name){
398
+ vm[empty] = [];
399
+ }
400
+ });
401
+ vm[name] = [vm[name][0]];
402
+ vm.highlightcurrentKey = vm[name][0];
403
+ break;
404
+ }
405
+ }
406
+ }
407
+ vm.initTeantIdOrg().then(()=>{
408
+ vm.initTree();
409
+ });
410
+ },
411
+ initTree(dim){ // 初始化树
412
+ let vm = this;
413
+ vm.showTree = false;
414
+ vm.posArr = [];
415
+ let paramObj = {"order":"sort"};
416
+ if(vm.orgDims){
417
+ paramObj = {"id":vm.orgDims,"order":"sort"};
418
+ }
419
+ if(vm.tenantId){
420
+ paramObj = {"dimName":"租户维度"};
421
+ }
422
+ vm.axios.post(vm.api.sysOrgDimension.find,paramObj).then(function (res) {
423
+ vm.dimArr = res.data;
424
+ // 如果默认维度中不在所有维度中,则重新设置默认维度
425
+ let arrIds = [];
426
+ vm.dimArr.forEach(item => {
427
+ arrIds.push(item.id);
428
+ if(item.dimName == '租户维度'){
429
+ vm.tenantDim = item.id;
430
+ }
431
+ });
432
+ if(vm.defaultDim && arrIds.indexOf(vm.defaultDim) > -1){
433
+ vm.currentDim = vm.defaultDim;
434
+ }else if(res && res.data){
435
+ vm.currentDim = res.data[0].id;
436
+ }
437
+ dim && (vm.currentDim = dim);
438
+ vm.initPageSetting();
439
+ if(vm.currentDim == vm.userDeptDimId){ // 如果是企业部门id我们新增noneUserId过滤当前用户
440
+ vm.crud.searchForm["noneUserId"] = vm.loginUser["linkId"];
441
+ }
442
+ vm.crud.searchForm = Object.assign({},vm.crud.searchForm,(vm.filterUserParam || {}));
443
+ vm.orgSearchParam["orgDim"] = vm.currentDim; // 过滤维度
444
+ vm.orgSearchParam = Object.assign(vm.orgSearchParam,vm.filterOrgParam); // 过滤组织数据
445
+ vm.orgSearchParam["orgParentTreeSelfs"] = vm.orgTreeIds || ""; // 过滤组织
446
+ vm.posSearchParam["orgDim"] = vm.currentDim;
447
+ vm.posSearchParam["orgDim"] = vm.currentDim;
448
+ vm.posSearchParam["orgTreeIds"] = vm.orgTreeIds || "";
449
+ if(vm.tenantId && vm.tenantCreated && vm.currentDim == vm.tenantDim){
450
+ vm.orgSearchParam["orgParentTreeSelfs"] = ''; // 过滤组织
451
+ vm.orgSearchParam["tenantCreated"] = vm.tenantCreated;
452
+ vm.posSearchParam["orgTreeIds"] = vm.tenantOrgId;
453
+ }
454
+ vm.posSearchParam = Object.assign(vm.posSearchParam,vm.filterPosParam); // 过滤组织数据
455
+ if((vm.userEnable || vm.posEnable) && !vm.caseAuth){ // 岗位可用时抓取数据,既不选岗位也不选人员不加载岗位
456
+ vm.axios.post(vm.api.sysPos.findNoPage,vm.posSearchParam).then(function (resPos) { // 处理岗位数据defaultDim
457
+ resPos.data.forEach(function (pos) {
458
+ pos["name"] = pos["posName"];
459
+ pos["nodeType"] = "pos";
460
+ pos["className"] = vm.pageSetting["posIcon"] || "saspiconfont pl-icon-account";
461
+ if(pos["layer"] == '1'){
462
+ pos["pId"] = pos["orgId"];
463
+ }else{
464
+ pos["pId"] = pos["parentPosId"];
465
+ }
466
+ if(pos["isMainpos"] == '1'){
467
+ pos["name"] = pos["posName"] + "[主岗位]";
468
+ pos["className"] = vm.pageSetting["posMainIcon"] || "saspiconfont pl-icon-yonghu";
469
+ }
470
+ vm.posArr.push(pos);
471
+ });
472
+ vm.initCheckData();
473
+ vm.showTree = true;
474
+ });
475
+ }else{ // 直接生成组织数据
476
+ vm.initCheckData();
477
+ vm.showTree = true;
478
+ }
479
+ });
480
+ },
481
+ dealTreeData(data){ // 给节点添加自定义图标
482
+ let vm = this;
483
+ vm.posArr.forEach(elem =>{ //先比较额外数据岗位
484
+ if(vm.openLowLevelCheckbox){
485
+ if(vm.openLowLevelCheckbox){
486
+ if(vm.expandOrignArr.join(",").indexOf(elem.id)!=-1){
487
+ //设置一级节点为可选中状态
488
+ vm.$set(elem,'disabled',false);
489
+ }else {
490
+ if(vm.chooseCascadeDataIds.indexOf(elem["id"])!= -1 ){
491
+ //则设置其子节点也
492
+ vm.$set(elem,'disabled',true);
493
+ }else{
494
+ vm.$set(elem,'disabled',false);
495
+ }
496
+ }
497
+
498
+ vm.$set(vm.isChecked, elem.id, (vm.chooseCascadeParentDataIds.indexOf(elem.id)!= -1)); //设置默认选中状态
499
+
500
+ }
501
+ }
502
+ });
503
+ data.forEach(function (elem) {
504
+ elem["pId"] = elem["orgParentId"];
505
+ if(elem["posName"]){
506
+ elem["name"] = elem["posName"];
507
+ }else{
508
+ elem["name"] = elem["orgName"];
509
+ }
510
+ if(elem["orgType"]){
511
+ elem["nodeType"] = elem["orgType"];
512
+ }
513
+
514
+ if(elem["orgType"] == "ogn"||elem["orgType"] == "area"){
515
+ elem.className = vm.pageSetting["ognCloseIcon"] || "saspiconfont pl-icon-organ";
516
+ }
517
+ if(elem["orgType"] == "dept"){
518
+ elem.className = vm.pageSetting["deptCloseIcon"] || "saspiconfont pl-icon-untitled85";
519
+ }
520
+ if(vm.openLowLevelCheckbox){
521
+ if(vm.expandOrignArr.join(",").indexOf(elem.id)!=-1){
522
+ //设置一级节点为可选中状态
523
+ vm.$set(elem,'disabled',false);
524
+ }else {
525
+ if(vm.chooseCascadeDataIds.indexOf(elem["id"])!= -1 ){
526
+ //则设置其子节点也
527
+ vm.$set(elem,'disabled',true);
528
+ }else{
529
+ vm.$set(elem,'disabled',false);
530
+ }
531
+ }
532
+ vm.$set(vm.isChecked, elem.id, (vm.chooseCascadeParentDataIds.indexOf(elem.id)!= -1)); //设置默认选中状态
533
+ }
534
+ });
535
+
536
+ },
537
+
538
+
539
+ initPageSetting(){ // 初始化纬度配置信息
540
+ let vm = this;
541
+ for(let dim of vm.dimArr){
542
+ if(vm.currentDim == dim.id){
543
+ vm.initSetting(dim);
544
+ break;
545
+ }
546
+ }
547
+ },
548
+ initSetting(settingObj){
549
+ let vm = this;
550
+ vm.pageSetting = {
551
+ "closeDept":false, // 设置为true时此维度下不包含部门(左侧组织树只有机构)
552
+ "ognName":"组织", // 定义机构名称
553
+ "deptName":"部门", // 定义部门名称
554
+ "posName":"岗位", // 定义岗位名称
555
+ "closePos":false, // 关闭岗位
556
+ "ognOpenIcon":"saspiconfont pl-icon-organ", // 树中组织展开时使用的图标
557
+ "ognCloseIcon":"saspiconfont pl-icon-organ", // 树中组织收缩时使用的图标
558
+ "deptOpenIcon":"saspiconfont pl-icon-untitled85", // 树中组织展开时使用的图标
559
+ "deptCloseIcon":"saspiconfont pl-icon-untitled85", // 树中组织收缩时使用的图标
560
+ "closeMainPos":false, // 关闭主岗位
561
+ "posIcon":"saspiconfont pl-icon-account", // 岗位图标
562
+ "posMainIcon":"saspiconfont pl-icon-yonghu", // 主岗位图标
563
+ "chooseUserType":"", // 可选择的用户类型(默认可选择所有类型用户,如设置ent就只可以选择ent)
564
+ "userSelectDefaultParams":{}, // 通过组织岗位用户选择插件时用户的默认带上的查询条件(目前用于过滤有效企业)
565
+ "orgSelectDefaultParams":{} // 通过组织岗位用户选择插件时组织的默认带上的查询条件
566
+ };
567
+ let dimSpec = JSON.parse(vm.platStringUtil.replaceAll(settingObj["dimSpec"],"'","\"") || "{}");
568
+ vm.pageSetting = Object.assign({},vm.pageSetting,dimSpec); // 覆盖默认属性
569
+ vm.orgSearchParam = Object.assign({},vm.pageSetting["orgSelectDefaultParams"] || {},vm.orgSearchParam); // 添加上组织的配置筛选条件
570
+
571
+ },
572
+ initExpandOrignOrg(treeVm){ // 初始化展开第一级组织
573
+ let vm = this;
574
+ vm.expandOrignArr = [];
575
+ let nodesMap = treeVm.getAllNode();
576
+ Object.keys(nodesMap).forEach(key => {
577
+ if(nodesMap[key].level == 1 && (nodesMap[key].data["orgType"] == 'ogn'||nodesMap[key].data["orgType"] == 'area')){
578
+ nodesMap[key].expanded = true;
579
+ nodesMap[key].data.className = vm.pageSetting["ognOpenIcon"];
580
+ vm.expandOrignArr.push(nodesMap[key].data.id);
581
+ }
582
+ });
583
+
584
+ if(!vm.checkbox){ // 单选高亮当前行,如果当前没有选中树也没关系,那么就不会选中
585
+ treeVm.highlightCurrent && treeVm.$refs.elTree.setCurrentKey(vm.highlightcurrentKey);
586
+ }
587
+ vm.$nextTick(function () {
588
+ if(vm.checkbox){
589
+ let domCollection = document.getElementsByClassName("noCheckBox");
590
+ for(let i = 0;i < domCollection.length;i++){
591
+ if(domCollection[i].parentNode.getElementsByTagName("label").length>0){
592
+ domCollection[i].parentNode.getElementsByTagName("label")[0].style.display = 'none';
593
+ }
594
+ }
595
+ }
596
+ vm.dealTreeData(treeVm.data);//初始化树数据
597
+
598
+ //初始化请求第一级数据 add by luyy
599
+ vm.initCrudData(treeVm.data[0]||{});
600
+
601
+ })
602
+ },
603
+
604
+ initCrudData(data){
605
+ let vm = this;
606
+ let searchForm = vm.crud.searchForm;
607
+ searchForm["orgTreeId"] = "";
608
+ searchForm["posTreeId"] = "";
609
+ searchForm["page"] = 1;
610
+ searchForm["filterUserSource"] = vm.filterUserSource;
611
+ if(vm.currentDim != vm.entOrgDim){ // 不等于entOrgDim企业部门纬度
612
+ vm.crud.searchForm = Object.assign({},searchForm,vm.pageSetting["userSelectDefaultParams"])
613
+ }
614
+ vm.crud.searchForm = Object.assign({},searchForm,(vm.filterUserParam || {}));
615
+ if(data["nodeType"] == 'pos'){
616
+ vm.crud.searchForm["posTreeId"] = data["id"];
617
+ }else{
618
+ vm.crud.searchForm["orgTreeId"] = data["id"] || "$$$$$";
619
+ }
620
+ vm.$refs.orgSelectTree.setTreeCurrentKey(data["id"]);
621
+ // if(vm.currentDim == vm.entOrgDim && vm.filterUserParam['authUserType'] != 'empower'){
622
+ // vm.crud.searchForm["userLinkIdPam"]="entDept";
623
+ // }
624
+ if(vm.tenantId){
625
+ vm.crud.searchForm["tenantId"] = vm.tenantId;
626
+ }
627
+ vm.crud.search(vm.checkSelected);
628
+ },
629
+
630
+ filterTextCallBack(){
631
+ let vm = this;
632
+ vm.$nextTick(function () {
633
+ let nodesMap = vm.$refs.orgSelectTree.getAllNode();
634
+ for(let [key,node] of Object.entries(nodesMap)){
635
+ let elem = node.data;
636
+ if(node.expanded){
637
+ if(node.data["orgType"] == "ogn"||node.data["orgType"] == "area"){
638
+ elem.className = vm.pageSetting["ognOpenIcon"] || "saspiconfont pl-icon-organ";
639
+ }
640
+ if(node.data["orgType"] == "dept"){
641
+ elem.className = vm.pageSetting["deptOpenIcon"] || "saspiconfont pl-icon-untitled85";
642
+ }
643
+ }else{
644
+ if(node.data["orgType"] == "ogn"||node.data["orgType"] == "area"){
645
+ elem.className = vm.pageSetting["ognCloseIcon"] || "saspiconfont pl-icon-organ";
646
+ }
647
+ if(node.data["orgType"] == "dept"){
648
+ elem.className = vm.pageSetting["deptCloseIcon"] || "saspiconfont pl-icon-untitled85";
649
+ }
650
+ }
651
+ }
652
+ });
653
+ },
654
+ treeNodeExpand(data,node,comp){
655
+ let vm = this;
656
+ if(data.orgType == "ogn"||data.orgType == "area"){
657
+ data.className = vm.pageSetting["ognOpenIcon"] || "saspiconfont pl-icon-organ";
658
+ }
659
+ if(data.orgType == "dept"){
660
+ data.className = vm.pageSetting["deptOpenIcon"] || "saspiconfont pl-icon-untitled85";
661
+ }
662
+ vm.$nextTick(function () {
663
+ if(vm.checkbox){
664
+ let domCollection = document.getElementsByClassName("noCheckBox");
665
+ for(let i = 0;i < domCollection.length;i++){
666
+ if(domCollection[i].parentNode.getElementsByTagName("label").length>0){
667
+ domCollection[i].parentNode.getElementsByTagName("label")[0].style.display = 'none';
668
+ }
669
+ }
670
+ }
671
+ })
672
+ },
673
+ treeNodeCollapse(data,node,comp){
674
+ let vm = this;
675
+ if(data.orgType == "ogn"||data.orgType == "area"){
676
+ data.className = vm.pageSetting["ognCloseIcon"] || "saspiconfont pl-icon-organ";
677
+ }
678
+ if(data.orgType == "dept"){
679
+ data.className = vm.pageSetting["deptCloseIcon"] || "saspiconfont pl-icon-untitled85";
680
+ }
681
+ },
682
+ initCheckData(){ // 初始化树完成后在树中勾选已选择的数据
683
+ let vm = this;
684
+ let arr = [];
685
+
686
+ vm.checkedOrg.forEach(function (org) {
687
+ arr.push(org.id);
688
+ });
689
+ vm.checkedPos.forEach(function (pos) {
690
+ if(vm.chooseCascadeDataIds.indexOf(pos.id) == -1){
691
+ arr.push(pos.id);
692
+ }
693
+ });
694
+ vm.initCheck = {"initCheck":arr};
695
+ // if(vm.checkbox){
696
+ // let domCollection = document.getElementsByClassName("noCheckBox");
697
+ // for(let i = 0;i < domCollection.length;i++){
698
+ // if(domCollection[i].parentNode.getElementsByTagName("label").length>0){
699
+ // domCollection[i].parentNode.getElementsByTagName("label")[0].style.display = 'none';
700
+ // }
701
+ // }
702
+ // }
703
+ // setTimeout(()=>{
704
+ // vm.crud.search(vm.checkSelected);
705
+ // },100)
706
+
707
+ },
708
+ dimChange(value){ // 当前维度切换时的事件
709
+ let vm = this;
710
+ vm.initTeantIdOrg().then(()=>{
711
+ vm.initTree(value);
712
+ });
713
+ vm.crud.searchForm = {"orgTreeId":"$$$$$"};
714
+ vm.crud.search();
715
+ },
716
+ renderContentFunc(h, { node, data}){
717
+ let vm = this;
718
+ // if(vm.roleTypeName == "政府权限" && data.nodeType == "ogn"){
719
+ // return (
720
+ // <span class="noCheckBox">
721
+ // <i class={data.className}></i>
722
+ // <span>{node.label}</span>
723
+ // </span>
724
+ // );
725
+ // }
726
+ if(!vm.posEnable && data.nodeType == "pos"){
727
+ return (
728
+ <span class="noCheckBox">
729
+ <i class={data.className}></i>
730
+ <span>{node.label}</span>
731
+ </span>
732
+ );
733
+ }
734
+ if(!vm.ognEnable && (data.nodeType == "ogn" || data.nodeType == "dept"|| data.nodeType == "area")){
735
+ return (
736
+ <span class="noCheckBox">
737
+ <i class={data.className}></i>
738
+ <span>{node.label}</span>
739
+ </span>
740
+ );
741
+ }
742
+ let MyComempte = (
743
+ <span>
744
+ <i class={data.className}></i>
745
+ <span>{node.label}</span>
746
+ </span>
747
+ );
748
+
749
+ if(node.childNodes.length>0 && vm.openLowLevelCheckbox){
750
+ MyComempte = (
751
+ <span>
752
+ <i class={data.className}></i>
753
+ <span>{node.label}</span>
754
+ <el-tooltip placement="right-start" content="是否同步开启下级权限" >
755
+ <el-checkbox style="margin-left:8px"
756
+ v-model={vm.isChecked[data.id]}
757
+ disabled={!node.checked}
758
+ onChange={this.dChange.bind(this,data)} ></el-checkbox>
759
+ </el-tooltip>
760
+ </span>
761
+ );
762
+ }
763
+ return MyComempte;
764
+ },
765
+
766
+ // 当是否开启下级权限同步复选框变化时候 ,如果选中状态自动勾选所有的下级用户(如果下级用户也存在下级则也勾选同步复选框)并且设为禁用
767
+ // 如果取消勾选下级用户,则取消下级用户禁用状态,并且勾选取消
768
+ dChange(data, checked){
769
+ let vm = this;
770
+ let temple = vm.$refs.orgSelectTree;
771
+ let allChilren = temple.getCurrentChildren(data,[]) || []; //获取当前节点下的所有子节点(包含自己)
772
+ let nodesMap = temple.getAllNode(); // 节点集合
773
+
774
+ vm.stopChange = true;
775
+ allChilren.forEach(key => {
776
+ let Tdata = nodesMap[key]["data"];
777
+ if(key == data.id){
778
+ vm.$set(Tdata,"disabled",false);
779
+ Tdata["cascadeData"] = "parent";
780
+ }else{
781
+ vm.$set(Tdata,"disabled",checked);
782
+ Tdata["cascadeData"] = checked?"true":"";
783
+ if(checked){
784
+ this.$set(nodesMap[key],'checked',false);
785
+ this.$set(vm.isChecked,key,false);
786
+ }
787
+ }
788
+ });
789
+ vm.$nextTick(() => {
790
+ vm.stopChange = false;
791
+ })
792
+ },
793
+ checkelTreeChange(data,checked){ // 树节点选中变化时的事件
794
+ let vm = this;
795
+ let tempObj = {"area":"checkedOrg","ogn":"checkedOrg","dept":"checkedOrg","pos":"checkedPos"};
796
+ let operateArr = vm[tempObj[data["nodeType"]]];
797
+ if(checked){
798
+ let flag = false;
799
+ for(let elem of operateArr){
800
+ if(elem["id"] == data["id"]){
801
+ flag = true;
802
+ break;
803
+ }
804
+ }
805
+ if(!flag){
806
+ operateArr.push(data);
807
+ }
808
+ }else{
809
+ if(vm.openLowLevelCheckbox){
810
+ if(!vm.stopChange){
811
+ this.$set(vm.isChecked,data.id,false);
812
+ vm.dChange(data,false);
813
+ }
814
+ }
815
+ vm[tempObj[data["nodeType"]]] = operateArr.filter(item => {
816
+ return item["id"] != data["id"];
817
+ });
818
+ }
819
+ },
820
+ nodeClick(data,node){ // 树节点点击事件,点击时触发右边的用户信息crud刷新事件
821
+ let vm = this;
822
+ let treeComp = vm.$refs.orgSelectTree;
823
+ let nodesMap = treeComp.getAllNode();
824
+ // 节点的快捷键操作要特殊处理,其它都严格遵循上下级无关的策略
825
+ if(vm.checkbox){
826
+ if(window.event.shiftKey){ // shift快捷选择
827
+ if(vm.shiftKeyData){
828
+ let max = vm.shiftKeyData>node.id?vm.shiftKeyData:node.id;
829
+ let min = vm.shiftKeyData>node.id?node.id:vm.shiftKeyData;
830
+ let checkedKeys = [];
831
+ Object.keys(nodesMap).forEach(function (key) {
832
+ let caculateNode = nodesMap[key];
833
+ // if(caculateNode.id >= min && caculateNode.id <= max &&
834
+ // (caculateNode.data["nodeType"] !='ogn' || vm["roleTypeName"] != "政府权限") ){
835
+ // checkedKeys.push(caculateNode.data.id);
836
+ // }
837
+ if(caculateNode.id >= min && caculateNode.id <= max && !caculateNode.disabled){
838
+ checkedKeys.push(caculateNode.data.id);
839
+ }
840
+ });
841
+ treeComp.setTreeCheckedKeys(checkedKeys,false);
842
+ vm.$nextTick(function () {
843
+ vm.shiftCtrlCount();
844
+ });
845
+ }else{
846
+ vm.shiftKeyData = node.id;
847
+ }
848
+ }else{
849
+ vm.shiftKeyData = node.id;
850
+ }
851
+ if(window.event.ctrlKey){ // control键快捷选择
852
+ let arr = treeComp.getCurrentChildren(data,[]);
853
+ let resultArr = [];
854
+ for(let key of arr) {
855
+ // if (!(vm["roleTypeName"] == "政府权限" && nodesMap[key].data.nodeType == "ogn")) { // 政府权限且是机构组织不勾选
856
+ if(!nodesMap[key].disabled){
857
+ resultArr.push(key);
858
+ }
859
+ }
860
+ treeComp.setTreeCheckedKeys(resultArr,false,!node.checked);
861
+ vm.$nextTick(function () {
862
+ vm.shiftCtrlCount();
863
+ });
864
+ }
865
+ }
866
+ vm.refreshTableId = data.id; // 刷新当前table
867
+ vm.singleSelectChange(); // 当前进行单选时触发的操作
868
+ },
869
+ shiftCtrlCount(){
870
+ let vm = this;
871
+ let treeComp = vm.$refs.orgSelectTree;
872
+ let nodesMap = treeComp.getAllNode();
873
+ let arrOgn = [];
874
+ let arrPos = [];
875
+ Object.keys(nodesMap).forEach(function (key) {
876
+ let tempNode = nodesMap[key];
877
+ if(tempNode.checked && (tempNode.data.nodeType == "area" ||tempNode.data.nodeType == "ogn" || tempNode.data.nodeType == "dept")){
878
+ arrOgn.push({"id":tempNode.data.id,"name":tempNode.data.name});
879
+ }
880
+ if(tempNode.checked && (tempNode.data.nodeType == "pos")){
881
+ arrPos.push({"id":tempNode.data.id,"name":tempNode.data.name});
882
+ }
883
+ });
884
+ vm.checkedOrg = arrOgn;
885
+ vm.checkedPos = arrPos;
886
+ },
887
+ singleSelectChange(tableRowData){ // 组织单选时触发的操作
888
+ let vm = this;
889
+ if(!vm.checkbox){
890
+ if(vm.userEnable && tableRowData){ // table变化
891
+ let tableComp = vm.$refs[vm.crud.tableRef];
892
+ tableComp.clearSelection();
893
+ vm.$nextTick(function () {
894
+ tableComp.toggleRowSelection(tableRowData);
895
+ vm.checkedUser = [tableRowData];
896
+ vm.checkedOrg = [];
897
+ vm.checkedPos = [];
898
+ })
899
+ }else{
900
+ let data = vm.$refs.orgSelectTree.getTreeCurrentNode();
901
+ if(vm.ognEnable && (data.nodeType == 'area' || data.nodeType == 'dept' || data.nodeType == 'ogn')){
902
+ vm.checkedOrg = [data];
903
+ vm.checkedPos = [];
904
+ vm.checkedUser = [];
905
+ }
906
+ if(vm.posEnable && data.nodeType == 'pos'){
907
+ vm.checkedPos = [data];
908
+ vm.checkedOrg = [];
909
+ vm.checkedUser = [];
910
+ }
911
+ }
912
+ }
913
+ },
914
+ removeOgn(id){
915
+ let vm = this;
916
+ if(id){
917
+ vm.checkedOrg = vm.checkedOrg.filter(item => {
918
+ return item["id"] != id;
919
+ });
920
+ vm.$refs.orgSelectTree.setTreeCheckedKeys(id,false,false);
921
+ }
922
+ },
923
+ removePos(id){
924
+ let vm = this;
925
+ if(id){
926
+ vm.checkedPos = vm.checkedPos.filter(item => {
927
+ return item["id"] != id;
928
+ });
929
+ vm.$refs.orgSelectTree.setTreeCheckedKeys(id,false,false);
930
+ }
931
+ },
932
+ removePosUser(id){
933
+ let vm = this;
934
+ if(vm.caseAuth){
935
+ vm.$confirm('移除该用户将会同步移除该用户的所有下级关联权限,是否继续?', '警告', {
936
+ confirmButtonText: '确定',
937
+ cancelButtonText: '取消',
938
+ }).then(function () {
939
+ vm.removeUser(id);
940
+ });
941
+ }else{
942
+ vm.removeUser(id);
943
+ }
944
+ },
945
+ removeUser(id){
946
+ let vm = this;
947
+ if(id){
948
+ // 先移除数组的元素,再取消table的选中状态。如果根据selectionChange事件,可能当前数据还没渲染。
949
+ vm.checkedUser = vm.checkedUser.filter(item => {
950
+ return item["id"] != id;
951
+ });
952
+ let tableComp = vm.$refs[vm.crud.tableRef];
953
+ let selection = tableComp.selection;
954
+ for(let select of selection){
955
+ if(select["id"] == id){
956
+ tableComp.toggleRowSelection(select);
957
+ break;
958
+ }
959
+ }
960
+ }
961
+ },
962
+ /**
963
+ * table操作事件
964
+ */
965
+ resetSearch(){ // 重置查询
966
+ let vm = this;
967
+ let crud = vm.crud;
968
+ let objData = {};
969
+ let searchForm = crud.searchForm;
970
+ crud.noClearSearchColumns && crud.noClearSearchColumns.forEach(function (key) {
971
+ objData[key] = searchForm[key];
972
+ });
973
+ objData["page"] = "1";
974
+ crud.searchForm = Object.assign({}, objData);
975
+ crud.search(vm.checkSelectedMsg);
976
+ },
977
+ doSearch(){ // 查询
978
+ let vm = this;
979
+ if(vm.tenantId){
980
+ vm.crud.searchForm["tenantId"] = vm.tenantId;
981
+ }
982
+ vm.crud.search(vm.checkSelectedMsg);
983
+ },
984
+ rowClick(row){ // table行点击事件
985
+ let vm = this;
986
+ if(vm.caseAuth){
987
+ let selection = vm.$refs[vm.crud.tableRef].selection;
988
+ let obj = {};
989
+ selection.forEach(item => {
990
+ obj[item.id] = item;
991
+ });
992
+ if(obj[row.id]){ // 原来已选择,现在是取消,提示
993
+ vm.$confirm('移除该用户将会同步移除该用户的所有下级关联权限,是否继续?', '警告', {
994
+ confirmButtonText: '确定',
995
+ cancelButtonText: '取消',
996
+ }).then(function () {
997
+ vm.$refs[vm.crud.tableRef].toggleRowSelection(row);
998
+ });
999
+ }else{
1000
+ vm.$refs[vm.crud.tableRef].toggleRowSelection(row);
1001
+ }
1002
+ }else{
1003
+ vm.$refs[vm.crud.tableRef].toggleRowSelection(row); // 行点击选中当前行
1004
+ }
1005
+ },
1006
+ tableSelect(selection, row){
1007
+ let vm = this;
1008
+ if(vm.caseAuth){
1009
+ let obj = {};
1010
+ selection.forEach(item => {
1011
+ obj[item.id] = item;
1012
+ });
1013
+ if(!obj[row.id]){ // 取消选中
1014
+ vm.$refs[vm.crud.tableRef].toggleRowSelection(row);
1015
+ vm.$confirm('移除该用户将会同步移除该用户的所有下级关联权限,是否继续?', '警告', {
1016
+ confirmButtonText: '确定',
1017
+ cancelButtonText: '取消',
1018
+ }).then(function () {
1019
+ vm.$refs[vm.crud.tableRef].toggleRowSelection(row);
1020
+ });
1021
+ }
1022
+ }
1023
+ },
1024
+ selectChange(selection){ // 当行的选中状态发生变化时
1025
+ let vm = this;
1026
+ let noSelection = vm.getCurrentNoSelect();
1027
+ vm.checkedUser = vm.checkedUser.filter(item => { // 移除已选择用户但是当前行并没有再选中的
1028
+ let flag = true;
1029
+ for(let elem of noSelection){
1030
+ if(elem["id"] == item["id"]){
1031
+ flag = false;
1032
+ break;
1033
+ }
1034
+ }
1035
+ return flag;
1036
+ });
1037
+ selection.forEach(function (select) { // 新增当前table中选中的但是已选择用户中没有的数据
1038
+ let flag = true;
1039
+ for(let elem of vm.checkedUser){
1040
+ if(elem["id"] == select["id"]){
1041
+ flag = false;
1042
+ break;
1043
+ }
1044
+ }
1045
+ if(flag){
1046
+ select["name"] = select["userName"];
1047
+ vm.checkedUser.push(select);
1048
+ vm.singleSelectChange(select);
1049
+ }
1050
+ });
1051
+ this.$emit("getUserInfo",vm.checkedUser);
1052
+ },
1053
+ getCurrentNoSelect(){ // 获取当前行未选择的数据
1054
+ let vm = this;
1055
+ let selection = vm.$refs[vm.crud.tableRef].selection;
1056
+ let data = vm.$refs[vm.crud.tableRef].data;
1057
+ let arr = [];
1058
+ arr = data.filter(item => {
1059
+ let flag = true;
1060
+ for(let elem of selection){
1061
+ if(elem["id"] == item["id"]){
1062
+ flag = false;
1063
+ break;
1064
+ }
1065
+ }
1066
+ return flag;
1067
+ });
1068
+ return arr;
1069
+ },
1070
+ checkSelectedMsg(callbackVm,data){ // table渲染完成后选中已选择的数据
1071
+ let vm = this;
1072
+ let arr = [];
1073
+ data.records.forEach(function (elem) {
1074
+ for(let posUser of vm.checkedUser){
1075
+ if(elem["id"] == posUser["id"]){
1076
+ arr.push(elem);
1077
+ break;
1078
+ }
1079
+ }
1080
+ });
1081
+ callbackVm.$nextTick(function () {
1082
+ arr.forEach(function(elem){
1083
+ callbackVm.$refs[callbackVm.crud.tableRef].toggleRowSelection(elem);
1084
+ }
1085
+ );
1086
+ callbackVm.$message({
1087
+ duration: 1000,
1088
+ type: "success",
1089
+ message: "查询成功"
1090
+ })
1091
+ });
1092
+ },
1093
+ checkSelected(callbackVm,data){
1094
+ let vm = this;
1095
+ let arr = [];
1096
+ (data.records || []).forEach(function (elem) {
1097
+ for(let posUser of vm.checkedUser){
1098
+ if(elem["id"] == posUser["id"]){
1099
+ arr.push(elem);
1100
+ break;
1101
+ }
1102
+ }
1103
+ });
1104
+ callbackVm.$nextTick(function () {
1105
+ arr.forEach(function(elem){
1106
+ callbackVm.$refs[callbackVm.crud.tableRef].toggleRowSelection(elem);
1107
+ }
1108
+ )
1109
+ });
1110
+ },
1111
+ /**
1112
+ * 对外返回数据
1113
+ */
1114
+ getCheckedInfo(type){ // type:user,org,pos //对外返回数据 如果勾选开启同步下级组织 levelOrg 选中的下级组织权限,
1115
+ let vm = this;
1116
+ let temple = vm.$refs.orgSelectTree;
1117
+ let checkedOrgData = [];
1118
+ let obj = {"user":"checkedUser","pos":"checkedPos","org":"checkedOrg"};
1119
+
1120
+ let checkedOrgTemp = [];
1121
+ let checkedParamData = [];
1122
+ if(vm.openLowLevelCheckbox && type == "levelOrg"){
1123
+ let allData = temple.getAllNodeLazyData();
1124
+ Object.keys(vm.isChecked).forEach(key => {
1125
+ if(vm.isChecked[key]){
1126
+ checkedOrgTemp.push(allData[key].data);
1127
+ }
1128
+ });
1129
+ if(checkedOrgTemp.length>0){
1130
+ //父级需要单独保存 cacseData 设置 为 parent
1131
+ checkedOrgTemp.forEach(function (data) {
1132
+ checkedOrgData = checkedOrgData.concat(temple.getCurrentChildren(data,[]).slice(1)); //保存所有子集的
1133
+ });
1134
+ checkedOrgData.forEach(key => {
1135
+ checkedParamData.push(allData[key].data);
1136
+ });
1137
+ }
1138
+ let returnArr = [];
1139
+ returnArr.push(checkedOrgTemp || []); //保存所有的父级数据
1140
+ returnArr.push(checkedParamData || []); //保存所有的子集数据
1141
+ return returnArr;
1142
+ }
1143
+
1144
+ if(obj[type]){
1145
+ return vm[obj[type]].slice(0);
1146
+ }
1147
+ return null;
1148
+ },
1149
+
1150
+ /**
1151
+ * 初始化获取租户所在组织
1152
+ */
1153
+ initTeantIdOrg(){
1154
+ return new Promise(resolve => {
1155
+ if(!this.tenantId){
1156
+ resolve();
1157
+ }else {
1158
+ //查询当前租户所在的 组织 orgId
1159
+ // this.axios.post(this.api.sysOrgPosUser.findNoPage,{})
1160
+ this.axios.post(this.api.sysOrgPosUser.findNoPage,{"tenantKey":this.tenantId}).then(res =>{
1161
+ if(res.data && res.data.length >0){
1162
+ this.tenantOrgId = res.data[0].orgId;
1163
+ }
1164
+ resolve();
1165
+ });
1166
+ }
1167
+ })
1168
+
1169
+ }
1170
+
1171
+ }
1172
+ }
1173
+ </script>
1174
+
1175
+ <style scoped>
1176
+ fieldset{
1177
+ border: 1px solid #EBEEF5;
1178
+ border-radius: 5px;
1179
+ height: 100%;
1180
+ box-sizing: border-box;
1181
+ }
1182
+ legend{
1183
+ margin-left: 20px;
1184
+ }
1185
+ .selectRow .el-col{
1186
+ height: calc(100% - 8px);
1187
+ box-sizing: border-box;
1188
+ padding:0 5px;
1189
+ }
1190
+ .selectRow .el-button{
1191
+ margin-left: 10px;
1192
+ margin-top: 5px;
1193
+ }
1194
+ .select-footer{
1195
+ padding: 0;
1196
+ }
1197
+ .select-footer /deep/ .el-collapse-item__content{
1198
+ padding-bottom: 0;
1199
+ }
1200
+ .select-footer /deep/ .el-collapse-item__header{
1201
+ height: 40px;
1202
+ box-sizing: border-box;
1203
+ }
1204
+ .alreadyChoose{
1205
+ height: calc(100% - 23px);
1206
+ overflow-y: auto;
1207
+ }
1208
+ .asideTree{
1209
+ width: 300px;
1210
+ position: relative;
1211
+ overflow-y: hidden;
1212
+ padding: 5px;
1213
+ box-sizing: border-box;
1214
+ }
1215
+ .mainTree{
1216
+ overflow-y: hidden;
1217
+ padding: 5px;
1218
+ box-sizing: border-box;
1219
+ }
1220
+ .detail-info{
1221
+ height:100%;
1222
+ border-left: 1px solid #EBEEF5;
1223
+ padding: 5px 0 5px 5px;
1224
+ overflow-x: hidden;
1225
+ box-sizing: border-box;
1226
+ }
1227
+ #tableMain /deep/ .el-table__body-wrapper{
1228
+ height: calc(100% - 60px);
1229
+ overflow-y: auto;
1230
+ }
1231
+ .pos-user-table /deep/ th .el-checkbox__original {
1232
+ display:none;
1233
+ }
1234
+ .pos-user-table /deep/ th .el-checkbox {
1235
+ display:none;
1236
+ }
1237
+ </style>