@xuekl/cli-components 1.2.7 → 1.2.9
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/XklForm.vue +77 -8
- package/package.json +1 -1
package/XklForm.vue
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<template v-for="item in formList" :key="item.prop">
|
|
9
9
|
<el-col :span="item.span" v-if="item.show()">
|
|
10
10
|
<el-form-item :label="item.label" :label-width="item.labelWidth" :prop="item.prop"
|
|
11
|
-
:rules="item.refRules
|
|
11
|
+
:rules="item.refRules">
|
|
12
12
|
<el-input v-if="item.type === 'input'" v-model="form[item.prop]" v-bind="item.element"
|
|
13
13
|
v-on="item.events" :disabled="item.disabled()"></el-input>
|
|
14
14
|
<el-input-number v-else-if="item.type === 'input-number'" v-model="form[item.prop]"
|
|
@@ -52,6 +52,10 @@
|
|
|
52
52
|
<el-form-item label-width="0">
|
|
53
53
|
<div class="query-action">
|
|
54
54
|
<slot name="_action"></slot>
|
|
55
|
+
<span class="collapsible" v-if="opts.collapsible" @click="doCollapse()">
|
|
56
|
+
{{ isCollapse ? '展开' : '收起' }}
|
|
57
|
+
<icon-svg name="down" :class="[isCollapse ? '' : 'rotate']"></icon-svg>
|
|
58
|
+
</span>
|
|
55
59
|
</div>
|
|
56
60
|
</el-form-item>
|
|
57
61
|
</el-col>
|
|
@@ -77,8 +81,13 @@ import { componentGlobal } from '@xuekl/cli-base/global'
|
|
|
77
81
|
const props = defineProps(['form'])
|
|
78
82
|
const XklFormRef = ref(null)
|
|
79
83
|
const { form } = props
|
|
80
|
-
const
|
|
84
|
+
const sourceFormList: FormItem[] = []
|
|
85
|
+
const formList: FormItem[] = ref([])
|
|
81
86
|
const opts = form._opts || {}
|
|
87
|
+
const isCollapse = ref(true)
|
|
88
|
+
if (typeof opts.defaultCollapse !== 'undefined') {
|
|
89
|
+
isCollapse.value = opts.defaultCollapse
|
|
90
|
+
}
|
|
82
91
|
|
|
83
92
|
// 获取符合mode的字段
|
|
84
93
|
const modeFields: any = {}
|
|
@@ -149,10 +158,12 @@ Object.keys(form).forEach(prop => {
|
|
|
149
158
|
}
|
|
150
159
|
if (opts.mode) {
|
|
151
160
|
if (field.mode && field.mode.includes(opts.mode)) {
|
|
152
|
-
formList.push(item)
|
|
161
|
+
formList.value.push(item)
|
|
162
|
+
sourceFormList.push(item)
|
|
153
163
|
}
|
|
154
164
|
} else {
|
|
155
|
-
formList.push(item)
|
|
165
|
+
formList.value.push(item)
|
|
166
|
+
sourceFormList.push(item)
|
|
156
167
|
}
|
|
157
168
|
}
|
|
158
169
|
})
|
|
@@ -160,18 +171,63 @@ Object.keys(form).forEach(prop => {
|
|
|
160
171
|
//计算按钮所占span
|
|
161
172
|
let toalSpan = 0
|
|
162
173
|
const searchSpan = ref(0)
|
|
163
|
-
|
|
174
|
+
const spans: number[] = []
|
|
175
|
+
formList.value.forEach(res => {
|
|
164
176
|
if (res.show && res.show()) {
|
|
165
177
|
if (res.span) {
|
|
178
|
+
spans.push(res.span)
|
|
166
179
|
toalSpan = toalSpan + res.span
|
|
167
180
|
} else {
|
|
181
|
+
spans.push(opts.span)
|
|
168
182
|
toalSpan = toalSpan + opts.span
|
|
169
183
|
}
|
|
170
184
|
}
|
|
171
185
|
|
|
172
186
|
})
|
|
173
|
-
searchSpan.value = 24 - toalSpan % 24
|
|
174
187
|
|
|
188
|
+
let stepLength = 0
|
|
189
|
+
let collapseTotalSpan = 0
|
|
190
|
+
if (opts.collapsible) {
|
|
191
|
+
let step = 0
|
|
192
|
+
for (let i = 0; i < spans.length; i++) {
|
|
193
|
+
if (step >= 24) {
|
|
194
|
+
stepLength = i
|
|
195
|
+
break
|
|
196
|
+
}
|
|
197
|
+
if (spans[i] === 24) {
|
|
198
|
+
step = step + 0
|
|
199
|
+
} else {
|
|
200
|
+
step = step + spans[i]
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
for (let i = 0; i < stepLength - 1; i++) {
|
|
205
|
+
collapseTotalSpan = collapseTotalSpan + spans[i]
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
if (opts.collapsible) {
|
|
211
|
+
searchSpan.value = 24 - collapseTotalSpan % 24
|
|
212
|
+
formList.value = sourceFormList.slice(0, stepLength - 1)
|
|
213
|
+
} else {
|
|
214
|
+
searchSpan.value = 24 - toalSpan % 24
|
|
215
|
+
formList.value = sourceFormList
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
const doCollapse = () => {
|
|
221
|
+
isCollapse.value = !isCollapse.value
|
|
222
|
+
if (isCollapse.value) {
|
|
223
|
+
searchSpan.value = 24 - collapseTotalSpan % 24
|
|
224
|
+
formList.value = sourceFormList.slice(0, stepLength - 1)
|
|
225
|
+
} else {
|
|
226
|
+
searchSpan.value = 24 - toalSpan % 24
|
|
227
|
+
formList.value = sourceFormList
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
}
|
|
175
231
|
|
|
176
232
|
const regProto = () => {
|
|
177
233
|
if (XklFormRef.value) {
|
|
@@ -189,7 +245,7 @@ const regProto = () => {
|
|
|
189
245
|
componentGlobal.enableFormSubmit = true
|
|
190
246
|
enableSubmit = true
|
|
191
247
|
}, 3000)
|
|
192
|
-
formList.forEach(field => {
|
|
248
|
+
formList.value.forEach(field => {
|
|
193
249
|
modeFields[field.prop] = (form as any)[field.prop]
|
|
194
250
|
});
|
|
195
251
|
(XklFormRef.value as any).validate((valid: boolean) => {
|
|
@@ -208,7 +264,7 @@ const regProto = () => {
|
|
|
208
264
|
}
|
|
209
265
|
|
|
210
266
|
form.setBinds(() => {
|
|
211
|
-
formList.forEach(field => {
|
|
267
|
+
formList.value.forEach(field => {
|
|
212
268
|
modeFields[field.prop] = (form as any)[field.prop]
|
|
213
269
|
});
|
|
214
270
|
return modeFields
|
|
@@ -228,6 +284,19 @@ onMounted(() => {
|
|
|
228
284
|
.query-action {
|
|
229
285
|
width: 100%;
|
|
230
286
|
text-align: right;
|
|
287
|
+
display: flex;
|
|
288
|
+
align-items: center;
|
|
289
|
+
justify-content: flex-end;
|
|
290
|
+
|
|
291
|
+
.collapsible {
|
|
292
|
+
margin-left: 12px;
|
|
293
|
+
cursor: pointer;
|
|
294
|
+
color: $primary--color;
|
|
295
|
+
|
|
296
|
+
.rotate {
|
|
297
|
+
transform: rotate(180deg);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
231
300
|
}
|
|
232
301
|
|
|
233
302
|
.hide-input {
|