docs: 修改文档

This commit is contained in:
yubaolee
2025-06-07 23:28:50 +08:00
parent d41d91b44e
commit dd5bec04c8
7 changed files with 241 additions and 289 deletions

View File

@@ -1,60 +1,178 @@
---
title: 添加新模块
createTime: 2025/04/23 21:03:10
title: 代码生成器
createTime: 2025/04/23 23:43:26
permalink: /core/devnew/
---
## 前言
OpenAuth.Mvc添加新模块的方式非常简单完全可以参考系统已有的`资源管理`模块编写相应的代码。参考的`资源管理`功能对应的代码如下:
![](http://img.openauth.net.cn/20220407153729.png)
如果我们想新加一个仓储管理的模块,模块标识为`Stock`。那么需要添加的文件如下:
::: file-tree
- OpenAuth.Mvc
- Controllers
- StocksController.cs
- Views
- Stocks
- index.cshtml
- wwwroot
- userJs
- stock.js
- OpenAuth.App
- StockApp.cs
- Request
- QueryStockReq.cs
- OpenAuth.Repository
- OpenAuthDBContext.cs
- Domain
- Stock.cs
:::
当然全部手撸这些代码还是会疯的。用户可以直接使用项目`CodeSmith`文件夹里面的模板一键生成上述代码。而且CodeSmith模板本身也是全部源码可以根据自己需求调整生成的内容。
## 工具准备
CodeSmith Generator Studio 8.0或以上
数据库OpenAuthDB中添加仓储表【Stock】本文以该数据表为例
## 添加实体
如下图使用CodeSmith文件夹中的模板右击【ApiGenerate.cst】--【Execute】选择需要生成的表本文以Stock为例及相关的上下文命名空间点击【Generate】
![20240613220037](http://img.openauth.net.cn/20240613220037.png)
注意,有两个配置项:
* WholeDb: 如果选中,则按数据库中所有表生成实体及逻辑;否则,按选择的表生成
* HeaderModel会生成主、从表结构类似 WmsInboundOrderTbl / WmsInboundOrderDtbl
生成成功后在CodeSmith/Csharp文件夹下面会有Stock实体相关文档如下图
![20240613220224](http://img.openauth.net.cn/20240613220224.png)
把CSharp\OpenAuth.App覆盖到自己项目对应目录
把CSharp\OpenAuth.Repository\Domain覆盖到自己项目对应目录
**把CSharp\OpenAuth.Repository\OpenAuthDBContext.cs中的内容添加到自己项目的文件中千万不要直接覆盖文件**
## 添加界面
如下图使用CodeSmith文件夹中的模板右击【WebGenerate.cst】--【Execute】选择需要生成的表本文以Stock为例及相关的上下文命名空间点击【Generate】
![](http://img.openauth.net.cn/2025-02-25-10-56-08.png)
生成成功后在CodeSmith/Csharp文件夹下面会有相关的界面代码如下图
![](http://img.openauth.net.cn/2025-02-25-10-57-44.png)
Controllers、Views直接覆盖到OpenAuth.Mvc项目中对应的文件夹即可
userJs直接覆盖到OpenAuth.Mvc/wwwroot中
## 添加模块
编写完上面代码后运行系统使用System账号登录系统在【模块管理】中添加`仓储管理`模块,
![20240613220434](http://img.openauth.net.cn/20240613220434.png)
本章节视频讲解请参考:[OpenAuth.Net视频合集--使用企业版代码生成器](https://www.bilibili.com/video/BV1JCuyeaEFp/)
## 术语解释
在添加新功能之前需要先了解OpenAuth.Net生成代码时的两个概念动态头部和固定头部
#### 动态头部
如果启用动态头部,表示前端渲染列表(或表单)时,列表的列定义是从后端返回。通常用于控制前端字段显示权限。配合后端:[权限控制/字段权限](http://doc.openauth.net.cn/pro/datapropertyrule/#%E5%AD%97%E6%AE%B5%E6%9D%83%E9%99%90) 如:常见的前端代码如下:
```html
<auth-table ref="mainTable" :table-fields="headerList"></auth-table>
```
```javascript
getList() {
resources.getList(this.listQuery).then((response) => {
...
this.headerList = response.columnFields
...
})
},
```
#### 固定头部
如果不是上面的情况,则生成的前端列为固定的头部。如下:
```html
<auth-table ref="mainTable" :table-fields="headerList"></auth-table>
```
```javascript
initCfg() {
this.headerList = [
new ColumnDefine('id', 'id', false, false, 'text', '', 'string', 'varchar', ''),
new ColumnDefine('tableName', '表名', true, true, 'text', '', 'string', 'varchar', ''),
new ColumnDefine('moduleName', '模块名称', true, true, 'text', '', 'string', 'varchar', ''),
new ColumnDefine('parentTableId', '父表', true, true, 'selectDynamic', '/BuilderTables/AllMain', 'string', 'varchar', ''),
new ColumnDefine('foreignKey', '外键', true, true, 'text', '', 'string', 'varchar', ''),
]
```
## 准备工作
* 数据库OpenAuthPro中添加仓储表【Stock】本文以该数据表为例。参考表结构如下
```SQL
-- mysql示例
create table stock
(
Id varchar(50) not null comment '数据ID'
primary key,
Name text not null comment '产品名称',
Number int not null comment '产品数量',
Price decimal(10, 1) not null comment '产品单价',
Status int not null comment '出库/入库',
Viewable varchar(50) not null comment '可见范围',
User varchar(50) not null comment '操作人',
Time datetime not null comment '操作时间',
OrgId varchar(50) null comment '组织ID'
)
comment '出入库信息表' charset = utf8
row_format = COMPACT;
```
* 使用Visual Studio 以开发模式启动后端。参考:[编译运行webapi](http://doc.openauth.net.cn/core/start/#%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8Cwebapi)
* 启动企业版前端。参考:[启动前端](http://doc.openauth.net.cn/pro/#%E5%90%AF%E5%8A%A8%E5%89%8D%E7%AB%AF)
后续操作全部在系统中完成。
## 单表添加
代码生成界面,点击`添加`按钮,输入想添加的模块信息。
![2021923224934](http://img.openauth.net.cn/2021923224934.png)
录入基础信息,点击`确认`保存后,系统会添加一条记录,并自动加载对应的字段信息。
![2021923225040](http://img.openauth.net.cn/2021923225040.png)
这时,编辑字段具体的属性。如是否【可显示】【可编辑】等。
## 子表添加
::: warning 注意
因为生成的Controller名称类似XXXsController所以模块的Url地址应该是XXXs/Index
如果只生成单表结构,可以跳过本节
:::
添加模块时系统会自动添加三个默认菜单【添加】【编辑】【删除】。可根据需要调整。这里我再添加一个菜单【btnCancel】如下图
![](http://img.openauth.net.cn/2025-02-25-11-05-08.png)
重新登录系统,即可看到新加的仓储管理模块。
![](http://img.openauth.net.cn/2025-02-25-11-08-26.png)
如果需要添加主/从(父/子)结构,需要先添加子表信息。代码生成界面,点击`添加`按钮,输入想添加的模块信息。
![20211208001551](http://img.openauth.net.cn/20211208001551.png)
::: warning 注意
子表的`动态头部`属性务必与父表保持一致,否则会造成生成的代码不能正常运行
:::
## 生成模块
选中刚刚添加的`Stock`依次点击【生成实体】【生成业务代码】【生成vue页面】;
如果存在子表,也进行相同的操作。即选中刚刚添加的`StockDetail`依次点击【生成实体】【生成业务代码】【生成vue页面】;
成功后生成的后端.Net代码位置如下
OpenAuth.Repository\Domain\Stock.cs
OpenAuth.App\StockApp\StockApp.cs
OpenAuth.App\StockApp\Request\AddOrUpdateStockReq.cs
OpenAuth.App\StockApp\Request\QueryStockListReq.cs
OpenAuth.WebApi\Controllers\StocksController.cs
并且会在OpenAuth.Repository\OpenAuthDBContext.cs中自动添加
```
public virtual DbSet<Stock> Stocks { get; set; }
```
前端Vue代码
src\api\stocks.js
src\views\stocks\index.vue
::: warning 注意
完成以上步骤后请重启OpenAuth.WebApi用来重新加载刚刚生成的后台代码
子表不需要添加模块
:::
## 配置模块地址
经过以上步骤重启系统后使用System账号重新登录在【模块管理】中添加“仓储管理”模块如下图
![20211207003212](http://img.openauth.net.cn/20211207003212.png)
这样就可以访问刚刚新加的仓储管理功能,到此就完成了添加一个新模块功能:
![20211208011431](http://img.openauth.net.cn/20211208011431.png)
## 代码生成功能字段详解
* 模块名称:表示这个生成的模块名称,根据自己需要填写。
* 表名:**必填** 表示数据库中对应的表名。
* 父表:表示主/从(父/子)表的父表。如果该项不选,则生成的是单表结构的代码,如果选择了父表,则生成主/从(父/子)表的代码。
* 外键:表示与父表关联的外键。如果选择了父表,则该项必填。
* 外部数据源:如果需要连接其他数据库生成代码,需要选对应的外部数据源,外部数据源在【数据源管理】功能中配置。
* 动态头部:如果选中,表示前端渲染列表(或表单)时,列表的列定义是从后端返回。通常用于控制前端字段显示权限。
* 实体类名称:**必填** 表示生成的实体类名称。
* 命名空间:**必填** 表示生成的实体类的命名空间。默认`OpenAuth.Repository.Domain`
* 模块编码:**必填** 表示生成的模块业务类名称,比如`XxxxxApp`
* Vue目录: 生成vue代码时代码存放的目录。比如`D:\openauthvue3`
## 其他
当采用动态头部时,如果数据库新加了字段,需要使用【同步结构】功能把新字段同步到代码生成器中。为了防止对已有的配置造成影响,该功能只新增字段,不会对已有字段进行调整。