bri-components 1.2.53 → 1.2.55

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 (28) hide show
  1. package/package.json +2 -2
  2. package/src/components/controls/{BriControlInput.vue → DshControlInput.vue} +15 -12
  3. package/src/components/controls/base/DshCascader/DshCascader.vue +260 -341
  4. package/src/components/controls/base/DshCascader/cascaderMixin.js +176 -0
  5. package/src/components/controls/base/DshCascader/cascaderModal.vue +374 -0
  6. package/src/components/controls/base/DshCascader/cascaderPicker.vue +406 -0
  7. package/src/components/controls/base/DshCascader/cascaderPickerMixin.js +202 -0
  8. package/src/components/controls/base/DshCoordinates.vue +6 -10
  9. package/src/components/controls/base/DshDate/DshDaterange.vue +15 -12
  10. package/src/components/controls/base/DshEditor.vue +1 -1
  11. package/src/components/controls/controlMixin.js +14 -4
  12. package/src/components/controls/senior/BriLabels.vue +5 -10
  13. package/src/components/controls/senior/flatTable.vue +119 -3
  14. package/src/components/controls/senior/flatTableImportModal.vue +279 -0
  15. package/src/components/controls/senior/selectDepartments.vue +5 -19
  16. package/src/components/controls/senior/selectUsers/{DepartmentMenu.vue → departMenu.vue} +26 -16
  17. package/src/components/controls/senior/selectUsers/selectUsers.vue +10 -23
  18. package/src/components/form/DshDefaultSearch.vue +1 -1
  19. package/src/components/list/DshBox/DshCrossTable.vue +13 -1
  20. package/src/components/small/BriTooltip.vue +6 -0
  21. package/src/index.js +5 -5
  22. package/src/styles/components/index.less +0 -1
  23. package/src/styles/components/list/DshBox/DshCrossTable.less +32 -22
  24. package/src/styles/components/small/BriTooltip.less +0 -25
  25. package/src/styles/global/base.less +3 -3
  26. package/src/styles/global/control.less +3 -3
  27. package/src/styles/reset-iview-other.less +21 -0
  28. package/src/components/controls/base/DshCascader/InfoCascader.vue +0 -319
@@ -1,359 +1,289 @@
1
1
  <template>
2
- <div class="DshCascader">
3
- <!-- 编辑 -->
4
- <template v-if="canEdit">
5
- <!-- 多选 多选的filterable必须是false,不然出bug -->
6
- <template v-if="multipleMode">
7
- <Cascader
8
- class="DshCascader-edit-multiple"
9
- :value="multipleSelectVal"
10
- :data="renderCascaderData"
2
+ <!-- 单选模式 编辑 -->
3
+ <div
4
+ v-if="!multipleMode && canEdit"
5
+ class="DshCascader"
6
+ >
7
+ <!-- 简洁方式 -->
8
+ <template v-if="showType === 'simple'">
9
+ <Cascader
10
+ :value="curValKeyList"
11
+ :data="renderCascaderData"
12
+ :placeholder="selfPropsObj._placeholder"
13
+ :disabled="selfPropsObj._disabled"
14
+ :clearable="selfPropsObj._clearable"
15
+ :size="selfPropsObj._size"
16
+ :filterable="filterable"
17
+ :render-format="renderFormat"
18
+ :change-on-select="changeOnSelect"
19
+ :transfer="selfPropsObj._transfer"
20
+ :transfer-class-name="selfPropsObj._transferClassName"
21
+ :load-data="loadData"
22
+ @on-visible-change="changeVisible"
23
+ @on-change="changeSelect"
24
+ @click.native="clickCascader"
25
+ ></Cascader>
26
+ </template>
27
+
28
+ <!-- 弹框方式 -->
29
+ <template v-else-if="showType === 'custom'">
30
+ <cascader-modal
31
+ v-model="showModal"
32
+ :activeValue="curValList"
33
+ :data="cascaderData"
34
+ :propsObj="selfPropsObj"
35
+ @confirm="confirmCb"
36
+ >
37
+ <dsh-control-input
38
+ :class="commonClass"
39
+ :value="curValName"
11
40
  :disabled="selfPropsObj._disabled"
