This commit is contained in:
ZiShuo
2024-04-10 18:56:50 +08:00
commit c2dfa9fbac
472 changed files with 101883 additions and 0 deletions

7
templates/goxorm/config Normal file
View File

@@ -0,0 +1,7 @@
lang=go
genJson=1
prefix=sys_
ignoreColumnsJSON=
created=
updated=
deleted=

View File

@@ -0,0 +1,45 @@
package {{.Models}}
import "github.com/darkit/thinkweb/utils"
{{$ilen := len .Imports}}
{{if gt $ilen 0}}
import (
"github.com/darkit/thinkweb/utils"
{{range .Imports}}"{{.}}"{{end}}
)
{{end}}
{{range .Tables}}
type {{Mapper .Name}} struct {
{{$table := .}}
{{range .ColumnsSeq}}{{$col := $table.GetColumn .}} {{Mapper $col.Name}} {{Type $col}} {{Tag $table $col}}
{{end}}
}
// 根据条件查询单条数据
func (r *{{Mapper .Name}}) Get() (bool, error) {
return db.GetDb().Get(r)
}
// 插入数据
func (r *{{Mapper .Name}}) Insert() (int64, error) {
return db.GetDb().Insert(r)
}
// 更新数据
func (r *{{Mapper .Name}}) Update() (int64, error) {
return db.GetDb().ID(r.Id).Update(r)
}
// 删除
func (r *{{Mapper .Name}}) Delete() (int64, error) {
return db.GetDb().ID(r.Id).Delete(&{{Mapper .Name}}{})
}
//批量删除
func (r *{{Mapper .Name}}) BatchDelete(ids ...int64) (int64, error) {
return db.GetDb().In("id", ids).Delete(&{{Mapper .Name}}{})
}
{{end}}

View File

