yao/README.md
2022-02-07 15:02:40 +08:00

238 lines
8.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Yao
[![UnitTest](https://github.com/YaoApp/yao/actions/workflows/unit-test.yml/badge.svg)](https://github.com/YaoApp/yao/actions/workflows/unit-test.yml)
[![codecov](https://codecov.io/gh/YaoApp/yao/branch/main/graph/badge.svg?token=294Y05U71J)](https://codecov.io/gh/YaoApp/yao)
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。爻的阴阳转换驱动八卦更替以此来总结记录事物的发展规律。
## 演示
**客户关系管理系统** [源码](https://github.com/yaoapp/crm) [演示](https://demo-crm.yaoapps.com)
一套通用 CRM 管理系统
**智能仓库管理系统** [源码](https://github.com/yaoapp/warehouse) [演示](https://demo-warehouse.yaoapps.com)
云+边物联网应用示例支持人脸识别、RFID 的无人值守智能仓库管理系统。
## 起步
**注意:开始前需要了解 JSON、RESTFulAPI、关系型数据库的基本概念和常识并可以使用常见终端命令。如需处理非常复杂的业务逻辑则需要掌握 JavaScript 语言。**
我们准备了一个在线开发调试环境,帮助您快速上手体验。**在线开发环境仅做体验使用, 数据每小时重置** , 在实际开发中,请在本地安装 Yao 进行开发调试,具体参考 [安装调试](/a.介绍/b.安装调试.mdx) 章节的文档。如果您的应用开发完成,需要在生产环境部署,请参考 [部署](/e.部署.mdx) 章节文档。
<Extend
title="打开在线调试环境"
desc="在线开发测试环境仅做体验使用,数据每小时重置"
link="https://ide-demo.yaoapps.com"
> </Extend>
### 第一步: 创建项目
新建一个项目目录进入项目目录运行 `yao init` 命令创建一个空白的 Yao 应用
```bash
mkdir -p /data/crm # 创建项目目录
cd /data/crm # 进入项目目录
yao init # 运行初始化程序
```
命令运行成功后将创建 `app.json文件` , `db目录`, `ui目录` `data目录`
```bash
├── 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`
```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` 命令创建数据表打开命令行终端**在项目根录下运行**:
```bash
yao migrate
```
**技巧: 调试过程中,需要频繁检查数据。可以使用 `yao run` 命令查询数据。例如:在命令行终端中运行 `yao run models.customer.find 1` 即可查询 `customer` 数据表 ID=1 的数据。**
### 第三步: 编写管理界面
在项目 `tables` 目录下 (例如: `/data/crm/models`)创建数据表格描述文件 `customer.tab.json`
```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 调试界面的过程当中遇到界面为空的情况。处置方式请查阅组件文档。**
**启动服务**
打开命令行终端**在项目根录下运行**:
```bash
yao start
```
1. 打开浏览器, 访问 `https://127.0.0.1:5099/xiang/login/admin`
2. 输入默认用户名: `xiang@iqka.com` 密码: `A123456p+`
3. 成功登录后在地址栏输入 `https://127.0.0.1:5099/xiang/table/customer`
4. 建议将 `/xiang/table/customer` 路由添加为菜单项