bri-components 1.2.0 → 1.2.1

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 (54) hide show
  1. package/lib/0.bri-components.min.js +1 -1
  2. package/lib/1.bri-components.min.js +1 -1
  3. package/lib/2.bri-components.min.js +1 -1
  4. package/lib/3.bri-components.min.js +1 -1
  5. package/lib/4.bri-components.min.js +1 -1
  6. package/lib/5.bri-components.min.js +1 -1
  7. package/lib/6.bri-components.min.js +1 -1
  8. package/lib/7.bri-components.min.js +1 -1
  9. package/lib/8.bri-components.min.js +1 -1
  10. package/lib/9.bri-components.min.js +1 -1
  11. package/lib/bri-components.min.js +6 -6
  12. package/package.json +1 -1
  13. package/src/.DS_Store +0 -0
  14. package/src/abolish/DshFlatTable.vue +1 -1
  15. package/src/components/.DS_Store +0 -0
  16. package/src/components/controls/.DS_Store +0 -0
  17. package/src/components/controls/base/BriUpload/BriUpload.vue +2 -1
  18. package/src/components/controls/base/DshCascader/DshCascader.vue +53 -51
  19. package/src/components/controls/base/DshCascader/InfoCascader.vue +3 -4
  20. package/src/components/controls/base/DshCheckbox.vue +8 -8
  21. package/src/components/controls/base/DshSelect.vue +1 -1
  22. package/src/components/controls/controlMap.js +4 -0
  23. package/src/components/controls/controlMixin.js +14 -12
  24. package/src/components/controls/senior/.DS_Store +0 -0
  25. package/src/components/controls/senior/BriLabels.vue +169 -158
  26. package/src/components/controls/senior/selectDepartments.vue +380 -0
  27. package/src/components/controls/senior/selectUsers/DepartmentMenu.vue +191 -0
  28. package/src/components/controls/senior/selectUsers/selectUsers.vue +482 -0
  29. package/src/components/list/BriCard.vue +52 -0
  30. package/src/components/list/BriTreeItem.vue +110 -0
  31. package/src/components/small/DshTags.vue +1 -1
  32. package/src/index.js +7 -3
  33. package/src/styles/.DS_Store +0 -0
  34. package/src/styles/common/control.less +57 -54
  35. package/src/styles/components/.DS_Store +0 -0
  36. package/src/styles/components/controls/base/BriUpload/BriUpload.less +11 -3
  37. package/src/styles/components/controls/base/DshCascader/DshCascader.less +24 -77
  38. package/src/styles/components/controls/base/DshCheckbox.less +65 -69
  39. package/src/styles/components/controls/base/DshEditor.less +3 -2
  40. package/src/styles/components/controls/base/DshInput.less +4 -8
  41. package/src/styles/components/controls/base/DshNumber.less +2 -2
  42. package/src/styles/components/controls/base/DshSelect.less +3 -3
  43. package/src/styles/components/controls/senior/BriLabels.less +32 -118
  44. package/src/styles/components/controls/senior/cascaderTable.less +1 -1
  45. package/src/styles/components/controls/senior/flatTable.less +1 -1
  46. package/src/styles/components/controls/senior/selectDepartments.less +106 -0
  47. package/src/styles/components/controls/senior/selectUsers/DepartmentMenu.less +37 -0
  48. package/src/styles/components/controls/senior/selectUsers/index.less +2 -0
  49. package/src/styles/components/controls/senior/selectUsers/selectUsers.less +167 -0
  50. package/src/styles/components/form/DshDefaultSearch.less +1 -2
  51. package/src/styles/components/index.less +7 -3
  52. package/src/styles/components/list/BriCard.less +50 -0
  53. package/src/styles/components/list/BriTreeItem.less +50 -0
  54. package/src/styles/components/unit/DshFormItem.less +0 -1