@@ -0,0 +1,207 @@
package controller
/**
* {{.moduleTitle}}管理-控制器
* @author ZStudio {{.author}}
* @since {{.since}}
* @File : {{.moduleName}}
*/
import (
"github.com/darkit/thinkweb/app/dto"
"github.com/darkit/thinkweb/app/model"
"github.com/darkit/thinkweb/app/service"
"github.com/darkit/thinkweb/utils"
"github.com/darkit/thinkweb/utils/common"
"github.com/darkit/thinkweb/utils/gconv"
"github.com/darkit/thinkweb/utils/response"
"github.com/gin-gonic/gin"
"net/http"
)
var {{.entityName}} = new({{.moduleName}}Ctl)
type {{.moduleName}}Ctl struct{}
func (c *{{.moduleName}}Ctl) Index(ctx *gin.Context) {
// 模板渲染
response.BuildTpl(ctx, "{{.moduleName}}_index.html").WriteTpl()
}
func (c *{{.moduleName}}Ctl) List(ctx *gin.Context) {
// 参数绑定
var req *dto.{{.entityName}}PageReq
if err := ctx.ShouldBind(&req); err != nil {
ctx.JSON(http.StatusOK, common.JsonResult{
Code: -1,
Msg: err.Error(),
})
return
}
// 调用获取列表方法
list, count, err := service.{{.entityName}}.GetList(req)
if err != nil {
ctx.JSON(http.StatusOK, common.JsonResult{
Code: -1,
Msg: err.Error(),
})
return
}
// 返回结果
ctx.JSON(http.StatusOK, common.JsonResult{
Code: 0,
Data: list,
Msg: "操作成功",
Count: count,
})
}
func (c *{{.moduleName}}Ctl) Edit(ctx *gin.Context) {
id := gconv.Int(ctx.Query("id"))
if id > 0 {
// 编辑
info := &model.{{.entityName}}{Id: id}
has, err := info.Get()
if !has || err != nil {
ctx.JSON(http.StatusOK, common.JsonResult{
Code: -1,
Msg: err.Error(),
})
return
}
{{range $key, $val := .columnList}}
{{if ne $val.columnImage false}}
// {{$val.columnTitle}}
if info.{{$val.columnName2}} != "" {
info.{{$val.columnName2}} = utils.GetImageUrl(info.{{$val.columnName2}})
}
{{end}}
{{end}}
// 渲染模板
response.BuildTpl(ctx, "{{.moduleName}}_edit.html").WriteTpl(gin.H{
"info": info,
})
} else {
// 添加
response.BuildTpl(ctx, "{{.moduleName}}_edit.html").WriteTpl()
}
}
func (c *{{.moduleName}}Ctl) Add(ctx *gin.Context) {
// 参数绑定
var req *dto.{{.entityName}}AddReq
if err := ctx.ShouldBind(&req); err != nil {
ctx.JSON(http.StatusOK, common.JsonResult{
Code: -1,
Msg: err.Error(),
})
return
}
// 调用添加方法
rows, err := service.{{.entityName}}.Add(req, utils.Uid(ctx))
if err != nil || rows == 0 {
ctx.JSON(http.StatusOK, common.JsonResult{
Code: -1,
Msg: err.Error(),
})
return
}
// 返回结果
ctx.JSON(http.StatusOK, common.JsonResult{
Code: 0,
Msg: "添加成功",
})
}
func (c *{{.moduleName}}Ctl) Update(ctx *gin.Context) {
// 参数绑定
var req *dto.{{.entityName}}UpdateReq
if err := ctx.ShouldBind(&req); err != nil {
ctx.JSON(http.StatusOK, common.JsonResult{
Code: -1,
Msg: err.Error(),
})
return
}
// 调用更新方法
rows, err := service.{{.entityName}}.Update(req, utils.Uid(ctx))
if err != nil || rows == 0 {
ctx.JSON(http.StatusOK, common.JsonResult{
Code: -1,
Msg: err.Error(),
})
return
}
// 返回结果
ctx.JSON(http.StatusOK, common.JsonResult{
Code: 0,
Msg: "更新成功",
})
}
func (c *{{.moduleName}}Ctl) Delete(ctx *gin.Context) {
// 记录ID
ids := ctx.Param("ids")
if ids == "" {
ctx.JSON(http.StatusOK, common.JsonResult{
Code: -1,
Msg: "记录ID不能为空",
})
return
}
// 调用删除方法
rows, err := service.{{.entityName}}.Delete(ids)
if err != nil || rows == 0 {
ctx.JSON(http.StatusOK, common.JsonResult{
Code: -1,
Msg: err.Error(),
})
return
}
// 返回结果
ctx.JSON(http.StatusOK, common.JsonResult{
Code: 0,
Msg: "删除成功",
})
}
{{range $key, $val := .columnList}}
{{if ne $val.columnSwitch false}}
func (c *{{$.moduleName}}Ctl) {{$val.columnName2}}(ctx *gin.Context) {
// 参数绑定
var req *dto.{{$.entityName}}{{$val.columnName2}}Req
if err := ctx.ShouldBind(&req); err != nil {
ctx.JSON(http.StatusOK, common.JsonResult{
Code: -1,
Msg: err.Error(),
})
return
}
// 调用设置状态方法
rows, err := service.{{$.entityName}}.{{$val.columnName2}}(req, utils.Uid(ctx))
if err != nil || rows == 0 {
ctx.JSON(http.StatusOK, common.JsonResult{
Code: -1,
Msg: err.Error(),
})
return
}
// 返回结果
ctx.JSON(http.StatusOK, common.JsonResult{
Code: 0,
Msg: "设置成功",
})
}
{{end}}
{{end}}

53
templates/tmpl/dto.html Normal file
View File