12
- :change-on-select="changeOnSelect"
13
- :clearable="selfPropsObj._clearable"
14
- :size="selfPropsObj._size"
15
- :filterable="false"
16
- :transfer="selfPropsObj._transfer"
17
- :transfer-class-name="selfPropsObj._transferClassName"
18
- :load-data="loadData"
19
- @on-visible-change="multipleVisibleChange"
20
- @on-change="createItem"
21
- >
22
- <bri-control-input
23
- :class="{
24
- ...commonClass,
25
- 'DshCascader-edit-multiple-edit': true,
26
- 'DshCascader-row-edit': isFullRow && multipleMode
27
- }"
28
- :canEdit="finalCanEdit"
29
- :value="curValNameList"
30
- :inputIcon="inputIcon"
31
- :propsObj="selfPropsObj"
32
- @deleteItem="clickDeleteItem"
33
- @clear="clickClear"
34
- @click.native="clickInput"
35
- ></bri-control-input>
36
- </Cascader>
37
- </template>
41
+ :propsObj="selfPropsObj"
42
+ @clear="clickClear"
43
+ ></dsh-control-input>
44
+ </cascader-modal>
45
+ </template>
38
46
 
39
- <!-- 单选 -->
40
- <template v-else>
41
- <!-- 弹框方式 -->
42
- <template v-if="showMode === 'custom'">
43
- <bri-control-input
44
- :class="{
45
- ...commonClass,
46
- 'DshCascader-edit-custom': true
47
- }"
48
- :canEdit="finalCanEdit"
49
- :value="curValName"
50
- :inputIcon="inputIcon"
51
- :propsObj="selfPropsObj"
52
- @clear="clickClear"
53
- @click.native="openModal"
54
- ></bri-control-input>
47
+ <!-- 确认面板方式 -->
48
+ <template v-else>
49
+ <cascader-picker
50
+ v-model="showModal"
51
+ :activeValue="curValList"
52
+ :data="cascaderData"
53
+ :propsObj="selfPropsObj"
54
+ @confirm="confirmCb"
55
+ >
56
+ <dsh-control-input
57
+ :class="commonClass"
58
+ :value="curValName"
59
+ :disabled="selfPropsObj._disabled"
60
+ :propsObj="selfPropsObj"
61
+ @clear="clickClear"
62
+ ></dsh-control-input>
63
+ </cascader-picker>
64
+ </template>
65
+ </div>
66
+
67
+ <!-- 单选模式 查看 -->
68
+ <div
69
+ v-else-if="!multipleMode && !canEdit"
70
+ class="DshCascader"
71
+ >
72
+ <!-- 有值 -->
73
+ <bri-tooltip
74
+ v-if="!$isEmptyData(curValList)"
75
+ :content="showVal"
76
+ placement="top"
77
+ maxWidth="200"
78
+ :transfer="true"
79
+ >
80
+ <div :class="commonClass">
81
+ {{ showVal }}
82
+ </div>
83
+ </bri-tooltip>
55
84
 
56
- <!-- 内容弹框 -->
57
- <info-cascader
58
- v-if="showModal"
59
- :showModal="showModal"
60
- v-model="curValList"
61
- :data="cascaderData"
62
- :propsObj="selfPropsObj"
63
- @changeShowModal="toggleModal"
64
- @change="change"
65
- ></info-cascader>
66
- </template>
85
+ <!-- 无值 -->
86
+ <div
87
+ v-else
88
+ :class="commonClass"
89
+ >
90
+ {{ emptyShowVal }}
91
+ </div>
92
+ </div>
93
+
94
+ <!-- 多选模式 编辑 -->
95
+ <div
96
+ v-else-if="multipleMode && canEdit"
97
+ class="DshCascaders"
98
+ >
99
+ <!-- 简洁方式 多选的filterable必须是false,不然出bug -->
100
+ <template v-if="showType === 'simple'">
101
+ <Cascader
102
+ :data="renderCascaderData"
103
+ :disabled="selfPropsObj._disabled"
104
+ :clearable="selfPropsObj._clearable"
105
+ :size="selfPropsObj._size"
106
+ :filterable="false"
107
+ :render-format="renderFormat"
108
+ :change-on-select="changeOnSelect"
109
+ :transfer="selfPropsObj._transfer"
110
+ :transfer-class-name="selfPropsObj._transferClassName"
111
+ :load-data="loadData"
112
+ @on-visible-change="changeMulVisible"
113
+ @on-change="changeMulSelect"
114
+ @click.native="clickCascader"
115
+ >
116
+ <dsh-control-input
117
+ :class="commonClass"
118
+ :value="curValNameList"
119
+ :disabled="selfPropsObj._disabled"
120
+ :propsObj="selfPropsObj"
121
+ @deleteItem="clickDeleteItem"
122
+ @clear="clickClear"
123
+ @click.native="clickInput"
124
+ ></dsh-control-input>
125
+ </Cascader>
126
+ </template>
67
127
 
