界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
数据与研究 · SKILL.md

vk-data-form

vk-data-form

【数据与研究】vk-unicloud-admin框架的万能表单组件完整使用指南。Use when working with vk-data-form component for: (1) Creating dynamic forms with JSON configuration, (2) Form validation and submission, (3) Complex field types like select, date, upload, (4) Conditional field display and disabled rules, (5) Dialog form and standalone form components.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: vk-data-form description: "vk-unicloud-admin框架的万能表单组件完整使用指南。Use when working with vk-data-form component for: (1) Creating dynamic forms with JSON configuration, (2) Form validation and submission, (3) Complex field types like select, date, upload, (4) Conditional field display and disabled rules, (5) Dialog form and standalone form components."

vk-data-form 万能表单组件指南

Overview

vk-data-form 是 vk-unicloud-admin 框架提供的万能表单组件,通过 JSON 配置自动渲染表单字段。

快速开始

<vk-data-dialog v-model="form1.props.show" title="表单标题" width="600px" mode="form">
  <vk-data-form
    ref="form1"
    v-model="form1.data"
    :action="form1.props.action"
    :columns="form1.props.columns"
    :rules="form1.props.rules"
    :form-type="form1.props.formType"
    :loading.sync="form1.props.loading"
    label-width="140px"
    @success="onFormSuccess"
  ></vk-data-form>
</vk-data-dialog>
export default {
  data() {
    return {
      form1: {
        data: {
          radio: 1,
          checkbox: [1, 2]
        },
        props: {
          action: "admin/xxx/sys/add",
          columns: [
            { key: "text", title: "文本", type: "text" },
            { key: "number", title: "数字", type: "number" },
            { key: "radio", title: "单选", type: "radio", data: [
              { value: 1, label: "选项一" },
              { value: 2, label: "选项二" }
            ]}
          ],
          rules: {
            text: [{ required: true, message: "文本不能为空", trigger: "change" }]
          },
          formType: "add",
          loading: false,
          show: false
        }
      }
    };
  },
  methods: {
    onFormSuccess(res) {
      console.log("表单提交成功", res);
    }
  }
}

字段类型 (columns.type)

分类类型说明
基础text单行文本
基础textarea多行文本
基础number数字输入
基础money金额(分转元)
基础percentage百分比
基础discount折扣
选择radio单选框
选择checkbox多选框
选择select下拉选择
选择switch开关
选择rate评分
选择slider滑块
选择color颜色选择
日期date日期选择
日期time时间选择
日期datetime日期时间
上传image图片上传
远程remote-select远程搜索
远程table-select表格选择
远程cascader级联选择
远程address地址选择
布局group分组布局
布局object对象嵌套
布局bar-title分组标题
展示text-view文本展示
展示money-view金额展示
展示htmlHTML展示
展示editor富文本

高级配置

条件显示 (showRule)

{
  key: "mode", title: "模式", type: "radio",
  data: [{ value: 1, label: "覆盖" }, { value: 2, label: "新增" }],
  showRule: "login_appid_type==1"  // 当 login_appid_type=1 时显示
}

条件禁用 (disabled)

{
  key: "mode", title: "模式", type: "radio",
  disabled: "login_appid_type==0"  // 当 login_appid_type=0 时禁用
}

监听值变化 (watch)

{
  key: "text", title: "文本", type: "text",
  watch: (res) => {
    console.log("值改变", res);
  }
}

表单方法

方法说明
submitForm()提交表单(自动验证)
resetForm()重置表单
clearValidate()清除验证
validate()表单验证
validateField(prop)部分字段验证
// 提交表单
that.$refs.form1.submitForm({
  data: { extra: "额外参数" },
  success: (data) => { console.log("成功", data); },
  fail: (data) => { console.log("失败", data); }
});

事件

事件说明回调参数
success提交成功{ data, formType }
fail提交失败{ data, formType }
complete提交结束{ data, formType }
cancel点击取消-

插槽使用

自定义字段渲染

<vk-data-form ref="form1" v-model="form1.data" :columns="form1.props.columns">
  <template v-slot:rate="{ form, keyName }">
    <el-rate v-model="form[keyName]"></el-rate>
  </template>
</vk-data-form>

自定义底部按钮

<vk-data-form ref="form1" v-model="form1.data" :columns="form1.props.columns">
  <template v-slot:footer="{ loading }">
    <el-button :loading="loading" type="primary" @click="customSubmit">自定义提交</el-button>
  </template>
</vk-data-form>

HTTP 请求模式

<vk-data-form
  action="https://www.xxx.com/api/form"
  :is-request="true"
  :request-header="{ 'content-type': 'application/json' }"
  :columns="form1.props.columns"
></vk-data-form>

自定义 Function 请求

form1: {
  props: {
    action: (obj = {}) => {
      let { data, success, fail, complete } = obj;
      vk.callFunction({
        url: "admin/xxx/sys/add",
        data: data,
        success: (res) => { if (typeof success === "function") success(res); },
        fail: (res) => { if (typeof fail === "function") fail(res); }
      });
    }
  }
}

弹窗表单独立组件

打开弹窗

vk.pubfn.openForm('bindRole', { item: rowData }, this);

组件模板

<template>
  <vk-data-dialog v-model="value.show" :title="page.title" mode="form" @open="onOpen">
    <vk-data-form
      ref="form1"
      :form-type="value.mode"
      v-model="form1.data"
      :action="form1.props.action"
      :columns="form1.props.columns"
      @success="onFormSuccess"
    ></vk-data-form>
  </vk-data-dialog>
</template>

参考文档

我的收藏