@@ -0,0 +1,53 @@
package dto
// {{.entityName}}PageReq 分页查询
type {{.entityName}}PageReq struct {
{{range $key, $val := .queryList}}
{{if ne $val.columnValue ""}}
{{$val.columnName2}} {{$val.columnType}} `form:"{{$val.columnName3}}"` // {{$val.columnComment}}
{{else}}
{{$val.columnName2}} {{$val.columnType}} `form:"{{$val.columnName3}}"` // {{$val.columnComment}}
{{end}}
{{end}}
Page int `form:"page"` // 页码
Limit int `form:"limit"` // 每页数
}
// {{.entityName}}AddReq添加{{.entityName}}
type {{.entityName}}AddReq struct {
{{range $key, $val := .columnList}}
{{if ne $val.columnImage false}}
{{$val.columnName2}} string `form:"{{$val.columnName3}}" binding:"required"` // {{$val.columnComment}}
{{else if ne $val.columnValue ""}}
{{$val.columnName2}} string `form:"{{$val.columnName3}}" binding:"required"` // {{$val.columnComment}}
{{else}}
{{$val.columnName2}} string `form:"{{$val.columnName3}}" binding:"required"` // {{$val.columnComment}}
{{end}}
{{end}}
}
// {{.entityName}}UpdateReq编辑{{.moduleTitle}}
type {{.entityName}}UpdateReq struct {
Id string `form:"id" binding:"required"`
{{range $key, $val := .columnList}}
{{if ne $val.columnImage false}}
{{$val.columnName2}} string `form:"{{$val.columnName3}}" binding:"required"` // {{$val.columnComment}}
{{else if ne $val.columnValue ""}}
{{$val.columnName2}} string `form:"{{$val.columnName3}}" binding:"required"` // {{$val.columnComment}}
{{else}}
{{$val.columnName2}} string `form:"{{$val.columnName3}}" binding:"required"` // {{$val.columnComment}}
{{end}}
{{end}}
}
{{range $key, $val := .columnList}}
{{if ne $val.columnSwitch false}}
// 设置{{$val.columnTitle}}
type {{$.entityName}}{{$val.columnName2}}Req struct {
Id string `form:"id" binding:"required"`
{{$val.columnName2}} string `form:"{{$val.columnName3}}" binding:"required"`
}
{{end}}
{{end}}

44
templates/tmpl/edit.html Normal file
View File

@@ -0,0 +1,44 @@
{{.defineStart | safe}}
<form class="layui-form model-form" action="">
<input name="id" id="id" type="hidden" value="{{(printf "{{.info.Id}}")}}">
{{range $key, $val := .columnList}}
{{if eq $val.columnImage true}}
<div class="layui-form-item">
<label class="layui-form-label">{{$val.columnTitle}}</label>
{{$val.columnWidget | safe}}
</div>
{{else if ne $val.columnText false}}
{{if eq $val.dataType "text"}}
<div class="layui-form-item">
<label class="layui-form-label">{{$val.columnTitle}}</label>
<div class="layui-input-block">
<textarea name="{{$val.columnName}}" id="{{$val.columnName}}" lay-verify="required" class="layui-textarea"></textarea>
{{$val.columnWidget | safe}}
</div>
</div>
{{else}}
<div class="layui-form-item layui-form-text" style="width:665px;">
<label class="layui-form-label">{{$val.columnTitle}}</label>
<div class="layui-input-block">
<textarea name="{{$val.columnName}}" placeholder="请输入{{$val.columnTitle}}" class="layui-textarea">{{(printf "{{.info.%s}}" $val.columnName2)}}</textarea>
</div>
</div>
{{end}}
{{else}}
<div class="layui-form-item">
<label class="layui-form-label">{{$val.columnTitle}}</label>
<div class="layui-input-block">
{{if ne $val.columnValue ""}}
{{$val.columnWidget | safe}}
{{else if eq $val.dataType "int" }}
<input name="{{$val.columnName}}" value="{{(printf "{{.info.%s}}" $val.columnName2)}}" lay-verify="required|number" autocomplete="off" placeholder="请输入{{$val.columnTitle}}" class="layui-input" type="text">
{{else}}
<input name="{{$val.columnName}}" value="{{(printf "{{.info.%s}}" $val.columnName2)}}" lay-verify="required" autocomplete="off" placeholder="请输入{{$val.columnTitle}}" class="layui-input" type="text">
{{end}}
</div>
</div>
{{end}}
{{end}}
{{.submitWidget | safe}}
</form>
{{.defineEnd | safe}}

35
templates/tmpl/index.html Normal file
View File

