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

close task#8434

上级 362aba58
......@@ -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:"-"`
......
......@@ -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)
}
}
......
......@@ -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}
}
......@@ -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,
}
}
......
......@@ -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,
......
......@@ -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) {
......
......@@ -19,7 +19,7 @@
<a-input v-model="refer.file">
<a-select v-model="referFile" @change="onReferChanged" slot="addonAfter" style="width: 300px">
<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 }}
</a-select-option>
</a-select>
......@@ -66,7 +66,7 @@
</template>
<script>
import {listReferType, listReferField, getRefer, updateRefer,
import {listReferForSelection, listReferFieldForSelection, getRefer, updateRefer,
} from "../api/refer";
export default {
......@@ -131,26 +131,35 @@ export default {
getRefer(this.model.id, this.type).then(json => {
console.log('getRefer', json)
this.refer = json.data
this.listReferType(this.refer.type, true)
this.listReferForSelection(this.refer.type, true)
})
},
onTypeChanged() {
console.log('onTypeChanged')
this.listReferType(this.refer.type, false)
this.listReferForSelection(this.refer.type, false)
},
onReferChanged(value) {
console.log("onReferChanged")
this.refer.file = value.split('-')[0]
if (this.refer.type != 'yaml' && this.refer.type != 'text') {
this.listDefFieldReferField()
let file = {}
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 {
this.refer.colName = ''
}
},
onFieldNameChanged(value) {
console.log("onFieldChanged")
console.log("onFieldNameChanged")
this.refer.colName = value
},
......@@ -174,9 +183,9 @@ export default {
this.$refs.editForm.reset()
},
listReferType(resType, init) {
listReferType(resType).then(json => {
console.log('listReferType', json)
listReferForSelection(resType, init) {
listReferForSelection(resType).then(json => {
console.log('listReferForSelection', json)
this.files = json.data
})
......@@ -185,18 +194,9 @@ export default {
this.referFile = ''
}
},
listDefFieldReferField() {
let file = {}
for (let i = 0; i < this.files.length; i++) {
const f = this.files[i]
if (f.name + '-' + f.title === this.referFile) {
file = f
break
}
}
listReferField(file).then(json => {
console.log('listReferField', json)
listReferFieldForSelection() {
listReferFieldForSelection(this.referFile, this.refer.type).then(json => {
console.log('listReferFieldForSelection', json)
this.fields = json.data
})
this.refer.colName = ''
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册