HotGo--如何新增页面和接口

587 阅读2分钟

添加页面

配置路由

超级管理员登录,在权限管理-菜单权限中,添加具体的菜单,比如资产管理,资产列表,填入对应的菜单名称,路由地址,路由别名,组件路径等

创建文件

在上一步对应的组件路径中,创建页面组件,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层的数据库操作。