@@ -0,0 +1,35 @@
{{.defineStart | safe}}
<!-- 功能操作区一 -->
<form class="layui-form toolbar">
<div class="layui-form-item">
{{range $key, $val := .queryList}}
{{if ne $val.columnValue ""}} <!-- {{$val.columnComment}} -->
<div class="layui-inline">
<label class="layui-form-label w-auto">{{$val.columnTitle}}</label>
<div class="layui-input-inline">
{{$val.columnWidget | safe}}
</div>
</div> {{else}} <!-- {{$val.columnComment}} -->
<div class="layui-inline">
<label class="layui-form-label w-auto">{{$val.columnTitle}}</label>
<div class="layui-input-inline">
<input type="text" name="{{$val.columnName}}" placeholder="请输入{{$val.columnTitle}}" autocomplete="off" class="layui-input">
</div>
</div> {{end}} {{end}}
<div class="layui-inline">
<div class="layui-input-inline" style="width: auto;">
{{.funcList1 | safe}}
</div>
</div>
</div>
</form>
<!-- TABLE渲染区 -->
<table class="layui-hide" id="tableList" lay-filter="tableList"></table>
<!-- 操作功能区二 -->
<script type="text/html" id="toolBar">
{{.funcList2 | safe}}
</script>
{{.defineEnd | safe}}

80
templates/tmpl/js.html Normal file
View File

@@ -0,0 +1,80 @@
/**
* {{.moduleTitle}}管理
* @author ZStudio {{.author}}
* @since {{.since}}
*/
layui.use(['func'], function () {
//声明变量
var func = layui.func
, $ = layui.$;
if (A == 'index') {
//【TABLE列数组】
var cols = [
{type: 'checkbox', fixed: 'left'}
, {field: 'id', width: 80, title: 'ID', align: 'center', sort: true, fixed: 'left'}
{{range $key, $val := .columnList}}
{{if ne $val.columnSwitch false}}
, {field: '{{$val.columnName3}}', width: 100, title: '{{$val.columnTitle}}', align: 'center', templet: function (d) {
return '<input type="checkbox" name="{{$val.columnName3}}" value="'+d.id+'" lay-skin="switch" lay-text="{{$val.columnSwitchValue}}" lay-filter="{{$val.columnName3}}" checkedStart{{$val.columnName3}}checkedEnd>';
}}
{{else if ne $val.columnImage false}}
, {field: '{{$val.columnName}}', width: 90, title: '{{$val.columnTitle}}', align: 'center', templet: function (d) {
var {{$val.columnName}}Str = "";
if (d.{{$val.columnName}}) {
{{$val.columnName}}Str = '<a href="' + d.{{$val.columnName}} + '" target="_blank"><img src="' + d.{{$val.columnName}} + '" height="26" /></a>';
}
return {{$val.columnName}}Str;
}
}
{{else if ne $val.columnValue ""}}
, {field: '{{$val.columnName}}', width: 100, title: '{{$val.columnTitle}}', align: 'center', templet(d) {
{{range $k, $v := $val.columnValueList}}
{{if eq $k 1}}if (d.{{$val.columnName}} == 1) {
// {{$v}}
return '<span class="layui-btn layui-btn-normal layui-btn-xs">{{$v}}</span>';
} {{else if eq $k 2}}else if (d.{{$val.columnName}} == 2) {
// {{$v}}
return '<span class="layui-btn layui-btn-danger layui-btn-xs">{{$v}}</span>';
} {{else if eq $k 3}}else if (d.{{$val.columnName}} == 3) {
// {{$v}}
return '<span class="layui-btn layui-btn-warm layui-btn-xs">{{$v}}</span>';
} {{else if eq $k 4}}else if (d.{{$val.columnName}} == 4) {
// {{$v}}
return '<span class="layui-btn layui-btn-primary layui-btn-xs">{{$v}}</span>';
} {{else}}else {
// {{$v}}
return '<span class="layui-btn layui-btn-normal layui-btn-xs">{{$v}}</span>';
}
{{end}}
{{end}}
}
}
{{else}}
, {field: '{{$val.columnName}}', width: 100, title: '{{$val.columnTitle}}', align: 'center'}
{{end}}
{{end}}
, {field: 'create_time', width: 180, title: '添加时间', align: 'center'}
, {field: 'update_time', width: 180, title: '更新时间', align: 'center'}
, {fixed: 'right', width: 150, title: '功能操作', align: 'center', toolbar: '#toolBar'}
];
//【渲染TABLE】
func.tableIns(cols, "tableList");
//【设置弹框】
func.setWin("{{.moduleTitle}}", 750, 450);
{{range $key, $val := .columnList}}
{{if ne $val.columnSwitch false}}
//【设置{{$val.columnTitle}}】
func.formSwitch('{{$val.columnName2}}', null, function (data, res) {
console.log("开关回调成功");
});
{{end}}
{{end}}
}
});

