From 60da0c349b55e65853e1a62047200a8acd023094 Mon Sep 17 00:00:00 2001 From: yxh Date: Tue, 10 Jun 2025 09:45:48 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E5=AD=97=E5=85=B8=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=8D=95=E5=9B=BE?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=88=A0=E9=99=A4=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/system/sys_dict_data.go | 1 + api/v1/system/sys_dict_type.go | 3 ++ .../app/common/dao/internal/sys_dict_type.go | 2 + .../common/logic/sysDictData/sys_dict_data.go | 5 ++ .../common/logic/sysDictType/sys_dict_type.go | 48 +++++++++++++++++-- internal/app/common/model/do/sys_dict_type.go | 1 + .../app/common/model/entity/sys_dict_type.go | 1 + internal/app/common/model/sys_dict_type.go | 1 + internal/app/common/service/sys_dict_type.go | 3 +- .../app/system/controller/sys_dict_type.go | 2 +- resource/template/vm/vue/edit-vue.template | 11 ++++- 11 files changed, 71 insertions(+), 7 deletions(-) diff --git a/api/v1/system/sys_dict_data.go b/api/v1/system/sys_dict_data.go index 7f041ca..acd01bf 100644 --- a/api/v1/system/sys_dict_data.go +++ b/api/v1/system/sys_dict_data.go @@ -35,6 +35,7 @@ type DictDataSearchReq struct { DictType string `p:"dictType"` //字典类型 DictLabel string `p:"dictLabel"` //字典标签 Status string `p:"status"` //状态 + TypeId uint64 `p:"typeId"` // 字典类型ID commonApi.PageReq } diff --git a/api/v1/system/sys_dict_type.go b/api/v1/system/sys_dict_type.go index 89c7b6c..6d1225b 100644 --- a/api/v1/system/sys_dict_type.go +++ b/api/v1/system/sys_dict_type.go @@ -30,6 +30,7 @@ type DictTypeSearchRes struct { type DictTypeAddReq struct { g.Meta `path:"/dict/type/add" tags:"系统后台/字典管理" method:"post" summary:"添加字典类型"` + Pid uint64 `p:"pid"` DictName string `p:"dictName" v:"required#字典名称不能为空"` DictType string `p:"dictType" v:"required#字典类型不能为空"` Status uint `p:"status" v:"required|in:0,1#状态不能为空|状态只能为0或1"` @@ -52,6 +53,7 @@ type DictTypeGetRes struct { type DictTypeEditReq struct { g.Meta `path:"/dict/type/edit" tags:"系统后台/字典管理" method:"put" summary:"修改字典类型"` DictId int64 `p:"dictId" v:"required|min:1#主键ID不能为空|主键ID必须为大于0的值"` + Pid uint64 `p:"pid"` DictName string `p:"dictName" v:"required#字典名称不能为空"` DictType string `p:"dictType" v:"required#字典类型不能为空"` Status uint `p:"status" v:"required|in:0,1#状态不能为空|状态只能为0或1"` @@ -71,6 +73,7 @@ type DictTypeDeleteRes struct { type DictTypeAllReq struct { g.Meta `path:"/dict/type/optionSelect" tags:"系统后台/字典管理" method:"get" summary:"获取字典选择框列表"` + All bool `p:"all"` } type DictTYpeAllRes struct { diff --git a/internal/app/common/dao/internal/sys_dict_type.go b/internal/app/common/dao/internal/sys_dict_type.go index edee6dc..e26e05d 100644 --- a/internal/app/common/dao/internal/sys_dict_type.go +++ b/internal/app/common/dao/internal/sys_dict_type.go @@ -20,6 +20,7 @@ type SysDictTypeDao struct { // SysDictTypeColumns defines and stores column names for table sys_dict_type. type SysDictTypeColumns struct { DictId string // 字典主键 + Pid string // 上级ID DictName string // 字典名称 DictType string // 字典类型 Status string // 状态(0正常 1停用) @@ -33,6 +34,7 @@ type SysDictTypeColumns struct { // sysDictTypeColumns holds the columns for table sys_dict_type. var sysDictTypeColumns = SysDictTypeColumns{ DictId: "dict_id", + Pid: "pid", DictName: "dict_name", DictType: "dict_type", Status: "status", diff --git a/internal/app/common/logic/sysDictData/sys_dict_data.go b/internal/app/common/logic/sysDictData/sys_dict_data.go index 1bbaeb2..b40dce3 100644 --- a/internal/app/common/logic/sysDictData/sys_dict_data.go +++ b/internal/app/common/logic/sysDictData/sys_dict_data.go @@ -86,6 +86,11 @@ func (s *sSysDictData) List(ctx context.Context, req *system.DictDataSearchReq) err = g.Try(ctx, func(ctx context.Context) { m := dao.SysDictData.Ctx(ctx) if req != nil { + if req.TypeId != 0 { + var dictTypes []string + dictTypes, err = service.SysDictType().GetDictTypesByTypeIds(ctx, req.TypeId) + m = m.Where(dao.SysDictData.Columns().DictType, dictTypes) + } if req.DictLabel != "" { m = m.Where(dao.SysDictData.Columns().DictLabel+" like ?", "%"+req.DictLabel+"%") } diff --git a/internal/app/common/logic/sysDictType/sys_dict_type.go b/internal/app/common/logic/sysDictType/sys_dict_type.go index 9c120bc..fdddc1f 100644 --- a/internal/app/common/logic/sysDictType/sys_dict_type.go +++ b/internal/app/common/logic/sysDictType/sys_dict_type.go @@ -72,6 +72,7 @@ func (s *sSysDictType) Add(ctx context.Context, req *system.DictTypeAddReq, user err = s.ExistsDictType(ctx, req.DictType) liberr.ErrIsNil(ctx, err) _, err = dao.SysDictType.Ctx(ctx).Insert(do.SysDictType{ + Pid: req.Pid, DictName: req.DictName, DictType: req.DictType, Status: req.Status, @@ -97,6 +98,7 @@ func (s *sSysDictType) Edit(ctx context.Context, req *system.DictTypeEditReq, us liberr.ValueIsNil(dictType, "字典类型不存在") //修改字典类型 _, e = dao.SysDictType.Ctx(ctx).TX(tx).WherePri(req.DictId).Update(do.SysDictType{ + Pid: req.Pid, DictName: req.DictName, DictType: req.DictType, Status: req.Status, @@ -168,19 +170,57 @@ func (s *sSysDictType) Delete(ctx context.Context, dictIds []int) (err error) { } // GetAllDictType 获取所有正常状态下的字典类型 -func (s *sSysDictType) GetAllDictType(ctx context.Context) (list []*entity.SysDictType, err error) { +func (s *sSysDictType) GetAllDictType(ctx context.Context, all ...bool) (list []*entity.SysDictType, err error) { cache := service.Cache() + cacheKey := consts.CacheSysDict + "_dict_type_all" + if len(all) > 0 && !all[0] { + cacheKey = consts.CacheSysDict + "_dict_type_some" + } //从缓存获取 - data := cache.Get(ctx, consts.CacheSysDict+"_dict_type_all") + data := cache.Get(ctx, cacheKey) if !data.IsNil() { err = data.Structs(&list) return } err = g.Try(ctx, func(ctx context.Context) { - err = dao.SysDictType.Ctx(ctx).Where("status", 1).Order("dict_id ASC").Scan(&list) + m := dao.SysDictType.Ctx(ctx) + if len(all) > 0 && !all[0] { + m = m.Where("status", 1) + } + err = m.Order("dict_id ASC").Scan(&list) liberr.ErrIsNil(ctx, err, "获取字典类型数据出错") //缓存 - cache.Set(ctx, consts.CacheSysDict+"_dict_type_all", list, 0, consts.CacheSysDictTag) + cache.Set(ctx, cacheKey, list, 0, consts.CacheSysDictTag) }) return } + +func (s *sSysDictType) GetDictTypesByTypeIds(ctx context.Context, id uint64) (dictTypeCodes []string, err error) { + err = g.Try(ctx, func(ctx context.Context) { + var dictAll []*entity.SysDictType + dictAll, err = s.GetAllDictType(ctx, true) + liberr.ErrIsNil(ctx, err) + dictTypeCodes = make([]string, 0, len(dictAll)) + for _, dict := range dictAll { + if dict.DictId == id { + dictTypeCodes = append(dictTypeCodes, dict.DictType) + } + } + dictList := s.GetChildrenDictType(ctx, dictAll, id) + for _, dict := range dictList { + dictTypeCodes = append(dictTypeCodes, dict.DictType) + } + }) + return +} + +func (s *sSysDictType) GetChildrenDictType(ctx context.Context, dictAll []*entity.SysDictType, dictId uint64) (dictType []*entity.SysDictType) { + dictType = make([]*entity.SysDictType, 0, len(dictAll)) + for _, dict := range dictAll { + if dict.Pid == dictId { + dictType = append(dictType, dict) + dictType = append(dictType, s.GetChildrenDictType(ctx, dictAll, dict.DictId)...) + } + } + return +} diff --git a/internal/app/common/model/do/sys_dict_type.go b/internal/app/common/model/do/sys_dict_type.go index 682264d..6ffc3d8 100644 --- a/internal/app/common/model/do/sys_dict_type.go +++ b/internal/app/common/model/do/sys_dict_type.go @@ -13,6 +13,7 @@ import ( type SysDictType struct { g.Meta `orm:"table:sys_dict_type, do:true"` DictId interface{} // 字典主键 + Pid interface{} // 上级ID DictName interface{} // 字典名称 DictType interface{} // 字典类型 Status interface{} // 状态(0正常 1停用) diff --git a/internal/app/common/model/entity/sys_dict_type.go b/internal/app/common/model/entity/sys_dict_type.go index 142d2f8..be35f96 100644 --- a/internal/app/common/model/entity/sys_dict_type.go +++ b/internal/app/common/model/entity/sys_dict_type.go @@ -11,6 +11,7 @@ import ( // SysDictType is the golang structure for table sys_dict_type. type SysDictType struct { DictId uint64 `json:"dictId" description:"字典主键"` + Pid uint64 `json:"pid" description:"上级ID"` DictName string `json:"dictName" description:"字典名称"` DictType string `json:"dictType" description:"字典类型"` Status uint `json:"status" description:"状态(0正常 1停用)"` diff --git a/internal/app/common/model/sys_dict_type.go b/internal/app/common/model/sys_dict_type.go index 0ff6150..23c6286 100644 --- a/internal/app/common/model/sys_dict_type.go +++ b/internal/app/common/model/sys_dict_type.go @@ -11,6 +11,7 @@ import "github.com/gogf/gf/v2/os/gtime" type SysDictTypeInfoRes struct { DictId uint64 `orm:"dict_id,primary" json:"dictId"` // 字典主键 + Pid uint64 `orm:"pid" json:"pid"` // 上级ID DictName string `orm:"dict_name" json:"dictName"` // 字典名称 DictType string `orm:"dict_type,unique" json:"dictType"` // 字典类型 Status uint `orm:"status" json:"status"` // 状态(0正常 1停用) diff --git a/internal/app/common/service/sys_dict_type.go b/internal/app/common/service/sys_dict_type.go index ed905e3..aae6726 100644 --- a/internal/app/common/service/sys_dict_type.go +++ b/internal/app/common/service/sys_dict_type.go @@ -19,7 +19,8 @@ type ISysDictType interface { Get(ctx context.Context, req *system.DictTypeGetReq) (dictType *entity.SysDictType, err error) ExistsDictType(ctx context.Context, dictType string, dictId ...int64) (err error) Delete(ctx context.Context, dictIds []int) (err error) - GetAllDictType(ctx context.Context) (list []*entity.SysDictType, err error) + GetAllDictType(ctx context.Context, all ...bool) (list []*entity.SysDictType, err error) + GetDictTypesByTypeIds(ctx context.Context, id uint64) ([]string, error) } var localSysDictType ISysDictType diff --git a/internal/app/system/controller/sys_dict_type.go b/internal/app/system/controller/sys_dict_type.go index e10d324..54ab69d 100644 --- a/internal/app/system/controller/sys_dict_type.go +++ b/internal/app/system/controller/sys_dict_type.go @@ -52,6 +52,6 @@ func (c *SysDictTypeController) Delete(ctx context.Context, req *system.DictType // OptionSelect 获取字典选择框列表 func (c *SysDictTypeController) OptionSelect(ctx context.Context, req *system.DictTypeAllReq) (res *system.DictTYpeAllRes, err error) { res = new(system.DictTYpeAllRes) - res.DictType, err = commonService.SysDictType().GetAllDictType(ctx) + res.DictType, err = commonService.SysDictType().GetAllDictType(ctx, req.All) return } diff --git a/resource/template/vm/vue/edit-vue.template b/resource/template/vm/vue/edit-vue.template index 2aa2dfc..2021adb 100644 --- a/resource/template/vm/vue/edit-vue.template +++ b/resource/template/vm/vue/edit-vue.template @@ -187,7 +187,12 @@ class="avatar-uploader" name="file" > - +
+ + + + +
@@ -624,6 +629,10 @@ const setUpData = () => { } {{$setUpData = false}} {{end}} +const deleteImageUrl{{$column.GoField}} = ()=>{ + state.formData.{{$column.HtmlField}} = '' + imageUrl{{$column.GoField}}.value = '' +} {{else if eq $column.HtmlType "keyValue"}} // 新增{{$column.ColumnComment}}行 const onAddRow{{$column.GoField}} = () => {