添加页面
配置路由
超级管理员登录,在权限管理-菜单权限中,添加具体的菜单,比如资产管理,资产列表,填入对应的菜单名称,路由地址,路由别名,组件路径等
创建文件
在上一步对应的组件路径中,创建页面组件,vue文件,路由和组件文件会在生成菜单路由时进行绑定
// src/router/generator-routers.ts
export const dynamicImport = (
viewsModules: Record<string, () => Promise<Recordable>>,
component: string
) => {
const keys = Object.keys(viewsModules);
const matchKeys = keys.filter((key) => {
let k = key.replace('../views', '');
const lastIndex = k.lastIndexOf('.');
k = k.substring(0, lastIndex);
return k === component;
});
// ...
};
添加接口
页面有了,还需要添加对应的数据表和接口
数据表和entity
数据表直接在数据库中添加,模型文件也可以自己创建,但是使用的地方太多,有用于业务逻辑的,有用于数据库的,还是使用GoFrame提供的工具生成吧,生成的条件是 1 建表,2 在server/hock/config.yml中配置表名,3 当前目录下,执行命令 gf gen dao
// server/hack/config.yml
gen:
dao:
- link: "mysql:root:123456@tcp(x.x.x.x:3306)/hotgo?loc=Local&parseTime=true"
group: "default" # 分组 使用hotgo代码生成功能时必须填
tables: "ams_assets" # 指定当前数据库中需要执行代码生成的数据表。如果为空,表示数据库的所有表都会生成。
$ gf gen dao
generated: internal\dao\ams_assets.go
generated: internal\dao\internal\ams_assets.go
generated: internal\model\do\ams_assets.go
generated: internal\model\entity\ams_assets.go
done!
接口和业务逻辑
这个框架底层用的这个GoFrame框架,不得不吐槽,写个api,分层太多了
/server/api # 在这里声明接口用到的请求和返回数据结构,xxxReq 和 xxxRes
/server/internal/controller # 接收到数据,验证
/server/internal/service # logic层的接口文件
/server/internal/logic # logic层的逻辑实现
/server/internal/dao # 数据库操作
请求方式和请求地址可以写在xxxReq中的,以对象的方式注册,也可以用普通的函数注册,
xxxReq 传入 controller, 然后在router路由文件通过bind解析绑定
// api/admin/common/site.go
// AccountLoginReq 提交账号登录
type AccountLoginReq struct {
g.Meta `path:"/site/accountLogin" method:"post" tags:"后台基础" summary:"账号登录"`
adminin.AccountLoginInp
}
// controller/admin/common/site.go
// AccountLogin 账号登录
func (c *cSite) AccountLogin(ctx context.Context, req *common.AccountLoginReq) (res *common.AccountLoginRes, err error) {
login, err := service.SysConfig().GetLogin(ctx)
if err != nil {
return
}
if !req.IsLock && login.CaptchaSwitch == 1 {
// 校验 验证码
if !captcha.Verify(req.Cid, req.Code) {
err = gerror.New("验证码错误")
return
}
}
model, err := service.AdminSite().AccountLogin(ctx, &req.AccountLoginInp)
if err != nil {
return
}
err = gconv.Scan(model, &res)
return
}
// router/admin.go
group.Bind(
common.Site, // 基础
)
基本就是这样,当然也可以直接在controller层直接写逻辑,然后调用dao层的数据库操作。