提交 b9def3a8 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

close task#8434

上级 362aba58
...@@ -231,7 +231,7 @@ type ZdExcel struct { ...@@ -231,7 +231,7 @@ type ZdExcel struct {
Model Model
Title string `gorm:"column:title" json:"title"` Title string `gorm:"column:title" json:"title"`
Name string `gorm:"column:name" json:"name"` 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:"-"` Path string `gorm:"column:path" json:"path" yaml:"-"`
Folder string `gorm:"-" json:"folder" yaml:"-"` Folder string `gorm:"-" json:"folder" yaml:"-"`
......
...@@ -55,7 +55,7 @@ func (s *ExcelService) saveResToDB(excel []model.ResFile, list []*model.ZdExcel) ...@@ -55,7 +55,7 @@ func (s *ExcelService) saveResToDB(excel []model.ResFile, list []*model.ZdExcel)
for _, item := range excel { for _, item := range excel {
if !stringUtils.FindInArrBool(item.Path, names) { 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) s.excelRepo.Save(&excel)
} }
} }
......
...@@ -3,13 +3,19 @@ package serverService ...@@ -3,13 +3,19 @@ package serverService
import ( import (
"github.com/360EntSecGroup-Skylar/excelize/v2" "github.com/360EntSecGroup-Skylar/excelize/v2"
"github.com/easysoft/zendata/src/model" "github.com/easysoft/zendata/src/model"
serverRepo "github.com/easysoft/zendata/src/server/repo"
"github.com/easysoft/zendata/src/service" "github.com/easysoft/zendata/src/service"
constant "github.com/easysoft/zendata/src/utils/const" constant "github.com/easysoft/zendata/src/utils/const"
fileUtils "github.com/easysoft/zendata/src/utils/file"
"strings" "strings"
) )
type ResService struct { 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) { func (s *ResService) LoadRes(resType string) (ret []model.ResFile) {
...@@ -37,31 +43,44 @@ func (s *ResService) LoadRes(resType string) (ret []model.ResFile) { ...@@ -37,31 +43,44 @@ func (s *ResService) LoadRes(resType string) (ret []model.ResFile) {
return return
} }
func (s *ResService) LoadResField(refer model.ResFile) (ret []model.ResField) { func (s *ResService) ListReferForSelection(resType string) (ret interface{}) {
resFile, resType, _ := fileUtils.GetResProp(refer.Name) if resType == "ranges" {
ret, _ = s.rangesRepo.List()
if resType == "yaml" { } else if resType == "instances" {
typ, inst, ranges := service.ReadYamlData(resFile) ret, _ = s.instancesRepo.List()
if typ == "inst" { } else if resType == "config" {
for i, item := range inst.Instances { ret, _ = s.configRepo.List()
field := model.ResField{Name: item.Instance, Index: i+1} } else if resType == "yaml" {
ret = append(ret, field) ret, _ = s.defRepo.List()
} } else if resType == "excel" {
} else if typ == "range" { ret, _ = s.excelRepo.List()
i := 0
for name, _ := range ranges.Ranges {
field := model.ResField{Name: name, Index: i+1}
ret = append(ret, field)
i++
}
}
} else if resType == "text" { } 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" { } else if resType == "excel" {
excel, _ := excelize.OpenFile(resFile) res, _ := s.excelRepo.Get(uint(resId))
excel, _ := excelize.OpenFile(res.Path)
for _, sheet := range excel.GetSheetList() { for _, sheet := range excel.GetSheetList() {
if refer.Title != sheet { continue } if res.Sheet != sheet { continue }
rows, _ := excel.GetRows(sheet) rows, _ := excel.GetRows(sheet)
...@@ -79,5 +98,17 @@ func (s *ResService) LoadResField(refer model.ResFile) (ret []model.ResField) { ...@@ -79,5 +98,17 @@ func (s *ResService) LoadResField(refer model.ResFile) (ret []model.ResField) {
} }
} }
} }
return 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}
}
...@@ -292,7 +292,7 @@ func Init() (err error) { ...@@ -292,7 +292,7 @@ func Init() (err error) {
gormDb, err := serverConfig.NewGormDB(config) gormDb, err := serverConfig.NewGormDB(config)
defer gormDb.Close() defer gormDb.Close()
deferRepo := serverRepo.NewDefRepo(gormDb) defRepo := serverRepo.NewDefRepo(gormDb)
fieldRepo := serverRepo.NewFieldRepo(gormDb) fieldRepo := serverRepo.NewFieldRepo(gormDb)
sectionRepo := serverRepo.NewSectionRepo(gormDb) sectionRepo := serverRepo.NewSectionRepo(gormDb)
referRepo := serverRepo.NewReferRepo(gormDb) referRepo := serverRepo.NewReferRepo(gormDb)
...@@ -302,8 +302,8 @@ func Init() (err error) { ...@@ -302,8 +302,8 @@ func Init() (err error) {
excelRepo := serverRepo.NewExcelRepo(gormDb) excelRepo := serverRepo.NewExcelRepo(gormDb)
configRepo := serverRepo.NewConfigRepo(gormDb) configRepo := serverRepo.NewConfigRepo(gormDb)
defService := serverService.NewDefService(deferRepo, fieldRepo, referRepo) defService := serverService.NewDefService(defRepo, fieldRepo, referRepo)
fieldService := serverService.NewFieldService(deferRepo, fieldRepo, referRepo) fieldService := serverService.NewFieldService(defRepo, fieldRepo, referRepo)
sectionService := serverService.NewSectionService(fieldRepo, sectionRepo) sectionService := serverService.NewSectionService(fieldRepo, sectionRepo)
referService := serverService.NewReferService(fieldRepo, referRepo) referService := serverService.NewReferService(fieldRepo, referRepo)
...@@ -312,9 +312,11 @@ func Init() (err error) { ...@@ -312,9 +312,11 @@ func Init() (err error) {
textService := serverService.NewTextService(textRepo) textService := serverService.NewTextService(textRepo)
excelService := serverService.NewExcelService(excelRepo) excelService := serverService.NewExcelService(excelRepo)
configService := serverService.NewConfigService(configRepo) configService := serverService.NewConfigService(configRepo)
resService := serverService.NewResService(rangesRepo, instancesRepo,
configRepo, excelRepo, textRepo, defRepo)
server := NewServer(config, defService, fieldService, sectionService, referService, server := NewServer(config, defService, fieldService, sectionService, referService,
rangesService, instancesService, textService, excelService, configService) rangesService, instancesService, textService, excelService, configService, resService)
server.Run() server.Run()
return return
...@@ -427,11 +429,10 @@ func (s *Server) admin(writer http.ResponseWriter, req *http.Request) { ...@@ -427,11 +429,10 @@ func (s *Server) admin(writer http.ResponseWriter, req *http.Request) {
case "updateRefer": case "updateRefer":
refer := serverUtils.ConvertRefer(reqData.Data) refer := serverUtils.ConvertRefer(reqData.Data)
err = s.referService.Update(&refer) err = s.referService.Update(&refer)
case "listReferType": case "listReferForSelection":
ret.Data = s.resService.LoadRes(reqData.Mode) ret.Data = s.resService.ListReferForSelection(reqData.Mode)
case "listReferField": case "listReferFieldForSelection":
refer := serverUtils.ConvertResFile(reqData.Data) ret.Data = s.resService.ListReferFieldForSelection(reqData.Id, reqData.Mode)
ret.Data = s.resService.LoadResField(refer)
case "listRanges": case "listRanges":
ret.Data = s.rangesService.List() ret.Data = s.rangesService.List()
...@@ -530,7 +531,12 @@ func (s *Server) admin(writer http.ResponseWriter, req *http.Request) { ...@@ -530,7 +531,12 @@ func (s *Server) admin(writer http.ResponseWriter, req *http.Request) {
io.WriteString(writer, string(bytes)) 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{ return &Server{
config: config, config: config,
defService: defService, defService: defService,
...@@ -542,6 +548,7 @@ func NewServer(config *serverConfig.Config, defService *serverService.DefService ...@@ -542,6 +548,7 @@ func NewServer(config *serverConfig.Config, defService *serverService.DefService
textService: textService, textService: textService,
excelService: excelService, excelService: excelService,
configService: configService, configService: configService,
resService: resService,
} }
} }
......
...@@ -21,8 +21,8 @@ export function updateRefer (refer, ownerType) { ...@@ -21,8 +21,8 @@ export function updateRefer (refer, ownerType) {
} }
// selection input on page // selection input on page
export function listReferType (resType) { export function listReferForSelection (resType) {
const data = {'action': 'listReferType', mode: resType} const data = {'action': 'listReferForSelection', mode: resType}
return request({ return request({
url: api.admin, url: api.admin,
...@@ -30,8 +30,8 @@ export function listReferType (resType) { ...@@ -30,8 +30,8 @@ export function listReferType (resType) {
data: data data: data
}) })
} }
export function listReferField (refer) { export function listReferFieldForSelection (referId, referType) {
const data = {'action': 'listReferField', data: refer} const data = {'action': 'listReferFieldForSelection', id: referId, mode: referType}
return request({ return request({
url: api.admin, url: api.admin,
......
...@@ -135,6 +135,7 @@ export default { ...@@ -135,6 +135,7 @@ export default {
time2: 0, time2: 0,
treeData: [], treeData: [],
nodeMap: {},
openKeys: [], openKeys: [],
selectedKeys: [], selectedKeys: [],
targetModel: 0, targetModel: 0,
...@@ -236,62 +237,57 @@ export default { ...@@ -236,62 +237,57 @@ export default {
this.rightVisible = false this.rightVisible = false
} }
}, },
getOpenKeys (field) { getOpenKeys (node) {
if (!field) return if (!node) return
this.openKeys.push(field.id) this.openKeys.push(node.id)
if (field.fields) { this.nodeMap[node.id] = node
field.fields.forEach((item) => { if (node.fields) {
node.fields.forEach((item) => {
this.getOpenKeys(item) this.getOpenKeys(item)
}) })
} }
}, },
onSelect (selectedKeys, e) { // selectedKeys, e:{selected: bool, selectedNodes, node, event} 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) { if (selectedKeys.length == 0) {
selectedKeys[0] = e.node.eventKey // keep selected 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])) this.getModel(parseInt(selectedKeys[0]))
}, },
getModel(id) { getModel(id) {
console.log('getModel', id)
if (this.type === 'def') { if (this.type === 'def') {
getDefField(id).then(res => { getDefField(id).then(res => {
console.log('getDefField', res) console.log('getDefField', res)
this.modelData = res.data this.modelData = res.data
this.time2 = Date.now() // trigger data refresh 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') { } else if (this.type === 'ranges') {
if (id == 0) { getResRangesItem(id).then(res => {
this.rightVisible = false console.log('getResRangesItem', res)
} else { this.modelData = res.data
getResRangesItem(id).then(res => { this.time2 = Date.now() // trigger data refresh
console.log('getResRangesItem', res) })
this.modelData = res.data
this.time2 = Date.now() // trigger data refresh
this.rightVisible = true
})
}
} else if (this.type === 'instances') { } else if (this.type === 'instances') {
if (id == 0) { getResInstancesItem(id).then(res => {
this.rightVisible = false console.log('getResInstancesItem', res)
} else { this.modelData = res.data
getResInstancesItem(id).then(res => { this.time2 = Date.now() // trigger data refresh
console.log('getResInstancesItem', res) })
this.modelData = res.data
this.time2 = Date.now() // trigger data refresh
this.rightVisible = true
})
}
} }
}, },
menuClick (e) { menuClick (e) {
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<a-input v-model="refer.file"> <a-input v-model="refer.file">
<a-select v-model="referFile" @change="onReferChanged" slot="addonAfter" style="width: 300px"> <a-select v-model="referFile" @change="onReferChanged" slot="addonAfter" style="width: 300px">
<a-select-option value="">选择</a-select-option> <a-select-option value="">选择</a-select-option>
<a-select-option v-for="(f, i) in files" :value="f.name+'-'+f.title" :key="i"> <a-select-option v-for="(f, i) in files" :value="f.id" :key="i">
{{ f.title }} {{ f.title }}
</a-select-option> </a-select-option>
</a-select> </a-select>
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
</template> </template>
<script> <script>
import {listReferType, listReferField, getRefer, updateRefer, import {listReferForSelection, listReferFieldForSelection, getRefer, updateRefer,
} from "../api/refer"; } from "../api/refer";
export default { export default {
...@@ -131,26 +131,35 @@ export default { ...@@ -131,26 +131,35 @@ export default {
getRefer(this.model.id, this.type).then(json => { getRefer(this.model.id, this.type).then(json => {
console.log('getRefer', json) console.log('getRefer', json)
this.refer = json.data this.refer = json.data
this.listReferType(this.refer.type, true) this.listReferForSelection(this.refer.type, true)
}) })
}, },
onTypeChanged() { onTypeChanged() {
console.log('onTypeChanged') console.log('onTypeChanged')
this.listReferType(this.refer.type, false) this.listReferForSelection(this.refer.type, false)
}, },
onReferChanged(value) { onReferChanged(value) {
console.log("onReferChanged") console.log("onReferChanged")
this.refer.file = value.split('-')[0]
if (this.refer.type != 'yaml' && this.refer.type != 'text') { let file = {}
this.listDefFieldReferField() for (let i = 0; i < this.files.length; i++) {
const f = this.files[i]
if (f.id === value) {
file = f
break
}
}
this.refer.file = file.name
if (this.refer.type != 'yaml' && this.refer.type != 'config' && this.refer.type != 'text') {
this.listReferFieldForSelection()
} else { } else {
this.refer.colName = '' this.refer.colName = ''
} }
}, },
onFieldNameChanged(value) { onFieldNameChanged(value) {
console.log("onFieldChanged") console.log("onFieldNameChanged")
this.refer.colName = value this.refer.colName = value
}, },
...@@ -174,9 +183,9 @@ export default { ...@@ -174,9 +183,9 @@ export default {
this.$refs.editForm.reset() this.$refs.editForm.reset()
}, },
listReferType(resType, init) { listReferForSelection(resType, init) {
listReferType(resType).then(json => { listReferForSelection(resType).then(json => {
console.log('listReferType', json) console.log('listReferForSelection', json)
this.files = json.data this.files = json.data
}) })
...@@ -185,18 +194,9 @@ export default { ...@@ -185,18 +194,9 @@ export default {
this.referFile = '' this.referFile = ''
} }
}, },
listDefFieldReferField() { listReferFieldForSelection() {
let file = {} listReferFieldForSelection(this.referFile, this.refer.type).then(json => {
for (let i = 0; i < this.files.length; i++) { console.log('listReferFieldForSelection', json)
const f = this.files[i]
if (f.name + '-' + f.title === this.referFile) {
file = f
break
}
}
listReferField(file).then(json => {
console.log('listReferField', json)
this.fields = json.data this.fields = json.data
}) })
this.refer.colName = '' this.refer.colName = ''
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册