经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之动态表单(五)
来源:cnblogs  作者:crudapi  时间:2021/3/29 11:52:50  对本文有异议

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

回顾

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

简介

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

UI界面

表单列表
表单列表

创建表单
创建表单

索引管理
索引管理

API

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

  1. import { axiosInstance } from "boot/axios";
  2. const metadataTable = {
  3. create: function(data) {
  4. return axiosInstance.post("/api/metadata/tables",
  5. data
  6. );
  7. },
  8. update: function(id, data) {
  9. return axiosInstance.patch("/api/metadata/tables/" + id,
  10. data
  11. );
  12. },
  13. list: function(page, rowsPerPage, search, query) {
  14. if (!page) {
  15. page = 1
  16. }
  17. if (!rowsPerPage) {
  18. rowsPerPage = 10
  19. }
  20. return axiosInstance.get("/api/metadata/tables",
  21. {
  22. params: {
  23. offset: (page - 1) * rowsPerPage,
  24. limit: rowsPerPage,
  25. search: search,
  26. ...query
  27. }
  28. }
  29. );
  30. },
  31. count: function(search, query) {
  32. return axiosInstance.get("/api/metadata/tables/count",
  33. {
  34. params: {
  35. search: search,
  36. ...query
  37. }
  38. }
  39. );
  40. },
  41. get: function(id) {
  42. return axiosInstance.get("/api/metadata/tables/" + id,
  43. {
  44. params: {
  45. }
  46. }
  47. );
  48. },
  49. getByName: function(name) {
  50. return axiosInstance.get("/api/metadata/tables/name/" + name,
  51. {
  52. params: {
  53. }
  54. }
  55. );
  56. },
  57. delete: function(id) {
  58. return axiosInstance.delete("/api/metadata/tables/" + id);
  59. },
  60. batchDelete: function(ids) {
  61. return axiosInstance.delete("/api/metadata/tables",
  62. {data: ids}
  63. );
  64. }
  65. };
  66. export { metadataTable };

核心代码

q-table控件

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

  1. <q-table
  2. :data="table.columns"
  3. :columns="columns"
  4. :visible-columns="visibleColumns"
  5. :pagination.sync="tablePagination"
  6. row-key="id"
  7. selection="multiple"
  8. :selected.sync="selected"
  9. :loading="loading"
  10. flat
  11. separator="cell"
  12. hide-bottom>
  13. </q-table>

columns定义

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

  1. columns: [
  2. {
  3. name: "dataClickAction",
  4. align: "center",
  5. label: "操作",
  6. field: "dataClickAction",
  7. sortable: false
  8. },
  9. {
  10. name: "displayOrder",
  11. align: "left",
  12. label: "顺序",
  13. field: "displayOrder",
  14. sortable: false
  15. }, {
  16. name: "caption",
  17. align: "left",
  18. label: "中文名称",
  19. field: "caption",
  20. sortable: false
  21. }, {
  22. name: "name",
  23. align: "left",
  24. label: "英文字段",
  25. field: "name",
  26. sortable: false
  27. }, {
  28. name: "description",
  29. align: "left",
  30. label: "描述",
  31. field: "description",
  32. sortable: false
  33. }, {
  34. name: "unsigned",
  35. align: "left",
  36. label: "无符号",
  37. field: "unsigned",
  38. sortable: false
  39. }, {
  40. name: "dataType",
  41. align: "left",
  42. label: "数据类型",
  43. field: "dataType",
  44. sortable: false
  45. }, {
  46. name: "indexType",
  47. align: "left",
  48. label: "索引类型",
  49. field: "indexType",
  50. sortable: false
  51. }, {
  52. name: "indexStorage",
  53. align: "left",
  54. label: "索引存储",
  55. field: "indexStorage",
  56. sortable: false
  57. }, {
  58. name: "indexName",
  59. align: "left",
  60. label: "索引名称",
  61. field: "indexName",
  62. sortable: false
  63. }, {
  64. name: "length",
  65. align: "left",
  66. label: "长度",
  67. field: "length",
  68. sortable: false
  69. }, {
  70. name: "precision",
  71. align: "left",
  72. label: "精度",
  73. field: "precision",
  74. sortable: false
  75. }, {
  76. name: "scale",
  77. align: "left",
  78. label: "小数",
  79. field: "scale",
  80. sortable: false
  81. }, {
  82. name: "autoIncrement",
  83. align: "left",
  84. label: "自增长",
  85. field: "autoIncrement",
  86. sortable: false
  87. }, {
  88. name: "nullable",
  89. align: "left",
  90. label: "空",
  91. field: "nullable",
  92. sortable: false
  93. }, {
  94. name: "defaultValue",
  95. align: "left",
  96. label: "默认值",
  97. field: "defaultValue",
  98. sortable: false
  99. },{
  100. name: "seqId",
  101. align: "left",
  102. label: "序列号",
  103. field: "seqId",
  104. sortable: false
  105. }, {
  106. name: "insertable",
  107. align: "left",
  108. label: "插入",
  109. field: "insertable",
  110. sortable: false
  111. }, {
  112. name: "updatable",
  113. align: "left",
  114. label: "编辑",
  115. field: "updatable",
  116. sortable: false
  117. }, {
  118. name: "queryable",
  119. align: "left",
  120. label: "查询",
  121. field: "queryable",
  122. sortable: false
  123. }
  124. ]

字段顺序调整

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

  1. onTopClick: function(row) {
  2. const columns = this.table.columns;
  3. const index = columns.findIndex(t => t.id === row.id);
  4. if (index != 0){
  5. columns.unshift(columns.splice(index, 1)[0]);
  6.     }
  7. },
  8. onUpClick: function(row) {
  9. const columns = this.table.columns;
  10. const index = columns.findIndex(t => t.id === row.id);
  11.   if (index != 0){
  12. columns[index] = columns.splice(index - 1, 1, columns[index])[0];
  13. console.dir(columns);
  14.     }
  15. },
  16. onDownClick: function(row) {
  17. const columns = this.table.columns;
  18. const index = columns.findIndex(t => t.id === row.id);
  19. if (index != columns.length - 1){
  20. columns[index] = columns.splice(index + 1, 1, columns[index])[0];
  21. }
  22. },
  23. onBottomClick: function(row) {
  24. const columns = this.table.columns;
  25. const index = columns.findIndex(t => t.id === row.id);
  26. if (index != columns.length - 1){
  27. columns.push(columns.splice(index, 1)[0]);
  28. }
  29. }

增删改查

通过列表页面,新建页面和编辑页面实现了动态表单基本的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即可,代码同步更新。

原文链接:http://www.cnblogs.com/crudapi/p/14591392.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号