View File

@@ -0,0 +1,30 @@
package router
/**
* {{.moduleTitle}}-路由
* @author ZStudio {{.author}}
* @since {{.since}}
* @File : {{.moduleName}}
*/
import (
"github.com/darkit/thinkweb/app/controller"
"fmt"
"github.com/gin-gonic/gin"
)
func Init{{.entityName}}(router *gin.Engine) {
fmt.Println("{{.moduleTitle}}路由初始化")
/* {{.moduleTitle}} */
{{.moduleName}} := router.Group("{{.moduleName}}")
{
{{.moduleName}}.GET("/index", controller.{{.entityName}}.Index)
{{.moduleName}}.POST("/list", controller.{{.entityName}}.List)
{{.moduleName}}.GET("/edit", controller.{{.entityName}}.Edit)
{{.moduleName}}.POST("/add", controller.{{.entityName}}.Add)
{{.moduleName}}.POST("/update", controller.{{.entityName}}.Update)
{{.moduleName}}.POST("/delete/:ids", controller.{{.entityName}}.Delete)
{{range $key, $val := .columnList}}{{if ne $val.columnSwitch false}}
{{$.moduleName}}.POST("/{{$val.columnSwitchName}}", controller.{{$.entityName}}.{{$val.columnName2}}){{end}}{{end}}
}
}

151
templates/tmpl/service.html Normal file
View File

