bri-components 1.3.68 → 1.3.69
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.
- package/package.json +1 -1
- package/src/components/controls/DshControlInput.vue +19 -2
- package/src/components/controls/base/DshCascader/DshCascader.vue +1 -0
- package/src/components/controls/mixins/cascaderMixin.js +93 -48
- package/src/components/list/DshCascaderTable.vue +3 -0
- package/src/components/list/DshFlatTable.vue +3 -3
- package/src/components/list/DshTreeTable.vue +3 -3
- package/src/components/list/common/importModal.vue +9 -9
- package/src/components/list/mixins/tableBaseMixin.js +16 -12
package/package.json
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div
|
|
3
3
|
class="DshControlInput"
|
|
4
|
+
:style="{
|
|
5
|
+
height: heightAuto ? 'auto' : '32px',
|
|
6
|
+
minHeight: heightAuto ? '32px' : undefined,
|
|
7
|
+
}"
|
|
4
8
|
@mouseenter="isHover = true"
|
|
5
9
|
@mouseleave="isHover = false"
|
|
6
10
|
>
|
|
@@ -11,6 +15,10 @@
|
|
|
11
15
|
<dsh-tags
|
|
12
16
|
v-if="Array.isArray(value)"
|
|
13
17
|
class="overflow"
|
|
18
|
+
:class="{
|
|
19
|
+
overflow: true,
|
|
20
|
+
'overflow-auto': heightAuto
|
|
21
|
+
}"
|
|
14
22
|
:list="value"
|
|
15
23
|
:propsObj="{
|
|
16
24
|
disabled: disabled,
|
|
@@ -65,11 +73,16 @@
|
|
|
65
73
|
export default {
|
|
66
74
|
name: "DshControlInput",
|
|
67
75
|
props: {
|
|
76
|
+
value: [Array, Object, String],
|
|
77
|
+
|
|
78
|
+
heightAuto: {
|
|
79
|
+
type: Boolean,
|
|
80
|
+
default: false
|
|
81
|
+
},
|
|
68
82
|
disabled: {
|
|
69
83
|
type: Boolean,
|
|
70
84
|
default: false
|
|
71
85
|
},
|
|
72
|
-
value: [Array, Object, String],
|
|
73
86
|
propsObj: {
|
|
74
87
|
type: Object,
|
|
75
88
|
default () {
|
|
@@ -101,7 +114,6 @@
|
|
|
101
114
|
|
|
102
115
|
<style lang="less" scoped>
|
|
103
116
|
.DshControlInput {
|
|
104
|
-
height: 32px;
|
|
105
117
|
padding: 0px 0px 0px 7px;
|
|
106
118
|
line-height: 24px;
|
|
107
119
|
.dsh-flex-row-between-center();
|
|
@@ -117,6 +129,11 @@
|
|
|
117
129
|
overflow-x: auto;
|
|
118
130
|
overflow-y: hidden;
|
|
119
131
|
white-space: nowrap;
|
|
132
|
+
|
|
133
|
+
&-auto {
|
|
134
|
+
height: auto;
|
|
135
|
+
white-space: normal;
|
|
136
|
+
}
|
|
120
137
|
}
|
|
121
138
|
|
|
122
139
|
.placeholder {
|
|
@@ -14,18 +14,21 @@ export default {
|
|
|
14
14
|
basePropsObj () {
|
|
15
15
|
const _joinSymbol = this.propsObj._joinSymbol || "/";
|
|
16
16
|
return {
|
|
17
|
+
_saveKey: "_key",
|
|
18
|
+
_valueKey: "code",
|
|
19
|
+
_nameKey: "name",
|
|
20
|
+
|
|
17
21
|
_regionType: "default", // "default", "benji", "userIndustry"
|
|
18
22
|
_showMode: "default", // "default", "custom", "simple"
|
|
19
23
|
colorMap: resourceData.colorMap,
|
|
20
24
|
_useColor: false,
|
|
21
|
-
_saveKey: "_key",
|
|
22
|
-
_valueKey: "code",
|
|
23
|
-
_nameKey: "name",
|
|
24
25
|
_filterable: true, // 是否支持搜索
|
|
25
|
-
|
|
26
|
+
_cascaderLevel: undefined, // 级联数据取到第几级
|
|
26
27
|
_reverseFilter: false, // 是否反向过滤,默认正向过滤
|
|
27
|
-
_cascaderFilterVals: [], //
|
|
28
|
+
_cascaderFilterVals: [], // 过滤的数据的第一级选项
|
|
29
|
+
_cascaderSelectVals: [], // 过滤的数据的级联选项
|
|
28
30
|
_renderFormat: (labels) => labels.join(_joinSymbol),
|
|
31
|
+
_data: [],
|
|
29
32
|
|
|
30
33
|
...this.propsObj,
|
|
31
34
|
...this.commonDealPropsObj,
|
|
@@ -36,6 +39,16 @@ export default {
|
|
|
36
39
|
_joinSymbol: _joinSymbol // 级联拼接符
|
|
37
40
|
};
|
|
38
41
|
},
|
|
42
|
+
saveKey () {
|
|
43
|
+
return this.selfPropsObj._saveKey;
|
|
44
|
+
},
|
|
45
|
+
valueKey () {
|
|
46
|
+
return this.selfPropsObj._valueKey;
|
|
47
|
+
},
|
|
48
|
+
nameKey () {
|
|
49
|
+
return this.selfPropsObj._nameKey;
|
|
50
|
+
},
|
|
51
|
+
|
|
39
52
|
regionType () {
|
|
40
53
|
return this.selfPropsObj._regionType;
|
|
41
54
|
},
|
|
@@ -48,24 +61,21 @@ export default {
|
|
|
48
61
|
useColor () {
|
|
49
62
|
return this.selfPropsObj._useColor;
|
|
50
63
|
},
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
},
|
|
54
|
-
valueKey () {
|
|
55
|
-
return this.selfPropsObj._valueKey;
|
|
56
|
-
},
|
|
57
|
-
nameKey () {
|
|
58
|
-
return this.selfPropsObj._nameKey;
|
|
59
|
-
},
|
|
64
|
+
// filterable () {
|
|
65
|
+
// return this.selfPropsObj._filterable;
|
|
66
|
+
// },
|
|
60
67
|
cascaderLevel () {
|
|
61
68
|
return this.selfPropsObj._cascaderLevel;
|
|
62
69
|
},
|
|
63
70
|
reverseFilter () {
|
|
64
71
|
return this.selfPropsObj._reverseFilter;
|
|
65
72
|
},
|
|
66
|
-
|
|
73
|
+
filterVals () {
|
|
67
74
|
return this.selfPropsObj._cascaderFilterVals;
|
|
68
75
|
},
|
|
76
|
+
cascaderVals () {
|
|
77
|
+
return this.selfPropsObj._cascaderSelectVals;
|
|
78
|
+
},
|
|
69
79
|
renderFormat () {
|
|
70
80
|
return this.selfPropsObj._renderFormat;
|
|
71
81
|
},
|
|
@@ -80,51 +90,79 @@ export default {
|
|
|
80
90
|
: this.selfPropsObj._data;
|
|
81
91
|
},
|
|
82
92
|
cascaderAllData () {
|
|
83
|
-
const loop = (arr = [], level, parentKeys = [], filterVals = [], isMobile = false) => {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
: filterVals.includes(item[this.saveKey])
|
|
89
|
-
);
|
|
90
|
-
}
|
|
93
|
+
const loop = (arr = [], level, parentKeys = [], filterVals = [], cascaderVals = [], reverseFilter = false, isMobile = false, saveKey = "_key", valueKey = "code", nameKey = "name") => {
|
|
94
|
+
arr = cascaderVals.length
|
|
95
|
+
? arr.filter(item => {
|
|
96
|
+
const itemKey = item[saveKey];
|
|
97
|
+
const keys = [...parentKeys, itemKey]; // !!此处就是用_key拼,不会用别的属性
|
|
91
98
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
99
|
+
return reverseFilter
|
|
100
|
+
? !cascaderVals.some(valArr =>
|
|
101
|
+
keys.length < valArr.length
|
|
102
|
+
? false
|
|
103
|
+
: valArr.every((valArrKey, index) => valArrKey === keys[index])
|
|
104
|
+
)
|
|
105
|
+
: cascaderVals.some(valArr =>
|
|
106
|
+
keys.length < valArr.length
|
|
107
|
+
? keys.every((levelKey, index) => levelKey === valArr[index])
|
|
108
|
+
: valArr.every((valArrKey, index) => valArrKey === keys[index])
|
|
109
|
+
);
|
|
110
|
+
})
|
|
111
|
+
: filterVals.length
|
|
112
|
+
? arr.filter(item => {
|
|
113
|
+
const itemKey = item[saveKey];
|
|
114
|
+
|
|
115
|
+
return reverseFilter
|
|
116
|
+
? !filterVals.includes(itemKey)
|
|
117
|
+
: filterVals.includes(itemKey);
|
|
118
|
+
})
|
|
119
|
+
: arr;
|
|
120
|
+
|
|
121
|
+
return arr.reduce((newArr, item) => {
|
|
122
|
+
const itemKey = item[saveKey];
|
|
123
|
+
const keys = [...parentKeys, itemKey]; // !!此处就是用_key拼,不会用别的属性
|
|
124
|
+
let newItem = {
|
|
125
|
+
keys: keys,
|
|
126
|
+
code: keys.join(""),
|
|
127
|
+
...item
|
|
128
|
+
};
|
|
129
|
+
newItem = {
|
|
130
|
+
...newItem,
|
|
131
|
+
value: newItem[valueKey],
|
|
132
|
+
label: newItem[nameKey]
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
if (
|
|
136
|
+
(!level || level > newItem.level) &&
|
|
137
|
+
(newItem.children && newItem.children.length)
|
|
138
|
+
) {
|
|
139
|
+
newItem.children = loop(newItem.children, level, newItem.keys, [], cascaderVals, reverseFilter, isMobile, saveKey, valueKey, nameKey);
|
|
104
140
|
|
|
105
|
-
if (
|
|
106
|
-
(!level || level > newItem.level) &&
|
|
107
|
-
(newItem.children && newItem.children.length)
|
|
108
|
-
) {
|
|
141
|
+
if (newItem.children.length) {
|
|
109
142
|
newItem.loading = false; // 此代码pc端在用:为了所请求的级,出现继续加载的箭头图标
|
|
110
|
-
newItem.
|
|
143
|
+
newItem.isLeaf = false;
|
|
111
144
|
} else {
|
|
112
145
|
newItem.children = isMobile ? undefined : [];
|
|
113
146
|
newItem.isLeaf = true;
|
|
114
147
|
}
|
|
115
|
-
|
|
148
|
+
} else {
|
|
149
|
+
newItem.children = isMobile ? undefined : [];
|
|
150
|
+
newItem.isLeaf = true;
|
|
151
|
+
}
|
|
116
152
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
153
|
+
return [
|
|
154
|
+
...newArr,
|
|
155
|
+
newItem
|
|
156
|
+
];
|
|
157
|
+
}, []);
|
|
120
158
|
};
|
|
121
159
|
|
|
122
|
-
return loop(this.originData, this.cascaderLevel,
|
|
160
|
+
return loop(this.originData, this.cascaderLevel, [], this.filterVals, this.cascaderVals, this.reverseFilter, this.isMobile, this.saveKey, this.valueKey, this.nameKey);
|
|
123
161
|
},
|
|
124
162
|
cascaderData () {
|
|
125
163
|
const loop = (arr = [], isMobile) => {
|
|
126
164
|
return arr
|
|
127
|
-
? arr.reduce((
|
|
165
|
+
? arr.reduce((newArr, item) => {
|
|
128
166
|
if (item.rm !== 1) {
|
|
129
167
|
let newItem = {
|
|
130
168
|
...item
|
|
@@ -132,13 +170,20 @@ export default {
|
|
|
132
170
|
|
|
133
171
|
if (newItem.children && newItem.children.length) {
|
|
134
172
|
newItem.children = loop(newItem.children, isMobile);
|
|
173
|
+
|
|
174
|
+
if (newItem.children.length) {
|
|
175
|
+
// 无需处理
|
|
176
|
+
} else {
|
|
177
|
+
newItem.children = isMobile ? undefined : [];
|
|
178
|
+
}
|
|
135
179
|
} else {
|
|
136
180
|
newItem.children = isMobile ? undefined : [];
|
|
137
181
|
}
|
|
138
|
-
|
|
182
|
+
|
|
183
|
+
newArr.push(newItem);
|
|
139
184
|
}
|
|
140
185
|
|
|
141
|
-
return
|
|
186
|
+
return newArr;
|
|
142
187
|
}, [])
|
|
143
188
|
: [];
|
|
144
189
|
};
|
|
@@ -24,6 +24,9 @@
|
|
|
24
24
|
<!-- 添加行 -->
|
|
25
25
|
<dsh-render :render="createOperationRender"></dsh-render>
|
|
26
26
|
|
|
27
|
+
<!-- 各种模态框共用 -->
|
|
28
|
+
<dsh-render :render="dshRender"></dsh-render>
|
|
29
|
+
|
|
27
30
|
<!-- 全屏模式 -->
|
|
28
31
|
<dsh-modal
|
|
29
32
|
class="DshFlatTable-fullscreen"
|
|
@@ -56,9 +59,6 @@
|
|
|
56
59
|
<dsh-render :render="createOperationRender"></dsh-render>
|
|
57
60
|
</div>
|
|
58
61
|
</dsh-modal>
|
|
59
|
-
|
|
60
|
-
<!-- 各种模态框共用 -->
|
|
61
|
-
<dsh-render :render="dshRender"></dsh-render>
|
|
62
62
|
</div>
|
|
63
63
|
</template>
|
|
64
64
|
|
|
@@ -24,6 +24,9 @@
|
|
|
24
24
|
<!-- 添加行 -->
|
|
25
25
|
<dsh-render :render="createOperationRender"></dsh-render>
|
|
26
26
|
|
|
27
|
+
<!-- 各种模态框共用 -->
|
|
28
|
+
<dsh-render :render="dshRender"></dsh-render>
|
|
29
|
+
|
|
27
30
|
<!-- 全屏模式 -->
|
|
28
31
|
<dsh-modal
|
|
29
32
|
class="DshTreeTable-fullscreen"
|
|
@@ -56,9 +59,6 @@
|
|
|
56
59
|
<dsh-render :render="createOperationRender"></dsh-render>
|
|
57
60
|
</div>
|
|
58
61
|
</dsh-modal>
|
|
59
|
-
|
|
60
|
-
<!-- 各种模态框共用 -->
|
|
61
|
-
<dsh-render :render="dshRender"></dsh-render>
|
|
62
62
|
</div>
|
|
63
63
|
</template>
|
|
64
64
|
|
|
@@ -170,13 +170,14 @@
|
|
|
170
170
|
});
|
|
171
171
|
},
|
|
172
172
|
handleUpload () {
|
|
173
|
-
this.loadingStatus = true;
|
|
174
173
|
let formData = new FormData();
|
|
175
174
|
formData.append("file_stream", this.file);
|
|
176
175
|
formData.append("modKey", this.modKey);
|
|
177
|
-
|
|
178
|
-
this.importParams.
|
|
179
|
-
|
|
176
|
+
|
|
177
|
+
Object.entries(this.importParams).forEach(arr => {
|
|
178
|
+
formData.append(arr[0], arr[1]);
|
|
179
|
+
});
|
|
180
|
+
|
|
180
181
|
this.$https({
|
|
181
182
|
url: {
|
|
182
183
|
module: "sheet",
|
|
@@ -186,18 +187,17 @@
|
|
|
186
187
|
content: {
|
|
187
188
|
headers: { "Content-Type": "multipart/form-data" }
|
|
188
189
|
},
|
|
190
|
+
loadingName: "loadingStatus",
|
|
191
|
+
successTip: "导入成功!",
|
|
189
192
|
callback: data => {
|
|
190
|
-
this
|
|
193
|
+
this.showModal = false;
|
|
191
194
|
this.file = null;
|
|
192
|
-
|
|
195
|
+
|
|
193
196
|
this.$emit("importCb", data);
|
|
194
|
-
this.showModal = false;
|
|
195
197
|
},
|
|
196
198
|
error: data => {
|
|
197
199
|
this.$Message.error("导入失败:" + data.msg);
|
|
198
200
|
this.file = null;
|
|
199
|
-
this.file = null;
|
|
200
|
-
this.loadingStatus = false;
|
|
201
201
|
}
|
|
202
202
|
});
|
|
203
203
|
},
|
|
@@ -282,6 +282,9 @@ export default {
|
|
|
282
282
|
hideColKeys () {
|
|
283
283
|
return this.selfPropsObj._hideColKeys || [];
|
|
284
284
|
},
|
|
285
|
+
searchLabelWidth () {
|
|
286
|
+
return this.selfPropsObj._searchLabelWidth;
|
|
287
|
+
},
|
|
285
288
|
searchList () {
|
|
286
289
|
return this.selfPropsObj._searchList || []; // 级联表切层级表时 值会undefined覆盖selfPropsObj默认的[]
|
|
287
290
|
},
|
|
@@ -291,6 +294,14 @@ export default {
|
|
|
291
294
|
searchListFields () {
|
|
292
295
|
return this.searchList.map(searchItem => searchItem._key);
|
|
293
296
|
},
|
|
297
|
+
searchFormList () {
|
|
298
|
+
return this.$filterList(this.searchListFields, this.columns).map(formItem => ({
|
|
299
|
+
...formItem,
|
|
300
|
+
...this.searchListMap[formItem._key],
|
|
301
|
+
_name: formItem._name
|
|
302
|
+
}));
|
|
303
|
+
},
|
|
304
|
+
|
|
294
305
|
tableAdvSearch () {
|
|
295
306
|
return this.$transformAdvSearch(this.selfPropsObj._tableAdvSearch, this.allFormList, this.parentObj);
|
|
296
307
|
},
|
|
@@ -316,16 +327,6 @@ export default {
|
|
|
316
327
|
isSearching () {
|
|
317
328
|
return this.$isAdvSearching(this.finalTableAdvSearch);
|
|
318
329
|
},
|
|
319
|
-
searchFormList () {
|
|
320
|
-
return this.$filterList(this.searchListFields, this.columns).map(formItem => ({
|
|
321
|
-
...formItem,
|
|
322
|
-
...this.searchListMap[formItem._key],
|
|
323
|
-
_name: formItem._name
|
|
324
|
-
}));
|
|
325
|
-
},
|
|
326
|
-
searchLabelWidth () {
|
|
327
|
-
return this.selfPropsObj._searchLabelWidth;
|
|
328
|
-
},
|
|
329
330
|
rowsNum () {
|
|
330
331
|
return this.isSearching
|
|
331
332
|
? this.showListData.length
|
|
@@ -444,7 +445,10 @@ export default {
|
|
|
444
445
|
importParams () {
|
|
445
446
|
return {
|
|
446
447
|
_id: this.parentDataId,
|
|
447
|
-
_key: this.controlKey
|
|
448
|
+
_key: this.controlKey,
|
|
449
|
+
importType: this.controlType === "cascaderTable" && ["treeTable"].includes(this.selfPropsObj._showMode)
|
|
450
|
+
? this.selfPropsObj._showMode
|
|
451
|
+
: this.controlType
|
|
448
452
|
};
|
|
449
453
|
},
|
|
450
454
|
|
|
@@ -781,7 +785,7 @@ export default {
|
|
|
781
785
|
props: {
|
|
782
786
|
value: this.showImportModal,
|
|
783
787
|
propsObj: this.propsObj,
|
|
784
|
-
|
|
788
|
+
importParams: this.importParams
|
|
785
789
|
},
|
|
786
790
|
on: {
|
|
787
791
|
input: bool => {
|