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 }