easybill-ui 1.3.0 → 1.3.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.
- package/components/CurdForm/src/CurdForm.vue +252 -39
- package/components/CurdForm/src/components/index.ts +2 -0
- package/components/CurdForm/src/components/schema-form-choose.vue +225 -0
- package/components/CurdForm/src/types.ts +7 -1
- package/package.json +1 -1
- package/theme-chalk/curd-form.css +1 -1
- package/theme-chalk/index.css +1 -1
|
@@ -1,31 +1,59 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<el-form ref="schemaFormRef" :model="formModel" :rules="rules" v-bind="{ ...$attrs, ...getFormProps }" class="curd-form" :style="getFormStyle()" @submit.prevent>
|
|
3
3
|
<template v-for="formItem in schemaItems" :key="formItem.prop">
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
<slot :name="formItem.prop + '
|
|
4
|
+
<!-- choose 类型特殊处理,不使用 el-form-item 包裹,避免嵌套问题 -->
|
|
5
|
+
<template v-if="formItem.type === 'choose'">
|
|
6
|
+
<div v-if="!$slots[formItem.prop + 'Item']" class="el-form-item choose-group-wrapper" :class="[getFormItemStyle(formItem), getChooseFormItemClass(formItem)]" :style="getChooseFormItemStyle(formItem)">
|
|
7
|
+
<!-- label 区域 -->
|
|
8
|
+
<label v-if="formItem.label" class="el-form-item__label" :style="{ width: getLabelWidth(formItem) }">
|
|
9
|
+
{{ formItem.label }}
|
|
10
|
+
</label>
|
|
11
|
+
|
|
12
|
+
<!-- content 区域 -->
|
|
13
|
+
<div class="el-form-item__content" :style="{ marginLeft: getLabelPosition(formItem) !== 'top' ? '' : '' }">
|
|
14
|
+
<slot :name="formItem.prop" :form-item="formItem" :form-model="formModel"></slot>
|
|
15
|
+
<FormItem v-if="!(formItem.prop && $slots[formItem.prop])" :form-item="formItem" :form-model="formModel" @change="onChange">
|
|
16
|
+
<template #prefix>
|
|
17
|
+
<slot :name="formItem.prop + 'Prefix'" :form-item="formItem" :form-model="formModel"></slot>
|
|
18
|
+
</template>
|
|
19
|
+
<template #suffix>
|
|
20
|
+
<slot :name="formItem.prop + 'Suffix'" :form-item="formItem" :form-model="formModel"></slot>
|
|
21
|
+
</template>
|
|
22
|
+
</FormItem>
|
|
23
|
+
<slot :name="formItem.prop + 'Bottom'" :form-item="formItem" :form-model="formModel"></slot>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<slot :name="formItem.prop + 'Item'" :form-item="formItem" :form-model="formModel"></slot>
|
|
27
|
+
</template>
|
|
28
|
+
|
|
29
|
+
<!-- 其他类型使用 el-form-item 包裹 -->
|
|
30
|
+
<template v-else>
|
|
31
|
+
<el-form-item
|
|
32
|
+
v-if="!$slots[formItem.prop + 'Item']"
|
|
33
|
+
:required="rules && rules[formItem.prop]?.find((a) => a.hasOwnProperty('required'))?.required"
|
|
34
|
+
:label="formItem.label"
|
|
35
|
+
:prop="formItem.prop"
|
|
36
|
+
:label-width="formItem.labelWidth"
|
|
37
|
+
:class="getFormItemStyle(formItem)"
|
|
38
|
+
v-bind="getFormItemProps(formItem)"
|
|
39
|
+
>
|
|
40
|
+
<template v-for="(item, key) in getFormItemProps(formItem)?.slots || {}" :key="key" #[key]="row">
|
|
41
|
+
<component :is="item" v-bind="row" />
|
|
24
42
|
</template>
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
43
|
+
|
|
44
|
+
<slot :name="formItem.prop" :form-item="formItem" :form-model="formModel"></slot>
|
|
45
|
+
<FormItem v-if="!(formItem.prop && $slots[formItem.prop])" :form-item="formItem" :form-model="formModel" @change="onChange">
|
|
46
|
+
<template #prefix>
|
|
47
|
+
<slot :name="formItem.prop + 'Prefix'" :form-item="formItem" :form-model="formModel"></slot>
|
|
48
|
+
</template>
|
|
49
|
+
<template #suffix>
|
|
50
|
+
<slot :name="formItem.prop + 'Suffix'" :form-item="formItem" :form-model="formModel"></slot>
|
|
51
|
+
</template>
|
|
52
|
+
</FormItem>
|
|
53
|
+
<slot :name="formItem.prop + 'Bottom'" :form-item="formItem" :form-model="formModel"></slot>
|
|
54
|
+
</el-form-item>
|
|
55
|
+
<slot :name="formItem.prop + 'Item'" :form-item="formItem" :form-model="formModel"></slot>
|
|
56
|
+
</template>
|
|
29
57
|
</template>
|
|
30
58
|
<template v-if="$slots['operate-button']">
|
|
31
59
|
<el-form-item style="max-width: 100%">
|
|
@@ -36,6 +64,7 @@
|
|
|
36
64
|
</template>
|
|
37
65
|
|
|
38
66
|
<script lang="ts" setup>
|
|
67
|
+
import { ElForm, type FormRules } from "element-plus"
|
|
39
68
|
import { computed, getCurrentInstance, onMounted, provide, reactive, ref, triggerRef, watch, type PropType } from "vue"
|
|
40
69
|
import FormItem from "./FormItem.vue"
|
|
41
70
|
import type { CurdFormOptionItem, Fields, FormContext, FormItem as FormItemType, FormSchema } from "./types"
|
|
@@ -92,6 +121,21 @@ const schemaValues = sFormSchema.value.formItem.reduce<Fields>((previousValue, c
|
|
|
92
121
|
if (typeof currentValue.value !== "undefined" && currentValue.prop && (typeof formModel[currentValue.prop] == "undefined" || formModel[currentValue.prop] === "" || formModel[currentValue.prop] === null)) {
|
|
93
122
|
previousValue[currentValue.prop] = currentValue.value
|
|
94
123
|
}
|
|
124
|
+
|
|
125
|
+
// 处理 choose 类型 items 的默认值
|
|
126
|
+
if (currentValue.type === "choose" && currentValue.options) {
|
|
127
|
+
currentValue.options.forEach((option) => {
|
|
128
|
+
if (option.items) {
|
|
129
|
+
option.items.forEach((subItem) => {
|
|
130
|
+
subItem.eventObject ??= {}
|
|
131
|
+
if (typeof subItem.value !== "undefined" && subItem.prop && (typeof formModel[subItem.prop] == "undefined" || formModel[subItem.prop] === "" || formModel[subItem.prop] === null)) {
|
|
132
|
+
previousValue[subItem.prop] = subItem.value
|
|
133
|
+
}
|
|
134
|
+
})
|
|
135
|
+
}
|
|
136
|
+
})
|
|
137
|
+
}
|
|
138
|
+
|
|
95
139
|
return previousValue
|
|
96
140
|
}, {})
|
|
97
141
|
|
|
@@ -114,13 +158,27 @@ const schemaItems = computed(() => {
|
|
|
114
158
|
})
|
|
115
159
|
// 异步设置默认数据
|
|
116
160
|
sFormSchema.value.formItem.forEach(async (item) => {
|
|
117
|
-
//
|
|
118
|
-
// 异步选项
|
|
161
|
+
// 异步选项 - 顶层表单项
|
|
119
162
|
if (item.asyncOptions && (item.autoload || typeof item.autoload == "undefined") && item.asyncOptions instanceof Function) {
|
|
120
163
|
item.loading = true
|
|
121
164
|
item.options = await item.asyncOptions(formModel, item, curdFormContext).finally(() => (item.loading = false))
|
|
122
165
|
if (!instance?.isUnmounted && item.eventObject?.optionLoaded) item.eventObject.optionLoaded(formModel, item, curdFormContext)
|
|
123
166
|
}
|
|
167
|
+
|
|
168
|
+
// 处理 choose 类型的 items 的异步选项
|
|
169
|
+
if (item.type === "choose" && item.options) {
|
|
170
|
+
for (const option of item.options) {
|
|
171
|
+
if (option.items && option.items.length > 0) {
|
|
172
|
+
for (const subItem of option.items) {
|
|
173
|
+
if (subItem.asyncOptions && (subItem.autoload || typeof subItem.autoload == "undefined") && subItem.asyncOptions instanceof Function) {
|
|
174
|
+
subItem.loading = true
|
|
175
|
+
subItem.options = await subItem.asyncOptions(formModel, subItem, curdFormContext).finally(() => (subItem.loading = false))
|
|
176
|
+
if (!instance?.isUnmounted && subItem.eventObject?.optionLoaded) subItem.eventObject.optionLoaded(formModel, subItem, curdFormContext)
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
124
182
|
})
|
|
125
183
|
|
|
126
184
|
// 生成表单验证规则
|
|
@@ -129,23 +187,77 @@ const rules = computed(() => {
|
|
|
129
187
|
Promise.resolve().then(() => {
|
|
130
188
|
triggerRef(rules)
|
|
131
189
|
})
|
|
190
|
+
let baseRules: FormRules = {}
|
|
132
191
|
if (typeof sFormSchema.value.rules == "function") {
|
|
133
|
-
|
|
192
|
+
baseRules = sFormSchema.value.rules(formModel, curdFormContext)
|
|
193
|
+
} else if (typeof sFormSchema.value.getRules == "function") {
|
|
194
|
+
baseRules = sFormSchema.value.getRules(formModel, curdFormContext)
|
|
195
|
+
} else {
|
|
196
|
+
baseRules = sFormSchema.value.rules || {}
|
|
134
197
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
|
|
198
|
+
|
|
199
|
+
// 合并 choose 类型 items 的验证规则
|
|
200
|
+
const mergedRules: FormRules = { ...baseRules }
|
|
201
|
+
sFormSchema.value.formItem.forEach((formItem) => {
|
|
202
|
+
if (formItem.type === "choose" && formItem.options) {
|
|
203
|
+
formItem.options.forEach((option) => {
|
|
204
|
+
if (option.items) {
|
|
205
|
+
option.items.forEach((subItem) => {
|
|
206
|
+
if (subItem.prop && subItem.rules) {
|
|
207
|
+
mergedRules[subItem.prop] = subItem.rules
|
|
208
|
+
}
|
|
209
|
+
})
|
|
210
|
+
}
|
|
211
|
+
})
|
|
212
|
+
}
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
return mergedRules
|
|
139
216
|
})
|
|
140
217
|
|
|
218
|
+
/**
|
|
219
|
+
* 递归查找表单项
|
|
220
|
+
* @param prop 表单项的 prop
|
|
221
|
+
* @returns 找到的表单项对象,包含 parent 信息
|
|
222
|
+
*/
|
|
223
|
+
const findFormItem = (prop: string): { item: FormItemType; parent?: FormItemType; path: string } | undefined => {
|
|
224
|
+
// 先在顶层查找
|
|
225
|
+
const topLevelItem = sFormSchema.value.formItem.find((a) => a.prop == prop)
|
|
226
|
+
if (topLevelItem) {
|
|
227
|
+
return { item: topLevelItem, path: prop }
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// 在 choose 类型的 options.items 中递归查找
|
|
231
|
+
for (const formItem of sFormSchema.value.formItem) {
|
|
232
|
+
if (formItem.type === "choose" && formItem.options) {
|
|
233
|
+
for (const option of formItem.options) {
|
|
234
|
+
if (option.items) {
|
|
235
|
+
const foundItem = option.items.find((item) => item.prop === prop)
|
|
236
|
+
if (foundItem) {
|
|
237
|
+
return { item: foundItem, parent: formItem, path: `${formItem.prop}.${option.value}.${prop}` }
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return undefined
|
|
245
|
+
}
|
|
246
|
+
|
|
141
247
|
// 供外部使用
|
|
142
248
|
const validate = (callback: (valid: boolean) => void) => {
|
|
143
249
|
return schemaFormRef.value?.validate(callback)
|
|
144
250
|
}
|
|
145
251
|
// 调用某个表单项的异步数据接口
|
|
146
252
|
const loadOptions = async (prop: string, option?: unknown) => {
|
|
147
|
-
const
|
|
148
|
-
if (
|
|
253
|
+
const result = findFormItem(prop)
|
|
254
|
+
if (!result) {
|
|
255
|
+
console.warn(`[CurdForm] loadOptions: 未找到 prop 为 "${prop}" 的表单项`)
|
|
256
|
+
return []
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
const cur = result.item
|
|
260
|
+
if (cur.asyncOptions && !instance?.isUnmounted) {
|
|
149
261
|
cur.loading = true
|
|
150
262
|
triggerRef(schemaItems)
|
|
151
263
|
cur.options =
|
|
@@ -160,10 +272,13 @@ const loadOptions = async (prop: string, option?: unknown) => {
|
|
|
160
272
|
}
|
|
161
273
|
// 给某个item赋值options
|
|
162
274
|
const setOptions = async (prop: string, options: CurdFormOptionItem[], option?: unknown) => {
|
|
163
|
-
const
|
|
164
|
-
if (
|
|
165
|
-
|
|
166
|
-
|
|
275
|
+
const result = findFormItem(prop)
|
|
276
|
+
if (result) {
|
|
277
|
+
result.item.options = options
|
|
278
|
+
triggerRef(schemaItems)
|
|
279
|
+
if (!instance?.isUnmounted && result.item.eventObject?.optionLoaded) result.item.eventObject.optionLoaded(formModel, result.item, curdFormContext, option)
|
|
280
|
+
} else {
|
|
281
|
+
console.warn(`[CurdForm] setOptions: 未找到 prop 为 "${prop}" 的表单项`)
|
|
167
282
|
}
|
|
168
283
|
// return cur
|
|
169
284
|
}
|
|
@@ -179,11 +294,53 @@ const getFormItemProps = (formItem: FormItemType) => {
|
|
|
179
294
|
if (formItem.formItemProps instanceof Function) {
|
|
180
295
|
return formItem.formItemProps(formModel, formItem)
|
|
181
296
|
}
|
|
182
|
-
|
|
183
|
-
return { ...attrs }
|
|
297
|
+
return { ...formItem.formItemProps }
|
|
184
298
|
}
|
|
185
299
|
return {}
|
|
186
300
|
}
|
|
301
|
+
|
|
302
|
+
// 获取表单项的 labelWidth
|
|
303
|
+
const getLabelWidth = (formItem: FormItemType) => {
|
|
304
|
+
const itemLabelWidth = formItem.labelWidth
|
|
305
|
+
if (itemLabelWidth !== undefined) {
|
|
306
|
+
return typeof itemLabelWidth === "number" ? itemLabelWidth + "px" : itemLabelWidth
|
|
307
|
+
}
|
|
308
|
+
const formLabelWidth = props.formSchema.labelWidth
|
|
309
|
+
if (formLabelWidth !== undefined) {
|
|
310
|
+
return typeof formLabelWidth === "number" ? formLabelWidth + "px" : formLabelWidth
|
|
311
|
+
}
|
|
312
|
+
return undefined
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// 获取表单项的 labelPosition
|
|
316
|
+
const getLabelPosition = (formItem: FormItemType) => {
|
|
317
|
+
return formItem.labelPosition || props.formSchema.labelPosition || ""
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// 获取 choose 类型的额外样式类
|
|
321
|
+
const getChooseFormItemClass = (_formItem: FormItemType) => {
|
|
322
|
+
const classes: string[] = []
|
|
323
|
+
const labelPosition = getLabelPosition(_formItem)
|
|
324
|
+
if (labelPosition) {
|
|
325
|
+
classes.push("el-form-item--label-" + labelPosition)
|
|
326
|
+
}
|
|
327
|
+
return classes.join(" ")
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// 获取 choose 类型的样式
|
|
331
|
+
const getChooseFormItemStyle = (formItem: FormItemType) => {
|
|
332
|
+
const style: Record<string, string> = {}
|
|
333
|
+
const labelPosition = getLabelPosition(formItem)
|
|
334
|
+
if (labelPosition === "top") {
|
|
335
|
+
// top 模式下不需要额外样式
|
|
336
|
+
} else {
|
|
337
|
+
const labelWidth = getLabelWidth(formItem)
|
|
338
|
+
if (labelWidth) {
|
|
339
|
+
// 用于让 content 区域正确对齐
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return style
|
|
343
|
+
}
|
|
187
344
|
const getFormStyle = () => {
|
|
188
345
|
const gutter = props.formSchema.gutter
|
|
189
346
|
if (gutter) {
|
|
@@ -207,6 +364,7 @@ curdFormContext.loadOptions = loadOptions
|
|
|
207
364
|
curdFormContext.setOptions = setOptions
|
|
208
365
|
curdFormContext.change = onChange
|
|
209
366
|
curdFormContext.formModel = formModel
|
|
367
|
+
curdFormContext.formSchema = props.formSchema
|
|
210
368
|
|
|
211
369
|
if (props.extendContext) Object.assign(curdFormContext, props.extendContext)
|
|
212
370
|
|
|
@@ -231,3 +389,58 @@ defineExpose({
|
|
|
231
389
|
onChange,
|
|
232
390
|
})
|
|
233
391
|
</script>
|
|
392
|
+
|
|
393
|
+
<style scoped lang="scss">
|
|
394
|
+
// choose 类型容器样式,模拟 el-form-item 布局
|
|
395
|
+
/*
|
|
396
|
+
.choose-group-wrapper {
|
|
397
|
+
display: flex;
|
|
398
|
+
align-items: flex-start;
|
|
399
|
+
|
|
400
|
+
:deep(.el-form-item__label) {
|
|
401
|
+
display: inline-flex;
|
|
402
|
+
justify-content: flex-end;
|
|
403
|
+
align-items: flex-start;
|
|
404
|
+
flex-shrink: 0;
|
|
405
|
+
font-size: var(--el-font-size-base);
|
|
406
|
+
color: var(--el-text-color-regular);
|
|
407
|
+
height: 32px;
|
|
408
|
+
line-height: 32px;
|
|
409
|
+
padding: 0 12px 0 0;
|
|
410
|
+
box-sizing: border-box;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
:deep(.el-form-item__asterisk) {
|
|
414
|
+
color: var(--el-color-danger);
|
|
415
|
+
font-size: var(--el-font-size-base);
|
|
416
|
+
margin-left: 4px;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
:deep(.el-form-item__content) {
|
|
420
|
+
display: flex;
|
|
421
|
+
flex-wrap: wrap;
|
|
422
|
+
align-items: center;
|
|
423
|
+
flex: 1;
|
|
424
|
+
position: relative;
|
|
425
|
+
font-size: var(--el-font-size-base);
|
|
426
|
+
min-width: 0;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
:deep(.top-label) {
|
|
430
|
+
justify-content: flex-start;
|
|
431
|
+
padding: 0 0 8px 0;
|
|
432
|
+
height: auto;
|
|
433
|
+
line-height: 1.5;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// label-top 模式
|
|
437
|
+
&.el-form-item--label-top {
|
|
438
|
+
flex-direction: column;
|
|
439
|
+
|
|
440
|
+
:deep(.el-form-item__content) {
|
|
441
|
+
margin-left: 0 !important;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
*/
|
|
446
|
+
</style>
|
|
@@ -2,6 +2,7 @@ import { isReactive, isRef, isVNode, type Component, type VNode } from "vue"
|
|
|
2
2
|
import SchemaFormAutocomplete from "./schema-form-autocomplete.vue"
|
|
3
3
|
import SchemaFormCascader from "./schema-form-cascader.vue"
|
|
4
4
|
import SchemaFormCheckbox from "./schema-form-checkbox.vue"
|
|
5
|
+
import SchemaFormChoose from "./schema-form-choose.vue"
|
|
5
6
|
import SchemaFormColorPicker from "./schema-form-color-picker.vue"
|
|
6
7
|
import SchemaFormDatePicker from "./schema-form-date-picker.vue"
|
|
7
8
|
import SchemaFormInputNumber from "./schema-form-input-number.vue"
|
|
@@ -31,6 +32,7 @@ const presetMap: PresetMap = {
|
|
|
31
32
|
"schema-cascader": SchemaFormCascader,
|
|
32
33
|
"schema-autocomplete": SchemaFormAutocomplete,
|
|
33
34
|
"schema-tree-select": SchemaFormTreeSelect,
|
|
35
|
+
"schema-choose": SchemaFormChoose,
|
|
34
36
|
}
|
|
35
37
|
|
|
36
38
|
export default presetMap
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="schema-form-choose">
|
|
3
|
+
<div class="choose-content-wrapper">
|
|
4
|
+
<div v-if="formItem.loading" class="loading">
|
|
5
|
+
<el-icon class="is-loading"><Loading /></el-icon> {{ t("el.form.loading") }}
|
|
6
|
+
</div>
|
|
7
|
+
<el-radio-group v-else-if="options?.length" v-model="currentValue" :class="[props.props?.showType, chooseGroupClass]" v-bind="props.props" v-on="props.eventObject">
|
|
8
|
+
<template v-for="(option, index) in options" :key="option.value">
|
|
9
|
+
<component :is="props?.props?.componentName == 'button' ? 'el-radio-button' : 'el-radio'" :value="option.value" :disabled="option.disabled" :border="option.border" :size="option.size" :style="option.style">
|
|
10
|
+
<component v-if="option.component" :is="option.component" :row="option" :$index="index" :form-model="formModel" :form-item="formItem" :props="props" />
|
|
11
|
+
<span v-else-if="option.html" v-html="option.html"></span>
|
|
12
|
+
<span v-else>{{ option.label }}</span>
|
|
13
|
+
<FormTooltip v-if="option.tooltip" :tooltip="option.tooltip" :form-item="formItem" :form-model="formModel" />
|
|
14
|
+
</component>
|
|
15
|
+
</template>
|
|
16
|
+
</el-radio-group>
|
|
17
|
+
<div v-else class="empty">
|
|
18
|
+
<component :is="empty" v-if="empty" :form-model="formModel" :form-item="formItem" :props="props" />
|
|
19
|
+
<template v-else>
|
|
20
|
+
<el-icon><Warning /></el-icon> <span>{{ props.props?.noDataText || t("el.form.nodata") }}</span>
|
|
21
|
+
</template>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<!-- 子表单项区域 -->
|
|
25
|
+
<div class="choose-sub-items-wrapper" :style="wrapperStyle">
|
|
26
|
+
<div ref="innerRef" class="choose-sub-items" :class="subItemsClass">
|
|
27
|
+
<template v-for="subItem in displaySubItems" :key="subItem.prop">
|
|
28
|
+
<el-form-item :prop="subItem.prop" :label="subItem.label" :label-width="subItem.labelWidth" :class="getSubFormItemStyle(subItem)" v-bind="getSubFormItemProps(subItem)">
|
|
29
|
+
<template v-for="(item, key) in getSubFormItemProps(subItem)?.slots || {}" :key="key" #[key]="row">
|
|
30
|
+
<component :is="item" v-bind="row" />
|
|
31
|
+
</template>
|
|
32
|
+
<FormItem :form-item="subItem" :form-model="formModel" @change="onSubItemChange">
|
|
33
|
+
<template #prefix>
|
|
34
|
+
<slot :name="subItem.prop + 'Prefix'" :form-item="subItem" :form-model="formModel"></slot>
|
|
35
|
+
</template>
|
|
36
|
+
<template #suffix>
|
|
37
|
+
<slot :name="subItem.prop + 'Suffix'" :form-item="subItem" :form-model="formModel"></slot>
|
|
38
|
+
</template>
|
|
39
|
+
</FormItem>
|
|
40
|
+
</el-form-item>
|
|
41
|
+
</template>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
</template>
|
|
47
|
+
|
|
48
|
+
<script lang="ts" setup>
|
|
49
|
+
import { Loading, Warning } from "@element-plus/icons-vue"
|
|
50
|
+
import { useLocale } from "easybill-ui"
|
|
51
|
+
import { computed, inject, nextTick, onUnmounted, ref, toRaw, watch, type PropType } from "vue"
|
|
52
|
+
import FormItem from "../FormItem.vue"
|
|
53
|
+
import FormTooltip from "../FormTooltip.vue"
|
|
54
|
+
import { FormItemProps, type CurdFormOptionItem, type Fields, type FormContext, type FormItem as FormItemType } from "../types"
|
|
55
|
+
|
|
56
|
+
const props = defineProps({
|
|
57
|
+
...FormItemProps,
|
|
58
|
+
modelValue: {
|
|
59
|
+
type: [String, Number, Boolean] as PropType<string | number | boolean | null>,
|
|
60
|
+
default: null,
|
|
61
|
+
},
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
const emit = defineEmits(["update:modelValue"])
|
|
65
|
+
const { t } = useLocale()
|
|
66
|
+
const formContext = inject<FormContext>("curdFormContext")
|
|
67
|
+
|
|
68
|
+
const chooseGroupClass = computed(() => {
|
|
69
|
+
return props?.props?.showType || ""
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
const subItemsClass = computed(() => {
|
|
73
|
+
return props?.props?.subItemsClass || ""
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
const currentValue = computed({
|
|
77
|
+
get: () => props.modelValue,
|
|
78
|
+
set: (val) => {
|
|
79
|
+
emit("update:modelValue", val)
|
|
80
|
+
},
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
const options = computed(() => {
|
|
84
|
+
const allOptions: CurdFormOptionItem[] = []
|
|
85
|
+
if (props.props?.all) {
|
|
86
|
+
const optionItem: CurdFormOptionItem = { value: "", label: t("el.form.all") }
|
|
87
|
+
if (typeof props.props.all === "object") {
|
|
88
|
+
Object.assign(optionItem, props.props.all)
|
|
89
|
+
}
|
|
90
|
+
allOptions.push(optionItem)
|
|
91
|
+
}
|
|
92
|
+
return [...allOptions, ...(props.formItem.options || [])]
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
const empty = computed(() => toRaw(props.props?.empty) || "")
|
|
96
|
+
|
|
97
|
+
const currentOption = computed(() => {
|
|
98
|
+
if (!currentValue.value) return null
|
|
99
|
+
return options.value.find((opt) => opt.value === currentValue.value)
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
// 动画控制状态
|
|
103
|
+
const innerRef = ref<HTMLElement | null>(null)
|
|
104
|
+
const wrapperStyle = ref<Record<string, string>>({})
|
|
105
|
+
const displaySubItems = ref<FormItemType[]>([])
|
|
106
|
+
const isAnimating = ref(false)
|
|
107
|
+
|
|
108
|
+
// 辅助函数:从父级 schema 中查找指定的表单项
|
|
109
|
+
const findFormItemsByProps = (props: string[]) => {
|
|
110
|
+
const parentSchema = formContext?.formSchema || { formItem: [] }
|
|
111
|
+
const allFormItems = parentSchema.formItem || []
|
|
112
|
+
return allFormItems.filter((item: FormItemType) => props.includes(item.prop))
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// 获取当前选项下需要显示的子表单项
|
|
116
|
+
const visibleSubItems = computed(() => {
|
|
117
|
+
const opt = currentOption.value
|
|
118
|
+
if (!opt) return []
|
|
119
|
+
|
|
120
|
+
if (opt.items?.length) return opt.items
|
|
121
|
+
if (opt.props?.length) return findFormItemsByProps(opt.props)
|
|
122
|
+
|
|
123
|
+
return []
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
// 更新外层高度
|
|
127
|
+
const updateWrapperHeight = (height: number, animate = true) => {
|
|
128
|
+
if (animate) {
|
|
129
|
+
wrapperStyle.value = { height: height + "px" }
|
|
130
|
+
} else {
|
|
131
|
+
wrapperStyle.value = { height: height + "px", transition: "none" }
|
|
132
|
+
nextTick(() => {
|
|
133
|
+
wrapperStyle.value.transition = ""
|
|
134
|
+
})
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// 监听选项变化,动态计算高度实现平滑过渡
|
|
139
|
+
watch(
|
|
140
|
+
visibleSubItems,
|
|
141
|
+
async (newItems) => {
|
|
142
|
+
// 获取旧高度
|
|
143
|
+
const oldHeight = innerRef.value?.scrollHeight || 0
|
|
144
|
+
|
|
145
|
+
if (newItems.length > 0) {
|
|
146
|
+
// 更新内容
|
|
147
|
+
displaySubItems.value = newItems
|
|
148
|
+
// 等待 DOM 渲染
|
|
149
|
+
await nextTick()
|
|
150
|
+
// 获取新高度
|
|
151
|
+
const newHeight = innerRef.value?.scrollHeight || 0
|
|
152
|
+
if (oldHeight !== newHeight) {
|
|
153
|
+
// 先设置回旧高度(防止跳动)
|
|
154
|
+
wrapperStyle.value = { height: oldHeight + "px" }
|
|
155
|
+
isAnimating.value = true
|
|
156
|
+
// 下一帧设置新高度触发过渡
|
|
157
|
+
requestAnimationFrame(() => {
|
|
158
|
+
updateWrapperHeight(newHeight)
|
|
159
|
+
})
|
|
160
|
+
} else {
|
|
161
|
+
updateWrapperHeight(newHeight, false)
|
|
162
|
+
}
|
|
163
|
+
} else {
|
|
164
|
+
// 无内容时收起
|
|
165
|
+
updateWrapperHeight(0)
|
|
166
|
+
isAnimating.value = false
|
|
167
|
+
setTimeout(() => {
|
|
168
|
+
displaySubItems.value = []
|
|
169
|
+
}, 300)
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
{ immediate: true },
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
// ResizeObserver 监听内层高度变化
|
|
176
|
+
let resizeObserver: ResizeObserver | null = null
|
|
177
|
+
|
|
178
|
+
watch(innerRef, (el) => {
|
|
179
|
+
if (el) {
|
|
180
|
+
resizeObserver = new ResizeObserver((entries) => {
|
|
181
|
+
// 只在非动画状态且高度变化时更新
|
|
182
|
+
const newHeight = entries[0]?.contentRect.height
|
|
183
|
+
if (newHeight !== undefined && !isAnimating.value) {
|
|
184
|
+
updateWrapperHeight(newHeight, false)
|
|
185
|
+
}
|
|
186
|
+
})
|
|
187
|
+
resizeObserver.observe(el as unknown as Element)
|
|
188
|
+
}
|
|
189
|
+
})
|
|
190
|
+
|
|
191
|
+
onUnmounted(() => {
|
|
192
|
+
if (resizeObserver) {
|
|
193
|
+
resizeObserver.disconnect()
|
|
194
|
+
}
|
|
195
|
+
})
|
|
196
|
+
|
|
197
|
+
// 获取子表单项的额外 props
|
|
198
|
+
const getSubFormItemProps = (subItem: FormItemType) => {
|
|
199
|
+
if (subItem.formItemProps) {
|
|
200
|
+
if (subItem.formItemProps instanceof Function) {
|
|
201
|
+
return subItem.formItemProps(props.formModel, subItem)
|
|
202
|
+
}
|
|
203
|
+
return { ...subItem.formItemProps }
|
|
204
|
+
}
|
|
205
|
+
return {}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// 获取子表单项的样式类
|
|
209
|
+
const getSubFormItemStyle = (subItem: FormItemType) => {
|
|
210
|
+
if (!subItem.span) return "el-form-item-full"
|
|
211
|
+
return "el-form-item-" + subItem.span
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// 子表单项变化事件
|
|
215
|
+
const onSubItemChange = (formModel: Fields, formItem: FormItemType) => {
|
|
216
|
+
// 1. 先执行子表单项自己的 change 事件
|
|
217
|
+
if (formItem.eventObject?.change) {
|
|
218
|
+
formItem.eventObject.change(formModel, formItem, formContext!)
|
|
219
|
+
}
|
|
220
|
+
// 2. 向上传递到 CurdForm,保持与其他表单项一致
|
|
221
|
+
if (formContext?.change) {
|
|
222
|
+
formContext.change(formModel, formItem)
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
</script>
|
|
@@ -34,6 +34,7 @@ export interface FormItem {
|
|
|
34
34
|
props?: FormItemPropObject | ((formModel: Fields, formItem: FormItem) => FormItemPropObject)
|
|
35
35
|
formItemProps?: FormItemPropObject | ((formModel: Fields, formItem: FormItem) => void)
|
|
36
36
|
labelWidth?: string | number
|
|
37
|
+
labelPosition?: "left" | "right" | "top" | string
|
|
37
38
|
span?: number
|
|
38
39
|
disabled?: boolean
|
|
39
40
|
tooltip?: string | ((formModel: Fields, formItem: FormItem) => Partial<TooltipProps> | string) | Partial<TooltipProps>
|
|
@@ -43,7 +44,7 @@ export interface FormItem {
|
|
|
43
44
|
empty?: string | unknown
|
|
44
45
|
sortIndex?: number
|
|
45
46
|
}
|
|
46
|
-
export type FormItemTypeEmun = "input" | "select" | "radio" | "checkbox" | "input-number" | "switch" | "file" | "date-picker" | "time-picker" | "color-picker" | "value" | "tree-select" | "autocomplete"
|
|
47
|
+
export type FormItemTypeEmun = "input" | "select" | "radio" | "checkbox" | "input-number" | "switch" | "file" | "date-picker" | "time-picker" | "color-picker" | "value" | "tree-select" | "autocomplete" | "choose"
|
|
47
48
|
export interface FormItemPropObject extends Fields {
|
|
48
49
|
slots?: Record<string, (props?: FormItemPropObject) => VNode | VNode[] | string | null>
|
|
49
50
|
all?: boolean | CurdFormOptionItem
|
|
@@ -74,6 +75,7 @@ export interface FormContext {
|
|
|
74
75
|
setOptions: (prop: string, options: CurdFormOptionItem[], config?: unknown) => void
|
|
75
76
|
change: (formModel: Fields, formItem: FormItem) => void
|
|
76
77
|
formModel: Fields
|
|
78
|
+
formSchema: FormSchema
|
|
77
79
|
formRef: InstanceType<typeof ElForm> | undefined
|
|
78
80
|
components: Record<string, unknown>
|
|
79
81
|
}
|
|
@@ -85,6 +87,10 @@ export interface CurdFormOptionItem extends OptionItem {
|
|
|
85
87
|
disabled?: boolean
|
|
86
88
|
type?: string | "radio" | "button"
|
|
87
89
|
rawContent?: boolean
|
|
90
|
+
/** 引用的表单项 prop 数组,用于 choose 类型 */
|
|
91
|
+
props?: string[]
|
|
92
|
+
/** 内联表单项定义,用于 choose 类型 */
|
|
93
|
+
items?: FormItem[]
|
|
88
94
|
}
|
|
89
95
|
// interface EventObjectDefault {
|
|
90
96
|
// change?: (formModel: Fields, formItem: FormItem, proxy: any) => void
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.curd-form{display:flex;flex-wrap:wrap;position:relative;box-sizing:border-box;min-width:0;align-items:flex-start;margin-left:calc(-1 * var(--curd-form-gutter)/ 2);margin-right:calc(-1 * var(--curd-form-gutter)/ 2)}.curd-form .el-form-item{padding:0 calc(var(--curd-form-gutter)/ 2);box-sizing:border-box}.curd-form .el-form-item .el-form-item__label:before{margin-left:-10px}.curd-form.el-form--inline .el-form-item{flex:0 0 auto}.curd-form .el-form-item-full{flex:0 0 100%}.curd-form .el-form-item-1,.curd-form.el-form--inline .el-form-item-1{flex:0 0 calc(4.1666666667% * 1)}.curd-form .el-form-item-2,.curd-form.el-form--inline .el-form-item-2{flex:0 0 calc(4.1666666667% * 2)}.curd-form .el-form-item-3,.curd-form.el-form--inline .el-form-item-3{flex:0 0 calc(4.1666666667% * 3)}.curd-form .el-form-item-4,.curd-form.el-form--inline .el-form-item-4{flex:0 0 calc(4.1666666667% * 4)}.curd-form .el-form-item-5,.curd-form.el-form--inline .el-form-item-5{flex:0 0 calc(4.1666666667% * 5)}.curd-form .el-form-item-6,.curd-form.el-form--inline .el-form-item-6{flex:0 0 calc(4.1666666667% * 6)}.curd-form .el-form-item-7,.curd-form.el-form--inline .el-form-item-7{flex:0 0 calc(4.1666666667% * 7)}.curd-form .el-form-item-8,.curd-form.el-form--inline .el-form-item-8{flex:0 0 calc(4.1666666667% * 8)}.curd-form .el-form-item-9,.curd-form.el-form--inline .el-form-item-9{flex:0 0 calc(4.1666666667% * 9)}.curd-form .el-form-item-10,.curd-form.el-form--inline .el-form-item-10{flex:0 0 calc(4.1666666667% * 10)}.curd-form .el-form-item-11,.curd-form.el-form--inline .el-form-item-11{flex:0 0 calc(4.1666666667% * 11)}.curd-form .el-form-item-12,.curd-form.el-form--inline .el-form-item-12{flex:0 0 calc(4.1666666667% * 12)}.curd-form .el-form-item-13,.curd-form.el-form--inline .el-form-item-13{flex:0 0 calc(4.1666666667% * 13)}.curd-form .el-form-item-14,.curd-form.el-form--inline .el-form-item-14{flex:0 0 calc(4.1666666667% * 14)}.curd-form .el-form-item-15,.curd-form.el-form--inline .el-form-item-15{flex:0 0 calc(4.1666666667% * 15)}.curd-form .el-form-item-16,.curd-form.el-form--inline .el-form-item-16{flex:0 0 calc(4.1666666667% * 16)}.curd-form .el-form-item-17,.curd-form.el-form--inline .el-form-item-17{flex:0 0 calc(4.1666666667% * 17)}.curd-form .el-form-item-18,.curd-form.el-form--inline .el-form-item-18{flex:0 0 calc(4.1666666667% * 18)}.curd-form .el-form-item-19,.curd-form.el-form--inline .el-form-item-19{flex:0 0 calc(4.1666666667% * 19)}.curd-form .el-form-item-20,.curd-form.el-form--inline .el-form-item-20{flex:0 0 calc(4.1666666667% * 20)}.curd-form .el-form-item-21,.curd-form.el-form--inline .el-form-item-21{flex:0 0 calc(4.1666666667% * 21)}.curd-form .el-form-item-22,.curd-form.el-form--inline .el-form-item-22{flex:0 0 calc(4.1666666667% * 22)}.curd-form .el-form-item-23,.curd-form.el-form--inline .el-form-item-23{flex:0 0 calc(4.1666666667% * 23)}.curd-form .el-form-item-24,.curd-form.el-form--inline .el-form-item-24{flex:0 0 calc(4.1666666667% * 24)}.curd-form .form-item{width:100%;display:flex;min-width:0}.curd-form .form-item .tooltip{color:var(--el-button-text-color);margin-left:10px;vertical-align:middle;color:var(--el-text-color-secondary)}.curd-form .form-item .tooltip:hover{color:var(--color-primary)}.curd-form .form-item .empty{color:var(--el-text-color-secondary)}.curd-form .schema-form-radio .el-radio-group{vertical-align:top}.curd-form .schema-tree-select{width:100%}.curd-form .el-checkbox-group.single .el-checkbox-button+.el-checkbox-button{margin-left:10px}.curd-form .el-checkbox-group.single .el-checkbox-button .el-checkbox-button__inner{border:var(--el-border);border-radius:var(--el-border-radius-base);padding-left:20px;padding-right:20px}.curd-form .el-checkbox-group.single .el-checkbox-button.is-checked .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.curd-form .tooltip{color:var(--el-button-text-color);margin-left:10px;vertical-align:middle}.schema-form-select-check{height:25px;margin-left:20px;margin-top:10px;display:block}.schema-form-select-check :deep(.el-checkbox__input){vertical-align:middle}
|
|
1
|
+
.curd-form{display:flex;flex-wrap:wrap;position:relative;box-sizing:border-box;min-width:0;align-items:flex-start;margin-left:calc(-1 * var(--curd-form-gutter)/ 2);margin-right:calc(-1 * var(--curd-form-gutter)/ 2)}.curd-form .el-form-item{padding:0 calc(var(--curd-form-gutter)/ 2);box-sizing:border-box}.curd-form .el-form-item .el-form-item__label:before{margin-left:-10px}.curd-form.el-form--inline .el-form-item{flex:0 0 auto}.curd-form .el-form-item-full{flex:0 0 100%}.curd-form .el-form-item-1,.curd-form.el-form--inline .el-form-item-1{flex:0 0 calc(4.1666666667% * 1)}.curd-form .el-form-item-2,.curd-form.el-form--inline .el-form-item-2{flex:0 0 calc(4.1666666667% * 2)}.curd-form .el-form-item-3,.curd-form.el-form--inline .el-form-item-3{flex:0 0 calc(4.1666666667% * 3)}.curd-form .el-form-item-4,.curd-form.el-form--inline .el-form-item-4{flex:0 0 calc(4.1666666667% * 4)}.curd-form .el-form-item-5,.curd-form.el-form--inline .el-form-item-5{flex:0 0 calc(4.1666666667% * 5)}.curd-form .el-form-item-6,.curd-form.el-form--inline .el-form-item-6{flex:0 0 calc(4.1666666667% * 6)}.curd-form .el-form-item-7,.curd-form.el-form--inline .el-form-item-7{flex:0 0 calc(4.1666666667% * 7)}.curd-form .el-form-item-8,.curd-form.el-form--inline .el-form-item-8{flex:0 0 calc(4.1666666667% * 8)}.curd-form .el-form-item-9,.curd-form.el-form--inline .el-form-item-9{flex:0 0 calc(4.1666666667% * 9)}.curd-form .el-form-item-10,.curd-form.el-form--inline .el-form-item-10{flex:0 0 calc(4.1666666667% * 10)}.curd-form .el-form-item-11,.curd-form.el-form--inline .el-form-item-11{flex:0 0 calc(4.1666666667% * 11)}.curd-form .el-form-item-12,.curd-form.el-form--inline .el-form-item-12{flex:0 0 calc(4.1666666667% * 12)}.curd-form .el-form-item-13,.curd-form.el-form--inline .el-form-item-13{flex:0 0 calc(4.1666666667% * 13)}.curd-form .el-form-item-14,.curd-form.el-form--inline .el-form-item-14{flex:0 0 calc(4.1666666667% * 14)}.curd-form .el-form-item-15,.curd-form.el-form--inline .el-form-item-15{flex:0 0 calc(4.1666666667% * 15)}.curd-form .el-form-item-16,.curd-form.el-form--inline .el-form-item-16{flex:0 0 calc(4.1666666667% * 16)}.curd-form .el-form-item-17,.curd-form.el-form--inline .el-form-item-17{flex:0 0 calc(4.1666666667% * 17)}.curd-form .el-form-item-18,.curd-form.el-form--inline .el-form-item-18{flex:0 0 calc(4.1666666667% * 18)}.curd-form .el-form-item-19,.curd-form.el-form--inline .el-form-item-19{flex:0 0 calc(4.1666666667% * 19)}.curd-form .el-form-item-20,.curd-form.el-form--inline .el-form-item-20{flex:0 0 calc(4.1666666667% * 20)}.curd-form .el-form-item-21,.curd-form.el-form--inline .el-form-item-21{flex:0 0 calc(4.1666666667% * 21)}.curd-form .el-form-item-22,.curd-form.el-form--inline .el-form-item-22{flex:0 0 calc(4.1666666667% * 22)}.curd-form .el-form-item-23,.curd-form.el-form--inline .el-form-item-23{flex:0 0 calc(4.1666666667% * 23)}.curd-form .el-form-item-24,.curd-form.el-form--inline .el-form-item-24{flex:0 0 calc(4.1666666667% * 24)}.curd-form .form-item{width:100%;display:flex;min-width:0}.curd-form .form-item .tooltip{color:var(--el-button-text-color);margin-left:10px;vertical-align:middle;color:var(--el-text-color-secondary)}.curd-form .form-item .tooltip:hover{color:var(--color-primary)}.curd-form .form-item .empty{color:var(--el-text-color-secondary)}.curd-form .schema-form-radio .el-radio-group{vertical-align:top}.curd-form .schema-tree-select{width:100%}.curd-form .el-checkbox-group.single .el-checkbox-button+.el-checkbox-button{margin-left:10px}.curd-form .el-checkbox-group.single .el-checkbox-button .el-checkbox-button__inner{border:var(--el-border);border-radius:var(--el-border-radius-base);padding-left:20px;padding-right:20px}.curd-form .el-checkbox-group.single .el-checkbox-button.is-checked .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.curd-form .tooltip{color:var(--el-button-text-color);margin-left:10px;vertical-align:middle}.schema-form-select-check{height:25px;margin-left:20px;margin-top:10px;display:block}.schema-form-select-check :deep(.el-checkbox__input){vertical-align:middle}.schema-form-choose{width:100%}.schema-form-choose .choose-content-wrapper{width:100%}.schema-form-choose .choose-content-wrapper .choose-sub-items-wrapper{overflow:hidden;transition:height .3s ease-out}.schema-form-choose .choose-content-wrapper .choose-sub-items{padding-top:12px;padding-bottom:1px;overflow:hidden}.schema-form-choose .choose-content-wrapper .choose-sub-items .el-form-item{margin-bottom:18px}.schema-form-choose .choose-content-wrapper .choose-sub-items .el-form-item:last-child{margin-bottom:0}.schema-form-choose .empty,.schema-form-choose .loading{display:flex;align-items:center;justify-content:center;gap:4px;padding:8px 0;color:var(--el-text-color-secondary)}
|
package/theme-chalk/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.constant-status{--el-tag-border-opacity:1;--el-tag-bg-opacity:1;--el-tag-font-size:var(--el-font-size-base)}.constant-status .el-tag__content{display:flex;align-items:center;line-height:1}.constant-status .el-icon,.constant-status .name{vertical-align:top;line-height:1}.constant-status .dot{width:5px;height:5px;display:inline-block;vertical-align:middle;border-radius:50%;background:var(--el-tag-text-color);margin-right:5px}.constant-status.no-border{padding:0}.constant-status.dot-status{padding:0}.constant-status.dot-status .name{color:var(--el-text-color-primary)}.constant-status.el-tag--default{padding:0;--el-tag-bg-color:transparent;--el-tag-border-color:transparent;--el-tag-hover-color:var(--el-text-color-primary);--el-tag-text-color:var(--el-text-color-primary)}.constant-status.el-tag--blue{--el-tag-bg-color:rgba(236, 245, 255, var(--el-tag-bg-color));--el-tag-border-color:rgba(217, 236, 255, var(--el-tag-border-color));--el-tag-hover-color:rgba(111, 122, 175, 1);--el-tag-text-color:rgba(111, 122, 175, 1)}.constant-status.el-tag--blue.el-tag--dark{--el-tag-bg-color:rgba(111, 122, 175, 1);--el-tag-border-color:rgba(111, 122, 175, 1);--el-tag-hover-color:rgba(111, 122, 175, 0.8);--el-tag-text-color:#fff}.constant-status.el-tag--blue.el-tag--plain{--el-tag-bg-color:var(--el-fill-color-blank)}.constant-status.el-tag--yellow{--el-tag-bg-color:rgba(255, 251, 230, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(255, 229, 143, var(--el-tag-borer-opacity));--el-tag-hover-color:rgba(212, 136, 6, 1);--el-tag-text-color:rgba(212, 136, 6, 1)}.constant-status.el-tag--yellow.el-tag--dark{--el-tag-bg-color:rgba(212, 136, 6, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(212, 136, 6, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(212, 136, 6, 1);--el-tag-text-color:#fff}.constant-status.el-tag--yellow.el-tag--plain{--el-tag-bg-color:var(--el-fill-color-blank)}.constant-status.el-tag--blue-dark{--el-tag-bg-color:rgba(240, 245, 255, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(173, 198, 255, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(29, 57, 196, 1);--el-tag-text-color:rgba(29, 57, 196, 1)}.constant-status.el-tag--blue-dark.el-tag--dark{--el-tag-bg-color:rgba(29, 57, 196, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(29, 57, 196, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(29, 57, 196, 1);--el-tag-text-color:#fff}.constant-status.el-tag--blue-dark.el-tag--plain{--el-tag-bg-color:var(--el-fill-color-blank)}.constant-status.el-tag--red-purple{--el-tag-bg-color:rgba(251, 243, 248, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(227, 206, 219, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(191, 117, 163, 1);--el-tag-text-color:rgba(191, 117, 163, 1)}.constant-status.el-tag--red-purple.el-tag--dark{--el-tag-bg-color:rgba(191, 117, 163, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(191, 117, 163, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(191, 117, 163, 1);--el-tag-text-color:#fff}.constant-status.el-tag--red-purple.el-tag--plain{--el-tag-bg-color:var(--el-fill-color-blank)}.constant-status.el-tag--blueness{--el-tag-bg-color:rgba(243, 250, 251, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(194, 213, 221, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(99, 150, 177, 1);--el-tag-text-color:rgba(99, 150, 177, 1)}.constant-status.el-tag--blueness.el-tag--dark{--el-tag-bg-color:rgba(99, 150, 177, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(99, 150, 177, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(99, 150, 177, 1);--el-tag-text-color:#fff}.constant-status.el-tag--blueness.el-tag--plain{--el-tag-bg-color:var(--el-fill-color-blank)}.constant-status.no-border{border:0!important;background:0 0}.curd-form{display:flex;flex-wrap:wrap;position:relative;box-sizing:border-box;min-width:0;align-items:flex-start;margin-left:calc(-1 * var(--curd-form-gutter)/ 2);margin-right:calc(-1 * var(--curd-form-gutter)/ 2)}.curd-form .el-form-item{padding:0 calc(var(--curd-form-gutter)/ 2);box-sizing:border-box}.curd-form .el-form-item .el-form-item__label:before{margin-left:-10px}.curd-form.el-form--inline .el-form-item{flex:0 0 auto}.curd-form .el-form-item-full{flex:0 0 100%}.curd-form .el-form-item-1,.curd-form.el-form--inline .el-form-item-1{flex:0 0 calc(4.1666666667% * 1)}.curd-form .el-form-item-2,.curd-form.el-form--inline .el-form-item-2{flex:0 0 calc(4.1666666667% * 2)}.curd-form .el-form-item-3,.curd-form.el-form--inline .el-form-item-3{flex:0 0 calc(4.1666666667% * 3)}.curd-form .el-form-item-4,.curd-form.el-form--inline .el-form-item-4{flex:0 0 calc(4.1666666667% * 4)}.curd-form .el-form-item-5,.curd-form.el-form--inline .el-form-item-5{flex:0 0 calc(4.1666666667% * 5)}.curd-form .el-form-item-6,.curd-form.el-form--inline .el-form-item-6{flex:0 0 calc(4.1666666667% * 6)}.curd-form .el-form-item-7,.curd-form.el-form--inline .el-form-item-7{flex:0 0 calc(4.1666666667% * 7)}.curd-form .el-form-item-8,.curd-form.el-form--inline .el-form-item-8{flex:0 0 calc(4.1666666667% * 8)}.curd-form .el-form-item-9,.curd-form.el-form--inline .el-form-item-9{flex:0 0 calc(4.1666666667% * 9)}.curd-form .el-form-item-10,.curd-form.el-form--inline .el-form-item-10{flex:0 0 calc(4.1666666667% * 10)}.curd-form .el-form-item-11,.curd-form.el-form--inline .el-form-item-11{flex:0 0 calc(4.1666666667% * 11)}.curd-form .el-form-item-12,.curd-form.el-form--inline .el-form-item-12{flex:0 0 calc(4.1666666667% * 12)}.curd-form .el-form-item-13,.curd-form.el-form--inline .el-form-item-13{flex:0 0 calc(4.1666666667% * 13)}.curd-form .el-form-item-14,.curd-form.el-form--inline .el-form-item-14{flex:0 0 calc(4.1666666667% * 14)}.curd-form .el-form-item-15,.curd-form.el-form--inline .el-form-item-15{flex:0 0 calc(4.1666666667% * 15)}.curd-form .el-form-item-16,.curd-form.el-form--inline .el-form-item-16{flex:0 0 calc(4.1666666667% * 16)}.curd-form .el-form-item-17,.curd-form.el-form--inline .el-form-item-17{flex:0 0 calc(4.1666666667% * 17)}.curd-form .el-form-item-18,.curd-form.el-form--inline .el-form-item-18{flex:0 0 calc(4.1666666667% * 18)}.curd-form .el-form-item-19,.curd-form.el-form--inline .el-form-item-19{flex:0 0 calc(4.1666666667% * 19)}.curd-form .el-form-item-20,.curd-form.el-form--inline .el-form-item-20{flex:0 0 calc(4.1666666667% * 20)}.curd-form .el-form-item-21,.curd-form.el-form--inline .el-form-item-21{flex:0 0 calc(4.1666666667% * 21)}.curd-form .el-form-item-22,.curd-form.el-form--inline .el-form-item-22{flex:0 0 calc(4.1666666667% * 22)}.curd-form .el-form-item-23,.curd-form.el-form--inline .el-form-item-23{flex:0 0 calc(4.1666666667% * 23)}.curd-form .el-form-item-24,.curd-form.el-form--inline .el-form-item-24{flex:0 0 calc(4.1666666667% * 24)}.curd-form .form-item{width:100%;display:flex;min-width:0}.curd-form .form-item .tooltip{color:var(--el-button-text-color);margin-left:10px;vertical-align:middle;color:var(--el-text-color-secondary)}.curd-form .form-item .tooltip:hover{color:var(--color-primary)}.curd-form .form-item .empty{color:var(--el-text-color-secondary)}.curd-form .schema-form-radio .el-radio-group{vertical-align:top}.curd-form .schema-tree-select{width:100%}.curd-form .el-checkbox-group.single .el-checkbox-button+.el-checkbox-button{margin-left:10px}.curd-form .el-checkbox-group.single .el-checkbox-button .el-checkbox-button__inner{border:var(--el-border);border-radius:var(--el-border-radius-base);padding-left:20px;padding-right:20px}.curd-form .el-checkbox-group.single .el-checkbox-button.is-checked .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.curd-form .tooltip{color:var(--el-button-text-color);margin-left:10px;vertical-align:middle}.schema-form-select-check{height:25px;margin-left:20px;margin-top:10px;display:block}.schema-form-select-check :deep(.el-checkbox__input){vertical-align:middle}.table-container .table-pager{margin:15px 0;display:flex;justify-content:space-between;align-items:center}.table-container .table-pager .pagination{justify-content:end;font-weight:400}.table-container .table-control{display:flex;justify-content:space-between;padding-bottom:10px;align-items:flex-end}.table-container .table-control .min-control>.el-button{margin-right:10px}.table-container .s-table-filter .el-form--inline .el-form-item{margin-right:15px}.table-container .el-button+.dropdown-item{margin-left:10px}.table-container .copy{cursor:pointer;margin-right:3px}.table-container .header-td{display:inline-flex;align-items:center;word-break:break-word}.table-container .header-td.center{justify-content:center}.table-container .header-td.right{justify-content:flex-end}.table-container .filter-dropdown-toggle{display:inline-block;line-height:1;cursor:pointer;position:relative;margin-left:3px}.table-container .filter-dropdown-toggle.active{color:var(--el-color-primary)}.table-container .table-menu{display:inline-block;vertical-align:middle;position:relative}.table-container .table-menu .table-menu-item{color:var(--el-button-text-color);font-size:14px;border-radius:4px;border:1px solid var(--el-button-border-color);padding:0;height:28px;width:28px;vertical-align:top;vertical-align:middle}.table-container .table-menu .table-menu-item:not(.is-disabled):active,.table-container .table-menu .table-menu-item:not(.is-disabled):focus{border-color:var(--el-button-border-color)}.table-container .table-menu .table-menu-item+.table-menu-item{margin-left:3px}.table-container .table-menu .table-menu-item:hover{background-color:var(--el-fill-color-light);border-color:var(--el-button-border-color)}.table-container .table-menu .current-size{color:var(--el-color-primary)}.table-container .simple-page{padding:20px 0;text-align:right}.table-container .simple-page>span{margin:0 10px}.curd-table-dropdown-menu .el-dropdown-menu__item{padding:0}.curd-table-dropdown-menu .el-dropdown-menu__item:hover{background-color:var(--el-fill-color-light)}.curd-table-dropdown-menu .el-dropdown-menu__item .el-button{display:block;padding:5px 16px;flex:1;text-align:left;font-size:12px}.table-main-filter-dropdown{padding:0}.table-main-filter-dropdown .search{position:relative;margin-bottom:5px}.table-main-filter-dropdown .search input{outline:0;border:0;width:100%;padding:5px 10px;background:#f4f4f4}.table-main-filter-dropdown .search .icon-suffix{position:absolute;right:10px;top:50%;transform:translateY(-50%)}.table-main-filter-dropdown .search .icon-close1{position:absolute;right:30px;top:50%;transform:translateY(-50%);cursor:pointer;opacity:.7}.table-main-filter-dropdown .search .icon-close1:hover{opacity:1;color:#444}.table-main-filter-dropdown .select li{line-height:30px;padding:0 20px;list-style:none;cursor:pointer}.table-main-filter-dropdown .select li:hover{background:#f4f4f4}.table-main-filter-dropdown .select li.active{color:var(--el-color-primary)}.filter-type-popper{width:auto!important;min-width:0!important;padding:0!important;box-shadow:none!important}.table-filter{display:flex;flex-direction:column;position:relative}.table-filter .filter-search-box{min-height:32px;border-width:1px;border-style:solid;border-color:var(--el-border-color);display:flex;min-width:460px;align-items:center;justify-items:center;justify-content:space-between;overflow:hidden;border-radius:var(--el-border-radius-base);transition:all .3s}.table-filter .filter-search-box.is-focus{border-color:var(--el-color-primary)}.table-filter .filter-search-box .filter-action{height:32px;line-height:32px;align-self:flex-end;display:flex}.table-filter .filter-search-box .filter-action div{cursor:pointer}.table-filter .filter-search-box .filter-action .empty{color:var(--el-color-info);margin-right:15px;padding-left:10px}.table-filter .filter-search-box .filter-action .empty:hover{color:var(--el-color-primary)}.table-filter .filter-search-box .filter-action .search{padding:0 20px;text-align:center;position:relative;display:flex;align-items:center}.table-filter .filter-search-box .filter-action .search:before{content:"";display:block;width:1px;height:20px;background:var(--el-border-color);position:absolute;left:0;top:50%;transform:translateY(-50%)}.table-filter .filter-search-box .filter-action .search:hover{color:var(--el-color-primary)}.table-filter .filter-external .el-form-item{margin-bottom:10px}.table-filter .filter-tags{height:100%;flex-wrap:wrap;display:flex;flex:1;align-items:flex-start;justify-items:center}.table-filter .filter-tags .tag-title{font-size:12px;color:var(--el-text-color-placeholder);height:24px;line-height:24px;margin:0 15px 5px 0}.table-filter .filter-tags .dropdown-toggle{white-space:nowrap;display:flex;align-items:center;justify-items:center;font-size:12px}.table-filter .filter-tags .tag-list{flex:1;display:flex;flex-wrap:wrap}.table-filter .filter-tags .tag-item{height:24px;line-height:24px;white-space:nowrap;display:flex;align-items:center;justify-items:center;padding:0 10px;color:var(--el-color-info-dark-2);background:var(--el-color-info-light-9);font-size:12px;border-radius:var(--el-border-radius-base);margin-right:5px;margin-bottom:10px;cursor:pointer}.table-filter .filter-tags .tag-item .action{color:var(--el-color-info-light-5);text-align:center;width:14px;height:14px;line-height:14px;border-radius:50%;margin-left:10px;font-size:14px;cursor:pointer}.table-filter .filter-tags .tag-item .action:hover{color:var(--el-color-primary)}.table-filter .tag-clear{margin-bottom:2px;margin-left:10px}.table-filter .filter-item .el-form-item{margin:0}.table-filter .filter-item .el-form-item__label{display:none}.table-filter .filter-item .el-input{--el-input-border:none;--el-input-border-color:transparent;--el-input-focus-border-color:transparent;--el-input-hover-border-color:transparent}.table-filter .filter-item .el-select{--el-select-border-color-hover:transparent;--el-select-input-focus-border-color:transparent}.table-filter .filter-item .el-select__wrapper{box-shadow:none}.table-filter-type{box-shadow:var(--el-box-shadow-light);background:var(--el-bg-color);z-index:3060;min-width:150px;max-height:300px;overflow:hidden;--el-font-size-base:12px}.table-filter-type .base-select{--el-font-size-base:12px;height:100%;max-height:300px;display:flex;flex-direction:column}.table-filter-type .base-select .remote-input{width:100%}.table-filter-type .base-select .remote-input .el-input{--el-input-border-radius:0;--el-input-bg-color:var(--el-bg-color-page);--el-input-border:none;--el-input-hover-border-color:transparent;--el-input-focus-border-color:var(--el-border-color)}.table-filter-type .base-select .el-empty__image svg{height:50px}.table-filter-type .base-select .select-spinner{flex:1;position:relative;overflow-y:auto}.table-filter-type .base-select .select-spinner ul{margin:0;padding:0}.table-filter-type .base-select .select-spinner ul li{list-style:none;padding:6px 10px;cursor:pointer;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box;font-size:var(--el-font-size-base)}.table-filter-type .base-select .select-spinner ul li.active{color:var(--el-color-primary)}.table-filter-type .base-select .select-spinner ul li:hover{background:var(--el-color-primary-light-9);color:var(--el-color-primary)}.table-filter-toggle{padding:0 10px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;min-width:120px;font-size:12px}.table-filter-toggle .current-filter-label{margin-right:20px}.table-filter-List{box-shadow:0 2px 8px 0 rgba(0,0,0,.2);background:var(--el-bg-color);z-index:3060;border-radius:2px;max-height:300px;overflow-y:auto;font-size:12px}.table-filter-List ul{width:100%;margin:0;padding:0}.table-filter-List ul li{width:100%;list-style:none;padding:6px 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box;cursor:pointer}.table-filter-List ul li:hover{background:var(--el-color-primary-light-9);color:var(--el-color-primary)}.table-filter-List ul li.active{color:var(--el-color-primary);font-weight:600}.table-filter-tag-popper{max-height:400px;overflow:auto;padding:0!important;width:250px!important}.table-filter-tag-popper .base-select{--el-font-size-base:12px;height:100%;max-height:300px;display:flex;flex-direction:column}.table-filter-tag-popper .base-select .remote-input{width:100%}.table-filter-tag-popper .base-select .remote-input :deep(.el-input){--el-input-border-radius:0;--el-input-bg-color:var(--el-bg-color-page);--el-input-border:none;--el-input-hover-border-color:transparent;--el-input-focus-border-color:var(--el-border-color)}.table-filter-tag-popper .base-select :deep(.el-empty__imagesvg){height:50px}.table-filter-tag-popper .base-select .select-spinner{flex:1;position:relative;overflow-y:auto}.table-filter-tag-popper .base-select .select-spinner ul{margin:0;padding:0}.table-filter-tag-popper .base-select .select-spinner ul li{list-style:none;padding:6px 10px;cursor:pointer;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--el-font-size-base);box-sizing:border-box}.table-filter-tag-popper .base-select .select-spinner ul li.active{color:var(--el-color-primary)}.table-filter-tag-popper .base-select .select-spinner ul li:hover{background:var(--el-color-primary-light-9);color:var(--el-color-primary)}.detail-info{flex:1}.detail-info .detail-info-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.detail-info .title{border-left:3px solid var(--el-color-primary);padding-left:10px;line-height:1.2}.detail-info+.detail-info{margin-top:30px}.detail-info.card{background:var(--el-bg-color);border-radius:0;opacity:1;border:1px solid var(--el-border-color)}.detail-info.card[shadow]{box-shadow:var(--el-box-shadow-lighter)}.detail-info.card .detail-info-header{height:50px;border-bottom:1px solid var(--el-border-color);margin:0;padding:0 20px}.detail-info.card .detail-info-header .title{border-left:0;padding:0}.detail-info.card .detail-info-body{padding:10px 20px 20px 20px;margin:0}.detail-info .detail-info-body{display:flex;flex-wrap:wrap;position:relative;box-sizing:border-box}.detail-info .detail-info-body:not(.table){margin-left:-calc(var(--gutter)/2);margin-right:-calc(var(--gutter)/2)}.detail-info .detail-info-body .table-detail-col{box-sizing:border-box}.detail-info .detail-info-body .item-col{line-height:20px;height:100%;box-sizing:border-box;display:flex}.detail-info .detail-info-body .item-col.item-col-top{flex-direction:column}.detail-info .detail-info-body .item-col.item-col-top .det{padding:0}.detail-info .detail-info-body .item-col .label{padding:4px 0;color:var(--el-text-color-secondary);box-sizing:border-box;vertical-align:middle;float:left;display:flex;align-items:center}.detail-info .detail-info-body .item-col .det{flex:1;padding:4px 10px;box-sizing:border-box;min-height:20px;height:100%;word-break:break-all;overflow:hidden}.detail-info .detail-info-body.table{border-top:1px solid var(--el-border-color);border-left:1px solid var(--el-border-color)}.detail-info .detail-info-body.table .table-detail-col{padding:0!important;border-bottom:1px solid var(--el-border-color);border-right:1px solid var(--el-border-color)}.detail-info .detail-info-body.table .item-col{background:var(--el-fill-color-light);border:1px solid var(--el-bg-color)}.detail-info .detail-info-body.table .item-col .label{padding-left:10px;padding-right:10px;width:100px}.detail-info .detail-info-body.table .item-col .det{border-left:1px solid var(--el-border-color);background-color:var(--el-bg-color)}.curdform-group{background-color:var(--el-bg-color);width:100%;margin:10px auto;border-radius:var(--el-border-radius-base)}.curdform-group .curdform-group-head{padding:15px 28px 5px;margin-bottom:10px;box-sizing:border-box;display:flex;justify-content:space-between;align-items:center}.curdform-group .curdform-group-head+.curdform-group-desc{margin-top:-10px}.curdform-group .curdform-group-head+.curdform-group-body{padding-top:0}.curdform-group .curdform-group-head .left{display:flex;align-items:center;gap:10px}.curdform-group .curdform-group-head .left .icon{background:#f3f4f6;border-radius:50%;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;color:#9ca3af}.curdform-group .curdform-group-head .left .icon i{font-size:22px}.curdform-group .curdform-group-head .left .title{font-size:calc(var(--el-font-size-base) + 2px);font-weight:700}.curdform-group .curdform-group-desc{font-size:var(--el-font-size-base);color:var(--el-text-color-secondary);margin:0 28px}.curdform-group .curdform-group-body{padding:18px 28px 10px}
|
|
1
|
+
.constant-status{--el-tag-border-opacity:1;--el-tag-bg-opacity:1;--el-tag-font-size:var(--el-font-size-base)}.constant-status .el-tag__content{display:flex;align-items:center;line-height:1}.constant-status .el-icon,.constant-status .name{vertical-align:top;line-height:1}.constant-status .dot{width:5px;height:5px;display:inline-block;vertical-align:middle;border-radius:50%;background:var(--el-tag-text-color);margin-right:5px}.constant-status.no-border{padding:0}.constant-status.dot-status{padding:0}.constant-status.dot-status .name{color:var(--el-text-color-primary)}.constant-status.el-tag--default{padding:0;--el-tag-bg-color:transparent;--el-tag-border-color:transparent;--el-tag-hover-color:var(--el-text-color-primary);--el-tag-text-color:var(--el-text-color-primary)}.constant-status.el-tag--blue{--el-tag-bg-color:rgba(236, 245, 255, var(--el-tag-bg-color));--el-tag-border-color:rgba(217, 236, 255, var(--el-tag-border-color));--el-tag-hover-color:rgba(111, 122, 175, 1);--el-tag-text-color:rgba(111, 122, 175, 1)}.constant-status.el-tag--blue.el-tag--dark{--el-tag-bg-color:rgba(111, 122, 175, 1);--el-tag-border-color:rgba(111, 122, 175, 1);--el-tag-hover-color:rgba(111, 122, 175, 0.8);--el-tag-text-color:#fff}.constant-status.el-tag--blue.el-tag--plain{--el-tag-bg-color:var(--el-fill-color-blank)}.constant-status.el-tag--yellow{--el-tag-bg-color:rgba(255, 251, 230, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(255, 229, 143, var(--el-tag-borer-opacity));--el-tag-hover-color:rgba(212, 136, 6, 1);--el-tag-text-color:rgba(212, 136, 6, 1)}.constant-status.el-tag--yellow.el-tag--dark{--el-tag-bg-color:rgba(212, 136, 6, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(212, 136, 6, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(212, 136, 6, 1);--el-tag-text-color:#fff}.constant-status.el-tag--yellow.el-tag--plain{--el-tag-bg-color:var(--el-fill-color-blank)}.constant-status.el-tag--blue-dark{--el-tag-bg-color:rgba(240, 245, 255, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(173, 198, 255, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(29, 57, 196, 1);--el-tag-text-color:rgba(29, 57, 196, 1)}.constant-status.el-tag--blue-dark.el-tag--dark{--el-tag-bg-color:rgba(29, 57, 196, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(29, 57, 196, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(29, 57, 196, 1);--el-tag-text-color:#fff}.constant-status.el-tag--blue-dark.el-tag--plain{--el-tag-bg-color:var(--el-fill-color-blank)}.constant-status.el-tag--red-purple{--el-tag-bg-color:rgba(251, 243, 248, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(227, 206, 219, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(191, 117, 163, 1);--el-tag-text-color:rgba(191, 117, 163, 1)}.constant-status.el-tag--red-purple.el-tag--dark{--el-tag-bg-color:rgba(191, 117, 163, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(191, 117, 163, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(191, 117, 163, 1);--el-tag-text-color:#fff}.constant-status.el-tag--red-purple.el-tag--plain{--el-tag-bg-color:var(--el-fill-color-blank)}.constant-status.el-tag--blueness{--el-tag-bg-color:rgba(243, 250, 251, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(194, 213, 221, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(99, 150, 177, 1);--el-tag-text-color:rgba(99, 150, 177, 1)}.constant-status.el-tag--blueness.el-tag--dark{--el-tag-bg-color:rgba(99, 150, 177, var(--el-tag-bg-opacity));--el-tag-border-color:rgba(99, 150, 177, var(--el-tag-border-opacity));--el-tag-hover-color:rgba(99, 150, 177, 1);--el-tag-text-color:#fff}.constant-status.el-tag--blueness.el-tag--plain{--el-tag-bg-color:var(--el-fill-color-blank)}.constant-status.no-border{border:0!important;background:0 0}.curd-form{display:flex;flex-wrap:wrap;position:relative;box-sizing:border-box;min-width:0;align-items:flex-start;margin-left:calc(-1 * var(--curd-form-gutter)/ 2);margin-right:calc(-1 * var(--curd-form-gutter)/ 2)}.curd-form .el-form-item{padding:0 calc(var(--curd-form-gutter)/ 2);box-sizing:border-box}.curd-form .el-form-item .el-form-item__label:before{margin-left:-10px}.curd-form.el-form--inline .el-form-item{flex:0 0 auto}.curd-form .el-form-item-full{flex:0 0 100%}.curd-form .el-form-item-1,.curd-form.el-form--inline .el-form-item-1{flex:0 0 calc(4.1666666667% * 1)}.curd-form .el-form-item-2,.curd-form.el-form--inline .el-form-item-2{flex:0 0 calc(4.1666666667% * 2)}.curd-form .el-form-item-3,.curd-form.el-form--inline .el-form-item-3{flex:0 0 calc(4.1666666667% * 3)}.curd-form .el-form-item-4,.curd-form.el-form--inline .el-form-item-4{flex:0 0 calc(4.1666666667% * 4)}.curd-form .el-form-item-5,.curd-form.el-form--inline .el-form-item-5{flex:0 0 calc(4.1666666667% * 5)}.curd-form .el-form-item-6,.curd-form.el-form--inline .el-form-item-6{flex:0 0 calc(4.1666666667% * 6)}.curd-form .el-form-item-7,.curd-form.el-form--inline .el-form-item-7{flex:0 0 calc(4.1666666667% * 7)}.curd-form .el-form-item-8,.curd-form.el-form--inline .el-form-item-8{flex:0 0 calc(4.1666666667% * 8)}.curd-form .el-form-item-9,.curd-form.el-form--inline .el-form-item-9{flex:0 0 calc(4.1666666667% * 9)}.curd-form .el-form-item-10,.curd-form.el-form--inline .el-form-item-10{flex:0 0 calc(4.1666666667% * 10)}.curd-form .el-form-item-11,.curd-form.el-form--inline .el-form-item-11{flex:0 0 calc(4.1666666667% * 11)}.curd-form .el-form-item-12,.curd-form.el-form--inline .el-form-item-12{flex:0 0 calc(4.1666666667% * 12)}.curd-form .el-form-item-13,.curd-form.el-form--inline .el-form-item-13{flex:0 0 calc(4.1666666667% * 13)}.curd-form .el-form-item-14,.curd-form.el-form--inline .el-form-item-14{flex:0 0 calc(4.1666666667% * 14)}.curd-form .el-form-item-15,.curd-form.el-form--inline .el-form-item-15{flex:0 0 calc(4.1666666667% * 15)}.curd-form .el-form-item-16,.curd-form.el-form--inline .el-form-item-16{flex:0 0 calc(4.1666666667% * 16)}.curd-form .el-form-item-17,.curd-form.el-form--inline .el-form-item-17{flex:0 0 calc(4.1666666667% * 17)}.curd-form .el-form-item-18,.curd-form.el-form--inline .el-form-item-18{flex:0 0 calc(4.1666666667% * 18)}.curd-form .el-form-item-19,.curd-form.el-form--inline .el-form-item-19{flex:0 0 calc(4.1666666667% * 19)}.curd-form .el-form-item-20,.curd-form.el-form--inline .el-form-item-20{flex:0 0 calc(4.1666666667% * 20)}.curd-form .el-form-item-21,.curd-form.el-form--inline .el-form-item-21{flex:0 0 calc(4.1666666667% * 21)}.curd-form .el-form-item-22,.curd-form.el-form--inline .el-form-item-22{flex:0 0 calc(4.1666666667% * 22)}.curd-form .el-form-item-23,.curd-form.el-form--inline .el-form-item-23{flex:0 0 calc(4.1666666667% * 23)}.curd-form .el-form-item-24,.curd-form.el-form--inline .el-form-item-24{flex:0 0 calc(4.1666666667% * 24)}.curd-form .form-item{width:100%;display:flex;min-width:0}.curd-form .form-item .tooltip{color:var(--el-button-text-color);margin-left:10px;vertical-align:middle;color:var(--el-text-color-secondary)}.curd-form .form-item .tooltip:hover{color:var(--color-primary)}.curd-form .form-item .empty{color:var(--el-text-color-secondary)}.curd-form .schema-form-radio .el-radio-group{vertical-align:top}.curd-form .schema-tree-select{width:100%}.curd-form .el-checkbox-group.single .el-checkbox-button+.el-checkbox-button{margin-left:10px}.curd-form .el-checkbox-group.single .el-checkbox-button .el-checkbox-button__inner{border:var(--el-border);border-radius:var(--el-border-radius-base);padding-left:20px;padding-right:20px}.curd-form .el-checkbox-group.single .el-checkbox-button.is-checked .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.curd-form .tooltip{color:var(--el-button-text-color);margin-left:10px;vertical-align:middle}.schema-form-select-check{height:25px;margin-left:20px;margin-top:10px;display:block}.schema-form-select-check :deep(.el-checkbox__input){vertical-align:middle}.schema-form-choose{width:100%}.schema-form-choose .choose-content-wrapper{width:100%}.schema-form-choose .choose-content-wrapper .choose-sub-items-wrapper{overflow:hidden;transition:height .3s ease-out}.schema-form-choose .choose-content-wrapper .choose-sub-items{padding-top:12px;padding-bottom:1px;overflow:hidden}.schema-form-choose .choose-content-wrapper .choose-sub-items .el-form-item{margin-bottom:18px}.schema-form-choose .choose-content-wrapper .choose-sub-items .el-form-item:last-child{margin-bottom:0}.schema-form-choose .empty,.schema-form-choose .loading{display:flex;align-items:center;justify-content:center;gap:4px;padding:8px 0;color:var(--el-text-color-secondary)}.table-container .table-pager{margin:15px 0;display:flex;justify-content:space-between;align-items:center}.table-container .table-pager .pagination{justify-content:end;font-weight:400}.table-container .table-control{display:flex;justify-content:space-between;padding-bottom:10px;align-items:flex-end}.table-container .table-control .min-control>.el-button{margin-right:10px}.table-container .s-table-filter .el-form--inline .el-form-item{margin-right:15px}.table-container .el-button+.dropdown-item{margin-left:10px}.table-container .copy{cursor:pointer;margin-right:3px}.table-container .header-td{display:inline-flex;align-items:center;word-break:break-word}.table-container .header-td.center{justify-content:center}.table-container .header-td.right{justify-content:flex-end}.table-container .filter-dropdown-toggle{display:inline-block;line-height:1;cursor:pointer;position:relative;margin-left:3px}.table-container .filter-dropdown-toggle.active{color:var(--el-color-primary)}.table-container .table-menu{display:inline-block;vertical-align:middle;position:relative}.table-container .table-menu .table-menu-item{color:var(--el-button-text-color);font-size:14px;border-radius:4px;border:1px solid var(--el-button-border-color);padding:0;height:28px;width:28px;vertical-align:top;vertical-align:middle}.table-container .table-menu .table-menu-item:not(.is-disabled):active,.table-container .table-menu .table-menu-item:not(.is-disabled):focus{border-color:var(--el-button-border-color)}.table-container .table-menu .table-menu-item+.table-menu-item{margin-left:3px}.table-container .table-menu .table-menu-item:hover{background-color:var(--el-fill-color-light);border-color:var(--el-button-border-color)}.table-container .table-menu .current-size{color:var(--el-color-primary)}.table-container .simple-page{padding:20px 0;text-align:right}.table-container .simple-page>span{margin:0 10px}.curd-table-dropdown-menu .el-dropdown-menu__item{padding:0}.curd-table-dropdown-menu .el-dropdown-menu__item:hover{background-color:var(--el-fill-color-light)}.curd-table-dropdown-menu .el-dropdown-menu__item .el-button{display:block;padding:5px 16px;flex:1;text-align:left;font-size:12px}.table-main-filter-dropdown{padding:0}.table-main-filter-dropdown .search{position:relative;margin-bottom:5px}.table-main-filter-dropdown .search input{outline:0;border:0;width:100%;padding:5px 10px;background:#f4f4f4}.table-main-filter-dropdown .search .icon-suffix{position:absolute;right:10px;top:50%;transform:translateY(-50%)}.table-main-filter-dropdown .search .icon-close1{position:absolute;right:30px;top:50%;transform:translateY(-50%);cursor:pointer;opacity:.7}.table-main-filter-dropdown .search .icon-close1:hover{opacity:1;color:#444}.table-main-filter-dropdown .select li{line-height:30px;padding:0 20px;list-style:none;cursor:pointer}.table-main-filter-dropdown .select li:hover{background:#f4f4f4}.table-main-filter-dropdown .select li.active{color:var(--el-color-primary)}.filter-type-popper{width:auto!important;min-width:0!important;padding:0!important;box-shadow:none!important}.table-filter{display:flex;flex-direction:column;position:relative}.table-filter .filter-search-box{min-height:32px;border-width:1px;border-style:solid;border-color:var(--el-border-color);display:flex;min-width:460px;align-items:center;justify-items:center;justify-content:space-between;overflow:hidden;border-radius:var(--el-border-radius-base);transition:all .3s}.table-filter .filter-search-box.is-focus{border-color:var(--el-color-primary)}.table-filter .filter-search-box .filter-action{height:32px;line-height:32px;align-self:flex-end;display:flex}.table-filter .filter-search-box .filter-action div{cursor:pointer}.table-filter .filter-search-box .filter-action .empty{color:var(--el-color-info);margin-right:15px;padding-left:10px}.table-filter .filter-search-box .filter-action .empty:hover{color:var(--el-color-primary)}.table-filter .filter-search-box .filter-action .search{padding:0 20px;text-align:center;position:relative;display:flex;align-items:center}.table-filter .filter-search-box .filter-action .search:before{content:"";display:block;width:1px;height:20px;background:var(--el-border-color);position:absolute;left:0;top:50%;transform:translateY(-50%)}.table-filter .filter-search-box .filter-action .search:hover{color:var(--el-color-primary)}.table-filter .filter-external .el-form-item{margin-bottom:10px}.table-filter .filter-tags{height:100%;flex-wrap:wrap;display:flex;flex:1;align-items:flex-start;justify-items:center}.table-filter .filter-tags .tag-title{font-size:12px;color:var(--el-text-color-placeholder);height:24px;line-height:24px;margin:0 15px 5px 0}.table-filter .filter-tags .dropdown-toggle{white-space:nowrap;display:flex;align-items:center;justify-items:center;font-size:12px}.table-filter .filter-tags .tag-list{flex:1;display:flex;flex-wrap:wrap}.table-filter .filter-tags .tag-item{height:24px;line-height:24px;white-space:nowrap;display:flex;align-items:center;justify-items:center;padding:0 10px;color:var(--el-color-info-dark-2);background:var(--el-color-info-light-9);font-size:12px;border-radius:var(--el-border-radius-base);margin-right:5px;margin-bottom:10px;cursor:pointer}.table-filter .filter-tags .tag-item .action{color:var(--el-color-info-light-5);text-align:center;width:14px;height:14px;line-height:14px;border-radius:50%;margin-left:10px;font-size:14px;cursor:pointer}.table-filter .filter-tags .tag-item .action:hover{color:var(--el-color-primary)}.table-filter .tag-clear{margin-bottom:2px;margin-left:10px}.table-filter .filter-item .el-form-item{margin:0}.table-filter .filter-item .el-form-item__label{display:none}.table-filter .filter-item .el-input{--el-input-border:none;--el-input-border-color:transparent;--el-input-focus-border-color:transparent;--el-input-hover-border-color:transparent}.table-filter .filter-item .el-select{--el-select-border-color-hover:transparent;--el-select-input-focus-border-color:transparent}.table-filter .filter-item .el-select__wrapper{box-shadow:none}.table-filter-type{box-shadow:var(--el-box-shadow-light);background:var(--el-bg-color);z-index:3060;min-width:150px;max-height:300px;overflow:hidden;--el-font-size-base:12px}.table-filter-type .base-select{--el-font-size-base:12px;height:100%;max-height:300px;display:flex;flex-direction:column}.table-filter-type .base-select .remote-input{width:100%}.table-filter-type .base-select .remote-input .el-input{--el-input-border-radius:0;--el-input-bg-color:var(--el-bg-color-page);--el-input-border:none;--el-input-hover-border-color:transparent;--el-input-focus-border-color:var(--el-border-color)}.table-filter-type .base-select .el-empty__image svg{height:50px}.table-filter-type .base-select .select-spinner{flex:1;position:relative;overflow-y:auto}.table-filter-type .base-select .select-spinner ul{margin:0;padding:0}.table-filter-type .base-select .select-spinner ul li{list-style:none;padding:6px 10px;cursor:pointer;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box;font-size:var(--el-font-size-base)}.table-filter-type .base-select .select-spinner ul li.active{color:var(--el-color-primary)}.table-filter-type .base-select .select-spinner ul li:hover{background:var(--el-color-primary-light-9);color:var(--el-color-primary)}.table-filter-toggle{padding:0 10px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;min-width:120px;font-size:12px}.table-filter-toggle .current-filter-label{margin-right:20px}.table-filter-List{box-shadow:0 2px 8px 0 rgba(0,0,0,.2);background:var(--el-bg-color);z-index:3060;border-radius:2px;max-height:300px;overflow-y:auto;font-size:12px}.table-filter-List ul{width:100%;margin:0;padding:0}.table-filter-List ul li{width:100%;list-style:none;padding:6px 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box;cursor:pointer}.table-filter-List ul li:hover{background:var(--el-color-primary-light-9);color:var(--el-color-primary)}.table-filter-List ul li.active{color:var(--el-color-primary);font-weight:600}.table-filter-tag-popper{max-height:400px;overflow:auto;padding:0!important;width:250px!important}.table-filter-tag-popper .base-select{--el-font-size-base:12px;height:100%;max-height:300px;display:flex;flex-direction:column}.table-filter-tag-popper .base-select .remote-input{width:100%}.table-filter-tag-popper .base-select .remote-input :deep(.el-input){--el-input-border-radius:0;--el-input-bg-color:var(--el-bg-color-page);--el-input-border:none;--el-input-hover-border-color:transparent;--el-input-focus-border-color:var(--el-border-color)}.table-filter-tag-popper .base-select :deep(.el-empty__imagesvg){height:50px}.table-filter-tag-popper .base-select .select-spinner{flex:1;position:relative;overflow-y:auto}.table-filter-tag-popper .base-select .select-spinner ul{margin:0;padding:0}.table-filter-tag-popper .base-select .select-spinner ul li{list-style:none;padding:6px 10px;cursor:pointer;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--el-font-size-base);box-sizing:border-box}.table-filter-tag-popper .base-select .select-spinner ul li.active{color:var(--el-color-primary)}.table-filter-tag-popper .base-select .select-spinner ul li:hover{background:var(--el-color-primary-light-9);color:var(--el-color-primary)}.detail-info{flex:1}.detail-info .detail-info-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.detail-info .title{border-left:3px solid var(--el-color-primary);padding-left:10px;line-height:1.2}.detail-info+.detail-info{margin-top:30px}.detail-info.card{background:var(--el-bg-color);border-radius:0;opacity:1;border:1px solid var(--el-border-color)}.detail-info.card[shadow]{box-shadow:var(--el-box-shadow-lighter)}.detail-info.card .detail-info-header{height:50px;border-bottom:1px solid var(--el-border-color);margin:0;padding:0 20px}.detail-info.card .detail-info-header .title{border-left:0;padding:0}.detail-info.card .detail-info-body{padding:10px 20px 20px 20px;margin:0}.detail-info .detail-info-body{display:flex;flex-wrap:wrap;position:relative;box-sizing:border-box}.detail-info .detail-info-body:not(.table){margin-left:-calc(var(--gutter)/2);margin-right:-calc(var(--gutter)/2)}.detail-info .detail-info-body .table-detail-col{box-sizing:border-box}.detail-info .detail-info-body .item-col{line-height:20px;height:100%;box-sizing:border-box;display:flex}.detail-info .detail-info-body .item-col.item-col-top{flex-direction:column}.detail-info .detail-info-body .item-col.item-col-top .det{padding:0}.detail-info .detail-info-body .item-col .label{padding:4px 0;color:var(--el-text-color-secondary);box-sizing:border-box;vertical-align:middle;float:left;display:flex;align-items:center}.detail-info .detail-info-body .item-col .det{flex:1;padding:4px 10px;box-sizing:border-box;min-height:20px;height:100%;word-break:break-all;overflow:hidden}.detail-info .detail-info-body.table{border-top:1px solid var(--el-border-color);border-left:1px solid var(--el-border-color)}.detail-info .detail-info-body.table .table-detail-col{padding:0!important;border-bottom:1px solid var(--el-border-color);border-right:1px solid var(--el-border-color)}.detail-info .detail-info-body.table .item-col{background:var(--el-fill-color-light);border:1px solid var(--el-bg-color)}.detail-info .detail-info-body.table .item-col .label{padding-left:10px;padding-right:10px;width:100px}.detail-info .detail-info-body.table .item-col .det{border-left:1px solid var(--el-border-color);background-color:var(--el-bg-color)}.curdform-group{background-color:var(--el-bg-color);width:100%;margin:10px auto;border-radius:var(--el-border-radius-base)}.curdform-group .curdform-group-head{padding:15px 28px 5px;margin-bottom:10px;box-sizing:border-box;display:flex;justify-content:space-between;align-items:center}.curdform-group .curdform-group-head+.curdform-group-desc{margin-top:-10px}.curdform-group .curdform-group-head+.curdform-group-body{padding-top:0}.curdform-group .curdform-group-head .left{display:flex;align-items:center;gap:10px}.curdform-group .curdform-group-head .left .icon{background:#f3f4f6;border-radius:50%;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;color:#9ca3af}.curdform-group .curdform-group-head .left .icon i{font-size:22px}.curdform-group .curdform-group-head .left .title{font-size:calc(var(--el-font-size-base) + 2px);font-weight:700}.curdform-group .curdform-group-desc{font-size:var(--el-font-size-base);color:var(--el-text-color-secondary);margin:0 28px}.curdform-group .curdform-group-body{padding:18px 28px 10px}
|