bri-components 1.4.92 → 1.4.93

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 (156) hide show
  1. package/README.md +83 -83
  2. package/lib/styles/bundle.css +12 -12
  3. package/lib/styles/font/fontello.svg +31 -31
  4. package/package.json +125 -125
  5. package/src/components/Error/Error403.vue +42 -42
  6. package/src/components/Error/Error404.vue +40 -40
  7. package/src/components/Error/Error500.vue +51 -51
  8. package/src/components/Error/error.less +162 -162
  9. package/src/components/Error/errorBack.vue +40 -40
  10. package/src/components/controls/DshControlInput.vue +195 -195
  11. package/src/components/controls/base/BriUpload/BriUpload.vue +434 -434
  12. package/src/components/controls/base/BriUpload/BriUploadImage.vue +373 -373
  13. package/src/components/controls/base/BriUpload/uploadList.vue +724 -724
  14. package/src/components/controls/base/BriUpload/uploadMixin.js +446 -440
  15. package/src/components/controls/base/DshCascader/DshCascader.vue +210 -210
  16. package/src/components/controls/base/DshCascader/components/cascaderModal.vue +366 -366
  17. package/src/components/controls/base/DshCascader/components/cascaderPicker.vue +416 -416
  18. package/src/components/controls/base/DshCascader/components/cascaderSimple.vue +143 -143
  19. package/src/components/controls/base/DshCoordinates.vue +577 -577
  20. package/src/components/controls/base/DshDate/DshDate.vue +191 -191
  21. package/src/components/controls/base/DshDate/DshDaterange.vue +186 -186
  22. package/src/components/controls/base/DshDivider.vue +201 -201
  23. package/src/components/controls/base/DshEditor.vue +274 -274
  24. package/src/components/controls/base/DshInput/BriInputs.vue +166 -166
  25. package/src/components/controls/base/DshInput/DshInput.vue +255 -255
  26. package/src/components/controls/base/DshNumber/BriInputNumber/BriInputNumber.vue +435 -435
  27. package/src/components/controls/base/DshNumber/BriInputNumber/mixins/emitter.js +34 -34
  28. package/src/components/controls/base/DshNumber/BriInputNumber/mixins/form.js +14 -14
  29. package/src/components/controls/base/DshNumber/BriInputNumber/utils/assist.js +322 -322
  30. package/src/components/controls/base/DshNumber/DshNumber.vue +143 -143
  31. package/src/components/controls/base/DshNumber/DshNumberange.vue +109 -109
  32. package/src/components/controls/base/DshSelect/DshCheckbox.vue +168 -168
  33. package/src/components/controls/base/DshSelect/DshSelect.vue +180 -180
  34. package/src/components/controls/base/DshSwitch/DshSwitch.vue +115 -115
  35. package/src/components/controls/control.less +324 -324
  36. package/src/components/controls/controlMap.js +114 -114
  37. package/src/components/controls/extra/DshColor.vue +81 -81
  38. package/src/components/controls/extra/themeColor.vue +104 -104
  39. package/src/components/controls/extra/themeIcon.vue +114 -114
  40. package/src/components/controls/mixins/cascaderMixin.js +295 -295
  41. package/src/components/controls/mixins/cascaderPickerMixin.js +216 -216
  42. package/src/components/controls/mixins/cascaderTableMixin.js +130 -130
  43. package/src/components/controls/mixins/controlMixin.js +368 -368
  44. package/src/components/controls/mixins/dateMixin.js +149 -149
  45. package/src/components/controls/mixins/flatTableMixin.js +111 -111
  46. package/src/components/controls/mixins/numberMixin.js +112 -112
  47. package/src/components/controls/mixins/selectMixin.js +233 -233
  48. package/src/components/controls/mixins/switchMixin.js +87 -87
  49. package/src/components/controls/mixins/userAndDepartMixin.js +218 -218
  50. package/src/components/controls/senior/DshLabels.vue +331 -331
  51. package/src/components/controls/senior/DshPackage.vue +57 -57
  52. package/src/components/controls/senior/cascaderTable.vue +210 -210
  53. package/src/components/controls/senior/flatTable.vue +135 -135
  54. package/src/components/controls/senior/selectDepartments.vue +438 -438
  55. package/src/components/controls/senior/selectUsers/departMenu.vue +293 -293
  56. package/src/components/controls/senior/selectUsers/selectUsers.vue +752 -752
  57. package/src/components/controls/special/DshBack.vue +42 -42
  58. package/src/components/controls/special/DshUndeveloped.vue +41 -41
  59. package/src/components/form/DshAdvSearch.vue +510 -510
  60. package/src/components/form/DshDefaultSearch.vue +258 -258
  61. package/src/components/form/DshForm.vue +494 -494
  62. package/src/components/form/searchMixin.js +375 -375
  63. package/src/components/list/BriCard.vue +95 -95
  64. package/src/components/list/BriTable.vue +205 -205
  65. package/src/components/list/BriTree.vue +529 -529
  66. package/src/components/list/BriTreeItem.vue +163 -163
  67. package/src/components/list/DshBox/DshBox.vue +219 -219
  68. package/src/components/list/DshBox/DshCard.vue +446 -446
  69. package/src/components/list/DshBox/DshCrossTable.vue +827 -827
  70. package/src/components/list/DshBox/DshList.vue +404 -404
  71. package/src/components/list/DshBox/DshPanel.vue +669 -669
  72. package/src/components/list/DshBox/DshSingleData.vue +119 -119
  73. package/src/components/list/DshBox/DshTable.vue +239 -239
  74. package/src/components/list/DshCascaderTable.vue +115 -115
  75. package/src/components/list/DshFlatTable.vue +339 -339
  76. package/src/components/list/DshPage.vue +194 -194
  77. package/src/components/list/DshTreeTable.vue +113 -113
  78. package/src/components/list/common/importModal.vue +243 -243
  79. package/src/components/list/common/quoteListModal.vue +206 -206
  80. package/src/components/list/mixins/DshCascaderTableMixin.js +278 -278
  81. package/src/components/list/mixins/DshFlatTableMixin.js +493 -493
  82. package/src/components/list/mixins/DshTreeTableMixin.js +286 -286
  83. package/src/components/list/mixins/tableBaseMixin.js +1661 -1662
  84. package/src/components/list/mixins/treeTableBaseMixin.js +149 -149
  85. package/src/components/other/BriAvatar.vue +166 -166
  86. package/src/components/other/BriCode.vue +125 -125
  87. package/src/components/other/BriCollapseTree.vue +207 -207
  88. package/src/components/other/BriGantt.vue +1084 -1084
  89. package/src/components/other/BriIframe.vue +116 -116
  90. package/src/components/other/BriLoading.vue +171 -171
  91. package/src/components/other/BriSvg.vue +28 -28
  92. package/src/components/other/DshColorPanel.vue +128 -128
  93. package/src/components/other/DshMenuNav.vue +188 -188
  94. package/src/components/small/BriButton.vue +71 -71
  95. package/src/components/small/BriDrawer.vue +169 -169
  96. package/src/components/small/BriTooltip.vue +87 -87
  97. package/src/components/small/DshBtnModal.vue +68 -68
  98. package/src/components/small/DshButtons.vue +324 -324
  99. package/src/components/small/DshDropdown.vue +225 -225
  100. package/src/components/small/DshIcons.vue +59 -59
  101. package/src/components/small/DshListRender.js +21 -21
  102. package/src/components/small/DshModal.vue +160 -160
  103. package/src/components/small/DshSteps.vue +141 -141
  104. package/src/components/small/DshTabs.vue +598 -598
  105. package/src/components/small/DshTabsSet.vue +309 -309
  106. package/src/components/small/DshTags.vue +251 -251
  107. package/src/components/small/DshTitle.vue +50 -50
  108. package/src/components/small/render.js +20 -20
  109. package/src/components/unit/DshFormUnit.vue +398 -398
  110. package/src/components/unit/DshListUnit.vue +115 -115
  111. package/src/components/unit/unitMixin.js +86 -86
  112. package/src/data/index.js +9 -9
  113. package/src/index.js +271 -271
  114. package/src/styles/bundle.css +12 -12
  115. package/src/styles/components/BriButton.less +292 -292
  116. package/src/styles/components/BriTable.less +344 -344
  117. package/src/styles/components/DshModal.less +250 -250
  118. package/src/styles/components/index.less +3 -3
  119. package/src/styles/global/animate.less +11 -11
  120. package/src/styles/global/base.less +45 -45
  121. package/src/styles/global/box.less +186 -186
  122. package/src/styles/global/control.less +122 -122
  123. package/src/styles/global/flex.less +282 -282
  124. package/src/styles/global/global.less +8 -8
  125. package/src/styles/global/text.less +59 -59
  126. package/src/styles/global/variables.less +85 -85
  127. package/src/styles/iconfont/iconfont.css +254 -254
  128. package/src/styles/iconfont/iconfont.json +422 -422
  129. package/src/styles/iconfont/iconfont.svg +137 -137
  130. package/src/styles/index.less +11 -11
  131. package/src/styles/reset-easytable.less +21 -21
  132. package/src/styles/reset-iview-controls.less +145 -145
  133. package/src/styles/reset-iview-other.less +49 -49
  134. package/src/styles/reset-iview-variables.less +34 -34
  135. package/src/styles/reset.less +45 -45
  136. package/src/utils/index.js +5 -5
  137. package/src/utils/table.js +175 -175
  138. package/lib/0.bri-components.min.js +0 -1
  139. package/lib/1.bri-components.min.js +0 -1
  140. package/lib/10.bri-components.min.js +0 -1
  141. package/lib/11.bri-components.min.js +0 -1
  142. package/lib/2.bri-components.min.js +0 -1
  143. package/lib/3.bri-components.min.js +0 -1
  144. package/lib/4.bri-components.min.js +0 -1
  145. package/lib/5.bri-components.min.js +0 -1
  146. package/lib/6.bri-components.min.js +0 -1
  147. package/lib/7.bri-components.min.js +0 -1
  148. package/lib/8.bri-components.min.js +0 -1
  149. package/lib/9.bri-components.min.js +0 -1
  150. package/lib/bri-components.min.js +0 -18
  151. package/src/.DS_Store +0 -0
  152. package/src/components/.DS_Store +0 -0
  153. package/src/components/controls/.DS_Store +0 -0
  154. package/src/components/controls/senior/.DS_Store +0 -0
  155. package/src/styles/.DS_Store +0 -0
  156. package/src/styles/components/.DS_Store +0 -0
