用 Golang+react 写了一个开源的低代码开发工具,后端嵌入了 V8 引擎,支持 JS 进行逻辑扩展,前端设计了一套 DSL,基于动态组件进行渲染,专门用来写后台的

2022-02-20 21:21:37 +08:00
 matrixage

几年前我们基于 Php 开发了一个代码生成器,供内部开发使用,后来慢慢发展,使用 Golang 进行了重构,重构之后不仅仅是用来生成 Api ,创建数据库,写 Sql ,还有描述后台界面,都支持了,还整了一个 V8 引擎进去,用来处理一些复杂的数据逻辑,现在我们内部的项目都是基于这个低代码工具来的。

经过半年的整理,还有筹划之后,我们决定把它开源了,因为我们发现,用了 Yao 这个低代码工具,写后台的效率爆炸,按照工时来看效率起码提升了 10 倍。

下面简单介绍一下用法,感兴趣的兄弟可以去点个 star ,支持一下,祝你今年好运爆棚!

引擎: https://github.com/YaoApp/yao

界面: https://github.com/YaoApp/xgen

创建数据库

{
  "name": "宠物",
  "table": { "name": "pet", "comment": "宠物表" },
  "columns": [
    { "label": "ID", "name": "id", "type": "ID", "comment": "ID" },
    { "label": "编号", "name": "sn", "type": "string", "unique": true },
    { "label": "名称", "name": "name", "type": "string", "index": true },
    {
      "label": "类型",
      "name": "kind",
      "type": "enum",
      "option": ["猫", "狗"],
      "default": "猫",
      "index": true
    },
    { "label": "介绍", "name": "desc", "type": "string", "comment": "详细介绍" }
  ],
  "values": [
    { "sn": "100001", "name": "Cookie", "kind": "猫", "desc": "一只猫" },
    { "sn": "100002", "name": "Beibei", "kind": "狗", "desc": "一只狗" }
  ],
  "option": { "timestamps": true, "soft_deletes": true }
}

编写接口

{
  "name": "宠物",
  "version": "1.0.0",
  "description": "宠物接口",
  "guard": "bearer-jwt",
  "group": "pet",
  "paths": [
    {
      "path": "/search",
      "method": "GET",
      "guard": "-",
      "process": "models.pet.Paginate",
      "query": [":query-param", "$query.page", "$quey.pagesize"],
      "out": {
        "status": 200,
        "type": "application/json"
      }
    },
    {
      "path": "/save",
      "method": "POST",
      "guard": "-",
      "process": "models.pet.Save",
      "query": [":payload"],
      "out": {
        "status": 200,
        "type": "application/json"
      }
    }
  ]
}

描述后台界面

{
  "name": "宠物",
  "version": "1.0.0",
  "decription": "宠物管理表格",
  "bind": { "model": "pet" },
  "apis": {},
  "columns": {
    "ID": {
      "label": "ID",
      "view": { "type": "label", "props": { "value": ":id" } }
    },
    "编号": {
      "label": "编号",
      "view": { "type": "label", "props": { "value": ":sn" } },
      "edit": { "type": "input", "props": { "value": ":sn" } }
    },
    "名称": {
      "label": "名称",
      "view": { "type": "label", "props": { "value": ":name" } },
      "edit": { "type": "input", "props": { "value": ":name" } }
    },
    "类型": {
      "label": "类型",
      "view": { "type": "label", "props": { "value": ":kind" } },
      "edit": {
        "type": "select",
        "props": {
          "value": ":kind",
          "options": [
            { "label": "猫", "value": "猫" },
            { "label": "狗", "value": "狗" }
          ]
        }
      }
    },
    "介绍": {
      "label": "介绍",
      "view": { "type": "label", "props": { "value": ":desc" } },
      "edit": { "type": "textArea", "props": { "value": ":desc", "rows": 4 } }
    }
  },
  "filters": {
    "关键词": {
      "label": "关键词",
      "bind": "where.name.match",
      "input": { "type": "input", "props": { "placeholder": "请输入关键词" } }
    }
  },
  "list": {
    "primary": "id",
    "layout": {
      "columns": [
        { "name": "ID", "width": 80 },
        { "name": "编号", "width": 100 },
        { "name": "名称", "width": 200 },
        { "name": "类型" }
      ],
      "filters": [{ "name": "关键词" }]
    },
    "actions": { "pagination": { "props": { "showTotal": true } } },
    "option": {}
  },
  "edit": {
    "primary": "id",
    "layout": {
      "fieldset": [
        {
          "columns": [
            { "name": "编号", "width": 8 },
            { "name": "名称", "width": 8 },
            { "name": "类型", "width": 8 },
            { "name": "介绍", "width": 24 }
          ]
        }
      ]
    },
    "actions": { "cancel": {}, "save": {}, "delete": {} }
  }
}
3944 次点击
所在节点    分享创造
23 条回复
xueyangkk
2022-03-01 17:58:01 +08:00
很不错 支持下
shuperjolly
2022-04-20 00:59:54 +08:00
前端页面没有?只有后端设计?
shuperjolly
2022-04-22 07:17:58 +08:00
问下数据库是怎么存储的? sqlite ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/835260

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX