|
|
@@ -0,0 +1,57 @@
|
|
|
+<script setup lang="ts">
|
|
|
+import type { BasicForm, BasicFormItem } from '@/types/form'
|
|
|
+import { containerTypes } from '@/utils/constants'
|
|
|
+
|
|
|
+interface Props {
|
|
|
+ formItem: BasicFormItem
|
|
|
+ formConfig: BasicForm
|
|
|
+ formData: any
|
|
|
+}
|
|
|
+const props = defineProps<Props>()
|
|
|
+
|
|
|
+const keys: any = {}
|
|
|
+props.formItem.children &&
|
|
|
+ props.formItem.children.forEach((item: BasicFormItem) => {
|
|
|
+ keys[item.name] = ''
|
|
|
+ })
|
|
|
+
|
|
|
+if (!Array.isArray(props.formItem.value)) {
|
|
|
+ props.formItem.value = []
|
|
|
+}
|
|
|
+
|
|
|
+const handleAdd = () => {
|
|
|
+ props.formItem.value.push({
|
|
|
+ ...keys
|
|
|
+ })
|
|
|
+}
|
|
|
+const handleDelete = (index: number) => {
|
|
|
+ props.formItem.value.splice(index, 1)
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<template>
|
|
|
+ <el-form-item>
|
|
|
+ <div class="w-full">
|
|
|
+ <el-button type="primary" @click="handleAdd" icon="plus" plain size="default" class="mb-2">添加</el-button>
|
|
|
+ <vxe-table :data="formItem.value" border>
|
|
|
+ <vxe-column type="seq" width="50"></vxe-column>
|
|
|
+ <vxe-column v-for="item in formItem.children" :title="item.label" :field="item.name">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <form-comp :item="item" v-model="row[item.name]">
|
|
|
+ <template #[slot.alias]="slotProps" v-for="slot in item.slots" :key="slot.alias">
|
|
|
+ <slot :name="slot.alias" v-bind="slotProps"></slot>
|
|
|
+ </template>
|
|
|
+ </form-comp>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column fixed="right" title="操作" width="70">
|
|
|
+ <template #default="{ row, index }">
|
|
|
+ <el-button type="danger" size="small" @click="handleDelete(index)"> 删除 </el-button>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ </vxe-table>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+</template>
|
|
|
+
|
|
|
+<style lang="scss" scoped></style>
|