Yao 是一款 Go 语言驱动的低代码应用引擎,通过编写 JSON 描述即可快速制作 API 接口,数据管理系统 ,命令行工具 等应用程序,应用可以运行在本地、云端和物联网设备上。
Yao 基于 flow-based 编程思想,采用 Go 语言开发,支持多种方式扩展数据流处理器。这使得 Yao 具有极好的通用性,大部分场景下可以代替编程语言, 在复用性和编码效率上是传统编程语言的 10 倍;应用性能和资源占比上优于 PHP, JAVA 等语言。
Yao 内置了一套数据管理系统,通过编写 JSON 描述界面布局,即可实现 90% 常见界面交互功能,特别适合快速制作各类管理后台、CRM、ERP 等企业内部系统。对于特殊交互功能亦可通过编写扩展组件或 HTML 页面的方式实现。内置管理系统与 Yao 并不耦合,亦可采用 VUE, React 等任意前端技术实现管理界面。
Yao 的名字源于汉字爻(yáo),是构成八卦的基本符号。八卦,是上古大神伏羲观测总结自然规律后,创造的一个可以指代万事万物的符号体系。爻,有阴阳两种状态,就像 0 和 1。爻的阴阳转换,驱动八卦更替,以此来总结记录事物的发展规律。
一套通用 CRM 管理系统
云+边物联网应用示例,支持人脸识别、RFID 的无人值守智能仓库管理系统。
注意:开始前需要了解 JSON、RESTFulAPI、关系型数据库的基本概念和常识,并可以使用常见终端命令。如需处理非常复杂的业务逻辑,则需要掌握 JavaScript 语言。
我们准备了一个在线开发调试环境,帮助您快速上手体验。在线开发环境仅做体验使用, 数据每小时重置 , 在实际开发中,请在本地安装 Yao 进行开发调试,具体参考 安装调试 章节的文档。如果您的应用开发完成,需要在生产环境部署,请参考 部署 章节文档。
<Extend title="打开在线调试环境" desc="在线开发测试环境仅做体验使用,数据每小时重置" link="https://ide-demo.yaoapps.com"
新建一个项目目录,进入项目目录,运行 yao init
命令,创建一个空白的 Yao 应用。
mkdir -p /data/crm # 创建项目目录
cd /data/crm # 进入项目目录
yao init # 运行初始化程序
命令运行成功后,将创建 app.json文件
, db目录
, ui目录
和 data目录
├── data # 用于存放应用产生的文件,如图片,PDF等
├── db # 用于存放 SQLite 数据库文件
│ └── xiang.db
└── ui # 静态文件服务器文件目录,可以放置自定义前端制品,该目录下文件可通过 http://host:port/文件名称 访问。
└── app.json # 应用配置文件, 用来定义应用名称等
设计一张数据表 customer,用于存放客户资料数据。数据表结构如下:
字段 | 类型 | 长度/参数 | 默认值 | 说明 |
---|---|---|---|---|
id | ID | 数据表 ID | ||
channel_id | bigInteger | 客户来源 | ||
name | string | 80 | 客户姓名 | |
company | string | 200 | 公司名称 | |
gender | integer | 0 | 性别 0, 未知,1 男,2,女 | |
birthday | date | 生日 | ||
desc | text | 简历 | ||
status | enum | ["enabled"], ["disabled"], | enabled | 状态 |
创建数据表对应的 JSON 描述文件
:
在项目 models
目录下 (例如: /data/crm/models
),创建数据模型描述文件 customer.mod.json
{
"name": "客户",
"table": { "name": "customer", "comment": "客户表" },
"columns": [
{ "label": "ID", "name": "id", "type": "ID", "comment": "ID" },
{
"label": "来源",
"name": "channel_id",
"type": "bigInteger",
"comment": "客户来源",
"nullable": true,
"index": true
},
{
"label": "姓名",
"name": "name",
"type": "string",
"length": 80,
"comment": "客户姓名",
"nullable": true,
"index": true
},
{
"label": "公司",
"name": "company",
"type": "string",
"length": 200,
"comment": "公司全称",
"nullable": true,
"index": true
},
{
"label": "性别",
"name": "gender",
"type": "integer",
"comment": "性别",
"default": 0,
"index": true
},
{
"label": "生日",
"name": "birthday",
"type": "date",
"comment": "性别",
"nullable": true,
"index": true
},
{
"label": "介绍",
"name": "desc",
"type": "text",
"comment": "介绍",
"nullable": true
},
{
"label": "状态",
"name": "status",
"type": "enum",
"default": "enabled",
"option": ["enabled", "disabled"],
"comment": "状态 enabled 开启, disabled 关闭",
"index": true
}
],
"option": { "timestamps": true, "soft_deletes": true },
"values": [{ "id": 1, "name": "莉莉", "company": "yaoapps.com" }]
}
使用 yao migrate
命令创建数据表,打开命令行终端,在项目根录下运行:
yao migrate
技巧: 调试过程中,需要频繁检查数据。可以使用 yao run
命令查询数据。例如:在命令行终端中运行 yao run models.customer.find 1
即可查询 customer
数据表 ID=1 的数据。
在项目 tables
目录下 (例如: /data/crm/models
),创建数据表格描述文件 customer.tab.json
{
"name": "客户",
"version": "1.0.0",
"decription": "客户管理数据表格",
"bind": {
"model": "customer"
},
"columns": {},
"filters": {
"关键词": { "@": "filter.关键词", "in": ["where.name.match"] },
"排序": { "@": "filter.排序" }
},
"list": {
"primary": "id",
"layout": {
"columns": [
{ "name": "ID", "width": 80 },
{ "name": "公司", "width": 200 },
{ "name": "姓名", "width": 100 },
{ "name": "性别", "width": 80 },
{ "name": "生日", "width": 100 },
{ "name": "来源", "width": 80 },
{ "name": "状态", "width": 140 },
{ "name": "更新时间", "width": 160 }
],
"filters": [{ "name": "关键词" }, { "name": "来源", "width": 3 }]
},
"actions": {
"create": {
"type": "button",
"props": { "label": "添加客户", "icon": "fas fa-plus" }
},
"pagination": {}
}
},
"edit": {
"primary": "id",
"layout": {
"fieldset": [
{
"columns": [
{ "name": "姓名", "width": 12 },
{ "name": "性别", "width": 3 },
{ "name": "生日", "width": 3 },
{ "name": "来源", "width": 3 },
{ "name": "状态", "width": 3 },
{ "name": "公司", "width": 24 },
{ "name": "介绍", "width": 24 }
]
}
]
},
"actions": {
"cancel": {},
"save": { "@": "action.保存" },
"delete": { "@": "action.删除" }
}
}
}
注意:由于该项目诞生之初主要是为了提高团队内部生产力,在约定俗成的写法描述下,并没有做细粒度的抛错处理,所以开发者可能会在编写 JSON 调试界面的过程当中遇到界面为空的情况。处置方式请查阅组件文档。
启动服务
打开命令行终端,在项目根录下运行:
yao start
-
打开浏览器, 访问
https://127.0.0.1:5099/xiang/login/admin
, -
输入默认用户名:
xiang@iqka.com
, 密码:A123456p+
-
成功登录后,在地址栏输入
https://127.0.0.1:5099/xiang/table/customer
-
建议将
/xiang/table/customer
路由添加为菜单项。