imatrix-ui 0.2.6-up → 0.2.7-up

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 (206) hide show
  1. package/README.md +7 -7
  2. package/index.html +13 -13
  3. package/lib/super-ui.css +1 -1
  4. package/lib/super-ui.js +2724 -1932
  5. package/lib/super-ui.umd.cjs +24 -24
  6. package/package.json +1 -1
  7. package/packages/IntervalSelection/index.js +6 -6
  8. package/packages/IntervalSelection/src/quarterScope.vue +405 -405
  9. package/packages/IntervalSelection/src/sectionDate.vue +475 -475
  10. package/packages/breadcrumb/index.js +6 -6
  11. package/packages/breadcrumb/src/breadcrumb.vue +81 -81
  12. package/packages/department-tree/index.js +6 -6
  13. package/packages/department-tree/src/department-tree.vue +113 -113
  14. package/packages/department-tree-inline/index.js +6 -6
  15. package/packages/department-tree-inline/src/department-multi-tree-inline.vue +472 -472
  16. package/packages/department-tree-inline/src/department-single-tree-inline.vue +340 -340
  17. package/packages/department-tree-inline/src/department-tree-inline.vue +86 -86
  18. package/packages/department-tree-inline/src/department-tree-service.js +344 -344
  19. package/packages/department-tree-inline/src/search-result.vue +235 -235
  20. package/packages/department-user-tree/index.js +6 -6
  21. package/packages/department-user-tree/src/department-user-multiple-tree.vue +129 -129
  22. package/packages/department-user-tree/src/department-user-single-tree.vue +94 -94
  23. package/packages/department-user-tree/src/department-user-tree.vue +114 -114
  24. package/packages/department-user-tree-inline/index.js +9 -9
  25. package/packages/department-user-tree-inline/src/department-user-multiple-tree-inline.vue +731 -731
  26. package/packages/department-user-tree-inline/src/department-user-single-tree-inline.vue +334 -334
  27. package/packages/department-user-tree-inline/src/department-user-tree-inline.vue +87 -87
  28. package/packages/department-user-tree-inline/src/department-user-tree-multi-service.js +309 -309
  29. package/packages/department-user-tree-inline/src/department-user-tree-single-service.js +179 -179
  30. package/packages/department-user-tree-inline/src/search-result.vue +273 -273
  31. package/packages/directives/prevent-reclick.js +22 -22
  32. package/packages/dynamic-source-select/index.js +6 -6
  33. package/packages/dynamic-source-select/src/dynamic-source-select-service.js +106 -106
  34. package/packages/dynamic-source-select/src/dynamic-source-select.vue +675 -675
  35. package/packages/dynamic-source-select/src/events.js +78 -78
  36. package/packages/fs-preview/index.js +6 -6
  37. package/packages/fs-preview/src/fs-preview.vue +287 -287
  38. package/packages/fs-upload/index.js +6 -6
  39. package/packages/fs-upload/src/fs-upload-multi.vue +443 -443
  40. package/packages/fs-upload/src/fs-upload-single.vue +353 -353
  41. package/packages/fs-upload/src/fs-upload.vue +191 -191
  42. package/packages/fs-upload/src/see-big-picture.vue +67 -67
  43. package/packages/fs-upload-list/index.js +6 -6
  44. package/packages/fs-upload-list/src/fs-upload-list.vue +372 -372
  45. package/packages/hamburger/index.js +6 -6
  46. package/packages/hamburger/src/hamburger.vue +40 -40
  47. package/packages/index.js +123 -123
  48. package/packages/multipart-upload/index.js +6 -6
  49. package/packages/multipart-upload/src/index.vue +66 -66
  50. package/packages/multipart-upload/src/multipart-upload-form.vue +377 -377
  51. package/packages/multipart-upload/src/multipart-upload-list.vue +517 -517
  52. package/packages/organization-input/index.js +6 -6
  53. package/packages/organization-input/src/organization-input.vue +583 -583
  54. package/packages/plugins/export-data-new.js +623 -623
  55. package/packages/plugins/export-data.js +431 -431
  56. package/packages/plugins/index.js +15 -15
  57. package/packages/plugins/public-method.js +47 -47
  58. package/packages/remove-department/index.js +6 -6
  59. package/packages/remove-department/src/remove-department.vue +200 -200
  60. package/packages/remove-department/src/remove-dept-service.js +31 -31
  61. package/packages/remove-user/index.js +6 -6
  62. package/packages/remove-user/src/remove-user-service.js +31 -31
  63. package/packages/remove-user/src/remove-user.vue +226 -226
  64. package/packages/remove-workgroup/index.js +6 -6
  65. package/packages/remove-workgroup/src/remove-workgroup-service.js +31 -31
  66. package/packages/remove-workgroup/src/remove-workgroup.vue +183 -183
  67. package/packages/rich-editor/index.js +7 -7
  68. package/packages/rich-editor/index.vue +297 -297
  69. package/packages/rich-editor/langs/zh-Hans.js +438 -438
  70. package/packages/rich-editor/viewer.vue +105 -105
  71. package/packages/scan-code-input/index.js +6 -6
  72. package/packages/scan-code-input/src/events.js +34 -34
  73. package/packages/scan-code-input/src/scan-code-input-colse.vue +140 -140
  74. package/packages/scan-code-input/src/scan-code-input.vue +132 -132
  75. package/packages/secret-info/index.js +7 -7
  76. package/packages/secret-info/index.vue +100 -100
  77. package/packages/super-grid/index.js +7 -7
  78. package/packages/super-grid/src/apis.js +1092 -1092
  79. package/packages/super-grid/src/columns-config.vue +427 -427
  80. package/packages/super-grid/src/custom-formatter.js +394 -394
  81. package/packages/super-grid/src/eventBus.js +2 -2
  82. package/packages/super-grid/src/events.js +56 -56
  83. package/packages/super-grid/src/formValidatorUtil.js +300 -300
  84. package/packages/super-grid/src/formatter.js +196 -196
  85. package/packages/super-grid/src/group-column.vue +99 -99
  86. package/packages/super-grid/src/header-context-menu.vue +82 -82
  87. package/packages/super-grid/src/index-column.vue +69 -69
  88. package/packages/super-grid/src/public-methods.js +30 -30
  89. package/packages/super-grid/src/row-operation.vue +193 -193
  90. package/packages/super-grid/src/search-button.vue +74 -74
  91. package/packages/super-grid/src/search-condition-input.vue +73 -73
  92. package/packages/super-grid/src/search-condition-list.vue +68 -68
  93. package/packages/super-grid/src/search-form-advancedQuery.vue +819 -819
  94. package/packages/super-grid/src/search-form-dialog.vue +77 -77
  95. package/packages/super-grid/src/search-form-item.vue +495 -495
  96. package/packages/super-grid/src/search-form-number.vue +111 -111
  97. package/packages/super-grid/src/search-form-ordinarySearch.vue +239 -239
  98. package/packages/super-grid/src/search-form.vue +762 -762
  99. package/packages/super-grid/src/search-methods.js +592 -592
  100. package/packages/super-grid/src/selection-column.vue +46 -46
  101. package/packages/super-grid/src/store.js +3 -3
  102. package/packages/super-grid/src/super-grid-service.js +728 -728
  103. package/packages/super-grid/src/super-grid.vue +3011 -3011
  104. package/packages/super-grid/src/utils.js +880 -880
  105. package/packages/super-grid/src/view-image-dialog.vue +176 -176
  106. package/packages/super-nine-grid/index.js +7 -7
  107. package/packages/super-nine-grid/src/apis.js +108 -108
  108. package/packages/super-nine-grid/src/custom-formatter.js +73 -73
  109. package/packages/super-nine-grid/src/formatter.js +134 -134
  110. package/packages/super-nine-grid/src/search-form-number.vue +35 -35
  111. package/packages/super-nine-grid/src/search-form.vue +700 -700
  112. package/packages/super-nine-grid/src/search-methods.js +151 -151
  113. package/packages/super-nine-grid/src/store.js +3 -3
  114. package/packages/super-nine-grid/src/super-grid-service.js +107 -107
  115. package/packages/svg-icon/index.js +6 -6
  116. package/packages/svg-icon/src/svg-icon.vue +43 -43
  117. package/packages/utils/date-util.js +292 -292
  118. package/packages/utils/dom.js +227 -227
  119. package/packages/utils/gogocodeTransfer.js +59 -59
  120. package/packages/utils/memory-cache-utils.js +117 -117
  121. package/packages/utils/utils.js +180 -180
  122. package/packages/utils/value-set.js +97 -97
  123. package/packages/valid-code/index.js +7 -7
  124. package/packages/valid-code/src/valid-code.vue +104 -104
  125. package/packages/workflow-button/index.js +6 -6
  126. package/packages/workflow-button/src/workflow-button.vue +550 -550
  127. package/packages/workflow-history-list/index.js +6 -6
  128. package/packages/workflow-history-list/src/api.js +7 -7
  129. package/packages/workflow-history-list/src/workflow-history-list.vue +291 -291
  130. package/packages/workgroup-tree/index.js +6 -6
  131. package/packages/workgroup-tree/src/workgroup-tree.vue +86 -86
  132. package/packages/workgroup-tree-inline/index.js +6 -6
  133. package/packages/workgroup-tree-inline/src/search-result.vue +222 -222
  134. package/packages/workgroup-tree-inline/src/workgroup-tree-inline.vue +516 -516
  135. package/packages/workgroup-tree-inline/src/workgroup-tree-service.js +93 -93
  136. package/packages/workgroup-user-tree/index.js +6 -6
  137. package/packages/workgroup-user-tree/src/workgroup-user-tree.vue +103 -103
  138. package/packages/workgroup-user-tree-inline/index.js +9 -9
  139. package/packages/workgroup-user-tree-inline/src/search-result.vue +266 -266
  140. package/packages/workgroup-user-tree-inline/src/workgroup-tree-inline-service.js +239 -239
  141. package/packages/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue +657 -657
  142. package/packages/year-range-picker/index.js +6 -6
  143. package/packages/year-range-picker/src/year-range-picker.vue +53 -53
  144. package/src/api/sso-service.js +172 -172
  145. package/src/api/tab.js +36 -36
  146. package/src/api/user-service.js +11 -11
  147. package/src/directives/permission/index.js +13 -13
  148. package/src/directives/permission/permission.js +20 -20
  149. package/src/i18n/langs/cn.js +259 -259
  150. package/src/i18n/langs/en.js +269 -269
  151. package/src/index.js +93 -93
  152. package/src/plugins.js +18 -18
  153. package/src/router/index.js +8 -26
  154. package/src/store/getters.js +15 -15
  155. package/src/store/index.js +19 -19
  156. package/src/store/modules/app.js +54 -54
  157. package/src/store/modules/tab-content.js +36 -36
  158. package/src/store/modules/user.js +285 -285
  159. package/src/utils/auth.js +61 -61
  160. package/src/utils/calculator/calculator-factory-wf.js +558 -558
  161. package/src/utils/calculator/calculator-factory.js +145 -145
  162. package/src/utils/calculator/calculator-util.js +166 -166
  163. package/src/utils/eventBus.js +2 -2
  164. package/src/utils/iconUtils.js +28 -28
  165. package/src/utils/index.js +102 -102
  166. package/src/utils/jump-page-utils.js +824 -824
  167. package/src/utils/menu.js +19 -19
  168. package/src/utils/permission.js +31 -31
  169. package/src/utils/permissionAuth.js +96 -96
  170. package/src/utils/range-selector.js +188 -188
  171. package/src/utils/request.js +269 -269
  172. package/src/utils/restful-interface-utils.js +57 -57
  173. package/src/utils/util.js +703 -703
  174. package/src/utils/validate.js +34 -34
  175. package/src/utils/watermark.js +108 -108
  176. package/src/utils/workflow-util.js +93 -93
  177. package/src/views/404.vue +248 -248
  178. package/src/views/dsc-component/Sidebar/Item.vue +84 -84
  179. package/src/views/dsc-component/Sidebar/Link.vue +38 -38
  180. package/src/views/dsc-component/Sidebar/SidebarItem.vue +198 -198
  181. package/src/views/dsc-component/Sidebar/index.vue +229 -229
  182. package/src/views/dsc-component/tabs/tab-content.vue +203 -203
  183. package/src/views/error-page/401.vue +106 -106
  184. package/src/views/error-page/404.vue +248 -248
  185. package/src/views/layout/EmptyLayout.vue +3 -3
  186. package/src/views/layout/Layout.vue +81 -81
  187. package/src/views/layout/NewLayout.vue +18 -18
  188. package/src/views/layout/components/AppMain.vue +39 -39
  189. package/src/views/layout/components/Breadcrumb/index.vue +158 -158
  190. package/src/views/layout/components/Menubar/Item.vue +79 -79
  191. package/src/views/layout/components/Menubar/Link.vue +38 -38
  192. package/src/views/layout/components/Menubar/index.vue +210 -210
  193. package/src/views/layout/components/Sidebar/Item.vue +53 -53
  194. package/src/views/layout/components/Sidebar/Link.vue +38 -38
  195. package/src/views/layout/components/Sidebar/index.vue +141 -141
  196. package/src/views/layout/components/iframe-page.vue +38 -38
  197. package/src/views/layout/components/index.js +4 -4
  198. package/src/views/layout/components/tabs/tab-content.vue +207 -207
  199. package/src/views/layout/mixin/ResizeHandler.js +41 -41
  200. package/src/views/layout/tab-content-iframe-index.vue +38 -38
  201. package/src/views/layout/tab-content-index.vue +93 -93
  202. package/src/views/login/authredirect.vue +10 -10
  203. package/src/views/login/index.vue +296 -296
  204. package/src/views/login/update-password.vue +243 -243
  205. package/src/views/redirect/index.vue +14 -14
  206. package/src/views/wf-history/tache-subprocess-history.vue +45 -45
