From 2b1a8ce035fa422c4edf532949c2f51630a9d839 Mon Sep 17 00:00:00 2001 From: xiangheng <11675084@qq.com> Date: Sat, 10 Aug 2024 19:16:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/src/api/system_log_sms.ts | 78 ++++++ admin/src/utils/util.ts | 20 +- admin/src/views/system/log/sms/edit.vue | 188 ++++++++++++++ admin/src/views/system/log/sms/index.vue | 190 +++++++++++++++ server/.vscode/settings.json | 1 + server/admin/generator/tpl_utils/constants.go | 4 +- .../templates/gocode/controller.go.tpl | 26 +- .../tpl_utils/templates/gocode/model.go.tpl | 9 +- .../tpl_utils/templates/gocode/schema.go.tpl | 21 +- .../tpl_utils/templates/gocode/service.go.tpl | 30 ++- .../tpl_utils/templates/uniapp/api.ts.tpl | 10 +- .../templates/uniapp/details.vue.tpl | 12 +- .../tpl_utils/templates/uniapp/edit.vue.tpl | 24 +- .../tpl_utils/templates/uniapp/index.vue.tpl | 6 +- .../tpl_utils/templates/uniapp/search.vue.tpl | 18 +- .../tpl_utils/templates/vue/api.ts.tpl | 10 +- .../tpl_utils/templates/vue/edit.vue.tpl | 58 ++--- .../templates/vue/index-tree.vue.tpl | 36 +-- .../tpl_utils/templates/vue/index.vue.tpl | 36 +-- server/admin/generator/tpl_utils/utils.go | 34 +-- server/admin/system/dept/service.go | 3 - .../system_log_sms/system_log_sms_ctl.go | 206 ++++++++++++++++ .../system_log_sms/system_log_sms_schema.go | 63 +++++ .../system_log_sms/system_log_sms_service.go | 229 ++++++++++++++++++ server/admin/system_log_sms_route.go | 56 +++++ server/go.mod | 1 + server/go.sum | 2 + server/model/system_log_sms.go | 18 ++ server/util/convert.go | 35 ++- server/util/string.go | 1 + x_admin_app/api/system_log_sms.ts | 92 +++++++ x_admin_app/pages.json | 30 ++- x_admin_app/pages/index/index.vue | 62 ++--- x_admin_app/pages/system/log/sms/details.vue | 107 ++++++++ x_admin_app/pages/system/log/sms/edit.vue | 169 +++++++++++++ x_admin_app/pages/system/log/sms/index.vue | 132 ++++++++++ x_admin_app/pages/system/log/sms/pages.json | 32 +++ x_admin_app/pages/system/log/sms/search.vue | 86 +++++++ 38 files changed, 1932 insertions(+), 203 deletions(-) create mode 100644 admin/src/api/system_log_sms.ts create mode 100644 admin/src/views/system/log/sms/edit.vue create mode 100644 admin/src/views/system/log/sms/index.vue create mode 100644 server/admin/system_log_sms/system_log_sms_ctl.go create mode 100644 server/admin/system_log_sms/system_log_sms_schema.go create mode 100644 server/admin/system_log_sms/system_log_sms_service.go create mode 100644 server/admin/system_log_sms_route.go create mode 100644 server/model/system_log_sms.go create mode 100644 x_admin_app/api/system_log_sms.ts create mode 100644 x_admin_app/pages/system/log/sms/details.vue create mode 100644 x_admin_app/pages/system/log/sms/edit.vue create mode 100644 x_admin_app/pages/system/log/sms/index.vue create mode 100644 x_admin_app/pages/system/log/sms/pages.json create mode 100644 x_admin_app/pages/system/log/sms/search.vue diff --git a/admin/src/api/system_log_sms.ts b/admin/src/api/system_log_sms.ts new file mode 100644 index 0000000..4d633ca --- /dev/null +++ b/admin/src/api/system_log_sms.ts @@ -0,0 +1,78 @@ +import request from '@/utils/request' +import type { Pages } from '@/utils/request' + +import config from '@/config' +import queryString from 'query-string' +import { getToken } from '@/utils/auth' + +export type type_system_log_sms = { + id?: number; + scene?: number; + mobile?: string; + content?: string; + status?: number; + results?: string; + send_time?: number; + create_time?: string; + update_time?: string; +} +// 查询 +export type type_system_log_sms_query = { + scene?: number; + mobile?: string; + content?: string; + status?: number; + results?: string; + send_time?: number; + create_timeStart?: string; + create_timeEnd?: string; + update_timeStart?: string; + update_timeEnd?: string; +} +// 添加编辑 +export type type_system_log_sms_edit = { + id?: number; + scene?: number; + mobile?: string; + content?: string; + status?: number; + results?: string; + send_time?: number; +} + +// 系统短信日志列表 +export function system_log_sms_list(params?: type_system_log_sms_query) { + return request.get>({ url: '/system_log_sms/list', params }) +} +// 系统短信日志列表-所有 +export function system_log_sms_list_all(params?: type_system_log_sms_query) { + return request.get({ url: '/system_log_sms/listAll', params }) +} + +// 系统短信日志详情 +export function system_log_sms_detail(id: number | string) { + return request.get({ url: '/system_log_sms/detail', params: { id } }) +} + +// 系统短信日志新增 +export function system_log_sms_add(data: type_system_log_sms_edit) { + return request.post({ url: '/system_log_sms/add', data }) +} + +// 系统短信日志编辑 +export function system_log_sms_edit(data: type_system_log_sms_edit) { + return request.post({ url: '/system_log_sms/edit', data }) +} + +// 系统短信日志删除 +export function system_log_sms_delete(id: number | string) { + return request.post({ url: '/system_log_sms/del', data: { id } }) +} + +// 系统短信日志导入 +export const system_log_sms_import_file = '/system_log_sms/ImportFile' + +// 系统短信日志导出 +export function system_log_sms_export_file(params: any) { + return (window.location.href =`${config.baseUrl}${config.urlPrefix}/system_log_sms/ExportFile?token=${getToken()}&` + queryString.stringify(params)) +} diff --git a/admin/src/utils/util.ts b/admin/src/utils/util.ts index 57e9a26..2e71ae6 100644 --- a/admin/src/utils/util.ts +++ b/admin/src/utils/util.ts @@ -21,12 +21,12 @@ export const addUnit = (value: string | number, unit = 'px') => { } /** - * @description 添加单位 - * @param {unknown} value + * @description 是否为空 + * @param {any} value * @return {Boolean} */ -export const isEmpty = (value: unknown) => { - return value == null && typeof value == 'undefined' +export const isEmpty = (value: any) => { + return value === '' || value === null || value === undefined } /** @@ -134,3 +134,15 @@ export const getNonDuplicateID = (length = 8) => { export const firstToUpperCase = (str = '') => { return str.toLowerCase().replace(/( |^)[a-z]/g, ($1) => $1.toUpperCase()) } + +/** + * @description 清空对象空值属性 + */ +export const clearEmpty = (obj: Record) => { + for (const key of Object.keys(obj)) { + if (isEmpty(obj[key])) { + delete obj[key] + } + } + return obj +} diff --git a/admin/src/views/system/log/sms/edit.vue b/admin/src/views/system/log/sms/edit.vue new file mode 100644 index 0000000..abffed5 --- /dev/null +++ b/admin/src/views/system/log/sms/edit.vue @@ -0,0 +1,188 @@ + + diff --git a/admin/src/views/system/log/sms/index.vue b/admin/src/views/system/log/sms/index.vue new file mode 100644 index 0000000..fe92f2b --- /dev/null +++ b/admin/src/views/system/log/sms/index.vue @@ -0,0 +1,190 @@ + + diff --git a/server/.vscode/settings.json b/server/.vscode/settings.json index 0cd8e2c..ab96258 100644 --- a/server/.vscode/settings.json +++ b/server/.vscode/settings.json @@ -1,5 +1,6 @@ { "cSpell.words": [ + "autosize", "daterange", "datetime", "dcloudio", diff --git a/server/admin/generator/tpl_utils/constants.go b/server/admin/generator/tpl_utils/constants.go index 90cfd59..3aa1127 100644 --- a/server/admin/generator/tpl_utils/constants.go +++ b/server/admin/generator/tpl_utils/constants.go @@ -42,7 +42,8 @@ var SqlConstants = sqlConstants{ //HtmlConstants HTML相关常量 var HtmlConstants = htmlConstants{ - HtmlInput: "input", //文本框 + HtmlInput: "input", //文本框 + HtmlInputNumber: "number", HtmlTextarea: "textarea", //文本域 HtmlSelect: "select", //下拉框 HtmlRadio: "radio", //单选框 @@ -82,6 +83,7 @@ type sqlConstants struct { type htmlConstants struct { HtmlInput string + HtmlInputNumber string HtmlTextarea string HtmlSelect string HtmlRadio string 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 8a4d620..3619fe7 100644 --- a/server/admin/generator/tpl_utils/templates/gocode/controller.go.tpl +++ b/server/admin/generator/tpl_utils/templates/gocode/controller.go.tpl @@ -26,10 +26,10 @@ type {{{ toUpperCamelCase .ModuleName }}}Handler struct { {{{- range .Columns }}} {{{- if .IsQuery }}} {{{- if eq .HtmlType "datetime" }}} -// @Param {{{ toCamelCase .GoField }}}Start query {{{ .GoType }}} false "{{{ .ColumnComment }}}" -// @Param {{{ toCamelCase .GoField }}}End query {{{ .GoType }}} false "{{{ .ColumnComment }}}" +// @Param {{{ .GoField }}}_start query {{{ .GoType }}} false "{{{ .ColumnComment }}}" +// @Param {{{ .GoField }}}_end query {{{ .GoType }}} false "{{{ .ColumnComment }}}" {{{- else }}} -// @Param {{{ toCamelCase .GoField }}} query {{{ .GoType }}} false "{{{ .ColumnComment }}}" +// @Param {{{ .GoField }}} query {{{ .GoType }}} false "{{{ .ColumnComment }}}" {{{- end }}} {{{- end }}} {{{- end }}} @@ -54,10 +54,10 @@ func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) List(c *gin.Context) { {{{- range .Columns }}} {{{- if .IsQuery }}} {{{- if eq .HtmlType "datetime" }}} -// @Param {{{ toCamelCase .GoField }}}Start query {{{ .GoType }}} false "{{{ .ColumnComment }}}" -// @Param {{{ toCamelCase .GoField }}}End query {{{ .GoType }}} false "{{{ .ColumnComment }}}" +// @Param {{{ .GoField }}}_start query {{{ .GoType }}} false "{{{ .ColumnComment }}}" +// @Param {{{ .GoField }}}_end query {{{ .GoType }}} false "{{{ .ColumnComment }}}" {{{- else }}} -// @Param {{{ toCamelCase .GoField }}} query {{{ .GoType }}} false "{{{ .ColumnComment }}}" +// @Param {{{ .GoField }}} query {{{ .GoType }}} false "{{{ .ColumnComment }}}" {{{- end }}} {{{- end }}} {{{- end }}} @@ -78,7 +78,7 @@ func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) ListAll(c *gin.Context) // @Param Token header string true "token" {{{- range .Columns }}} {{{- if .IsPk }}} -// @Param {{{ toCamelCase .GoField }}} query {{{ .GoType }}} false "{{{ .ColumnComment }}}" +// @Param {{{ .GoField }}} query {{{ .GoType }}} false "{{{ .ColumnComment }}}" {{{- end }}} {{{- end }}} // @Success 200 {object} response.Response{ data={{{ toUpperCamelCase .EntityName }}}Resp} "成功" @@ -103,7 +103,7 @@ func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) Detail(c *gin.Context) { // @Param Token header string true "token" {{{- range .Columns }}} {{{- if .IsInsert }}} -// @Param {{{ toCamelCase .GoField }}} body {{{ .GoType }}} false "{{{ .ColumnComment }}}" +// @Param {{{ .GoField }}} body {{{ .GoType }}} false "{{{ .ColumnComment }}}" {{{- end }}} {{{- end }}} // @Success 200 {object} response.Response "成功" @@ -122,7 +122,7 @@ func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) Add(c *gin.Context) { // @Param Token header string true "token" {{{- range .Columns }}} {{{- if .IsEdit }}} -// @Param {{{ toCamelCase .GoField }}} body {{{ .GoType }}} false "{{{ .ColumnComment }}}" +// @Param {{{ .GoField }}} body {{{ .GoType }}} false "{{{ .ColumnComment }}}" {{{- end }}} {{{- end }}} // @Success 200 {object} response.Response "成功" @@ -140,7 +140,7 @@ func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) Edit(c *gin.Context) { // @Param Token header string true "token" {{{- range .Columns }}} {{{- if .IsPk }}} -// @Param {{{ toCamelCase .GoField }}} body {{{ .GoType }}} false "{{{ .ColumnComment }}}" +// @Param {{{ .GoField }}} body {{{ .GoType }}} false "{{{ .ColumnComment }}}" {{{- end }}} {{{- end }}} // @Success 200 {object} response.Response "成功" @@ -162,10 +162,10 @@ func (hd *{{{ toUpperCamelCase .ModuleName }}}Handler) Del(c *gin.Context) { {{{- range .Columns }}} {{{- if .IsQuery }}} {{{- if eq .HtmlType "datetime" }}} -// @Param {{{ toCamelCase .GoField }}}Start query {{{ .GoType }}} false "{{{ .ColumnComment }}}" -// @Param {{{ toCamelCase .GoField }}}End query {{{ .GoType }}} false "{{{ .ColumnComment }}}" +// @Param {{{ .GoField }}}_start query {{{ .GoType }}} false "{{{ .ColumnComment }}}" +// @Param {{{ .GoField }}}_end query {{{ .GoType }}} false "{{{ .ColumnComment }}}" {{{- else }}} -// @Param {{{ toCamelCase .GoField }}} query {{{ .GoType }}} false "{{{ .ColumnComment }}}" +// @Param {{{ .GoField }}} query {{{ .GoType }}} false "{{{ .ColumnComment }}}" {{{- end }}} {{{- end }}} {{{- end }}} 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 1196856..9c28f9c 100644 --- a/server/admin/generator/tpl_utils/templates/gocode/model.go.tpl +++ b/server/admin/generator/tpl_utils/templates/gocode/model.go.tpl @@ -2,7 +2,6 @@ package model import ( "x_admin/core" "gorm.io/plugin/soft_delete" - "github.com/guregu/null/v5" ) //{{{ toUpperCamelCase .EntityName }}} {{{ .FunctionName }}}实体 @@ -10,14 +9,14 @@ type {{{ toUpperCamelCase .EntityName }}} struct { {{{- range .Columns }}} {{{- if not (contains $.SubTableFields .ColumnName) }}} {{{- if eq .GoField "is_delete" }}} - IsDelete soft_delete.DeletedAt `gorm:"not null;default:0;softDelete:flag,DeletedAtField:DeleteTime;comment:'是否删除: 0=否, 1=是'"` + IsDelete soft_delete.DeletedAt `mapstructure:"{{{ .GoField }}}" gorm:"not null;default:0;softDelete:flag,DeletedAtField:DeleteTime;comment:'是否删除: 0=否, 1=是'"` {{{- 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 }}} + {{{ toUpperCamelCase .GoField }}} core.TsTime `mapstructure:"{{{ .GoField }}}" 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 }}} + {{{ toUpperCamelCase .GoField }}} {{{ .GoType }}} `mapstructure:"{{{ .GoField }}}" gorm:"primarykey;" excel:"name:{{{ .ColumnComment }}};"` // {{{ .ColumnComment }}} {{{- else }}} - {{{ toUpperCamelCase .GoField }}} {{{goToNullType .GoType }}} `gorm:"" excel:"name:{{{ .ColumnComment }}};"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} {{{ .GoType }}} `mapstructure:"{{{ .GoField }}}" excel:"name:{{{ .ColumnComment }}};"` // {{{ .ColumnComment }}} {{{- end }}} {{{- end }}} 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 7638cbc..d5deb5c 100644 --- a/server/admin/generator/tpl_utils/templates/gocode/schema.go.tpl +++ b/server/admin/generator/tpl_utils/templates/gocode/schema.go.tpl @@ -2,7 +2,6 @@ package {{{ .ModuleName }}} import ( "x_admin/core" - "github.com/guregu/null/v5" ) //{{{ toUpperCamelCase .EntityName }}}ListReq {{{ .FunctionName }}}列表参数 @@ -10,10 +9,10 @@ type {{{ toUpperCamelCase .EntityName }}}ListReq struct { {{{- range .Columns }}} {{{- if .IsQuery }}} {{{- if eq .HtmlType "datetime" }}} - {{{ toUpperCamelCase .GoField }}}Start null.String `form:"{{{ toCamelCase .GoField }}}Start"` // 开始{{{ .ColumnComment }}} - {{{ toUpperCamelCase .GoField }}}End null.String `form:"{{{ toCamelCase .GoField }}}End"` // 结束{{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}}Start *string `mapstructure:"{{{ .GoField }}}_start" json:"{{{ .GoField }}}_start" form:"{{{ .GoField }}}_start"` // 开始{{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}}End *string `mapstructure:"{{{ .GoField }}}_end" json:"{{{ .GoField }}}_end" form:"{{{ .GoField }}}_end"` // 结束{{{ .ColumnComment }}} {{{- else }}} - {{{ toUpperCamelCase .GoField }}} {{{goToNullType .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} *{{{.GoType }}} `mapstructure:"{{{ .GoField }}}" json:"{{{ .GoField }}}" form:"{{{ .GoField }}}"` // {{{ .ColumnComment }}} {{{- end }}} {{{- end }}} {{{- end }}} @@ -25,7 +24,7 @@ type {{{ toUpperCamelCase .EntityName }}}ListReq struct { type {{{ toUpperCamelCase .EntityName }}}AddReq struct { {{{- range .Columns }}} {{{- if .IsInsert }}} - {{{ toUpperCamelCase .GoField }}} {{{goToNullType .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} interface{} `mapstructure:"{{{ .GoField }}}" json:"{{{ .GoField }}} form:"{{{ .GoField }}}"` // {{{ .ColumnComment }}} {{{- end }}} {{{- end }}} } @@ -35,9 +34,9 @@ type {{{ toUpperCamelCase .EntityName }}}EditReq struct { {{{- range .Columns }}} {{{- if .IsEdit }}} {{{- if .IsPk }}} - {{{ toUpperCamelCase .GoField }}} {{{ .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} {{{ .GoType }}} `mapstructure:"{{{ .GoField }}}" json:"{{{ .GoField }}}" form:"{{{ .GoField }}}"` // {{{ .ColumnComment }}} {{{- else }}} - {{{ toUpperCamelCase .GoField }}} {{{goToNullType .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} interface{} `mapstructure:"{{{ .GoField }}}" json:"{{{ .GoField }}}" form:"{{{ .GoField }}}"` // {{{ .ColumnComment }}} {{{- end }}} {{{- end }}} {{{- end }}} @@ -47,7 +46,7 @@ type {{{ toUpperCamelCase .EntityName }}}EditReq struct { type {{{ toUpperCamelCase .EntityName }}}DetailReq struct { {{{- range .Columns }}} {{{- if .IsPk }}} - {{{ toUpperCamelCase .GoField }}} {{{.GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} {{{.GoType }}} `form:"{{{ .GoField }}}"` // {{{ .ColumnComment }}} {{{- end }}} {{{- end }}} } @@ -56,7 +55,7 @@ type {{{ toUpperCamelCase .EntityName }}}DetailReq struct { type {{{ toUpperCamelCase .EntityName }}}DelReq struct { {{{- range .Columns }}} {{{- if .IsPk }}} - {{{ toUpperCamelCase .GoField }}} {{{ .GoType }}} `form:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} {{{ .GoType }}} `form:"{{{ .GoField }}}"` // {{{ .ColumnComment }}} {{{- end }}} {{{- end }}} } @@ -66,9 +65,9 @@ type {{{ toUpperCamelCase .EntityName }}}Resp struct { {{{- range .Columns }}} {{{- if or .IsList .IsPk }}} {{{- if .IsPk }}} - {{{ toUpperCamelCase .GoField }}} {{{ .GoType }}} `json:"{{{ toCamelCase .GoField }}}" structs:"{{{ toCamelCase .GoField }}}"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} {{{ .GoType }}} `mapstructure:"{{{ .GoField }}}" json:"{{{ .GoField }}}"` // {{{ .ColumnComment }}} {{{- else }}} - {{{ toUpperCamelCase .GoField }}} {{{goToNullType .GoType }}} `json:"{{{ toCamelCase .GoField }}}" structs:"{{{ toCamelCase .GoField }}}" excel:"name:{{{ .ColumnComment }}};"` // {{{ .ColumnComment }}} + {{{ toUpperCamelCase .GoField }}} {{{ .GoType }}} `mapstructure:"{{{ .GoField }}}" json:"{{{ .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 eee5e44..cb1991e 100644 --- a/server/admin/generator/tpl_utils/templates/gocode/service.go.tpl +++ b/server/admin/generator/tpl_utils/templates/gocode/service.go.tpl @@ -7,6 +7,7 @@ import ( "x_admin/model" "gorm.io/gorm" "x_admin/util" + "github.com/duke-git/lancet/v2/convertor" ) var {{{ toUpperCamelCase .EntityName }}}Service=New{{{ toUpperCamelCase .EntityName }}}Service() @@ -38,20 +39,20 @@ func (service {{{ toCamelCase .EntityName }}}Service) GetModel(listReq {{{ toUpp {{{- if .IsQuery }}} {{{- $queryOpr := index $.ModelOprMap .QueryType }}} {{{- if eq .HtmlType "datetime" }}} - if listReq.{{{ toUpperCamelCase .ColumnName }}}Start.Valid { - dbModel = dbModel.Where("{{{ .ColumnName }}} >= ?", listReq.{{{ toUpperCamelCase .ColumnName }}}Start.ValueOrZero()) + if listReq.{{{ toUpperCamelCase .ColumnName }}}Start!= nil { + dbModel = dbModel.Where("{{{ .ColumnName }}} >= ?", *listReq.{{{ toUpperCamelCase .ColumnName }}}Start) } - if listReq.{{{ toUpperCamelCase .ColumnName }}}End.Valid { - dbModel = dbModel.Where("{{{ .ColumnName }}} <= ?", listReq.{{{ toUpperCamelCase .ColumnName }}}End.ValueOrZero()) + if listReq.{{{ toUpperCamelCase .ColumnName }}}End!= nil { + dbModel = dbModel.Where("{{{ .ColumnName }}} <= ?", *listReq.{{{ toUpperCamelCase .ColumnName }}}End) } {{{- else }}} {{{- if and (eq .GoType "string") (eq $queryOpr "like") }}} - if listReq.{{{ toUpperCamelCase .ColumnName }}}.Valid { - dbModel = dbModel.Where("{{{ .ColumnName }}} like ?", "%"+listReq.{{{ toUpperCamelCase .ColumnName }}}.ValueOrZero()+"%") + if listReq.{{{ toUpperCamelCase .ColumnName }}}!= nil { + dbModel = dbModel.Where("{{{ .ColumnName }}} like ?", "%"+*listReq.{{{ toUpperCamelCase .ColumnName }}}+"%") } {{{- else }}} - if listReq.{{{ toUpperCamelCase .ColumnName }}}.Valid { - dbModel = dbModel.Where("{{{ .ColumnName }}} = ?", listReq.{{{ toUpperCamelCase .ColumnName }}}.ValueOrZero()) + if listReq.{{{ toUpperCamelCase .ColumnName }}}!= nil { + dbModel = dbModel.Where("{{{ .ColumnName }}} = ?", *listReq.{{{ toUpperCamelCase .ColumnName }}}) } {{{- end }}} {{{- end }}} @@ -155,12 +156,19 @@ func (service {{{ toCamelCase .EntityName }}}Service) Edit(editReq {{{ toUpperCa return } // 更新 - response.Copy(&obj, editReq) - err = service.db.Model(&obj).Select("*").Updates(obj).Error + // response.Copy(&obj, editReq) + // + editInfo, err := convertor.StructToMap(editReq) + if err != nil { + return err + } + + err = service.db.Model(&obj).Updates(editInfo).Error if e = response.CheckErr(err, "编辑失败"); e != nil { return } - cacheUtil.SetCache(obj.{{{ toUpperCamelCase .PrimaryKey }}}, obj) + cacheUtil.RemoveCache(obj.Id) + service.Detail(obj.Id) return } diff --git a/server/admin/generator/tpl_utils/templates/uniapp/api.ts.tpl b/server/admin/generator/tpl_utils/templates/uniapp/api.ts.tpl index ca7cb20..545f4c0 100644 --- a/server/admin/generator/tpl_utils/templates/uniapp/api.ts.tpl +++ b/server/admin/generator/tpl_utils/templates/uniapp/api.ts.tpl @@ -2,7 +2,7 @@ import { request } from '@/utils/request' import type { Pages } from '@/utils/request' export type type_{{{.ModuleName}}} = { {{{- range .Columns }}} - {{{ toCamelCase .GoField }}}?: {{{goToTsType .GoType}}}; + {{{ .GoField }}}?: {{{goToTsType .GoType}}}; {{{- end }}} } // 查询 @@ -10,10 +10,10 @@ export type type_{{{.ModuleName}}}_query = { {{{- range .Columns }}} {{{- if .IsQuery }}} {{{- if eq .HtmlType "datetime" }}} - {{{ toCamelCase .GoField }}}Start?: string; - {{{ toCamelCase .GoField }}}End?: string; + {{{ .GoField }}}_start?: string; + {{{ .GoField }}}_end?: string; {{{- else }}} - {{{ toCamelCase .GoField }}}?: {{{goToTsType .GoType}}}; + {{{ .GoField }}}?: {{{goToTsType .GoType}}}; {{{- end }}} {{{- end }}} {{{- end }}} @@ -22,7 +22,7 @@ export type type_{{{.ModuleName}}}_query = { export type type_{{{.ModuleName}}}_edit = { {{{- range .Columns }}} {{{- if or .IsEdit .IsInsert }}} - {{{ toCamelCase .GoField }}}?: {{{goToTsType .GoType}}}; + {{{ .GoField }}}?: {{{goToTsType .GoType}}}; {{{- end }}} {{{- end }}} } 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 d973c20..1abf841 100644 --- a/server/admin/generator/tpl_utils/templates/uniapp/details.vue.tpl +++ b/server/admin/generator/tpl_utils/templates/uniapp/details.vue.tpl @@ -3,15 +3,15 @@ {{{- range .Columns }}} {{{- if .IsList }}} - + {{{- 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 }}} - {{form.{{{(toCamelCase .GoField)}}}}} + {{form.{{{(.GoField)}}}}} {{{- end }}} {{{- end }}} @@ -44,7 +44,7 @@ let form = ref({ {{{- range .Columns }}} {{{- if or .IsList .IsPk }}} - {{{ toCamelCase .GoField }}}: "", + {{{ .GoField }}}: "", {{{- end }}} {{{- end }}} }); 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 d44f90e..c207716 100644 --- a/server/admin/generator/tpl_utils/templates/uniapp/edit.vue.tpl +++ b/server/admin/generator/tpl_utils/templates/uniapp/edit.vue.tpl @@ -3,20 +3,20 @@ {{{- range .Columns }}} {{{- if .IsEdit }}} - + {{{- if eq .HtmlType "input" }}} - + {{{- else if eq .HtmlType "number" }}} - + {{{- else if eq .HtmlType "textarea" }}} - + {{{- else if eq .HtmlType "datetime" }}} - + {{{- else if or (eq .HtmlType "checkbox") (eq .HtmlType "radio") (eq .HtmlType "select")}}} {{{- if ne .DictType "" }}} - + {{{- else if ne .ListAllApi "" }}} - + {{{- else }}} 请选择字典生成代码 {{{- end }}} @@ -55,15 +55,15 @@ let formRef = ref(); let form = ref({ {{{- range .Columns }}} - {{{- if eq (toCamelCase .GoField) $.PrimaryKey }}} + {{{- if eq (.GoField) $.PrimaryKey }}} {{{ $.PrimaryKey }}}: '', {{{- else if .IsEdit }}} {{{- if eq .HtmlType "checkbox" }}} - {{{ (toCamelCase .GoField) }}}: [], + {{{ (.GoField) }}}: [], {{{- else if eq .HtmlType "number" }}} - {{{ (toCamelCase .GoField) }}}: 0, + {{{ (.GoField) }}}: 0, {{{- else }}} - {{{ (toCamelCase .GoField) }}}: '', + {{{ (.GoField) }}}: '', {{{- end }}} {{{- end }}} {{{- end }}} @@ -71,7 +71,7 @@ const formRules = { {{{- range .Columns }}} {{{- if and .IsEdit .IsRequired }}} - {{{ (toCamelCase .GoField) }}}: [ + {{{ (.GoField) }}}: [ { required: true, {{{- if or (eq .HtmlType "checkbox") (eq .HtmlType "datetime") (eq .HtmlType "radio") (eq .HtmlType "select") (eq .HtmlType "imageUpload") }}} 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 e717850..b011032 100644 --- a/server/admin/generator/tpl_utils/templates/uniapp/index.vue.tpl +++ b/server/admin/generator/tpl_utils/templates/uniapp/index.vue.tpl @@ -72,10 +72,10 @@ const queryParams = reactive({ {{{- range .Columns }}} {{{- if .IsQuery }}} {{{- if eq .HtmlType "datetime" }}} - {{{ (toCamelCase .GoField) }}}Start: '', - {{{ (toCamelCase .GoField) }}}End: '', + {{{ (.GoField) }}}_start: '', + {{{ (.GoField) }}}_end: '', {{{- else }}} - {{{ (toCamelCase .GoField) }}}: '', + {{{ (.GoField) }}}: '', {{{- end }}} {{{- end }}} {{{- end }}} 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 bfe5c0d..81e5407 100644 --- a/server/admin/generator/tpl_utils/templates/uniapp/search.vue.tpl +++ b/server/admin/generator/tpl_utils/templates/uniapp/search.vue.tpl @@ -3,18 +3,18 @@ {{{- range .Columns }}} {{{- if eq .IsQuery 1 }}} - + {{{- if eq .HtmlType "datetime" }}} - + {{{- 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 }}} {{{- end }}} @@ -71,10 +71,10 @@ const { listAllData } = useListAllData<{ {{{- range .Columns }}} {{{- if .IsQuery }}} {{{- if eq .HtmlType "datetime" }}} - {{{ (toCamelCase .GoField) }}}Start: null, - {{{ (toCamelCase .GoField) }}}End: null, + {{{ (.GoField) }}}_start: null, + {{{ (.GoField) }}}_end: null, {{{- else }}} - {{{ (toCamelCase .GoField) }}}: null, + {{{ (.GoField) }}}: null, {{{- end }}} {{{- end }}} {{{- end }}} diff --git a/server/admin/generator/tpl_utils/templates/vue/api.ts.tpl b/server/admin/generator/tpl_utils/templates/vue/api.ts.tpl index 74ffb1b..f75e329 100644 --- a/server/admin/generator/tpl_utils/templates/vue/api.ts.tpl +++ b/server/admin/generator/tpl_utils/templates/vue/api.ts.tpl @@ -7,7 +7,7 @@ import { getToken } from '@/utils/auth' export type type_{{{.ModuleName}}} = { {{{- range .Columns }}} - {{{ toCamelCase .GoField }}}?: {{{goToTsType .GoType}}}; + {{{ .GoField }}}?: {{{goToTsType .GoType}}}; {{{- end }}} } // 查询 @@ -15,10 +15,10 @@ export type type_{{{.ModuleName}}}_query = { {{{- range .Columns }}} {{{- if .IsQuery }}} {{{- if eq .HtmlType "datetime" }}} - {{{ toCamelCase .GoField }}}Start?: string; - {{{ toCamelCase .GoField }}}End?: string; + {{{ .GoField }}}_start?: string; + {{{ .GoField }}}_end?: string; {{{- else }}} - {{{ toCamelCase .GoField }}}?: {{{goToTsType .GoType}}}; + {{{ .GoField }}}?: {{{goToTsType .GoType}}}; {{{- end }}} {{{- end }}} {{{- end }}} @@ -27,7 +27,7 @@ export type type_{{{.ModuleName}}}_query = { export type type_{{{.ModuleName}}}_edit = { {{{- range .Columns }}} {{{- if or .IsEdit .IsInsert }}} - {{{ toCamelCase .GoField }}}?: {{{goToTsType .GoType}}}; + {{{ .GoField }}}?: {{{goToTsType .GoType}}}; {{{- end }}} {{{- end }}} } 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 d6dadaa..9617468 100644 --- a/server/admin/generator/tpl_utils/templates/vue/edit.vue.tpl +++ b/server/admin/generator/tpl_utils/templates/vue/edit.vue.tpl @@ -12,12 +12,12 @@ {{{- range .Columns }}} {{{- if .IsEdit }}} - {{{- if ne (toCamelCase .GoField) "id" }}} - {{{- if and (ne $.Table.TreeParent "") (eq (toCamelCase .GoField) $.Table.TreeParent) }}} - + {{{- if ne (.GoField) "id" }}} + {{{- if and (ne $.Table.TreeParent "") (eq (.GoField) $.Table.TreeParent) }}} + {{{- else if eq .HtmlType "input" }}} - - + + {{{- else if eq .HtmlType "number" }}} - - + + {{{- else if eq .HtmlType "textarea" }}} - + {{{- else if eq .HtmlType "checkbox" }}} - - + + {{{- if ne .DictType "" }}} {{{- else if eq .HtmlType "select" }}} - - + + {{{- if ne .DictType "" }}} {{{- else if eq .HtmlType "radio" }}} - - + + {{{- if ne .DictType "" }}} {{{- else if eq .HtmlType "datetime" }}} - + {{{- else if eq .HtmlType "editor" }}} - - + + {{{- else if eq .HtmlType "imageUpload" }}} - - + + {{{- end }}} {{{- end }}} @@ -190,15 +190,15 @@ const popupTitle = computed(() => { const formData = reactive({ {{{- range .Columns }}} - {{{- if eq (toCamelCase .GoField) $.PrimaryKey }}} + {{{- if eq (.GoField) $.PrimaryKey }}} {{{ $.PrimaryKey }}}: '', {{{- else if .IsEdit }}} {{{- if eq .HtmlType "checkbox" }}} - {{{ (toCamelCase .GoField) }}}: [], + {{{ (.GoField) }}}: [], {{{- else if eq .HtmlType "number" }}} - {{{ (toCamelCase .GoField) }}}: 0, + {{{ (.GoField) }}}: 0, {{{- else }}} - {{{ (toCamelCase .GoField) }}}: '', + {{{ (.GoField) }}}: '', {{{- end }}} {{{- end }}} {{{- end }}} @@ -207,7 +207,7 @@ const formData = reactive({ const formRules = { {{{- range .Columns }}} {{{- if and .IsEdit .IsRequired }}} - {{{ (toCamelCase .GoField) }}}: [ + {{{ (.GoField) }}}: [ { required: true, {{{- if or (eq .HtmlType "checkbox") (eq .HtmlType "datetime") (eq .HtmlType "radio") (eq .HtmlType "select") (eq .HtmlType "imageUpload") }}} @@ -228,7 +228,7 @@ const handleSubmit = async () => { const data: any = { ...formData } {{{- range .Columns }}} {{{- if eq .HtmlType "checkbox" }}} - data.{{{ (toCamelCase .GoField) }}} = data.{{{ (toCamelCase .GoField) }}}.join(',') + data.{{{ (.GoField) }}} = data.{{{ (.GoField) }}}.join(',') {{{- end }}} {{{- end }}} mode.value == 'edit' ? await {{{ .ModuleName }}}_edit(data) : await {{{ .ModuleName }}}_add(data) @@ -251,7 +251,7 @@ const setFormData = async (data: Record) => { {{{- range .Columns }}} {{{- if eq .HtmlType "checkbox" }}} //@ts-ignore - formData.{{{ (toCamelCase .GoField) }}} = String(data.{{{ (toCamelCase .GoField) }}}).split(',') + formData.{{{ (.GoField) }}} = String(data.{{{ (.GoField) }}}).split(',') {{{- end }}} {{{- end }}} } 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 24c76ce..2572c4d 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 @@ -5,16 +5,16 @@ {{{- range .Columns }}} {{{- if eq .IsQuery 1 }}} {{{- if eq .HtmlType "datetime" }}} - + {{{- else if or (eq .HtmlType "select") (eq .HtmlType "radio") }}} - + @@ -40,8 +40,8 @@ {{{- else if eq .HtmlType "input" }}} - - + + {{{- end }}} {{{- end }}} @@ -74,32 +74,32 @@ {{{- range .Columns }}} {{{- if .IsList }}} {{{- 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 }}} - + {{{- end }}} {{{- end }}} {{{- end }}} @@ -172,10 +172,10 @@ const queryParams = reactive({ {{{- range .Columns }}} {{{- if .IsQuery }}} {{{- if eq .HtmlType "datetime" }}} - {{{ (toCamelCase .GoField) }}}Start: '', - {{{ (toCamelCase .GoField) }}}End: '', + {{{ (.GoField) }}}_start: '', + {{{ (.GoField) }}}_end: '', {{{- else }}} - {{{ (toCamelCase .GoField) }}}: '', + {{{ (.GoField) }}}: '', {{{- end }}} {{{- end }}} {{{- end }}} diff --git a/server/admin/generator/tpl_utils/templates/vue/index.vue.tpl b/server/admin/generator/tpl_utils/templates/vue/index.vue.tpl index 6b6ff73..53e6d64 100644 --- a/server/admin/generator/tpl_utils/templates/vue/index.vue.tpl +++ b/server/admin/generator/tpl_utils/templates/vue/index.vue.tpl @@ -6,16 +6,16 @@ {{{- range .Columns }}} {{{- if eq .IsQuery 1 }}} {{{- if eq .HtmlType "datetime" }}} - + {{{- else if or (eq .HtmlType "select") (eq .HtmlType "radio") }}} - + {{{- if ne .DictType "" }}} @@ -41,8 +41,8 @@ {{{- else if eq .HtmlType "input" }}} - - + + {{{- end }}} {{{- end }}} @@ -92,33 +92,33 @@ {{{- range .Columns }}} {{{- if .IsList }}} {{{- 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 }}} - + {{{- end }}} {{{- end }}} {{{- end }}} @@ -181,10 +181,10 @@ const queryParams = reactive({ {{{- range .Columns }}} {{{- if .IsQuery }}} {{{- if eq .HtmlType "datetime" }}} - {{{ (toCamelCase .GoField) }}}Start: null, - {{{ (toCamelCase .GoField) }}}End: null, + {{{ (.GoField) }}}_start: null, + {{{ (.GoField) }}}_end: null, {{{- else }}} - {{{ (toCamelCase .GoField) }}}: null, + {{{ (.GoField) }}}: null, {{{- end }}} {{{- end }}} {{{- end }}} diff --git a/server/admin/generator/tpl_utils/utils.go b/server/admin/generator/tpl_utils/utils.go index 51ef53b..56e9123 100644 --- a/server/admin/generator/tpl_utils/utils.go +++ b/server/admin/generator/tpl_utils/utils.go @@ -112,7 +112,7 @@ func (gu genUtil) InitColumn(tableId uint, column gen_model.GenTableColumn) gen_ col.HtmlType = HtmlConstants.HtmlDatetime } else if util.ToolsUtil.Contains(SqlConstants.ColumnTypeNumber, columnType) { //数字字段 - col.HtmlType = HtmlConstants.HtmlInput + col.HtmlType = HtmlConstants.HtmlInputNumber if strings.Contains(columnType, ",") { col.GoType = GoConstants.TypeFloat } else { @@ -244,22 +244,22 @@ func (gu genUtil) GoToTsType(s string) string { * @description: Go类型转可为null类型,转换后还能解决前端对int传了string类型错误问题 */ func (gu genUtil) GoToNullType(s string) string { - if s == "int64" { - return "null.Int" - } else if s == "int32" || s == "int" { - return "null.Int32" - } else if s == "int8" || s == "int16" { - return "null.Int16" - } else if s == "float" || s == "float32" || s == "float64" { - return "null.Float" - } else if s == "string" { - return "null.String" - } else if s == "bool" { - return "null.Bool" - } else if s == "time.Time" { - return "null.Time" - } - return s + // if s == "int64" { + // return "null.Int" + // } else if s == "int32" || s == "int" { + // return "null.Int32" + // } else if s == "int8" || s == "int16" { + // return "null.Int16" + // } else if s == "float" || s == "float32" || s == "float64" { + // return "null.Float" + // } else if s == "string" { + // return "null.String" + // } else if s == "bool" { + // return "null.Bool" + // } else if s == "time.Time" { + // return "null.Time" + // } + return "*" + s } // 拼接字符串 diff --git a/server/admin/system/dept/service.go b/server/admin/system/dept/service.go index 0783326..38f72d1 100644 --- a/server/admin/system/dept/service.go +++ b/server/admin/system/dept/service.go @@ -56,10 +56,7 @@ func (service systemAuthDeptService) List(listReq SystemAuthDeptListReq) (deptRe if e = response.CheckErr(err, "列表获取失败"); e != nil { return } - // deptResps = []SystemAuthDeptResp{} response.Copy(&deptResps, depts) - // mapList = util.ArrayUtil.ListToTree( - // util.ConvertUtil.StructsToMaps(deptResps), "id", "pid", "children") return } diff --git a/server/admin/system_log_sms/system_log_sms_ctl.go b/server/admin/system_log_sms/system_log_sms_ctl.go new file mode 100644 index 0000000..e3588e8 --- /dev/null +++ b/server/admin/system_log_sms/system_log_sms_ctl.go @@ -0,0 +1,206 @@ +package system_log_sms + +import ( + "net/http" + "strconv" + "time" + "github.com/gin-gonic/gin" + "x_admin/core/request" + "x_admin/core/response" + "x_admin/util" + "x_admin/util/excel" + "golang.org/x/sync/singleflight" +) + + +type SystemLogSmsHandler struct { + requestGroup singleflight.Group +} + +// @Summary 系统短信日志列表 +// @Tags system_log_sms-系统短信日志 +// @Produce json +// @Param Token header string true "token" +// @Param PageNo query int true "页码" +// @Param PageSize query int true "每页数量" +// @Param scene query int false "场景编号" +// @Param mobile query string false "手机号码" +// @Param content query string false "发送内容" +// @Param status query int false "发送状态:[0=发送中, 1=发送成功, 2=发送失败]" +// @Param results query string false "短信结果" +// @Param send_time query int false "发送时间" +// @Param create_timeStart query core.TsTime false "创建时间" +// @Param create_timeEnd query core.TsTime false "创建时间" +// @Param update_timeStart query core.TsTime false "更新时间" +// @Param update_timeEnd query core.TsTime false "更新时间" +//@Success 200 {object} response.Response{ data=response.PageResp{ lists= []SystemLogSmsResp}} "成功" +//@Router /api/admin/system_log_sms/list [get] +func (hd *SystemLogSmsHandler) List(c *gin.Context) { + var page request.PageReq + var listReq SystemLogSmsListReq + if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) { + return + } + if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) { + return + } + res, err := SystemLogSmsService.List(page, listReq) + response.CheckAndRespWithData(c, res, err) +} + +// @Summary 系统短信日志列表-所有 +// @Tags system_log_sms-系统短信日志 +// @Produce json +// @Param scene query int false "场景编号" +// @Param mobile query string false "手机号码" +// @Param content query string false "发送内容" +// @Param status query int false "发送状态:[0=发送中, 1=发送成功, 2=发送失败]" +// @Param results query string false "短信结果" +// @Param send_time query int false "发送时间" +// @Param create_timeStart query core.TsTime false "创建时间" +// @Param create_timeEnd query core.TsTime false "创建时间" +// @Param update_timeStart query core.TsTime false "更新时间" +// @Param update_timeEnd query core.TsTime false "更新时间" +// @Success 200 {object} response.Response{ data=[]SystemLogSmsResp} "成功" +// @Router /api/admin/system_log_sms/listAll [get] +func (hd *SystemLogSmsHandler) ListAll(c *gin.Context) { + var listReq SystemLogSmsListReq + if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) { + return + } + res, err := SystemLogSmsService.ListAll(listReq) + response.CheckAndRespWithData(c, res, err) +} + +// @Summary 系统短信日志详情 +// @Tags system_log_sms-系统短信日志 +// @Produce json +// @Param Token header string true "token" +// @Param id query int false "id" +// @Success 200 {object} response.Response{ data=SystemLogSmsResp} "成功" +// @Router /api/admin/system_log_sms/detail [get] +func (hd *SystemLogSmsHandler) Detail(c *gin.Context) { + var detailReq SystemLogSmsDetailReq + if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) { + return + } + res, err, _ := hd.requestGroup.Do("SystemLogSms:Detail:"+strconv.Itoa(detailReq.Id), func() (any, error) { + v, err := SystemLogSmsService.Detail(detailReq.Id) + return v, err + }) + + response.CheckAndRespWithData(c, res, err) +} + + +// @Summary 系统短信日志新增 +// @Tags system_log_sms-系统短信日志 +// @Produce json +// @Param Token header string true "token" +// @Param scene body int false "场景编号" +// @Param mobile body string false "手机号码" +// @Param content body string false "发送内容" +// @Param status body int false "发送状态:[0=发送中, 1=发送成功, 2=发送失败]" +// @Param results body string false "短信结果" +// @Param send_time body int false "发送时间" +// @Success 200 {object} response.Response "成功" +// @Router /api/admin/system_log_sms/add [post] +func (hd *SystemLogSmsHandler) Add(c *gin.Context) { + var addReq SystemLogSmsAddReq + if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &addReq)) { + return + } + createId, e := SystemLogSmsService.Add(addReq) + response.CheckAndRespWithData(c,createId, e) +} +// @Summary 系统短信日志编辑 +// @Tags system_log_sms-系统短信日志 +// @Produce json +// @Param Token header string true "token" +// @Param id body int false "id" +// @Param scene body int false "场景编号" +// @Param mobile body string false "手机号码" +// @Param content body string false "发送内容" +// @Param status body int false "发送状态:[0=发送中, 1=发送成功, 2=发送失败]" +// @Param results body string false "短信结果" +// @Param send_time body int false "发送时间" +// @Success 200 {object} response.Response "成功" +// @Router /api/admin/system_log_sms/edit [post] +func (hd *SystemLogSmsHandler) Edit(c *gin.Context) { + var editReq SystemLogSmsEditReq + if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) { + return + } + response.CheckAndRespWithData(c,editReq.Id, SystemLogSmsService.Edit(editReq)) +} +// @Summary 系统短信日志删除 +// @Tags system_log_sms-系统短信日志 +// @Produce json +// @Param Token header string true "token" +// @Param id body int false "id" +// @Success 200 {object} response.Response "成功" +// @Router /api/admin/system_log_sms/del [post] +func (hd *SystemLogSmsHandler) Del(c *gin.Context) { + var delReq SystemLogSmsDelReq + if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) { + return + } + response.CheckAndResp(c, SystemLogSmsService.Del(delReq.Id)) +} + + + +// @Summary 系统短信日志导出 +// @Tags system_log_sms-系统短信日志 +// @Produce json +// @Param Token header string true "token" +// @Param scene query int false "场景编号" +// @Param mobile query string false "手机号码" +// @Param content query string false "发送内容" +// @Param status query int false "发送状态:[0=发送中, 1=发送成功, 2=发送失败]" +// @Param results query string false "短信结果" +// @Param send_time query int false "发送时间" +// @Param create_timeStart query core.TsTime false "创建时间" +// @Param create_timeEnd query core.TsTime false "创建时间" +// @Param update_timeStart query core.TsTime false "更新时间" +// @Param update_timeEnd query core.TsTime false "更新时间" +// @Router /api/admin/system_log_sms/ExportFile [get] +func (hd *SystemLogSmsHandler) ExportFile(c *gin.Context) { + var listReq SystemLogSmsListReq + if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) { + return + } + res, err := SystemLogSmsService.ExportFile(listReq) + if err != nil { + response.FailWithMsg(c, response.SystemError, "查询信息失败") + return + } + f, err := excel.NormalDynamicExport(res, "Sheet1", "系统短信日志", nil) + if err != nil { + response.FailWithMsg(c, response.SystemError, "导出失败") + return + } + excel.DownLoadExcel("系统短信日志" + time.Now().Format("20060102-150405"), c.Writer, f) +} + +// @Summary 系统短信日志导入 +// @Tags system_log_sms-系统短信日志 +// @Produce json +// @Router /api/admin/system_log_sms/ImportFile [post] +func (hd *SystemLogSmsHandler) ImportFile(c *gin.Context) { + file, _, err := c.Request.FormFile("file") + if err != nil { + c.String(http.StatusInternalServerError, "文件不存在") + return + } + defer file.Close() + importList := []SystemLogSmsResp{} + err = excel.GetExcelData(file, &importList) + if err != nil { + c.String(http.StatusInternalServerError, err.Error()) + return + } + + err = SystemLogSmsService.ImportFile(importList) + response.CheckAndResp(c, err) +} \ No newline at end of file diff --git a/server/admin/system_log_sms/system_log_sms_schema.go b/server/admin/system_log_sms/system_log_sms_schema.go new file mode 100644 index 0000000..24c1d85 --- /dev/null +++ b/server/admin/system_log_sms/system_log_sms_schema.go @@ -0,0 +1,63 @@ +package system_log_sms + +import ( + "x_admin/core" +) + +// SystemLogSmsListReq 系统短信日志列表参数 +type SystemLogSmsListReq struct { + Scene *int `form:"scene"` // 场景编号 + Mobile *string `form:"mobile"` // 手机号码 + Content *string `form:"content"` // 发送内容 + Status *int `form:"status"` // 发送状态:[0=发送中, 1=发送成功, 2=发送失败] + Results *string `form:"results"` // 短信结果 + SendTime *int `form:"send_time"` // 发送时间 + CreateTimeStart *string `form:"create_timeStart"` // 开始创建时间 + CreateTimeEnd *string `form:"create_timeEnd"` // 结束创建时间 + UpdateTimeStart *string `form:"update_timeStart"` // 开始更新时间 + UpdateTimeEnd *string `form:"update_timeEnd"` // 结束更新时间 +} + +// SystemLogSmsAddReq 系统短信日志新增参数 +type SystemLogSmsAddReq struct { + Scene interface{} `mapstructure:"scene" json:"scene" form:"scene"` // 场景编号 + Mobile interface{} `mapstructure:"mobile" json:"mobile" form:"mobile"` // 手机号码 + Content interface{} `mapstructure:"content" json:"content" form:"content"` // 发送内容 + Status interface{} `mapstructure:"status" json:"status" form:"status"` // 发送状态:[0=发送中, 1=发送成功, 2=发送失败] + Results interface{} `mapstructure:"results" json:"results" form:"results"` // 短信结果 + SendTime interface{} `mapstructure:"send_time" json:"send_time" form:"send_time"` // 发送时间 +} + +// SystemLogSmsEditReq 系统短信日志编辑参数 +type SystemLogSmsEditReq struct { + Id int `mapstructure:"id" json:"id" form:"id"` // id + Scene interface{} `mapstructure:"scene" json:"scene" form:"scene"` // 场景编号 + Mobile interface{} `mapstructure:"mobile" json:"mobile" form:"mobile"` // 手机号码 + Content interface{} `mapstructure:"content" json:"content" form:"content"` // 发送内容 + Status interface{} `mapstructure:"status" json:"status" form:"status"` // 发送状态:[0=发送中, 1=发送成功, 2=发送失败] + Results interface{} `mapstructure:"results" json:"results" form:"results"` // 短信结果 + SendTime interface{} `mapstructure:"send_time" json:"send_time" form:"send_time"` // 发送时间 +} + +// SystemLogSmsDetailReq 系统短信日志详情参数 +type SystemLogSmsDetailReq struct { + Id int `form:"id"` // id +} + +// SystemLogSmsDelReq 系统短信日志删除参数 +type SystemLogSmsDelReq struct { + Id int `form:"id"` // id +} + +// SystemLogSmsResp 系统短信日志返回信息 +type SystemLogSmsResp struct { + Id int `mapstructure:"id" json:"id"` // id + Scene int `mapstructure:"scene" json:"scene" excel:"name:场景编号;"` // 场景编号 + Mobile string `mapstructure:"mobile" json:"mobile" excel:"name:手机号码;"` // 手机号码 + Content string `mapstructure:"content" json:"content" excel:"name:发送内容;"` // 发送内容 + Status int `mapstructure:"status" json:"status" excel:"name:发送状态"` // 发送状态:[0=发送中, 1=发送成功, 2=发送失败] + Results string `mapstructure:"results" json:"results" excel:"name:短信结果;"` // 短信结果 + SendTime int `mapstructure:"send_time" json:"send_time" excel:"name:发送时间;"` // 发送时间 + CreateTime core.TsTime `mapstructure:"create_time" json:"create_time" excel:"name:创建时间;"` // 创建时间 + UpdateTime core.TsTime `mapstructure:"update_time" json:"update_time" excel:"name:更新时间;"` // 更新时间 +} diff --git a/server/admin/system_log_sms/system_log_sms_service.go b/server/admin/system_log_sms/system_log_sms_service.go new file mode 100644 index 0000000..ebc5bbb --- /dev/null +++ b/server/admin/system_log_sms/system_log_sms_service.go @@ -0,0 +1,229 @@ +package system_log_sms + +import ( + "x_admin/core" + "x_admin/core/request" + "x_admin/core/response" + "x_admin/model" + "x_admin/util" + + "github.com/duke-git/lancet/v2/convertor" + "gorm.io/gorm" +) + +var SystemLogSmsService = NewSystemLogSmsService() +var cacheUtil = util.CacheUtil{ + Name: SystemLogSmsService.Name, +} + +// NewSystemLogSmsService 初始化 +func NewSystemLogSmsService() *systemLogSmsService { + return &systemLogSmsService{ + db: core.GetDB(), + Name: "systemLogSms", + } +} + +// systemLogSmsService 系统短信日志服务实现类 +type systemLogSmsService struct { + db *gorm.DB + Name string +} + +// List 系统短信日志列表 +func (service systemLogSmsService) GetModel(listReq SystemLogSmsListReq) *gorm.DB { + // 查询 + dbModel := service.db.Model(&model.SystemLogSms{}) + if listReq.Scene != nil { + dbModel = dbModel.Where("scene = ?", *listReq.Scene) + } + if listReq.Mobile != nil { + dbModel = dbModel.Where("mobile like ?", "%"+*listReq.Mobile+"%") + } + if listReq.Content != nil { + dbModel = dbModel.Where("content = ?", *listReq.Content) + } + if listReq.Status != nil { + dbModel = dbModel.Where("status = ?", *listReq.Status) + } + if listReq.Results != nil { + dbModel = dbModel.Where("results = ?", *listReq.Results) + } + if listReq.SendTime != nil { + dbModel = dbModel.Where("send_time = ?", *listReq.SendTime) + } + if listReq.CreateTimeStart != nil { + dbModel = dbModel.Where("create_time >= ?", *listReq.CreateTimeStart) + } + if listReq.CreateTimeEnd != nil { + dbModel = dbModel.Where("create_time <= ?", *listReq.CreateTimeEnd) + } + if listReq.UpdateTimeStart != nil { + dbModel = dbModel.Where("update_time >= ?", *listReq.UpdateTimeStart) + } + if listReq.UpdateTimeEnd != nil { + dbModel = dbModel.Where("update_time <= ?", *listReq.UpdateTimeEnd) + } + return dbModel +} + +// List 系统短信日志列表 +func (service systemLogSmsService) List(page request.PageReq, listReq SystemLogSmsListReq) (res response.PageResp, e error) { + // 分页信息 + limit := page.PageSize + offset := page.PageSize * (page.PageNo - 1) + dbModel := service.GetModel(listReq) + // 总数 + var count int64 + err := dbModel.Count(&count).Error + if e = response.CheckErr(err, "失败"); e != nil { + return + } + // 数据 + var modelList []model.SystemLogSms + err = dbModel.Limit(limit).Offset(offset).Order("id desc").Find(&modelList).Error + if e = response.CheckErr(err, "查询失败"); e != nil { + return + } + result := []SystemLogSmsResp{} + response.Copy(&result, modelList) + return response.PageResp{ + PageNo: page.PageNo, + PageSize: page.PageSize, + Count: count, + Lists: result, + }, nil +} + +// ListAll 系统短信日志列表 +func (service systemLogSmsService) ListAll(listReq SystemLogSmsListReq) (res []SystemLogSmsResp, e error) { + dbModel := service.GetModel(listReq) + + var modelList []model.SystemLogSms + + err := dbModel.Find(&modelList).Error + if e = response.CheckErr(err, "查询全部失败"); e != nil { + return + } + response.Copy(&res, modelList) + return res, nil +} + +// Detail 系统短信日志详情 +func (service systemLogSmsService) Detail(Id int) (res SystemLogSmsResp, e error) { + var obj = model.SystemLogSms{} + err := cacheUtil.GetCache(Id, &obj) + if err != nil { + err := service.db.Where("id = ?", Id).Limit(1).First(&obj).Error + if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil { + return + } + if e = response.CheckErr(err, "获取详情失败"); e != nil { + return + } + response.Copy(&res, obj) + cacheUtil.SetCache(obj.Id, obj) + } + + return +} + +// Add 系统短信日志新增 +func (service systemLogSmsService) Add(addReq SystemLogSmsAddReq) (createId int, e error) { + var obj model.SystemLogSms + + // 无法自动转换不同类型 + // response.Copy(&obj, addReq) + + // addInfo, err := convertor.StructToMap(addReq) + // if err != nil { + // return 0, err + // } + // // map弱类型转换到结构体 + // err = mapstructure.WeakDecode(addInfo, &obj) + err := util.ConvertUtil.StructToStruct(&addReq, &obj) + + if err != nil { + return 0, err + } + err = service.db.Create(&obj).Error + e = response.CheckMysqlErr(err) + if e != nil { + return 0, e + } + cacheUtil.SetCache(obj.Id, obj) + createId = obj.Id + e = response.CheckErr(err, "添加失败") + return +} + +// Edit 系统短信日志编辑 +func (service systemLogSmsService) Edit(editReq SystemLogSmsEditReq) (e error) { + var obj model.SystemLogSms + err := service.db.Where("id = ?", editReq.Id).Limit(1).First(&obj).Error + // 校验 + if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil { + return + } + if e = response.CheckErr(err, "查询失败"); e != nil { + return + } + // 更新 + // response.Copy(&obj, editReq) + // + editInfo, err := convertor.StructToMap(editReq) + if err != nil { + return err + } + + err = service.db.Model(&obj).Updates(editInfo).Error + if e = response.CheckErr(err, "编辑失败"); e != nil { + return + } + cacheUtil.RemoveCache(obj.Id) + service.Detail(obj.Id) + return +} + +// Del 系统短信日志删除 +func (service systemLogSmsService) Del(Id int) (e error) { + var obj model.SystemLogSms + err := service.db.Where("id = ?", Id).Limit(1).First(&obj).Error + // 校验 + if e = response.CheckErrDBNotRecord(err, "数据不存在!"); e != nil { + return + } + if e = response.CheckErr(err, "查询数据失败"); e != nil { + return + } + // 删除 + err = service.db.Delete(&obj).Error + e = response.CheckErr(err, "删除失败") + cacheUtil.RemoveCache(obj.Id) + return +} + +// ExportFile 系统短信日志导出 +func (service systemLogSmsService) ExportFile(listReq SystemLogSmsListReq) (res []SystemLogSmsResp, e error) { + // 查询 + dbModel := service.GetModel(listReq) + + // 数据 + var modelList []model.SystemLogSms + err := dbModel.Order("id asc").Find(&modelList).Error + if e = response.CheckErr(err, "查询失败"); e != nil { + return + } + result := []SystemLogSmsResp{} + response.Copy(&result, modelList) + return result, nil +} + +// 导入 +func (service systemLogSmsService) ImportFile(importReq []SystemLogSmsResp) (e error) { + var importData []model.SystemLogSms + response.Copy(&importData, importReq) + err := service.db.Create(&importData).Error + e = response.CheckErr(err, "添加失败") + return e +} diff --git a/server/admin/system_log_sms_route.go b/server/admin/system_log_sms_route.go new file mode 100644 index 0000000..7cd0b63 --- /dev/null +++ b/server/admin/system_log_sms_route.go @@ -0,0 +1,56 @@ +package admin + +import ( + "github.com/gin-gonic/gin" + "x_admin/middleware" + "x_admin/admin/system_log_sms" +) + +/** +集成 +1. 导入 +- 请先提交git避免文件覆盖!!! +- 下载并解压压缩包后,直接复制server、admin文件夹到项目根目录即可 + +2. 注册路由 +请在 admin/entry.go 文件引入SystemLogSmsRoute注册路由 + +3. 后台手动添加菜单和按钮 +admin:system_log_sms:add +admin:system_log_sms:edit +admin:system_log_sms:del +admin:system_log_sms:list +admin:system_log_sms:listAll +admin:system_log_sms:detail +admin:system_log_sms:ExportFile +admin:system_log_sms: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', '系统短信日志', 'system/log/sms/index', 'system_log_sms/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', '系统短信日志添加','admin:system_log_sms: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', '系统短信日志编辑','admin:system_log_sms: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', '系统短信日志删除','admin:system_log_sms:del', 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', '系统短信日志列表','admin:system_log_sms:list', 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', '系统短信日志全部列表','admin:system_log_sms:listAll', 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', '系统短信日志详情','admin:system_log_sms:detail', 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', '系统短信日志导出excel','admin:system_log_sms:ExportFile', 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', '系统短信日志导入excel','admin:system_log_sms:ImportFile', 0, 1, 0, now(), now()); +*/ + + +// SystemLogSmsRoute(rg) +func SystemLogSmsRoute(rg *gin.RouterGroup) { + handle := system_log_sms.SystemLogSmsHandler{} + + r := rg.Group("/", middleware.TokenAuth()) + r.GET("/system_log_sms/list", handle.List) + r.GET("/system_log_sms/listAll", handle.ListAll) + r.GET("/system_log_sms/detail", handle.Detail) + r.POST("/system_log_sms/add",middleware.RecordLog("系统短信日志新增"), handle.Add) + r.POST("/system_log_sms/edit",middleware.RecordLog("系统短信日志编辑"), handle.Edit) + r.POST("/system_log_sms/del", middleware.RecordLog("系统短信日志删除"), handle.Del) + r.GET("/system_log_sms/ExportFile", middleware.RecordLog("系统短信日志导出"), handle.ExportFile) + r.POST("/system_log_sms/ImportFile",middleware.RecordLog("系统短信日志导入"), handle.ImportFile) +} \ No newline at end of file diff --git a/server/go.mod b/server/go.mod index 9542200..0c3aacb 100644 --- a/server/go.mod +++ b/server/go.mod @@ -47,6 +47,7 @@ require ( github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/duke-git/lancet/v2 v2.3.2 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect github.com/gin-contrib/sse v0.1.0 // indirect diff --git a/server/go.sum b/server/go.sum index d8367aa..6d67b56 100644 --- a/server/go.sum +++ b/server/go.sum @@ -25,6 +25,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/duke-git/lancet/v2 v2.3.2 h1:Cv+uNkx5yGqDSvGc5Vu9eiiZobsPIf0Ng7NGy5hEdow= +github.com/duke-git/lancet/v2 v2.3.2/go.mod h1:zGa2R4xswg6EG9I6WnyubDbFO/+A/RROxIbXcwryTsc= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= diff --git a/server/model/system_log_sms.go b/server/model/system_log_sms.go new file mode 100644 index 0000000..99c15fd --- /dev/null +++ b/server/model/system_log_sms.go @@ -0,0 +1,18 @@ +package model + +import ( + "x_admin/core" +) + +// SystemLogSms 系统短信日志实体 +type SystemLogSms struct { + Id int `json:"id" gorm:"primarykey;" excel:"name:id;"` // id + Scene int `json:"scene" excel:"name:场景编号;"` // 场景编号 + Mobile string `json:"mobile" excel:"name:手机号码;"` // 手机号码 + Content string `json:"content" excel:"name:发送内容;"` // 发送内容 + Status int `json:"status" excel:"name:发送状态:[0=发送中, 1=发送成功, 2=发送失败];"` // 发送状态:[0=发送中, 1=发送成功, 2=发送失败] + Results string `json:"results" excel:"name:短信结果;"` // 短信结果 + SendTime int `mapstructure:"send_time" excel:"name:发送时间;"` // 发送时间 + CreateTime core.TsTime `json:"CreateTime" gorm:"autoCreateTime;comment:'创建时间'" excel:"name:创建时间;"` // 创建时间 + UpdateTime core.TsTime `json:"UpdateTime" gorm:"autoUpdateTime;comment:'更新时间'" excel:"name:更新时间;"` // 更新时间 +} diff --git a/server/util/convert.go b/server/util/convert.go index fbb8d78..cbceb64 100644 --- a/server/util/convert.go +++ b/server/util/convert.go @@ -3,8 +3,9 @@ package util import ( "x_admin/core" - "github.com/fatih/structs" + "github.com/duke-git/lancet/v2/convertor" "github.com/jinzhu/copier" + "github.com/mitchellh/mapstructure" ) var ConvertUtil = convertUtil{} @@ -13,7 +14,7 @@ var ConvertUtil = convertUtil{} type convertUtil struct{} // StructsToMaps 将结构体转换成Map列表 -func (cu convertUtil) StructsToMaps(obj interface{}) (data []map[string]interface{}) { +func (c convertUtil) StructsToMaps(obj interface{}) (data []map[string]interface{}) { var objList []interface{} err := copier.Copy(&objList, obj) if err != nil { @@ -21,7 +22,35 @@ func (cu convertUtil) StructsToMaps(obj interface{}) (data []map[string]interfac return nil } for _, v := range objList { - data = append(data, structs.Map(v)) + data = append(data, c.StructToMap(v)) } return data } + +// StructToMap 结构体转换成map +func (c convertUtil) StructToMap(from interface{}) map[string]interface{} { + // var y = map[string]interface{}{} + // mapstructure.Decode(from, &y) //mapstructure + + // copier.Copy(&m, from) + m, _ := convertor.StructToMap(from) // 需要tag:json + + // if e != nil { + // return nil, err + // } + return m +} + +// MapToStruct 将map弱类型转换成结构体 +func (c convertUtil) MapToStruct(from map[string]interface{}, to interface{}) (err error) { + err = mapstructure.WeakDecode(from, to) // 需要tag:mapstructure + return err +} + +// StructToStruct 将结构体from弱类型转换成结构体to,需要tag:json,mapstructure +func (c convertUtil) StructToStruct(from interface{}, to interface{}) (err error) { + m := c.StructToMap(from) + err = c.MapToStruct(m, to) + + return err +} diff --git a/server/util/string.go b/server/util/string.go index acccc4e..4f8034a 100644 --- a/server/util/string.go +++ b/server/util/string.go @@ -36,6 +36,7 @@ func (su stringUtil) ToCamelCase(s string) string { for i := 1; i < len(words); i++ { words[i] = c.String(words[i]) } + // return s return strings.Join(words, "") } diff --git a/x_admin_app/api/system_log_sms.ts b/x_admin_app/api/system_log_sms.ts new file mode 100644 index 0000000..2e3e4c6 --- /dev/null +++ b/x_admin_app/api/system_log_sms.ts @@ -0,0 +1,92 @@ +import { request } from '@/utils/request' +import type { Pages } from '@/utils/request' +export type type_system_log_sms = { + id?: number; + scene?: number; + mobile?: string; + content?: string; + status?: number; + results?: string; + send_time?: number; + create_time?: string; + update_time?: string; +} +// 查询 +export type type_system_log_sms_query = { + scene?: number; + mobile?: string; + content?: string; + status?: number; + results?: string; + send_time?: number; + create_timeStart?: string; + create_timeEnd?: string; + update_timeStart?: string; + update_timeEnd?: string; +} +// 添加编辑 +export type type_system_log_sms_edit = { + id?: number; + scene?: number; + mobile?: string; + content?: string; + status?: number; + results?: string; + send_time?: number; +} + + +// 系统短信日志列表 +export function system_log_sms_list(params?: type_system_log_sms_query) { + return request>({ + url: '/system_log_sms/list', + method: 'GET', + data: params + }) +} +// 系统短信日志列表-所有 +export function system_log_sms_list_all(params?: type_system_log_sms_query) { + return request({ + url: '/system_log_sms/listAll', + method: 'GET', + data: params + }) +} + +// 系统短信日志详情 +export function system_log_sms_detail(id: number | string) { + return request({ + url: '/system_log_sms/detail', + method: 'GET', + data: { id } + }) +} + +// 系统短信日志新增 +export function system_log_sms_add(data: type_system_log_sms_edit) { + return request({ + url: '/system_log_sms/add', + method: "POST", + data, + }); +} + +// 系统短信日志编辑 +export function system_log_sms_edit(data: type_system_log_sms_edit) { + return request({ + url: '/system_log_sms/edit', + method: "POST", + data, + }); +} + +// 系统短信日志删除 +export function system_log_sms_delete(id: number | string) { + return request({ + url: '/system_log_sms/del', + method: "POST", + data:{ + id + }, + }); +} \ No newline at end of file diff --git a/x_admin_app/pages.json b/x_admin_app/pages.json index 1f3bf2b..aa8a003 100644 --- a/x_admin_app/pages.json +++ b/x_admin_app/pages.json @@ -23,7 +23,7 @@ "navigationBarTitleText": "项目监控", "enablePullDownRefresh": true, "onReachBottomDistance": 100 - + } }, @@ -73,6 +73,34 @@ "style": { "navigationBarTitleText": "搜索监控-客户端信息" } + }, + + { + "path": "pages/system/log/sms/index", + "style": { + "navigationBarTitleText": "系统短信日志", + "enablePullDownRefresh": true, + "onReachBottomDistance": 100 + } + }, + { + "path": "pages/system/log/sms/details", + "style": { + "navigationBarTitleText": "系统短信日志详情", + "enablePullDownRefresh": true + } + }, + { + "path": "pages/system/log/sms/edit", + "style": { + "navigationBarTitleText": "编辑系统短信日志" + } + }, + { + "path": "pages/system/log/sms/search", + "style": { + "navigationBarTitleText": "搜索系统短信日志" + } } diff --git a/x_admin_app/pages/index/index.vue b/x_admin_app/pages/index/index.vue index 3d6fa44..78f4bd3 100644 --- a/x_admin_app/pages/index/index.vue +++ b/x_admin_app/pages/index/index.vue @@ -34,39 +34,43 @@ let baseList = [{ - icon: "/static/index/equipment.png", - path: "/pages/monitor_project/index", - title: "项目监控", - }, - { - icon: "/static/index/equipment.png", - path: "/pages/monitor_client/index", - title: "项目用户", - }, + icon: "/static/index/equipment.png", + path: "/pages/monitor_project/index", + title: "项目监控", + }, + { + icon: "/static/index/equipment.png", + path: "/pages/monitor_client/index", + title: "项目用户", + }, { + icon: "/static/index/equipment.png", + path: "/pages/system/log/sms/index", + title: "Log", + }, - { - icon: "scan", - // path: "/pages/equipment/equipment", - title: "扫码维护", - fn: function() { - // console.log('this', this); - scanCode().then((path) => { - // toPath(path); - if (!path) { - return - } - var query = queryToObj(path); - if (!query.state) { - toast("请扫描设备二维码"); - return; - } - toPath("/pages/equipment/details", { - number: query.state, - }); + { + icon: "scan", + // path: "/pages/equipment/equipment", + title: "扫码维护", + fn: function () { + // console.log('this', this); + scanCode().then((path) => { + // toPath(path); + if (!path) { + return + } + var query = queryToObj(path); + if (!query.state) { + toast("请扫描设备二维码"); + return; + } + toPath("/pages/equipment/details", { + number: query.state, }); - }, + }); }, + }, ]; diff --git a/x_admin_app/pages/system/log/sms/details.vue b/x_admin_app/pages/system/log/sms/details.vue new file mode 100644 index 0000000..297a63a --- /dev/null +++ b/x_admin_app/pages/system/log/sms/details.vue @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/x_admin_app/pages/system/log/sms/edit.vue b/x_admin_app/pages/system/log/sms/edit.vue new file mode 100644 index 0000000..b9c54f5 --- /dev/null +++ b/x_admin_app/pages/system/log/sms/edit.vue @@ -0,0 +1,169 @@ + + + + + \ No newline at end of file diff --git a/x_admin_app/pages/system/log/sms/index.vue b/x_admin_app/pages/system/log/sms/index.vue new file mode 100644 index 0000000..a0d184d --- /dev/null +++ b/x_admin_app/pages/system/log/sms/index.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/x_admin_app/pages/system/log/sms/pages.json b/x_admin_app/pages/system/log/sms/pages.json new file mode 100644 index 0000000..20e4d4a --- /dev/null +++ b/x_admin_app/pages/system/log/sms/pages.json @@ -0,0 +1,32 @@ +// 请将pages里的数据手动合并到根目录下pages.json中 +{ + "pages": [ + { + "path": "pages/system/log/sms/index", + "style": { + "navigationBarTitleText": "系统短信日志", + "enablePullDownRefresh": true, + "onReachBottomDistance": 100 + } + }, + { + "path": "pages/system/log/sms/details", + "style": { + "navigationBarTitleText": "系统短信日志详情", + "enablePullDownRefresh": true + } + }, + { + "path": "pages/system/log/sms/edit", + "style": { + "navigationBarTitleText": "编辑系统短信日志" + } + }, + { + "path": "pages/system/log/sms/search", + "style": { + "navigationBarTitleText": "搜索系统短信日志" + } + } + ] +} diff --git a/x_admin_app/pages/system/log/sms/search.vue b/x_admin_app/pages/system/log/sms/search.vue new file mode 100644 index 0000000..d8bac96 --- /dev/null +++ b/x_admin_app/pages/system/log/sms/search.vue @@ -0,0 +1,86 @@ + + + + + \ No newline at end of file