「免费开源」基于Vue和Quasar的crudapi前端SPA项目实战之动态表单(五)

简介: 本文主要介绍了元数据中动态表单设计功能,支持常见的数据类型和索引,然后实现了动态表单的crud增删改查功能。

基于Vue和Quasar的前端SPA项目实战之动态表单(五)

回顾

通过上一篇文章 基于Vue和Quasar的前端SPA项目实战之序列号(四)的介绍,我们已经完成了元数据中序列号的增删改查,本文主要介绍动态表单设计功能的实现。

简介

在crudapi系统中,所有的业务表单都是通过配置动态生成的,代码无需写死,有关基本概念参考之前文章 元数据管理—动态表单设计器在crudapi系统中完整实现 ,表单配置好之后,对应的crud接口就自动生成了。

UI界面

表单列表
表单列表

创建表单
创建表单

索引管理
索引管理

API

表单管理API
表单API包括基本的CRUD操作,具体的通过swagger文档可以查看。通过axios封装api,名称为metadataTable

import { axiosInstance } from "boot/axios";

const metadataTable = {
  create: function(data) {
    return axiosInstance.post("/api/metadata/tables",
       data
    );
  },
  update: function(id, data) {
    return axiosInstance.patch("/api/metadata/tables/" + id,
       data
    );
  },
  list: function(page, rowsPerPage, search, query) {
    if (!page) {
      page = 1
    }

    if (!rowsPerPage) {
      rowsPerPage = 10
    }

    return axiosInstance.get("/api/metadata/tables",
      {
        params: {
          offset: (page - 1) * rowsPerPage,
          limit: rowsPerPage,
          search: search,
          ...query
        }
        //permission: ["ROLE_META_TABLE_R"]
      }
    );
  },
  count: function(search, query) {
    return axiosInstance.get("/api/metadata/tables/count",
      {
        params: {
          search: search,
          ...query
        }
      }
    );
  },
  get: function(id) {
    return axiosInstance.get("/api/metadata/tables/" + id,
      {
        params: {
        }
      }
    );
  },
  getByName: function(name) {
    return axiosInstance.get("/api/metadata/tables/name/" + name,
      {
        params: {
        }
      }
    );
  },
  delete: function(id) {
    return axiosInstance.delete("/api/metadata/tables/" + id);
  },
  batchDelete: function(ids) {
    return axiosInstance.delete("/api/metadata/tables",
      {data: ids}
    );
  }
};

export { metadataTable };

核心代码

q-table控件

表单设计页面用到了q-table控件,每一个字段对应一个行,

 <q-table
        :data="table.columns"
        :columns="columns"
        :visible-columns="visibleColumns"
        :pagination.sync="tablePagination"
        row-key="id"
        selection="multiple"
        :selected.sync="selected"
        :loading="loading"
        flat
        separator="cell"
        hide-bottom>
</q-table>

columns定义

columns定义了q-table的列属性,涵盖表单的全部属性,比如名称,是否为一,数据类型,长度等。

columns: [
  {
    name: "dataClickAction",
    align: "center",
    label: "操作",
    field: "dataClickAction",
    sortable: false
  },
  {
    name: "displayOrder",
    align: "left",
    label: "顺序",
    field: "displayOrder",
    sortable: false
  }, {
    name: "caption",
    align: "left",
    label: "中文名称",
    field: "caption",
    sortable: false
  }, {
    name: "name",
    align: "left",
    label: "英文字段",
    field: "name",
    sortable: false
  }, {
    name: "description",
    align: "left",
    label: "描述",
    field: "description",
    sortable: false
  }, {
    name: "unsigned",
    align: "left",
    label: "无符号",
    field: "unsigned",
    sortable: false
  }, {
    name: "dataType",
    align: "left",
    label: "数据类型",
    field: "dataType",
    sortable: false
  }, {
    name: "indexType",
    align: "left",
    label: "索引类型",
    field: "indexType",
    sortable: false
  }, {
    name: "indexStorage",
    align: "left",
    label: "索引存储",
    field: "indexStorage",
    sortable: false
  }, {
    name: "indexName",
    align: "left",
    label: "索引名称",
    field: "indexName",
    sortable: false
  }, {
    name: "length",
    align: "left",
    label: "长度",
    field: "length",
    sortable: false
  }, {
    name: "precision",
    align: "left",
    label: "精度",
    field: "precision",
    sortable: false
  }, {
    name: "scale",
    align: "left",
    label: "小数",
    field: "scale",
    sortable: false
  }, {
    name: "autoIncrement",
    align: "left",
    label: "自增长",
    field: "autoIncrement",
    sortable: false
  }, {
    name: "nullable",
    align: "left",
    label: "空",
    field: "nullable",
    sortable: false
  }, {
    name: "defaultValue",
    align: "left",
    label: "默认值",
    field: "defaultValue",
    sortable: false
  },{
    name: "seqId",
    align: "left",
    label: "序列号",
    field: "seqId",
    sortable: false
  }, {
    name: "insertable",
    align: "left",
    label: "插入",
    field: "insertable",
    sortable: false
  }, {
    name: "updatable",
    align: "left",
    label: "编辑",
    field: "updatable",
    sortable: false
  }, {
    name: "queryable",
    align: "left",
    label: "查询",
    field: "queryable",
    sortable: false
  }
]

字段顺序调整

支持上移,下移,置顶,置底四种操作。

