Skip to content
目录
On this page

PenkForm 表单

专门用于后台管理系统,因为 Form 都是固定的一些配置,比如 input,select,radio,checkBox...等等配置。 PenkForm 通过传递 JSON 对象,配置其 Form 表单各个 FormItem 项。

基础用法

在按照文档配置,进行了 Penk-Ui 依赖包的安装后,就可以直接使用。

js
// xxx.vue template
  <PenkForm
    :title="title"
    :formConfig="formConfig"
    :formData="formData"
    v-model:visible="visible"
    append-to-body
    @confirm="saveItem"
  >
  </PenkForm>

获取表单数据

@confirm 是 PenkForm 的一个事件,触发条件是点击 Form 表单的确定按钮,并且 Form 表单数据符合 rule 才会触发

ts
// 新增,编辑数据
function saveItem(form: any) {
  console.log(form);
}

配置

这里的配置包括 Form 表单的配置,如果是有数据项的传递 data 数组;
还有 Form 对应 rules,包括每一项配置,或者全局配置,或者自定义配置都有。

ts
// xxx.vue script
<script setup lang="ts">
  const formConfig: any = {
  formItemConfig: [
    {
      label: "用户类型",
      prop: "userType",
      type: "select",
      data: [
        { label: "游客", value: 1 },
        { label: "管理员", value: 2 },
      ],
      // Form item 局部 rules配置
      rules: {
        required: true,
        message: "请选择用户类型",
        trigger: "blur",
      },
    },
    {
      label: "用户名",
      prop: "userName",
      type: "input",
    },
    {
      label: "密码",
      prop: "passWord",
      type: "input",
    },
    {
      label: "手机",
      prop: "phone",
      type: "input",
    },
    {
      label: "邮箱",
      prop: "email",
      type: "input",
    },
    {
      label: "头像",
      prop: "url",
      type: "upload",
    },
  ],
  rules: {
    // 自定义校验
    userName: [
      {
        required: true,
        validator: (rule: any, value: any, callback: any) => {
          if (!value) {
            callback(new Error("请输入用户名"));
          }
          callback();
        },
        trigger: "blur",
      },
    ],
    // Form 全局 rules配置
    passWord: [
      {
        required: true,
        message: "请输入密码",
        trigger: "blur",
      },
    ],
  },
};

</script>

PenkForm TypeScript 接口声明

ts
interface props {
  // 以下是el-form  的配置
  // 编辑时候的formData数据
  formData: any;
  // form配置 包括form item 以及 rules
  formConfig: formConfig;

  // 以下是el-dialog 的配置
  visible: boolean;
  // dialog配置
  width?: string | number;
  // 弹框标题
  title: string;
  // 是否为全屏 Dialog
  fullscreen?: boolean;
  // 为 Dialog 启用可拖拽功能
  draggable?: boolean;
  // Dialog 自身是否插入至 body 元素上。 嵌套的 Dialog 必须指定该属性并赋值为 true
  "append-to-body"?: boolean;
  // 是否可以通过点击 modal 关闭 Dialog
  "close-on-click-modal"?: boolean;
}

interface formConfig {
  // 每一项的配置
  formItemConfig: formItemConfig;
  // 规则
  // https://element-plus.gitee.io/zh-CN/component/form.html#自定义校验规则
  rules: any;
}

// 单个form item 的属性
interface formItemConfig {
  // 必填
  // 标签名
  label: string;
  // 对应的属性名 如: from.name ~
  prop: string;
  // 组件所需类型,下拉框或者输入框
  type: FormItemType;
  // 默认值
  default: any;

  // 选填-通用
  // 宽度
  width?: number;
  // 占位符
  placeholder?: string;
  // 是否清空
  clearable?: boolean;
  // 是否使能
  disabled?: boolean;
  // 是否隱藏
  hidden?: boolean;

  // 选填
  // 特殊组件参数
  // 输入框判断是否文本域
  inputType?: string;
  // 输入框为文本域的时候的行数
  row: number;

  // 选填-特殊
  // 数据,一般是下拉框之类需要可选项的才用到
  data?: any;
}

declare type FormItemType = "input" | "select" | "radio" | "checkbox";

PenkForm API

PenkForm 属性

属性名说明类型默认值
formData必填,编辑时候的 formData 数据object---
formConfig必填,form 配置 包括 form item 以及 rulesformConfig---
visible必填,el-dialog 的配置对应的 visiblebooleanfalse
width选填,el-dialog 的配置对应的 widthstring 或 number---
title必填,el-dialog 的配置对应的标题string---
fullscreen选填,el-dialog 的配置对应是否为全屏booleanfalse
draggable选填,el-dialog 的配置对应是否可拖拽booleanfalse
append-to-body选填,el-dialog 的配置对应是否插入至 body 元素上booleanfalse
close-on-click-modal选填,el-dialog 的配置对应是否可以通过点击 modal 关闭 Dialogbooleanfalse

formConfig 属性

属性名说明类型默认值
formItemConfig必填,Form 表单每一项的配置formItemConfig---
rules必填,Form 表单 rules 规则 跳转any---

PenkForm 对外暴露的属性或者方法

方法名说明类型
confirm@saveItem 是 PenkForm 的一个事件,触发条件是点击 Form 表单的确定按钮,并且 Form 表单数据符合 rule 才会触发,参数就是form表单里面的数据(form:any):void

Released under the MIT License.