package views import ( "errors" "fmt" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/dialog" "fyne.io/fyne/v2/widget" "regexp" "work_cation/global" "work_cation/models" "work_cation/models/repo" "work_cation/pkg/utils" ) func CreateErlangCard(w fyne.Window) fyne.CanvasObject { // user := repo.UserRepo.GetUserInfo(global.DB) var erlangCard = models.ErlangCards{ UUID: utils.CreateUUID(), UserIp: utils.Get192Ip(), } var items = []*widget.FormItem{ {Text: "名称", Widget: widget.NewEntry()}, {Text: "描述", Widget: widget.NewEntry()}, {Text: "封面", Widget: widget.NewEntry(), HintText: "暂未支持可不填"}, {Text: "是否默认展示", Widget: widget.NewEntry()}, {Text: "模版内容", Widget: widget.NewEntry()}, } var items2 []*widget.FormItem form2 := &widget.Form{ Items: items2, SubmitText: "保存创建", OnSubmit: func() { for _, item := range items { switch item.Text { case "名称": erlangCard.Title = item.Widget.(*widget.Entry).Text case "描述": erlangCard.Text = item.Widget.(*widget.Entry).Text case "封面": erlangCard.Covers = []string{item.Widget.(*widget.Entry).Text} case "是否默认展示": erlangCard.IsShowOut = item.Widget.(*widget.Entry).Text == "1" case "模版内容": erlangCard.Template = item.Widget.(*widget.Entry).Text default: } } if countVarOccurrences(erlangCard.Template) != len(items2) { dialog.ShowError(errors.New("变量名数量异常"), w) return } for _, item2 := range items2 { fmt.Println("key:", item2.Text, "value:", item2.Widget.(*widget.Entry).Text) erlangCard.VarName = append(erlangCard.VarName, item2.Widget.(*widget.Entry).Text) } err := repo.ErlangCardRepo.Create(global.DB, &erlangCard) if err != nil { dialog.ShowError(err, w) } }, } form := &widget.Form{ Items: items, SubmitText: "生成变量表单", OnSubmit: func() { for _, item := range items { switch item.Text { case "模版内容": varSum := countVarOccurrences(item.Widget.(*widget.Entry).Text) for i := 0; i < varSum; i++ { newItem := &widget.FormItem{Text: fmt.Sprintf("变量%d", i+1), Widget: widget.NewEntry()} items2 = append(items2, newItem) form2.AppendItem(newItem) } default: } } }, } return container.NewBorder(widget.NewSeparator(), nil, nil, nil, container.NewScroll( container.NewVBox( form, form2, ))) } func countVarOccurrences(input string) int { re := regexp.MustCompile(`\$var`) matches := re.FindAllStringIndex(input, -1) return len(matches) }