@@ -0,0 +1,380 @@
1
+ <template>
2
+ <div class="selectDepartments">
3
+ <bri-tooltip
4
+ :content="showVal"
5
+ placement="top"
6
+ maxWidth="200"
7
+ :transfer="true"
8
+ >
9
+ <!-- 编辑模式 -->
10
+ <div
11
+ v-if="canEdit"
12
+ :class="{
13
+ ...commonClass,
14
+ 'selectDepartments-edit': true
15
+ }"
16
+ @mouseenter="isHover = true"
17
+ @mouseleave="isHover = false"
18
+ @click="clickInput"
19
+ >
20
+ <template v-if="!$isEmptyData(curValList)">
21
+ <dsh-tags
22
+ class="text"
23
+ :list="curValList"
24
+ :propsObj="{
25
+ disabled: !finalCanEdit
26
+ }"
27
+ @delete="clickDeleteItem"
28
+ ></dsh-tags>
29
+
30
+ <Icon
31
+ v-if="selfPropsObj._clearable && isHover"
32
+ class="icon-close"
33
+ type="md-close"
34
+ @click.stop="clickClear"
35
+ />
36
+ <Icon
37
+ v-else
38
+ class="icon-default"
39
+ :type="`${multiple ? 'ios-people' : 'ios-person'}`"
40
+ />
41
+ </template>
42
+
43
+ <template v-else>
44
+ {{ emptyShowVal }}
45
+ </template>
46
+ </div>
47
+
48
+ <!-- 查看模式 -->
49
+ <div
50
+ v-else
51
+ :class="{
52
+ ...commonClass,
53
+ 'selectDepartments-show': true
54
+ }"
55
+ >
56
+ <dsh-tags
57
+ v-if="!$isEmptyData(curValList)"
58
+ class="text"
59
+ :list="curValList"
60
+ :propsObj="{
61
+ closable: false
62
+ }"
63
+ ></dsh-tags>
64
+
65
+ <template v-else>
66
+ {{ emptyShowVal }}
67
+ </template>
68
+ </div>
69
+ </bri-tooltip>
70
+
71
+ <!-- 搜索选择框 -->
72
+ <dsh-modal
73
+ v-if="finalCanEdit"
74
+ v-model="showModal"
75
+ mode="custom"
76
+ :propsObj="modalPropsObj"
77
+ @cancel="clickCancel"
78
+ >
79
+ <div class="selectDepartments-list">
80
+ <!-- 上 已选择项 -->
81
+ <div class="list-selected">
82
+ <span class="list-selected-label">
83
+ 已选择{{ multiple ? `(${newValList.length}个)` : "" }}:
84
+ </span>
85
+
86
+ <span
87
+ v-for="(selectItem, selectIndex) in newValList"
88
+ :key="selectIndex"
89
+ class="item"
90
+ >
91
+ <span class="item-name">
92
+ {{ selectItem.full_name || selectItem.name }}
93
+ </span>
94
+ <Icon
95
+ class="item-delete"
96
+ type="md-close"
97
+ @click="deleteSelect(selectItem, selectIndex, newValList)"
98
+ />
99
+ </span>
100
+ </div>
101
+
102
+ <!-- 上 搜索框 -->
103
+ <div class="list-search">
104
+ <Input
105
+ v-model="searchName"
106
+ placeholder="搜索部门"
107
+ search
108
+ @on-search="search"
109
+ />
110
+ </div>
111
+
112
+ <!-- 中 列表 -->
113
+ <div
114
+ v-if="showModal"
115
+ class="list-center"
116
+ >
117
+ <bri-loading v-if="loading" />
118
+
119
+ <template v-else>
120
+ <!-- 树形形式 -->
121
+ <div
122
+ v-if="isCascader"
123
+ class="list-center-tree"
124
+ >
125
+ <template v-if="allDepartmentList.length">
126
+ <bri-tree-item
127
+ v-for="item in allDepartmentList"
128
+ :key="item._key"
129
+ :value="item"
130
+ :changeOnSelect="changeOnSelect"
131
+ :multiple="multiple"
132
+ @on-change="changeSelect"
133
+ ></bri-tree-item>
134
+ </template>
135
+ <div
136
+ v-else
137
+ class="tree-nodata"
138
+ >
139
+ 暂无数据……
140
+ </div>
141
+ </div>
142
+
143
+ <!-- 卡片形式 -->
144
+ <div
145
+ v-else
146
+ class="list-center-card"
147
+ >
148
+ <bri-card
149
+ :data="departmentList"
150
+ :changeOnSelect="changeOnSelect"
151
+ :multiple="multiple"
152
+ @on-change="changeSelect"
153
+ ></bri-card>
154
+
155
+ <div
156
+ v-if="highSearch"
157
+ class="card-high"
158
+ >
159
+ <p class="card-high-title">高级选项</p>
160
+ <bri-card
161
+ :data="highDepartmentList"
162
+ :changeOnSelect="changeOnSelect"
163
+ :multiple="multiple"
164
+ @on-change="changeSelect"
165
+ ></bri-card>
166
+ </div>
167
+ </div>
168
+ </template>
169
+ </div>
170
+
171
+ <!-- 底 按钮 -->
172
+ <div class="list-footer">
173
+ <dsh-buttons
174
+ :list="$getOperationList(['canCancel', 'canConfirm'])"
175
+ @click="$dispatchEvent($event)"
176
+ ></dsh-buttons>
177
+ </div>
178
+ </div>
179
+ </dsh-modal>
180
+ </div>
181
+ </template>
182
+
183
+ <script>
184
+ import controlMixin from "../controlMixin.js";
185
+ import BriTreeItem from "../../list/BriTreeItem.vue";
186
+ import BriCard from "../../list/BriCard.vue";
187
+
188
+ export default {
189
+ name: "selectDepartments",
190
+ mixins: [
191
+ controlMixin
192
+ ],
193
+ components: {
194
+ BriTreeItem,
195
+ BriCard
196
+ },
197
+ props: {},
198
+ data () {
199
+ return {
200
+ isHover: false,
201
+
202
+ newValList: [],
203
+ showModal: false,
204
+ loading: false,
205
+ searchName: "", // 搜索名字
206
+ departmentList: [],
207
+ highDepartmentList: [
208
+ {
209
+ _key: "dyn_department",
210
+ name: "当前部门"
211
+ }
212
+ ],
213
+
214
+ operationMap: {
215
+ canCancel: {
216
+ name: "取消",
217
+ type: "canCancel",
218
+ btnType: "cancel",
219
+ event: "clickCancel"
220
+ },
221
+ canConfirm: {
222
+ name: "确定",
223
+ type: "canConfirm",
224
+ btnType: "primary",
225
+ event: "clickConfirm"
226
+ }
227
+ }
228
+ };
229
+ },
230
+ computed: {
231
+ selfPropsObj () {
232
+ return {
233
+ _multiple: false,
234
+ _highSearch: false,
235
+ _isCascader: true,
236
+ _changeOnSelect: true,
237
+ _searchString: "",
238
+
239
+ ...this.propsObj,
240
+ ...this.commonDealPropsObj
241
+ };
242
+ },
243
+ multiple () {
244
+ return this.selfPropsObj._multiple;
245
+ },
246
+ highSearch () {
247
+ return this.selfPropsObj._highSearch;
248
+ },
249
+ // 暂时没配置
250
+ isCascader () {
251
+ return this.selfPropsObj._isCascader;
252
+ },
253
+ changeOnSelect () {
254
+ return this.selfPropsObj._changeOnSelect;
255
+ },
256
+ searchString () {
257
+ return this.selfPropsObj._searchString;
258
+ },
259
+
260
+ modalPropsObj () {
261
+ return {
262
+ title: "选择部门",
263
+ class: `z-modal ${this.isCascader ? "selectDepartments-cascaderModal" : "selectDepartments-modal"}`,
264
+ showSlotClose: false,
265
+ closable: true
266
+ };
267
+ },
268
+ selectKeys () {
269
+ return this.newValList.map(item => item._key);
270
+ },
271
+ allDepartmentList () {
272
+ return this.transformDepartmentList([
273
+ ...(this.highSearch ? this.highDepartmentList : []),
274
+ ...this.departmentList
275
+ ], this.selectKeys);
276
+ },
277
+
278
+ showVal () {
279
+ return this.$isEmptyData(this.curValList)
280
+ ? this.emptyShowVal
281
+ : this.curValList.map(depart => depart.full_name || depart.name).join("、");
282
+ }
283
+ },
284
+ created () {},
285
+ methods: {
286
+ // 外部也在使用
287
+ openModal () {
288
+ this.showModal = true;
289
+ },
290
+ closeModal () {
291
+ this.showModal = false;
292
+ },
293
+
294
+ // 搜索
295
+ search () {
296
+ this.getListData();
297
+ },
298
+ // 点击输入框 打开选择模态框
299
+ clickInput () {
300
+ if (this.finalCanEdit) {
301
+ this.openModal();
302
+
303
+ this.newValList = this.$deepCopy(this.curValList);
304
+ this.searchName = "";
305
+ this.getListData();
306
+ }
307
+ },
308
+ clickDeleteItem (deleteItem) {
309
+ this.curValList = this.curValList.filter(item => item._key != deleteItem._key);
310
+ },
311
+ // 点击清除选择项
312
+ clickClear () {
313
+ this.curValList = [];
314
+ },
315
+
316
+ /* ---------- 弹框里 --------- */
317
+ // 弹窗 -选项变化
318
+ changeSelect (selectItem) {
319
+ this.newValList = this.multiple
320
+ ? this.selectKeys.includes(selectItem._key)
321
+ ? this.newValList.filter(item => item._key !== selectItem._key)
322
+ : [...this.newValList, selectItem]
323
+ : selectItem.checked
324
+ ? [selectItem]
325
+ : [];
326
+ },
327
+ // 弹窗 -删除选择项
328
+ deleteSelect (item, index, list) {
329
+ list.splice(index, 1);
330
+ },
331
+ // 弹框 -点击取消
332
+ clickCancel () {
333
+ this.closeModal();
334
+ },
335
+ // 弹框 -点击确认选择
336
+ clickConfirm () {
337
+ this.closeModal();
338
+
339
+ this.curValList = this.newValList;
340
+ },
341
+
342
+ /* ----------- 接口方法和加工方法 --------- */
343
+ // 处理数据
344
+ transformDepartmentList (data = [], selectKeys = []) {
345
+ return data.map(item => ({
346
+ ...item,
347
+ title: item.name,
348
+ checked: selectKeys.includes(item._key),
349
+ expand: !!(item.children && item.children.length && item.level < 2),
350
+ children: this.transformDepartmentList(item.children, selectKeys)
351
+ }));
352
+ },
353
+ // 接口 -获取部门列表数据
354
+ getListData () {
355
+ this.loading = true;
356
+ this.$https({
357
+ url: {
358
+ module: "company",
359
+ name: this.isCascader ? "compDepartCascaderAll" : "compDepartIndex"
360
+ },
361
+ params: {
362
+ search: this.searchName
363
+ ? {
364
+ name: {
365
+ "$regex": `.*${this.$speciaWord(this.searchName)}.*`, $options: "i"
366
+ }
367
+ }
368
+ : undefined,
369
+ searchString: this.searchString,
370
+ nameSearchFlag: !this.changeOnSelect // 以整个链的数据返回匹配到的部门
371
+ },
372
+ callback: data => {
373
+ this.loading = false;
374
+ this.departmentList = data.list;
375
+ }
376
+ });
377
+ }
378
+ }
379
+ };
380
+ </script>
@@ -0,0 +1,191 @@
1
+ <template>
2
+ <div class="DepartmentMenu">
3
+ <div
4
+ v-if="!parent && canEdit"
5
+ :class="{
6
+ 'DepartmentMenu-item': true,
7
+ 'DepartmentMenu-item-select': departSelected._key === 'noDepart' || departSelected === null
8
+ }"
9
+ >
10
+ <div
11
+ :class="{
12
+ 'DepartmentMenu-item-name': true,
13
+ 'DepartmentMenu-item-name-select': departSelected._key === 'noDepart' || departSelected === null
14
+ }"
15
+ @click="departClick({'_key': 'noDepart'})"
16
+ >
17
+ 无部门员工
18
+ </div>
19
+ </div>
20
+
21
+ <div
22
+ v-for="(depart, departIndex) in list"
23
+ :key="depart._key"
24
+ :class="{
25
+ 'DepartmentMenu-item': true,
26
+ 'DepartmentMenu-item-select': departSelected._key === depart._key
27
+ }"
28
+ >
29
+ <div
30
+ :class="{
31
+ 'DepartmentMenu-item-name': true,
32
+ 'DepartmentMenu-item-name-select': departSelected._key === depart._key
33
+ }"
34
+ @click.stop="departClick(depart)"
35
+ >
36
+ <span>
37
+ <Icon
38
+ v-if="depart.children && depart.children.length"
39
+ :type="iconType(depart)"
40
+ @click.stop="toggleChildren(depart)"
41
+ />
42
+ <span class="DepartmentMenu-item-name-text">
43
+ {{ depart.name }}
44
+ </span>
45
+ </span>
46
+
47
+ <dsh-dropdown
48
+ v-if="canEdit"
49
+ trigger="hover"
50
+ :list="dropdownList"
51
+ @click="$dispatchEvent($event, undefined, depart, departIndex, parent)"
52
+ ></dsh-dropdown>
53
+ </div>
54
+
55
+ <template v-if="depart.isShowChildren">
56
+ <department-menu
57
+ :list="depart.children"
58
+ style="margin-left:15px"
59
+ :parent="depart"
60
+ :propSelect="departSelected"
61
+ :canEdit="canEdit"
62
+ @showAddModal="showAddModal"
63
+ @showChange="showChilrenChange"
64
+ @deleteDepart="deleteDepart"
65
+ @departClick="departClick"
66
+ @removeDepartment="removeDepartment"
67
+ ></department-menu>
68
+ </template>
69
+ </div>
70
+ </div>
71
+ </template>
72
+
73
+ <script>
74
+ export default {
75
+ name: "DepartmentMenu",
76
+ props: {
77
+ canEdit: {
78
+ type: Boolean,
79
+ default: false
80
+ },
81
+ parent: Object,
82
+ list: {
83
+ type: Array,
84
+ default () {
85
+ return [];
86
+ }
87
+ },
88
+ propSelect: {
89
+ type: Object,
90
+ default: () => {
91
+ return {_key: "noDepart"};
92
+ }
93
+ }
94
+ },
95
+ data () {
96
+ return {
97
+ deleteModal: true,
98
+ dropdownList: [
99
+ {
100
+ name: "添加下级部门",
101
+ type: "addSub",
102
+ event: "addSubDepartment",
103
+ icon: "ios-add-circle-outline"
104
+ },
105
+ {
106
+ name: "修改部门信息",
107
+ type: "change",
108
+ event: "showChange",
109
+ icon: "ios-create-outline"
110
+ },
111
+ {
112
+ name: "删除部门",
113
+ type: "delete",
114
+ event: "tipDelete",
115
+ icon: "ios-trash-outline"
116
+ },
117
+ {
118
+ name: "移动部门",
119
+ type: "remove",
120
+ event: "removeDepartment",
121
+ icon: "ios-move"
122
+ }
123
+ ]
124
+ };
125
+ },
126
+ computed: {
127
+ iconType () {
128
+ return function (depart) {
129
+ return depart.isShowChildren ? "ios-arrow-down" : "ios-arrow-forward";
130
+ };
131
+ },
132
+ departSelected: {
133
+ get () {
134
+ return this.propSelect;
135
+ },
136
+ set (val) {
137
+ this.propSelect._key = val._key;
138
+ }
139
+ }
140
+ },
141
+ created () {
142
+ },
143
+ methods: {
144
+ addSubDepartment (dropdownItem, dropdownIndex, current, currentUserIndex, parent) {
145
+ this.$emit("showAddModal", current);
146
+ },
147
+ addPeerDepartment () {
148
+ this.$emit("showAddModal", this.parent);
149
+ },
150
+ departClick (department) {
151
+ this.departSelected = department;
152
+ this.$emit("departClick", department);
153
+ },
154
+ toggleChildren (depart) {
155
+ depart.isShowChildren = !depart.isShowChildren;
156
+ this.$forceUpdate();
157
+ },
158
+ showAddModal (parent) {
159
+ this.$emit("showAddModal", parent);
160
+ },
161
+ deleteDepart (current) {
162
+ this.departSelected = {_key: "noDepart"};
163
+ this.$emit("deleteDepart", current);
164
+ },
165
+ // 提示删除
166
+ tipDelete (dropdownItem, dropdownIndex, current, currentUserIndex, parent) {
167
+ this.$Modal.confirm({
168
+ title: "警告",
169
+ content: "确定要删除该部门吗?",
170
+ onOk: () => {
171
+ this.deleteDepart(current);
172
+ },
173
+ onCancel: () => {
174
+ this.$Message.info("已取消!");
175
+ }
176
+ });
177
+ },
178
+ // 修改部门
179
+ showChange (dropdownItem, dropdownIndex, current, currentUserIndex, parent) {
180
+ this.$emit("showChange", current);
181
+ },
182
+ showChilrenChange (depart) {
183
+ this.$emit("showChange", depart);
184
+ },
185
+ // 移动部门
186
+ removeDepartment (dropdownItem, dropdownIndex, current, currentUserIndex, parent) {
187
+ this.$emit("removeDepartment", dropdownItem, dropdownIndex, current, currentUserIndex, parent);
188
+ }
189
+ }
190
+ };
191
+ </script>