68
- <!-- 输入框方式 -->
69
- <template v-else>
70
- <Cascader
71
- class="DshCascader-edit-single"
72
- :value="curValList"
73
- :data="renderCascaderData"
74
- :placeholder="selfPropsObj._placeholder"
75
- :disabled="selfPropsObj._disabled"
76
- :change-on-select="changeOnSelect"
77
- :clearable="selfPropsObj._clearable"
78
- :size="selfPropsObj._size"
79
- :filterable="selfPropsObj._filterable"
80
- :render-format="selfPropsObj._renderFormat"
81
- :transfer="selfPropsObj._transfer"
82
- :transfer-class-name="selfPropsObj._transferClassName"
83
- :load-data="loadData"
84
- @on-visible-change="visibleChange"
85
- @on-change="changeVal"
86
- @click="clickCascader"
87
- ></Cascader>
88
- </template>
89
- </template>
128
+ <!-- 弹框方式 -->
129
+ <template v-else-if="showType === 'custom'">
130
+ <cascader-modal
131
+ v-model="showModal"
132
+ :data="cascaderData"
133
+ :propsObj="selfPropsObj"
134
+ @confirm="confirmMulCb"
135
+ >
136
+ <dsh-control-input
137
+ :class="commonClass"
138
+ :value="curValNameList"
139
+ :disabled="selfPropsObj._disabled"
140
+ :propsObj="selfPropsObj"
141
+ @deleteItem="clickDeleteItem"
142
+ @clear="clickClear"
143
+ ></dsh-control-input>
144
+ </cascader-modal>
90
145
  </template>
91
146
 
92
- <!-- 查看 -->
147
+ <!-- 确认面板方式 -->
93
148
  <template v-else>
94
- <!-- 多选 -->
95
- <template v-if="multipleMode">
96
- <bri-tooltip
97
- :content="showMulVal"
98
- placement="top"
99
- maxWidth="200"
100
- :transfer="true"
101
- >
102
- <div :class="{
103
- ...commonClass,
104
- 'DshCascader-show-multiple': true,
105
- 'DshCascader-row-show': !isUnitShow && isFullRow && multipleMode
106
- }">
107
- <!-- 有值 -->
108
- <dsh-tags
109
- v-if="!$isEmptyData(curValList)"
110
- class="text"
111
- :list="curValNameList"
112
- ></dsh-tags>
149
+ <cascader-picker
150
+ v-model="showModal"
151
+ :data="cascaderData"
152
+ :propsObj="selfPropsObj"
153
+ @confirm="confirmMulCb"
154
+ >
155
+ <dsh-control-input
156
+ :class="commonClass"
157
+ :value="curValNameList"
158
+ :disabled="selfPropsObj._disabled"
159
+ :propsObj="selfPropsObj"
160
+ @deleteItem="clickDeleteItem"
161
+ @clear="clickClear"
162
+ ></dsh-control-input>
163
+ </cascader-picker>
164
+ </template>
165
+ </div>
113
166
 
114
- <!-- 无值 -->
115
- <template v-else>
116
- {{ emptyShowVal }}
117
- </template>
118
- </div>
119
- </bri-tooltip>
120
- </template>
167
+ <!-- 多选模式 查看 -->
168
+ <div
169
+ v-else
170
+ class="DshCascaders-show"
171
+ >
172
+ <!-- 有值 -->
173
+ <bri-tooltip
174
+ v-if="!$isEmptyData(curValList)"
175
+ :content="showMulVal"
176
+ placement="top"
177
+ maxWidth="200"
178
+ :transfer="true"
179
+ >
180
+ <div :class="{
181
+ ...commonClass,
182
+ 'DshCascader-show-row': isFullRow && !isUnitShow
183
+ }">
184
+ <dsh-tags
185
+ class="text"
186
+ :list="curValNameList"
187
+ ></dsh-tags>
188
+ </div>
189
+ </bri-tooltip>
121
190
 
