169 lines
4.6 KiB
Go
169 lines
4.6 KiB
Go
package ui
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"go_dreamfactory/cmd/v2/lib/common"
|
|
"go_dreamfactory/cmd/v2/model"
|
|
"go_dreamfactory/cmd/v2/service"
|
|
"go_dreamfactory/cmd/v2/service/observer"
|
|
"os/exec"
|
|
"runtime"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/dialog"
|
|
"fyne.io/fyne/v2/theme"
|
|
"fyne.io/fyne/v2/widget"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type appGen struct {
|
|
appAdapter
|
|
|
|
obs observer.Observer
|
|
}
|
|
|
|
func (this *appGen) LazyInit(obs observer.Observer) error {
|
|
this.obs = obs
|
|
|
|
this.tabItem = container.NewTabItemWithIcon(common.TOOLBAR_GEN, theme.ContentCopyIcon(), nil)
|
|
|
|
// load
|
|
gt := service.GetDbService().GetLubanConf(common.BUCKET_LUBANCONF)
|
|
logrus.Debugf("%v", gt)
|
|
|
|
content := container.NewMax()
|
|
content.Objects = []fyne.CanvasObject{}
|
|
|
|
serverAddr := widget.NewEntry()
|
|
serverAddr.PlaceHolder = "服务器地址 例如: 10.0.1.11"
|
|
|
|
projectDir := widget.NewEntry()
|
|
projectDir.PlaceHolder = "项目目录 例如: E:\\projects\\workspace\\go_dreamfactory\\"
|
|
|
|
workDir := widget.NewEntry()
|
|
workDir.PlaceHolder = "LuBan目录 例如: E:\\svn\\dreamworks\\client\\dreamworks\\ExcelFile\\"
|
|
|
|
// client
|
|
client := widget.NewEntry()
|
|
client.PlaceHolder = "配置Luban Client.exe路径 例如: Luban.Client\\Luban.Client.exe"
|
|
|
|
//define
|
|
define := widget.NewEntry()
|
|
define.PlaceHolder = "定义文件"
|
|
define.Text = "Defines\\__root__.xml"
|
|
|
|
// output
|
|
outputCodeDir := widget.NewEntry()
|
|
outputCodeDir.Text = "sys\\configure\\structs"
|
|
outputJsonDir := widget.NewEntry()
|
|
outputJsonDir.Text = "bin\\json"
|
|
|
|
//input
|
|
inputDir := widget.NewEntry()
|
|
inputDir.Text = "Datas"
|
|
|
|
//genType
|
|
var genTypeText string
|
|
genType := widget.NewSelect([]string{"go", "json", "all"}, func(s string) {
|
|
genTypeText = s
|
|
})
|
|
genType.PlaceHolder = "生成类型"
|
|
|
|
if gt != nil {
|
|
serverAddr.Text = gt.ServerAddr
|
|
projectDir.Text = gt.ProjectDir //"E:\\projects\\workspace\\go_dreamfactory"
|
|
workDir.Text = gt.WorkDir // "E:\\svn\\dreamworks\\client\\dreamworks\\ExcelFile"
|
|
client.Text = gt.Client //"Luban.Client\\Luban.Client.exe"
|
|
genType.Selected = gt.GenType
|
|
genTypeText = gt.GenType
|
|
}
|
|
|
|
form := widget.NewForm(
|
|
widget.NewFormItem("服务地址", serverAddr),
|
|
widget.NewFormItem("项目目录", projectDir),
|
|
widget.NewFormItem("工作目录", workDir),
|
|
widget.NewFormItem("Client", client),
|
|
widget.NewFormItem("输入目录", inputDir),
|
|
widget.NewFormItem("输出Code目录", outputCodeDir),
|
|
widget.NewFormItem("输出JSON目录", outputJsonDir),
|
|
widget.NewFormItem("生成类型", genType),
|
|
)
|
|
|
|
getType := func() string {
|
|
if genTypeText == "" {
|
|
return ""
|
|
} else {
|
|
if genTypeText == "go" {
|
|
return "code_go_json"
|
|
} else if genTypeText == "json" {
|
|
return "data_json"
|
|
} else if genTypeText == "all" {
|
|
return "code_go_json,data_json"
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
saveBtn := widget.NewButtonWithIcon("保存配置", theme.DocumentSaveIcon(), func() {
|
|
if err := service.GetDbService().SaveLubanConf(&model.GenTool{
|
|
ServerAddr: serverAddr.Text,
|
|
ProjectDir: projectDir.Text,
|
|
Client: client.Text,
|
|
WorkDir: workDir.Text,
|
|
InputDir: inputDir.Text,
|
|
OutputCodeDir: outputCodeDir.Text,
|
|
OutputJsonDir: outputJsonDir.Text,
|
|
GenType: genTypeText,
|
|
}); err != nil {
|
|
logrus.WithField("err", err).Debug("保存配置")
|
|
}
|
|
logrus.Debug("save luban conf")
|
|
})
|
|
|
|
genBtn := &widget.Button{Text: "生成", Icon: theme.ConfirmIcon()}
|
|
genBtn.OnTapped = func() {
|
|
genBtn.Disable()
|
|
defer genBtn.Enable()
|
|
if runtime.GOOS != "windows" {
|
|
dialog.ShowError(errors.New("no support "+runtime.GOOS), toolWin.w)
|
|
return
|
|
}
|
|
|
|
if genTypeText == "" {
|
|
dialog.ShowError(errors.New("类型未选择"), toolWin.w)
|
|
return
|
|
}
|
|
|
|
commandStr := `%s -h %s -j cfg -- -d %s --input_data_dir %s --output_code_dir %s --output_data_dir %s --gen_types %s --go:bright_module_name bright -s server`
|
|
|
|
arg := fmt.Sprintf(commandStr,
|
|
fmt.Sprintf("%s%s", workDir.Text, client.Text),
|
|
serverAddr.Text,
|
|
fmt.Sprintf("%s%s", workDir.Text, define.Text),
|
|
fmt.Sprintf("%s%s", workDir.Text, inputDir.Text),
|
|
fmt.Sprintf("%s%s", projectDir.Text, outputCodeDir.Text),
|
|
fmt.Sprintf("%s%s", projectDir.Text, outputJsonDir.Text),
|
|
getType(),
|
|
)
|
|
|
|
logrus.Debug(arg)
|
|
c := exec.Command("cmd.exe", "/c", arg)
|
|
if err := c.Run(); err != nil {
|
|
dialog.ShowError(err, toolWin.w)
|
|
return
|
|
}
|
|
}
|
|
|
|
c := container.NewGridWithColumns(2, saveBtn, genBtn)
|
|
content.Objects = append(content.Objects, container.NewBorder(form, c, nil, nil))
|
|
|
|
this.tabItem.Content = content
|
|
return nil
|
|
}
|
|
|
|
func (a *appGen) GetAppName() string {
|
|
return common.TOOLBAR_GEN
|
|
}
|