|
@@ -38,7 +38,7 @@
|
|
|
</template>
|
|
</template>
|
|
|
</DynamicFormItemNormal>
|
|
</DynamicFormItemNormal>
|
|
|
<!--循环子条目-->
|
|
<!--循环子条目-->
|
|
|
- <DynamicFormItemContainer
|
|
|
|
|
|
|
+ <DynamicFormItemContainerFuckMp
|
|
|
v-for="(child, k) in item.children"
|
|
v-for="(child, k) in item.children"
|
|
|
:key="k"
|
|
:key="k"
|
|
|
:item="child"
|
|
:item="child"
|
|
@@ -66,7 +66,7 @@
|
|
|
<FormGroup :title="evaluateCallback(item.label)" v-bind="(item.additionalProps as object)">
|
|
<FormGroup :title="evaluateCallback(item.label)" v-bind="(item.additionalProps as object)">
|
|
|
<Row v-bind="item.rowProps">
|
|
<Row v-bind="item.rowProps">
|
|
|
<!--循环子条目-->
|
|
<!--循环子条目-->
|
|
|
- <DynamicFormItemContainer
|
|
|
|
|
|
|
+ <DynamicFormItemContainerFuckMp
|
|
|
v-for="(child, k) in item.children"
|
|
v-for="(child, k) in item.children"
|
|
|
:key="k"
|
|
:key="k"
|
|
|
:item="child"
|
|
:item="child"
|
|
@@ -89,7 +89,7 @@
|
|
|
<FormGroup v-else-if="item.type === 'flat-group'" :title="evaluateCallback(item.label)" v-bind="(item.additionalProps as object)">
|
|
<FormGroup v-else-if="item.type === 'flat-group'" :title="evaluateCallback(item.label)" v-bind="(item.additionalProps as object)">
|
|
|
<Row v-bind="item.rowProps">
|
|
<Row v-bind="item.rowProps">
|
|
|
<!--循环子条目-->
|
|
<!--循环子条目-->
|
|
|
- <DynamicFormItemContainer
|
|
|
|
|
|
|
+ <DynamicFormItemContainerFuckMp
|
|
|
v-for="(child, k) in item.children"
|
|
v-for="(child, k) in item.children"
|
|
|
:colProps="{ ...item.childrenColProps, ...child.colProps }"
|
|
:colProps="{ ...item.childrenColProps, ...child.colProps }"
|
|
|
:key="k"
|
|
:key="k"
|
|
@@ -106,9 +106,9 @@
|
|
|
:disabled="disabled || evaluateCallback(item.disabled)"
|
|
:disabled="disabled || evaluateCallback(item.disabled)"
|
|
|
>
|
|
>
|
|
|
<template #formCeil="values">
|
|
<template #formCeil="values">
|
|
|
- <slot name="formCeil" v-bind="(values as FormCeilProps)" />
|
|
|
|
|
|
|
+ <slot name="formCeil" :data="values.data" />
|
|
|
</template>
|
|
</template>
|
|
|
- </DynamicFormItemContainer>
|
|
|
|
|
|
|
+ </DynamicFormItemContainerFuckMp>
|
|
|
</Row>
|
|
</Row>
|
|
|
</FormGroup>
|
|
</FormGroup>
|
|
|
<!--扁平普通-->
|
|
<!--扁平普通-->
|
|
@@ -125,7 +125,7 @@
|
|
|
<template #insertion>
|
|
<template #insertion>
|
|
|
<Row v-bind="item.rowProps">
|
|
<Row v-bind="item.rowProps">
|
|
|
<!--循环子条目-->
|
|
<!--循环子条目-->
|
|
|
- <DynamicFormItemContainer
|
|
|
|
|
|
|
+ <DynamicFormItemContainerFuckMp
|
|
|
v-for="(child, k) in item.children"
|
|
v-for="(child, k) in item.children"
|
|
|
:key="k"
|
|
:key="k"
|
|
|
:item="child"
|
|
:item="child"
|
|
@@ -142,9 +142,9 @@
|
|
|
:disabled="disabled || evaluateCallback(item.disabled)"
|
|
:disabled="disabled || evaluateCallback(item.disabled)"
|
|
|
>
|
|
>
|
|
|
<template #formCeil="values">
|
|
<template #formCeil="values">
|
|
|
- <slot name="formCeil" v-bind="(values as FormCeilProps)" />
|
|
|
|
|
|
|
+ <slot name="formCeil" :data="values.data" />
|
|
|
</template>
|
|
</template>
|
|
|
- </DynamicFormItemContainer>
|
|
|
|
|
|
|
+ </DynamicFormItemContainerFuckMp>
|
|
|
</Row>
|
|
</Row>
|
|
|
</template>
|
|
</template>
|
|
|
</DynamicFormItemNormal>
|
|
</DynamicFormItemNormal>
|
|
@@ -180,13 +180,17 @@
|
|
|
v-bind="(item.additionalProps as IDynamicFormObject)"
|
|
v-bind="(item.additionalProps as IDynamicFormObject)"
|
|
|
>
|
|
>
|
|
|
<template #addButton="props">
|
|
<template #addButton="props">
|
|
|
- <slot name="arrayButtonAdd" v-bind="props" />
|
|
|
|
|
|
|
+ <slot name="arrayButtonAdd" :onClick="props.onClick" />
|
|
|
</template>
|
|
</template>
|
|
|
<template #itemButton="props">
|
|
<template #itemButton="props">
|
|
|
- <slot name="arrayButtons" v-bind="props" />
|
|
|
|
|
|
|
+ <slot name="arrayButtons"
|
|
|
|
|
+ :onDeleteClick="props.onDeleteClick"
|
|
|
|
|
+ :onUpClick="props.onUpClick"
|
|
|
|
|
+ :onDownClick="props.onDownClick"
|
|
|
|
|
+ />
|
|
|
</template>
|
|
</template>
|
|
|
<template #child="{ item, pitem, kname, model: child, onUpdateValue, isFirst, isLast }">
|
|
<template #child="{ item, pitem, kname, model: child, onUpdateValue, isFirst, isLast }">
|
|
|
- <DynamicFormItemContainer
|
|
|
|
|
|
|
+ <DynamicFormItemContainerFuckMp
|
|
|
:item="item"
|
|
:item="item"
|
|
|
:name="kname"
|
|
:name="kname"
|
|
|
:rawModel="rawModel"
|
|
:rawModel="rawModel"
|
|
@@ -238,13 +242,17 @@
|
|
|
v-bind="(item.additionalProps as IDynamicFormObject)"
|
|
v-bind="(item.additionalProps as IDynamicFormObject)"
|
|
|
>
|
|
>
|
|
|
<template #addButton="props">
|
|
<template #addButton="props">
|
|
|
- <slot name="arrayButtonAdd" v-bind="props" />
|
|
|
|
|
|
|
+ <slot name="arrayButtonAdd" :onClick="props.onClick" />
|
|
|
</template>
|
|
</template>
|
|
|
<template #itemButton="props">
|
|
<template #itemButton="props">
|
|
|
- <slot name="arrayButtons" v-bind="props" />
|
|
|
|
|
|
|
+ <slot name="arrayButtons"
|
|
|
|
|
+ :onDeleteClick="props.onDeleteClick"
|
|
|
|
|
+ :onUpClick="props.onUpClick"
|
|
|
|
|
+ :onDownClick="props.onDownClick"
|
|
|
|
|
+ />
|
|
|
</template>
|
|
</template>
|
|
|
<template #child="{ item, pitem, kname, model: child, onUpdateValue, isFirst, isLast }">
|
|
<template #child="{ item, pitem, kname, model: child, onUpdateValue, isFirst, isLast }">
|
|
|
- <DynamicFormItemContainer
|
|
|
|
|
|
|
+ <DynamicFormItemContainerFuckMp
|
|
|
:item="item"
|
|
:item="item"
|
|
|
:name="kname"
|
|
:name="kname"
|
|
|
:rawModel="rawModel"
|
|
:rawModel="rawModel"
|
|
@@ -277,7 +285,7 @@
|
|
|
@update:model="(v: unknown) => $emit('update:model', v)"
|
|
@update:model="(v: unknown) => $emit('update:model', v)"
|
|
|
>
|
|
>
|
|
|
<template #formCeil="values">
|
|
<template #formCeil="values">
|
|
|
- <slot name="formCeil" v-bind="(values as unknown as FormCeilProps)" />
|
|
|
|
|
|
|
+ <slot name="formCeil" :data="values.data" />
|
|
|
</template>
|
|
</template>
|
|
|
</DynamicFormItemNormal>
|
|
</DynamicFormItemNormal>
|
|
|
</Col>
|
|
</Col>
|
|
@@ -293,62 +301,39 @@ import Col, { type ColProps } from '@/components/layout/grid/Col.vue';
|
|
|
import Row from '@/components/layout/grid/Row.vue';
|
|
import Row from '@/components/layout/grid/Row.vue';
|
|
|
import DynamicFormCheckEmpty from './DynamicFormCheckEmpty.vue';
|
|
import DynamicFormCheckEmpty from './DynamicFormCheckEmpty.vue';
|
|
|
import type { IDynamicFormItem, IDynamicFormItemCallback, IDynamicFormObject, IDynamicFormOptions, IDynamicFormRef, IEvaluateCallback } from '..';
|
|
import type { IDynamicFormItem, IDynamicFormItemCallback, IDynamicFormObject, IDynamicFormOptions, IDynamicFormRef, IEvaluateCallback } from '..';
|
|
|
|
|
+import Button from '@/components/basic/Button.vue';
|
|
|
|
|
+import DynamicFormItemContainerFuckMp from './DynamicFormItemContainerFuckMp.vue';
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 动态表单条目包装组件,处理基础类型分支、数据传入、回调处理、事件传递。
|
|
* 动态表单条目包装组件,处理基础类型分支、数据传入、回调处理、事件传递。
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
-const props = defineProps({
|
|
|
|
|
- item: {
|
|
|
|
|
- type: Object as PropType<IDynamicFormItem>,
|
|
|
|
|
- required: true,
|
|
|
|
|
- },
|
|
|
|
|
- name: {
|
|
|
|
|
- type: String,
|
|
|
|
|
- required: true,
|
|
|
|
|
- },
|
|
|
|
|
- disabled: {
|
|
|
|
|
- type: Boolean,
|
|
|
|
|
- default: false,
|
|
|
|
|
- },
|
|
|
|
|
- model: {
|
|
|
|
|
- type: null
|
|
|
|
|
- },
|
|
|
|
|
- parent: {
|
|
|
|
|
- type: Object as PropType<IDynamicFormItem>,
|
|
|
|
|
- default: null,
|
|
|
|
|
- },
|
|
|
|
|
- parentModel: {
|
|
|
|
|
- type: null
|
|
|
|
|
- },
|
|
|
|
|
- parentName: {
|
|
|
|
|
- type: String,
|
|
|
|
|
- default: null,
|
|
|
|
|
- },
|
|
|
|
|
- rawModel: {
|
|
|
|
|
- type: Object as PropType<IDynamicFormObject>,
|
|
|
|
|
- required: true,
|
|
|
|
|
- },
|
|
|
|
|
- colProps: {
|
|
|
|
|
- type: Object as PropType<ColProps>,
|
|
|
|
|
- default: null,
|
|
|
|
|
- },
|
|
|
|
|
- isFirst: {
|
|
|
|
|
- type: Boolean,
|
|
|
|
|
- default: false,
|
|
|
|
|
- },
|
|
|
|
|
- isLast: {
|
|
|
|
|
- type: Boolean,
|
|
|
|
|
- default: false,
|
|
|
|
|
- },
|
|
|
|
|
-});
|
|
|
|
|
|
|
+export interface DynamicFormItemContainerProps {
|
|
|
|
|
+ item: IDynamicFormItem;
|
|
|
|
|
+ name: string;
|
|
|
|
|
+ disabled?: boolean;
|
|
|
|
|
+ model?: any;
|
|
|
|
|
+ rawModel?: IDynamicFormObject;
|
|
|
|
|
+ parent?: IDynamicFormItem;
|
|
|
|
|
+ parentModel?: unknown;
|
|
|
|
|
+ parentName?: string;
|
|
|
|
|
+ colProps?: ColProps;
|
|
|
|
|
+ isFirst?: boolean;
|
|
|
|
|
+ isLast: boolean;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+const props = withDefaults(defineProps<DynamicFormItemContainerProps>(), {
|
|
|
|
|
+ isFirst: false,
|
|
|
|
|
+ isLast: false,
|
|
|
|
|
+});
|
|
|
const containerTypes = ['object', 'object-group', 'array-single','group-array','flat-simple','flat-group'];
|
|
const containerTypes = ['object', 'object-group', 'array-single','group-array','flat-simple','flat-group'];
|
|
|
const isContainer = computed(() => props.item.type && containerTypes.includes(props.item.type));
|
|
const isContainer = computed(() => props.item.type && containerTypes.includes(props.item.type));
|
|
|
|
|
|
|
|
defineEmits([ 'update:model' ]);
|
|
defineEmits([ 'update:model' ]);
|
|
|
defineSlots<{
|
|
defineSlots<{
|
|
|
- formCeil(props: FormCeilProps): any,
|
|
|
|
|
|
|
+ formCeil(props: {
|
|
|
|
|
+ data: FormCeilProps;
|
|
|
|
|
+ }): any,
|
|
|
arrayButtonAdd(props: {
|
|
arrayButtonAdd(props: {
|
|
|
onClick: () => void;
|
|
onClick: () => void;
|
|
|
}): any,
|
|
}): any,
|
|
@@ -402,6 +387,14 @@ function evaluateCallback<T>(val: T|IDynamicFormItemCallback<T>) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
provide<IEvaluateCallback>('evaluateCallback', evaluateCallback);
|
|
provide<IEvaluateCallback>('evaluateCallback', evaluateCallback);
|
|
|
|
|
+
|
|
|
|
|
+defineOptions({
|
|
|
|
|
+ name: 'DynamicFormItemContainer',
|
|
|
|
|
+ options: {
|
|
|
|
|
+ virtualHost: true,
|
|
|
|
|
+ styleIsolation: 'shared',
|
|
|
|
|
+ }
|
|
|
|
|
+})
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss">
|
|
<style lang="scss">
|