diff --git a/src/model/model.go b/src/model/model.go index cef4dd66abde6bb7d885b0dcd2526fdd0fcdce9f..68ed1195332c8e3e900c3090c8757b534c443f1e 100644 --- a/src/model/model.go +++ b/src/model/model.go @@ -231,7 +231,7 @@ type ZdExcel struct { Model Title string `gorm:"column:title" json:"title"` Name string `gorm:"column:name" json:"name"` - Text string `gorm:"column:desc" json:"desc"` + Sheet string `gorm:"column:sheet" json:"sheet"` Path string `gorm:"column:path" json:"path" yaml:"-"` Folder string `gorm:"-" json:"folder" yaml:"-"` diff --git a/src/server/service/excel.go b/src/server/service/excel.go index 8d0501cd92cef14f8c7dc0c92be25b042bf1ec6c..18e77233e93c2acdc512728729b6a4c7dc5cb978 100644 --- a/src/server/service/excel.go +++ b/src/server/service/excel.go @@ -55,7 +55,7 @@ func (s *ExcelService) saveResToDB(excel []model.ResFile, list []*model.ZdExcel) for _, item := range excel { if !stringUtils.FindInArrBool(item.Path, names) { - excel := model.ZdExcel{Title: item.Title, Name: item.Name, Path: item.Path} + excel := model.ZdExcel{Title: item.Title, Name: item.Name, Path: item.Path, Sheet: item.Title} s.excelRepo.Save(&excel) } } diff --git a/src/server/service/res.go b/src/server/service/res.go index 3236a17b8bf716c0fa900f0668edc99c19ec1a9b..8a9f020ec7a543efee6e2b0753a0152e947e46a9 100644 --- a/src/server/service/res.go +++ b/src/server/service/res.go @@ -3,13 +3,19 @@ package serverService import ( "github.com/360EntSecGroup-Skylar/excelize/v2" "github.com/easysoft/zendata/src/model" + serverRepo "github.com/easysoft/zendata/src/server/repo" "github.com/easysoft/zendata/src/service" constant "github.com/easysoft/zendata/src/utils/const" - fileUtils "github.com/easysoft/zendata/src/utils/file" "strings" ) type ResService struct { + rangesRepo *serverRepo.RangesRepo + instancesRepo *serverRepo.InstancesRepo + configRepo *serverRepo.ConfigRepo + excelRepo *serverRepo.ExcelRepo + textRepo *serverRepo.TextRepo + defRepo *serverRepo.DefRepo } func (s *ResService) LoadRes(resType string) (ret []model.ResFile) { @@ -37,31 +43,44 @@ func (s *ResService) LoadRes(resType string) (ret []model.ResFile) { return } -func (s *ResService) LoadResField(refer model.ResFile) (ret []model.ResField) { - resFile, resType, _ := fileUtils.GetResProp(refer.Name) - - if resType == "yaml" { - typ, inst, ranges := service.ReadYamlData(resFile) - if typ == "inst" { - for i, item := range inst.Instances { - field := model.ResField{Name: item.Instance, Index: i+1} - ret = append(ret, field) - } - } else if typ == "range" { - i := 0 - for name, _ := range ranges.Ranges { - field := model.ResField{Name: name, Index: i+1} - ret = append(ret, field) - i++ - } - } +func (s *ResService) ListReferForSelection(resType string) (ret interface{}) { + if resType == "ranges" { + ret, _ = s.rangesRepo.List() + } else if resType == "instances" { + ret, _ = s.instancesRepo.List() + } else if resType == "config" { + ret, _ = s.configRepo.List() + } else if resType == "yaml" { + ret, _ = s.defRepo.List() + } else if resType == "excel" { + ret, _ = s.excelRepo.List() } else if resType == "text" { - // no need to show fields in webpage, used as list + ret, _ = s.textRepo.List() + } + return +} +func (s *ResService) ListReferFieldForSelection(resId int, resType string) (ret []model.ResField) { + if resType == "instances" { + items, _ := s.instancesRepo.GetItems(resId) + for i, item := range items { + if item.ParentID != 0 { return } // ignore sub nodes + field := model.ResField{Name: item.Instance, Index: i+1} + ret = append(ret, field) + } + } else if resType == "ranges" { + items, _ := s.rangesRepo.GetItems(resId) + for i, item := range items { + if item.ParentID != 0 { return } // ignore sub nodes + field := model.ResField{Name: item.Name, Index: i+1} + ret = append(ret, field) + } } else if resType == "excel" { - excel, _ := excelize.OpenFile(resFile) + res, _ := s.excelRepo.Get(uint(resId)) + excel, _ := excelize.OpenFile(res.Path) + for _, sheet := range excel.GetSheetList() { - if refer.Title != sheet { continue } + if res.Sheet != sheet { continue } rows, _ := excel.GetRows(sheet) @@ -79,5 +98,17 @@ func (s *ResService) LoadResField(refer model.ResFile) (ret []model.ResField) { } } } + return } + +func NewResService(rangesRepo *serverRepo.RangesRepo, + instancesRepo *serverRepo.InstancesRepo, + configRepo *serverRepo.ConfigRepo, + excelRepo *serverRepo.ExcelRepo, + textRepo *serverRepo.TextRepo, + defRepo *serverRepo.DefRepo) *ResService { + return &ResService{rangesRepo: rangesRepo, instancesRepo: instancesRepo, + configRepo: configRepo, excelRepo: excelRepo, + textRepo: textRepo, defRepo: defRepo} +} diff --git a/src/zd.go b/src/zd.go index 261cae3994679b06440fbfb345750495dc630c93..8cc1f68102cc7f6fed0a87fb55ebb28e38550bee 100644 --- a/src/zd.go +++ b/src/zd.go @@ -292,7 +292,7 @@ func Init() (err error) { gormDb, err := serverConfig.NewGormDB(config) defer gormDb.Close() - deferRepo := serverRepo.NewDefRepo(gormDb) + defRepo := serverRepo.NewDefRepo(gormDb) fieldRepo := serverRepo.NewFieldRepo(gormDb) sectionRepo := serverRepo.NewSectionRepo(gormDb) referRepo := serverRepo.NewReferRepo(gormDb) @@ -302,8 +302,8 @@ func Init() (err error) { excelRepo := serverRepo.NewExcelRepo(gormDb) configRepo := serverRepo.NewConfigRepo(gormDb) - defService := serverService.NewDefService(deferRepo, fieldRepo, referRepo) - fieldService := serverService.NewFieldService(deferRepo, fieldRepo, referRepo) + defService := serverService.NewDefService(defRepo, fieldRepo, referRepo) + fieldService := serverService.NewFieldService(defRepo, fieldRepo, referRepo) sectionService := serverService.NewSectionService(fieldRepo, sectionRepo) referService := serverService.NewReferService(fieldRepo, referRepo) @@ -312,9 +312,11 @@ func Init() (err error) { textService := serverService.NewTextService(textRepo) excelService := serverService.NewExcelService(excelRepo) configService := serverService.NewConfigService(configRepo) + resService := serverService.NewResService(rangesRepo, instancesRepo, + configRepo, excelRepo, textRepo, defRepo) server := NewServer(config, defService, fieldService, sectionService, referService, - rangesService, instancesService, textService, excelService, configService) + rangesService, instancesService, textService, excelService, configService, resService) server.Run() return @@ -427,11 +429,10 @@ func (s *Server) admin(writer http.ResponseWriter, req *http.Request) { case "updateRefer": refer := serverUtils.ConvertRefer(reqData.Data) err = s.referService.Update(&refer) - case "listReferType": - ret.Data = s.resService.LoadRes(reqData.Mode) - case "listReferField": - refer := serverUtils.ConvertResFile(reqData.Data) - ret.Data = s.resService.LoadResField(refer) + case "listReferForSelection": + ret.Data = s.resService.ListReferForSelection(reqData.Mode) + case "listReferFieldForSelection": + ret.Data = s.resService.ListReferFieldForSelection(reqData.Id, reqData.Mode) case "listRanges": ret.Data = s.rangesService.List() @@ -530,7 +531,12 @@ func (s *Server) admin(writer http.ResponseWriter, req *http.Request) { io.WriteString(writer, string(bytes)) } -func NewServer(config *serverConfig.Config, defService *serverService.DefService, fieldServer *serverService.FieldService, sectionService *serverService.SectionService, referService *serverService.ReferService, rangesService *serverService.RangesService, instancesService *serverService.InstancesService, textService *serverService.TextService, excelService *serverService.ExcelService, configService *serverService.ConfigService, ) *Server { +func NewServer(config *serverConfig.Config, defService *serverService.DefService, + fieldServer *serverService.FieldService, sectionService *serverService.SectionService, + referService *serverService.ReferService, rangesService *serverService.RangesService, + instancesService *serverService.InstancesService, textService *serverService.TextService, + excelService *serverService.ExcelService, configService *serverService.ConfigService, + resService *serverService.ResService) *Server { return &Server{ config: config, defService: defService, @@ -542,6 +548,7 @@ func NewServer(config *serverConfig.Config, defService *serverService.DefService textService: textService, excelService: excelService, configService: configService, + resService: resService, } } diff --git a/ui/src/api/refer.js b/ui/src/api/refer.js index 502358ab6efb5624f1e014341e5bcff2d3961488..a6af5f8d2f7752e7a781b86c4378974a98ee264a 100644 --- a/ui/src/api/refer.js +++ b/ui/src/api/refer.js @@ -21,8 +21,8 @@ export function updateRefer (refer, ownerType) { } // selection input on page -export function listReferType (resType) { - const data = {'action': 'listReferType', mode: resType} +export function listReferForSelection (resType) { + const data = {'action': 'listReferForSelection', mode: resType} return request({ url: api.admin, @@ -30,8 +30,8 @@ export function listReferType (resType) { data: data }) } -export function listReferField (refer) { - const data = {'action': 'listReferField', data: refer} +export function listReferFieldForSelection (referId, referType) { + const data = {'action': 'listReferFieldForSelection', id: referId, mode: referType} return request({ url: api.admin, diff --git a/ui/src/components/Design.vue b/ui/src/components/Design.vue index aa1e8c087b9a883a4f511a8f978b861a8da8d4f1..b6ccbb6a89709bbb7e3f32336ad02dc159ab1771 100644 --- a/ui/src/components/Design.vue +++ b/ui/src/components/Design.vue @@ -135,6 +135,7 @@ export default { time2: 0, treeData: [], + nodeMap: {}, openKeys: [], selectedKeys: [], targetModel: 0, @@ -236,62 +237,57 @@ export default { this.rightVisible = false } }, - getOpenKeys (field) { - if (!field) return + getOpenKeys (node) { + if (!node) return - this.openKeys.push(field.id) - if (field.fields) { - field.fields.forEach((item) => { + this.openKeys.push(node.id) + this.nodeMap[node.id] = node + if (node.fields) { + node.fields.forEach((item) => { this.getOpenKeys(item) }) } }, onSelect (selectedKeys, e) { // selectedKeys, e:{selected: bool, selectedNodes, node, event} - console.log('onSelect', selectedKeys, e.node.eventKey) + console.log('onSelect', selectedKeys, e.selectedNodes, e.node, e.node.eventKey) if (selectedKeys.length == 0) { selectedKeys[0] = e.node.eventKey // keep selected } + const node = this.nodeMap[e.node.eventKey] + console.log('node', node.fields) + if (node.fields && node.fields.length > 0) { + this.rightVisible = false + this.modelData = {} + return + } else { + this.rightVisible = true + this.tabKey = 'info' + } + this.getModel(parseInt(selectedKeys[0])) }, getModel(id) { + console.log('getModel', id) + if (this.type === 'def') { getDefField(id).then(res => { console.log('getDefField', res) this.modelData = res.data this.time2 = Date.now() // trigger data refresh - - this.tabKey = 'info' - if (this.modelData.parentID == 0) { - this.rightVisible = false - } else { - this.rightVisible = true - } }) } else if (this.type === 'ranges') { - if (id == 0) { - this.rightVisible = false - } else { - getResRangesItem(id).then(res => { - console.log('getResRangesItem', res) - this.modelData = res.data - this.time2 = Date.now() // trigger data refresh - - this.rightVisible = true - }) - } + getResRangesItem(id).then(res => { + console.log('getResRangesItem', res) + this.modelData = res.data + this.time2 = Date.now() // trigger data refresh + }) } else if (this.type === 'instances') { - if (id == 0) { - this.rightVisible = false - } else { - getResInstancesItem(id).then(res => { - console.log('getResInstancesItem', res) - this.modelData = res.data - this.time2 = Date.now() // trigger data refresh - - this.rightVisible = true - }) - } + getResInstancesItem(id).then(res => { + console.log('getResInstancesItem', res) + this.modelData = res.data + this.time2 = Date.now() // trigger data refresh + }) } }, menuClick (e) { diff --git a/ui/src/components/FieldRefer.vue b/ui/src/components/FieldRefer.vue index e7cd0a3604286f17616d401cce80ce6df21391e2..d1135362413c95bca0629d61198d163e378fa634 100644 --- a/ui/src/components/FieldRefer.vue +++ b/ui/src/components/FieldRefer.vue @@ -19,7 +19,7 @@ 选择 - + {{ f.title }} @@ -66,7 +66,7 @@