onTopClick: function(row) {
  const columns = this.table.columns;
  const index = columns.findIndex(t => t.id === row.id);
  if (index != 0){
    columns.unshift(columns.splice(index, 1)[0]);
    }
},
onUpClick: function(row) {
  const columns = this.table.columns;
  const index = columns.findIndex(t => t.id === row.id);
  if (index != 0){
    columns[index] = columns.splice(index - 1, 1, columns[index])[0];
    console.dir(columns);
    }
},
onDownClick: function(row) {
  const columns = this.table.columns;
  const index = columns.findIndex(t => t.id === row.id);
  if (index != columns.length - 1){
    columns[index] = columns.splice(index + 1, 1, columns[index])[0];
  }
},
onBottomClick: function(row) {
  const columns = this.table.columns;
  const index = columns.findIndex(t => t.id === row.id);
  if (index != columns.length - 1){
    columns.push(columns.splice(index, 1)[0]);
  }
}

增删改查

通过列表页面,新建页面和编辑页面实现了动态表单基本的crud操作,其中编辑和新建页面类似,编辑页面除了可以设置单个字段的索引,还可以设置多个字段的联合索引,更多内容参考源码即可。

小结

本文主要介绍了元数据中动态表单设计功能,支持常见的数据类型和索引,然后实现了动态表单的crud增删改查功能,下一篇文章会介绍元数据中表关系功能。

demo演示

官网地址:https://crudapi.cn
测试地址:https://demo.crudapi.cn/crudapi/login

附源码地址

GitHub地址

https://github.com/crudapi/crudapi-admin-web

Gitee地址

https://gitee.com/crudapi/crudapi-admin-web

由于网络原因,GitHub可能速度慢,改成访问Gitee即可,代码同步更新。

目录
相关文章
|
4月前
|
JSON 前端开发 JavaScript
惊艳!阿里开源 15.2k Star 企业级低代码引擎揭秘,如何变革前端开发方式?
阿里巴巴开源的 LowCodeEngine 是一款企业级低代码引擎,具备可视化编排、UI 渲染、代码生成等全链路能力。支持 React、Vue、Rax 等框架,提供高扩展性与类型安全,助力高效开发,降低维护成本,适用于后台系统、多端同步等场景。
865 1
|
3月前
|
JSON 监控 前端开发
AMIS:百度开源的前端低代码神器,18.4k star 背后的开发效率提升利器
AMIS(前端低代码框架)是百度开源的低代码前端框架,基于纯 JSON 配置即可生成完整后台页面,包括表单、表格、图表、CRUD 列表,支持可视化拖拽编辑。,星标数已达 18.4k,百度内部已沉淀超过 5 万个页面,广泛应用于审核系统、数据管理后台、模型监控等落地场景
783 0
|
7月前
|
人工智能 自然语言处理 前端开发
DeepSite:基于DeepSeek的开源AI前端开发神器,一键生成游戏/网页代码
DeepSite是基于DeepSeek-V3模型的在线开发工具,无需配置环境即可通过自然语言描述快速生成游戏、网页和应用代码,并支持实时预览效果,显著降低开发门槛。
1459 93
DeepSite:基于DeepSeek的开源AI前端开发神器,一键生成游戏/网页代码
|
8月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
456 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
4月前
|
Web App开发 前端开发 关系型数据库
GitHub 2.8k star 开源既封神,“Liquid‑Glass‑React”,让你前端界面瞬间拥有苹果级液态玻璃效果!
Liquid-Glass-React 是一款开源前端组件,旨在将 Apple iOS 26 的“液态玻璃”视觉效果引入 React 应用。凭借逼真折射、多种反射模式、响应式交互及高度可配置性,它已获得 2.8k stars,成为提升 UI 质感的热门工具。
465 0
|
5月前
|
人工智能 前端开发 数据可视化
天都塌了,17K+ Star 的AI开源神器!Onlook 如何颠覆前端开发与设计协作?怎么办
Onlook是一款开源的视觉优先代码编辑器,结合Figma直观操作与VS Code强大功能,支持浏览器中实时构建、编辑和部署React应用。项目已获17K+Star,提供快速创建Next.js应用、所见即所得的可视化编辑、AI驱动开发工具及一键部署协作等功能,是前端开发与设计协作的理想选择。
911 0
|
9月前
|
安全 前端开发 开发工具
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
471 5
【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
|
11月前
|
人工智能 前端开发 小程序
2024年12月30日蜻蜓蜻蜓AI工具系统v1.0.0发布-优雅草科技本产品前端源代码已对外开源可免费商用-优雅草老八
2024年12月30日蜻蜓蜻蜓AI工具系统v1.0.0发布-优雅草科技本产品前端源代码已对外开源可免费商用-优雅草老八
358 31
2024年12月30日蜻蜓蜻蜓AI工具系统v1.0.0发布-优雅草科技本产品前端源代码已对外开源可免费商用-优雅草老八
|
9月前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
273 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
9月前
|
JSON 前端开发 数据可视化
前端开发者狂喜!30K star开源组件库,界面美观度/开发速度双碾压!
嗨,大家好,我是小华同学。Layui 是一款开源前端 UI 组件库,具有极简设计、强大功能和卓越性能,支持布局、表单、表格、弹层等六大模块,组件高度可定制。它无需复杂构建工具,直接面向浏览器开发,极大提升开发效率与界面美观度。适合新手和老手,快来试试吧!
419 0

热门文章

最新文章