go_dreamfactory/cmd/v2/ui/app_gen.go
2022-08-18 18:52:22 +08:00

169 lines
4.2 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().Get()
logrus.Debugf("%v", gt)
content := container.NewMax()
content.Objects = []fyne.CanvasObject{}
serverAddr := widget.NewEntry()
serverAddr.PlaceHolder = "服务器地址"
serverAddr.Text = "10.0.1.11"
projectDir := widget.NewEntry()
projectDir.PlaceHolder = "项目目录"
projectDir.Text = "E:\\projects\\workspace\\go_dreamfactory"
workDir := widget.NewEntry()
workDir.PlaceHolder = "LuBan目录"
workDir.Text = "E:\\svn\\dreamworks\\client\\dreamworks\\ExcelFile"
// client
client := widget.NewEntry()
client.PlaceHolder = "配置Luban Client.exe路径"
client.Text = "\\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 = "生成类型"
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().Save(&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 gen conf")
})
genBtn := widget.NewButtonWithIcon("生成", theme.ConfirmIcon(), func() {
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,
workDir.Text+client.Text,
serverAddr.Text,
workDir.Text+define.Text,
workDir.Text+inputDir.Text,
projectDir.Text+outputCodeDir.Text,
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) OpenDefault() bool {
return true
}
func (a *appGen) GetAppName() string {
return common.TOOLBAR_GEN
}
func (a appGen) OnClose() bool {
return false
}