Skip to content

FormDialog

表单弹窗组件,用于新增和编辑数据。

基础用法

FormDialog 通常与 PageTemplate 配合使用,通过 useState 配置自动集成。

typescript
useState({
  formConfig: [
    { type: "input", prop: "name", label: "名称", required: true },
    { type: "select", prop: "status", label: "状态", dictType: "sys_status" },
  ],
});

表单配置

typescript
import { defineFormConfig } from "vue-admin-kit";

const formConfig = defineFormConfig([
  {
    type: "input",
    prop: "name",
    label: "名称",
    required: true,
    rules: [{ min: 2, max: 50, message: "长度在 2 到 50 个字符" }],
  },
  {
    type: "number",
    prop: "price",
    label: "价格",
    min: 0,
    precision: 2,
    suffix: "元",
  },
  {
    type: "select",
    prop: "category",
    label: "分类",
    options: [
      { label: "分类A", value: "a" },
      { label: "分类B", value: "b" },
    ],
    multiple: true,
  },
  {
    type: "upload",
    prop: "files",
    label: "附件",
    uploadConfigList: [
      { prop: "attachment", label: "上传附件", bizType: "attachment" },
    ],
  },
  {
    type: "editor",
    prop: "content",
    label: "内容",
    span: 24,
  },
  {
    type: "line",
    label: "其他信息",
  },
]);

触发弹窗

typescript
const pageTemplateRef = ref<PageTemplateExposed>();

// 新增
pageTemplateRef.value?.handleAdd();

// 新增(带默认数据)
pageTemplateRef.value?.handleAdd({ status: "1" });

// 编辑
pageTemplateRef.value?.handleEdit(row);

自定义表单内容

vue
<template>
  <PageTemplate ref="pageTemplateRef">
    <template #form>
      <!-- 自定义表单内容 -->
      <el-form-item label="自定义字段">
        <el-input v-model="customField" />
      </el-form-item>
    </template>
    <template #table>
      <Table />
    </template>
  </PageTemplate>
</template>

Released under the MIT License.