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"
>
-
+