122
- <!-- 单选 -->
123
- <template v-else>
124
- <bri-tooltip
125
- :content="showVal"
126
- placement="top"
127
- maxWidth="200"
128
- :transfer="true"
129
- >
130
- <div :class="{
131
- ...commonClass,
132
- 'DshCascader-show-single': true
133
- }">
134
- {{ showVal }}
135
- </div>
136
- </bri-tooltip>
137
- </template>
138
- </template>
191
+ <!-- 无值 -->
192
+ <div
193
+ v-else
194
+ :class="{
195
+ ...commonClass
196
+ }"
197
+ >
198
+ {{ emptyShowVal }}
199
+ </div>
139
200
  </div>
140
201
  </template>
141
202
 
142
203
  <script>
143
- import { regionData, userIndustryData } from "bri-datas";
144
- import controlMixin from "../../controlMixin.js";
145
- import InfoCascader from "./InfoCascader.vue";
146
-
147
- const loop = function (data = [], level, parentCode, filterVals = []) {
148
- if (data && filterVals.length) {
149
- data = data.filter(item => filterVals.includes(item._key));
150
- }
151
- return data
152
- ? data.reduce((arr, item) => {
153
- const newItem = {
154
- ...item,
155
- value: item._key,
156
- label: item.name,
157
- codeArr: [ ...(parentCode || []), item._key ]
158
- };
159
- if (!level || level > item.level) {
160
- newItem.children = loop(item.children, level, newItem.codeArr);
161
- newItem.children.length && (newItem.loading = false); // 此代码为了所请求的级出现继续加载的箭头图标
162
- } else {
163
- newItem.children = [];
164
- }
165
- arr.push(newItem);
166
-
167
- return arr;
168
- }, [])
169
- : [];
170
- };
204
+ import cascaderMixin from "./cascaderMixin.js";
205
+ import cascaderPicker from "./cascaderPicker.vue";
206
+ import cascaderModal from "./cascaderModal.vue";
171
207
 
