diff --git a/admin/package.json b/admin/package.json index 395e81e..8951229 100644 --- a/admin/package.json +++ b/admin/package.json @@ -17,7 +17,7 @@ "@highlightjs/vue-plugin": "^2.1.0", "@logicflow/core": "^1.2.28", "@logicflow/extension": "^1.2.28", - "@vue/shared": "^3.4.35", + "@vue/shared": "^3.4.37", "@vueuse/core": "^10.11.0", "@wangeditor/editor": "^5.1.23", "@wangeditor/editor-for-vue": "^5.1.12", @@ -30,13 +30,13 @@ "highlight.js": "^11.10.0", "lodash-es": "^4.17.21", "nprogress": "^0.2.0", - "pinia": "^2.2.0", + "pinia": "^2.2.1", "query-string": "^9.1.0", "vform3-builds": "^3.0.10", - "vue": "^3.4.35", + "vue": "^3.4.37", "vue-clipboard3": "^2.0.0", "vue-echarts": "^6.7.3", - "vue-router": "^4.4.2", + "vue-router": "^4.4.3", "vue3-video-play": "^1.3.2", "vuedraggable": "^4.1.0" }, @@ -61,9 +61,9 @@ "sass": "^1.77.8", "tailwindcss": "^3.4.7", "typescript": "~5.5.4", - "unplugin-auto-import": "^0.17.8", + "unplugin-auto-import": "^0.18.2", "unplugin-vue-components": "^0.27.3", - "vite": "^5.3.5", + "vite": "^5.4.0", "vite-plugin-compression": "^0.5.1", "vite-plugin-style-import": "^2.0.0", "vite-plugin-svg-icons": "^2.0.1", diff --git a/admin/src/components/dict-value/index.vue b/admin/src/components/dict-value/index.vue index 7b742a9..1eb6b9c 100644 --- a/admin/src/components/dict-value/index.vue +++ b/admin/src/components/dict-value/index.vue @@ -1,7 +1,9 @@ @@ -10,9 +12,14 @@ const props = withDefaults( defineProps<{ options: any[] value: any + labelKey?: string + valueKey?: string }>(), { - options: () => [] + options: () => [], + value: null, + labelKey: 'name', + valueKey: 'value' } ) @@ -25,6 +32,6 @@ const values = computed(() => { }) const getOptions = computed(() => { - return props.options.filter((item) => values.value.includes(item.value)) + return props.options.filter((item) => values.value.includes(item[props.valueKey])) }) diff --git a/admin/src/components/editor/index.vue b/admin/src/components/editor/index.vue index 36b23b7..6aa1998 100644 --- a/admin/src/components/editor/index.vue +++ b/admin/src/components/editor/index.vue @@ -7,7 +7,7 @@ :mode="mode" /> @@ -127,8 +128,12 @@ export default defineComponent({ }) - diff --git a/admin/src/hooks/useDictOptions.ts b/admin/src/hooks/useDictOptions.ts index d48534e..8259e7a 100644 --- a/admin/src/hooks/useDictOptions.ts +++ b/admin/src/hooks/useDictOptions.ts @@ -1,3 +1,4 @@ +import request from '@/utils/request' import { dictDataAll } from '@/api/setting/dict' import { reactive, toRaw } from 'vue' @@ -38,6 +39,18 @@ export function useDictOptions(options: Options) { } } +export type type_dict = { + color?: string + createTime?: string + id?: number + name?: string + remark?: string + sort?: number + status?: number + typeId?: number + updateTime?: string + value?: string +} export function useDictData(dict: string[]) { const options: Options = {} for (const type of dict) { @@ -54,4 +67,24 @@ export function useDictData(dict: string[]) { } } -// export function useAllList(options: Options) {} +export function useListAllData(paths: Record) { + const options: Options = {} + for (const key in paths) { + options[key] = { + api: () => request.get({ url: paths[key], params: {} }), + transformData: (data: any) => { + console.log('data', data) + + return data + } + + // params: { + // dictType: path + // } + } + } + const { optionsData } = useDictOptions(options) + return { + listAllData: optionsData + } +} diff --git a/admin/src/views/dev_tools/code/edit.vue b/admin/src/views/dev_tools/code/edit.vue index c13b0a3..b205334 100644 --- a/admin/src/views/dev_tools/code/edit.vue +++ b/admin/src/views/dev_tools/code/edit.vue @@ -73,7 +73,7 @@ - + - + - + + + + + @@ -270,6 +295,7 @@ import { dictTypeAll } from '@/api/setting/dict' import type { FormInstance } from 'element-plus' import feedback from '@/utils/feedback' import { menuLists } from '@/api/perms/menu' +import { getApiList } from '@/api/setting/website' import { useDictOptions } from '@/hooks/useDictOptions' import useMultipleTabs from '@/hooks/useMultipleTabs' enum GenTpl { @@ -332,6 +358,7 @@ const getDetails = async () => { const { optionsData } = useDictOptions<{ dictType: any[] menu: any[] + ApiList: string[] }>({ dictType: { api: dictTypeAll @@ -343,6 +370,14 @@ const { optionsData } = useDictOptions<{ menu.children = data return menu } + }, + ApiList: { + api: getApiList, + transformData(data: any) { + return data.filter((item: any) => { + return item.endsWith('listAll') + }) + } } }) diff --git a/admin/src/views/dev_tools/components/code-preview.vue b/admin/src/views/dev_tools/components/code-preview.vue index 58fb100..e26e694 100644 --- a/admin/src/views/dev_tools/components/code-preview.vue +++ b/admin/src/views/dev_tools/components/code-preview.vue @@ -1,7 +1,13 @@ @@ -110,3 +134,9 @@ const show = computed({ } }) + diff --git a/server/.goreleaser.yaml b/server/.goreleaser.yaml index e8c4f23..53cf095 100644 --- a/server/.goreleaser.yaml +++ b/server/.goreleaser.yaml @@ -1,3 +1,6 @@ +# goreleaser release --snapshot --clean + + # This is an example .goreleaser.yml file with some sensible defaults. # Make sure to check the documentation at https://goreleaser.com @@ -18,6 +21,9 @@ before: builds: - env: - CGO_ENABLED=0 + goarch: + - amd64 + # - arm64 goos: - linux - windows diff --git a/server/.vscode/settings.json b/server/.vscode/settings.json index 68040e1..0cd8e2c 100644 --- a/server/.vscode/settings.json +++ b/server/.vscode/settings.json @@ -1,5 +1,7 @@ { "cSpell.words": [ + "daterange", + "datetime", "dcloudio", "endregion", "excelize", @@ -14,9 +16,12 @@ "jinzhu", "mapstructure", "oneof", + "qrtz", "rmvb", + "singleflight", "strconv", "struct", + "typeof", "uniapp", "Warnf", "webp", diff --git a/server/admin/entry.go b/server/admin/entry.go index 6482ef7..23098ba 100644 --- a/server/admin/entry.go +++ b/server/admin/entry.go @@ -60,4 +60,5 @@ func RegisterGroup(rg *gin.RouterGroup) { MonitorProjectRoute(rg) MonitorClientRoute(rg) MonitorWebRoute(rg) + SystemLogSmsRoute(rg) } diff --git a/server/admin/generator/gen/schema.go b/server/admin/generator/gen/schema.go index 41190e7..6503669 100644 --- a/server/admin/generator/gen/schema.go +++ b/server/admin/generator/gen/schema.go @@ -58,6 +58,7 @@ type EditColumn struct { QueryType string `form:"queryType" binding:"required,max=30"` // 查询方式 HtmlType string `form:"htmlType" binding:"required,max=30"` // 表单类型 DictType string `form:"dictType" binding:"required,max=200"` // 字典类型 + ListAllApi string `form:"listAllApi" binding:"max=200"` // 下拉框数据来源listAll CreateTime core.TsTime `form:"createTime"` // 创建时间 UpdateTime core.TsTime `form:"updateTime"` // 更新时间 @@ -169,6 +170,7 @@ type GenColumnResp struct { QueryType string `json:"queryType" structs:"queryType"` // 查询方式: [等于、不等于、大于、小于、范围] HtmlType string `json:"htmlType" structs:"htmlType"` // 显示类型: [文本框、文本域、下拉框、复选框、单选框、日期控件] DictType string `json:"dictType" structs:"dictType"` // 字典类型 + ListAllApi string `json:"listAllApi" structs:"listAllApi"` // 下拉框数据来源listAll CreateTime core.TsTime `json:"createTime" structs:"createTime"` // 创建时间 UpdateTime core.TsTime `json:"updateTime" structs:"updateTime"` // 更新时间 } diff --git a/server/admin/generator/gen/service.go b/server/admin/generator/gen/service.go index d7cd84e..c651850 100644 --- a/server/admin/generator/gen/service.go +++ b/server/admin/generator/gen/service.go @@ -220,7 +220,9 @@ func (genSrv generateService) SyncTable(id uint) (e error) { col.ID = prevCol.ID if col.IsList == 0 { col.DictType = prevCol.DictType + col.ListAllApi = prevCol.ListAllApi col.QueryType = prevCol.QueryType + } if prevCol.IsRequired == 1 && prevCol.IsPk == 0 && prevCol.IsInsert == 1 || prevCol.IsEdit == 1 { col.HtmlType = prevCol.HtmlType diff --git a/server/admin/generator/tpl_utils/constants.go b/server/admin/generator/tpl_utils/constants.go index c974e39..90cfd59 100644 --- a/server/admin/generator/tpl_utils/constants.go +++ b/server/admin/generator/tpl_utils/constants.go @@ -35,7 +35,7 @@ var SqlConstants = sqlConstants{ //页面不需要编辑字段 ColumnNameNotEdit: []string{"is_delete", "create_time", "update_time", "delete_time"}, //页面不需要列表字段 - ColumnNameNotList: []string{"id", "intro", "content", "is_delete", "delete_time"}, + ColumnNameNotList: []string{"id", "is_delete", "delete_time"}, //页面不需要查询字段 ColumnNameNotQuery: []string{"is_delete", "delete_time"}, //"create_time", "update_time", } diff --git a/server/admin/generator/tpl_utils/templates/gocode/controller.go.tpl b/server/admin/generator/tpl_utils/templates/gocode/controller.go.tpl index 69b5a41..8a4d620 100644 --- a/server/admin/generator/tpl_utils/templates/gocode/controller.go.tpl +++ b/server/admin/generator/tpl_utils/templates/gocode/controller.go.tpl @@ -13,7 +13,7 @@ import ( ) -type {{{ title (toCamelCase .ModuleName) }}}Handler struct { +type {{{ toUpperCamelCase .ModuleName }}}Handler struct { requestGroup singleflight.Group } @@ -33,18 +33,18 @@ type {{{ title (toCamelCase .ModuleName) }}}Handler struct { {{{- end }}} {{{- end }}} {{{- end }}} -//@Success 200 {object} {{{getPageResp (title (toCamelCase .EntityName)) }}} "成功" +//@Success 200 {object} {{{getPageResp (toUpperCamelCase .EntityName) }}} "成功" //@Router /api/admin/{{{ .ModuleName }}}/list [get] -func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) List(c *gin.Context) { +func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) List(c *gin.Context) { var page request.PageReq - var listReq {{{ title (toCamelCase .EntityName) }}}ListReq + var listReq {{{ toUpperCamelCase .EntityName }}}ListReq if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) { return } if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) { return } - res, err := {{{ title (toCamelCase .EntityName) }}}Service.List(page, listReq) + res, err := {{{ toUpperCamelCase .EntityName }}}Service.List(page, listReq) response.CheckAndRespWithData(c, res, err) } @@ -61,14 +61,14 @@ func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) List(c *gin.Context) {{{- end }}} {{{- end }}} {{{- end }}} -// @Success 200 {object} response.Response{ data=[]{{{ title (toCamelCase .EntityName) }}}Resp} "成功" +// @Success 200 {object} response.Response{ data=[]{{{ toUpperCamelCase .EntityName }}}Resp} "成功" // @Router /api/admin/{{{ .ModuleName }}}/listAll [get] -func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) ListAll(c *gin.Context) { - var listReq {{{ title (toCamelCase .EntityName) }}}ListReq +func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) ListAll(c *gin.Context) { + var listReq {{{ toUpperCamelCase .EntityName }}}ListReq if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) { return } - res, err := {{{ title (toCamelCase .EntityName) }}}Service.ListAll(listReq) + res, err := {{{ toUpperCamelCase .EntityName }}}Service.ListAll(listReq) response.CheckAndRespWithData(c, res, err) } @@ -81,15 +81,15 @@ func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) ListAll(c *gin.Contex // @Param {{{ toCamelCase .GoField }}} query {{{ .GoType }}} false "{{{ .ColumnComment }}}" {{{- end }}} {{{- end }}} -// @Success 200 {object} response.Response{ data={{{ title (toCamelCase .EntityName) }}}Resp} "成功" +// @Success 200 {object} response.Response{ data={{{ toUpperCamelCase .EntityName }}}Resp} "成功" // @Router /api/admin/{{{ .ModuleName }}}/detail [get] -func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) Detail(c *gin.Context) { - var detailReq {{{ title (toCamelCase .EntityName) }}}DetailReq +func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) Detail(c *gin.Context) { + var detailReq {{{ toUpperCamelCase .EntityName }}}DetailReq if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) { return } - res, err, _ := hd.requestGroup.Do("{{{ title (toCamelCase .EntityName) }}}:Detail:"+strconv.Itoa(detailReq.{{{ title (toCamelCase .PrimaryKey) }}}), func() (any, error) { - v, err := {{{ title (toCamelCase .EntityName) }}}Service.Detail(detailReq.{{{ title (toCamelCase .PrimaryKey) }}}) + res, err, _ := hd.requestGroup.Do("{{{ toUpperCamelCase .EntityName }}}:Detail:"+strconv.Itoa(detailReq.{{{ toUpperCamelCase .PrimaryKey }}}), func() (any, error) { + v, err := {{{ toUpperCamelCase .EntityName }}}Service.Detail(detailReq.{{{ toUpperCamelCase .PrimaryKey }}}) return v, err }) @@ -108,12 +108,12 @@ func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) Detail(c *gin.Context {{{- end }}} // @Success 200 {object} response.Response "成功" // @Router /api/admin/{{{ .ModuleName }}}/add [post] -func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) Add(c *gin.Context) { - var addReq {{{ title (toCamelCase .EntityName) }}}AddReq +func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) Add(c *gin.Context) { + var addReq {{{ toUpperCamelCase .EntityName }}}AddReq if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &addReq)) { return } - createId, e := {{{ title (toCamelCase .EntityName) }}}Service.Add(addReq) + createId, e := {{{ toUpperCamelCase .EntityName }}}Service.Add(addReq) response.CheckAndRespWithData(c,createId, e) } // @Summary {{{ .FunctionName }}}编辑 @@ -127,12 +127,12 @@ func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) Add(c *gin.Context) { {{{- end }}} // @Success 200 {object} response.Response "成功" // @Router /api/admin/{{{ .ModuleName }}}/edit [post] -func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) Edit(c *gin.Context) { - var editReq {{{ title (toCamelCase .EntityName) }}}EditReq +func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) Edit(c *gin.Context) { + var editReq {{{ toUpperCamelCase .EntityName }}}EditReq if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) { return } - response.CheckAndRespWithData(c,editReq.{{{ title (toCamelCase .PrimaryKey) }}}, {{{ title (toCamelCase .EntityName) }}}Service.Edit(editReq)) + response.CheckAndRespWithData(c,editReq.{{{ toUpperCamelCase .PrimaryKey }}}, {{{ toUpperCamelCase .EntityName }}}Service.Edit(editReq)) } // @Summary {{{ .FunctionName }}}删除 // @Tags {{{ .ModuleName }}}-{{{ .FunctionName }}} @@ -145,12 +145,12 @@ func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) Edit(c *gin.Context) {{{- end }}} // @Success 200 {object} response.Response "成功" // @Router /api/admin/{{{ .ModuleName }}}/del [post] -func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) Del(c *gin.Context) { - var delReq {{{ title (toCamelCase .EntityName) }}}DelReq +func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) Del(c *gin.Context) { + var delReq {{{ toUpperCamelCase .EntityName }}}DelReq if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) { return } - response.CheckAndResp(c, {{{ title (toCamelCase .EntityName) }}}Service.Del(delReq.{{{ title (toCamelCase .PrimaryKey) }}})) + response.CheckAndResp(c, {{{ toUpperCamelCase .EntityName }}}Service.Del(delReq.{{{ toUpperCamelCase .PrimaryKey }}})) } @@ -170,12 +170,12 @@ func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) Del(c *gin.Context) { {{{- end }}} {{{- end }}} // @Router /api/admin/{{{ .ModuleName }}}/ExportFile [get] -func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) ExportFile(c *gin.Context) { - var listReq {{{ title (toCamelCase .EntityName) }}}ListReq +func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) ExportFile(c *gin.Context) { + var listReq {{{ toUpperCamelCase .EntityName }}}ListReq if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) { return } - res, err := {{{ title (toCamelCase .EntityName) }}}Service.ExportFile(listReq) + res, err := {{{ toUpperCamelCase .EntityName }}}Service.ExportFile(listReq) if err != nil { response.FailWithMsg(c, response.SystemError, "查询信息失败") return @@ -192,22 +192,20 @@ func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) ExportFile(c *gin.Con // @Tags {{{ .ModuleName }}}-{{{ .FunctionName }}} // @Produce json // @Router /api/admin/{{{ .ModuleName }}}/ImportFile [post] -func (hd *{{{ title (toCamelCase .ModuleName) }}}Handler) ImportFile(c *gin.Context) { +func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) ImportFile(c *gin.Context) { file, _, err := c.Request.FormFile("file") if err != nil { c.String(http.StatusInternalServerError, "文件不存在") return } defer file.Close() - importList := []{{{ title (toCamelCase .EntityName) }}}Resp{} + importList := []{{{ toUpperCamelCase .EntityName }}}Resp{} err = excel.GetExcelData(file, &importList) if err != nil { c.String(http.StatusInternalServerError, err.Error()) return } -// for _, t := range importList { -// fmt.Printf("%#v", t) -// } - err = {{{ title (toCamelCase .EntityName) }}}Service.ImportFile(importList) + + err = {{{ toUpperCamelCase .EntityName }}}Service.ImportFile(importList) response.CheckAndResp(c, err) } \ No newline at end of file diff --git a/server/admin/generator/tpl_utils/templates/gocode/model.go.tpl b/server/admin/generator/tpl_utils/templates/gocode/model.go.tpl index 4d59a9e..1196856 100644 --- a/server/admin/generator/tpl_utils/templates/gocode/model.go.tpl +++ b/server/admin/generator/tpl_utils/templates/gocode/model.go.tpl @@ -2,19 +2,22 @@ package model import ( "x_admin/core" "gorm.io/plugin/soft_delete" + "github.com/guregu/null/v5" ) -//{{{ title (toCamelCase .EntityName) }}} {{{ .FunctionName }}}实体 -type {{{ title (toCamelCase .EntityName) }}} struct { +//{{{ toUpperCamelCase .EntityName }}} {{{ .FunctionName }}}实体 +type {{{ toUpperCamelCase .EntityName }}} struct { {{{- range .Columns }}} {{{- if not (contains $.SubTableFields .ColumnName) }}} - {{{ if eq .GoField "is_delete" }}} + {{{- if eq .GoField "is_delete" }}} IsDelete soft_delete.DeletedAt `gorm:"not null;default:0;softDelete:flag,DeletedAtField:DeleteTime;comment:'是否删除: 0=否, 1=是'"` - {{{ else }}} - {{{ if eq .GoType "core.TsTime" }}} - {{{ title (toCamelCase .GoField) }}} core.TsTime `gorm:"{{{ if eq .GoField "create_time" }}}autoCreateTime;{{{ else }}}{{{if eq .GoField "update_time"}}}autoUpdateTime;{{{ end }}}{{{ end }}}comment:'{{{ .ColumnComment }}}'" excel:"name:{{{ .ColumnComment }}};"` // {{{ .ColumnComment }}} - {{{ else }}} - {{{ title (toCamelCase .GoField) }}} {{{ .GoType }}} `gorm:"{{{ if .IsPk }}}primarykey;{{{ end }}}comment:'{{{ .ColumnComment }}}'" excel:"name:{{{ .ColumnComment }}};"` // {{{ .ColumnComment }}} + {{{- else }}} + {{{- if eq .GoType "core.TsTime" }}} + {{{ toUpperCamelCase .GoField }}} core.TsTime `gorm:"{{{ if eq .GoField "create_time" }}}autoCreateTime;{{{ else }}}{{{if eq .GoField "update_time"}}}autoUpdateTime;{{{ end }}}{{{ end }}}comment:'{{{ .ColumnComment }}}'" excel:"name:{{{ .ColumnComment }}};"` // {{{ .ColumnComment }}} + {{{- else if .IsPk }}} + {{{ toUpperCamelCase .GoField }}} {{{ .GoType }}} `gorm:"primarykey;" excel:"name:{{{ .ColumnComment }}};"` // {{{ .ColumnComment }}} + {{{- else }}} + {{{ toUpperCamelCase .GoField }}} {{{goToNullType .GoType }}} `gorm:"" excel:"name:{{{ .ColumnComment }}};"` // {{{ .ColumnComment }}} {{{- end }}} {{{- end }}} diff --git a/server/admin/generator/tpl_utils/templates/gocode/route.go.tpl b/server/admin/generator/tpl_utils/templates/gocode/route.go.tpl index 145bede..88439eb 100644 --- a/server/admin/generator/tpl_utils/templates/gocode/route.go.tpl +++ b/server/admin/generator/tpl_utils/templates/gocode/route.go.tpl @@ -13,7 +13,7 @@ import ( - 下载并解压压缩包后,直接复制server、admin文件夹到项目根目录即可 2. 注册路由 -请在 admin/entry.go 文件引入{{{ title (toCamelCase .ModuleName) }}}Route注册路由 +请在 admin/entry.go 文件引入{{{ toUpperCamelCase .ModuleName }}}Route注册路由 3. 后台手动添加菜单和按钮 admin:{{{ .ModuleName }}}:add @@ -26,8 +26,9 @@ admin:{{{.ModuleName }}}:ExportFile admin:{{{.ModuleName }}}:ImportFile // 列表-先添加菜单获取菜单id -INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, paths, component, is_cache, is_show, is_disable, create_time, update_time) VALUES (0, 'C', '{{{ .FunctionName }}}', '/{{{ .ModuleName }}}/index', '{{{ .ModuleName }}}/index', 0, 1, 0, now(), now()); +INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, paths, component, is_cache, is_show, is_disable, create_time, update_time) VALUES (0, 'C', '{{{nameToPath .FunctionName }}}', '{{{nameToPath .ModuleName }}}/index', '{{{ .ModuleName }}}/index', 0, 1, 0, now(), now()); 按钮-替换pid参数为菜单id + INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) VALUES (0, 'A', '{{{ .FunctionName }}}添加','admin:{{{ .ModuleName }}}:add', 0, 1, 0, now(), now()); INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) VALUES (0, 'A', '{{{ .FunctionName }}}编辑','admin:{{{ .ModuleName }}}:edit', 0, 1, 0, now(), now()); INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) VALUES (0, 'A', '{{{ .FunctionName }}}删除','admin:{{{ .ModuleName }}}:del', 0, 1, 0, now(), now()); @@ -39,9 +40,9 @@ INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_sh */ -// {{{ title (toCamelCase .ModuleName) }}}Route(rg) -func {{{ title (toCamelCase .ModuleName) }}}Route(rg *gin.RouterGroup) { - handle := {{{ .ModuleName}}}.{{{ title (toCamelCase .EntityName) }}}Handler{} +// {{{ toUpperCamelCase .ModuleName }}}Route(rg) +func {{{ toUpperCamelCase .ModuleName }}}Route(rg *gin.RouterGroup) { + handle := {{{ .ModuleName}}}.{{{ toUpperCamelCase .EntityName }}}Handler{} r := rg.Group("/", middleware.TokenAuth()) r.GET("/{{{ .ModuleName }}}/list", handle.List) diff --git a/server/admin/generator/tpl_utils/templates/gocode/schema.go.tpl b/server/admin/generator/tpl_utils/templates/gocode/schema.go.tpl index 3d41162..7638cbc 100644 --- a/server/admin/generator/tpl_utils/templates/gocode/schema.go.tpl +++ b/server/admin/generator/tpl_utils/templates/gocode/schema.go.tpl @@ -1,64 +1,74 @@ package {{{ .ModuleName }}} +import ( + "x_admin/core" + "github.com/guregu/null/v5" +) -//{{{ title (toCamelCase .EntityName) }}}ListReq {{{ .FunctionName }}}列表参数 -type {{{ title (toCamelCase .EntityName) }}}ListReq struct { +//{{{ toUpperCamelCase .EntityName }}}ListReq {{{ .FunctionName }}}列表参数 +type {{{ toUpperCamelCase .EntityName }}}ListReq struct { {{{- range .Columns }}} {{{- if .IsQuery }}} {{{- if eq .HtmlType "datetime" }}} - {{{ title (toCamelCase .GoField) }}}Start string `form:"{{{ toCamelCase .GoField }}}Start"` // 开始{{{ .ColumnComment }}} - {{{ title (toCamelCase .GoField) }}}End string `form:"{{{ toCamelCase .GoField }}}End"` // 结束{{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}}Start null.String `form:"{{{ toCamelCase .GoField }}}Start"` // 开始{{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}}End null.String `form:"{{{ toCamelCase .GoField }}}End"` // 结束{{{ .ColumnComment }}} {{{- else }}} - {{{ title (toCamelCase .GoField) }}} {{{ .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} {{{goToNullType .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} {{{- end }}} {{{- end }}} {{{- end }}} } -//{{{ title (toCamelCase .EntityName) }}}DetailReq {{{ .FunctionName }}}详情参数 -type {{{ title (toCamelCase .EntityName) }}}DetailReq struct { - {{{- range .Columns }}} - {{{- if .IsPk }}} - {{{ title (toCamelCase .GoField) }}} {{{ .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} - {{{- end }}} - {{{- end }}} -} -//{{{ title (toCamelCase .EntityName) }}}AddReq {{{ .FunctionName }}}新增参数 -type {{{ title (toCamelCase .EntityName) }}}AddReq struct { + +//{{{ toUpperCamelCase .EntityName }}}AddReq {{{ .FunctionName }}}新增参数 +type {{{ toUpperCamelCase .EntityName }}}AddReq struct { {{{- range .Columns }}} {{{- if .IsInsert }}} - {{{ title (toCamelCase .GoField) }}} {{{ .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} {{{goToNullType .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} {{{- end }}} {{{- end }}} } -//{{{ title (toCamelCase .EntityName) }}}EditReq {{{ .FunctionName }}}编辑参数 -type {{{ title (toCamelCase .EntityName) }}}EditReq struct { +//{{{ toUpperCamelCase .EntityName }}}EditReq {{{ .FunctionName }}}编辑参数 +type {{{ toUpperCamelCase .EntityName }}}EditReq struct { {{{- range .Columns }}} {{{- if .IsEdit }}} - {{{ title (toCamelCase .GoField) }}} *{{{ .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{- if .IsPk }}} + {{{ toUpperCamelCase .GoField }}} {{{ .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{- else }}} + {{{ toUpperCamelCase .GoField }}} {{{goToNullType .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{- end }}} {{{- end }}} {{{- end }}} } -//{{{ title (toCamelCase .EntityName) }}}DelReq {{{ .FunctionName }}}新增参数 -type {{{ title (toCamelCase .EntityName) }}}DelReq struct { +//{{{ toUpperCamelCase .EntityName }}}DetailReq {{{ .FunctionName }}}详情参数 +type {{{ toUpperCamelCase .EntityName }}}DetailReq struct { {{{- range .Columns }}} {{{- if .IsPk }}} - {{{ title (toCamelCase .GoField) }}} {{{ .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} {{{.GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} {{{- end }}} {{{- end }}} } -//{{{ title (toCamelCase .EntityName) }}}Resp {{{ .FunctionName }}}返回信息 -type {{{ title (toCamelCase .EntityName) }}}Resp struct { +//{{{ toUpperCamelCase .EntityName }}}DelReq {{{ .FunctionName }}}删除参数 +type {{{ toUpperCamelCase .EntityName }}}DelReq struct { + {{{- range .Columns }}} + {{{- if .IsPk }}} + {{{ toUpperCamelCase .GoField }}} {{{ .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{- end }}} + {{{- end }}} +} + +//{{{ toUpperCamelCase .EntityName }}}Resp {{{ .FunctionName }}}返回信息 +type {{{ toUpperCamelCase .EntityName }}}Resp struct { {{{- range .Columns }}} {{{- if or .IsList .IsPk }}} {{{- if .IsPk }}} - {{{ title (toCamelCase .GoField) }}} {{{ .GoType }}} `json:"{{{ toCamelCase .GoField }}}" structs:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} {{{ .GoType }}} `json:"{{{ toCamelCase .GoField }}}" structs:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} {{{- else }}} - {{{ title (toCamelCase .GoField) }}} {{{ .GoType }}} `json:"{{{ toCamelCase .GoField }}}" structs:"{{{ toCamelCase .GoField }}}" excel:"name:{{{ .ColumnComment }}};"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} {{{goToNullType .GoType }}} `json:"{{{ toCamelCase .GoField }}}" structs:"{{{ toCamelCase .GoField }}}" excel:"name:{{{ .ColumnComment }}};"` // {{{ .ColumnComment }}} {{{- end }}} {{{- end }}} {{{- end }}} diff --git a/server/admin/generator/tpl_utils/templates/gocode/service.go.tpl b/server/admin/generator/tpl_utils/templates/gocode/service.go.tpl index 58523a2..eee5e44 100644 --- a/server/admin/generator/tpl_utils/templates/gocode/service.go.tpl +++ b/server/admin/generator/tpl_utils/templates/gocode/service.go.tpl @@ -6,72 +6,52 @@ import ( "x_admin/core/response" "x_admin/model" "gorm.io/gorm" + "x_admin/util" ) -var {{{ title (toCamelCase .EntityName) }}}Service=New{{{ title (toCamelCase .EntityName) }}}Service() -// New{{{ title (toCamelCase .EntityName) }}}Service 初始化 -func New{{{ title (toCamelCase .EntityName) }}}Service() *{{{ toCamelCase .EntityName }}}Service { - db := core.GetDB() - return &{{{ toCamelCase .EntityName }}}Service{db: db} +var {{{ toUpperCamelCase .EntityName }}}Service=New{{{ toUpperCamelCase .EntityName }}}Service() +var cacheUtil = util.CacheUtil{ + Name: {{{ toUpperCamelCase .EntityName }}}Service.Name, +} + +// New{{{ toUpperCamelCase .EntityName }}}Service 初始化 +func New{{{ toUpperCamelCase .EntityName }}}Service() *{{{ toCamelCase .EntityName }}}Service { + return &{{{ toCamelCase .EntityName }}}Service{ + db: core.GetDB(), + Name: "{{{ toCamelCase .EntityName }}}", + } } //{{{ toCamelCase .EntityName }}}Service {{{ .FunctionName }}}服务实现类 type {{{ toCamelCase .EntityName }}}Service struct { db *gorm.DB + Name string } -// 设置缓存 -func (service {{{ toCamelCase .EntityName }}}Service) SetCache(obj model.{{{ title (toCamelCase .EntityName) }}}) bool { - str, e := util.ToolsUtil.ObjToJson(obj) - if e != nil { - return false - } - return util.RedisUtil.HSet("{{{ toCamelCase .EntityName }}}",strconv.Itoa(obj.{{{ title (toCamelCase .PrimaryKey) }}}), str, 3600) -} - -// 获取缓存 -func (service {{{ toCamelCase .EntityName }}}Service) GetCache(key int) (model.{{{ title (toCamelCase .EntityName) }}}, error) { - var obj model.{{{ title (toCamelCase .EntityName) }}} - str := util.RedisUtil.HGet("{{{ toCamelCase .EntityName }}}", strconv.Itoa(key)) - if str == "" { - return obj, errors.New("获取缓存失败") - } - err := util.ToolsUtil.JsonToObj(str, &obj) - - if err != nil { - return obj, errors.New("获取缓存失败") - } - return obj, nil -} -// 删除缓存 -func (service {{{ toCamelCase .EntityName }}}Service) RemoveCache(obj model.{{{ title (toCamelCase .EntityName) }}}) bool { - return util.RedisUtil.HDel("{{{ toCamelCase .EntityName }}}", strconv.Itoa(obj.{{{ title (toCamelCase .PrimaryKey) }}})) -} - // List {{{ .FunctionName }}}列表 -func (service {{{ toCamelCase .EntityName }}}Service) GetModel(listReq {{{ title (toCamelCase .EntityName) }}}ListReq) *gorm.DB { +func (service {{{ toCamelCase .EntityName }}}Service) GetModel(listReq {{{ toUpperCamelCase .EntityName }}}ListReq) *gorm.DB { // 查询 - dbModel := service.db.Model(&model.{{{ title (toCamelCase .EntityName) }}}{}) + dbModel := service.db.Model(&model.{{{ toUpperCamelCase .EntityName }}}{}) {{{- range .Columns }}} {{{- if .IsQuery }}} {{{- $queryOpr := index $.ModelOprMap .QueryType }}} {{{- if eq .HtmlType "datetime" }}} - if listReq.{{{ title (toCamelCase .ColumnName) }}}Start != "" { - dbModel = dbModel.Where("{{{ .ColumnName }}} >= ?", listReq.{{{ title (toCamelCase .ColumnName) }}}Start) + if listReq.{{{ toUpperCamelCase .ColumnName }}}Start.Valid { + dbModel = dbModel.Where("{{{ .ColumnName }}} >= ?", listReq.{{{ toUpperCamelCase .ColumnName }}}Start.ValueOrZero()) } - if listReq.{{{ title (toCamelCase .ColumnName) }}}End != "" { - dbModel = dbModel.Where("{{{ .ColumnName }}} <= ?", listReq.{{{ title (toCamelCase .ColumnName) }}}End) + if listReq.{{{ toUpperCamelCase .ColumnName }}}End.Valid { + dbModel = dbModel.Where("{{{ .ColumnName }}} <= ?", listReq.{{{ toUpperCamelCase .ColumnName }}}End.ValueOrZero()) } {{{- else }}} {{{- if and (eq .GoType "string") (eq $queryOpr "like") }}} - if listReq.{{{ title (toCamelCase .ColumnName) }}} != "" { - dbModel = dbModel.Where("{{{ .ColumnName }}} like ?", "%"+listReq.{{{ title (toCamelCase .ColumnName) }}}+"%") + if listReq.{{{ toUpperCamelCase .ColumnName }}}.Valid { + dbModel = dbModel.Where("{{{ .ColumnName }}} like ?", "%"+listReq.{{{ toUpperCamelCase .ColumnName }}}.ValueOrZero()+"%") } {{{- else }}} - if listReq.{{{ title (toCamelCase .ColumnName) }}} {{{ if eq .GoType "string" }}}!= ""{{{ else }}}> 0{{{ end }}} { - dbModel = dbModel.Where("{{{ .ColumnName }}} = ?", listReq.{{{ title (toCamelCase .ColumnName) }}}) + if listReq.{{{ toUpperCamelCase .ColumnName }}}.Valid { + dbModel = dbModel.Where("{{{ .ColumnName }}} = ?", listReq.{{{ toUpperCamelCase .ColumnName }}}.ValueOrZero()) } {{{- end }}} {{{- end }}} @@ -83,7 +63,7 @@ func (service {{{ toCamelCase .EntityName }}}Service) GetModel(listReq {{{ title return dbModel } // List {{{ .FunctionName }}}列表 -func (service {{{ toCamelCase .EntityName }}}Service) List(page request.PageReq, listReq {{{ title (toCamelCase .EntityName) }}}ListReq) (res response.PageResp, e error) { +func (service {{{ toCamelCase .EntityName }}}Service) List(page request.PageReq, listReq {{{ toUpperCamelCase .EntityName }}}ListReq) (res response.PageResp, e error) { // 分页信息 limit := page.PageSize offset := page.PageSize * (page.PageNo - 1) @@ -95,12 +75,12 @@ func (service {{{ toCamelCase .EntityName }}}Service) List(page request.PageReq, return } // 数据 - var modelList []model.{{{ title (toCamelCase .EntityName) }}} + var modelList []model.{{{ toUpperCamelCase .EntityName }}} err = dbModel.Limit(limit).Offset(offset).Order("id desc").Find(&modelList).Error if e = response.CheckErr(err, "查询失败"); e != nil { return } - result := []{{{ title (toCamelCase .EntityName) }}}Resp{} + result := []{{{ toUpperCamelCase .EntityName }}}Resp{} response.Copy(&result, modelList) return response.PageResp{ PageNo: page.PageNo, @@ -110,10 +90,10 @@ func (service {{{ toCamelCase .EntityName }}}Service) List(page request.PageReq, }, nil } // ListAll {{{ .FunctionName }}}列表 -func (service {{{ toCamelCase .EntityName }}}Service) ListAll(listReq {{{ title (toCamelCase .EntityName) }}}ListReq) (res []{{{ title (toCamelCase .EntityName) }}}Resp, e error) { +func (service {{{ toCamelCase .EntityName }}}Service) ListAll(listReq {{{ toUpperCamelCase .EntityName }}}ListReq) (res []{{{ toUpperCamelCase .EntityName }}}Resp, e error) { dbModel := service.GetModel(listReq) - var modelList []model.{{{ title (toCamelCase .EntityName) }}} + var modelList []model.{{{ toUpperCamelCase .EntityName }}} err := dbModel.Find(&modelList).Error if e = response.CheckErr(err, "查询全部失败"); e != nil { @@ -124,11 +104,11 @@ func (service {{{ toCamelCase .EntityName }}}Service) ListAll(listReq {{{ title } // Detail {{{ .FunctionName }}}详情 -func (service {{{ toCamelCase .EntityName }}}Service) Detail({{{ title (toCamelCase .PrimaryKey) }}} int) (res {{{ title (toCamelCase .EntityName) }}}Resp, e error) { - var obj, err = service.GetCache({{{ title (toCamelCase .PrimaryKey) }}}) - // var obj model.{{{ title (toCamelCase .EntityName) }}} +func (service {{{ toCamelCase .EntityName }}}Service) Detail({{{ toUpperCamelCase .PrimaryKey }}} int) (res {{{ toUpperCamelCase .EntityName }}}Resp, e error) { + var obj = model.SystemLogSms{} + err := cacheUtil.GetCache({{{ toUpperCamelCase .PrimaryKey }}}, &obj) if err != nil { - err := service.db.Where("{{{ $.PrimaryKey }}} = ?{{{ if contains .AllFields "is_delete" }}} AND is_delete = ?{{{ end }}}", {{{ title (toCamelCase .PrimaryKey) }}}{{{ if contains .AllFields "is_delete" }}}, 0{{{ end }}}).Limit(1).First(&obj).Error + err := service.db.Where("{{{ $.PrimaryKey }}} = ?{{{ if contains .AllFields "is_delete" }}} AND is_delete = ?{{{ end }}}", {{{ toUpperCamelCase .PrimaryKey }}}{{{ if contains .AllFields "is_delete" }}}, 0{{{ end }}}).Limit(1).First(&obj).Error if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil { return } @@ -141,7 +121,7 @@ func (service {{{ toCamelCase .EntityName }}}Service) Detail({{{ title (toCamelC res.Avatar = util.UrlUtil.ToAbsoluteUrl(res.Avatar) {{{- end }}} {{{- end }}} - service.SetCache(obj) + cacheUtil.SetCache(obj.{{{ toUpperCamelCase .PrimaryKey }}}, obj) } @@ -149,24 +129,24 @@ func (service {{{ toCamelCase .EntityName }}}Service) Detail({{{ title (toCamelC } // Add {{{ .FunctionName }}}新增 -func (service {{{ toCamelCase .EntityName }}}Service) Add(addReq {{{ title (toCamelCase .EntityName) }}}AddReq) (createId int,e error) { - var obj model.{{{ title (toCamelCase .EntityName) }}} +func (service {{{ toCamelCase .EntityName }}}Service) Add(addReq {{{ toUpperCamelCase .EntityName }}}AddReq) (createId int,e error) { + var obj model.{{{ toUpperCamelCase .EntityName }}} response.Copy(&obj, addReq) err := service.db.Create(&obj).Error e = response.CheckMysqlErr(err) if e != nil { return 0,e } - service.SetCache(obj) - createId = obj.{{{ title (toCamelCase .PrimaryKey) }}} + cacheUtil.SetCache(obj.{{{ toUpperCamelCase .PrimaryKey }}}, obj) + createId = obj.{{{ toUpperCamelCase .PrimaryKey }}} e = response.CheckErr(err, "添加失败") return } // Edit {{{ .FunctionName }}}编辑 -func (service {{{ toCamelCase .EntityName }}}Service) Edit(editReq {{{ title (toCamelCase .EntityName) }}}EditReq) (e error) { - var obj model.{{{ title (toCamelCase .EntityName) }}} - err := service.db.Where("{{{ $.PrimaryKey }}} = ?{{{ if contains .AllFields "is_delete" }}} AND is_delete = ?{{{ end }}}", editReq.{{{ title (toCamelCase .PrimaryKey) }}}{{{ if contains .AllFields "is_delete" }}}, 0{{{ end }}}).Limit(1).First(&obj).Error +func (service {{{ toCamelCase .EntityName }}}Service) Edit(editReq {{{ toUpperCamelCase .EntityName }}}EditReq) (e error) { + var obj model.{{{ toUpperCamelCase .EntityName }}} + err := service.db.Where("{{{ $.PrimaryKey }}} = ?{{{ if contains .AllFields "is_delete" }}} AND is_delete = ?{{{ end }}}", editReq.{{{ toUpperCamelCase .PrimaryKey }}}{{{ if contains .AllFields "is_delete" }}}, 0{{{ end }}}).Limit(1).First(&obj).Error // 校验 if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil { return @@ -180,14 +160,14 @@ func (service {{{ toCamelCase .EntityName }}}Service) Edit(editReq {{{ title (to if e = response.CheckErr(err, "编辑失败"); e != nil { return } - service.SetCache(obj) + cacheUtil.SetCache(obj.{{{ toUpperCamelCase .PrimaryKey }}}, obj) return } // Del {{{ .FunctionName }}}删除 -func (service {{{ toCamelCase .EntityName }}}Service) Del({{{ title (toCamelCase .PrimaryKey) }}} int) (e error) { - var obj model.{{{ title (toCamelCase .EntityName) }}} - err := service.db.Where("{{{ $.PrimaryKey }}} = ?{{{ if contains .AllFields "is_delete" }}} AND is_delete = ?{{{ end }}}", {{{ title (toCamelCase .PrimaryKey) }}}{{{ if contains .AllFields "is_delete" }}}, 0{{{ end }}}).Limit(1).First(&obj).Error +func (service {{{ toCamelCase .EntityName }}}Service) Del({{{ toUpperCamelCase .PrimaryKey }}} int) (e error) { + var obj model.{{{ toUpperCamelCase .EntityName }}} + err := service.db.Where("{{{ $.PrimaryKey }}} = ?{{{ if contains .AllFields "is_delete" }}} AND is_delete = ?{{{ end }}}", {{{ toUpperCamelCase .PrimaryKey }}}{{{ if contains .AllFields "is_delete" }}}, 0{{{ end }}}).Limit(1).First(&obj).Error // 校验 if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil { return @@ -207,29 +187,29 @@ func (service {{{ toCamelCase .EntityName }}}Service) Del({{{ title (toCamelCase err = service.db.Delete(&obj).Error e = response.CheckErr(err, "删除失败") {{{- end }}} - service.RemoveCache(obj) + cacheUtil.RemoveCache(obj.{{{ toUpperCamelCase .PrimaryKey }}}) return } // ExportFile {{{ .FunctionName }}}导出 -func (service {{{ toCamelCase .EntityName }}}Service) ExportFile(listReq {{{ title (toCamelCase .EntityName) }}}ListReq) (res []{{{ title (toCamelCase .EntityName) }}}Resp, e error) { +func (service {{{ toCamelCase .EntityName }}}Service) ExportFile(listReq {{{ toUpperCamelCase .EntityName }}}ListReq) (res []{{{ toUpperCamelCase .EntityName }}}Resp, e error) { // 查询 dbModel := service.GetModel(listReq) // 数据 - var modelList []model.{{{ title (toCamelCase .EntityName) }}} + var modelList []model.{{{ toUpperCamelCase .EntityName }}} err := dbModel.Order("id asc").Find(&modelList).Error if e = response.CheckErr(err, "查询失败"); e != nil { return } - result := []{{{ title (toCamelCase .EntityName) }}}Resp{} + result := []{{{ toUpperCamelCase .EntityName }}}Resp{} response.Copy(&result, modelList) return result, nil } // 导入 -func (service {{{ toCamelCase .EntityName }}}Service) ImportFile(importReq []{{{ title (toCamelCase .EntityName) }}}Resp) (e error) { - var importData []model.{{{ title (toCamelCase .EntityName) }}} +func (service {{{ toCamelCase .EntityName }}}Service) ImportFile(importReq []{{{ toUpperCamelCase .EntityName }}}Resp) (e error) { + var importData []model.{{{ toUpperCamelCase .EntityName }}} response.Copy(&importData, importReq) err := service.db.Create(&importData).Error e = response.CheckErr(err, "添加失败") diff --git a/server/admin/generator/tpl_utils/templates/uniapp/details.vue.tpl b/server/admin/generator/tpl_utils/templates/uniapp/details.vue.tpl index e9ebbf8..d973c20 100644 --- a/server/admin/generator/tpl_utils/templates/uniapp/details.vue.tpl +++ b/server/admin/generator/tpl_utils/templates/uniapp/details.vue.tpl @@ -6,6 +6,8 @@ {{{- if and (ne .DictType "") (or (eq .HtmlType "select") (eq .HtmlType "radio") (eq .HtmlType "checkbox")) }}} + {{{- else if and (ne .ListAllApi "") (or (eq .HtmlType "select") (eq .HtmlType "radio") (eq .HtmlType "checkbox")) }}} + {{{- else if eq .HtmlType "imageUpload" }}} {{{- else }}} @@ -29,7 +31,7 @@ diff --git a/server/admin/generator/tpl_utils/templates/uniapp/edit.vue.tpl b/server/admin/generator/tpl_utils/templates/uniapp/edit.vue.tpl index 6d687bd..d44f90e 100644 --- a/server/admin/generator/tpl_utils/templates/uniapp/edit.vue.tpl +++ b/server/admin/generator/tpl_utils/templates/uniapp/edit.vue.tpl @@ -15,6 +15,8 @@ {{{- else if or (eq .HtmlType "checkbox") (eq .HtmlType "radio") (eq .HtmlType "select")}}} {{{- if ne .DictType "" }}} + {{{- else if ne .ListAllApi "" }}} + {{{- else }}} 请选择字典生成代码 {{{- end }}} @@ -46,9 +48,10 @@ alert } from "@/utils/utils"; import { - useDictData + useDictData,useListAllData } from "@/hooks/useDictOptions"; - + import type { type_dict } from '@/hooks/useDictOptions' + let formRef = ref(); let form = ref({ {{{- range .Columns }}} @@ -94,11 +97,24 @@ {{{- $dictSize := sub (len .DictFields) 1 }}} const { dictData } = useDictData<{ {{{- range .DictFields }}} - {{{ . }}}: any[] + {{{ . }}}: type_dict[] {{{- end }}} }>([{{{- range .DictFields }}}'{{{ . }}}'{{{- if ne (index $.DictFields $dictSize) . }}},{{{- end }}}{{{- end }}}]) {{{- end }}} +{{{- if ge (len .ListAllFields) 1 }}} +{{{- $list_all_size := sub (len .ListAllFields) 1 }}} +const { listAllData } = useListAllData<{ + {{{- range .ListAllFields }}} + {{{pathToName . }}}: any[] + {{{- end }}} +}>({ + {{{- range .ListAllFields }}} + {{{pathToName . }}}:'{{{deletePathPrefix . }}}', + {{{- end }}} +}) +{{{- end }}} + function getDetails(id) { {{{ .ModuleName }}}_detail(id).then((res) => { if (res.code == 200) { diff --git a/server/admin/generator/tpl_utils/templates/uniapp/index.vue.tpl b/server/admin/generator/tpl_utils/templates/uniapp/index.vue.tpl index d5110ee..e717850 100644 --- a/server/admin/generator/tpl_utils/templates/uniapp/index.vue.tpl +++ b/server/admin/generator/tpl_utils/templates/uniapp/index.vue.tpl @@ -110,13 +110,13 @@ onReachBottom(() => { }); function toDetails(item) { - toPath("/pages/{{{ .ModuleName }}}/details", { id: item.id }); + toPath("/pages/{{{nameToPath .ModuleName }}}/details", { id: item.id }); } function moreSearch() { - toPath("/pages/{{{ .ModuleName }}}/search"); + toPath("/pages/{{{nameToPath .ModuleName }}}/search"); } function add() { - toPath("/pages/{{{ .ModuleName }}}/edit"); + toPath("/pages/{{{nameToPath .ModuleName }}}/edit"); } diff --git a/server/admin/generator/tpl_utils/templates/uniapp/search.vue.tpl b/server/admin/generator/tpl_utils/templates/uniapp/search.vue.tpl index f0c7167..bfe5c0d 100644 --- a/server/admin/generator/tpl_utils/templates/uniapp/search.vue.tpl +++ b/server/admin/generator/tpl_utils/templates/uniapp/search.vue.tpl @@ -7,10 +7,12 @@ {{{- if eq .HtmlType "datetime" }}} - {{{- else if or (eq .HtmlType "select") (eq .HtmlType "radio") }}} - {{{- if ne .DictType "" }}} - - {{{- end }}} + {{{- else if or (eq .HtmlType "checkbox") (eq .HtmlType "radio") (eq .HtmlType "select") }}} + {{{- if ne .DictType "" }}} + + {{{- else if ne .ListAllApi "" }}} + + {{{- end }}} {{{- else if eq .HtmlType "input" }}} {{{- end }}} @@ -39,7 +41,7 @@ clearObjEmpty } from "@/utils/utils"; import { - useDictData + useDictData,useListAllData } from "@/hooks/useDictOptions"; import xDateRange from "@/components/x-date-range/x-date-range.vue"; import type {type_{{{.ModuleName}}}_query} from "@/api/monitor_project"; @@ -52,15 +54,27 @@ const { dictData } = useDictData<{ }>([{{{- range .DictFields }}}'{{{ . }}}'{{{- if ne (index $.DictFields $dictSize) . }}},{{{- end }}}{{{- end }}}]) {{{- end }}} +{{{- if ge (len .ListAllFields) 1 }}} +{{{- $list_all_size := sub (len .ListAllFields) 1 }}} +const { listAllData } = useListAllData<{ + {{{- range .ListAllFields }}} + {{{pathToName . }}}: any[] + {{{- end }}} +}>({ + {{{- range .ListAllFields }}} + {{{pathToName . }}}:'{{{deletePathPrefix . }}}', + {{{- end }}} +}) +{{{- end }}} let form = ref({ {{{- range .Columns }}} {{{- if .IsQuery }}} {{{- if eq .HtmlType "datetime" }}} - {{{ (toCamelCase .GoField) }}}Start: '', - {{{ (toCamelCase .GoField) }}}End: '', + {{{ (toCamelCase .GoField) }}}Start: null, + {{{ (toCamelCase .GoField) }}}End: null, {{{- else }}} - {{{ (toCamelCase .GoField) }}}: '', + {{{ (toCamelCase .GoField) }}}: null, {{{- end }}} {{{- end }}} {{{- end }}} @@ -75,7 +89,7 @@ const { dictData } = useDictData<{ return toast("请输入查询条件"); } - toPath("/pages/{{{ .ModuleName }}}/index", search); + toPath("/pages/{{{nameToPath .ModuleName }}}/index", search); } diff --git a/server/admin/generator/tpl_utils/templates/vue/edit.vue.tpl b/server/admin/generator/tpl_utils/templates/vue/edit.vue.tpl index f2252b3..d6dadaa 100644 --- a/server/admin/generator/tpl_utils/templates/vue/edit.vue.tpl +++ b/server/admin/generator/tpl_utils/templates/vue/edit.vue.tpl @@ -33,7 +33,7 @@ {{{- else if eq .HtmlType "number" }}} - + {{{- else if eq .HtmlType "textarea" }}} @@ -51,11 +51,17 @@ - {{ item.name }} - + > + {{{- else if ne .ListAllApi "" }}} + {{{- else }}} 请选择字典生成 {{{- end }}} @@ -76,6 +82,18 @@ {{{- end }}} clearable :disabled="!item.status" + /> + {{{- else if ne .ListAllApi "" }}} + {{{- else }}} @@ -89,14 +107,26 @@ + {{{- else if ne .ListAllApi "" }}} + - {{ item.name }} + {{ item.id }} {{{- else }}} 请选择字典生成 @@ -141,6 +171,10 @@ defineProps({ dictData: { type: Object as PropType>, default: () => ({}) + }, + listAllData:{ + type: Object as PropType>, + default: () => ({}) } }) const emit = defineEmits(['success', 'close']) diff --git a/server/admin/generator/tpl_utils/templates/vue/index-tree.vue.tpl b/server/admin/generator/tpl_utils/templates/vue/index-tree.vue.tpl index aa9dc4a..24c76ce 100644 --- a/server/admin/generator/tpl_utils/templates/vue/index-tree.vue.tpl +++ b/server/admin/generator/tpl_utils/templates/vue/index-tree.vue.tpl @@ -18,9 +18,7 @@ clearable > - {{{- if eq .DictType "" }}} - - {{{- else }}} + {{{- if ne .DictType "" }}} + {{{- else if ne .ListAllApi ""}}} + + + {{{- else }}} + {{{- end }}} @@ -71,6 +79,12 @@ + {{{- else if and (ne .ListAllApi "") (or (eq .HtmlType "select") (eq .HtmlType "radio") (eq .HtmlType "checkbox")) }}} + + + {{{- else if eq .HtmlType "imageUpload" }}}