package createView import ( "fmt" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/dialog" "fyne.io/fyne/v2/widget" dialogWin "github.com/sqweek/dialog" "log" "os/exec" "path/filepath" "time" "work_cation/global" "work_cation/models" "work_cation/repo" "work_cation/service" ) var chooseDir string func CreateExecFile(w fyne.Window) fyne.CanvasObject { var ( // 基础表单 formBase = &widget.Form{} info = &models.ExecFiles{BaseCard: models.NewBaseCard( models.ToolTypeExecFiles, repo.User.GetUserInfo(global.DB).ID, )} ) formBase.AppendItem(&widget.FormItem{Text: "名称", Widget: newDefaultEntry(&info.Title)}) formBase.AppendItem(&widget.FormItem{Text: "描述", Widget: newDefaultEntry(&info.Text)}) formBase.AppendItem(&widget.FormItem{Text: "封面", Widget: newDefaultEntry(&info.Covers), HintText: "暂未支持可不填"}) formBase.AppendItem(&widget.FormItem{Text: "执行命令", Widget: newDefaultEntry(&info.Cmd), HintText: "shell 命令 例: ./数据回档.exe"}) formBase.AppendItem(&widget.FormItem{Text: "执行路径", Widget: newDefaultEntry(&info.Pwd), HintText: ". 默认路径"}) chooseDirEntry := newDefaultEntry(&chooseDir) formBase.AppendItem(&widget.FormItem{Text: "文件夹", Widget: chooseDirEntry}) buttonDir := widget.NewButton("选择路径", func() { chooseDir1, err := dialogWin.Directory().Title("选择工具所在文件夹").SetStartDir(chooseDir).Browse() if err != nil { return } chooseDirEntry.SetText(chooseDir1) log.Println("Selected folder:", chooseDir) }) // 保存按钮 buttonSave := widget.NewButton("保存", func() { fmt.Println("info:", info) err := service.ExecFile.Create(info, chooseDir) if err != nil { dialog.ShowInformation("创建失败", err.Error(), w) return } dialog.ShowInformation("ok", "创建成功", w) // 更换 time.AfterFunc(2*time.Second, func() { w.Close() }) }) buttonTest := widget.NewButton("测试", func() { if info.Cmd == "" { dialog.ShowInformation("测试失败", "未填写执行命令", w) return } ex := exec.Command(info.Cmd) ex.Dir = filepath.Join(chooseDir, info.Pwd) if err := ex.Start(); err != nil { dialog.ShowInformation("测试失败", err.Error(), w) return } go func() { if err := ex.Wait(); err != nil { dialog.ShowInformation("测试失败", err.Error(), w) } }() }) return container.NewBorder(container.NewHBox(widget.NewLabel("新建"), widget.NewSeparator()), nil, nil, nil, container.NewScroll( container.NewVBox( formBase, buttonDir, buttonTest, container.NewHBox(buttonSave), ))) }