bri-components 1.4.93 → 1.4.94

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 +85 -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,752 +1,752 @@
1
- <template>
2
- <!-- 编辑 -->
3
- <div
4
- v-if="canEdit"
5
- class="selectUsers"
6
- >
7
- <bri-tooltip
8
- :content="showVal"
9
- :transfer="true"
10
- >
11
- <div @click="clickInput">
12
- <slot>
13
- <dsh-control-input
14
- :class="commonClass"
15
- :value="curValShowList"
16
- :disabled="disabled"
17
- :heightAuto="isHeightAuto"
18
- :propsObj="selfPropsObj"
19
- @clickItem="clickItem"
20
- @deleteItem="clickDeleteItem"
21
- @clear="clickClear"
22
- ></dsh-control-input>
23
- </slot>
24
- </div>
25
- </bri-tooltip>
26
-
27
- <!-- 点击选中项后的自定义内容 -->
28
- <dsh-render :render="itemTipRender"></dsh-render>
29
-
30
- <!-- 搜索选择框 -->
31
- <dsh-modal
32
- v-if="modalInited"
33
- class="selectUsers-modal"
34
- v-model="showModal"
35
- mode="custom"
36
- :propsObj="modalPropsObj"
37
- @cancel="clickCancel"
38
- >
39
- <div
40
- v-if="showModalContent"
41
- class="selectUsers-modal-wrap"
42
- >
43
- <!-- 上 -->
44
- <div class="head">
45
- <!-- 左 -->
46
- <div class="head-left">
47
- <!-- 上 筛选 -->
48
- <div
49
- v-if="curDepart._key !== '_highSearch'"
50
- class="search"
51
- >
52
- <dsh-input
53
- :value="searchData"
54
- :propsObj="inputPropsObj"
55
- @inputChange="search"
56
- ></dsh-input>
57
- </div>
58
-
59
- <!-- 下 -->
60
- <div class="content">
61
- <!-- 左 部门 -->
62
- <depart-menu
63
- class="content-menu"
64
- :canEdit="false"
65
- :useIcon="false"
66
- :list="departShowList"
67
- @departClick="changeDepart"
68
- ></depart-menu>
69
-
70
- <!-- 右 部门对应的成员 -->
71
- <div class="content-users">
72
- <bri-loading v-if="loading" />
73
- <template v-else>
74
- <!-- 有数据 -->
75
- <div
76
- v-if="userShowList.length"
77
- class="content-users-list"
78
- >
79
- <!-- 上 全选 -->
80
- <div
81
- v-if="multipleMode"
82
- class="content-users-list-check"
83
- >
84
- <Checkbox
85
- :indeterminate="false"
86
- :value="curCheckAll"
87
- @click.prevent.native="clickCheckAll(curCheckAll)"
88
- >全选</Checkbox>
89
- </div>
90
-
91
- <!-- 下 列表-->
92
- <div class="content-users-list-selects">
93
- <div
94
- v-for="dataItem in userShowList"
95
- :key="dataItem._key"
96
- class="content-users-list-selects-item"
97
- >
98
- <Checkbox
99
- v-model="dataItem.checked"
100
- @on-change="changeSelect(dataItem)"
101
- >
102
- {{ getShowName(dataItem) }}
103
- </Checkbox>
104
- </div>
105
- </div>
106
- </div>
107
-
108
- <!-- 无数据 -->
109
- <div
110
- v-else
111
- class="content-users-nodata"
112
- >
113
- <img
114
- :src="$imageSrcMap.nodata"
115
- alt="该部门暂无人员"
116
- >
117
- <div>
118
- 该部门暂无人员
119
- </div>
120
- </div>
121
- </template>
122
- </div>
123
- </div>
124
- </div>
125
-
126
- <!-- 中 图标 -->
127
- <div class="head-center">
128
- <Icon
129
- class="icon"
130
- type="ios-arrow-forward"
131
- />
132
- </div>
133
-
134
- <!-- 右 已选择项 -->
135
- <div class="head-right">
136
- <div class="list">
137
- <span
138
- v-for="(selectItem, selectIndex) in tmpValList"
139
- :key="selectIndex"
140
- class="list-item"
141
- >
142
- <span class="list-item-name">
143
- {{ getShowName(selectItem) }}
144
- </span>
145
-
146
- <Icon
147
- class="list-item-delete"
148
- type="ios-close-circle"
149
- @click="clickDeleteTmpItem(selectItem, selectIndex, tmpValList)"
150
- />
151
- </span>
152
- </div>
153
- </div>
154
- </div>
155
-
156
- <!-- footer -->
157
- <dsh-buttons
158
- class="footer"
159
- :list="$getOperationList(['canCancel', 'canConfirm'])"
160
- @click="$dispatchEvent($event)"
161
- ></dsh-buttons>
162
- </div>
163
- </dsh-modal>
164
- </div>
165
-
166
- <!-- 查看 -->
167
- <div
168
- v-else
169
- class="selectUsers-show"
170
- >
171
- <!-- 有值 -->
172
- <template v-if="!$isEmptyData(curValShowList)">
173
- <!-- 单元格查看 -->
174
- <template v-if="isUnitShow">
175
- <!-- 高度自由时 -->
176
- <div
177
- v-if="isHeightAuto"
178
- :class="{
179
- ...commonClass,
180
- 'selectUsers-show-auto': true,
181
- 'selectUsers-show-unit': true
182
- }"
183
- >
184
- <template v-for="item in curValShowList">
185
- <img
186
- :src="getAvatarUrl(item)"
187
- :key="item._key"
188
- class="selectUsers-show-unit-img"
189
- />
190
- <span
191
- :key="item._key + 'span'"
192
- class="selectUsers-show-unit-text"
193
- >
194
- {{ getShowName(item) }}
195
- </span>
196
- </template>
197
- </div>
198
-
199
- <!-- 高度不自由(不换行) -->
200
- <bri-tooltip
201
- v-else
202
- :content="showVal"
203
- :transfer="true"
204
- >
205
- <div :class="{
206
- ...commonClass,
207
- 'selectUsers-show-ellipsis': true,
208
- 'selectUsers-show-unit': true
209
- }">
210
- <template v-for="item in curValShowList">
211
- <img
212
- :src="getAvatarUrl(item)"
213
- :key="item._key"
214
- class="selectUsers-show-unit-img"
215
- />
216
- <span
217
- :key="item._key + 'span'"
218
- class="selectUsers-show-unit-text"
219
- >
220
- {{ getShowName(item) }}
221
- </span>
222
- </template>
223
- </div>
224
- </bri-tooltip>
225
- </template>
226
-
227
- <!-- 表单查看 -->
228
- <template v-else>
229
- <!-- 高度自由时 -->
230
- <dsh-tags
231
- v-if="isHeightAuto"
232
- :class="{
233
- ...commonClass,
234
- 'selectUsers-show-auto': true
235
- }"
236
- itemClass="selectUsers-show-auto-tag"
237
- :list="curValShowList"
238
- ></dsh-tags>
239
-
240
- <!-- 高度不自由(不换行) -->
241
- <bri-tooltip
242
- v-else
243
- :content="showVal"
244
- :transfer="true"
245
- >
246
- <dsh-tags
247
- :class="{
248
- ...commonClass,
249
- 'selectUsers-show-ellipsis': true
250
- }"
251
- itemClass="selectUsers-show-ellipsis-tag"
252
- :list="curValShowList"
253
- ></dsh-tags>
254
- </bri-tooltip>
255
- </template>
256
- </template>
257
-
258
- <!-- 无值 -->
259
- <div
260
- v-else
261
- :class="commonClass"
262
- >
263
- {{ emptyShowVal }}
264
- </div>
265
- </div>
266
- </template>
267
-
268
- <script>
269
- import userAndDepartMixin from "../../mixins/userAndDepartMixin.js";
270
- import departMenu from "./departMenu.vue";
271
-
272
- export default {
273
- name: "selectUsers",
274
- mixins: [
275
- userAndDepartMixin
276
- ],
277
- components: {
278
- departMenu
279
- },
280
- props: {},
281
- data () {
282
- return {
283
- // 弹框
284
- modalPropsObj: {
285
- title: "选择成员",
286
- showSlotClose: false,
287
- closable: true,
288
- class: "bri-modal-center"
289
- },
290
- inputPropsObj: {
291
- _name: "成员名称",
292
- _key: "name",
293
- _search: true,
294
- _clearable: false
295
- },
296
-
297
- curDepart: {
298
- _key: "",
299
- name: "全部",
300
- is_leaf: true,
301
- level: 1
302
- },
303
- highUserList: [
304
- {
305
- _key: "dyn_myself",
306
- realname: "当前用户"
307
- }
308
- ],
309
- userList: [],
310
- highList: [
311
- {
312
- _key: "_highSearch",
313
- name: "高级选项",
314
- level: 1,
315
- is_leaf: true
316
- }
317
- ],
318
-
319
- imageResizeConfig: {
320
- m: "fixed",
321
- w: 18,
322
- h: 18
323
- }
324
- };
325
- },
326
- computed: {
327
- selfBasePropsObj () {
328
- return {
329
- _icon: this.propsObj._multiple === true ? "ios-people" : "ios-person"
330
- };
331
- },
332
- isCompAdmin () {
333
- return (JSON.parse(sessionStorage.getItem("userData")) || {}).isCompAdmin || this.selfPropsObj._isCompAdmin;
334
- },
335
-
336
- // 展示的部门
337
- departShowList () {
338
- const loop = (arr = [], filterVals = [], cascaderVals = [], reverseFilter = false) => {
339
- arr = cascaderVals.length
340
- ? arr.filter(item => {
341
- return reverseFilter
342
- ? !cascaderVals.some(cascaderItem =>
343
- item.code && cascaderItem.code
344
- ? item.code.length < cascaderItem.code.length
345
- ? false
346
- : item.code.startsWith(cascaderItem.code)
347
- : false
348
- )
349
- : cascaderVals.some(cascaderItem =>
350
- item.code && cascaderItem.code
351
- ? item.code.length < cascaderItem.code.length
352
- ? cascaderItem.code.startsWith(item.code)
353
- : item.code.startsWith(cascaderItem.code)
354
- : false
355
- );
356
- })
357
- : filterVals.length
358
- ? arr.filter(item =>
359
- reverseFilter
360
- ? !filterVals.includes(item._key)
361
- : filterVals.includes(item._key)
362
- )
363
- : arr;
364
-
365
- return arr.reduce((newArr, item) => {
366
- if (item.children && item.children.length) {
367
- item.children = loop(item.children, [], cascaderVals, reverseFilter);
368
- }
369
-
370
- return [
371
- ...newArr,
372
- item
373
- ];
374
- }, []);
375
- };
376
-
377
- return [
378
- ...(this.highSearch ? this.highList : []),
379
- {
380
- name: "全部",
381
- _key: "",
382
- level: 1,
383
- is_leaf: true
384
- },
385
- ...loop(this.departList, this.filterVals, this.cascaderVals, this.reverseFilter),
386
- ...(
387
- this.isCompAdmin
388
- ? [
389
- {
390
- name: "离职人员",
391
- _key: "_resign",
392
- level: 1,
393
- is_leaf: true
394
- }
395
- ]
396
- : []
397
- )
398
- ];
399
- },
400
- allDepartShowKeys () {
401
- const loop = (arr = []) => {
402
- return arr.reduce((totalList, item) => {
403
- return [
404
- ...totalList,
405
- item,
406
- ...loop(item.children)
407
- ];
408
- }, []);
409
- };
410
-
411
- return loop(this.departShowList).map(item => item._key);
412
- },
413
- userShowList () {
414
- // 有部门过滤就只显示对应的部门,无过滤就涌全部用户(包含无部门用户)
415
- let list = this.filterVals.length || this.cascaderVals.length
416
- ? this.userList.filter(item => this.allDepartShowKeys.includes(item.departmentKey))
417
- : this.userList;
418
-
419
- list = this.curDepart._key === "_highSearch"
420
- ? this.highUserList
421
- : this.curDepart._key === "_resign"
422
- ? this.userList
423
- : !this.curDepart._key
424
- ? list
425
- : list.filter(item => item.departmentKey === this.curDepart._key);
426
-
427
- return this.transformDepartList(list, this.tmpValKeys);
428
- },
429
- userKeys () {
430
- return this.userShowList.map(item => item._key);
431
- },
432
-
433
- curCheckAll () {
434
- return this.userKeys.length && this.userKeys.every(userKey =>
435
- this.tmpValKeys.includes(userKey)
436
- );
437
- },
438
- curValShowList () {
439
- return this.curValList;
440
- }
441
- },
442
- created () {},
443
- methods: {
444
- /* ---------- 弹框里 --------- */
445
- // 选择部门
446
- changeDepart (depart) {
447
- if (this.curDepart._key !== depart._key) {
448
- if (depart._key === "_resign") {
449
- this.curDepart = depart;
450
- this.getListData();
451
- } else {
452
- if (this.curDepart._key === "_resign") {
453
- this.curDepart = depart;
454
- this.getListData();
455
- } else {
456
- this.curDepart = depart;
457
- }
458
- }
459
- }
460
- },
461
- clickCheckAll (bool) {
462
- this.tmpValList = bool
463
- ? this.tmpValList.filter(tmpItem => !this.userKeys.includes(tmpItem._key))
464
- : [
465
- ...this.tmpValList,
466
- ...this.userShowList.filter(dataItem => !this.tmpValKeys.includes(dataItem._key))
467
- ];
468
- },
469
-
470
- /* ----------- 接口方法 ------------- */
471
- // 获取显示名
472
- getShowName (selectItem) {
473
- return selectItem.realname || selectItem.name || selectItem.mobile;
474
- },
475
- // 获取头像
476
- getAvatarUrl (selectItem) {
477
- return selectItem.avatarurl
478
- ? this.$imageResize(selectItem.avatarurl, this.imageResizeConfig)
479
- : this.$imageSrcMap.system.boy;
480
- },
481
- getData () {
482
- this.getDepartListData();
483
- this.getListData();
484
- },
485
- getListData () {
486
- this.loading = true;
487
-
488
- this.$https({
489
- url: {
490
- module: "company",
491
- name: this.curDepart._key === "_resign" ? "userResign" : "userIndex"
492
- },
493
- params: {
494
- search: {
495
- realname: this.searchData.name
496
- ? {
497
- $regex: `.*${this.$speciaWord(this.searchData.name)}.*`,
498
- $options: "i"
499
- }
500
- : undefined
501
- },
502
- // department: this.curDepart._key,
503
- pagination: this.pagePropsObj
504
- },
505
- loadingName: "loading",
506
- callback: data => {
507
- this.loadinged = true;
508
-
509
- this.userList = data.list;
510
- this.total = data.total;
511
- }
512
- });
513
- },
514
- getDepartListData () {
515
- this.$https({
516
- url: {
517
- module: "company",
518
- name: "compDepartCascaderAll"
519
- },
520
- params: {
521
- searchString: this.propsObj.searchString
522
- },
523
- callback: data => {
524
- this.departList = data.list;
525
- }
526
- });
527
- }
528
- }
529
- };
530
- </script>
531
-
532
- <style lang="less">
533
- @import url("../../control.less");
534
-
535
- .selectUsers {
536
- #control-show();
537
-
538
- &-show {
539
- &-auto,
540
- &-ellipsis {
541
- margin: 2px 0px;
542
- }
543
-
544
- &-unit {
545
- &-img {
546
- width: 23px;
547
- height: 18px;
548
- padding-left: 5px;
549
- border-radius: 50%;
550
- vertical-align: middle;
551
-
552
- &:first-of-type {
553
- width: 18px;
554
- padding-left: 0px;
555
- }
556
- }
557
-
558
- &-text {
559
- vertical-align: middle;
560
- }
561
- }
562
- }
563
-
564
- // 提示框的
565
- &-tip {
566
- &-modal {
567
- .wrap {
568
- width: 100%;
569
- height: 100%;
570
- display: flex;
571
- flex-direction: column;
572
-
573
- &-content {
574
- flex: 1;
575
- min-height: 0px;
576
- padding: 0px 12px;
577
- overflow: auto;
578
- }
579
-
580
- &-btns {
581
- margin: 10px;
582
- text-align: right;
583
-
584
- .ivu-btn {
585
- font-size: 16px;
586
- font-family: Microsoft YaHei-Semibold, Microsoft YaHei;
587
- font-weight: 600;
588
- border-radius: 4px;
589
- }
590
- }
591
- }
592
- }
593
- }
594
-
595
- // 弹框部分
596
- &-modal {
597
- .ivu-modal {
598
- width: 40%!important;
599
- min-width: 900px!important;
600
- height: 60%;
601
- min-height: 600px;
602
- }
603
-
604
- &-wrap {
605
- width: 100%;
606
- height: 100%;
607
- .dsh-flex-col-start-stretch();
608
-
609
- .head {
610
- width: 100%;
611
- flex: 1;
612
- min-height: 100px;
613
- .dsh-flex-row-start-stretch();
614
-
615
- &-left {
616
- flex: 2;
617
- min-width: 300px;
618
- border: 1px solid #E5E5E5;
619
- background: @white;
620
- overflow-y: auto;
621
-
622
- .search {
623
- padding: 10px 20px;
624
- }
625
-
626
- .content {
627
- display: flex;
628
- height: calc(100% - 52px);
629
- border-top: 1px solid #E5E5E5;
630
-
631
- &-menu {
632
- flex: 4;
633
- height: 100%;
634
- overflow: auto;
635
- }
636
-
637
- &-users {
638
- flex: 3;
639
- border-left: 1px solid #E5E5E5;
640
- position: relative;
641
-
642
- .ivu-checkbox-checked .ivu-checkbox-inner {
643
- border-color: @themeColor;
644
- background-color: @themeColor;
645
- }
646
-
647
- &-list {
648
- height: 100%;
649
- display: flex;
650
- flex-direction: column;
651
-
652
- &-check {
653
- height: 40px;
654
- line-height: 40px;
655
- border-bottom: 1px solid #E5E5E5;
656
- padding-left: 15px;
657
- }
658
-
659
- &-selects {
660
- flex: 1;
661
- overflow: auto;
662
- padding: 15px;
663
-
664
- &-item {
665
- margin-bottom: 5px;
666
- }
667
- }
668
- }
669
-
670
- &-nodata {
671
- position: absolute;
672
- top: 50%;
673
- width: 100%;
674
- text-align: center;
675
- transform: translateY(-50%);
676
- }
677
- }
678
- }
679
- }
680
-
681
- &-center {
682
- width: 100px;
683
- height: 100%;
684
- display: flex;
685
- justify-content: center;
686
- align-items: center;
687
-
688
- .icon {
689
- width: 24px;
690
- height: 24px;
691
- line-height: 24px;
692
- font-size: 18px;
693
- background-color: @themeColor;
694
- border-radius: 50%;
695
- color: #fff;
696
- text-align: center;
697
- }
698
- }
699
-
700
- &-right {
701
- flex: 1;
702
- min-width: 200px;
703
- height: 100%;
704
- padding: 20px;
705
- margin-left: 10px;
706
- border: 1px solid #E5E5E5;
707
- background: @white;
708
- overflow: auto;
709
- display: flex;
710
- flex-direction: column;
711
-
712
- .list {
713
- display: flex;
714
- flex-wrap: wrap;
715
- align-items: center;
716
-
717
- &-item {
718
- max-width: 150px;
719
- height: 24px;
720
- padding: 2px 6px 2px 10px;
721
- margin: 3px 5px;
722
- border-radius: 20px;
723
- background-color: @themeColor;
724
- color: #ffffff;
725
- font-size: 12px;
726
- display: flex;
727
- align-items: center;
728
-
729
- &-name {
730
- .dsh-ellipsis();
731
- }
732
-
733
- &-delete {
734
- padding: 3px;
735
- margin-left: 5px;
736
- font-size: 14px;
737
- cursor: pointer;
738
- }
739
- }
740
- }
741
- }
742
- }
743
-
744
- .footer {
745
- padding-top: 12px;
746
- // border-top: 1px solid @borderColor;
747
- text-align: right;
748
- }
749
- }
750
- }
751
- }
752
- </style>
1
+ <template>
2
+ <!-- 编辑 -->
3
+ <div
4
+ v-if="canEdit"
5
+ class="selectUsers"
6
+ >
7
+ <bri-tooltip
8
+ :content="showVal"
9
+ :transfer="true"
10
+ >
11
+ <div @click="clickInput">
12
+ <slot>
13
+ <dsh-control-input
14
+ :class="commonClass"
15
+ :value="curValShowList"
16
+ :disabled="disabled"
17
+ :heightAuto="isHeightAuto"
18
+ :propsObj="selfPropsObj"
19
+ @clickItem="clickItem"
20
+ @deleteItem="clickDeleteItem"
21
+ @clear="clickClear"
22
+ ></dsh-control-input>
23
+ </slot>
24
+ </div>
25
+ </bri-tooltip>
26
+
27
+ <!-- 点击选中项后的自定义内容 -->
28
+ <dsh-render :render="itemTipRender"></dsh-render>
29
+
30
+ <!-- 搜索选择框 -->
31
+ <dsh-modal
32
+ v-if="modalInited"
33
+ class="selectUsers-modal"
34
+ v-model="showModal"
35
+ mode="custom"
36
+ :propsObj="modalPropsObj"
37
+ @cancel="clickCancel"
38
+ >
39
+ <div
40
+ v-if="showModalContent"
41
+ class="selectUsers-modal-wrap"
42
+ >
43
+ <!-- 上 -->
44
+ <div class="head">
45
+ <!-- 左 -->
46
+ <div class="head-left">
47
+ <!-- 上 筛选 -->
48
+ <div
49
+ v-if="curDepart._key !== '_highSearch'"
50
+ class="search"
51
+ >
52
+ <dsh-input
53
+ :value="searchData"
54
+ :propsObj="inputPropsObj"
55
+ @inputChange="search"
56
+ ></dsh-input>
57
+ </div>
58
+
59
+ <!-- 下 -->
60
+ <div class="content">
61
+ <!-- 左 部门 -->
62
+ <depart-menu
63
+ class="content-menu"
64
+ :canEdit="false"
65
+ :useIcon="false"
66
+ :list="departShowList"
67
+ @departClick="changeDepart"
68
+ ></depart-menu>
69
+
70
+ <!-- 右 部门对应的成员 -->
71
+ <div class="content-users">
72
+ <bri-loading v-if="loading" />
73
+ <template v-else>
74
+ <!-- 有数据 -->
75
+ <div
76
+ v-if="userShowList.length"
77
+ class="content-users-list"
78
+ >
79
+ <!-- 上 全选 -->
80
+ <div
81
+ v-if="multipleMode"
82
+ class="content-users-list-check"
83
+ >
84
+ <Checkbox
85
+ :indeterminate="false"
86
+ :value="curCheckAll"
87
+ @click.prevent.native="clickCheckAll(curCheckAll)"
88
+ >全选</Checkbox>
89
+ </div>
90
+
91
+ <!-- 下 列表-->
92
+ <div class="content-users-list-selects">
93
+ <div
94
+ v-for="dataItem in userShowList"
95
+ :key="dataItem._key"
96
+ class="content-users-list-selects-item"
97
+ >
98
+ <Checkbox
99
+ v-model="dataItem.checked"
100
+ @on-change="changeSelect(dataItem)"
101
+ >
102
+ {{ getShowName(dataItem) }}
103
+ </Checkbox>
104
+ </div>
105
+ </div>
106
+ </div>
107
+
108
+ <!-- 无数据 -->
109
+ <div
110
+ v-else
111
+ class="content-users-nodata"
112
+ >
113
+ <img
114
+ :src="$imageSrcMap.nodata"
115
+ alt="该部门暂无人员"
116
+ >
117
+ <div>
118
+ 该部门暂无人员
119
+ </div>
120
+ </div>
121
+ </template>
122
+ </div>
123
+ </div>
124
+ </div>
125
+
126
+ <!-- 中 图标 -->
127
+ <div class="head-center">
128
+ <Icon
129
+ class="icon"
130
+ type="ios-arrow-forward"
131
+ />
132
+ </div>
133
+
134
+ <!-- 右 已选择项 -->
135
+ <div class="head-right">
136
+ <div class="list">
137
+ <span
138
+ v-for="(selectItem, selectIndex) in tmpValList"
139
+ :key="selectIndex"
140
+ class="list-item"
141
+ >
142
+ <span class="list-item-name">
143
+ {{ getShowName(selectItem) }}
144
+ </span>
145
+
146
+ <Icon
147
+ class="list-item-delete"
148
+ type="ios-close-circle"
149
+ @click="clickDeleteTmpItem(selectItem, selectIndex, tmpValList)"
150
+ />
151
+ </span>
152
+ </div>
153
+ </div>
154
+ </div>
155
+
156
+ <!-- footer -->
157
+ <dsh-buttons
158
+ class="footer"
159
+ :list="$getOperationList(['canCancel', 'canConfirm'])"
160
+ @click="$dispatchEvent($event)"
161
+ ></dsh-buttons>
162
+ </div>
163
+ </dsh-modal>
164
+ </div>
165
+
166
+ <!-- 查看 -->
167
+ <div
168
+ v-else
169
+ class="selectUsers-show"
170
+ >
171
+ <!-- 有值 -->
172
+ <template v-if="!$isEmptyData(curValShowList)">
173
+ <!-- 单元格查看 -->
174
+ <template v-if="isUnitShow">
175
+ <!-- 高度自由时 -->
176
+ <div
177
+ v-if="isHeightAuto"
178
+ :class="{
179
+ ...commonClass,
180
+ 'selectUsers-show-auto': true,
181
+ 'selectUsers-show-unit': true
182
+ }"
183
+ >
184
+ <template v-for="item in curValShowList">
185
+ <img
186
+ :src="getAvatarUrl(item)"
187
+ :key="item._key"
188
+ class="selectUsers-show-unit-img"
189
+ />
190
+ <span
191
+ :key="item._key + 'span'"
192
+ class="selectUsers-show-unit-text"
193
+ >
194
+ {{ getShowName(item) }}
195
+ </span>
196
+ </template>
197
+ </div>
198
+
199
+ <!-- 高度不自由(不换行) -->
200
+ <bri-tooltip
201
+ v-else
202
+ :content="showVal"
203
+ :transfer="true"
204
+ >
205
+ <div :class="{
206
+ ...commonClass,
207
+ 'selectUsers-show-ellipsis': true,
208
+ 'selectUsers-show-unit': true
209
+ }">
210
+ <template v-for="item in curValShowList">
211
+ <img
212
+ :src="getAvatarUrl(item)"
213
+ :key="item._key"
214
+ class="selectUsers-show-unit-img"
215
+ />
216
+ <span
217
+ :key="item._key + 'span'"
218
+ class="selectUsers-show-unit-text"
219
+ >
220
+ {{ getShowName(item) }}
221
+ </span>
222
+ </template>
223
+ </div>
224
+ </bri-tooltip>
225
+ </template>
226
+
227
+ <!-- 表单查看 -->
228
+ <template v-else>
229
+ <!-- 高度自由时 -->
230
+ <dsh-tags
231
+ v-if="isHeightAuto"
232
+ :class="{
233
+ ...commonClass,
234
+ 'selectUsers-show-auto': true
235
+ }"
236
+ itemClass="selectUsers-show-auto-tag"
237
+ :list="curValShowList"
238
+ ></dsh-tags>
239
+
240
+ <!-- 高度不自由(不换行) -->
241
+ <bri-tooltip
242
+ v-else
243
+ :content="showVal"
244
+ :transfer="true"
245
+ >
246
+ <dsh-tags
247
+ :class="{
248
+ ...commonClass,
249
+ 'selectUsers-show-ellipsis': true
250
+ }"
251
+ itemClass="selectUsers-show-ellipsis-tag"
252
+ :list="curValShowList"
253
+ ></dsh-tags>
254
+ </bri-tooltip>
255
+ </template>
256
+ </template>
257
+
258
+ <!-- 无值 -->
259
+ <div
260
+ v-else
261
+ :class="commonClass"
262
+ >
263
+ {{ emptyShowVal }}
264
+ </div>
265
+ </div>
266
+ </template>
267
+
268
+ <script>
269
+ import userAndDepartMixin from "../../mixins/userAndDepartMixin.js";
270
+ import departMenu from "./departMenu.vue";
271
+
272
+ export default {
273
+ name: "selectUsers",
274
+ mixins: [
275
+ userAndDepartMixin
276
+ ],
277
+ components: {
278
+ departMenu
279
+ },
280
+ props: {},
281
+ data () {
282
+ return {
283
+ // 弹框
284
+ modalPropsObj: {
285
+ title: "选择成员",
286
+ showSlotClose: false,
287
+ closable: true,
288
+ class: "bri-modal-center"
289
+ },
290
+ inputPropsObj: {
291
+ _name: "成员名称",
292
+ _key: "name",
293
+ _search: true,
294
+ _clearable: false
295
+ },
296
+
297
+ curDepart: {
298
+ _key: "",
299
+ name: "全部",
300
+ is_leaf: true,
301
+ level: 1
302
+ },
303
+ highUserList: [
304
+ {
305
+ _key: "dyn_myself",
306
+ realname: "当前用户"
307
+ }
308
+ ],
309
+ userList: [],
310
+ highList: [
311
+ {
312
+ _key: "_highSearch",
313
+ name: "高级选项",
314
+ level: 1,
315
+ is_leaf: true
316
+ }
317
+ ],
318
+
319
+ imageResizeConfig: {
320
+ m: "fixed",
321
+ w: 18,
322
+ h: 18
323
+ }
324
+ };
325
+ },
326
+ computed: {
327
+ selfBasePropsObj () {
328
+ return {
329
+ _icon: this.propsObj._multiple === true ? "ios-people" : "ios-person"
330
+ };
331
+ },
332
+ isCompAdmin () {
333
+ return (JSON.parse(sessionStorage.getItem("userData")) || {}).isCompAdmin || this.selfPropsObj._isCompAdmin;
334
+ },
335
+
336
+ // 展示的部门
337
+ departShowList () {
338
+ const loop = (arr = [], filterVals = [], cascaderVals = [], reverseFilter = false) => {
339
+ arr = cascaderVals.length
340
+ ? arr.filter(item => {
341
+ return reverseFilter
342
+ ? !cascaderVals.some(cascaderItem =>
343
+ item.code && cascaderItem.code
344
+ ? item.code.length < cascaderItem.code.length
345
+ ? false
346
+ : item.code.startsWith(cascaderItem.code)
347
+ : false
348
+ )
349
+ : cascaderVals.some(cascaderItem =>
350
+ item.code && cascaderItem.code
351
+ ? item.code.length < cascaderItem.code.length
352
+ ? cascaderItem.code.startsWith(item.code)
353
+ : item.code.startsWith(cascaderItem.code)
354
+ : false
355
+ );
356
+ })
357
+ : filterVals.length
358
+ ? arr.filter(item =>
359
+ reverseFilter
360
+ ? !filterVals.includes(item._key)
361
+ : filterVals.includes(item._key)
362
+ )
363
+ : arr;
364
+
365
+ return arr.reduce((newArr, item) => {
366
+ if (item.children && item.children.length) {
367
+ item.children = loop(item.children, [], cascaderVals, reverseFilter);
368
+ }
369
+
370
+ return [
371
+ ...newArr,
372
+ item
373
+ ];
374
+ }, []);
375
+ };
376
+
377
+ return [
378
+ ...(this.highSearch ? this.highList : []),
379
+ {
380
+ name: "全部",
381
+ _key: "",
382
+ level: 1,
383
+ is_leaf: true
384
+ },
385
+ ...loop(this.departList, this.filterVals, this.cascaderVals, this.reverseFilter),
386
+ ...(
387
+ this.isCompAdmin
388
+ ? [
389
+ {
390
+ name: "离职人员",
391
+ _key: "_resign",
392
+ level: 1,
393
+ is_leaf: true
394
+ }
395
+ ]
396
+ : []
397
+ )
398
+ ];
399
+ },
400
+ allDepartShowKeys () {
401
+ const loop = (arr = []) => {
402
+ return arr.reduce((totalList, item) => {
403
+ return [
404
+ ...totalList,
405
+ item,
406
+ ...loop(item.children)
407
+ ];
408
+ }, []);
409
+ };
410
+
411
+ return loop(this.departShowList).map(item => item._key);
412
+ },
413
+ userShowList () {
414
+ // 有部门过滤就只显示对应的部门,无过滤就涌全部用户(包含无部门用户)
415
+ let list = this.filterVals.length || this.cascaderVals.length
416
+ ? this.userList.filter(item => this.allDepartShowKeys.includes(item.departmentKey))
417
+ : this.userList;
418
+
419
+ list = this.curDepart._key === "_highSearch"
420
+ ? this.highUserList
421
+ : this.curDepart._key === "_resign"
422
+ ? this.userList
423
+ : !this.curDepart._key
424
+ ? list
425
+ : list.filter(item => item.departmentKey === this.curDepart._key);
426
+
427
+ return this.transformDepartList(list, this.tmpValKeys);
428
+ },
429
+ userKeys () {
430
+ return this.userShowList.map(item => item._key);
431
+ },
432
+
433
+ curCheckAll () {
434
+ return this.userKeys.length && this.userKeys.every(userKey =>
435
+ this.tmpValKeys.includes(userKey)
436
+ );
437
+ },
438
+ curValShowList () {
439
+ return this.curValList;
440
+ }
441
+ },
442
+ created () {},
443
+ methods: {
444
+ /* ---------- 弹框里 --------- */
445
+ // 选择部门
446
+ changeDepart (depart) {
447
+ if (this.curDepart._key !== depart._key) {
448
+ if (depart._key === "_resign") {
449
+ this.curDepart = depart;
450
+ this.getListData();
451
+ } else {
452
+ if (this.curDepart._key === "_resign") {
453
+ this.curDepart = depart;
454
+ this.getListData();
455
+ } else {
456
+ this.curDepart = depart;
457
+ }
458
+ }
459
+ }
460
+ },
461
+ clickCheckAll (bool) {
462
+ this.tmpValList = bool
463
+ ? this.tmpValList.filter(tmpItem => !this.userKeys.includes(tmpItem._key))
464
+ : [
465
+ ...this.tmpValList,
466
+ ...this.userShowList.filter(dataItem => !this.tmpValKeys.includes(dataItem._key))
467
+ ];
468
+ },
469
+
470
+ /* ----------- 接口方法 ------------- */
471
+ // 获取显示名
472
+ getShowName (selectItem) {
473
+ return selectItem.realname || selectItem.name || selectItem.mobile;
474
+ },
475
+ // 获取头像
476
+ getAvatarUrl (selectItem) {
477
+ return selectItem.avatarurl
478
+ ? this.$imageResize(selectItem.avatarurl, this.imageResizeConfig)
479
+ : this.$imageSrcMap.system.boy;
480
+ },
481
+ getData () {
482
+ this.getDepartListData();
483
+ this.getListData();
484
+ },
485
+ getListData () {
486
+ this.loading = true;
487
+
488
+ this.$https({
489
+ url: {
490
+ module: "company",
491
+ name: this.curDepart._key === "_resign" ? "userResign" : "userIndex"
492
+ },
493
+ params: {
494
+ search: {
495
+ realname: this.searchData.name
496
+ ? {
497
+ $regex: `.*${this.$speciaWord(this.searchData.name)}.*`,
498
+ $options: "i"
499
+ }
500
+ : undefined
501
+ },
502
+ // department: this.curDepart._key,
503
+ pagination: this.pagePropsObj
504
+ },
505
+ loadingName: "loading",
506
+ callback: data => {
507
+ this.loadinged = true;
508
+
509
+ this.userList = data.list;
510
+ this.total = data.total;
511
+ }
512
+ });
513
+ },
514
+ getDepartListData () {
515
+ this.$https({
516
+ url: {
517
+ module: "company",
518
+ name: "compDepartCascaderAll"
519
+ },
520
+ params: {
521
+ searchString: this.propsObj.searchString
522
+ },
523
+ callback: data => {
524
+ this.departList = data.list;
525
+ }
526
+ });
527
+ }
528
+ }
529
+ };
530
+ </script>
531
+
532
+ <style lang="less">
533
+ @import url("../../control.less");
534
+
535
+ .selectUsers {
536
+ #control-show();
537
+
538
+ &-show {
539
+ &-auto,
540
+ &-ellipsis {
541
+ margin: 2px 0px;
542
+ }
543
+
544
+ &-unit {
545
+ &-img {
546
+ width: 23px;
547
+ height: 18px;
548
+ padding-left: 5px;
549
+ border-radius: 50%;
550
+ vertical-align: middle;
551
+
552
+ &:first-of-type {
553
+ width: 18px;
554
+ padding-left: 0px;
555
+ }
556
+ }
557
+
558
+ &-text {
559
+ vertical-align: middle;
560
+ }
561
+ }
562
+ }
563
+
564
+ // 提示框的
565
+ &-tip {
566
+ &-modal {
567
+ .wrap {
568
+ width: 100%;
569
+ height: 100%;
570
+ display: flex;
571
+ flex-direction: column;
572
+
573
+ &-content {
574
+ flex: 1;
575
+ min-height: 0px;
576
+ padding: 0px 12px;
577
+ overflow: auto;
578
+ }
579
+
580
+ &-btns {
581
+ margin: 10px;
582
+ text-align: right;
583
+
584
+ .ivu-btn {
585
+ font-size: 16px;
586
+ font-family: Microsoft YaHei-Semibold, Microsoft YaHei;
587
+ font-weight: 600;
588
+ border-radius: 4px;
589
+ }
590
+ }
591
+ }
592
+ }
593
+ }
594
+
595
+ // 弹框部分
596
+ &-modal {
597
+ .ivu-modal {
598
+ width: 40%!important;
599
+ min-width: 900px!important;
600
+ height: 60%;
601
+ min-height: 600px;
602
+ }
603
+
604
+ &-wrap {
605
+ width: 100%;
606
+ height: 100%;
607
+ .dsh-flex-col-start-stretch();
608
+
609
+ .head {
610
+ width: 100%;
611
+ flex: 1;
612
+ min-height: 100px;
613
+ .dsh-flex-row-start-stretch();
614
+
615
+ &-left {
616
+ flex: 2;
617
+ min-width: 300px;
618
+ border: 1px solid #E5E5E5;
619
+ background: @white;
620
+ overflow-y: auto;
621
+
622
+ .search {
623
+ padding: 10px 20px;
624
+ }
625
+
626
+ .content {
627
+ display: flex;
628
+ height: calc(100% - 52px);
629
+ border-top: 1px solid #E5E5E5;
630
+
631
+ &-menu {
632
+ flex: 4;
633
+ height: 100%;
634
+ overflow: auto;
635
+ }
636
+
637
+ &-users {
638
+ flex: 3;
639
+ border-left: 1px solid #E5E5E5;
640
+ position: relative;
641
+
642
+ .ivu-checkbox-checked .ivu-checkbox-inner {
643
+ border-color: @themeColor;
644
+ background-color: @themeColor;
645
+ }
646
+
647
+ &-list {
648
+ height: 100%;
649
+ display: flex;
650
+ flex-direction: column;
651
+
652
+ &-check {
653
+ height: 40px;
654
+ line-height: 40px;
655
+ border-bottom: 1px solid #E5E5E5;
656
+ padding-left: 15px;
657
+ }
658
+
659
+ &-selects {
660
+ flex: 1;
661
+ overflow: auto;
662
+ padding: 15px;
663
+
664
+ &-item {
665
+ margin-bottom: 5px;
666
+ }
667
+ }
668
+ }
669
+
670
+ &-nodata {
671
+ position: absolute;
672
+ top: 50%;
673
+ width: 100%;
674
+ text-align: center;
675
+ transform: translateY(-50%);
676
+ }
677
+ }
678
+ }
679
+ }
680
+
681
+ &-center {
682
+ width: 100px;
683
+ height: 100%;
684
+ display: flex;
685
+ justify-content: center;
686
+ align-items: center;
687
+
688
+ .icon {
689
+ width: 24px;
690
+ height: 24px;
691
+ line-height: 24px;
692
+ font-size: 18px;
693
+ background-color: @themeColor;
694
+ border-radius: 50%;
695
+ color: #fff;
696
+ text-align: center;
697
+ }
698
+ }
699
+
700
+ &-right {
701
+ flex: 1;
702
+ min-width: 200px;
703
+ height: 100%;
704
+ padding: 20px;
705
+ margin-left: 10px;
706
+ border: 1px solid #E5E5E5;
707
+ background: @white;
708
+ overflow: auto;
709
+ display: flex;
710
+ flex-direction: column;
711
+
712
+ .list {
713
+ display: flex;
714
+ flex-wrap: wrap;
715
+ align-items: center;
716
+
717
+ &-item {
718
+ max-width: 150px;
719
+ height: 24px;
720
+ padding: 2px 6px 2px 10px;
721
+ margin: 3px 5px;
722
+ border-radius: 20px;
723
+ background-color: @themeColor;
724
+ color: #ffffff;
725
+ font-size: 12px;
726
+ display: flex;
727
+ align-items: center;
728
+
729
+ &-name {
730
+ .dsh-ellipsis();
731
+ }
732
+
733
+ &-delete {
734
+ padding: 3px;
735
+ margin-left: 5px;
736
+ font-size: 14px;
737
+ cursor: pointer;
738
+ }
739
+ }
740
+ }
741
+ }
742
+ }
743
+
744
+ .footer {
745
+ padding-top: 12px;
746
+ // border-top: 1px solid @borderColor;
747
+ text-align: right;
748
+ }
749
+ }
750
+ }
751
+ }
752
+ </style>