• 手把手开发Admin 系列五(规划api篇)


    文档:https://docs.arklnk.com

    前端:https://github.com/arklnk/ark-admin-vuenext

    后端:https://github.com/arklnk/ark-admin-zero

    go-zero:https://go-zero.dev/cn

    演示: http://arkadmin.si-yee.com

    账号密码备注
    demo123456演示账号

    编写api文件

    配置管理

    字典管理

    路径:app/core/cmd/api/desc/config/dict.api

    syntax = "v1"
    
    info(
    	title: "字典"
    	desc: "字典"
    	author: "Trevor"
    	email: "trevorlan@163.com"
    )
    
    type (
    	ConfigDict {
    		Id        uint64 `json:"id"`
    		ParentId  uint64 `json:"parentId"`
    		Name      string `json:"name"`
    		Type      uint64 `json:"type"`
    		UniqueKey string `json:"uniqueKey"`
    		Value     string `json:"value"`
    		OrderNum  uint64 `json:"orderNum"`
    		Remark    string `json:"remark"`
    		Status    uint64 `json:"status"`
    	}
    	ConfigDictListResp {
    		DictList []ConfigDict `json:"list"`
    	}
    )
    
    type (
    	ConfigDictPageReq {
    		Page     uint64 `form:"page"      validate:"number,gte=1"`
    		Limit    uint64 `form:"limit"     validate:"number,gte=1"`
    		ParentId uint64 `form:"parentId"  validate:"number,gte=0"`
    	}
    	ConfigDictPagination {
    		Page  uint64 `json:"page"`
    		Limit uint64 `json:"limit"`
    		Total uint64 `json:"total"`
    	}
    	ConfigDictPageResp {
    		ConfigDictList []ConfigDict         `json:"list"`
    		Pagination     ConfigDictPagination `json:"pagination"`
    	}
    )
    
    type (
    	AddConfigDictReq {
    		ParentId  uint64 `json:"parentId"   validate:"number,gte=0"`
    		Name      string `json:"name"       validate:"min=2,max=50"`
    		Type      uint64 `json:"type"       validate:"number,gte=1,lte=12"`
    		UniqueKey string `json:"uniqueKey"  validate:"min=2,max=50"`
    		Value     string `json:"value"      validate:"max=2048"`
    		OrderNum  uint64 `json:"orderNum"   validate:"gte=0,lte=9999"`
    		Remark    string `json:"remark"     validate:"max=200"`
    		Status    uint64 `json:"status"     validate:"number,gte=0,lte=1"`
    	}
    )
    
    type (
    	DeleteConfigDictReq {
    		Id uint64 `json:"id"  validate:"number,gte=1"`
    	}
    )
    
    type (
    	UpdateConfigDictReq {
    		Id        uint64 `json:"id"        validate:"number,gte=1"`
    		ParentId  uint64 `json:"parentId"  validate:"number,gte=0"`
    		Name      string `json:"name"      validate:"min=2,max=50"`
    		Type      uint64 `json:"type"      validate:"number,gte=1,lte=12"`
    		Value     string `json:"value"     validate:"max=2048"`
    		OrderNum  uint64 `json:"orderNum"  validate:"gte=0,lte=9999"`
    		Remark    string `json:"remark"    validate:"max=200"`
    		Status    uint64 `json:"status"    validate:"number,gte=0,lte=1"`
    	}
    )
    
    @server(
    	jwt: JwtAuth
    	group : config/dict
    	prefix : /config/dict
    	middleware: PermMenuAuth
    )
    service core-api {
    	@doc(
    		summary: "字典列表"
    	)
    	@handler GetConfigDictList
    	get /list returns (ConfigDictListResp)
    	
    	@doc(
    		summary: "分页字典数据"
    	)
    	@handler GetConfigDictPage
    	get /data/page (ConfigDictPageReq) returns (ConfigDictPageResp)
    	
    	@doc(
    		summary: "新增字典"
    	)
    	@handler AddConfigDict
    	post /add (AddConfigDictReq)
    	
    	@doc(
    		summary: "删除字典"
    	)
    	@handler DeleteConfigDict
    	post /delete (DeleteConfigDictReq)
    	
    	@doc(
    		summary: "更新字典"
    	)
    	@handler UpdateConfigDict
    	post /update (UpdateConfigDictReq)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112

    日志管理

    登录日志

    路径:app/core/cmd/api/desc/log/log.api

    syntax = "v1"
    
    info(
    	title: "日志"
    	desc: "日志"
    	author: "Trevor"
    	email: "trevorlan@163.com"
    )
    
    type (
    	LogLogin {
    		Id         uint64 `json:"id"`
    		Account    string `json:"account"`
    		Ip         string `json:"ip"`
    		Uri        string `json:"uri"`
    		Status     uint64 `json:"status"`
    		CreateTime string `json:"createTime"`
    	}
    	LogLoginPageReq {
    		Page  uint64 `form:"page"   validate:"number,gte=1"`
    		Limit uint64 `form:"limit"  validate:"number,gte=1"`
    	}
    	LogLoginPagePagination {
    		Page  uint64 `json:"page"`
    		Limit uint64 `json:"limit"`
    		Total uint64 `json:"total"`
    	}
    	LogLoginPageResp {
    		LogLoginList []LogLogin             `json:"list"`
    		Pagination   LogLoginPagePagination `json:"pagination"`
    	}
    )
    
    @server(
    	jwt: JwtAuth
    	group : log/login
    	prefix : /log/login
    	middleware: PermMenuAuth
    )
    service core-api {
    	@doc(
    		summary: "分页日志"
    	)
    	@handler GetLogLoginPage
    	get /page (LogLoginPageReq) returns (LogLoginPageResp)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    系统管理

    部门管理

    路径:app/core/cmd/api/desc/sys/dept.api

    syntax = "v1"
    
    info(
    	title: "部门"
    	desc: "部门"
    	author: "Trevor"
    	email: "trevorlan@163.com"
    )
    
    type (
    	Dept {
    		Id        uint64 `json:"id"`
    		ParentId  uint64 `json:"parentId"`
    		Name      string `json:"name"`
    		FullName  string `json:"fullName"`
    		UniqueKey string `json:"uniqueKey"`
    		Type      uint64 `json:"type"`
    		Status    uint64 `json:"status"`
    		OrderNum  uint64 `json:"orderNum"`
    		Remark    string `json:"remark"`
    	}
    	SysDeptListResp {
    		DeptList []Dept `json:"list"`
    	}
    )
    
    type (
    	AddSysDeptReq {
    		ParentId  uint64 `json:"parentId"   validate:"number,gte=0"`
    		Name      string `json:"name"       validate:"min=2,max=50"`
    		FullName  string `json:"fullName"   validate:"omitempty,min=2,max=50"`
    		UniqueKey string `json:"uniqueKey"  validate:"min=2,max=50"`
    		Type      uint64 `json:"type"       validate:"number,gte=1,lte=3"`
    		Status    uint64 `json:"status"     validate:"number,gte=0,lte=1"`
    		OrderNum  uint64 `json:"orderNum"   validate:"number,gte=0,lte=9999"`
    		Remark    string `json:"remark"     validate:"max=200"`
    	}
    )
    
    type (
    	DeleteSysDeptReq {
    		Id uint64 `json:"id"  validate:"number,gte=1"`
    	}
    )
    
    type (
    	UpdateSysDeptReq {
    		Id        uint64 `json:"id"         validate:"number,gte=1"`
    		ParentId  uint64 `json:"parentId"   validate:"number,gte=0"`
    		Name      string `json:"name"       validate:"min=2,max=50"`
    		FullName  string `json:"fullName"   validate:"omitempty,min=2,max=50"`
    		UniqueKey string `json:"uniqueKey"  validate:"min=2,max=50"`
    		Type      uint64 `json:"type"       validate:"number,gte=1,lte=3"`
    		Status    uint64 `json:"status"     validate:"number,gte=0,lte=1"`
    		OrderNum  uint64 `json:"orderNum"   validate:"number,gte=0,lte=9999"`
    		Remark    string `json:"remark"     validate:"max=200"`
    	}
    )
    
    @server(
    	jwt: JwtAuth
    	group : sys/dept
    	prefix : /sys/dept
    	middleware: PermMenuAuth
    )
    service core-api {
    	@doc(
    		summary: "部门列表"
    	)
    	@handler GetSysDeptList
    	get /list returns (SysDeptListResp)
    	
    	@doc(
    		summary: "新增部门"
    	)
    	@handler AddSysDept
    	post /add (AddSysDeptReq)
    	
    	@doc(
    		summary: "删除部门"
    	)
    	@handler DeleteSysDept
    	post /delete (DeleteSysDeptReq)
    	
    	@doc(
    		summary: "更新部门"
    	)
    	@handler UpdateSysDept
    	post /update (UpdateSysDeptReq)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    岗位管理

    路径:app/core/cmd/api/desc/sys/job.api

    syntax = "v1"
    
    info(
    	title: "岗位"
    	desc: "岗位"
    	author: "Trevor"
    	email: "trevorlan@163.com"
    )
    
    type (
    	Job {
    		Id       uint64 `json:"id"`
    		Name     string `json:"name"`
    		Status   uint64 `json:"status"`
    		OrderNum uint64 `json:"orderNum"`
    	}
    	SysJobPageReq {
    		Page  uint64 `form:"page"   validate:"number,gte=1"`
    		Limit uint64 `form:"limit"  validate:"number,gte=1"`
    	}
    	SysJobPagePagination {
    		Page  uint64 `json:"page"`
    		Limit uint64 `json:"limit"`
    		Total uint64 `json:"total"`
    	}
    	SysJobPageResp {
    		JobList    []Job                `json:"list"`
    		Pagination SysJobPagePagination `json:"pagination"`
    	}
    )
    
    type (
    	AddSysJobReq {
    		Name     string `json:"name"      validate:"min=2,max=50"`
    		Status   uint64 `json:"status"    validate:"number,gte=0,lte=1"`
    		OrderNum uint64 `json:"orderNum"  validate:"number,gte=0,lte=9999"`
    	}
    )
    
    type (
    	DeleteSysJobReq {
    		Id uint64 `json:"id"  validate:"number,gte=1"`
    	}
    )
    
    type (
    	UpdateSysJobReq {
    		Id       uint64 `json:"id"        validate:"number,gte=1"`
    		Name     string `json:"name"      validate:"min=2,max=50"`
    		Status   uint64 `json:"status"    validate:"number,gte=0,lte=1"`
    		OrderNum uint64 `json:"orderNum"  validate:"number,gte=0,lte=9999"`
    	}
    )
    
    @server(
    	jwt: JwtAuth
    	group : sys/job
    	prefix : /sys/job
    	middleware: PermMenuAuth
    )
    service core-api {
    	@doc(
    		summary: "分页岗位"
    	)
    	@handler GetSysJobPage
    	get /page (SysJobPageReq) returns (SysJobPageResp)
    	
    	@doc(
    		summary: "新增岗位"
    	)
    	@handler AddSysJob
    	post /add (AddSysJobReq)
    	
    	@doc(
    		summary: "删除岗位"
    	)
    	@handler DeleteSysJob
    	post /delete (DeleteSysJobReq)
    	
    	@doc(
    		summary: "更新岗位"
    	)
    	@handler UpdateSysJob
    	post /update (UpdateSysJobReq)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    菜单管理

    路径:app/core/cmd/api/desc/sys/menu.api

    syntax = "v1"
    
    info(
    	title: "权限菜单"
    	desc: "权限菜单"
    	author: "Trevor"
    	email: "trevorlan@163.com"
    )
    
    type (
    	PermMenu {
    		Id           uint64   `json:"id"`
    		ParentId     uint64   `json:"parentId"`
    		Name         string   `json:"name"`
    		Router       string   `json:"router"`
    		Perms        []string `json:"perms"`
    		Type         uint64   `json:"type"`
    		Icon         string   `json:"icon"`
    		OrderNum     uint64   `json:"orderNum"`
    		ViewPath     string   `json:"viewPath"`
    		IsShow       uint64   `json:"isShow"`
    		ActiveRouter string   `json:"activeRouter"`
    	    Has          uint64   `json:"has"`
    	}
    	SysPermMenuListResp {
    		PermMenuList []PermMenu `json:"list"`
    	}
    )
    
    type (
    	AddSysPermMenuReq {
    		ParentId     uint64   `json:"parentId"      validate:"number,gte=0"`
    		Name         string   `json:"name"          validate:"min=2,max=50"`
    		Router       string   `json:"router"        validate:"omitempty,max=1024"`
    		Perms        []string `json:"perms"         validate:"omitempty,unique"`
    		Type         uint64   `json:"type"          validate:"number,gte=0,lte=2"`
    		Icon         string   `json:"icon"          validate:"omitempty,max=200"`
    		OrderNum     uint64   `json:"orderNum"      validate:"number,gte=0,lte=9999"`
    		ViewPath     string   `json:"viewPath"      validate:"omitempty,max=1024"`
    		IsShow       uint64   `json:"isShow"        validate:"number,gte=0,lte=1"`
    		ActiveRouter string   `json:"activeRouter"  validate:"omitempty,max=1024"`
    	}
    )
    
    type (
    	DeleteSysPermMenuReq {
    		Id uint64 `json:"id"  validate:"number,gte=1"`
    	}
    )
    
    type (
    	UpdateSysPermMenuReq {
    		Id           uint64   `json:"id"            validate:"number,gte=1"`
    		ParentId     uint64   `json:"parentId"      validate:"number,gte=0"`
    		Name         string   `json:"name"          validate:"min=2,max=50"`
    		Router       string   `json:"router"        validate:"omitempty,max=1024"`
    		Perms        []string `json:"perms"         validate:"omitempty,unique"`
    		Type         uint64   `json:"type"          validate:"number,gte=0,lte=2"`
    		Icon         string   `json:"icon"          validate:"omitempty,max=200"`
    		OrderNum     uint64   `json:"orderNum"      validate:"number,gte=0,lte=9999"`
    		ViewPath     string   `json:"viewPath"      validate:"omitempty,max=1024"`
    		IsShow       uint64   `json:"isShow"        validate:"number,gte=0,lte=1"`
    		ActiveRouter string   `json:"activeRouter"  validate:"omitempty,max=1024"`
    	}
    )
    
    @server(
    	jwt: JwtAuth
    	group : sys/menu
    	prefix : /sys/perm/menu
    	middleware: PermMenuAuth
    )
    service core-api {
    	@doc(
    		summary: "权限菜单列表"
    	)
    	@handler GetSysPermMenuList
    	get /list returns (SysPermMenuListResp)
    	
    	@doc(
    		summary: "新增权限菜单"
    	)
    	@handler AddSysPermMenu
    	post /add (AddSysPermMenuReq)
    	
    	@doc(
    		summary: "删除权限菜单"
    	)
    	@handler DeleteSysPermMenu
    	post /delete (DeleteSysPermMenuReq)
    	
    	@doc(
    		summary: "更新权限菜单"
    	)
    	@handler UpdateSysPermMenu
    	post /update (UpdateSysPermMenuReq)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    职称管理

    路径:app/core/cmd/api/desc/sys/profession.api

    syntax = "v1"
    
    info(
    	title: "职称"
    	desc: "职称"
    	author: "Trevor"
    	email: "trevorlan@163.com"
    )
    
    type (
    	Profession {
    		Id       uint64 `json:"id"`
    		Name     string `json:"name"`
    		Status   uint64 `json:"status"`
    		OrderNum uint64 `json:"orderNum"`
    	}
    	SysProfessionPageReq {
    		Page  uint64 `form:"page"   validate:"number,gte=1"`
    		Limit uint64 `form:"limit"  validate:"number,gte=1"`
    	}
    	ProfessionPagePagination {
    		Page  uint64 `json:"page"`
    		Limit uint64 `json:"limit"`
    		Total uint64 `json:"total"`
    	}
    	SysProfessionPageResp {
    		ProfessionList []Profession             `json:"list"`
    		Pagination     ProfessionPagePagination `json:"pagination"`
    	}
    )
    
    type (
    	AddSysProfessionReq {
    		Name     string `json:"name"      validate:"min=2,max=50"`
    		Status   uint64 `json:"status"    validate:"number,gte=0,lte=1"`
    		OrderNum uint64 `json:"orderNum"  validate:"number,gte=0,lte=9999"`
    	}
    )
    
    type (
    	DeleteSysProfessionReq {
    		Id uint64 `json:"id"  validate:"number,gte=1"`
    	}
    )
    
    type (
    	UpdateSysProfessionReq {
    		Id       uint64 `json:"id"        validate:"number,gte=1"`
    		Name     string `json:"name"      validate:"min=2,max=50"`
    		Status   uint64 `json:"status"    validate:"number,gte=0,lte=1"`
    		OrderNum uint64 `json:"orderNum"  validate:"number,gte=0,lte=9999"`
    	}
    )
    
    @server(
    	jwt: JwtAuth
    	group : sys/profession
    	prefix : /sys/profession
    	middleware: PermMenuAuth
    )
    service core-api {
    	@doc(
    		summary: "分页职称"
    	)
    	@handler GetSysProfessionPage
    	get /page (SysProfessionPageReq) returns (SysProfessionPageResp)
    	
    	@doc(
    		summary: "新增职称"
    	)
    	@handler AddSysProfession
    	post /add (AddSysProfessionReq)
    	
    	@doc(
    		summary: "删除职称"
    	)
    	@handler DeleteSysProfession
    	post /delete (DeleteSysProfessionReq)
    	
    	@doc(
    		summary: "更新职称"
    	)
    	@handler UpdateSysProfession
    	post /update (UpdateSysProfessionReq)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    角色管理

    路径:app/core/cmd/api/desc/sys/role.api

    syntax = "v1"
    
    info(
    	title: "角色"
    	desc: "角色"
    	author: "Trevor"
    	email: "trevorlan@163.com"
    )
    
    type (
    	Role {
    		Id          uint64   `json:"id"`
    		ParentId    uint64   `json:"parentId"`
    		Name        string   `json:"name"`
    		UniqueKey   string   `json:"uniqueKey"`
    		PermMenuIds []uint64 `json:"permMenuIds"`
    		Remark      string   `json:"remark"`
    		Status      uint64   `json:"status"`
    		OrderNum    uint64   `json:"orderNum"`
    	}
    	SysRoleListResp {
    		RoleList []Role `json:"list"`
    	}
    )
    
    type (
    	AddSysRoleReq {
    		ParentId    uint64   `json:"parentId"     validate:"number,gte=0"`
    		Name        string   `json:"name"         validate:"min=2,max=50"`
    		UniqueKey   string   `json:"uniqueKey"    validate:"min=2,max=50"`
    		PermMenuIds []uint64 `json:"permMenuIds"  validate:"omitempty,unique"`
    		Remark      string   `json:"remark"       validate:"max=200"`
    		Status      uint64   `json:"status"       validate:"number,gte=0,lte=1"`
    		OrderNum    uint64   `json:"orderNum"     validate:"number,gte=0,lte=9999"`
    	}
    )
    
    type (
    	DeleteSysRoleReq {
    		Id uint64 `json:"id"  validate:"number,gte=2"`
    	}
    )
    
    type (
    	UpdateSysRoleReq {
    		Id          uint64   `json:"id"           validate:"number,gte=1"`
    		ParentId    uint64   `json:"parentId"     validate:"number,gte=0"`
    		UniqueKey   string   `json:"uniqueKey"    validate:"min=2,max=50"`
    		Name        string   `json:"name"         validate:"min=2,max=50"`
    		PermMenuIds []uint64 `json:"permMenuIds"  validate:"omitempty,unique"`
    		Remark      string   `json:"remark"       validate:"max=200"`
    		Status      uint64   `json:"status"       validate:"number,gte=0,lte=1"`
    		OrderNum    uint64   `json:"orderNum"     validate:"number,gte=0,lte=9999"`
    	}
    )
    
    @server(
    	jwt: JwtAuth
    	group : sys/role
    	prefix : /sys/role
    	middleware: PermMenuAuth
    )
    service core-api {
    	@doc(
    		summary: "角色列表"
    	)
    	@handler GetSysRoleList
    	get /list returns (SysRoleListResp)
    	
    	@doc(
    		summary: "新增角色"
    	)
    	@handler AddSysRole
    	post /add (AddSysRoleReq)
    	
    	@doc(
    		summary: "删除角色"
    	)
    	@handler DeleteSysRole
    	post /delete (DeleteSysRoleReq)
    	
    	@doc(
    		summary: "更新角色"
    	)
    	@handler UpdateSysRole
    	post /update (UpdateSysRoleReq)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    用户管理

    路径:app/core/cmd/api/desc/sys/user.api

    syntax = "v1"
    
    info(
    	title: "用户"
    	desc: "用户"
    	author: "Trevor"
    	email: "trevorlan@163.com"
    )
    
    type (
    	UserProfession {
    		Id   uint64 `json:"id"`
    		Name string `json:"name"`
    	}
    	UserJob {
    		Id   uint64 `json:"id"`
    		Name string `json:"name"`
    	}
    	UserDept {
    		Id   uint64 `json:"id"`
    		Name string `json:"name"`
    	}
    	UserRole {
    		Id   uint64 `json:"id"`
    		Name string `json:"name"`
    	}
    	User {
    		Id         uint64         `json:"id"`
    		Account    string         `json:"account"`
    		Username   string         `json:"username"`
    		Nickname   string         `json:"nickname"`
    		Gender     uint64         `json:"gender"`
    		Email      string         `json:"email"`
    		Mobile     string         `json:"mobile"`
    		Profession UserProfession `json:"profession"`
    		Job        UserJob        `json:"job"`
    		Dept       UserDept       `json:"dept"`
    		Roles      []UserRole     `json:"roles"`
    		Status     uint64         `json:"status"`
    		OrderNum   uint64         `json:"orderNum"`
    		Remark     string         `json:"remark"`
    	}
    	SysUserPageReq {
    		Page   uint64 `form:"page"    validate:"number,gte=1"`
    		Limit  uint64 `form:"limit"   validate:"number,gte=1"`
    		DeptId uint64 `form:"deptId"  validate:"number,gte=0"`
    	}
    	UserPagePagination {
    		Page  uint64 `json:"page"`
    		Limit uint64 `json:"limit"`
    		Total uint64 `json:"total"`
    	}
    	SysUserPageResp {
    		UserList   []User             `json:"list"`
    		Pagination UserPagePagination `json:"pagination"`
    	}
    )
    
    type (
    	AddSysUserReq {
    		Account      string   `json:"account"       validate:"min=4,max=50"`
    		Username     string   `json:"username"      validate:"min=2,max=50"`
    		Nickname     string   `json:"nickname"      validate:"omitempty,min=2,max=50"`
    		Gender       uint64   `json:"gender"        validate:"number,gte=0,lte=2"`
    		Email        string   `json:"email"         validate:"omitempty,email"`
    		Mobile       string   `json:"mobile"        validate:"omitempty,min=11"`
    		ProfessionId uint64   `json:"professionId"  validate:"number,gte=1"`
    		JobId        uint64   `json:"jobId"         validate:"number,gte=1"`
    		DeptId       uint64   `json:"deptId"        validate:"number,gte=1"`
    		RoleIds      []uint64 `json:"roleIds"       validate:"unique"`
    		Status       uint64   `json:"status"        validate:"number,gte=0,lte=1"`
    		OrderNum     uint64   `json:"orderNum"      validate:"number,gte=0,lte=9999"`
    		Remark       string   `json:"remark"        validate:"max=200"`
    	}
    )
    
    type (
    	DeleteSysUserReq {
    		Id uint64 `json:"id"  validate:"number,gte=2"`
    	}
    )
    
    type (
    	UpdateSysUserReq {
    		Id           uint64   `json:"id"            validate:"number,gte=2"`
    		Username     string   `json:"username"      validate:"min=2,max=50"`
    		Nickname     string   `json:"nickname"      validate:"omitempty,min=2,max=50"`
    		Gender       uint64   `json:"gender"        validate:"number,gte=0,lte=2"`
    		Email        string   `json:"email"         validate:"omitempty,email"`
    		Mobile       string   `json:"mobile"        validate:"omitempty,min=11"`
    		ProfessionId uint64   `json:"professionId"  validate:"number,gte=1"`
    		JobId        uint64   `json:"jobId"         validate:"number,gte=1"`
    		DeptId       uint64   `json:"deptId"        validate:"number,gte=1"`
    		RoleIds      []uint64 `json:"roleIds"       validate:"unique"`
    		Status       uint64   `json:"status"        validate:"number,gte=0,lte=1"`
    		OrderNum     uint64   `json:"orderNum"      validate:"number,gte=0,lte=9999"`
    		Remark       string   `json:"remark"        validate:"max=200"`
    	}
    )
    
    type (
    	UpdateSysUserPasswordReq {
    		Id       uint64 `json:"id"        validate:"number,gte=2"`
    		Password string `json:"password"  validate:"min=6,max=12"`
    	}
    )
    
    type (
    	GetSysUserRdpjInfoReq {
    		UserId uint64 `form:"userId"  validate:"number,gte=0"`
    	}
    	Rdpj {
    		Id   uint64 `json:"id"`
    		Name string `json:"name"`
    	}
    	DeptTree {
    		Id       uint64 `json:"id"`
    		ParentId uint64 `json:"parentId"`
    		Name     string `json:"name"`
    	}
    	RoleTree {
    		Id       uint64 `json:"id"`
    		ParentId uint64 `json:"parentId"`
    		Name     string `json:"name"`
    	    Has      uint64 `json:"has"`
    	}
    	GetSysUserRdpjInfoResp {
    		Role       []RoleTree `json:"role"`
    		Dept       []DeptTree `json:"dept"`
    		Profession []Rdpj     `json:"profession"`
    		Job        []Rdpj     `json:"job"`
    	}
    )
    
    @server(
    	jwt: JwtAuth
    	group : sys/user
    	prefix : /sys/user
    	middleware: PermMenuAuth
    )
    service core-api {
    	@doc(
    		summary: "分页用户"
    	)
    	@handler GetSysUserPage
    	get /page (SysUserPageReq) returns (SysUserPageResp)
    	
    	@doc(
    		summary: "新增用户"
    	)
    	@handler AddSysUser
    	post /add (AddSysUserReq)
    	
    	@doc(
    		summary: "删除用户"
    	)
    	@handler DeleteSysUser
    	post /delete (DeleteSysUserReq)
    	
    	@doc(
    		summary: "更新用户"
    	)
    	@handler UpdateSysUser
    	post /update (UpdateSysUserReq)
    	
    	@doc(
    		summary: "更新用户密码"
    	)
    	@handler UpdateSysUserPassword
    	post /password/update (UpdateSysUserPasswordReq)
    	
    	@doc(
    		summary: "角色部门职称岗位信息"
    	)
    	@handler GetSysUserRdpjInfo
    	get /rdpj/info (GetSysUserRdpjInfoReq) returns (GetSysUserRdpjInfoResp)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177

    用户模块

    通用操作

    路径:app/core/cmd/api/desc/user/user.api

    syntax = "v1"
    
    info(
    	title: "个人中心"
    	desc: "个人中心"
    	author: "Trevor"
    	email: "trevorlan@163.com"
    )
    
    type (
    	LoginReq {
    		CaptchaId  string `json:"captchaId"`
    		VerifyCode string `json:"verifyCode"`
    		Account    string `json:"account"`
    		Password   string `json:"password"`
    	}
    	LoginResp {
    		Token string `json:"token"`
    	}
    )
    
    type (
    	UserInfoResp {
    		Username string `json:"username"`
    		Avatar   string `json:"avatar"`
    	}
    )
    
    type (
    	UserProfileInfoResp {
    		Username string `json:"username"`
    		Nickname string `json:"nickname"`
    		Gender   uint64 `json:"gender"`
    		Email    string `json:"email"`
    		Mobile   string `json:"mobile"`
    		Remark   string `json:"remark"`
    		Avatar   string `json:"avatar"`
    	}
    )
    
    type (
    	UpdateProfileReq {
    		Username string `json:"username"  validate:"required,min=2,max=12"`
    		Nickname string `json:"nickname"  validate:"omitempty,min=2,max=12"`
    		Gender   uint64 `json:"gender"    validate:"gte=0,lte=2"`
    		Email    string `json:"email"     validate:"omitempty,email"`
    		Mobile   string `json:"mobile"    validate:"omitempty,len=11"`
    		Avatar   string `json:"avatar"    validate:"required,url"`
    	}
    )
    
    type (
    	Menu {
    		Id           uint64 `json:"id"`
    		ParentId     uint64 `json:"parentId"`
    		Name         string `json:"name"`
    		Router       string `json:"router"`
    		Type         uint64 `json:"type"`
    		Icon         string `json:"icon"`
    		OrderNum     uint64 `json:"orderNum"`
    		ViewPath     string `json:"viewPath"`
    		IsShow       uint64 `json:"isShow"`
    		ActiveRouter string `json:"activeRouter"`
    	}
    	UserPermMenuResp {
    		Menus []Menu   `json:"menus"`
    		Perms []string `json:"perms"`
    	}
    )
    
    type (
    	UpdatePasswordReq {
    		OldPassword string `json:"oldPassword"  validate:"min=6,max=12"`
    		NewPassword string `json:"newPassword"  validate:"min=6,max=12"`
    	}
    )
    
    type (
    	LoginCaptchaResp {
    		CaptchaId  string `json:"captchaId"`
    		VerifyCode string `json:"verifyCode"`
    	}
    )
    
    type (
    	GenerateAvatarResp {
    		AvatarUrl string `json:"avatarUrl"`
    	}
    )
    
    @server(
    	group : user
    	prefix : /user
    )
    service core-api {
    	@doc(
    		summary: "登录"
    	)
    	@handler Login
    	post /login (LoginReq) returns (LoginResp)
    	
    	@doc(
    		summary: "登录验证码"
    	)
    	@handler GetLoginCaptcha
    	get /login/captcha returns (LoginCaptchaResp)
    
    	@doc(
    		summary: "退出"
    	)
    	@handler Logout
    	post /logout
    }
    
    @server(
    	jwt: JwtAuth
    	group : user
    	prefix : /user
    )
    service core-api {
    	@doc(
    		summary: "登录信息"
    	)
    	@handler GetUserInfo
    	get /info returns (UserInfoResp)
    	
    	@doc(
    		summary: "权限菜单"
    	)
    	@handler GetUserPermMenu
    	get /permmenu returns (UserPermMenuResp)
    	
    	@doc(
    		summary: "用户资料"
    	)
    	@handler GetUserProfileInfo
    	get /profile/info returns (UserProfileInfoResp)
    	
    	@doc(
    		summary: "更新用户资料"
    	)
    	@handler UpdateUserProfile
    	post /profile/update (UpdateProfileReq)
    	
    	@doc(
    		summary: "更新密码"
    	)
    	@handler UpdateUserPassword
    	post /password/update (UpdatePasswordReq)
    	
    	@doc(
    		summary: "生成头像"
    	)
    	@handler GetGenerateAvatar
    	get /avatar/generate returns (GenerateAvatarResp)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156

    生成api

    由于自定义了goctl模板,所以在使用goctl生成api时,请指定goctl模板路径为:dev/goctl

    例如(在项目根目录下执行)

    goctl api go -api app/core/cmd/api/core.api -dir app/core/cmd/api -home ./dev/goctl
    
    • 1

    编写业务逻辑

    业务逻辑篇幅过长,详细请参考:

    文档:https://docs.arklnk.com

    前端:https://github.com/arklnk/ark-admin-vuenext

    后端:https://github.com/arklnk/ark-admin-zero

    go-zero:https://go-zero.dev/cn

    演示: http://arkadmin.si-yee.com

    账号密码备注
    demo123456演示账号
  • 相关阅读:
    Pytest框架实战二
    FreeRTOS学习笔记——四、任务的定义与任务切换的实现
    动态加载内容爬取,Ajax爬取典例
    【Java技术专题】「Java8技术盲区」让我们来看看新一代IO流的开发指引(流升级功能体系)
    Android14 WMS-窗口添加流程(一)-Client端
    IPv6进阶:IPv6 过渡技术之 GRE 隧道
    MQTT基础--服务质量 (QoS) 0,1 和 2:第 6 部分
    记录一次失败的Ubuntu 20.04 OpenSSL3.0.5升级记录
    Ethernet channel 以太信道 详解来咯!
    Swift 学习笔记二(Set篇)
  • 原文地址:https://blog.csdn.net/lwqBrell/article/details/126622115