@@ -1,438 +1,438 @@
1
- <template>
2
- <!-- 编辑 -->
3
- <div
4
- v-if="canEdit"
5
- class="selectDepartments"
6
- >
7
- <bri-tooltip
8
- :content="showVal"
9
- :transfer="true"
10
- >
11
- <div @click="clickInput">
12
- <slot>
13
- <!-- 编辑 -->
14
- <dsh-control-input
15
- v-if="canEdit"
16
- :class="commonClass"
17
- :value="curValShowList"
18
- :disabled="disabled"
19
- :heightAuto="isHeightAuto"
20
- :propsObj="selfPropsObj"
21
- @clickItem="clickItem"
22
- @deleteItem="clickDeleteItem"
23
- @clear="clickClear"
24
- ></dsh-control-input>
25
- </slot>
26
- </div>
27
- </bri-tooltip>
28
-
29
- <!-- 点击选中项后的自定义内容 -->
30
- <dsh-render :render="itemTipRender"></dsh-render>
31
-
32
- <!-- 搜索选择框 -->
33
- <dsh-modal
34
- v-if="modalInited"
35
- class="selectDepartments-modal bri-modal-center"
36
- mode="custom"
37
- v-model="showModal"
38
- :propsObj="modalPropsObj"
39
- @cancel="clickCancel"
40
- >
41
- <div
42
- v-if="showModalContent"
43
- class="selectDepartments-modal-wrap"
44
- >
45
- <!-- 上 已选择项 -->
46
- <div class="list">
47
- <span class="list-label">
48
- 已选择{{ multipleMode ? `(${tmpValList.length}个)` : "" }}:
49
- </span>
50
-
51
- <span
52
- v-for="(selectItem, selectIndex) in tmpValList"
53
- :key="selectIndex"
54
- class="list-item"
55
- >
56
- <span class="list-item-name">
57
- {{ getShowName(selectItem) }}
58
- </span>
59
-
60
- <Icon
61
- class="list-item-delete"
62
- type="ios-close-circle"
63
- @click="clickDeleteTmpItem(selectItem, selectIndex, tmpValList)"
64
- />
65
- </span>
66
- </div>
67
-
68
- <!-- 上 搜索框 -->
69
- <div class="search">
70
- <dsh-input
71
- :value="searchData"
72
- :propsObj="inputPropsObj"
73
- @inputChange="search"
74
- ></dsh-input>
75
- </div>
76
-
77
- <!-- 中 列表 -->
78
- <div class="center">
79
- <bri-loading v-if="loading" />
80
- <template v-else>
81
- <div
82
- v-if="departShowList.length"
83
- class="center-tree"
84
- >
85
- <bri-tree-item
86
- v-for="item in departShowList"
87
- :key="item._key"
88
- :value="item"
89
- :multiple="multipleMode"
90
- :changeOnSelect="changeOnSelect"
91
- @on-change="changeSelect"
92
- ></bri-tree-item>
93
- </div>
94
-
95
- <div
96
- v-else
97
- class="center-tree-nodata"
98
- >
99
- 暂无数据…
100
- </div>
101
- </template>
102
- </div>
103
-
104
- <!-- 底部 按钮 -->
105
- <dsh-buttons
106
- class="footer"
107
- :list="$getOperationList(['canCancel', 'canConfirm'])"
108
- @click="$dispatchEvent($event)"
109
- ></dsh-buttons>
110
- </div>
111
- </dsh-modal>
112
- </div>
113
-
114
- <!-- 查看 -->
115
- <div
116
- v-else
117
- class="selectDepartments-show"
118
- >
119
- <!-- 有值 -->
120
- <template v-if="!$isEmptyData(curValShowList)">
121
- <!-- 高度自由时 -->
122
- <dsh-tags
123
- v-if="isHeightAuto"
124
- :class="{
125
- ...commonClass,
126
- 'selectDepartments-show-auto': true
127
- }"
128
- itemClass="selectDepartments-show-auto-tag"
129
- :list="curValShowList"
130
- ></dsh-tags>
131
-
132
- <!-- 高度不自由(不换行) -->
133
- <bri-tooltip
134
- v-else
135
- :content="showVal"
136
- :transfer="true"
137
- >
138
- <dsh-tags
139
- :class="{
140
- ...commonClass,
141
- 'selectDepartments-show-ellipsis': true
142
- }"
143
- itemClass="selectDepartments-show-ellipsis-tag"
144
- :list="curValShowList"
145
- ></dsh-tags>
146
- </bri-tooltip>
147
- </template>
148
-
149
- <!-- 无值 -->
150
- <div
151
- v-else
152
- :class="commonClass"
153
- >
154
- {{ emptyShowVal }}
155
- </div>
156
- </div>
157
- </template>
158
-
159
- <script>
160
- import userAndDepartMixin from "../mixins/userAndDepartMixin.js";
161
- import BriTreeItem from "../../list/BriTreeItem.vue";
162
- import BriCard from "../../list/BriCard.vue";
163
-
164
- export default {
165
- name: "selectDepartments",
166
- mixins: [
167
- userAndDepartMixin
168
- ],
169
- components: {
170
- BriTreeItem,
171
- BriCard
172
- },
173
- props: {},
174
- data () {
175
- return {
176
- modalPropsObj: {
177
- title: "选择部门",
178
- width: 600,
179
- showSlotClose: false,
180
- closable: true
181
- },
182
- inputPropsObj: {
183
- _name: "部门名称",
184
- _key: "name",
185
- _search: true,
186
- _clearable: false
187
- },
188
- highList: [
189
- {
190
- _key: "dyn_department",
191
- name: "当前部门"
192
- }
193
- ]
194
- };
195
- },
196
- computed: {
197
- selfBasePropsObj () {
198
- return {
199
- _icon: this.propsObj._multiple === true ? "ios-people" : "ios-person",
200
- _changeOnSelect: true,
201
- _useFullName: false, // 使用全名
202
- _expandLevel: 2 // 列表打开,默认展开到第几级
203
- };
204
- },
205
-
206
- changeOnSelect () {
207
- return this.selfPropsObj._changeOnSelect;
208
- },
209
- useFullName () {
210
- return this.selfPropsObj._useFullName;
211
- },
212
- expandLevel () {
213
- return this.selfPropsObj._expandLevel;
214
- },
215
-
216
- departShowList () {
217
- const loop = (arr = [], filterVals = [], cascaderVals = [], reverseFilter = false) => {
218
- arr = cascaderVals.length
219
- ? arr.filter(item => {
220
- return reverseFilter
221
- ? !cascaderVals.some(cascaderItem =>
222
- item.code && cascaderItem.code
223
- ? item.code.length < cascaderItem.code.length
224
- ? false
225
- : item.code.startsWith(cascaderItem.code)
226
- : false
227
- )
228
- : cascaderVals.some(cascaderItem =>
229
- item.code && cascaderItem.code
230
- ? item.code.length < cascaderItem.code.length
231
- ? cascaderItem.code.startsWith(item.code)
232
- : item.code.startsWith(cascaderItem.code)
233
- : false
234
- );
235
- })
236
- : filterVals.length
237
- ? arr.filter(item =>
238
- reverseFilter
239
- ? !filterVals.includes(item._key)
240
- : filterVals.includes(item._key)
241
- )
242
- : arr;
243
-
244
- return arr.reduce((newArr, item) => {
245
- if (item.children && item.children.length) {
246
- item.children = loop(item.children, [], cascaderVals, reverseFilter);
247
- }
248
-
249
- return [
250
- ...newArr,
251
- item
252
- ];
253
- }, []);
254
- };
255
-
256
- const departList = [
257
- ...(this.highSearch ? this.highList : []),
258
- ...loop(this.departList, this.filterVals, this.cascaderVals, this.reverseFilter)
259
- ];
260
-
261
- return this.transformDepartList(departList, this.tmpValKeys);
262
- },
263
-
264
- curValShowList () {
265
- return this.curValList.map(itemObj => {
266
- return {
267
- ...itemObj,
268
- full_name: this.useFullName ? this.getFullName(itemObj) : undefined
269
- };
270
- });
271
- }
272
- },
273
- created () {},
274
- methods: {
275
- /* ----------- 接口方法和加工方法 --------- */
276
- // 获取显示名
277
- getShowName (itemObj) {
278
- return this.useFullName
279
- ? this.getFullName(itemObj)
280
- : itemObj.name;
281
- },
282
- getFullName (itemObj) {
283
- return itemObj.full_name || this.$getTreeLinealDatasByNode(itemObj, this.departShowList, "_key").map(levelObj => levelObj.name).join("/") || itemObj.name;
284
- },
285
-
286
- getData () {
287
- this.getListData();
288
- },
289
- // 接口 -获取部门列表数据
290
- getListData () {
291
- this.loading = true;
292
-
293
- this.$https({
294
- url: {
295
- module: "company",
296
- name: "compDepartCascaderAll"
297
- },
298
- params: {
299
- search: this.searchData.name
300
- ? {
301
- name: {
302
- $regex: `.*${this.$speciaWord(this.searchData.name)}.*`,
303
- $options: "i"
304
- }
305
- }
306
- : undefined,
307
- searchString: this.searchString,
308
- nameSearchFlag: !this.changeOnSelect // 以整个链的数据返回匹配到的部门
309
- },
310
- loadingName: "loading",
311
- callback: data => {
312
- this.loadinged = true;
313
-
314
- this.departList = data.list;
315
- }
316
- });
317
- }
318
- }
319
- };
320
- </script>
321
-
322
- <style lang="less">
323
- @import url("../control.less");
324
-
325
- .selectDepartments {
326
- #control-show();
327
-
328
- &-show {
329
- &-auto,
330
- &-ellipsis {
331
- margin: 2px 0px;
332
- }
333
- }
334
-
335
- // 提示框的
336
- &-tip {
337
- &-modal {
338
- .wrap {
339
- width: 100%;
340
- height: 100%;
341
- display: flex;
342
- flex-direction: column;
343
-
344
- &-content {
345
- flex: 1;
346
- min-height: 0px;
347
- padding: 0px 12px;
348
- overflow: auto;
349
- }
350
-
351
- &-btns {
352
- margin: 10px;
353
- text-align: right;
354
-
355
- .ivu-btn {
356
- font-size: 16px;
357
- font-family: Microsoft YaHei-Semibold, Microsoft YaHei;
358
- font-weight: 600;
359
- border-radius: 4px;
360
- }
361
- }
362
- }
363
- }
364
- }
365
-
366
- &-modal {
367
- .ivu-modal {
368
- width: 30%!important;
369
- min-width: 600px!important;
370
- height: 70%;
371
- min-height: 600px;
372
- }
373
-
374
- &-wrap {
375
- width: 100%;
376
- height: 100%;
377
- .dsh-flex-col-start-stretch();
378
-
379
- .list {
380
- display: flex;
381
- flex-wrap: wrap;
382
- align-items: center;
383
-
384
- &-label {}
385
-
386
- &-item {
387
- height: auto;
388
- padding: 2px 6px 2px 10px;
389
- margin: 3px 5px;
390
- border-radius: 14px;
391
- background-color: @themeColor;
392
- color: #ffffff;
393
- display: flex;
394
- align-items: center;
395
-
396
- &-name {
397
- padding: 2px 0px;
398
- line-height: 16px;
399
- font-size: 12px;
400
- // .dsh-ellipsis();
401
- }
402
-
403
- &-delete {
404
- padding: 2px;
405
- margin-left: 5px;
406
- line-height: 16px;
407
- font-size: 14px;
408
- cursor: pointer;
409
- }
410
- }
411
- }
412
-
413
- .search {
414
- padding: 8px 0px 10px;
415
- }
416
-
417
- .center {
418
- flex: 1;
419
- min-height: 100px;
420
- padding: 5px 0 10px;
421
- overflow: auto;
422
-
423
- &-tree {
424
- &-nodata {
425
- #dsh-nodata();
426
- }
427
- }
428
- }
429
-
430
- .footer {
431
- padding-top: 12px;
432
- border-top: 1px solid @borderColor;
433
- text-align: right;
434
- }
435
- }
436
- }
437
- }
438
- </style>
1
+ <template>
2
+ <!-- 编辑 -->
3
+ <div
4
+ v-if="canEdit"
5
+ class="selectDepartments"
6
+ >
7
+ <bri-tooltip
8
+ :content="showVal"
9
+ :transfer="true"
10
+ >
11
+ <div @click="clickInput">
12
+ <slot>
13
+ <!-- 编辑 -->
14
+ <dsh-control-input
15
+ v-if="canEdit"
16
+ :class="commonClass"
17
+ :value="curValShowList"
18
+ :disabled="disabled"
19
+ :heightAuto="isHeightAuto"
20
+ :propsObj="selfPropsObj"
21
+ @clickItem="clickItem"
22
+ @deleteItem="clickDeleteItem"
23
+ @clear="clickClear"
24
+ ></dsh-control-input>
25
+ </slot>
26
+ </div>
27
+ </bri-tooltip>
28
+
29
+ <!-- 点击选中项后的自定义内容 -->
30
+ <dsh-render :render="itemTipRender"></dsh-render>
31
+
32
+ <!-- 搜索选择框 -->
33
+ <dsh-modal
34
+ v-if="modalInited"
35
+ class="selectDepartments-modal bri-modal-center"
36
+ mode="custom"
37
+ v-model="showModal"
38
+ :propsObj="modalPropsObj"
39
+ @cancel="clickCancel"
40
+ >
41
+ <div
42
+ v-if="showModalContent"
43
+ class="selectDepartments-modal-wrap"
44
+ >
45
+ <!-- 上 已选择项 -->
46
+ <div class="list">
47
+ <span class="list-label">
48
+ 已选择{{ multipleMode ? `(${tmpValList.length}个)` : "" }}:
49
+ </span>
50
+
51
+ <span
52
+ v-for="(selectItem, selectIndex) in tmpValList"
53
+ :key="selectIndex"
54
+ class="list-item"
55
+ >
56
+ <span class="list-item-name">
57
+ {{ getShowName(selectItem) }}
58
+ </span>
59
+
60
+ <Icon
61
+ class="list-item-delete"
62
+ type="ios-close-circle"
63
+ @click="clickDeleteTmpItem(selectItem, selectIndex, tmpValList)"
64
+ />
65
+ </span>
66
+ </div>
67
+
68
+ <!-- 上 搜索框 -->
69
+ <div class="search">
70
+ <dsh-input
71
+ :value="searchData"
72
+ :propsObj="inputPropsObj"
73
+ @inputChange="search"
74
+ ></dsh-input>
75
+ </div>
76
+
77
+ <!-- 中 列表 -->
78
+ <div class="center">
79
+ <bri-loading v-if="loading" />
80
+ <template v-else>
81
+ <div
82
+ v-if="departShowList.length"
83
+ class="center-tree"
84
+ >
85
+ <bri-tree-item
86
+ v-for="item in departShowList"
87
+ :key="item._key"
88
+ :value="item"
89
+ :multiple="multipleMode"
90
+ :changeOnSelect="changeOnSelect"
91
+ @on-change="changeSelect"
92
+ ></bri-tree-item>
93
+ </div>
94
+
95
+ <div
96
+ v-else
97
+ class="center-tree-nodata"
98
+ >
99
+ 暂无数据…
100
+ </div>
101
+ </template>
102
+ </div>
103
+
104
+ <!-- 底部 按钮 -->
105
+ <dsh-buttons
106
+ class="footer"
107
+ :list="$getOperationList(['canCancel', 'canConfirm'])"
108
+ @click="$dispatchEvent($event)"
109
+ ></dsh-buttons>
110
+ </div>
111
+ </dsh-modal>
112
+ </div>
113
+
114
+ <!-- 查看 -->
115
+ <div
116
+ v-else
117
+ class="selectDepartments-show"
118
+ >
119
+ <!-- 有值 -->
120
+ <template v-if="!$isEmptyData(curValShowList)">
121
+ <!-- 高度自由时 -->
122
+ <dsh-tags
123
+ v-if="isHeightAuto"
124
+ :class="{
125
+ ...commonClass,
126
+ 'selectDepartments-show-auto': true
127
+ }"
128
+ itemClass="selectDepartments-show-auto-tag"
129
+ :list="curValShowList"
130
+ ></dsh-tags>
131
+
132
+ <!-- 高度不自由(不换行) -->
133
+ <bri-tooltip
134
+ v-else
135
+ :content="showVal"
136
+ :transfer="true"
137
+ >
138
+ <dsh-tags
139
+ :class="{
140
+ ...commonClass,
141
+ 'selectDepartments-show-ellipsis': true
142
+ }"
143
+ itemClass="selectDepartments-show-ellipsis-tag"
144
+ :list="curValShowList"
145
+ ></dsh-tags>
146
+ </bri-tooltip>
147
+ </template>
148
+
149
+ <!-- 无值 -->
150
+ <div
151
+ v-else
152
+ :class="commonClass"
153
+ >
154
+ {{ emptyShowVal }}
155
+ </div>
156
+ </div>
157
+ </template>
158
+
159
+ <script>
160
+ import userAndDepartMixin from "../mixins/userAndDepartMixin.js";
161
+ import BriTreeItem from "../../list/BriTreeItem.vue";
162
+ import BriCard from "../../list/BriCard.vue";
163
+
164
+ export default {
165
+ name: "selectDepartments",
166
+ mixins: [
167
+ userAndDepartMixin
168
+ ],
169
+ components: {
170
+ BriTreeItem,
171
+ BriCard
172
+ },
173
+ props: {},
174
+ data () {
175
+ return {
176
+ modalPropsObj: {
177
+ title: "选择部门",
178
+ width: 600,
179
+ showSlotClose: false,
180
+ closable: true
181
+ },
182
+ inputPropsObj: {
183
+ _name: "部门名称",
184
+ _key: "name",
185
+ _search: true,
186
+ _clearable: false
187
+ },
188
+ highList: [
189
+ {
190
+ _key: "dyn_department",
191
+ name: "当前部门"
192
+ }
193
+ ]
194
+ };
195
+ },
196
+ computed: {
197
+ selfBasePropsObj () {
198
+ return {
199
+ _icon: this.propsObj._multiple === true ? "ios-people" : "ios-person",
200
+ _changeOnSelect: true,
201
+ _useFullName: false, // 使用全名
202
+ _expandLevel: 2 // 列表打开,默认展开到第几级
203
+ };
204
+ },
205
+
206
+ changeOnSelect () {
207
+ return this.selfPropsObj._changeOnSelect;
208
+ },
209
+ useFullName () {
210
+ return this.selfPropsObj._useFullName;
211
+ },
212
+ expandLevel () {
213
+ return this.selfPropsObj._expandLevel;
214
+ },
215
+
216
+ departShowList () {
217
+ const loop = (arr = [], filterVals = [], cascaderVals = [], reverseFilter = false) => {
218
+ arr = cascaderVals.length
219
+ ? arr.filter(item => {
220
+ return reverseFilter
221
+ ? !cascaderVals.some(cascaderItem =>
222
+ item.code && cascaderItem.code
223
+ ? item.code.length < cascaderItem.code.length
224
+ ? false
225
+ : item.code.startsWith(cascaderItem.code)
226
+ : false
227
+ )
228
+ : cascaderVals.some(cascaderItem =>
229
+ item.code && cascaderItem.code
230
+ ? item.code.length < cascaderItem.code.length
231
+ ? cascaderItem.code.startsWith(item.code)
232
+ : item.code.startsWith(cascaderItem.code)
233
+ : false
234
+ );
235
+ })
236
+ : filterVals.length
237
+ ? arr.filter(item =>
238
+ reverseFilter
239
+ ? !filterVals.includes(item._key)
240
+ : filterVals.includes(item._key)
241
+ )
242
+ : arr;
243
+
244
+ return arr.reduce((newArr, item) => {
245
+ if (item.children && item.children.length) {
246
+ item.children = loop(item.children, [], cascaderVals, reverseFilter);
247
+ }
248
+
249
+ return [
250
+ ...newArr,
251
+ item
252
+ ];
253
+ }, []);
254
+ };
255
+
256
+ const departList = [
257
+ ...(this.highSearch ? this.highList : []),
258
+ ...loop(this.departList, this.filterVals, this.cascaderVals, this.reverseFilter)
259
+ ];
260
+
261
+ return this.transformDepartList(departList, this.tmpValKeys);
262
+ },
263
+
264
+ curValShowList () {
265
+ return this.curValList.map(itemObj => {
266
+ return {
267
+ ...itemObj,
268
+ full_name: this.useFullName ? this.getFullName(itemObj) : undefined
269
+ };
270
+ });
271
+ }
272
+ },
273
+ created () {},
274
+ methods: {
275
+ /* ----------- 接口方法和加工方法 --------- */
276
+ // 获取显示名
277
+ getShowName (itemObj) {
278
+ return this.useFullName
279
+ ? this.getFullName(itemObj)
280
+ : itemObj.name;
281
+ },
282
+ getFullName (itemObj) {
283
+ return itemObj.full_name || this.$getTreeLinealDatasByNode(itemObj, this.departShowList, "_key").map(levelObj => levelObj.name).join("/") || itemObj.name;
284
+ },
285
+
286
+ getData () {
287
+ this.getListData();
288
+ },
289
+ // 接口 -获取部门列表数据
290
+ getListData () {
291
+ this.loading = true;
292
+
293
+ this.$https({
294
+ url: {
295
+ module: "company",
296
+ name: "compDepartCascaderAll"
297
+ },
298
+ params: {
299
+ search: this.searchData.name
300
+ ? {
301
+ name: {
302
+ $regex: `.*${this.$speciaWord(this.searchData.name)}.*`,
303
+ $options: "i"
304
+ }
305
+ }
306
+ : undefined,
307
+ searchString: this.searchString,
308
+ nameSearchFlag: !this.changeOnSelect // 以整个链的数据返回匹配到的部门
309
+ },
310
+ loadingName: "loading",
311
+ callback: data => {
312
+ this.loadinged = true;
313
+
314
+ this.departList = data.list;
315
+ }
316
+ });
317
+ }
318
+ }
319
+ };
320
+ </script>
321
+
322
+ <style lang="less">
323
+ @import url("../control.less");
324
+
325
+ .selectDepartments {
326
+ #control-show();
327
+
328
+ &-show {
329
+ &-auto,
330
+ &-ellipsis {
331
+ margin: 2px 0px;
332
+ }
333
+ }
334
+
335
+ // 提示框的
336
+ &-tip {
337
+ &-modal {
338
+ .wrap {
339
+ width: 100%;
340
+ height: 100%;
341
+ display: flex;
342
+ flex-direction: column;
343
+
344
+ &-content {
345
+ flex: 1;
346
+ min-height: 0px;
347
+ padding: 0px 12px;
348
+ overflow: auto;
349
+ }
350
+
351
+ &-btns {
352
+ margin: 10px;
353
+ text-align: right;
354
+
355
+ .ivu-btn {
356
+ font-size: 16px;
357
+ font-family: Microsoft YaHei-Semibold, Microsoft YaHei;
358
+ font-weight: 600;
359
+ border-radius: 4px;
360
+ }
361
+ }
362
+ }
363
+ }
364
+ }
365
+
366
+ &-modal {
367
+ .ivu-modal {
368
+ width: 30%!important;
369
+ min-width: 600px!important;
370
+ height: 70%;
371
+ min-height: 600px;
372
+ }
373
+
374
+ &-wrap {
375
+ width: 100%;
376
+ height: 100%;
377
+ .dsh-flex-col-start-stretch();
378
+
379
+ .list {
380
+ display: flex;
381
+ flex-wrap: wrap;
382
+ align-items: center;
383
+
384
+ &-label {}
385
+
386
+ &-item {
387
+ height: auto;
388
+ padding: 2px 6px 2px 10px;
389
+ margin: 3px 5px;
390
+ border-radius: 14px;
391
+ background-color: @themeColor;
392
+ color: #ffffff;
393
+ display: flex;
394
+ align-items: center;
395
+
396
+ &-name {
397
+ padding: 2px 0px;
398
+ line-height: 16px;
399
+ font-size: 12px;
400
+ // .dsh-ellipsis();
401
+ }
402
+
403
+ &-delete {
404
+ padding: 2px;
405
+ margin-left: 5px;
406
+ line-height: 16px;
407
+ font-size: 14px;
408
+ cursor: pointer;
409
+ }
410
+ }
411
+ }
412
+
413
+ .search {
414
+ padding: 8px 0px 10px;
415
+ }
416
+
417
+ .center {
418
+ flex: 1;
419
+ min-height: 100px;
420
+ padding: 5px 0 10px;
421
+ overflow: auto;
422
+
423
+ &-tree {
424
+ &-nodata {
425
+ #dsh-nodata();
426
+ }
427
+ }
428
+ }
429
+
430
+ .footer {
431
+ padding-top: 12px;
432
+ border-top: 1px solid @borderColor;
433
+ text-align: right;
434
+ }
435
+ }
436
+ }
437
+ }
438
+ </style>