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,1050 @@
1
+ <template>
2
+ <div class="sysOrgTree-content" style="width: 100%;height: 100%" @click="menuVisible=false">
3
+ <el-container style="height: 100%;background-color: white" v-if="!noAuth">
4
+ <!--鼠标右键点击出现页面-->
5
+ <el-menu
6
+ :style="{'position': 'fixed','z-index':'99','top':top,'left':left}"
7
+ class="el-menu-vertical"
8
+ @select="handleRightSelect"
9
+ active-text-color="#fff" v-show="menuVisible"
10
+ text-color="#fff">
11
+ <!-- <el-menu-item index="addArea" class="menuItem">-->
12
+ <!-- <span slot="title">添加行政区划<i class="el-icon-s-home"></i></span>-->
13
+ <!-- </el-menu-item>-->
14
+ <el-menu-item index="addOgn" class="menuItem" v-show="ognVisible">
15
+ <span slot="title">添加下级{{((pageSetting['ognName'] || "").length > 5 ? pageSetting['ognName'].substring(0,5) + "…":pageSetting['ognName']) || '组织'}}
16
+ <i class="saspiconfont pl-icon-organ"></i>
17
+ </span>
18
+ </el-menu-item>
19
+ <el-menu-item index="addDept" class="menuItem">
20
+ <span slot="title">添加下级{{((pageSetting['deptName'] || "").length > 5 ? pageSetting['deptName'].substring(0,5) + "…":pageSetting['deptName']) || '部门'}}
21
+ <i class="saspiconfont pl-icon-untitled85"></i>
22
+ </span>
23
+ </el-menu-item>
24
+ <div style="width: 100%;height: 2px;background: #ffffff;"></div>
25
+ <el-menu-item index="removeCurrent" class="menuItem">
26
+ <span slot="title">删除当前组织</span>
27
+ </el-menu-item>
28
+ <el-menu-item index="removeCheck" class="menuItem">
29
+ <span slot="title">删除勾选组织</span>
30
+ </el-menu-item>
31
+ <div style="width: 100%;height: 2px;background: #ffffff;"></div>
32
+ <el-menu-item index="addRoot" class="menuItem" v-if="!loginUser.commonEmpowerId">
33
+ <span slot="title">添加根组织</span>
34
+ </el-menu-item>
35
+ <el-menu-item index="unfold" class="menuItem">
36
+ <span slot="title">展开所有下级</span>
37
+ </el-menu-item>
38
+ <el-menu-item index="retract" class="menuItem">
39
+ <span slot="title">收起所有下级</span>
40
+ </el-menu-item>
41
+ </el-menu>
42
+ <div class="leftTree" style="width: 350px;height: 100%;position: relative;box-sizing: border-box;padding:10px 5px 26px 10px;">
43
+ <div style="border: 1px solid #ddd;box-sizing: border-box;padding: 5px;width: 100%;height: 100%">
44
+ <el-header style="height: auto;padding: 0px 0 10px 0">
45
+ <!--<el-select v-model="currentOrgDim" style="width: 65%;"-->
46
+ <!--@change="dimChange" size="small">-->
47
+ <!--<el-option v-for="item in sysOrgDimensionArr"-->
48
+ <!--:value="item.id" :label="item.dimName" :key="item.id">-->
49
+
50
+ <!--</el-option>-->
51
+ <!--</el-select>-->
52
+ <!--<el-button type="warning" @click="validData" size="small"><i-->
53
+ <!--class="saspiconfont pl-icon-fuzhibidui"></i>数据校验-->
54
+ <!--</el-button>-->
55
+ <el-input
56
+ :placeholder="searchPlaceHolder"
57
+ @keyup.enter.native="filterBtnClick()"
58
+ v-model="filterTextVal" :style="loginUser.commonEmpowerId? 'width: 240px': 'width: 133px;'" size="small">
59
+ <!--<el-button slot="append" size="mini" icon="el-icon-search" @click="filterBtnClick()"></el-button>-->
60
+ <i
61
+ class="el-icon-search el-input__icon"
62
+ style="cursor: pointer"
63
+ slot="suffix"
64
+ @click="filterBtnClick">
65
+ </i>
66
+ </el-input>
67
+ <el-button type="primary" icon="el-icon-circle-plus" size="small" @click="addOrgData()"
68
+ v-if="!loginUser.commonEmpowerId"
69
+ style="margin-left: 4px">添加根节点
70
+ </el-button>
71
+ <el-button type="danger" icon="el-icon-remove" size="small" style="margin-left: 4px;"
72
+ @click="removeCheck()">删除
73
+ </el-button>
74
+ </el-header>
75
+ <el-aside style="width: 100%;height: calc(100% - 40px);position: relative" ref="asideTree" class="asideTree">
76
+ <common-tree v-if="showTree" :request-url="api.sysOrg.listNopageDimSimple"
77
+ :request-param="treeRequestParam"
78
+ :deal-tree-data="dealTreeData"
79
+ highlight-current
80
+ :default-props="defaultProps" parent-id="orgParentId" :filter-text="filterText"
81
+ :refresh-proper="currentOrgDim" :right-click="rightClickNode"
82
+ :node-click="nodeClick" :expand-onclick-node="false"
83
+ :init-call-back="initExpandOrignOrg" ref="orgTreeRef" :default-shift-key-select=true
84
+ :default-ctrl-key-select=true :draggable=true :tree-node-drop="treeNodeDrop"
85
+ :tree-allow-drop="treeAllowDrop" :tree-node-collapse="treeNodeCollapse"
86
+ :tree-node-expand="treeNodeExpand" :filter-text-call-back="filterTextCallBack"
87
+ :render-content-func="renderContentFunc"
88
+ useLazy
89
+ >
90
+
91
+ </common-tree>
92
+ </el-aside>
93
+ </div>
94
+ </div>
95
+ <div class="rightContent" style="width: calc(100% - 350px);float: right;box-sizing:border-box;">
96
+ <!--<sys-org-pos-user-tree v-if="showPosUser" :org-dim="currentOrgDim" :org-id="currentOrgId"-->
97
+ <!--:org-obj="currentObj" :page-obj="pageSetting" :update-call-back="updateCallBack">-->
98
+
99
+ <!--</sys-org-pos-user-tree>-->
100
+ <sys-ent-org-user-detail v-if="showPosUser" :org-obj-real="currentObj" :org-dim="currentOrgDim"
101
+ :refreshOrgId="refreshOrgId" :org-id="currentObj.id"
102
+ :area-setting="false" useRefresh
103
+ :org-tree-data="orgTreeData"
104
+ :org-obj="currentObj" :page-setting="pageSetting" :org-type-obj="orgTypeObj" :area-options="cascadeOptions"
105
+ :update-call-back="updateCallBack" :sys-data-obj="sysDataObj" @saveRollBack="saveRollBack"></sys-ent-org-user-detail>
106
+
107
+ </div>
108
+ <el-dialog :close-on-click-modal=false :visible.sync="orgTreeDialog" :title="orgTitle" :width="orgTreeFormData.orgType == 'area' ? '40%' : '60%'" top="20vh">
109
+ <el-form :model="orgTreeFormData" :rules="rules" ref="orgTreeFormRef">
110
+ <el-row v-if="orgTreeFormData.orgType != 'area'">
111
+ <el-col :span="24">
112
+ <el-form-item label="组织名称" label-width="120px" prop="orgName">
113
+ <el-input type="textarea" v-model="orgTreeFormData.orgName"
114
+ :autosize="{minRows:4,maxRows:8}"></el-input>
115
+ </el-form-item>
116
+ </el-col>
117
+ </el-row>
118
+ <el-row v-if="orgTreeFormData.orgType != 'area'">
119
+ <el-col :span="12">
120
+ <el-form-item label="上级组织" label-width="120px">
121
+ <el-input readonly v-model="orgTreeFormData.orgParentName"></el-input>
122
+ </el-form-item>
123
+ </el-col>
124
+ <el-col :span="12">
125
+ <el-form-item label="组织类型" label-width="120px">
126
+ <el-select style="width: 100%" v-model="orgTreeFormData.orgType"
127
+ :disabled="orgTypeDisabled" @change="changOrgType()">
128
+ <el-option v-for="item in orgTypeArr"
129
+ :label="item.label" :value="item.value" :key="item.value">
130
+ </el-option>
131
+ </el-select>
132
+ </el-form-item>
133
+ </el-col>
134
+
135
+ <el-col :span="12">
136
+ <el-form-item label="是否是企业" label-width="120px" v-if="showOrgEntType && orgTreeFormData.orgType == 'ogn'">
137
+ <el-radio v-model="orgTreeFormData.entType" label="1">是</el-radio>
138
+ <el-radio v-model="orgTreeFormData.entType" label="0" >否</el-radio>
139
+ </el-form-item>
140
+ </el-col>
141
+
142
+
143
+ <el-col :span="12" v-if="ifShowClassify && orgTreeFormData.orgType != 'area'">
144
+ <el-form-item label="部门分类" label-width="120px">
145
+ <el-select style="width: 100%" v-model="orgTreeFormData.orgClassify">
146
+ <el-option v-for="item in deptTypeArr"
147
+ :label="item.label" :value="item.value" :key="item.value">
148
+
149
+ </el-option>
150
+ </el-select>
151
+ </el-form-item>
152
+ </el-col>
153
+ </el-row>
154
+ </el-form>
155
+ <div slot="footer" class="dialog-footer">
156
+ <el-button type="primary" @click="saveTreeForm()" size="small" icon="el-icon-success">确定</el-button>
157
+ <el-button @click="orgTreeDialog = false" size="small" icon="el-icon-error">取 消</el-button>
158
+ </div>
159
+ </el-dialog>
160
+ </el-container>
161
+ <el-container v-else>没有权限</el-container>
162
+ </div>
163
+ </template>
164
+
165
+ <script>
166
+ import SysOrgPosUserTree from "./sysOrgPosUserTree";
167
+ import SysEntOrgUserDetail from "./sysEntOrgUserDetail";
168
+
169
+ export default {
170
+ name: "ent-org-tree",
171
+ components: {SysEntOrgUserDetail, SysOrgPosUserTree},
172
+ data() {
173
+ return {
174
+ currentOrgDim: "", // 当前维度
175
+ orgType: "", // 当前组织类型
176
+ orgTypeObj:{},
177
+ defaultProps: {children: 'children', label: 'orgName'},
178
+ sysOrgDimensionArr: [], // 所有维度
179
+ filterTextVal:'', //过滤节点变量
180
+ filterText: "", // 过滤树节点的变量
181
+ menuVisible: false, // 菜单可见
182
+ objectID: null, // 右击时节点id,如果与上次相同则菜单保持显示
183
+ orgTreeDialog: false, // 弹出form对话框
184
+ orgTypeArr: [], // 所有组织类型
185
+ deptTypeArr: [{"value": "0", "label": "普通部门"}, {"value": "1", "label": "处室"}, {
186
+ "value": "2",
187
+ "label": "安监局"
188
+ }], // 部门类型
189
+ cascadeProps: {"value": "id", "label": "dataName"}, // 地区【配置
190
+ cascadeOptions: [], // 地区选项
191
+ cascadeOptionsClone:[],
192
+ orgTreeFormData: {}, // 组织添加表单
193
+ ifShowClassify: false, // 是否显示部门分类
194
+ ognVisible: true, // 部门添加下级时无法添加组织
195
+ orgTypeDisabled: false, // 是否禁用组织类型
196
+ // orgParentNameRead:false, // 上级组织是否只读
197
+ rules: {
198
+ orgName: [{required: true, message: '请填写内容', trigger: 'blur'}]
199
+ },
200
+ pageSetting: {}, // 维度配置
201
+ searchPlaceHolder: "组织名称",
202
+ closeMainPos: false, // 关闭主岗位
203
+ closePos: false, // 关闭主岗位
204
+ currentOrgId: "", // 当前组织id
205
+ currentObj: {}, // 当前节点数据
206
+ showTree: false, // 显示树的时机
207
+ showPosUser: false, // 显示组织岗位的时机
208
+ noAuth: false, // 没有权限
209
+ regionDisable:false, // 所在地区禁用
210
+ loginUser:{}, // 登录用户
211
+ loginDept:{}, //登录部门
212
+ treeRequestParam:{}, // 组织树的过滤条件
213
+ top:0,
214
+ left:0,
215
+ sysDataObj:{},
216
+ refreshOrgId:false,
217
+ orgTreeData:[], //组织树数据
218
+ showGearObj:{}, //是否显示齿轮
219
+ orgTitle:'添加组织信息', //部门信息
220
+ showOrgEntType:false, //是否显示
221
+
222
+ orgPosRules:'2', //组织岗位加载规则
223
+ }
224
+ },
225
+ created() { // 初始化创建
226
+ let vm = this;
227
+
228
+ //加载系统参数
229
+ this.PARAM_GLOBAL.getByKeyAsync("ORG_POS_RULES").then(res =>{
230
+ vm.orgPosRules = res.paramVal == '1' ? res.paramVal : '2';
231
+ vm.initOriginData(); // 初始化下拉数据等,并初始化权限,仅初始化一次
232
+ vm.initShowOrgEntType();
233
+ });
234
+ },
235
+ methods: {
236
+ /**
237
+ * 搜索
238
+ */
239
+ filterBtnClick(){
240
+ //赋值
241
+ this.filterText = this.filterTextVal || '';
242
+ },
243
+
244
+ initOriginData() { // 初始化下拉数据等,仅初始化一次
245
+ let vm = this;
246
+ vm.noAuth = false;
247
+ vm.axios.post(vm.api.param.getSysParams, {"key": "SysDataOperation"}).then(function (res) {
248
+ let jsonOpt = JSON.parse(vm.platStringUtil.replaceAll(res.data,"'","\"") || "{}");
249
+ if (jsonOpt.opt === '否') {
250
+ vm.init();
251
+ } else {
252
+ vm.loginUser = vm.USER_GLOBAL.getLoginUser() || {};
253
+ vm.loginDept = vm.USER_GLOBAL.getLoginDept() || {};
254
+ if (vm.loginUser.userType === 'sup' || vm.loginUser.userType === 'dev') {
255
+ vm.init();
256
+ }else{
257
+ vm.axios.post(vm.api.sysOrgPosUser.find,{"userId":vm.loginUser.id}).then(posUserRes => {
258
+ if(posUserRes && posUserRes.data.length > 0){
259
+ let orgTreeId = ""; // 组织树上级
260
+ let dim = ""; // 所在维度
261
+ for(let i = 0; i<posUserRes.data.length;i++){
262
+ if(posUserRes.data[i].orgId){
263
+ if(!dim){
264
+ dim = posUserRes.data[i].orgDim;
265
+ }
266
+ if(posUserRes.data[i].orgDim==dim){
267
+ orgTreeId += ","+posUserRes.data[i].orgId;
268
+ }
269
+ }
270
+ }
271
+ if(orgTreeId.length>0){
272
+ orgTreeId = orgTreeId.substring(1);
273
+ }
274
+ //判断是否为管理员
275
+ if(vm.loginUser.commonEmpowerId){ //如果是管理员
276
+ orgTreeId = vm.loginUser.mainOrgId;
277
+ }
278
+ if(vm.orgPosRules == '1'){
279
+ orgTreeId = vm.loginDept.id;
280
+ }
281
+ vm.$set(vm.treeRequestParam,"orgParentTreeSelfs",orgTreeId);
282
+ // vm.$set(vm.treeRequestParam,"orgTreeId",orgTreeId);
283
+ vm.init(dim);
284
+ }else{
285
+ vm.noAuth = true; // 查不到组织架构
286
+ }
287
+ })
288
+ }
289
+ }
290
+ });
291
+ vm.axios.post(vm.api.param.getSysParams, {
292
+ 'key': 'SysOrgType'
293
+ }).then(res => { // 组织类型
294
+ if(res&&res.data){
295
+ vm.orgTypeObj = res.data;
296
+ }
297
+ if(typeof vm.orgTypeObj == 'string'){
298
+ vm.orgTypeObj = JSON.parse(vm.platStringUtil.replaceAll(vm.orgTypeObj,"'","\""));
299
+ }
300
+ Object.keys(vm.orgTypeObj).forEach(function (key) {
301
+ let obj = {};
302
+ obj["value"] = key;
303
+ obj["label"] = vm.orgTypeObj[key];
304
+ vm.orgTypeArr.push(obj);
305
+ });
306
+ });
307
+ // vm.orgTypeObj['ogn'] = "机构";
308
+ // vm.orgTypeArr.push({
309
+ // "value":"ogn",
310
+ // "label":"机构"
311
+ // });
312
+
313
+ vm.axios.post(vm.api.param.getSysParams, {'key': 'sysProvince'}).then(paramRes => {
314
+ if(paramRes && paramRes.data){
315
+ let paramJson = paramRes.data;
316
+ vm.axios.post(vm.api.data.getDataByType, {'typeId': '522eb83216004493b0e0eb729c564941'}).then(res => {
317
+ (res.data || []).forEach(sysDataObj => {
318
+ vm.sysDataObj[sysDataObj.id] = sysDataObj;
319
+ });
320
+ let result = vm.COMMON_FUNC.buildElTree(res.data||[])|| [];
321
+ if(paramJson == "-1"){
322
+ vm.cascadeOptions = result;
323
+ }else{
324
+ result.forEach(function (data) {
325
+ if (data.id == paramJson) {
326
+ let arr = [];
327
+ arr.push(data);
328
+ vm.cascadeOptions = arr;
329
+ }
330
+ });
331
+ }
332
+
333
+ });
334
+ }
335
+ });
336
+ },
337
+
338
+ /**
339
+ * 是否显示
340
+ */
341
+ initShowOrgEntType(){
342
+ let loginUser = this.USER_GLOBAL.getLoginUser() || {};
343
+ if (loginUser.userType === 'sup' || loginUser.userType === 'dev') {
344
+ this.showOrgEntType = true;
345
+ }
346
+ },
347
+
348
+ init(dim) { // 初始化,dim选择的维度
349
+ let vm = this;
350
+ vm.showPosUser = false;
351
+ vm.showTree = false;
352
+ vm.sysOrgDimensionArr = [];
353
+ vm.axios.post(vm.api.sysOrgDimension.find,{"order":"sort"}).then(res => {
354
+ let data = res.data;
355
+ for (let item of data) {
356
+ if (item.isUse === '1') {
357
+ vm.sysOrgDimensionArr.push(item);
358
+ }
359
+ }
360
+ if (vm.sysOrgDimensionArr) {
361
+ if(dim){
362
+ vm.currentOrgDim = dim;
363
+ }else{
364
+ vm.currentOrgDim = vm.sysOrgDimensionArr[0].id;
365
+ }
366
+ vm.sysOrgDimensionArr.forEach(dimension => {
367
+ if(dimension.id == vm.currentOrgDim){
368
+ vm.initDimSetting(dimension);
369
+ }
370
+ });
371
+ vm.showTree = true;
372
+ vm.showPosUser = true;
373
+ }
374
+ });
375
+ },
376
+ initDimSetting(data) { // 初始化维度配置
377
+ let vm = this;
378
+ let pageSetting = {
379
+ "closeDept": false, // 设置为true时此维度下不包含部门(左侧组织树只有组织)
380
+ "allowAddUser":false, // 允许添加用户
381
+ "ognName": "组织", // 定义组织名称
382
+ "deptName": "部门", // 定义部门名称
383
+ "posName": "岗位", // 定义岗位名称
384
+ "ognOpenIcon": "saspiconfont pl-icon-organ", // 树中组织展开时使用的图标
385
+ "ognCloseIcon": "saspiconfont pl-icon-organ", // 树中组织收缩时使用的图标
386
+ "deptOpenIcon": "saspiconfont pl-icon-untitled85", // 树中组织展开时使用的图标
387
+ "deptCloseIcon": "saspiconfont pl-icon-untitled85", // 树中组织收缩时使用的图标
388
+ "closeMainPos": true, // 关闭主岗位
389
+ "posIcon": "saspiconfont pl-icon-account", // 岗位图标
390
+ "posMainIcon": "saspiconfont pl-icon-yonghu", // 主岗位图标
391
+ "chooseUserType": "" // 可选择的用户类型(默认可选择所有类型用户,如设置ent就只可以选择ent)
392
+ };
393
+ let dimSpec = JSON.parse(data["dimSpec"] || "{}");
394
+ vm.pageSetting = Object.assign({"closePos":true}, pageSetting, dimSpec);
395
+ vm.searchPlaceHolder = (vm.pageSetting['ognName'] || '组织') + "名称";
396
+ vm.closeMainPos = vm.pageSetting["closeMainPos"];
397
+ vm.closePos = vm.pageSetting["closePos"];
398
+ vm.orgType = vm.pageSetting["closeDept"] ? "ogn" : ""; // 关闭部门后不抓取部门数据
399
+ if(vm.orgType){
400
+ vm.$set(vm.treeRequestParam,"orgType",vm.orgType);
401
+ }
402
+ vm.$set(vm.treeRequestParam,"orgDim",vm.currentOrgDim);
403
+ },
404
+ initExpandOrignOrg(treeVm) { // 初始化展开第一级组织\
405
+ let vm = this;
406
+ let nodesMap = treeVm.getAllNode();
407
+ let index = 0;
408
+ for (let key in nodesMap) {
409
+ if (nodesMap[key].level === 1 && nodesMap[key].data["orgType"] === 'ogn') {
410
+ nodesMap[key].expanded = true;
411
+ nodesMap[key].data.className = vm.pageSetting["ognOpenIcon"];
412
+ }
413
+ if(nodesMap[key].level === 1 && index == 0 && !this.currentObj.id){ //初始化默认选中
414
+ vm.nodeClick(nodesMap[key].data,null);
415
+ vm.$nextTick(() => {
416
+ vm.$refs.orgTreeRef.setTreeCurrentKey(key);
417
+ })
418
+ }
419
+ index ++;
420
+ }
421
+ if(this.currentObj.id){
422
+ vm.$nextTick(() => {
423
+ vm.$refs.orgTreeRef.setTreeCurrentKey(this.currentObj.id);
424
+ })
425
+ }
426
+ },
427
+ dimChange(value) { // 维度切换事件
428
+ let vm = this;
429
+ vm.currentOrgId = "$";
430
+ vm.currentObj = {};
431
+ for (let elem of vm.sysOrgDimensionArr) {
432
+ if (elem.id === value) {
433
+ vm.initDimSetting(elem);
434
+ break;
435
+ }
436
+ }
437
+ },
438
+ dealTreeData(data) { // 给节点添加自定义图标
439
+ let vm = this;
440
+ for (let elem of data) {
441
+ if (elem["orgType"] == "ogn") {
442
+ elem.className = vm.pageSetting["ognCloseIcon"] || "saspiconfont pl-icon-organ";
443
+ }
444
+ if (elem["orgType"] === "dept") {
445
+ elem.className = vm.pageSetting["deptCloseIcon"] || "saspiconfont pl-icon-untitled85";
446
+ }
447
+ }
448
+ vm.orgTreeData = data || [];
449
+ },
450
+ filterTextCallBack() {
451
+ let vm = this;
452
+ vm.$nextTick(function () {
453
+ let nodesMap = vm.$refs.orgTreeRef.getAllNode();
454
+ for (let [key, node] of Object.entries(nodesMap)) {
455
+ if (node.expanded) {
456
+ if (node.data["orgType"] === "ogn") {
457
+ node.data.className = vm.pageSetting["ognOpenIcon"] || "saspiconfont pl-icon-organ";
458
+ }
459
+ if (node.data["orgType"] === "dept") {
460
+ node.data.className = vm.pageSetting["deptOpenIcon"] || "saspiconfont pl-icon-untitled85";
461
+ }
462
+ } else {
463
+ if (node.data["orgType"] === "ogn") {
464
+ node.data.className = vm.pageSetting["ognCloseIcon"] || "saspiconfont pl-icon-organ";
465
+ }
466
+ if (node.data["orgType"] === "dept") {
467
+ node.data.className = vm.pageSetting["deptCloseIcon"] || "saspiconfont pl-icon-untitled85";
468
+ }
469
+ }
470
+ }
471
+ });
472
+ },
473
+ treeNodeExpand(data, node, comp) {
474
+ let vm = this;
475
+ if (data.orgType === "ogn") {
476
+ data.className = vm.pageSetting["ognOpenIcon"] || "saspiconfont pl-icon-organ";
477
+ }
478
+ if (data.orgType === "dept") {
479
+ data.className = vm.pageSetting["deptOpenIcon"] || "saspiconfont pl-icon-untitled85";
480
+ }
481
+ },
482
+ treeNodeCollapse(data, node, comp) {
483
+ let vm = this;
484
+ if (data.orgType === "ogn") {
485
+ data.className = vm.pageSetting["ognCloseIcon"] || "saspiconfont pl-icon-organ";
486
+ }
487
+ if (data.orgType === "dept") {
488
+ data.className = vm.pageSetting["deptCloseIcon"] || "saspiconfont pl-icon-untitled85";
489
+ }
490
+ },
491
+ nodeClick(data, node) { // 节点点击事件
492
+ let vm = this;
493
+ vm.menuVisible = false;
494
+ vm.currentOrgId = data["id"];
495
+ this.axios.post(this.api.sysOrg.listNopageDim,{"orgId":data["id"],"orgDim":vm.currentOrgDim}).then(res => {
496
+ vm.currentObj = Object.assign(res.data[0] || {}, data);
497
+ if(!vm.currentObj.entType){
498
+ vm.$set(vm.currentObj,'entType','0');
499
+ }
500
+ vm.refreshOrgId = true;
501
+ this.$nextTick(() => {
502
+ this.refreshOrgId = false;
503
+ })
504
+ })
505
+ },
506
+ updateCallBack(updateObj) { // 修改组织信息时的回调
507
+ let vm = this;
508
+ let nodesMap = vm.$refs.orgTreeRef.getAllNodeLazyData();
509
+ let currentData = nodesMap[updateObj.id];
510
+ if(currentData){
511
+ currentData["orgName"] = updateObj["orgName"];
512
+ currentData["orgClassify"] = updateObj["orgClassify"];
513
+ }else {
514
+ this.axios.post(this.api.sysOrg.getById,{id:updateObj.id}).then(res =>{
515
+ if(res && res.data){
516
+ let currentData = res.data;
517
+ currentData["orgName"] = updateObj["orgName"];
518
+ currentData["orgClassify"] = updateObj["orgClassify"];
519
+ }
520
+ });
521
+ }
522
+
523
+ },
524
+ handleRightSelect(key) { // 右键菜单选择事件
525
+ let vm = this;
526
+ switch (key) {
527
+ case 'addArea':
528
+ vm.addOrgData('area');
529
+ break;
530
+ case 'addOgn':
531
+ vm.addOrgData('ogn');
532
+ break;
533
+ case 'addDept':
534
+ vm.addOrgData('dept');
535
+ break;
536
+ case 'addRoot':
537
+ vm.addOrgData();
538
+ break;
539
+ case 'removeCurrent':
540
+ vm.removeCurrent();
541
+ break;
542
+ case 'removeCheck':
543
+ vm.removeCheck();
544
+ break;
545
+ case 'unfold': // 展开
546
+ vm.toggleTree(true);
547
+ break;
548
+ case 'retract': // 收起
549
+ vm.toggleTree(false);
550
+ break;
551
+ default:
552
+ console.log('当前选择未定义');
553
+ break;
554
+ }
555
+ },
556
+ addOrgData(type) { // 添加组织触发事件
557
+ let vm = this;
558
+ vm.orgTitle = "添加组织信息";
559
+ type = type ? type : 'root'; // 根节点只能添加组织
560
+ vm.ifShowClassify = false;
561
+ vm.orgTypeDisabled = true;
562
+ vm.regionDisable = false;
563
+ let treeComp = vm.$refs.orgTreeRef;
564
+ if (type === "dept" || type === "ogn" || type === "area") { // 下级部门组织
565
+ let currentNode = treeComp.getTreeNodeBykey(treeComp.getTreeCurrentNode("key")); // 当前节点
566
+ let cData = currentNode.data; // 当前节点数据
567
+ this.axios.post(this.api.sysOrg.getById,{id:cData["id"]}).then(res => {
568
+ let currentData = res.data || {};
569
+ let regionArr = []; // 地区
570
+ let arr = ["province", "city", "area", "street","community"];
571
+ for (let elem of arr) { // 设置地区,如果没有地区设置为根节点
572
+ if (currentData[elem]) {
573
+ regionArr.push(currentData[elem]);
574
+ } else {
575
+ if (!currentData["province"]) {
576
+ if(vm.cascadeOptions[0]){
577
+ regionArr.push(vm.cascadeOptions[0].id);
578
+ }
579
+ }
580
+ break;
581
+ }
582
+ }
583
+
584
+ let degree = regionArr.length > 1 ? regionArr.length : 0;
585
+ let areaArr = JSON.parse(JSON.stringify(this.cascadeOptions));
586
+ vm.setDisabled(areaArr,regionArr,degree,0); // 设置cascade层级禁用
587
+ this.cascadeOptionsClone = areaArr;
588
+ let parentTree = '';
589
+ let orgParentTree = currentData.orgParentTree;
590
+ if (!orgParentTree) { // 根节点父级树有可能是Null
591
+ parentTree = currentData.id + ",";
592
+ } else {
593
+ parentTree = orgParentTree + currentData.id + ",";
594
+ }
595
+ vm.orgTreeFormData = {
596
+ "orgParentId": currentData.id,
597
+ "orgParentTree": parentTree,
598
+ "orgDim": vm.currentOrgDim,
599
+ "sort": vm.getNextOrder(currentNode),
600
+ "layer": (Number(currentData.layer || "") + 1),
601
+ "orgParentName": currentData.orgName,
602
+ "orgType": type,
603
+ "region": regionArr,
604
+ "entType":currentData.entry || '0', //默认不是企业
605
+ };
606
+ if (type === "dept") {
607
+ vm.ifShowClassify = true;
608
+ vm.regionDisable = true;
609
+ }
610
+ vm.$set(vm.orgTreeFormData, "orgClassify", "0");
611
+ vm.orgTreeDialog = true;
612
+ });
613
+ }
614
+ if (type === 'root') { // 添加根节点
615
+ let regionArr = []; // 地区
616
+ vm.orgTypeDisabled = false; // 根节点组织类型解禁
617
+ regionArr.push((vm.cascadeOptions[0] || {}).id);
618
+ this.cascadeOptionsClone = JSON.parse(JSON.stringify(this.cascadeOptions));
619
+ vm.orgTreeFormData = {
620
+ "orgParentId": "-1", "orgParentTree": "-1,",
621
+ "orgDim": vm.currentOrgDim, "sort": vm.getRootOrder(),
622
+ "layer": "1", "orgParentName": "无", "orgType": "ogn", "region": regionArr,
623
+ "entType":"0"
624
+ };// 默认选择根节点组织添加
625
+ vm.orgTreeDialog = true;
626
+ }
627
+ },
628
+ setDisabled(arr,regionArr,level,time) { // 设置下层级数据只读
629
+ if(time >= level){
630
+ return;
631
+ }
632
+ let region = regionArr[time];
633
+ time++;//层级
634
+ for(let i = arr.length - 1;i >= 0;i--){
635
+ if(arr[i] && arr[i].id != region){
636
+ arr.splice(i,1);
637
+ }
638
+ if (arr[i] && arr[i]["children"]) {
639
+ this.setDisabled(arr[i]["children"],regionArr,level,time);
640
+ }
641
+ }
642
+ },
643
+ getNextOrder(node) { // 获取下一排序
644
+ let maxOrder = 0;
645
+ node.childNodes.forEach(function (child) {
646
+ maxOrder = Number(child.data.sort) > maxOrder ? Number(child.data.sort) : maxOrder;
647
+ });
648
+ return maxOrder + 1;
649
+ },
650
+ getRootOrder() { // 获取根节点的新增数据排序
651
+ let vm = this;
652
+ let treeComp = vm.$refs.orgTreeRef;
653
+ let nodesMap = treeComp.$refs.elTree.store.nodesMap; // 获取节点集合
654
+ let rootDatas = []; //根节点集合
655
+ for (let key in nodesMap) {
656
+ if (nodesMap[key].level == 1) {
657
+ rootDatas.push(nodesMap[key].data);
658
+ }
659
+ }
660
+ let maxOrder = 0;
661
+ rootDatas.forEach(function (data) {
662
+ maxOrder = Number(data["sort"] || "") > maxOrder ? Number(data["sort"] || "") : maxOrder;
663
+ });
664
+ return maxOrder + 1;
665
+ },
666
+ removeCurrent() { // 删除当前节点
667
+ let vm = this;
668
+ let treeComp = vm.$refs.orgTreeRef;
669
+ let currentNode = treeComp.getTreeCurrentNode();
670
+ let deleteNodeArr = treeComp.getCurrentChildren(currentNode,[]);
671
+ let keys = deleteNodeArr.join(",");
672
+ vm.$confirm('确定删除当前节点?', '警告', {
673
+ confirmButtonText: '确定',
674
+ cancelButtonText: '取消',
675
+ }).then(function () {
676
+ vm.axios.post(vm.api.sysOrg.deleteByOrgIds, {"orgIds": keys}).then(function (res) {
677
+ if (res.data.operateSuccess) {
678
+ treeComp.defaultTreeRemove(currentNode.id);
679
+ }
680
+ vm.$message({
681
+ duration: 1000,
682
+ type: 'success',
683
+ message: res.data.operateMessage
684
+ })
685
+ })
686
+ })
687
+ },
688
+ removeCheck() { // 删除选中节点
689
+ let vm = this;
690
+ let treeComp = vm.$refs.orgTreeRef;
691
+ let checkedKeys = treeComp.getTreeCheckedNodes("key");
692
+ if (checkedKeys.length == 0) {
693
+ vm.$message("请选择要操作的节点!");
694
+ return;
695
+ }
696
+ vm.$confirm('确定删除已勾选节点?', '警告', {
697
+ confirmButtonText: '确定',
698
+ cancelButtonText: '取消',
699
+ }).then(function () {
700
+ vm.axios.post(vm.api.sysOrg.deleteOrgStructure, {"orgStructureIds": checkedKeys.join(",")}).then(function (res) {
701
+ if (res.data.operateSuccess) {
702
+ treeComp.defaultTreeRemove(checkedKeys);
703
+ }
704
+ vm.$message({
705
+ duration: 1000,
706
+ type: 'success',
707
+ message: res.data.operateMessage
708
+ })
709
+ })
710
+ })
711
+ },
712
+ toggleTree(mark){ // 收起
713
+ let vm = this;
714
+ let treeComp = vm.$refs.orgTreeRef;
715
+ let currentNode = treeComp.getTreeCurrentNode();
716
+ let nodesMap = treeComp.getAllNode();
717
+ let allIds = treeComp.getCurrentChildren(currentNode,[]);
718
+ allIds.forEach(item => {
719
+ (nodesMap[item] || {}).expanded = mark;
720
+ });
721
+ },
722
+ /**
723
+ * 获取当前节点的所有子集
724
+ * @param resultArr
725
+ * @param node
726
+ */
727
+ getAllChildren(resultArr,node){
728
+ if(node.childNodes && node.childNodes.length > 0){
729
+ node.childNodes.forEach(item => {
730
+ resultArr.push(item.data);
731
+ if(item.childNodes && item.childNodes.length > 0){
732
+ this.getAllChildren(resultArr,item);
733
+ }
734
+ })
735
+ }
736
+ },
737
+ treeNodeDrop(node, endNode, type) {
738
+ let vm = this;
739
+ let parentId = "";
740
+ let parentTree = "";
741
+ if (type == "before" || type == "after") {
742
+ parentId = endNode.data.orgParentId;
743
+ parentTree = endNode.data.orgParentTree;
744
+ }
745
+ let sysOrgArr = [];
746
+ let children = [];
747
+ if (type == "inner") {
748
+ parentId = endNode.data.id;
749
+ let tree = endNode.data.orgParentTree ? endNode.data.orgParentTree : "-1"; // tree的父级树是空,根节点有出现的情况,设为-1
750
+ if(tree.lastIndexOf(",") > -1 && tree.lastIndexOf(",") == tree.length - 1){
751
+ parentTree = tree + endNode.data.id;
752
+ }else{
753
+ parentTree = tree + "," + endNode.data.id;
754
+ }
755
+ }
756
+ if (!parentId || !node.data.id) { //出现异常无上级数据不操作
757
+ return;
758
+ }
759
+
760
+ if(parentTree.indexOf(",") != 0){
761
+ parentTree = "," + parentTree;
762
+ }
763
+ if(parentTree.lastIndexOf(",") != (parentTree.length - 1)){
764
+ parentTree = parentTree + ",";
765
+ }
766
+ let currentNodeIndex = 0;
767
+ if(node.data.orgParentId == parentId ){ //如果是同级拖动
768
+ //获取当前级别下的
769
+ let currentLayerArr = (endNode.parent || {}).childNodes || [];
770
+ currentLayerArr.forEach((arr,index) =>{
771
+ let obj = {
772
+ "orgParentId": parentId,
773
+ "orgParentTree": parentTree,
774
+ "id": arr.data.id,
775
+ "sort":index + 1
776
+ };
777
+ if(arr.data.id == node.data.id){
778
+ currentNodeIndex = index + 1;
779
+ }
780
+ sysOrgArr.push(obj);
781
+ });
782
+ }else {
783
+ let updateObj = {
784
+ "orgParentId": parentId,
785
+ "orgParentTree": parentTree,
786
+ "id": node.data.id
787
+ };
788
+ if(type == "before"){
789
+ updateObj["sort"] = Number(endNode.data.sort || '0') + 1;
790
+ }else if(type == 'after'){
791
+ if(Number(endNode.data.sort || '2') == 1){
792
+ updateObj["sort"] = 1;
793
+ }else {
794
+ updateObj["sort"] = Number(endNode.data.sort || '2') - 1;
795
+ }
796
+ }
797
+ sysOrgArr.push(updateObj);
798
+ if(node.childNodes && node.childNodes.length > 0){
799
+ this.getAllChildren(children,node);
800
+ }
801
+ // 更新子类的父级树
802
+ children.forEach(eachData => {
803
+ let tempOrgParentTree = eachData.orgParentTree;
804
+ let tempIndex = tempOrgParentTree.lastIndexOf(node.data.id);
805
+ if(tempIndex > -1){
806
+ tempOrgParentTree = parentTree + tempOrgParentTree.substring(tempIndex);
807
+ sysOrgArr.push({
808
+ "orgParentTree": tempOrgParentTree,
809
+ "id": eachData.id
810
+ })
811
+ }
812
+ })
813
+ }
814
+ vm.axios.post(vm.api.sysOrg.batchUpdateSysOrg,{"sysOrgs":JSON.stringify(sysOrgArr)}).then(function (res) {
815
+ if (!res.data.operateSuccess) {
816
+ //操作失败重新初始化数据
817
+ vm.init(vm.currentOrgDim);
818
+ vm.$message({
819
+ duration: 1200,
820
+ message: "操作失败,已重新加载数据!",
821
+ });
822
+ } else {
823
+ node.data.orgParentId = parentId;
824
+ node.data.orgParentTree = parentTree;
825
+ // node.data.sort =
826
+ if(node.data.orgParentId == parentId ) { //如果是同级拖动
827
+ node.data.sort = currentNodeIndex;
828
+ }
829
+ //更新 currentObj
830
+ vm.nodeClick(node.data,null);
831
+ }
832
+ });
833
+ },
834
+ treeAllowDrop(draggingNode, dropNode, type) {
835
+ let parentId = "";
836
+ if (type == "next" || type == "prev") {
837
+ parentId = dropNode.data.orgParentId;
838
+ }
839
+ if (type == "inner") {
840
+ parentId = dropNode.data.id;
841
+ }
842
+ if (!parentId || !draggingNode.data.id) { //出现异常无上级数据不操作
843
+ return;
844
+ }
845
+ return true;
846
+ },
847
+ saveTreeForm() { // 保存组织表单数据
848
+ let vm = this;
849
+ //提交表单时先进行验证,验证完成后转化region至省市区
850
+ vm.$refs.orgTreeFormRef.validate(function (valid) {
851
+ if (valid) {
852
+ let submitObj = Object.assign({}, vm.orgTreeFormData); // 复制数据防止树数据污染
853
+ //转换地区数据
854
+ let region = submitObj["region"];
855
+ let objTemp = {"province": 0, "city": 1, "area": 2, "street": 3,"community":4};
856
+ for (let key in objTemp) {
857
+ submitObj[key] = region[objTemp[key]] || "";
858
+ }
859
+ if(submitObj.orgType == "area" && submitObj.region){
860
+ let sysDataId = submitObj.region[submitObj.region.length - 1];
861
+ submitObj.orgName = vm.sysDataObj[sysDataId].dataName;
862
+ }
863
+ delete submitObj["region"]; // 移除假属性region
864
+
865
+ let orgParentTree = submitObj["orgParentTree"];
866
+ if(orgParentTree.indexOf(",") != 0){
867
+ orgParentTree = "," + orgParentTree;
868
+ }
869
+ if(orgParentTree.lastIndexOf(",") != (orgParentTree.length - 1)){
870
+ orgParentTree = orgParentTree + ",";
871
+ }
872
+ vm.axios.post(vm.api.sysOrg.batchAdd, submitObj).then(function (res) {
873
+ if (res.data.operateSuccess) {
874
+ res.data.operateObj.forEach(function (data) {
875
+ if(data["orgType"] == "ogn"){
876
+ data.className = vm.pageSetting["ognCloseIcon"] || "saspiconfont pl-icon-organ";
877
+ }
878
+ if(data["orgType"] == "dept"){
879
+ data.className = vm.pageSetting["deptCloseIcon"] || "saspiconfont pl-icon-untitled85";
880
+ }
881
+ });
882
+ let treeComp = vm.$refs.orgTreeRef;
883
+ if (vm.pageSetting["closeDept"] && submitObj["orgType"] === "dept") { // 如果关闭了部门显示,添加时不显示在树节点,提示
884
+ vm.$message({
885
+ duration: 1500,
886
+ message: "添加成功,但由于关闭了部门,当前不显示!",
887
+ })
888
+ } else {
889
+ if (!submitObj["orgParentId"] || submitObj["orgParentId"] === '-1') { // 根节点横向插入
890
+ let nodesMap = treeComp.$refs.elTree.store.nodesMap; // 获取节点集合
891
+ let rootDatas = []; //根节点集合
892
+ for (let key in nodesMap) {
893
+ if (nodesMap[key].level === 1) {
894
+ rootDatas.push(nodesMap[key]);
895
+ }
896
+ }
897
+ let maxObj = {"id": 0};
898
+ let minObj = {};
899
+ rootDatas.forEach(function (data) {
900
+ maxObj = Number(data["id"]) > Number(maxObj["id"]) ? data : maxObj;
901
+ });
902
+ if (maxObj["id"] === 0) { // 当前没有树
903
+ treeComp.init();
904
+ } else {
905
+ treeComp.defaultTreeInsertAfter(res.data.operateObj, maxObj);
906
+ }
907
+ } else { // 子节点下级添加
908
+ treeComp.defaultTreeAppend(res.data.operateObj, submitObj["orgParentId"]);
909
+ }
910
+ vm.$message({
911
+ duration: 1000,
912
+ type: 'success',
913
+ message: res.data.operateMessage
914
+ });
915
+ }
916
+ vm.orgTreeData = vm.orgTreeData.concat(res.data.operateObj || []);
917
+ } else {
918
+ vm.$message({
919
+ duration: 1000,
920
+ message: res.data.operateMessage
921
+ });
922
+ }
923
+ vm.orgTreeDialog = false;
924
+ });
925
+ }
926
+ })
927
+ },
928
+ rightClickNode(event, data, node) { // 右击节点事件
929
+ let expand = node.expanded;
930
+ let target = window.event.target;
931
+ if (target.tagName == 'DIV') {
932
+ target.click(); // 右键时点击当前节点
933
+ } else {
934
+ let pNode = target.parentNode;
935
+ if (target.className == 'el-checkbox__inner') { // 右击checkBox
936
+ pNode.parentNode.parentNode.click();
937
+ } else { // 右击下拉图标
938
+ pNode.click();
939
+ }
940
+ }
941
+ node.expanded = expand; // 右击仅选中当前节点保持当前节点展开情况不变
942
+ let vm = this;
943
+ vm.ognVisible = true;
944
+ if (data.orgType == 'dept') {
945
+ vm.ognVisible = false; // 部门添加下级不能添加组织
946
+ }
947
+ if (vm.objectID !== data.id) {
948
+ vm.objectID = data.id;
949
+ vm.menuVisible = true;
950
+ //设置 node 中齿轮显示
951
+ this.showGearObj[data.id] = true;
952
+ } else {
953
+ vm.menuVisible = !vm.menuVisible;
954
+ //隐藏node 中齿轮
955
+ this.showGearObj[data.id] = false;
956
+ }
957
+ vm.left = window.event.clientX + "px";
958
+ vm.top = window.event.clientY + "px";
959
+ },
960
+ closeSafeValidate() { // 关闭数据校验回调
961
+ let vm = this;
962
+ vm.init(vm.currentOrgDim);
963
+ },
964
+ saveRollBack(obj){//保存回调
965
+ let vm = this;
966
+ //vm.$refs.orgTreeRef.defaultTreeUpdate(obj.id, obj);
967
+ vm.$refs.orgTreeRef.init();
968
+ // vm.$nextTick(()=>{
969
+ // vm.$refs.orgTreeRef.setTreeCurrentKey(obj.id);
970
+ // });
971
+
972
+ },
973
+
974
+ /**
975
+ * 渲染
976
+ * @param h
977
+ * @param node
978
+ * @param data
979
+ */
980
+ renderContentFunc(h, { node, data}){
981
+ //拼接齿轮
982
+ let MyComempte = (
983
+ <span>
984
+ <i class={data.className}></i>
985
+ <span>{node.label}</span>
986
+ <span class= {'saspiconfont pl-icon-set is-show-setting'}
987
+ onclick={this.dOnClick.bind(node,data)}></span>
988
+ </span>
989
+ );
990
+ //绑定悬浮事件
991
+ return MyComempte;
992
+ },
993
+
994
+
995
+
996
+ /**
997
+ *
998
+ * @param data
999
+ */
1000
+ dOnClick(currentData,data){
1001
+ let vm = this;
1002
+ let treeNode = this.$refs.orgTreeRef.getNode(currentData.id);
1003
+ vm.rightClickNode(null,currentData,treeNode);
1004
+ window.event.stopPropagation();
1005
+ },
1006
+
1007
+ /**
1008
+ * 变换组织类型
1009
+ */
1010
+ changOrgType(){
1011
+ let orgType = this.orgTreeFormData.orgType;
1012
+ if(orgType == 'dept'){
1013
+ this.ifShowClassify = true;
1014
+ }else {
1015
+ this.ifShowClassify = false;
1016
+ }
1017
+ }
1018
+ }
1019
+ }
1020
+ </script>
1021
+
1022
+ <style scoped lang="scss">
1023
+ #rightClickMenu {
1024
+ z-index: 99;
1025
+ }
1026
+
1027
+ .el-menu-vertical {
1028
+ background-color: #555C63;
1029
+ opacity: 0.9;
1030
+ border-radius: 8px;
1031
+ z-index: 99;
1032
+ min-width: 180px;
1033
+ }
1034
+
1035
+ .safeValidateDialog /deep/ .el-dialog__body {
1036
+ height: calc(100% - 80px);
1037
+ }
1038
+
1039
+ .asideTree /deep/ .is-show-setting{
1040
+ margin-left: 10px;
1041
+ font-size: 16px;
1042
+ visibility:hidden !important;
1043
+ }
1044
+
1045
+ .asideTree /deep/ .el-tree-node__content:hover > span > .is-show-setting{
1046
+ visibility:visible !important;
1047
+ }
1048
+
1049
+
1050
+ </style>