172
208
  export default {
173
209
  name: "DshCascader",
174
210
  mixins: [
175
- controlMixin
211
+ cascaderMixin
176
212
  ],
177
213
  components: {
178
- InfoCascader
214
+ cascaderPicker,
215
+ cascaderModal
179
216
  },
180
217
  props: {},
181
218
  data () {
182
219
  return {
183
- renderDataFlag: true,
184
- clickInputFlag: true,
220
+ renderAll: false,
221
+ clickFlag: true,
185
222
  isVisible: false,
186
- multipleSelectVal: [], // 必须要,每次选完之后再选,需清空上次选的
187
- selectVal: [],
188
-
189
- showModal: false
223
+ curSelectVal: []
190
224
  };
191
225
  },
192
226
  computed: {
193
- // 级联拼接符
194
- joinSymbol () {
195
- return this.propsObj._joinSymbol || "/";
196
- },
197
- nameKey () {
198
- return this.propsObj._nameKey || "name";
199
- },
200
-
201
227
  selfPropsObj () {
202
228
  return {
203
- _showMode: false,
204
- _filterable: true,
205
- _changeOnSelect: false,
206
- _renderFormat: (label) => label.join(this.joinSymbol),
229
+ _icon: this.isVisible ? "ios-arrow-up" : "ios-arrow-down",
230
+ _showMode: "default", // 只有单选模式有效,值为"default", "custom", "simple"
207
231
  _transfer: true,
208
232
 
209
- ...this.propsObj,
210
- ...this.commonDealPropsObj
233
+ ...this.basePropsObj,
234
+
235
+ // 默认模式-多选时 暂不支持搜索
236
+ _filterable: this.basePropsObj._showMode === "simple" && this.multipleMode
237
+ ? false
238
+ : this.basePropsObj._filterable
211
239
  };
212
240
  },
213
- // 每级菜单都可取值
214
- changeOnSelect () {
215
- return this.isOnSearch ? true : this.selfPropsObj._changeOnSelect;
216
- },
217
- cascaderLevel () {
218
- return this.selfPropsObj._cascaderLevel;
219
- },
220
- cascaderFilterVals () {
221
- return this.selfPropsObj._cascaderFilterVals;
222
- },
223
- // 只有单选模式有效
224
- showMode () {
225
- return this.selfPropsObj._showMode;
226
- },
227
- inputIcon () {
228
- return this.isVisible ? "ios-arrow-up" : "ios-arrow-down";
229
- },
230
241
 
231
- originData () {
232
- return ["region", "regions"].includes(this.controlType)
233
- ? regionData
234
- : ["userIndustry"].includes(this.controlType)
235
- ? userIndustryData
236
- : this.selfPropsObj._data;
237
- },
238
- cascaderData: {
239
- get () {
240
- return loop(this.originData, this.cascaderLevel, undefined, this.cascaderFilterVals);
241
- },
242
- set () {}
243
- },
244
242
  renderCascaderData () {
245
- return this.renderDataFlag
246
- ? this.cascaderData.map(item => {
243
+ return this.renderAll
244
+ ? this.cascaderData
245
+ : this.cascaderData.map(item => {
247
246
  return {
248
247
  ...item,
249
248
  children: []
250
249
  };
251
- })
252
- : this.cascaderData;
253
- },
254
- curValName () {
255
- return this.$getTreeLinealDatas(this.curValList, this.cascaderData, this.nameKey).join(this.joinSymbol);
256
- },
257
- showVal () {
258
- return this.$isEmptyData(this.curValList)
259
- ? this.emptyShowVal
260
- : this.curValName;
261
- },
262
- // 多选用
263
- curValNameList () {
264
- return this.curValList.map(item =>
265
- this.$getTreeLinealDatas(item, this.cascaderData, this.nameKey).join(this.joinSymbol)
266
- );
267
- },
268
- showMulVal () {
269
- return this.$isEmptyData(this.curValList)
270
- ? this.emptyShowVal
271
- : this.curValNameList.join("、");
250
+ });
272
251
  }
273
252
  },
274
253
  created () {},
275
254
  methods: {
255
+ /* --------- 简洁方式 ------- */
276
256
  // 动态加载数据
277
257
  loadData (treeItem, cb) {
278
- let list = this.$getTreeLinealDatas(treeItem.codeArr, this.cascaderData);
279
- treeItem.children = list[list.length - 1].children.map(item => ({ ...item, children: [] }));
280
-
281
- cb();
282
- },
283
- // 点击清除
284
- clickClear () {
285
- this.curValList = [];
286
- },
287
-
288
- /* --------- 多选模式 -------- */
289
- clickInput (e) {
290
- if (!this.finalCanEdit) {
291
- e.stopPropagation();
292
- }
293
- },
294
- // 展开和关闭弹窗时触发
295
- multipleVisibleChange (bool) {
296
- this.isVisible = bool;
297
-
298
- if (bool === false) {
299
- if (this.selectVal.length) {
300
- if (this.curValList.some(item => JSON.stringify(item) === JSON.stringify(this.selectVal))) {
301
- this.$Message.error({
302
- content: `"${this.$getTreeLinealDatas(this.selectVal, this.cascaderData, this.nameKey).join(this.joinSymbol)}"已选择,请勿重复选择!`,
303
- duration: 5
304
- });
305
- } else {
306
- this.curValList = [...this.curValList, this.selectVal];
307
- }
308
- }
258
+ const list = this.$getTreeLinealDatas(treeItem.keys, this.cascaderData, undefined, this.saveKey);
259
+ const lastOption = list[list.length - 1];
309
260
 
310
- this.selectVal = [];
311
- this.multipleSelectVal = [];
312
- }
313
- },
314
- // 添加
315
- createItem (selectVal, ...params) {
316
- if (this.isVisible) {
317
- this.selectVal = selectVal;
318
- }
319
- },
320
- // 删除
321
- clickDeleteItem (item, index) {
322
- this.curValList.splice(index, 1);
323
- this.curValList = [...this.curValList];
324
- },
261
+ treeItem.children = lastOption
262
+ ? lastOption.children.map(item =>
263
+ ({
264
+ ...item,
265
+ children: []
266
+ })
267
+ )
268
+ : [];
325
269
 
326
- /* -------- 单选模式 -弹窗方式 ------- */
327
- // 弹窗方式的 -打开模态框
328
- openModal () {
329
- if (this.finalCanEdit) {
330
- this.showModal = true;
331
- }
332
- },
333
- // 弹窗方式的 -关闭模态框
334
- toggleModal (bool) {
335
- this.showModal = bool;
270
+ cb();
336
271
  },
337
-
338
- /* -------- 单选模式 -输入框方式 ------- */
339
- // 默认方式的
340
272
  clickCascader () {
341
- if (this.finalCanEdit) {
342
- if (
343
- ["cascader"].includes(this.selfPropsObj._type) &&
344
- this.selfPropsObj._filterable === true &&
345
- this.renderDataFlag === true &&
346
- this.clickInputFlag === true
347
- ) {
348
- this.clickInputFlag = false; // 这个处理其实觉大概率没必要,有没有不受影响
349
- setTimeout(() => {
350
- this.renderDataFlag = false;
351
- }, 0);
352
- }
273
+ if (
274
+ !this.selfPropsObj._disabled &&
275
+ this.filterable === true &&
276
+ this.renderAll === false &&
277
+ this.clickFlag === true
278
+ ) {
279
+ this.clickFlag = false; // 这个处理其实觉大概率没必要,有没有不受影响
280
+ setTimeout(() => {
281
+ this.renderAll = true;
282
+ }, 0);
353
283
  }
354
284
  },
355
- // 默认方式的 -展开和关闭弹窗时触发
356
- visibleChange (bool) {
285
+ // 简洁方式-单选 -展开和关闭弹窗时触发
286
+ changeVisible (bool) {
357
287
  if (bool) {
358
288
  this.isVisible = bool;
359
289
  } else {
@@ -362,10 +292,26 @@
362
292
  }, 0);
363
293
  }
364
294
  },
365
- // 默认方式的 -值改变
366
- changeVal (val, ...params) {
367
- if (this.isVisible || !val.length) {
368
- this.curValList = val;
295
+ // 简洁方式-单选 -选项变化
296
+ changeSelect (value, selectedOptions) {
297
+ if (this.isVisible || !value.length) {
298
+ this.curValList = selectedOptions.map(item => item[this.saveKey]);
299
+ }
300
+ },
301
+ // 简洁方式-多选 -展开和关闭弹窗时触发
302
+ changeMulVisible (bool) {
303
+ this.isVisible = bool;
304
+
305
+ if (bool === false && this.curSelectVal.length) {
306
+ this.confirmMulCb(this.curSelectVal);
307
+
308
+ this.curSelectVal = [];
309
+ }
310
+ },
311
+ // 简洁方式-多选 -选项变化
312
+ changeMulSelect (value, selectedOptions) {
313
+ if (this.isVisible) {
314
+ this.curSelectVal = selectedOptions.map(item => item[this.saveKey]);
369
315
  }
370
316
  }
371
317
  },
@@ -379,49 +325,22 @@
379
325
 
380
326
  <style lang="less">
381
327
  .DshCascader {
382
- width: 100%;
383
328
 
384
- &-edit {
385
-
386
- // 多选
387
- &-multiple {
388
- width: 100%;
389
-
390
- &-edit {}
391
- }
392
-
393
- // 单选 -新模式
394
- &-custom {
395
- width: 100%;
396
- }
397
-
398
- // 单选 -默认模式
399
- &-single {
400
- width: 100%;
401
- }
402
- }
329
+ }
403
330
 
404
- // 查看
331
+ // 多选
332
+ .DshCascaders {
405
333
  &-show {
406
- &-multiple {}
407
-
408
- &-single {}
409
- }
410
-
411
- // 多选类型且独自一行时
412
- &-row {
413
- &-edit {}
414
-
415
- &-show {
416
- height: auto;
334
+ height: auto;
417
335
 
336
+ &-row {
418
337
  .text,
419
338
  .overflow {
339
+ .bri-scrollbar3();
420
340
  width: 100%;
421
341
  height: 100%;
422
342
  white-space: normal;
423
343
  overflow: auto;
424
- .bri-scrollbar3();
425
344
  }
426
345
  }
427
346
  }