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