@@ -1,340 +1,340 @@
1
- <template>
2
- <div>
3
- <el-container style="height: 395px">
4
- <el-header style="text-align: right; font-size: 12px; height: 35px">
5
- <el-autocomplete
6
- v-model="filterText"
7
- size="small"
8
- class="inline-input inline-input-custom"
9
- :fetch-suggestions="querySearch"
10
- :placeholder="$t('departmentTreeInline.pleaseEnterDepartmentName')"
11
- @keyup.enter="clickSearch"
12
- @select="handleSelect"
13
- >
14
- <template v-slot:append>
15
- <el-button :icon="ElIconSearch" @click="clickSearch" />
16
- </template>
17
- </el-autocomplete>
18
- </el-header>
19
- <el-main style="padding: 10px">
20
- <div
21
- v-if="!searchValue"
22
- style="
23
- padding-top: 5px;
24
- overflow: auto;
25
- width: 100%;
26
- display: inline-block !important;
27
- "
28
- >
29
- <el-tree
30
- ref="deparmentTree"
31
- :props="defaultProps"
32
- :load="loadNode"
33
- lazy
34
- :show-checkbox="false"
35
- node-key="id"
36
- check-strictly
37
- :render-content="renderContent"
38
- :filter-node-method="filterNode"
39
- @check-change="handleCheckChange"
40
- @node-expand="handleNodeExpand"
41
- @node-click="handleNodeClick"
42
- />
43
- </div>
44
- <div
45
- v-if="searchValue && searchValue.length > 0"
46
- style="height: 100%; overflow: hidden"
47
- >
48
- <user-result
49
- :grid-data="searchResult"
50
- :height="height"
51
- :multiple="false"
52
- :is-search-result="true"
53
- @selectResult="getSelectUser"
54
- @resultRowDblclick="resultRowDblclick"
55
- />
56
- </div>
57
- </el-main>
58
- </el-container>
59
- </div>
60
- </template>
61
-
62
- <script>
63
- import { Search as ElIconSearch } from '@element-plus/icons-vue'
64
- import { $on, $off, $once, $emit } from '../../utils/gogocodeTransfer'
65
- import localStorage from '../../../src/utils/local-storage'
66
- import utils from '../../utils/utils'
67
- import departmentTreeService from './department-tree-service'
68
- import memoryCacheUtils from '../../utils/memory-cache-utils'
69
- import UserResult from './search-result.vue'
70
- export default {
71
- data() {
72
- return {
73
- filterText: '',
74
- defaultProps: {
75
- id: 'id',
76
- label: 'showName',
77
- children: 'childDepartments',
78
- isLeaf: 'leaf',
79
- },
80
- searchParam: {
81
- searchValue: null,
82
- treeType: 'DEPARTMENT_TREE',
83
- departmentInfo: null,
84
- },
85
- count: 0,
86
- // 当前租户内是否包含分支机构。获得当前选中部门名称时,如果有分支,则需要将分支名称返回给用户,例如:部门1(分支1)
87
- containBranch: false,
88
- // 公司节点的id
89
- tenantNodeId: -1,
90
- // 用于保存所有查询出的节点id
91
- allSearchNodeIds: [],
92
- // 用于保存allSearchNodeIds中所有已加载子节点的id集合
93
- allExpandNodeIds: [],
94
- isClickNode: false,
95
- // 查询的备选值
96
- restaurants: [],
97
- // 查询条件
98
- searchValue: null,
99
- searchStoreKey: 'searchDepartment',
100
- // 单选时,选择的部门信息
101
- selectNodeInfo: null,
102
- // 公司根节点信息
103
- tenantInfo: {},
104
- searchResult: [],
105
- memoryCacheKey: 'DEPARTMENT_MEMORY_KEY',
106
- // 记忆选择数据, 搜索框获得焦点后,下拉显示最近选中的10个人,倒序排列,最后选中的在最上面显示。
107
- memoryCacheData: [],
108
- ElIconSearch,
109
- }
110
- },
111
- name: 'InlineDepartmentSingleTree',
112
- components: {
113
- UserResult,
114
- },
115
- props: {
116
- // 显示指定部门节点及其子节点,不传该属性,表示显示整个组织结构树
117
- departmentInfo: {
118
- type: Array,
119
- default: null,
120
- },
121
- // 弹框的高度
122
- height: {
123
- type: String,
124
- default: '300px',
125
- },
126
- // 多选部门树时,已选择部门id或部门名称或编码集合,多个之间以逗号隔开
127
- selectDepartmentInfo: {
128
- type: [String, Number],
129
- default: null,
130
- },
131
- // 移除部门时,部门属性名称:id、name、code,默认是id
132
- searchField: {
133
- type: String,
134
- default: 'id',
135
- },
136
- // 多选树时结果之间的分隔符,默认是逗号分隔
137
- separator: {
138
- type: String,
139
- default: ',',
140
- },
141
- },
142
- computed: {},
143
- watch: {
144
- filterText(val) {
145
- if (!val) {
146
- this.searchValue = val
147
- // 清空查询内容时,重新加载整个树
148
- if (this.departmentInfo && this.departmentInfo.length > 0) {
149
- // 加载指定部门时,展开公司节点
150
- this.loadPointDepartments()
151
- } else {
152
- // 加载整个组织结构树时,展开公司节点
153
- this.loadDepartment(this.tenantNodeId)
154
- }
155
- }
156
- },
157
- },
158
- mounted() {
159
- var searchDepartment = localStorage.getObject(this.searchStoreKey)
160
- if (searchDepartment) {
161
- this.restaurants = searchDepartment
162
- } else {
163
- this.restaurants = []
164
- }
165
- this.getMemoryCacheData('department')
166
- },
167
- methods: {
168
- ...utils,
169
- ...departmentTreeService,
170
- ...memoryCacheUtils,
171
- filterNode(value, data, node) {
172
- if (!value) {
173
- return true
174
- } else {
175
- return data.name.indexOf(value) !== -1
176
- }
177
- },
178
- // 选中当前节点及其子节点
179
- checkedNodeAndChildren(data) {
180
- // 取消选中状态时,保持节点是展开的状态,不要折叠
181
- // this.$refs.deparmentTree.store.nodesMap[data.id].expanded = true
182
- // 获得所有应该选中的节点
183
- this.$refs.deparmentTree.setChecked(data.id, true)
184
- const childDepartments = data.childDepartments
185
- if (childDepartments) {
186
- // 递归设置子子节点的选中状态
187
- childDepartments.forEach((nodeData) => {
188
- this.checkedNodeAndChildren(nodeData)
189
- })
190
- }
191
- },
192
- // 取消当前节点的子节点的选中状态
193
- cancelChildCheckedNodes(data) {
194
- if (data.id !== this.tenantNodeId) {
195
- // 如果当前节点不是公司节点,需要将公司节点的选中状态去掉
196
- this.$refs.deparmentTree.setChecked(this.tenantNodeId, false)
197
- }
198
- const childDepartments = data.childDepartments
199
- if (childDepartments) {
200
- childDepartments.forEach((nodeData) => {
201
- // 取消节点的选中状态
202
- this.$refs.deparmentTree.setChecked(nodeData.id, false)
203
- // 递归取消子子节点的选中状态
204
- this.cancelChildCheckedNodes(nodeData)
205
- })
206
- }
207
- },
208
- handleCheckChange(data, checked, indeterminate) {},
209
- handleNodeExpand(data, node, nodeTree) {},
210
- handleNodeClick(data, node, nodeTree) {
211
- this.selectSingleNode(data, false)
212
- },
213
- selectSingleNode(data, isClickOkBtn) {
214
- // 表示是部门树节点
215
- if (this.isDepartmentNode(data)) {
216
- // 点击的是部门节点,并且是单选树时,点击部门节点直接关闭弹框
217
- const department = JSON.parse(data.data)
218
- this.packageSelectResult(department)
219
- this.setMemoryCacheData(department, 'department')
220
- // if (this.selectNodeInfo && isClickOkBtn === true) {
221
- // // 点击确定按钮时才需要调result回调事件,关闭弹框
222
- // this.$emit('result', this.selectNodeInfo)
223
- // }
224
- }
225
- },
226
- packageSelectResult(department) {
227
- department.tenantName = this.tenantInfo.tenantName
228
- department.tenantCode = this.tenantInfo.code
229
- var selectNodeInfo = {
230
- id: department.id,
231
- name: department.showName,
232
- code: department.code,
233
- containBranch: this.containBranch,
234
- zhName: department.name,
235
- enName: department.enName,
236
- department: department,
237
- }
238
- this.selectNodeInfo = selectNodeInfo
239
- },
240
- isDepartmentNode(data) {
241
- // 当前节点不是公司节点,也不是分支机构节点,表示是部门节点
242
- return (
243
- data.id !== this.tenantNodeId &&
244
- data.nodeType &&
245
- data.nodeType === 'DEPARTMENT' &&
246
- !data.branch
247
- )
248
- },
249
- selectDepartment() {
250
- // 是否需要显示提示框,默认不显示
251
- var showTip = false
252
- // const data = this.$refs.deparmentTree.getCurrentNode()
253
- if (this.selectNodeInfo) {
254
- // this.selectSingleNode(data, true)
255
- $emit(this, 'result', this.selectNodeInfo)
256
- } else {
257
- showTip = true
258
- }
259
-
260
- if (showTip) {
261
- this.$alert(
262
- this.$t('imatrixUIMessage.pleaseSelectDepartment'),
263
- this.$t('imatrixUIMessage.tips'),
264
- {
265
- confirmButtonText: this.$t('imatrixUIPublicModel.sure'),
266
- }
267
- )
268
- }
269
- },
270
- // 是否选中了公司节点
271
- isSelectTenantNode(dataId) {
272
- return (
273
- dataId === this.tenantNodeId &&
274
- (!this.departmentInfo || this.departmentInfo.length === 0)
275
- )
276
- },
277
- // 给节点添加自定义图标
278
- renderContent(h, { node, data, store }) {
279
- var className
280
- if (node.data.id === -1 || node.data.branch) {
281
- // node.id ===-1表示公司节点,node.branch表示是分支机构节点
282
- className = 'el-icon-menu'
283
- } else if (node.data.id === -2 || node.data.id === -3) {
284
- // node.id ===-2表示集团公司无部门用户节点,node.id ===-3表示是分支机构无部门用户节点
285
- className = 'el-icon-tickets'
286
- } else {
287
- // 表示是部门节点
288
- className = 'el-icon-date'
289
- }
290
- if (
291
- data.nodeType &&
292
- data.nodeType === 'DEPARTMENT' &&
293
- this.searchValue &&
294
- data.name.indexOf(this.searchValue) > -1
295
- ) {
296
- // 如果是查询条件
297
- return (
298
- `<span>
299
- <i class={className}></i>
300
- <span class="searchResult" title={node.label}>
301
- {node.label}
302
- </span>
303
- </span>`
304
- )
305
- }
306
- return (
307
- `<span>
308
- <i class={className}></i>
309
- <span title={node.label}>{node.label}</span>
310
- </span>`
311
- )
312
- },
313
- getSelectUser(selectUser) {
314
- // console.log('getSelectUser==', selectUser)
315
- // this.selectUser = selectUser
316
- // true参数表示是否是勾选单选框,是勾选单选框时不关闭弹框
317
- this.packageSelectResult(selectUser)
318
- // 搜索选中记忆
319
- this.setMemoryCacheData(selectUser, 'department')
320
- },
321
- resultRowDblclick(user) {
322
- this.packageSelectResult(user)
323
- $emit(this, 'result', this.selectNodeInfo)
324
- },
325
- },
326
- emits: ['result'],
327
- }
328
- </script>
329
-
330
- <style>
331
- .searchResult {
332
- color: red;
333
- }
334
- .inline-input-custom {
335
- width: 100% !important;
336
- }
337
- .el-autocomplete-suggestion.el-popper {
338
- min-width: 300px;
339
- }
340
- </style>
1
+ <template>
2
+ <div>
3
+ <el-container style="height: 395px">
4
+ <el-header style="text-align: right; font-size: 12px; height: 35px">
5
+ <el-autocomplete
6
+ v-model="filterText"
7
+ size="small"
8
+ class="inline-input inline-input-custom"
9
+ :fetch-suggestions="querySearch"
10
+ :placeholder="$t('departmentTreeInline.pleaseEnterDepartmentName')"
11
+ @keyup.enter="clickSearch"
12
+ @select="handleSelect"
13
+ >
14
+ <template v-slot:append>
15
+ <el-button :icon="ElIconSearch" @click="clickSearch" />
16
+ </template>
17
+ </el-autocomplete>
18
+ </el-header>
19
+ <el-main style="padding: 10px">
20
+ <div
21
+ v-if="!searchValue"
22
+ style="
23
+ padding-top: 5px;
24
+ overflow: auto;
25
+ width: 100%;
26
+ display: inline-block !important;
27
+ "
28
+ >
29
+ <el-tree
30
+ ref="deparmentTree"
31
+ :props="defaultProps"
32
+ :load="loadNode"
33
+ lazy
34
+ :show-checkbox="false"
35
+ node-key="id"
36
+ check-strictly
37
+ :render-content="renderContent"
38
+ :filter-node-method="filterNode"
39
+ @check-change="handleCheckChange"
40
+ @node-expand="handleNodeExpand"
41
+ @node-click="handleNodeClick"
42
+ />
43
+ </div>
44
+ <div
45
+ v-if="searchValue && searchValue.length > 0"
46
+ style="height: 100%; overflow: hidden"
47
+ >
48
+ <user-result
49
+ :grid-data="searchResult"
50
+ :height="height"
51
+ :multiple="false"
52
+ :is-search-result="true"
53
+ @selectResult="getSelectUser"
54
+ @resultRowDblclick="resultRowDblclick"
55
+ />
56
+ </div>
57
+ </el-main>
58
+ </el-container>
59
+ </div>
60
+ </template>
61
+
62
+ <script>
63
+ import { Search as ElIconSearch } from '@element-plus/icons-vue'
64
+ import { $on, $off, $once, $emit } from '../../utils/gogocodeTransfer'
65
+ import localStorage from '../../../src/utils/local-storage'
66
+ import utils from '../../utils/utils'
67
+ import departmentTreeService from './department-tree-service'
68
+ import memoryCacheUtils from '../../utils/memory-cache-utils'
69
+ import UserResult from './search-result.vue'
70
+ export default {
71
+ data() {
72
+ return {
73
+ filterText: '',
74
+ defaultProps: {
75
+ id: 'id',
76
+ label: 'showName',
77
+ children: 'childDepartments',
78
+ isLeaf: 'leaf',
79
+ },
80
+ searchParam: {
81
+ searchValue: null,
82
+ treeType: 'DEPARTMENT_TREE',
83
+ departmentInfo: null,
84
+ },
85
+ count: 0,
86
+ // 当前租户内是否包含分支机构。获得当前选中部门名称时,如果有分支,则需要将分支名称返回给用户,例如:部门1(分支1)
87
+ containBranch: false,
88
+ // 公司节点的id
89
+ tenantNodeId: -1,
90
+ // 用于保存所有查询出的节点id
91
+ allSearchNodeIds: [],
92
+ // 用于保存allSearchNodeIds中所有已加载子节点的id集合
93
+ allExpandNodeIds: [],
94
+ isClickNode: false,
95
+ // 查询的备选值
96
+ restaurants: [],
97
+ // 查询条件
98
+ searchValue: null,
99
+ searchStoreKey: 'searchDepartment',
100
+ // 单选时,选择的部门信息
101
+ selectNodeInfo: null,
102
+ // 公司根节点信息
103
+ tenantInfo: {},
104
+ searchResult: [],
105
+ memoryCacheKey: 'DEPARTMENT_MEMORY_KEY',
106
+ // 记忆选择数据, 搜索框获得焦点后,下拉显示最近选中的10个人,倒序排列,最后选中的在最上面显示。
107
+ memoryCacheData: [],
108
+ ElIconSearch,
109
+ }
110
+ },
111
+ name: 'InlineDepartmentSingleTree',
112
+ components: {
113
+ UserResult,
114
+ },
115
+ props: {
116
+ // 显示指定部门节点及其子节点,不传该属性,表示显示整个组织结构树
117
+ departmentInfo: {
118
+ type: Array,
119
+ default: null,
120
+ },
121
+ // 弹框的高度
122
+ height: {
123
+ type: String,
124
+ default: '300px',
125
+ },
126
+ // 多选部门树时,已选择部门id或部门名称或编码集合,多个之间以逗号隔开
127
+ selectDepartmentInfo: {
128
+ type: [String, Number],
129
+ default: null,
130
+ },
131
+ // 移除部门时,部门属性名称:id、name、code,默认是id
132
+ searchField: {
133
+ type: String,
134
+ default: 'id',
135
+ },
136
+ // 多选树时结果之间的分隔符,默认是逗号分隔
137
+ separator: {
138
+ type: String,
139
+ default: ',',
140
+ },
141
+ },
142
+ computed: {},
143
+ watch: {
144
+ filterText(val) {
145
+ if (!val) {
146
+ this.searchValue = val
147
+ // 清空查询内容时,重新加载整个树
148
+ if (this.departmentInfo && this.departmentInfo.length > 0) {
149
+ // 加载指定部门时,展开公司节点
150
+ this.loadPointDepartments()
151
+ } else {
152
+ // 加载整个组织结构树时,展开公司节点
153
+ this.loadDepartment(this.tenantNodeId)
154
+ }
155
+ }
156
+ },
157
+ },
158
+ mounted() {
159
+ var searchDepartment = localStorage.getObject(this.searchStoreKey)
160
+ if (searchDepartment) {
161
+ this.restaurants = searchDepartment
162
+ } else {
163
+ this.restaurants = []
164
+ }
165
+ this.getMemoryCacheData('department')
166
+ },
167
+ methods: {
168
+ ...utils,
169
+ ...departmentTreeService,
170
+ ...memoryCacheUtils,
171
+ filterNode(value, data, node) {
172
+ if (!value) {
173
+ return true
174
+ } else {
175
+ return data.name.indexOf(value) !== -1
176
+ }
177
+ },
178
+ // 选中当前节点及其子节点
179
+ checkedNodeAndChildren(data) {
180
+ // 取消选中状态时,保持节点是展开的状态,不要折叠
181
+ // this.$refs.deparmentTree.store.nodesMap[data.id].expanded = true
182
+ // 获得所有应该选中的节点
183
+ this.$refs.deparmentTree.setChecked(data.id, true)
184
+ const childDepartments = data.childDepartments
185
+ if (childDepartments) {
186
+ // 递归设置子子节点的选中状态
187
+ childDepartments.forEach((nodeData) => {
188
+ this.checkedNodeAndChildren(nodeData)
189
+ })
190
+ }
191
+ },
192
+ // 取消当前节点的子节点的选中状态
193
+ cancelChildCheckedNodes(data) {
194
+ if (data.id !== this.tenantNodeId) {
195
+ // 如果当前节点不是公司节点,需要将公司节点的选中状态去掉
196
+ this.$refs.deparmentTree.setChecked(this.tenantNodeId, false)
197
+ }
198
+ const childDepartments = data.childDepartments
199
+ if (childDepartments) {
200
+ childDepartments.forEach((nodeData) => {
201
+ // 取消节点的选中状态
202
+ this.$refs.deparmentTree.setChecked(nodeData.id, false)
203
+ // 递归取消子子节点的选中状态
204
+ this.cancelChildCheckedNodes(nodeData)
205
+ })
206
+ }
207
+ },
208
+ handleCheckChange(data, checked, indeterminate) {},
209
+ handleNodeExpand(data, node, nodeTree) {},
210
+ handleNodeClick(data, node, nodeTree) {
211
+ this.selectSingleNode(data, false)
212
+ },
213
+ selectSingleNode(data, isClickOkBtn) {
214
+ // 表示是部门树节点
215
+ if (this.isDepartmentNode(data)) {
216
+ // 点击的是部门节点,并且是单选树时,点击部门节点直接关闭弹框
217
+ const department = JSON.parse(data.data)
218
+ this.packageSelectResult(department)
219
+ this.setMemoryCacheData(department, 'department')
220
+ // if (this.selectNodeInfo && isClickOkBtn === true) {
221
+ // // 点击确定按钮时才需要调result回调事件,关闭弹框
222
+ // this.$emit('result', this.selectNodeInfo)
223
+ // }
224
+ }
225
+ },
226
+ packageSelectResult(department) {
227
+ department.tenantName = this.tenantInfo.tenantName
228
+ department.tenantCode = this.tenantInfo.code
229
+ var selectNodeInfo = {
230
+ id: department.id,
231
+ name: department.showName,
232
+ code: department.code,
233
+ containBranch: this.containBranch,
234
+ zhName: department.name,
235
+ enName: department.enName,
236
+ department: department,
237
+ }
238
+ this.selectNodeInfo = selectNodeInfo
239
+ },
240
+ isDepartmentNode(data) {
241
+ // 当前节点不是公司节点,也不是分支机构节点,表示是部门节点
242
+ return (
243
+ data.id !== this.tenantNodeId &&
244
+ data.nodeType &&
245
+ data.nodeType === 'DEPARTMENT' &&
246
+ !data.branch
247
+ )
248
+ },
249
+ selectDepartment() {
250
+ // 是否需要显示提示框,默认不显示
251
+ var showTip = false
252
+ // const data = this.$refs.deparmentTree.getCurrentNode()
253
+ if (this.selectNodeInfo) {
254
+ // this.selectSingleNode(data, true)
255
+ $emit(this, 'result', this.selectNodeInfo)
256
+ } else {
257
+ showTip = true
258
+ }
259
+
260
+ if (showTip) {
261
+ this.$alert(
262
+ this.$t('imatrixUIMessage.pleaseSelectDepartment'),
263
+ this.$t('imatrixUIMessage.tips'),
264
+ {
265
+ confirmButtonText: this.$t('imatrixUIPublicModel.sure'),
266
+ }
267
+ )
268
+ }
269
+ },
270
+ // 是否选中了公司节点
271
+ isSelectTenantNode(dataId) {
272
+ return (
273
+ dataId === this.tenantNodeId &&
274
+ (!this.departmentInfo || this.departmentInfo.length === 0)
275
+ )
276
+ },
277
+ // 给节点添加自定义图标
278
+ renderContent(h, { node, data, store }) {
279
+ var className
280
+ if (node.data.id === -1 || node.data.branch) {
281
+ // node.id ===-1表示公司节点,node.branch表示是分支机构节点
282
+ className = 'el-icon-menu'
283
+ } else if (node.data.id === -2 || node.data.id === -3) {
284
+ // node.id ===-2表示集团公司无部门用户节点,node.id ===-3表示是分支机构无部门用户节点
285
+ className = 'el-icon-tickets'
286
+ } else {
287
+ // 表示是部门节点
288
+ className = 'el-icon-date'
289
+ }
290
+ if (
291
+ data.nodeType &&
292
+ data.nodeType === 'DEPARTMENT' &&
293
+ this.searchValue &&
294
+ data.name.indexOf(this.searchValue) > -1
295
+ ) {
296
+ // 如果是查询条件
297
+ return (
298
+ `<span>
299
+ <i class={className}></i>
300
+ <span class="searchResult" title={node.label}>
301
+ {node.label}
302
+ </span>
303
+ </span>`
304
+ )
305
+ }
306
+ return (
307
+ `<span>
308
+ <i class={className}></i>
309
+ <span title={node.label}>{node.label}</span>
310
+ </span>`
311
+ )
312
+ },
313
+ getSelectUser(selectUser) {
314
+ // console.log('getSelectUser==', selectUser)
315
+ // this.selectUser = selectUser
316
+ // true参数表示是否是勾选单选框,是勾选单选框时不关闭弹框
317
+ this.packageSelectResult(selectUser)
318
+ // 搜索选中记忆
319
+ this.setMemoryCacheData(selectUser, 'department')
320
+ },
321
+ resultRowDblclick(user) {
322
+ this.packageSelectResult(user)
323
+ $emit(this, 'result', this.selectNodeInfo)
324
+ },
325
+ },
326
+ emits: ['result'],
327
+ }
328
+ </script>
329
+
330
+ <style>
331
+ .searchResult {
332
+ color: red;
333
+ }
334
+ .inline-input-custom {
335
+ width: 100% !important;
336
+ }
337
+ .el-autocomplete-suggestion.el-popper {
338
+ min-width: 300px;
339
+ }
340
+ </style>