干巴爹兔的博客 干巴爹兔的博客
首页
  • 前端文章

    • JavaScript
    • HTML
    • Vue
  • 学习笔记

    • JavaScript教程
    • React学习笔记
    • Electron学习笔记
  • 开源项目

    • cloud-app-admin
    • 下班了吗Vscode插件
    • Subversion变更单插件
  • Server

    • Django
  • 学习笔记

    • MySQL学习笔记
  • 运维

    • 服务器部署
    • Linux
  • 日常学习

    • 学习方法
关于
收藏
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

干巴爹兔

卑微的前端打工人
首页
  • 前端文章

    • JavaScript
    • HTML
    • Vue
  • 学习笔记

    • JavaScript教程
    • React学习笔记
    • Electron学习笔记
  • 开源项目

    • cloud-app-admin
    • 下班了吗Vscode插件
    • Subversion变更单插件
  • Server

    • Django
  • 学习笔记

    • MySQL学习笔记
  • 运维

    • 服务器部署
    • Linux
  • 日常学习

    • 学习方法
关于
收藏
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • JavaScript文章

  • 学习笔记

  • 开源项目

    • cloud-app-admin
    • could-app-admin前端组件

      • AsyncSelect异步加载下拉组件
      • Card卡片组件
      • Panel展示组件
      • CForm表单组件
        • 组件介绍
        • 引入组件
        • 参数配置
        • 类型
        • 代码示例
        • 相关Q&A
        • More
      • SearchFilter组件
      • CTable表格组件
    • 下班了吗Vscode插件

    • Subversion变更单插件

  • HTML

  • Vue

  • 前端
  • 开源项目
  • could-app-admin前端组件
干巴爹兔
2022-09-08
目录

CForm表单组件

# 组件介绍

这是一个基于el-form封装,使用json数据配置式的表单组件,支持表单项自动布局,内置多种type,可传入插槽与自定义组件,支持form表单校验与双向绑定v-model

# 引入组件

import { App } from "vue";
import CForm from "./CForm.vue";

export function setupRegisterGlobComp(app: App) {
  app.component("CForm", CForm);
}
1
2
3
4
5
6

# 参数配置

额外参数 类型 必填 说明
options CFormProps 必填 表单核心配置项
gutter Number 非必填 间距
colSpan Object 非必填 用于表单布局
value(v-model) Object 必填 表单内容双向绑定
loading Boolean 非必填 用于加载

# 类型

type CFormChildOptions = Omit<CFormOptions, "rules" | "children">;

type CFormOptions = {
  label: string; // 表单项名称
  name: string; // 数据的key值
  // 预先定义的类型,目前有input、select、inputNumber、timePicker、datePicker、richText
  type?: string; 
  tagName?: string; // 传入组件的名称,会以<component is/>的形式渲染
  props?: any; // 组件的内置属性
  rules?: any; // 用于校验,可参考Element的rules
  scopedSlot?: string; // 用于渲染一个插槽,可查看下方的代码示例
  itemExtra?: any; // 用于form-item其它参数的绑定
  colSpan?: any; // 参照 ElCol 的 属性
  hidden?: boolean; // 是否隐藏
  on?: any; // 用于事件绑定
  children?: CFormChildOptions[]; // 用于将嵌套组件传入
};

interface CFormProps {
  options: CFormOptions[];
  gutter?: number;
  colSpan?: { span: number };
  value: any;
  loading?: boolean;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 代码示例

<script lang="ts" setup>
import { ArticleModel } from "@/model/article";
import { FormInstance } from "element-plus";

const ruleFormRef = ref<FormInstance>();
const model = ref<Partial<ArticleModel>>({});
const options = computed(() => {
  return [
    {
      name: "title",
      type: "input",
      label: "标题",
      rules: [
        {
          required: true,
          message: "请输入标题",
          trigger: "blur"
        }
      ],
      props: {
        maxLength: 50,
        placeholder: "请输入标题"
      }
    },
    {
      name: "content",
      type: "input",
      label: "内容",
      rules: [
        {
          required: true,
          message: "请输入内容",
          trigger: "blur"
        }
      ],
      props: {
        autosize: { minRows: 4, maxRows: 8 },
        type: "textarea",
        placeholder: "请输入内容"
      }
    },
    {
      name: "type",
      label: "类别",
      rules: [
        {
          required: true,
          message: "请选择类别",
          trigger: "blur"
        }
      ],
      scopedSlot: "type"
    }
  ];
});
</script>
<template>
  <c-form ref="ruleFormRef" v-model:value="model" label-width="80px" :options="options">
    <template #type>
      <el-radio-group v-model="model.type" class="ml-4">
        <el-radio label="history" size="large">历史</el-radio>
        <el-radio label="literature" size="large">文学</el-radio>
        <el-radio label="technology" size="large">科技</el-radio>
      </el-radio-group>
    </template>
  </c-form>
</template>

<style scoped></style>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

form-example1

# 相关Q&A

请教一下 slot radio checkbox 在 cForm.vue 中如何使用? · Issue #3 · cloudhao1999/cloud-app-admin (github.com) (opens new window)

help: select 如何使用 · Issue #17 · cloudhao1999/cloud-app-admin (github.com) (opens new window)

help:在Cfrom中添加富文本编辑器选项 · Issue #23 · cloudhao1999/cloud-app-admin (github.com) (opens new window)

# More

精力有限(懒),更多的使用方式可以查看源码自行探索,使用上有困难的可以在issue上进行咨询我

编辑 (opens new window)
上次更新: 2022/09/08, 15:34:24
Panel展示组件
SearchFilter组件

← Panel展示组件 SearchFilter组件→

最近更新
01
使用Vscode开发一个小插件
10-21
02
Vscode插件配置项监听
10-18
03
使用has属性构造必填效果
10-14
更多文章>
Theme by Vdoing | Copyright © 2020-2023 互联网ICP备案: 闽ICP备18027236号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式