bri-components 1.4.93 → 1.4.95

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/0.bri-components.min.js +1 -0
  3. package/lib/1.bri-components.min.js +1 -0
  4. package/lib/10.bri-components.min.js +1 -0
  5. package/lib/11.bri-components.min.js +1 -0
  6. package/lib/2.bri-components.min.js +1 -0
  7. package/lib/3.bri-components.min.js +1 -0
  8. package/lib/4.bri-components.min.js +1 -0
  9. package/lib/5.bri-components.min.js +1 -0
  10. package/lib/6.bri-components.min.js +1 -0
  11. package/lib/7.bri-components.min.js +1 -0
  12. package/lib/8.bri-components.min.js +1 -0
  13. package/lib/9.bri-components.min.js +1 -0
  14. package/lib/bri-components.min.js +18 -0
  15. package/lib/styles/bundle.css +12 -12
  16. package/lib/styles/font/fontello.svg +31 -31
  17. package/package.json +125 -125
  18. package/src/.DS_Store +0 -0
  19. package/src/components/.DS_Store +0 -0
  20. package/src/components/Error/Error403.vue +42 -42
  21. package/src/components/Error/Error404.vue +40 -40
  22. package/src/components/Error/Error500.vue +51 -51
  23. package/src/components/Error/error.less +162 -162
  24. package/src/components/Error/errorBack.vue +40 -40
  25. package/src/components/controls/.DS_Store +0 -0
  26. package/src/components/controls/DshControlInput.vue +195 -195
  27. package/src/components/controls/base/BriUpload/BriUpload.vue +434 -434
  28. package/src/components/controls/base/BriUpload/BriUploadImage.vue +373 -373
  29. package/src/components/controls/base/BriUpload/uploadList.vue +724 -724
  30. package/src/components/controls/base/BriUpload/uploadMixin.js +446 -446
  31. package/src/components/controls/base/DshCascader/DshCascader.vue +210 -210
  32. package/src/components/controls/base/DshCascader/components/cascaderModal.vue +366 -366
  33. package/src/components/controls/base/DshCascader/components/cascaderPicker.vue +416 -416
  34. package/src/components/controls/base/DshCascader/components/cascaderSimple.vue +143 -143
  35. package/src/components/controls/base/DshCoordinates.vue +577 -577
  36. package/src/components/controls/base/DshDate/DshDate.vue +191 -191
  37. package/src/components/controls/base/DshDate/DshDaterange.vue +186 -186
  38. package/src/components/controls/base/DshDivider.vue +201 -201
  39. package/src/components/controls/base/DshEditor.vue +274 -274
  40. package/src/components/controls/base/DshInput/BriInputs.vue +166 -166
  41. package/src/components/controls/base/DshInput/DshInput.vue +255 -255
  42. package/src/components/controls/base/DshNumber/BriInputNumber/BriInputNumber.vue +435 -435
  43. package/src/components/controls/base/DshNumber/BriInputNumber/mixins/emitter.js +34 -34
  44. package/src/components/controls/base/DshNumber/BriInputNumber/mixins/form.js +14 -14
  45. package/src/components/controls/base/DshNumber/BriInputNumber/utils/assist.js +322 -322
  46. package/src/components/controls/base/DshNumber/DshNumber.vue +143 -143
  47. package/src/components/controls/base/DshNumber/DshNumberange.vue +109 -109
  48. package/src/components/controls/base/DshSelect/DshCheckbox.vue +168 -168
  49. package/src/components/controls/base/DshSelect/DshSelect.vue +180 -180
  50. package/src/components/controls/base/DshSwitch/DshSwitch.vue +115 -115
  51. package/src/components/controls/control.less +324 -324
  52. package/src/components/controls/controlMap.js +114 -114
  53. package/src/components/controls/extra/DshColor.vue +81 -81
  54. package/src/components/controls/extra/themeColor.vue +104 -104
  55. package/src/components/controls/extra/themeIcon.vue +114 -114
  56. package/src/components/controls/mixins/cascaderMixin.js +295 -295
  57. package/src/components/controls/mixins/cascaderPickerMixin.js +216 -216
  58. package/src/components/controls/mixins/cascaderTableMixin.js +130 -130
  59. package/src/components/controls/mixins/controlMixin.js +368 -368
  60. package/src/components/controls/mixins/dateMixin.js +149 -149
  61. package/src/components/controls/mixins/flatTableMixin.js +111 -111
  62. package/src/components/controls/mixins/numberMixin.js +112 -112
  63. package/src/components/controls/mixins/selectMixin.js +233 -233
  64. package/src/components/controls/mixins/switchMixin.js +87 -87
  65. package/src/components/controls/mixins/userAndDepartMixin.js +218 -218
  66. package/src/components/controls/senior/.DS_Store +0 -0
  67. package/src/components/controls/senior/DshLabels.vue +331 -331
  68. package/src/components/controls/senior/DshPackage.vue +57 -57
  69. package/src/components/controls/senior/cascaderTable.vue +210 -210
  70. package/src/components/controls/senior/flatTable.vue +135 -135
  71. package/src/components/controls/senior/selectDepartments.vue +438 -438
  72. package/src/components/controls/senior/selectUsers/departMenu.vue +293 -293
  73. package/src/components/controls/senior/selectUsers/selectUsers.vue +752 -752
  74. package/src/components/controls/special/DshBack.vue +42 -42
  75. package/src/components/controls/special/DshUndeveloped.vue +41 -41
  76. package/src/components/form/DshAdvSearch.vue +510 -510
  77. package/src/components/form/DshDefaultSearch.vue +258 -258
  78. package/src/components/form/DshForm.vue +494 -494
  79. package/src/components/form/searchMixin.js +375 -375
  80. package/src/components/list/BriCard.vue +95 -95
  81. package/src/components/list/BriTable.vue +205 -205
  82. package/src/components/list/BriTree.vue +529 -529
  83. package/src/components/list/BriTreeItem.vue +163 -163
  84. package/src/components/list/DshBox/DshBox.vue +219 -219
  85. package/src/components/list/DshBox/DshCard.vue +446 -446
  86. package/src/components/list/DshBox/DshCrossTable.vue +827 -827
  87. package/src/components/list/DshBox/DshList.vue +404 -404
  88. package/src/components/list/DshBox/DshPanel.vue +669 -669
  89. package/src/components/list/DshBox/DshSingleData.vue +119 -119
  90. package/src/components/list/DshBox/DshTable.vue +239 -239
  91. package/src/components/list/DshCascaderTable.vue +115 -115
  92. package/src/components/list/DshFlatTable.vue +339 -339
  93. package/src/components/list/DshPage.vue +194 -194
  94. package/src/components/list/DshTreeTable.vue +113 -113
  95. package/src/components/list/common/importModal.vue +243 -243
  96. package/src/components/list/common/quoteListModal.vue +206 -206
  97. package/src/components/list/mixins/DshCascaderTableMixin.js +278 -278
  98. package/src/components/list/mixins/DshFlatTableMixin.js +493 -493
  99. package/src/components/list/mixins/DshTreeTableMixin.js +286 -286
  100. package/src/components/list/mixins/tableBaseMixin.js +1661 -1661
  101. package/src/components/list/mixins/treeTableBaseMixin.js +149 -149
  102. package/src/components/other/BriAvatar.vue +166 -166
  103. package/src/components/other/BriCode.vue +125 -125
  104. package/src/components/other/BriCollapseTree.vue +207 -207
  105. package/src/components/other/BriGantt.vue +1084 -1084
  106. package/src/components/other/BriIframe.vue +116 -116
  107. package/src/components/other/BriLoading.vue +171 -171
  108. package/src/components/other/BriSvg.vue +28 -28
  109. package/src/components/other/DshColorPanel.vue +128 -128
  110. package/src/components/other/DshMenuNav.vue +188 -188
  111. package/src/components/small/BriButton.vue +71 -71
  112. package/src/components/small/BriDrawer.vue +169 -169
  113. package/src/components/small/BriTooltip.vue +87 -87
  114. package/src/components/small/DshBtnModal.vue +68 -68
  115. package/src/components/small/DshButtons.vue +324 -324
  116. package/src/components/small/DshDropdown.vue +225 -225
  117. package/src/components/small/DshIcons.vue +59 -59
  118. package/src/components/small/DshListRender.js +21 -21
  119. package/src/components/small/DshModal.vue +160 -160
  120. package/src/components/small/DshSteps.vue +141 -141
  121. package/src/components/small/DshTabs.vue +598 -598
  122. package/src/components/small/DshTabsSet.vue +309 -309
  123. package/src/components/small/DshTags.vue +251 -251
  124. package/src/components/small/DshTitle.vue +50 -50
  125. package/src/components/small/render.js +20 -20
  126. package/src/components/unit/DshFormUnit.vue +398 -398
  127. package/src/components/unit/DshListUnit.vue +115 -115
  128. package/src/components/unit/unitMixin.js +86 -86
  129. package/src/data/index.js +9 -9
  130. package/src/index.js +271 -271
  131. package/src/styles/.DS_Store +0 -0
  132. package/src/styles/bundle.css +12 -12
  133. package/src/styles/components/.DS_Store +0 -0
  134. package/src/styles/components/BriButton.less +292 -292
  135. package/src/styles/components/BriTable.less +344 -344
  136. package/src/styles/components/DshModal.less +257 -250
  137. package/src/styles/components/index.less +3 -3
  138. package/src/styles/global/animate.less +11 -11
  139. package/src/styles/global/base.less +45 -45
  140. package/src/styles/global/box.less +186 -186
  141. package/src/styles/global/control.less +122 -122
  142. package/src/styles/global/flex.less +282 -282
  143. package/src/styles/global/global.less +8 -8
  144. package/src/styles/global/text.less +59 -59
  145. package/src/styles/global/variables.less +79 -85
  146. package/src/styles/iconfont/iconfont.css +254 -254
  147. package/src/styles/iconfont/iconfont.json +422 -422
  148. package/src/styles/iconfont/iconfont.svg +137 -137
  149. package/src/styles/index.less +11 -11
  150. package/src/styles/reset-easytable.less +21 -21
  151. package/src/styles/reset-iview-controls.less +145 -145
  152. package/src/styles/reset-iview-other.less +49 -49
  153. package/src/styles/reset-iview-variables.less +34 -34
  154. package/src/styles/reset.less +45 -45
  155. package/src/utils/index.js +5 -5
  156. package/src/utils/table.js +175 -175
@@ -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>