mirror of
https://github.com/flipped-aurora/gin-vue-admin.git
synced 2026-09-21 20:35:16 +00:00
Merge branch 'master' of https://github.com/flipped-aurora/gin-vue-admin into action-ci
This commit is contained in:
+13
-20
@@ -1,26 +1,19 @@
|
||||
FROM centos:7.6.1810
|
||||
FROM golang:alpine as builder
|
||||
|
||||
# 设置go mod proxy 国内代理
|
||||
# 设置golang path
|
||||
ENV GOPROXY=https://goproxy.io GOPATH=/gopath PATH="${PATH}:/usr/local/go/bin"
|
||||
# 定义使用的Golang 版本
|
||||
ARG GO_VERSION=1.13.3
|
||||
|
||||
# 安装 golang 1.13.3
|
||||
RUN yum install -y wget && \
|
||||
yum install -y wqy-microhei-fonts wqy-zenhei-fonts && \
|
||||
wget "https://dl.google.com/go/go$GO_VERSION.linux-amd64.tar.gz" && \
|
||||
rm -rf /usr/local/go && \
|
||||
tar -C /usr/local -xzf "go$GO_VERSION.linux-amd64.tar.gz" && \
|
||||
rm -rf *.tar.gz && \
|
||||
go version && go env;
|
||||
|
||||
|
||||
WORKDIR $GOPATH
|
||||
COPY . gin-vue
|
||||
|
||||
RUN cd server && go build -o app;
|
||||
ENV GOPROXY=https://goproxy.cn,https://goproxy.io,direct \
|
||||
GO111MODULE=on \
|
||||
CGO_ENABLED=1
|
||||
WORKDIR /ginvue
|
||||
RUN go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct
|
||||
COPY . .
|
||||
RUN go env && go list && go build -o app main.go
|
||||
|
||||
EXPOSE 8888
|
||||
ENTRYPOINT /ginvue/app
|
||||
|
||||
CMD ["gin-vue/app"]
|
||||
# 根据Dockerfile生成Docker镜像
|
||||
# docker build -t ginvue .
|
||||
# 根据Docker镜像启动Docker容器
|
||||
# docker run -itd -p 8888:8888 --name ginvue ginvue
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"gin-vue-admin/model/request"
|
||||
resp "gin-vue-admin/model/response"
|
||||
"gin-vue-admin/service"
|
||||
"gin-vue-admin/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
@@ -21,6 +22,15 @@ import (
|
||||
func CreateExaCustomer(c *gin.Context) {
|
||||
var cu model.ExaCustomer
|
||||
_ = c.ShouldBindJSON(&cu)
|
||||
CustomerVerify := utils.Rules{
|
||||
"CustomerName": {utils.NotEmpty()},
|
||||
"CustomerPhoneData": {utils.NotEmpty()},
|
||||
}
|
||||
CustomerVerifyErr := utils.Verify(cu, CustomerVerify)
|
||||
if CustomerVerifyErr != nil {
|
||||
response.FailWithMessage(CustomerVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
claims, _ := c.Get("claims")
|
||||
waitUse := claims.(*request.CustomClaims)
|
||||
cu.SysUserID = waitUse.ID
|
||||
@@ -44,6 +54,14 @@ func CreateExaCustomer(c *gin.Context) {
|
||||
func DeleteExaCustomer(c *gin.Context) {
|
||||
var cu model.ExaCustomer
|
||||
_ = c.ShouldBindJSON(&cu)
|
||||
CustomerVerify := utils.Rules{
|
||||
"ID": {utils.NotEmpty()},
|
||||
}
|
||||
CustomerVerifyErr := utils.Verify(cu.Model, CustomerVerify)
|
||||
if CustomerVerifyErr != nil {
|
||||
response.FailWithMessage(CustomerVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.DeleteExaCustomer(cu)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("删除失败:%v", err), c)
|
||||
@@ -63,6 +81,23 @@ func DeleteExaCustomer(c *gin.Context) {
|
||||
func UpdateExaCustomer(c *gin.Context) {
|
||||
var cu model.ExaCustomer
|
||||
_ = c.ShouldBindJSON(&cu)
|
||||
IdCustomerVerify := utils.Rules{
|
||||
"ID": {utils.NotEmpty()},
|
||||
}
|
||||
IdCustomerVerifyErr := utils.Verify(cu.Model, IdCustomerVerify)
|
||||
if IdCustomerVerifyErr != nil {
|
||||
response.FailWithMessage(IdCustomerVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
CustomerVerify := utils.Rules{
|
||||
"CustomerName": {utils.NotEmpty()},
|
||||
"CustomerPhoneData": {utils.NotEmpty()},
|
||||
}
|
||||
CustomerVerifyErr := utils.Verify(cu, CustomerVerify)
|
||||
if CustomerVerifyErr != nil {
|
||||
response.FailWithMessage(CustomerVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.UpdateExaCustomer(&cu)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("更新失败:%v", err), c)
|
||||
@@ -82,6 +117,14 @@ func UpdateExaCustomer(c *gin.Context) {
|
||||
func GetExaCustomer(c *gin.Context) {
|
||||
var cu model.ExaCustomer
|
||||
_ = c.ShouldBindQuery(&cu)
|
||||
IdCustomerVerify := utils.Rules{
|
||||
"ID": {utils.NotEmpty()},
|
||||
}
|
||||
IdCustomerVerifyErr := utils.Verify(cu.Model, IdCustomerVerify)
|
||||
if IdCustomerVerifyErr != nil {
|
||||
response.FailWithMessage(IdCustomerVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err, customer := service.GetExaCustomer(cu.ID)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("获取失败:%v", err), c)
|
||||
@@ -103,6 +146,11 @@ func GetExaCustomerList(c *gin.Context) {
|
||||
waitUse := claims.(*request.CustomClaims)
|
||||
var pageInfo request.PageInfo
|
||||
_ = c.ShouldBindQuery(&pageInfo)
|
||||
PageVerifyErr := utils.Verify(pageInfo, utils.CustomizeMap["PageVerify"])
|
||||
if PageVerifyErr != nil {
|
||||
response.FailWithMessage(PageVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err, customerList, total := service.GetCustomerInfoList(waitUse.AuthorityId, pageInfo)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("获取失败:%v", err), c)
|
||||
|
||||
@@ -27,7 +27,7 @@ func UploadFile(c *gin.Context) {
|
||||
response.FailWithMessage(fmt.Sprintf("上传文件失败,%v", err), c)
|
||||
} else {
|
||||
//文件上传后拿到文件路径
|
||||
err, filePath, key := utils.Upload(header, USER_HEADER_BUCKET, USER_HEADER_IMG_PATH)
|
||||
err, filePath, key := utils.Upload(header)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("接收返回值失败,%v", err), c)
|
||||
} else {
|
||||
@@ -45,7 +45,6 @@ func UploadFile(c *gin.Context) {
|
||||
response.FailWithMessage(fmt.Sprintf("修改数据库链接失败,%v", err), c)
|
||||
} else {
|
||||
response.OkDetailed(resp.ExaFileResponse{File: file}, "上传成功", c)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -65,7 +64,7 @@ func DeleteFile(c *gin.Context) {
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c)
|
||||
} else {
|
||||
err = utils.DeleteFile(USER_HEADER_BUCKET, f.Key)
|
||||
err = utils.DeleteFile(f.Key)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c)
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"gin-vue-admin/model/request"
|
||||
resp "gin-vue-admin/model/response"
|
||||
"gin-vue-admin/service"
|
||||
"gin-vue-admin/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
@@ -21,6 +22,17 @@ import (
|
||||
func CreateApi(c *gin.Context) {
|
||||
var api model.SysApi
|
||||
_ = c.ShouldBindJSON(&api)
|
||||
ApiVerify := utils.Rules{
|
||||
"Path": {utils.NotEmpty()},
|
||||
"Description": {utils.NotEmpty()},
|
||||
"ApiGroup": {utils.NotEmpty()},
|
||||
"Method": {utils.NotEmpty()},
|
||||
}
|
||||
ApiVerifyErr := utils.Verify(api, ApiVerify)
|
||||
if ApiVerifyErr != nil {
|
||||
response.FailWithMessage(ApiVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.CreateApi(api)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("创建失败,%v", err), c)
|
||||
@@ -40,6 +52,14 @@ func CreateApi(c *gin.Context) {
|
||||
func DeleteApi(c *gin.Context) {
|
||||
var a model.SysApi
|
||||
_ = c.ShouldBindJSON(&a)
|
||||
ApiVerify := utils.Rules{
|
||||
"ID": {utils.NotEmpty()},
|
||||
}
|
||||
ApiVerifyErr := utils.Verify(a.Model, ApiVerify)
|
||||
if ApiVerifyErr != nil {
|
||||
response.FailWithMessage(ApiVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.DeleteApi(a)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c)
|
||||
@@ -62,6 +82,11 @@ func GetApiList(c *gin.Context) {
|
||||
// 此结构体仅本方法使用
|
||||
var sp request.SearchApiParams
|
||||
_ = c.ShouldBindJSON(&sp)
|
||||
PageVerifyErr := utils.Verify(sp.PageInfo, utils.CustomizeMap["PageVerify"])
|
||||
if PageVerifyErr != nil {
|
||||
response.FailWithMessage(PageVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err, list, total := service.GetAPIInfoList(sp.SysApi, sp.PageInfo, sp.OrderKey, sp.Desc)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("获取数据失败,%v", err), c)
|
||||
@@ -86,6 +111,11 @@ func GetApiList(c *gin.Context) {
|
||||
func GetApiById(c *gin.Context) {
|
||||
var idInfo request.GetById
|
||||
_ = c.ShouldBindJSON(&idInfo)
|
||||
IdVerifyErr := utils.Verify(idInfo, utils.CustomizeMap["IdVerify"])
|
||||
if IdVerifyErr != nil {
|
||||
response.FailWithMessage(IdVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err, api := service.GetApiById(idInfo.Id)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("获取数据失败,%v", err), c)
|
||||
@@ -105,6 +135,17 @@ func GetApiById(c *gin.Context) {
|
||||
func UpdateApi(c *gin.Context) {
|
||||
var api model.SysApi
|
||||
_ = c.ShouldBindJSON(&api)
|
||||
ApiVerify := utils.Rules{
|
||||
"Path": {utils.NotEmpty()},
|
||||
"Description": {utils.NotEmpty()},
|
||||
"ApiGroup": {utils.NotEmpty()},
|
||||
"Method": {utils.NotEmpty()},
|
||||
}
|
||||
ApiVerifyErr := utils.Verify(api, ApiVerify)
|
||||
if ApiVerifyErr != nil {
|
||||
response.FailWithMessage(ApiVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.UpdateApi(api)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("修改数据失败,%v", err), c)
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"gin-vue-admin/model/request"
|
||||
resp "gin-vue-admin/model/response"
|
||||
"gin-vue-admin/service"
|
||||
"gin-vue-admin/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
@@ -21,6 +22,16 @@ import (
|
||||
func CreateAuthority(c *gin.Context) {
|
||||
var auth model.SysAuthority
|
||||
_ = c.ShouldBindJSON(&auth)
|
||||
AuthorityVerify := utils.Rules{
|
||||
"AuthorityId": {utils.NotEmpty()},
|
||||
"AuthorityName": {utils.NotEmpty()},
|
||||
"ParentId": {utils.NotEmpty()},
|
||||
}
|
||||
AuthorityVerifyErr := utils.Verify(auth, AuthorityVerify)
|
||||
if AuthorityVerifyErr != nil {
|
||||
response.FailWithMessage(AuthorityVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err, authBack := service.CreateAuthority(auth)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("创建失败,%v", err), c)
|
||||
@@ -40,6 +51,24 @@ func CreateAuthority(c *gin.Context) {
|
||||
func CopyAuthority(c *gin.Context) {
|
||||
var copyInfo resp.SysAuthorityCopyResponse
|
||||
_ = c.ShouldBindJSON(©Info)
|
||||
OldAuthorityVerify := utils.Rules{
|
||||
"OldAuthorityId": {utils.NotEmpty()},
|
||||
}
|
||||
OldAuthorityVerifyErr := utils.Verify(copyInfo, OldAuthorityVerify)
|
||||
if OldAuthorityVerifyErr != nil {
|
||||
response.FailWithMessage(OldAuthorityVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
AuthorityVerify := utils.Rules{
|
||||
"AuthorityId": {utils.NotEmpty()},
|
||||
"AuthorityName": {utils.NotEmpty()},
|
||||
"ParentId": {utils.NotEmpty()},
|
||||
}
|
||||
AuthorityVerifyErr := utils.Verify(copyInfo.Authority, AuthorityVerify)
|
||||
if AuthorityVerifyErr != nil {
|
||||
response.FailWithMessage(AuthorityVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err, authBack := service.CopyAuthority(copyInfo)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("拷贝失败,%v", err), c)
|
||||
@@ -59,6 +88,11 @@ func CopyAuthority(c *gin.Context) {
|
||||
func DeleteAuthority(c *gin.Context) {
|
||||
var a model.SysAuthority
|
||||
_ = c.ShouldBindJSON(&a)
|
||||
AuthorityIdVerifyErr := utils.Verify(a, utils.CustomizeMap["AuthorityIdVerify"])
|
||||
if AuthorityIdVerifyErr != nil {
|
||||
response.FailWithMessage(AuthorityIdVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
//删除角色之前需要判断是否有用户正在使用此角色
|
||||
err := service.DeleteAuthority(&a)
|
||||
if err != nil {
|
||||
@@ -79,6 +113,16 @@ func DeleteAuthority(c *gin.Context) {
|
||||
func UpdateAuthority(c *gin.Context) {
|
||||
var auth model.SysAuthority
|
||||
_ = c.ShouldBindJSON(&auth)
|
||||
AuthorityVerify := utils.Rules{
|
||||
"AuthorityId": {utils.NotEmpty()},
|
||||
"AuthorityName": {utils.NotEmpty()},
|
||||
"ParentId": {utils.NotEmpty()},
|
||||
}
|
||||
AuthorityVerifyErr := utils.Verify(auth, AuthorityVerify)
|
||||
if AuthorityVerifyErr != nil {
|
||||
response.FailWithMessage(AuthorityVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err, authority := service.UpdateAuthority(auth)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("更新失败,%v", err), c)
|
||||
@@ -98,6 +142,11 @@ func UpdateAuthority(c *gin.Context) {
|
||||
func GetAuthorityList(c *gin.Context) {
|
||||
var pageInfo request.PageInfo
|
||||
_ = c.ShouldBindJSON(&pageInfo)
|
||||
PageVerifyErr := utils.Verify(pageInfo, utils.CustomizeMap["PageVerify"])
|
||||
if PageVerifyErr != nil {
|
||||
response.FailWithMessage(PageVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err, list, total := service.GetAuthorityInfoList(pageInfo)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("获取数据失败,%v", err), c)
|
||||
@@ -122,6 +171,11 @@ func GetAuthorityList(c *gin.Context) {
|
||||
func SetDataAuthority(c *gin.Context) {
|
||||
var auth model.SysAuthority
|
||||
_ = c.ShouldBindJSON(&auth)
|
||||
AuthorityIdVerifyErr := utils.Verify(auth, utils.CustomizeMap["AuthorityIdVerify"])
|
||||
if AuthorityIdVerifyErr != nil {
|
||||
response.FailWithMessage(AuthorityIdVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.SetDataAuthority(auth)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("设置关联失败,%v", err), c)
|
||||
|
||||
@@ -5,7 +5,9 @@ import (
|
||||
"gin-vue-admin/global/response"
|
||||
"gin-vue-admin/model"
|
||||
"gin-vue-admin/service"
|
||||
"gin-vue-admin/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/url"
|
||||
"os"
|
||||
)
|
||||
|
||||
@@ -20,6 +22,59 @@ import (
|
||||
func CreateTemp(c *gin.Context) {
|
||||
var a model.AutoCodeStruct
|
||||
_ = c.ShouldBindJSON(&a)
|
||||
AutoCodeVerify := utils.Rules{
|
||||
"Abbreviation": {utils.NotEmpty()},
|
||||
"StructName": {utils.NotEmpty()},
|
||||
"PackageName": {utils.NotEmpty()},
|
||||
"Fields": {utils.NotEmpty()},
|
||||
}
|
||||
WKVerifyErr := utils.Verify(a, AutoCodeVerify)
|
||||
if WKVerifyErr!=nil {
|
||||
response.FailWithMessage(WKVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
if a.AutoCreateApiToSql {
|
||||
apiList := [5]model.SysApi{
|
||||
{
|
||||
Path: "/" + a.Abbreviation + "/" + "create" + a.StructName,
|
||||
Description: "新增" + a.StructName,
|
||||
ApiGroup: a.Abbreviation,
|
||||
Method: "POST",
|
||||
},
|
||||
{
|
||||
Path: "/" + a.Abbreviation + "/" + "delete" + a.StructName,
|
||||
Description: "删除" + a.StructName,
|
||||
ApiGroup: a.Abbreviation,
|
||||
Method: "DELETE",
|
||||
},
|
||||
{
|
||||
Path: "/" + a.Abbreviation + "/" + "update" + a.StructName,
|
||||
Description: "更新" + a.StructName,
|
||||
ApiGroup: a.Abbreviation,
|
||||
Method: "PUT",
|
||||
},
|
||||
{
|
||||
Path: "/" + a.Abbreviation + "/" + "find" + a.StructName,
|
||||
Description: "根据ID获取" + a.StructName,
|
||||
ApiGroup: a.Abbreviation,
|
||||
Method: "GET",
|
||||
},
|
||||
{
|
||||
Path: "/" + a.Abbreviation + "/" + "get" + a.StructName + "List",
|
||||
Description: "获取" + a.StructName + "列表",
|
||||
ApiGroup: a.Abbreviation,
|
||||
Method: "GET",
|
||||
},
|
||||
}
|
||||
for _, v := range apiList {
|
||||
errC := service.CreateApi(v)
|
||||
if errC != nil {
|
||||
c.Writer.Header().Add("success", "false")
|
||||
c.Writer.Header().Add("msg", url.QueryEscape(fmt.Sprintf("自动化创建失败,%v,请自行清空垃圾数据", errC)))
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
err := service.CreateTemp(a)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("创建失败,%v", err), c)
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"gin-vue-admin/model/request"
|
||||
resp "gin-vue-admin/model/response"
|
||||
"gin-vue-admin/service"
|
||||
"gin-vue-admin/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
@@ -20,6 +21,11 @@ import (
|
||||
func UpdateCasbin(c *gin.Context) {
|
||||
var cmr request.CasbinInReceive
|
||||
_ = c.ShouldBindJSON(&cmr)
|
||||
AuthorityIdVerifyErr := utils.Verify(cmr, utils.CustomizeMap["AuthorityIdVerify"])
|
||||
if AuthorityIdVerifyErr != nil {
|
||||
response.FailWithMessage(AuthorityIdVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.UpdateCasbin(cmr.AuthorityId, cmr.CasbinInfos)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("添加规则失败,%v", err), c)
|
||||
@@ -39,6 +45,11 @@ func UpdateCasbin(c *gin.Context) {
|
||||
func GetPolicyPathByAuthorityId(c *gin.Context) {
|
||||
var cmr request.CasbinInReceive
|
||||
_ = c.ShouldBindJSON(&cmr)
|
||||
AuthorityIdVerifyErr := utils.Verify(cmr, utils.CustomizeMap["AuthorityIdVerify"])
|
||||
if AuthorityIdVerifyErr != nil {
|
||||
response.FailWithMessage(AuthorityIdVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
paths := service.GetPolicyPathByAuthorityId(cmr.AuthorityId)
|
||||
response.OkWithData(resp.PolicyPathResponse{Paths: paths}, c)
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"gin-vue-admin/model/request"
|
||||
resp "gin-vue-admin/model/response"
|
||||
"gin-vue-admin/service"
|
||||
"gin-vue-admin/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
@@ -39,7 +40,12 @@ func GetMenu(c *gin.Context) {
|
||||
func GetMenuList(c *gin.Context) {
|
||||
var pageInfo request.PageInfo
|
||||
_ = c.ShouldBindJSON(&pageInfo)
|
||||
err, menuList, total := service.GetInfoList(pageInfo)
|
||||
PageVerifyErr := utils.Verify(pageInfo, utils.CustomizeMap["PageVerify"])
|
||||
if PageVerifyErr != nil {
|
||||
response.FailWithMessage(PageVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err, menuList, total := service.GetInfoList()
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("获取数据失败,%v", err), c)
|
||||
} else {
|
||||
@@ -63,6 +69,26 @@ func GetMenuList(c *gin.Context) {
|
||||
func AddBaseMenu(c *gin.Context) {
|
||||
var menu model.SysBaseMenu
|
||||
_ = c.ShouldBindJSON(&menu)
|
||||
MenuVerify := utils.Rules{
|
||||
"Path": {"notEmpty"},
|
||||
"ParentId": {utils.NotEmpty()},
|
||||
"Name": {utils.NotEmpty()},
|
||||
"Component": {utils.NotEmpty()},
|
||||
"Sort": {utils.Ge("0"), "ge=0"},
|
||||
}
|
||||
MenuVerifyErr := utils.Verify(menu, MenuVerify)
|
||||
if MenuVerifyErr != nil {
|
||||
response.FailWithMessage(MenuVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
MetaVerify := utils.Rules{
|
||||
"Title": {utils.NotEmpty()},
|
||||
}
|
||||
MetaVerifyErr := utils.Verify(menu.Meta, MetaVerify)
|
||||
if MetaVerifyErr != nil {
|
||||
response.FailWithMessage(MetaVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.AddBaseMenu(menu)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("添加失败,%v", err), c)
|
||||
@@ -98,7 +124,14 @@ func GetBaseMenuTree(c *gin.Context) {
|
||||
func AddMenuAuthority(c *gin.Context) {
|
||||
var addMenuAuthorityInfo request.AddMenuAuthorityInfo
|
||||
_ = c.ShouldBindJSON(&addMenuAuthorityInfo)
|
||||
|
||||
MenuVerify := utils.Rules{
|
||||
"AuthorityId": {"notEmpty"},
|
||||
}
|
||||
MenuVerifyErr := utils.Verify(addMenuAuthorityInfo, MenuVerify)
|
||||
if MenuVerifyErr != nil {
|
||||
response.FailWithMessage(MenuVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.AddMenuAuthority(addMenuAuthorityInfo.Menus, addMenuAuthorityInfo.AuthorityId)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("添加失败,%v", err), c)
|
||||
@@ -118,6 +151,14 @@ func AddMenuAuthority(c *gin.Context) {
|
||||
func GetMenuAuthority(c *gin.Context) {
|
||||
var authorityIdInfo request.AuthorityIdInfo
|
||||
_ = c.ShouldBindJSON(&authorityIdInfo)
|
||||
MenuVerify := utils.Rules{
|
||||
"AuthorityId": {"notEmpty"},
|
||||
}
|
||||
MenuVerifyErr := utils.Verify(authorityIdInfo, MenuVerify)
|
||||
if MenuVerifyErr != nil {
|
||||
response.FailWithMessage(MenuVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err, menus := service.GetMenuAuthority(authorityIdInfo.AuthorityId)
|
||||
if err != nil {
|
||||
response.FailWithDetailed(response.ERROR, resp.SysMenusResponse{Menus: menus}, fmt.Sprintf("添加失败,%v", err), c)
|
||||
@@ -137,6 +178,11 @@ func GetMenuAuthority(c *gin.Context) {
|
||||
func DeleteBaseMenu(c *gin.Context) {
|
||||
var idInfo request.GetById
|
||||
_ = c.ShouldBindJSON(&idInfo)
|
||||
IdVerifyErr := utils.Verify(idInfo, utils.CustomizeMap["IdVerify"])
|
||||
if IdVerifyErr != nil {
|
||||
response.FailWithMessage(IdVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.DeleteBaseMenu(idInfo.Id)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("删除失败:%v", err), c)
|
||||
@@ -157,6 +203,26 @@ func DeleteBaseMenu(c *gin.Context) {
|
||||
func UpdateBaseMenu(c *gin.Context) {
|
||||
var menu model.SysBaseMenu
|
||||
_ = c.ShouldBindJSON(&menu)
|
||||
MenuVerify := utils.Rules{
|
||||
"Path": {"notEmpty"},
|
||||
"ParentId": {utils.NotEmpty()},
|
||||
"Name": {utils.NotEmpty()},
|
||||
"Component": {utils.NotEmpty()},
|
||||
"Sort": {utils.Ge("0"), "ge=0"},
|
||||
}
|
||||
MenuVerifyErr := utils.Verify(menu, MenuVerify)
|
||||
if MenuVerifyErr != nil {
|
||||
response.FailWithMessage(MenuVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
MetaVerify := utils.Rules{
|
||||
"Title": {utils.NotEmpty()},
|
||||
}
|
||||
MetaVerifyErr := utils.Verify(menu.Meta, MetaVerify)
|
||||
if MetaVerifyErr != nil {
|
||||
response.FailWithMessage(MetaVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.UpdateBaseMenu(menu)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("修改失败:%v", err), c)
|
||||
@@ -176,6 +242,14 @@ func UpdateBaseMenu(c *gin.Context) {
|
||||
func GetBaseMenuById(c *gin.Context) {
|
||||
var idInfo request.GetById
|
||||
_ = c.ShouldBindJSON(&idInfo)
|
||||
MenuVerify := utils.Rules{
|
||||
"Id": {"notEmpty"},
|
||||
}
|
||||
MenuVerifyErr := utils.Verify(idInfo, MenuVerify)
|
||||
if MenuVerifyErr != nil {
|
||||
response.FailWithMessage(MenuVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err, menu := service.GetBaseMenuById(idInfo.Id)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("查询失败:%v", err), c)
|
||||
|
||||
@@ -18,11 +18,6 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
USER_HEADER_IMG_PATH string = "http://qmplusimg.henrongyi.top"
|
||||
USER_HEADER_BUCKET string = "qm-plus-img"
|
||||
)
|
||||
|
||||
// @Tags Base
|
||||
// @Summary 用户注册账号
|
||||
// @Produce application/json
|
||||
@@ -32,6 +27,17 @@ const (
|
||||
func Register(c *gin.Context) {
|
||||
var R request.RegisterStruct
|
||||
_ = c.ShouldBindJSON(&R)
|
||||
UserVerify := utils.Rules{
|
||||
"Username": {utils.NotEmpty()},
|
||||
"NickName": {utils.NotEmpty()},
|
||||
"Password": {utils.NotEmpty()},
|
||||
"AuthorityId": {utils.NotEmpty()},
|
||||
}
|
||||
UserVerifyErr := utils.Verify(R, UserVerify)
|
||||
if UserVerifyErr != nil {
|
||||
response.FailWithMessage(UserVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
user := &model.SysUser{Username: R.Username, NickName: R.NickName, Password: R.Password, HeaderImg: R.HeaderImg, AuthorityId: R.AuthorityId}
|
||||
err, userReturn := service.Register(*user)
|
||||
if err != nil {
|
||||
@@ -50,6 +56,17 @@ func Register(c *gin.Context) {
|
||||
func Login(c *gin.Context) {
|
||||
var L request.RegisterAndLoginStruct
|
||||
_ = c.ShouldBindJSON(&L)
|
||||
UserVerify := utils.Rules{
|
||||
"CaptchaId": {utils.NotEmpty()},
|
||||
"Captcha": {utils.NotEmpty()},
|
||||
"Username": {utils.NotEmpty()},
|
||||
"Password": {utils.NotEmpty()},
|
||||
}
|
||||
UserVerifyErr := utils.Verify(L, UserVerify)
|
||||
if UserVerifyErr != nil {
|
||||
response.FailWithMessage(UserVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
if captcha.VerifyString(L.CaptchaId, L.Captcha) {
|
||||
U := &model.SysUser{Username: L.Username, Password: L.Password}
|
||||
if err, user := service.Login(U); err != nil {
|
||||
@@ -139,6 +156,16 @@ func tokenNext(c *gin.Context, user model.SysUser) {
|
||||
func ChangePassword(c *gin.Context) {
|
||||
var params request.ChangePasswordStruct
|
||||
_ = c.ShouldBindJSON(¶ms)
|
||||
UserVerify := utils.Rules{
|
||||
"Username": {utils.NotEmpty()},
|
||||
"Password": {utils.NotEmpty()},
|
||||
"NewPassword": {utils.NotEmpty()},
|
||||
}
|
||||
UserVerifyErr := utils.Verify(params, UserVerify)
|
||||
if UserVerifyErr != nil {
|
||||
response.FailWithMessage(UserVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
U := &model.SysUser{Username: params.Username, Password: params.Password}
|
||||
if err, _ := service.ChangePassword(U, params.NewPassword); err != nil {
|
||||
response.FailWithMessage("修改失败,请检查用户名密码", c)
|
||||
@@ -172,7 +199,7 @@ func UploadHeaderImg(c *gin.Context) {
|
||||
response.FailWithMessage(fmt.Sprintf("上传文件失败,%v", err), c)
|
||||
} else {
|
||||
//文件上传后拿到文件路径
|
||||
err, filePath, _ := utils.Upload(header, USER_HEADER_BUCKET, USER_HEADER_IMG_PATH)
|
||||
err, filePath, _ := utils.Upload(header)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("接收返回值失败,%v", err), c)
|
||||
} else {
|
||||
@@ -198,6 +225,11 @@ func UploadHeaderImg(c *gin.Context) {
|
||||
func GetUserList(c *gin.Context) {
|
||||
var pageInfo request.PageInfo
|
||||
_ = c.ShouldBindJSON(&pageInfo)
|
||||
PageVerifyErr := utils.Verify(pageInfo, utils.CustomizeMap["PageVerify"])
|
||||
if PageVerifyErr != nil {
|
||||
response.FailWithMessage(PageVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err, list, total := service.GetUserInfoList(pageInfo)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("获取数据失败,%v", err), c)
|
||||
@@ -222,6 +254,15 @@ func GetUserList(c *gin.Context) {
|
||||
func SetUserAuthority(c *gin.Context) {
|
||||
var sua request.SetUserAuth
|
||||
_ = c.ShouldBindJSON(&sua)
|
||||
UserVerify := utils.Rules{
|
||||
"UUID": {utils.NotEmpty()},
|
||||
"AuthorityId": {utils.NotEmpty()},
|
||||
}
|
||||
UserVerifyErr := utils.Verify(sua, UserVerify)
|
||||
if UserVerifyErr != nil {
|
||||
response.FailWithMessage(UserVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.SetUserAuthority(sua.UUID, sua.AuthorityId)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("修改失败,%v", err), c)
|
||||
@@ -235,12 +276,17 @@ func SetUserAuthority(c *gin.Context) {
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body request.SetUserAuth true "删除用户"
|
||||
// @Param data body request.GetById true "删除用户"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"修改成功"}"
|
||||
// @Router /user/deleteUser [delete]
|
||||
func DeleteUser(c *gin.Context) {
|
||||
var reqId request.GetById
|
||||
_ = c.ShouldBindJSON(&reqId)
|
||||
IdVerifyErr := utils.Verify(reqId, utils.CustomizeMap["IdVerify"])
|
||||
if IdVerifyErr != nil {
|
||||
response.FailWithMessage(IdVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.DeleteUser(reqId.Id)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c)
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"gin-vue-admin/global/response"
|
||||
"gin-vue-admin/model"
|
||||
"gin-vue-admin/service"
|
||||
"gin-vue-admin/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
@@ -17,6 +18,17 @@ import (
|
||||
func CreateWorkFlow(c *gin.Context) {
|
||||
var wk model.SysWorkflow
|
||||
_ = c.ShouldBindJSON(&wk)
|
||||
WKVerify := utils.Rules{
|
||||
"WorkflowNickName": {utils.NotEmpty()},
|
||||
"WorkflowName": {utils.NotEmpty()},
|
||||
"WorkflowDescription": {utils.NotEmpty()},
|
||||
"WorkflowStepInfo": {utils.NotEmpty()},
|
||||
}
|
||||
WKVerifyErr := utils.Verify(wk, WKVerify)
|
||||
if WKVerifyErr!=nil {
|
||||
response.FailWithMessage(WKVerifyErr.Error(), c)
|
||||
return
|
||||
}
|
||||
err := service.Create(wk)
|
||||
if err != nil {
|
||||
response.FailWithMessage(fmt.Sprintf("获取失败:%v", err), c)
|
||||
|
||||
+5
-2
@@ -17,17 +17,20 @@ mysql:
|
||||
config: 'charset=utf8&parseTime=True&loc=Local'
|
||||
max-idle-conns: 10
|
||||
max-open-conns: 10
|
||||
log-mode: true
|
||||
log-mode: false
|
||||
|
||||
#sqlite 配置
|
||||
sqlite:
|
||||
path: db.db
|
||||
log-mode: true
|
||||
config: 'loc=Asia/Shanghai'
|
||||
|
||||
# oss configuration
|
||||
qiniu:
|
||||
access-key: '25j8dYBZ2wuiy0yhwShytjZDTX662b8xiFguwxzZ'
|
||||
secret-key: 'pgdbqEsf7ooZh7W3xokP833h3dZ_VecFXPDeG5JY'
|
||||
|
||||
bucket: 'qm-plus-img'
|
||||
img-path: 'http://qmplusimg.henrongyi.top'
|
||||
# redis configuration
|
||||
redis:
|
||||
addr: %{redis_address}
|
||||
|
||||
@@ -46,6 +46,8 @@ type Redis struct {
|
||||
type Qiniu struct {
|
||||
AccessKey string `mapstructure:"access-key" json:"accessKey" yaml:"access-key"`
|
||||
SecretKey string `mapstructure:"secret-key" json:"secretKey" yaml:"secret-key"`
|
||||
Bucket string `mapstructure:"bucket" json:"bucket" yaml:"bucket"`
|
||||
ImgPath string `mapstructure:"img-path" json:"imgPath" yaml:"img-path"`
|
||||
}
|
||||
|
||||
type Captcha struct {
|
||||
|
||||
@@ -23,6 +23,8 @@ func RunWindowsServer() {
|
||||
WriteTimeout: 10 * time.Second,
|
||||
MaxHeaderBytes: 1 << 20,
|
||||
}
|
||||
// 保证文本顺序输出
|
||||
// In order to ensure that the text order output can be deleted
|
||||
time.Sleep(10 * time.Microsecond)
|
||||
global.GVA_LOG.Debug("server run success on ", address)
|
||||
|
||||
|
||||
+49
-3657
File diff suppressed because it is too large
Load Diff
@@ -4,13 +4,15 @@ import (
|
||||
"gin-vue-admin/global"
|
||||
"github.com/jinzhu/gorm"
|
||||
_ "github.com/jinzhu/gorm/dialects/mysql"
|
||||
"os"
|
||||
)
|
||||
|
||||
//初始化数据库并产生数据库全局变量
|
||||
func Mysql() {
|
||||
admin := global.GVA_CONFIG.Mysql
|
||||
if db, err := gorm.Open("mysql", admin.Username+":"+admin.Password+"@("+admin.Path+")/"+admin.Dbname+"?"+admin.Config); err != nil {
|
||||
global.GVA_LOG.Error("DEFAULTDB数据库启动异常", err)
|
||||
global.GVA_LOG.Error("MySQL启动异常", err)
|
||||
os.Exit(0)
|
||||
} else {
|
||||
global.GVA_DB = db
|
||||
global.GVA_DB.DB().SetMaxIdleConns(admin.MaxIdleConns)
|
||||
|
||||
@@ -14,7 +14,6 @@ import (
|
||||
|
||||
func Routers() *gin.Engine {
|
||||
var Router = gin.Default()
|
||||
|
||||
//Router.Use(middleware.LoadTls()) // 打开就能玩https了
|
||||
global.GVA_LOG.Debug("use middleware logger")
|
||||
// 跨域
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package initialize
|
||||
|
||||
import "gin-vue-admin/utils"
|
||||
|
||||
func init() {
|
||||
_ = utils.RegisterRule("PageVerify",
|
||||
utils.Rules{
|
||||
"Page": {utils.NotEmpty()},
|
||||
"PageSize": {utils.NotEmpty()},
|
||||
},
|
||||
)
|
||||
_ = utils.RegisterRule("IdVerify",
|
||||
utils.Rules{
|
||||
"Id": {utils.NotEmpty()},
|
||||
},
|
||||
)
|
||||
_ = utils.RegisterRule("AuthorityIdVerify",
|
||||
utils.Rules{
|
||||
"AuthorityId": {utils.NotEmpty()},
|
||||
},
|
||||
)
|
||||
}
|
||||
@@ -2,15 +2,17 @@ package model
|
||||
|
||||
// 初始版本自动化代码工具
|
||||
type AutoCodeStruct struct {
|
||||
StructName string `json:"structName"`
|
||||
PackageName string `json:"packageName"`
|
||||
Abbreviation string `json:"abbreviation"`
|
||||
Fields []Field `json:"fields"`
|
||||
StructName string `json:"structName"`
|
||||
PackageName string `json:"packageName"`
|
||||
Abbreviation string `json:"abbreviation"`
|
||||
AutoCreateApiToSql bool `json:"autoCreateApiToSql"`
|
||||
Fields []Field `json:"fields"`
|
||||
}
|
||||
|
||||
type Field struct {
|
||||
FieldName string `json:"fieldName"`
|
||||
FieldDesc string `json:"fieldDesc"`
|
||||
FieldType string `json:"fieldType"`
|
||||
FieldJson string `json:"fieldJson"`
|
||||
ColumnName string `json:"columnName"`
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import service from '@/utils/request'
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body {{.PackageName}}.{{.StructName}} true "创建{{.StructName}}"
|
||||
// @Param data body model.{{.StructName}} true "创建{{.StructName}}"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
|
||||
// @Router /{{.Abbreviation}}/create{{.StructName}} [post]
|
||||
export const create{{.StructName}} = (data) => {
|
||||
@@ -22,13 +22,13 @@ export const create{{.StructName}} = (data) => {
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body {{.PackageName}}.{{.StructName}} true "删除{{.StructName}}"
|
||||
// @Param data body model.{{.StructName}} true "删除{{.StructName}}"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
|
||||
// @Router /{{.Abbreviation}}/delete{{.StructName}} [post]
|
||||
// @Router /{{.Abbreviation}}/delete{{.StructName}} [delete]
|
||||
export const delete{{.StructName}} = (data) => {
|
||||
return service({
|
||||
url: "/{{.Abbreviation}}/delete{{.StructName}}",
|
||||
method: 'post',
|
||||
method: 'delete',
|
||||
data
|
||||
})
|
||||
}
|
||||
@@ -38,13 +38,13 @@ export const create{{.StructName}} = (data) => {
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body {{.PackageName}}.{{.StructName}} true "更新{{.StructName}}"
|
||||
// @Param data body model.{{.StructName}} true "更新{{.StructName}}"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
|
||||
// @Router /{{.Abbreviation}}/update{{.StructName}} [post]
|
||||
// @Router /{{.Abbreviation}}/update{{.StructName}} [put]
|
||||
export const update{{.StructName}} = (data) => {
|
||||
return service({
|
||||
url: "/{{.Abbreviation}}/update{{.StructName}}",
|
||||
method: 'post',
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
@@ -55,14 +55,14 @@ export const create{{.StructName}} = (data) => {
|
||||
// @Security ApiKeyAuth
|
||||
// @accept application/json
|
||||
// @Produce application/json
|
||||
// @Param data body {{.PackageName}}.{{.StructName}} true "用id查询{{.StructName}}"
|
||||
// @Param data body model.{{.StructName}} true "用id查询{{.StructName}}"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
|
||||
// @Router /{{.Abbreviation}}/find{{.StructName}} [post]
|
||||
export const find{{.StructName}} = (data) => {
|
||||
// @Router /{{.Abbreviation}}/find{{.StructName}} [get]
|
||||
export const find{{.StructName}} = (params) => {
|
||||
return service({
|
||||
url: "/{{.Abbreviation}}/find{{.StructName}}",
|
||||
method: 'post',
|
||||
data
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
@@ -74,11 +74,11 @@ export const create{{.StructName}} = (data) => {
|
||||
// @Produce application/json
|
||||
// @Param data body request.PageInfo true "分页获取{{.StructName}}列表"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
|
||||
// @Router /{{.Abbreviation}}/get{{.StructName}}List [post]
|
||||
export const get{{.StructName}}List = (data) => {
|
||||
// @Router /{{.Abbreviation}}/get{{.StructName}}List [get]
|
||||
export const get{{.StructName}}List = (params) => {
|
||||
return service({
|
||||
url: "/{{.Abbreviation}}/get{{.StructName}}List",
|
||||
method: 'post',
|
||||
data
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,155 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="search-term">
|
||||
<el-form :inline="true" :model="searchInfo" class="demo-form-inline">
|
||||
此处请使用表单生成器生成form填充 表单默认绑定 formData 如手动修改过请自行修改key
|
||||
<el-form-item>
|
||||
<el-button @click="openDialog" type="primary">新增</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<el-table
|
||||
:data="tableData"
|
||||
border
|
||||
ref="multipleTable"
|
||||
stripe
|
||||
style="width: 100%"
|
||||
tooltip-effect="dark"
|
||||
>
|
||||
<el-table-column type="selection" width="55"></el-table-column>
|
||||
<el-table-column label="日期" width="180">
|
||||
<template slot-scope="scope">{{ "{{scope.row.CreatedAt|formatDate}}" }}</template>
|
||||
</el-table-column>
|
||||
{{range .Fields}}
|
||||
<el-table-column label="{{.FieldDesc}}" prop="{{.FieldJson}}" width="120"></el-table-column>
|
||||
{{ end }}
|
||||
<el-table-column label="按钮组">
|
||||
<template slot-scope="scope">
|
||||
<el-button @click="update{{.StructName}}(scope.row)" size="small" type="text">变更</el-button>
|
||||
<el-popover placement="top" width="160" v-model="scope.row.visible">
|
||||
<p>确定要删除吗?</p>
|
||||
<div style="text-align: right; margin: 0">
|
||||
<el-button size="mini" type="text" @click="scope.row.visible = false">取消</el-button>
|
||||
<el-button type="primary" size="mini" @click="delete{{.StructName}}(scope.row)">确定</el-button>
|
||||
</div>
|
||||
<el-button type="text" size="mini" slot="reference">删除</el-button>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-pagination
|
||||
:current-page="page"
|
||||
:page-size="pageSize"
|
||||
:page-sizes="[10, 30, 50, 100]"
|
||||
:style="{float:'right',padding:'20px'}"
|
||||
:total="total"
|
||||
@current-change="handleCurrentChange"
|
||||
@size-change="handleSizeChange"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
></el-pagination>
|
||||
|
||||
<el-dialog :before-close="closeDialog" :visible.sync="dialogFormVisible" title="弹窗操作">
|
||||
此处请使用表单生成器生成form填充 表单默认绑定 formData 如手动修改过请自行修改key
|
||||
<div class="dialog-footer" slot="footer">
|
||||
<el-button @click="closeDialog">取 消</el-button>
|
||||
<el-button @click="enterDialog" type="primary">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
create{{.StructName}},
|
||||
delete{{.StructName}},
|
||||
update{{.StructName}},
|
||||
find{{.StructName}},
|
||||
get{{.StructName}}List
|
||||
} from "@/api/{{.PackageName}}"; // 此处请自行替换地址
|
||||
import { formatTimeToStr } from "@/utils/data";
|
||||
import infoList from "@/components/mixins/infoList";
|
||||
|
||||
export default {
|
||||
name: "{{.StructName}}",
|
||||
mixins: [infoList],
|
||||
data() {
|
||||
return {
|
||||
listApi: get{{.StructName}}List,
|
||||
dialogFormVisible: false,
|
||||
visible: false,
|
||||
type: "",
|
||||
formData: {
|
||||
{{range .Fields}}{{.FieldJson}}:null,{{ end }}
|
||||
}
|
||||
};
|
||||
},
|
||||
filters: {
|
||||
formatDate: function(time) {
|
||||
if (time != null && time != "") {
|
||||
var date = new Date(time);
|
||||
return formatTimeToStr(date, "yyyy-MM-dd hh:mm:ss");
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async update{{.StructName}}(row) {
|
||||
const res = await find{{.StructName}}({ ID: row.ID });
|
||||
this.type = "update";
|
||||
if (res.code == 0) {
|
||||
this.formData = res.data.re{{.Abbreviation}};
|
||||
this.dialogFormVisible = true;
|
||||
}
|
||||
},
|
||||
closeDialog() {
|
||||
this.dialogFormVisible = false;
|
||||
this.formData = {
|
||||
{{range .Fields}}
|
||||
{{.FieldJson}}:null,{{ end }}
|
||||
};
|
||||
},
|
||||
async delete{{.StructName}}(row) {
|
||||
this.visible = false;
|
||||
const res = await delete{{.StructName}}({ ID: row.ID });
|
||||
if (res.code == 0) {
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "删除成功"
|
||||
});
|
||||
this.getTableData();
|
||||
}
|
||||
},
|
||||
async enterDialog() {
|
||||
let res;
|
||||
switch (this.type) {
|
||||
case "create":
|
||||
res = await create{{.StructName}}(this.formData);
|
||||
break;
|
||||
case "update":
|
||||
res = await update{{.StructName}}(this.formData);
|
||||
break;
|
||||
default:
|
||||
res = await create{{.StructName}}(this.formData);
|
||||
break;
|
||||
}
|
||||
|
||||
if (res.code == 0) {
|
||||
this.closeDialog();
|
||||
this.getTableData();
|
||||
}
|
||||
},
|
||||
openDialog() {
|
||||
this.type = "create";
|
||||
this.dialogFormVisible = true;
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getTableData();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
@@ -1,10 +1,13 @@
|
||||
package api
|
||||
package v1
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gin-vue-admin/global/response"
|
||||
"gin-vue-admin/global/response"
|
||||
"gin-vue-admin/model"
|
||||
"github.com/gin-gonic/gin"
|
||||
"gin-vue-admin/model/request"
|
||||
resp "gin-vue-admin/model/response"
|
||||
"gin-vue-admin/service"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
|
||||
@@ -17,13 +20,13 @@ import (
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
|
||||
// @Router /{{.Abbreviation}}/create{{.StructName}} [post]
|
||||
func Create{{.StructName}}(c *gin.Context) {
|
||||
var {{.Abbreviation}} {{.PackageName}}.{{.StructName}}
|
||||
var {{.Abbreviation}} model.{{.StructName}}
|
||||
_ = c.ShouldBindJSON(&{{.Abbreviation}})
|
||||
err := {{.Abbreviation}}.Create{{.StructName}}()
|
||||
err := service.Create{{.StructName}}({{.Abbreviation}})
|
||||
if err != nil {
|
||||
response.Result(response.ERROR, gin.H{}, fmt.Sprintf("创建失败,%v", err), c)
|
||||
response.FailWithMessage(fmt.Sprintf("创建失败,%v", err), c)
|
||||
} else {
|
||||
response.Result(response.SUCCESS, gin.H{}, "创建成功", c)
|
||||
response.OkWithMessage("创建成功", c)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,15 +38,15 @@ func Create{{.StructName}}(c *gin.Context) {
|
||||
// @Produce application/json
|
||||
// @Param data body model.{{.StructName}} true "删除{{.StructName}}"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
|
||||
// @Router /{{.Abbreviation}}/delete{{.StructName}} [post]
|
||||
// @Router /{{.Abbreviation}}/delete{{.StructName}} [delete]
|
||||
func Delete{{.StructName}}(c *gin.Context) {
|
||||
var {{.Abbreviation}} {{.PackageName}}.{{.StructName}}
|
||||
var {{.Abbreviation}} model.{{.StructName}}
|
||||
_ = c.ShouldBindJSON(&{{.Abbreviation}})
|
||||
err := {{.Abbreviation}}.Delete{{.StructName}}()
|
||||
err := service.Delete{{.StructName}}({{.Abbreviation}})
|
||||
if err != nil {
|
||||
response.Result(response.ERROR, gin.H{}, fmt.Sprintf("删除失败,%v", err), c)
|
||||
response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c)
|
||||
} else {
|
||||
response.Result(response.SUCCESS, gin.H{}, "删除成功", c)
|
||||
response.OkWithMessage("删除成功", c)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,17 +58,15 @@ func Delete{{.StructName}}(c *gin.Context) {
|
||||
// @Produce application/json
|
||||
// @Param data body model.{{.StructName}} true "更新{{.StructName}}"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
|
||||
// @Router /{{.Abbreviation}}/update{{.StructName}} [post]
|
||||
// @Router /{{.Abbreviation}}/update{{.StructName}} [put]
|
||||
func Update{{.StructName}}(c *gin.Context) {
|
||||
var {{.Abbreviation}} {{.PackageName}}.{{.StructName}}
|
||||
var {{.Abbreviation}} model.{{.StructName}}
|
||||
_ = c.ShouldBindJSON(&{{.Abbreviation}})
|
||||
err,re{{.Abbreviation}} := {{.Abbreviation}}.Update{{.StructName}}()
|
||||
err := service.Update{{.StructName}}(&{{.Abbreviation}})
|
||||
if err != nil {
|
||||
response.Result(response.ERROR, gin.H{}, fmt.Sprintf("更新失败,%v", err), c)
|
||||
response.FailWithMessage(fmt.Sprintf("更新失败,%v", err), c)
|
||||
} else {
|
||||
response.Result(response.SUCCESS, gin.H{
|
||||
"re{{.Abbreviation}}":re{{.Abbreviation}},
|
||||
}, "更新成功", c)
|
||||
response.OkWithMessage("更新成功", c)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,17 +78,15 @@ func Update{{.StructName}}(c *gin.Context) {
|
||||
// @Produce application/json
|
||||
// @Param data body model.{{.StructName}} true "用id查询{{.StructName}}"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
|
||||
// @Router /{{.Abbreviation}}/find{{.StructName}} [post]
|
||||
// @Router /{{.Abbreviation}}/find{{.StructName}} [get]
|
||||
func Find{{.StructName}}(c *gin.Context) {
|
||||
var {{.Abbreviation}} {{.PackageName}}.{{.StructName}}
|
||||
_ = c.ShouldBindJSON(&{{.Abbreviation}})
|
||||
err,re{{.Abbreviation}} := {{.Abbreviation}}.FindById()
|
||||
var {{.Abbreviation}} model.{{.StructName}}
|
||||
_ = c.ShouldBindQuery(&{{.Abbreviation}})
|
||||
err,re{{.Abbreviation}} := service.Get{{.StructName}}({{.Abbreviation}}.ID)
|
||||
if err != nil {
|
||||
response.Result(response.ERROR, gin.H{}, fmt.Sprintf("查询失败,%v", err), c)
|
||||
response.FailWithMessage(fmt.Sprintf("查询失败,%v", err), c)
|
||||
} else {
|
||||
response.Result(response.SUCCESS, gin.H{
|
||||
"re{{.Abbreviation}}":re{{.Abbreviation}},
|
||||
}, "查询成功", c)
|
||||
response.OkWithData( gin.H{"re{{.Abbreviation}}":re{{.Abbreviation}},}, c)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,19 +98,19 @@ func Find{{.StructName}}(c *gin.Context) {
|
||||
// @Produce application/json
|
||||
// @Param data body request.PageInfo true "分页获取{{.StructName}}列表"
|
||||
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
|
||||
// @Router /{{.Abbreviation}}/get{{.StructName}}List [post]
|
||||
// @Router /{{.Abbreviation}}/get{{.StructName}}List [get]
|
||||
func Get{{.StructName}}List(c *gin.Context) {
|
||||
var pageInfo request.PageInfo
|
||||
_ = c.ShouldBindJSON(&pageInfo)
|
||||
err, list, total := new({{.PackageName}}.{{.StructName}}).GetInfoList(pageInfo)
|
||||
_ = c.ShouldBindQuery(&pageInfo)
|
||||
err, list, total := service.Get{{.StructName}}InfoList(pageInfo)
|
||||
if err != nil {
|
||||
response.Result(response.ERROR, gin.H{}, fmt.Sprintf("获取数据失败,%v", err), c)
|
||||
response.FailWithMessage(fmt.Sprintf("获取数据失败,%v", err), c)
|
||||
} else {
|
||||
response.Result(response.SUCCESS, gin.H{
|
||||
"{{.PackageName}}List": list,
|
||||
"total": total,
|
||||
"page": pageInfo.Page,
|
||||
"pageSize": pageInfo.PageSize,
|
||||
}, "获取数据成功", c)
|
||||
response.OkWithData(resp.PageResult{
|
||||
List: list,
|
||||
Total: total,
|
||||
Page: pageInfo.Page,
|
||||
PageSize: pageInfo.PageSize,
|
||||
}, c)
|
||||
}
|
||||
}
|
||||
@@ -1,51 +1,11 @@
|
||||
// 自动生成模板{{.StructName}}
|
||||
package {{.PackageName}}
|
||||
package model
|
||||
|
||||
import (
|
||||
"gin-vue-admin/global"
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type {{.StructName}} struct {
|
||||
gorm.Model {{range .Fields}}
|
||||
{{.FieldName}} {{.FieldType}} `json:"{{.FieldJson}}"{{if .ColumnName}} gorm:"column:{{.ColumnName}}"{{end}}`{{ end }}
|
||||
}
|
||||
|
||||
// 创建{{.StructName}}
|
||||
func ({{.Abbreviation}} *{{.StructName}})Create{{.StructName}}()(err error){
|
||||
err = global.GVA_DB.Create({{.Abbreviation}}).Error
|
||||
return err
|
||||
}
|
||||
|
||||
// 删除{{.StructName}}
|
||||
func ({{.Abbreviation}} *{{.StructName}})Delete{{.StructName}}()(err error){
|
||||
err = global.GVA_DB.Delete({{.Abbreviation}}).Error
|
||||
return err
|
||||
}
|
||||
|
||||
// 更新{{.StructName}}
|
||||
func ({{.Abbreviation}} *{{.StructName}})Update{{.StructName}}()(err error, re{{.Abbreviation}} {{.StructName}}){
|
||||
err = global.GVA_DB.Save({{.Abbreviation}}).Error
|
||||
return err, *{{.Abbreviation}}
|
||||
}
|
||||
|
||||
// 根据ID查看单条{{.StructName}}
|
||||
func ({{.Abbreviation}} *{{.StructName}})FindById()(err error,re{{.Abbreviation}} {{.StructName}}){
|
||||
err = global.GVA_DB.Where("id = ?",{{.Abbreviation}}.ID).First(&re{{.Abbreviation}}).Error
|
||||
return err,re{{.Abbreviation}}
|
||||
}
|
||||
|
||||
// 分页获取{{.StructName}}
|
||||
func ({{.Abbreviation}} *{{.StructName}})GetInfoList(info PageInfo)(err error, list interface{}, total int){
|
||||
limit := info.PageSize
|
||||
offset := info.PageSize * (info.Page - 1)
|
||||
db:=global.GVA_DB
|
||||
if err != nil {
|
||||
return
|
||||
} else {
|
||||
var re{{.StructName}}List []{{.StructName}}
|
||||
err = db.Limit(limit).Offset(offset).Find(&re{{.StructName}}List).Error
|
||||
return err, re{{.StructName}}List, total
|
||||
}
|
||||
}
|
||||
@@ -10,9 +10,9 @@ func Init{{.StructName}}Router(Router *gin.RouterGroup) {
|
||||
{{.StructName}}Router := Router.Group("{{.Abbreviation}}").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
|
||||
{
|
||||
{{.StructName}}Router.POST("create{{.StructName}}", v1.Create{{.StructName}}) // 新建{{.StructName}}
|
||||
{{.StructName}}Router.POST("delete{{.StructName}}", v1.Delete{{.StructName}}) //删除{{.StructName}}
|
||||
{{.StructName}}Router.POST("update{{.StructName}}", v1.Update{{.StructName}}) //更新{{.StructName}}
|
||||
{{.StructName}}Router.POST("find{{.StructName}}", v1.Find{{.StructName}}) // 根据ID获取{{.StructName}}
|
||||
{{.StructName}}Router.POST("get{{.StructName}}List", v1.Get{{.StructName}}List) //获取{{.StructName}}列表
|
||||
{{.StructName}}Router.DELETE("delete{{.StructName}}", v1.Delete{{.StructName}}) //删除{{.StructName}}
|
||||
{{.StructName}}Router.PUT("update{{.StructName}}", v1.Update{{.StructName}}) //更新{{.StructName}}
|
||||
{{.StructName}}Router.GET("find{{.StructName}}", v1.Find{{.StructName}}) // 根据ID获取{{.StructName}}
|
||||
{{.StructName}}Router.GET("get{{.StructName}}List", v1.Get{{.StructName}}List) //获取{{.StructName}}列表
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"gin-vue-admin/global"
|
||||
"gin-vue-admin/model"
|
||||
"gin-vue-admin/model/request"
|
||||
)
|
||||
|
||||
// @title Create{{.StructName}}
|
||||
// @description create a {{.StructName}}
|
||||
// @param {{.Abbreviation}} model.{{.StructName}}
|
||||
// @auth (2020/04/05 20:22)
|
||||
// @return err error
|
||||
|
||||
func Create{{.StructName}}({{.Abbreviation}} model.{{.StructName}}) (err error) {
|
||||
err = global.GVA_DB.Create(&{{.Abbreviation}}).Error
|
||||
return err
|
||||
}
|
||||
|
||||
// @title Delete{{.StructName}}
|
||||
// @description delete a {{.StructName}}
|
||||
// @auth (2020/04/05 20:22)
|
||||
// @param {{.Abbreviation}} model.{{.StructName}}
|
||||
// @return error
|
||||
|
||||
func Delete{{.StructName}}({{.Abbreviation}} model.{{.StructName}}) (err error) {
|
||||
err = global.GVA_DB.Delete({{.Abbreviation}}).Error
|
||||
return err
|
||||
}
|
||||
|
||||
// @title Update{{.StructName}}
|
||||
// @description update a {{.StructName}}
|
||||
// @param {{.Abbreviation}} *model.{{.StructName}}
|
||||
// @auth (2020/04/05 20:22)
|
||||
// @return error
|
||||
|
||||
func Update{{.StructName}}({{.Abbreviation}} *model.{{.StructName}}) (err error) {
|
||||
err = global.GVA_DB.Save({{.Abbreviation}}).Error
|
||||
return err
|
||||
}
|
||||
|
||||
// @title Get{{.StructName}}
|
||||
// @description get the info of a {{.StructName}}
|
||||
// @auth (2020/04/05 20:22)
|
||||
// @param id uint
|
||||
// @return error
|
||||
// @return {{.StructName}} {{.StructName}}
|
||||
|
||||
func Get{{.StructName}}(id uint) (err error, {{.Abbreviation}} model.{{.StructName}}) {
|
||||
err = global.GVA_DB.Where("id = ?", id).First(&{{.Abbreviation}}).Error
|
||||
return
|
||||
}
|
||||
|
||||
// @title Get{{.StructName}}InfoList
|
||||
// @description get {{.StructName}} list by pagination, 分页获取用户列表
|
||||
// @auth (2020/04/05 20:22)
|
||||
// @param info PageInfo
|
||||
// @return error
|
||||
|
||||
func Get{{.StructName}}InfoList(info request.PageInfo) (err error, list interface{}, total int) {
|
||||
limit := info.PageSize
|
||||
offset := info.PageSize * (info.Page - 1)
|
||||
db := global.GVA_DB
|
||||
var {{.Abbreviation}}s []model.{{.StructName}}
|
||||
err = db.Find(&{{.Abbreviation}}s).Count(&total).Error
|
||||
err = db.Limit(limit).Offset(offset).Find(&{{.Abbreviation}}s).Error
|
||||
return err,{{.Abbreviation}}s, total
|
||||
}
|
||||
@@ -2,12 +2,12 @@ package router
|
||||
|
||||
import (
|
||||
"gin-vue-admin/api/v1"
|
||||
"gin-vue-admin/middleware"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func InitUserRouter(Router *gin.RouterGroup) {
|
||||
UserRouter := Router.Group("user")
|
||||
//.Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
|
||||
UserRouter := Router.Group("user").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
|
||||
{
|
||||
UserRouter.POST("changePassword", v1.ChangePassword) // 修改密码
|
||||
UserRouter.POST("uploadHeaderImg", v1.UploadHeaderImg) //上传头像
|
||||
|
||||
@@ -20,7 +20,7 @@ func CreateExaCustomer(e model.ExaCustomer) (err error) {
|
||||
// @title DeleteFileChunk
|
||||
// @description delete a customer, 删除用户
|
||||
// @auth (2020/04/05 20:22)
|
||||
// @param e *model.ExaCustomer
|
||||
// @param e model.ExaCustomer
|
||||
// @return error
|
||||
|
||||
func DeleteExaCustomer(e model.ExaCustomer) (err error) {
|
||||
|
||||
@@ -3,8 +3,8 @@ package service
|
||||
import (
|
||||
"gin-vue-admin/model"
|
||||
"gin-vue-admin/utils"
|
||||
"html/template"
|
||||
"os"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
// @title CreateTemp
|
||||
@@ -27,10 +27,18 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
serviceTmpl, err := template.ParseFiles(basePath + "/te/service.go.tpl")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
feapiTmpl, err := template.ParseFiles(basePath + "/fe/api.js.tpl")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
feTableTmpl, err := template.ParseFiles(basePath + "/fe/table.vue.tpl")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
readmeTmpl, err := template.ParseFiles(basePath + "/readme.txt.tpl")
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -43,30 +51,41 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) {
|
||||
_modeldir := _te + autoCode.PackageName + "/model"
|
||||
_apidir := _te + autoCode.PackageName + "/api"
|
||||
_routerdir := _te + autoCode.PackageName + "/router"
|
||||
_servicedir := _te + autoCode.PackageName + "/service"
|
||||
//自动化前台代码目录
|
||||
_fe := "./autoCode/fe/"
|
||||
_fe_dir := _fe + autoCode.PackageName
|
||||
_fe_apidir := _fe + autoCode.PackageName + "/api"
|
||||
err = utils.CreateDir(_autoCode, _te, _dir, _modeldir, _apidir, _routerdir, _fe, _fe_dir, _fe_apidir)
|
||||
_fe_tabledir := _fe + autoCode.PackageName + "/table"
|
||||
err = utils.CreateDir(_autoCode, _te, _dir, _modeldir, _apidir, _routerdir, _servicedir, _fe, _fe_dir, _fe_apidir, _fe_tabledir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
model, err := os.OpenFile(_te+autoCode.PackageName+"/model/model.go", os.O_CREATE|os.O_WRONLY, 0755)
|
||||
model, err := os.OpenFile(_te+autoCode.PackageName+"/model/"+autoCode.PackageName+".go", os.O_CREATE|os.O_WRONLY, 0755)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
api, err := os.OpenFile(_te+autoCode.PackageName+"/api/api.go", os.O_CREATE|os.O_WRONLY, 0755)
|
||||
api, err := os.OpenFile(_te+autoCode.PackageName+"/api/"+autoCode.PackageName+".go", os.O_CREATE|os.O_WRONLY, 0755)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
router, err := os.OpenFile(_te+autoCode.PackageName+"/router/router.go", os.O_CREATE|os.O_WRONLY, 0755)
|
||||
router, err := os.OpenFile(_te+autoCode.PackageName+"/router/"+autoCode.PackageName+".go", os.O_CREATE|os.O_WRONLY, 0755)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
feapi, err := os.OpenFile(_fe+autoCode.PackageName+"/api/api.js", os.O_CREATE|os.O_WRONLY, 0755)
|
||||
service, err := os.OpenFile(_te+autoCode.PackageName+"/service/"+autoCode.PackageName+".go", os.O_CREATE|os.O_WRONLY, 0755)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
feapi, err := os.OpenFile(_fe+autoCode.PackageName+"/api/"+autoCode.PackageName+".js", os.O_CREATE|os.O_WRONLY, 0755)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fetable, err := os.OpenFile(_fe+autoCode.PackageName+"/table/"+autoCode.PackageName+".vue", os.O_CREATE|os.O_WRONLY, 0755)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
readme, err := os.OpenFile(_autoCode+"readme.txt", os.O_CREATE|os.O_WRONLY, 0755)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -85,10 +104,18 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = serviceTmpl.Execute(service, autoCode)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = feapiTmpl.Execute(feapi, autoCode)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = feTableTmpl.Execute(fetable, autoCode)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = readmeTmpl.Execute(readme, autoCode)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -97,13 +124,18 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) {
|
||||
_ = model.Close()
|
||||
_ = api.Close()
|
||||
_ = router.Close()
|
||||
_ = service.Close()
|
||||
_ = feapi.Close()
|
||||
_ = fetable.Close()
|
||||
_ = readme.Close()
|
||||
fileList := []string{
|
||||
_te + autoCode.PackageName + "/model/model.go",
|
||||
_te + autoCode.PackageName + "/api/api.go",
|
||||
_te + autoCode.PackageName + "/router/router.go",
|
||||
_fe + autoCode.PackageName + "/api/api.js",
|
||||
_te + autoCode.PackageName + "/model/" + autoCode.PackageName + ".go",
|
||||
_te + autoCode.PackageName + "/api/" + autoCode.PackageName + ".go",
|
||||
_te + autoCode.PackageName + "/router/" + autoCode.PackageName + ".go",
|
||||
_te + autoCode.PackageName + "/service/" + autoCode.PackageName + ".go",
|
||||
_fe + autoCode.PackageName + "/api/" + autoCode.PackageName + ".js",
|
||||
_fe + autoCode.PackageName + "/table/" + autoCode.PackageName + ".vue",
|
||||
|
||||
_autoCode + "readme.txt",
|
||||
}
|
||||
err = utils.ZipFiles("./ginvueadmin.zip", fileList, ".", ".")
|
||||
|
||||
+50
-18
@@ -4,9 +4,26 @@ import (
|
||||
"errors"
|
||||
"gin-vue-admin/global"
|
||||
"gin-vue-admin/model"
|
||||
"gin-vue-admin/model/request"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// @title getMenuTreeMap
|
||||
// @description 获取路由总树map
|
||||
// @auth qm (2020/05/06 10:26)
|
||||
// @return err error
|
||||
// @return menusMsp map{string}[]SysBaseMenu
|
||||
|
||||
func getMenuTreeMap(authorityId string)(err error,treeMap map[string][]model.SysMenu){
|
||||
var allMenus []model.SysMenu
|
||||
treeMap = make(map[string][]model.SysMenu)
|
||||
sql := "SELECT authority_menu.keep_alive,authority_menu.default_menu,authority_menu.created_at,authority_menu.updated_at,authority_menu.deleted_at,authority_menu.menu_level,authority_menu.parent_id,authority_menu.path,authority_menu.`name`,authority_menu.hidden,authority_menu.component,authority_menu.title,authority_menu.icon,authority_menu.sort,authority_menu.menu_id,authority_menu.authority_id FROM authority_menu WHERE authority_menu.authority_id = ? ORDER BY authority_menu.sort ASC"
|
||||
err = global.GVA_DB.Raw(sql,authorityId).Scan(&allMenus).Error
|
||||
for _,v := range allMenus{
|
||||
treeMap[v.ParentId] = append(treeMap[v.ParentId], v)
|
||||
}
|
||||
return err,treeMap
|
||||
}
|
||||
|
||||
// @title GetMenuTree
|
||||
// @description 获取动态菜单树
|
||||
// @auth (2020/04/05 20:22)
|
||||
@@ -15,10 +32,10 @@ import (
|
||||
// @return menus []model.SysMenu
|
||||
|
||||
func GetMenuTree(authorityId string) (err error, menus []model.SysMenu) {
|
||||
sql := "SELECT authority_menu.keep_alive,authority_menu.default_menu,authority_menu.created_at,authority_menu.updated_at,authority_menu.deleted_at,authority_menu.menu_level,authority_menu.parent_id,authority_menu.path,authority_menu.`name`,authority_menu.hidden,authority_menu.component,authority_menu.title,authority_menu.icon,authority_menu.sort,authority_menu.menu_id,authority_menu.authority_id FROM authority_menu WHERE authority_menu.authority_id = ? AND authority_menu.parent_id = ? ORDER BY authority_menu.sort ASC"
|
||||
err = global.GVA_DB.Raw(sql, authorityId, 0).Scan(&menus).Error
|
||||
err,menuTree := getMenuTreeMap(authorityId)
|
||||
menus = menuTree["0"]
|
||||
for i := 0; i < len(menus); i++ {
|
||||
err = getChildrenList(&menus[i], sql)
|
||||
err = getChildrenList(&menus[i], menuTree)
|
||||
}
|
||||
return err, menus
|
||||
}
|
||||
@@ -30,10 +47,10 @@ func GetMenuTree(authorityId string) (err error, menus []model.SysMenu) {
|
||||
// @param sql string
|
||||
// @return err error
|
||||
|
||||
func getChildrenList(menu *model.SysMenu, sql string) (err error) {
|
||||
err = global.GVA_DB.Raw(sql, menu.AuthorityId, menu.MenuId).Scan(&menu.Children).Error
|
||||
func getChildrenList(menu *model.SysMenu,treeMap map[string][]model.SysMenu) (err error) {
|
||||
menu.Children = treeMap[menu.MenuId]
|
||||
for i := 0; i < len(menu.Children); i++ {
|
||||
err = getChildrenList(&menu.Children[i], sql)
|
||||
err = getChildrenList(&menu.Children[i], treeMap)
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -46,14 +63,12 @@ func getChildrenList(menu *model.SysMenu, sql string) (err error) {
|
||||
// @return list interface{}
|
||||
// @return total int
|
||||
|
||||
func GetInfoList(info request.PageInfo) (err error, list interface{}, total int) {
|
||||
limit := info.PageSize
|
||||
offset := info.PageSize * (info.Page - 1)
|
||||
db := global.GVA_DB
|
||||
func GetInfoList() (err error, list interface{}, total int) {
|
||||
var menuList []model.SysBaseMenu
|
||||
err = db.Limit(limit).Offset(offset).Where("parent_id = 0").Order("sort", true).Find(&menuList).Error
|
||||
err,treeMap := getBaseMenuTreeMap()
|
||||
menuList = treeMap["0"]
|
||||
for i := 0; i < len(menuList); i++ {
|
||||
err = getBaseChildrenList(&menuList[i])
|
||||
err = getBaseChildrenList(&menuList[i],treeMap)
|
||||
}
|
||||
return err, menuList, total
|
||||
}
|
||||
@@ -64,10 +79,10 @@ func GetInfoList(info request.PageInfo) (err error, list interface{}, total int)
|
||||
// @param menu *model.SysBaseMenu
|
||||
// @return err error
|
||||
|
||||
func getBaseChildrenList(menu *model.SysBaseMenu) (err error) {
|
||||
err = global.GVA_DB.Where("parent_id = ?", menu.ID).Order("sort", true).Find(&menu.Children).Error
|
||||
func getBaseChildrenList(menu *model.SysBaseMenu ,treeMap map[string][]model.SysBaseMenu) (err error) {
|
||||
menu.Children = treeMap[strconv.Itoa(int(menu.ID))]
|
||||
for i := 0; i < len(menu.Children); i++ {
|
||||
err = getBaseChildrenList(&menu.Children[i])
|
||||
err = getBaseChildrenList(&menu.Children[i],treeMap)
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -89,6 +104,22 @@ func AddBaseMenu(menu model.SysBaseMenu) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
// @title getBaseMenuTreeMap
|
||||
// @description 获取路由总树map
|
||||
// @auth qm (2020/05/06 10:26)
|
||||
// @return err error
|
||||
// @return menusMsp map{string}[]SysBaseMenu
|
||||
|
||||
func getBaseMenuTreeMap()(err error,treeMap map[string][]model.SysBaseMenu){
|
||||
var allMenus []model.SysBaseMenu
|
||||
treeMap = make(map[string][]model.SysBaseMenu)
|
||||
err = global.GVA_DB.Order("sort", true).Find(&allMenus).Error
|
||||
for _,v := range allMenus{
|
||||
treeMap[v.ParentId] = append(treeMap[v.ParentId], v)
|
||||
}
|
||||
return err,treeMap
|
||||
}
|
||||
|
||||
// @title GetBaseMenuTree
|
||||
// @description 获取基础路由树
|
||||
// @auth (2020/04/05 20:22)
|
||||
@@ -96,9 +127,10 @@ func AddBaseMenu(menu model.SysBaseMenu) (err error) {
|
||||
// @return menus []SysBaseMenu
|
||||
|
||||
func GetBaseMenuTree() (err error, menus []model.SysBaseMenu) {
|
||||
err = global.GVA_DB.Where(" parent_id = ?", 0).Order("sort", true).Find(&menus).Error
|
||||
err,treeMap := getBaseMenuTreeMap()
|
||||
menus = treeMap["0"]
|
||||
for i := 0; i < len(menus); i++ {
|
||||
err = getBaseChildrenList(&menus[i])
|
||||
err = getBaseChildrenList(&menus[i],treeMap)
|
||||
}
|
||||
return err, menus
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
// 空值校验工具 仅用于检验空字符串 其余类型请勿使用
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
func HasGap(input interface{}) error {
|
||||
getType := reflect.TypeOf(input)
|
||||
getValue := reflect.ValueOf(input)
|
||||
// 获取方法字段
|
||||
for i := 0; i < getType.NumField(); i++ {
|
||||
field := getType.Field(i)
|
||||
value := getValue.Field(i).Interface()
|
||||
switch value.(type) {
|
||||
case string:
|
||||
if value == "" {
|
||||
fmt.Printf("%s为空", field.Name)
|
||||
return errors.New(fmt.Sprintf("%s为空", field.Name))
|
||||
}
|
||||
default:
|
||||
if value == nil {
|
||||
fmt.Printf("%s为空", field.Name)
|
||||
return errors.New(fmt.Sprintf("%s为空", field.Name))
|
||||
}
|
||||
}
|
||||
}
|
||||
// 获取方法
|
||||
// 1. 先获取interface的reflect.Type,然后通过.NumMethod进行遍历
|
||||
//for i := 0; i < getType.NumMethod(); i++ {
|
||||
// m := getType.Method(i)
|
||||
// fmt.Printf("%s: %v\n", m.Name, m.Type)
|
||||
//}
|
||||
return nil
|
||||
}
|
||||
+8
-12
@@ -10,15 +10,12 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
var accessKey string = global.GVA_CONFIG.Qiniu.AccessKey // 你在七牛云的accessKey 这里是我个人测试号的key 仅供测试使用 恳请大家不要乱传东西
|
||||
var secretKey string = global.GVA_CONFIG.Qiniu.SecretKey // 你在七牛云的secretKey 这里是我个人测试号的key 仅供测试使用 恳请大家不要乱传东西
|
||||
|
||||
// 接收两个参数 一个文件流 一个 bucket 你的七牛云标准空间的名字
|
||||
func Upload(file *multipart.FileHeader, bucket string, urlPath string) (err error, path string, key string) {
|
||||
func Upload(file *multipart.FileHeader) (err error, path string, key string) {
|
||||
putPolicy := storage.PutPolicy{
|
||||
Scope: bucket,
|
||||
Scope: global.GVA_CONFIG.Qiniu.Bucket,
|
||||
}
|
||||
mac := qbox.NewMac(accessKey, secretKey)
|
||||
mac := qbox.NewMac(global.GVA_CONFIG.Qiniu.AccessKey, global.GVA_CONFIG.Qiniu.SecretKey)
|
||||
upToken := putPolicy.UploadToken(mac)
|
||||
cfg := storage.Config{}
|
||||
// 空间对应的机房
|
||||
@@ -43,16 +40,15 @@ func Upload(file *multipart.FileHeader, bucket string, urlPath string) (err erro
|
||||
fileKey := fmt.Sprintf("%d%s", time.Now().Unix(), file.Filename) // 文件名格式 自己可以改 建议保证唯一性
|
||||
err = formUploader.Put(context.Background(), &ret, upToken, fileKey, f, dataLen, &putExtra)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
//qmlog.QMLog.Info(err)
|
||||
global.GVA_LOG.Error("upload file fail:", err)
|
||||
return err, "", ""
|
||||
}
|
||||
return err, urlPath + "/" + ret.Key, ret.Key
|
||||
return err, global.GVA_CONFIG.Qiniu.ImgPath + "/" + ret.Key, ret.Key
|
||||
}
|
||||
|
||||
func DeleteFile(bucket string, key string) error {
|
||||
func DeleteFile(key string) error {
|
||||
|
||||
mac := qbox.NewMac(accessKey, secretKey)
|
||||
mac := qbox.NewMac(global.GVA_CONFIG.Qiniu.AccessKey, global.GVA_CONFIG.Qiniu.SecretKey)
|
||||
cfg := storage.Config{
|
||||
// 是否使用https域名进行资源管理
|
||||
UseHTTPS: false,
|
||||
@@ -61,7 +57,7 @@ func DeleteFile(bucket string, key string) error {
|
||||
// 如果没有特殊需求,默认不需要指定
|
||||
//cfg.Zone=&storage.ZoneHuabei
|
||||
bucketManager := storage.NewBucketManager(mac, &cfg)
|
||||
err := bucketManager.Delete(bucket, key)
|
||||
err := bucketManager.Delete(global.GVA_CONFIG.Qiniu.Bucket, key)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return err
|
||||
|
||||
@@ -0,0 +1,207 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Rules map[string][]string
|
||||
|
||||
type RulesMap map[string]Rules
|
||||
|
||||
var CustomizeMap = make(map[string]Rules)
|
||||
|
||||
// 注册自定义规则方案建议在路由初始化层即注册
|
||||
func RegisterRule(key string, rule Rules) (err error) {
|
||||
if CustomizeMap[key] != nil {
|
||||
return errors.New(key + "已注册,无法重复注册")
|
||||
} else {
|
||||
CustomizeMap[key] = rule
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// 非空 不能为其对应类型的0值
|
||||
func NotEmpty() string {
|
||||
return "notEmpty"
|
||||
}
|
||||
|
||||
//小于入参(<) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
|
||||
func Lt(mark string) string {
|
||||
return "lt=" + mark
|
||||
}
|
||||
|
||||
//小于等于入参(<=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
|
||||
func Le(mark string) string {
|
||||
return "le=" + mark
|
||||
}
|
||||
|
||||
//等于入参(==) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
|
||||
func Eq(mark string) string {
|
||||
return "eq=" + mark
|
||||
}
|
||||
|
||||
//不等于入参(!=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
|
||||
func Ne(mark string) string {
|
||||
return "ne=" + mark
|
||||
}
|
||||
|
||||
//大于等于入参(>=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
|
||||
func Ge(mark string) string {
|
||||
return "ge=" + mark
|
||||
}
|
||||
|
||||
//大于入参(>) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
|
||||
func Gt(mark string) string {
|
||||
return "gt=" + mark
|
||||
}
|
||||
|
||||
// 校验方法 接收两个参数 入参实例,规则map
|
||||
func Verify(st interface{}, roleMap Rules) (err error) {
|
||||
compareMap := map[string]bool{
|
||||
"lt": true,
|
||||
"le": true,
|
||||
"eq": true,
|
||||
"ne": true,
|
||||
"ge": true,
|
||||
"gt": true,
|
||||
}
|
||||
|
||||
typ := reflect.TypeOf(st)
|
||||
val := reflect.ValueOf(st) //获取reflect.Type类型
|
||||
|
||||
kd := val.Kind() //获取到st对应的类别
|
||||
if kd != reflect.Struct {
|
||||
return errors.New("expect struct")
|
||||
}
|
||||
num := val.NumField()
|
||||
//遍历结构体的所有字段
|
||||
for i := 0; i < num; i++ {
|
||||
tagVal := typ.Field(i)
|
||||
val := val.Field(i)
|
||||
if len(roleMap[tagVal.Name]) > 0 {
|
||||
for _, v := range roleMap[tagVal.Name] {
|
||||
switch {
|
||||
case v == "notEmpty":
|
||||
if isBlank(val) {
|
||||
return errors.New(tagVal.Name + "值不能为空")
|
||||
}
|
||||
case compareMap[strings.Split(v, "=")[0]]:
|
||||
if !compareVerify(val, v) {
|
||||
return errors.New(tagVal.Name + "长度或值不在合法范围," + v)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 长度和数字的校验方法 根据类型自动校验
|
||||
func compareVerify(value reflect.Value, VerifyStr string) bool {
|
||||
switch value.Kind() {
|
||||
case reflect.String, reflect.Slice, reflect.Array:
|
||||
return compare(value.Len(), VerifyStr)
|
||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
||||
return compare(value.Uint(), VerifyStr)
|
||||
case reflect.Float32, reflect.Float64:
|
||||
return compare(value.Float(), VerifyStr)
|
||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||
return compare(value.Int(), VerifyStr)
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// 非空校验
|
||||
func isBlank(value reflect.Value) bool {
|
||||
switch value.Kind() {
|
||||
case reflect.String:
|
||||
return value.Len() == 0
|
||||
case reflect.Bool:
|
||||
return !value.Bool()
|
||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||
return value.Int() == 0
|
||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
||||
return value.Uint() == 0
|
||||
case reflect.Float32, reflect.Float64:
|
||||
return value.Float() == 0
|
||||
case reflect.Interface, reflect.Ptr:
|
||||
return value.IsNil()
|
||||
}
|
||||
return reflect.DeepEqual(value.Interface(), reflect.Zero(value.Type()).Interface())
|
||||
}
|
||||
|
||||
func compare(value interface{}, VerifyStr string) bool {
|
||||
VerifyStrArr := strings.Split(VerifyStr, "=")
|
||||
val := reflect.ValueOf(value)
|
||||
switch val.Kind() {
|
||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||
VInt, VErr := strconv.ParseInt(VerifyStrArr[1], 10, 64)
|
||||
if VErr != nil {
|
||||
return false
|
||||
}
|
||||
switch {
|
||||
case VerifyStrArr[0] == "lt":
|
||||
return val.Int() < VInt
|
||||
case VerifyStrArr[0] == "le":
|
||||
return val.Int() <= VInt
|
||||
case VerifyStrArr[0] == "eq":
|
||||
return val.Int() == VInt
|
||||
case VerifyStrArr[0] == "ne":
|
||||
return val.Int() != VInt
|
||||
case VerifyStrArr[0] == "ge":
|
||||
return val.Int() >= VInt
|
||||
case VerifyStrArr[0] == "gt":
|
||||
return val.Int() > VInt
|
||||
default:
|
||||
return false
|
||||
}
|
||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
||||
VInt, VErr := strconv.Atoi(VerifyStrArr[1])
|
||||
if VErr != nil {
|
||||
return false
|
||||
}
|
||||
switch {
|
||||
case VerifyStrArr[0] == "lt":
|
||||
return val.Uint() < uint64(VInt)
|
||||
case VerifyStrArr[0] == "le":
|
||||
return val.Uint() <= uint64(VInt)
|
||||
case VerifyStrArr[0] == "eq":
|
||||
return val.Uint() == uint64(VInt)
|
||||
case VerifyStrArr[0] == "ne":
|
||||
return val.Uint() != uint64(VInt)
|
||||
case VerifyStrArr[0] == "ge":
|
||||
return val.Uint() >= uint64(VInt)
|
||||
case VerifyStrArr[0] == "gt":
|
||||
return val.Uint() > uint64(VInt)
|
||||
default:
|
||||
return false
|
||||
}
|
||||
case reflect.Float32, reflect.Float64:
|
||||
VFloat, VErr := strconv.ParseFloat(VerifyStrArr[1], 64)
|
||||
if VErr != nil {
|
||||
return false
|
||||
}
|
||||
switch {
|
||||
case VerifyStrArr[0] == "lt":
|
||||
return val.Float() < VFloat
|
||||
case VerifyStrArr[0] == "le":
|
||||
return val.Float() <= VFloat
|
||||
case VerifyStrArr[0] == "eq":
|
||||
return val.Float() == VFloat
|
||||
case VerifyStrArr[0] == "ne":
|
||||
return val.Float() != VFloat
|
||||
case VerifyStrArr[0] == "ge":
|
||||
return val.Float() >= VFloat
|
||||
case VerifyStrArr[0] == "gt":
|
||||
return val.Float() > VFloat
|
||||
default:
|
||||
return false
|
||||
}
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user