@@ -0,0 +1,151 @@
package service
/**
* {{.moduleTitle}}管理-服务类
* @author ZStudio {{.author}}
* @since {{.since}}
* @File : {{.moduleName}}
*/
import (
"github.com/darkit/thinkweb/app/dto"
"github.com/darkit/thinkweb/app/model"
"github.com/darkit/thinkweb/app/vo"
"github.com/darkit/thinkweb/utils"
"github.com/darkit/thinkweb/utils/gconv"
"errors"
"strings"
"time"
)
// {{.entityName}}中间件管理服务
var {{.entityName}} = new({{.moduleName}}Service)
type {{.moduleName}}Service struct{}
func (s *{{.moduleName}}Service) GetList(req *dto.{{.entityName}}PageReq) ([]vo.{{.entityName}}InfoVo, int64, error) {
// 初始化查询实例
query := db.GetDb().Where("mark=1")
if req != nil {
{{range $key, $val := .queryList}}
// {{$val.columnComment}}
{{if ne $val.columnValue ""}}
if req.{{$val.columnName2}} > 0 {
query = query.Where("{{$val.columnName}} = ?", req.{{$val.columnName2}})
}
{{else}}
if req.{{$val.columnName2}} != "" {
query = query.Where("{{$val.columnName}} like ?", "%"+req.{{$val.columnName2}}+"%")
}
{{end}}
{{end}}
}
// 排序
query = query.Asc("id")
// 分页设置
offset := (req.Page - 1) * req.Limit
query = query.Limit(req.Limit, offset)
// 查询列表
list := make([]model.{{.entityName}}, 0)
count, err := query.FindAndCount(&list)
// 数据处理
var result []vo.{{.entityName}}InfoVo
for _, v := range list {
item := vo.{{.entityName}}InfoVo{}
item.{{.entityName}} = v
{{range $key, $val := .columnList}}
{{if ne $val.columnImage false}}
// {{$val.columnTitle}}
if v.{{$val.columnName2}} != "" {
item.{{$val.columnName2}} = utils.GetImageUrl(v.{{$val.columnName2}})
}{{end}}{{end}}
result = append(result, item)
}
// 返回结果
return result, count, err
}
func (s *{{.moduleName}}Service) Add(req *dto.{{.entityName}}AddReq, userId int) (int64, error) {
// 实例化对象
var entity model.{{.entityName}}
{{range $key, $val := .columnList}}
{{if ne $val.columnImage false}}// {{$val.columnTitle}}处理
if req.{{$val.columnName2}} != "" {
{{$val.columnName}}, err := utils.SaveImage(req.{{$val.columnName2}}, "{{$.moduleName}}")
if err != nil {
return 0, err
}
entity.{{$val.columnName2}} = {{$val.columnName}}
}{{else if eq $val.columnType "int"}}
entity.{{$val.columnName2}} = gconv.Int(req.{{$val.columnName2}})
{{else}}entity.{{$val.columnName2}} = req.{{$val.columnName2}}{{end}}{{end}}
entity.CreateUser = userId
entity.CreateTime = time.Now().Unix()
entity.Mark = 1
// 插入数据
return entity.Insert()
}
func (s *{{.moduleName}}Service) Update(req *dto.{{.entityName}}UpdateReq, userId int) (int64, error) {
// 查询记录
entity := &model.{{.entityName}}{Id: gconv.Int(req.Id)}
has, err := entity.Get()
if err != nil || !has {
return 0, errors.New("记录不存在")
}
{{range $key, $val := .columnList}}
{{if ne $val.columnImage false}}// {{$val.columnTitle}}处理
if req.{{$val.columnName2}} != "" {
{{$val.columnName}}, err := utils.SaveImage(req.{{$val.columnName2}}, "{{$.moduleName}}")
if err != nil {
return 0, err
}
entity.{{$val.columnName2}} = {{$val.columnName}}
}{{else if eq $val.columnType "int"}}
entity.{{$val.columnName2}} = gconv.Int(req.{{$val.columnName2}})
{{else}}entity.{{$val.columnName2}} = req.{{$val.columnName2}}{{end}}{{end}}
entity.UpdateUser = userId
entity.UpdateTime = time.Now().Unix()
// 更新记录
return entity.Update()
}
// 删除
func (s *{{.moduleName}}Service) Delete(ids string) (int64, error) {
// 记录ID
idsArr := strings.Split(ids, ",")
if len(idsArr) == 1 {
// 单个删除
entity := &model.{{.entityName}}{Id: gconv.Int(ids)}
rows, err := entity.Delete()
if err != nil || rows == 0 {
return 0, errors.New("删除失败")
}
return rows, nil
} else {
// 批量删除
return 0, nil
}
}
{{range $key, $val := .columnList}}
{{if ne $val.columnSwitch false}}
func (s *{{$.moduleName}}Service) {{$val.columnName2}}(req *dto.{{$.entityName}}{{$val.columnName2}}Req, userId int) (int64, error) {
// 查询记录是否存在
info := &model.{{$.entityName}}{Id: gconv.Int(req.Id)}
has, err := info.Get()
if err != nil || !has {
return 0, errors.New("记录不存在")
}
// 设置状态
entity := &model.{{$.entityName}}{}
entity.Id = info.Id
entity.{{$val.columnName2}} = gconv.Int(req.{{$val.columnName2}})
entity.UpdateUser = userId
entity.UpdateTime = time.Now().Unix()
return entity.Update()
}
{{end}}
{{end}}

16
templates/tmpl/vo.html Normal file
View File

@@ -0,0 +1,16 @@
package vo
/**
* {{.moduleTitle}}Vo
* @author ZStudio {{.author}}
* @since {{.since}}
* @File : {{.moduleName}}
*/
import "github.com/darkit/thinkweb/app/model"
// {{.entityName}}InfoVo {{.moduleTitle}}信息Vo
type {{.entityName}}InfoVo struct {
model.{{.entityName}}
{{range $key, $val := .columnList}}{{if ne $val.columnValue ""}}
{{$val.columnName2}}Name {{$val.columnType}} `json:"{{$val.columnName3}}Name"` // {{$val.columnTitle}}名称{{end}}{{end}}
}