package formview import ( "fmt" "go_dreamfactory/cmd/v2/lib/common" "go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/service" "go_dreamfactory/cmd/v2/service/observer" "go_dreamfactory/comm" "go_dreamfactory/pb" "time" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/dialog" "fyne.io/fyne/v2/widget" "github.com/sirupsen/logrus" "github.com/spf13/cast" ) // 练功房派遣 type DispatchView struct { BaseformView itemList *common.ItemList flag bool noticeLabl *widget.Label //公告信息 } func (d *DispatchView) CreateView(t *model.TestCase) fyne.CanvasObject { d.itemList = common.NewItemList() d.itemList.ItemList = d.itemList.CreateList() //选择任务 d.itemList.ItemList.OnSelected = func(id widget.ListItemID) { item := d.itemList.CachedList.Items[id] d.itemList.SelItemId = item.Id logrus.Debug(item) } //玩家公告 d.noticeLabl = new(widget.Label) noticeFun := func() { d.itemList.Reset() if err := service.GetPttService().SendToClient( t.MainType, "notice", &pb.DispatchNoticeReq{}, ); err != nil { logrus.Error(err) return } } noticeBtn := widget.NewButton("玩家公告", func() { noticeFun() }) //刷新公告 refreshBtn := widget.NewButton("刷新公告", func() { if err := service.GetPttService().SendToClient( t.MainType, "refresh", &pb.DispatchRefreshReq{}, ); err != nil { logrus.Error(err) return } noticeFun() }) //领取奖励 receiveBtn := widget.NewButton("领取奖励", func() { if d.itemList.SelItemId == "" { logrus.Debug("参数是空") return } if err := service.GetPttService().SendToClient( t.MainType, "receive", &pb.DispatchReceiveReq{ TaskId: cast.ToInt32(d.itemList.SelItemId), }, ); err != nil { logrus.Error(err) return } }) //一键领取奖励 autoReceiveBtn := widget.NewButton("一键领取", func() { if err := service.GetPttService().SendToClient( t.MainType, "autoreceive", &pb.DispatchAutoReceiveReq{}, ); err != nil { logrus.Error(err) return } }) //派遣 hero1 := widget.NewEntry() hero2 := widget.NewEntry() form := widget.NewForm( widget.NewFormItem("英雄1", hero1), widget.NewFormItem("英雄2", hero2), ) paiqianBtn := widget.NewButton("派遣", func() { //弹窗 form.OnSubmit = func() { if hero1.Text == "" && hero2.Text == "" { logrus.Debug("heroId参数不能为空") return } heroIds := []string{} if hero1.Text != "" { heroIds = append(heroIds, hero1.Text) } if hero2.Text != "" { heroIds = append(heroIds, hero2.Text) } if err := service.GetPttService().SendToClient( t.MainType, "do", &pb.DispatchDoReq{ TaskId: cast.ToInt32(d.itemList.SelItemId), HeroIds: heroIds, }, ); err != nil { logrus.Error(err) return } } form.SubmitText = "派遣" paiWin := dialog.NewCustom("派遣", "关闭", form, d.w) paiWin.Resize(fyne.NewSize(600, 300)) paiWin.Show() }) //周奖励领取 weekReceiveBtn := widget.NewButton("周奖励", func() { if err := service.GetPttService().SendToClient( t.MainType, "weekrecive", &pb.DispatchWeekReciveReq{ Idx: 1, }, ); err != nil { logrus.Error(err) return } }) top := container.NewHBox(noticeBtn, refreshBtn, receiveBtn, autoReceiveBtn, paiqianBtn, weekReceiveBtn) bottom := container.NewHBox(d.noticeLabl) c := container.NewBorder(top, bottom, nil, nil, d.itemList.ItemList) d.noticeList() return c } func (a *DispatchView) noticeList() { if a.flag { return } a.obs.AddListener(observer.EVENT_REQ_RSP, observer.Listener{ OnNotify: func(d interface{}, args ...interface{}) { data := d.(*pb.UserMessage) if data.MainType == string(comm.ModuleDispatch) && data.SubType == "notice" { rsp := &pb.DispatchNoticeResp{} if !comm.ProtoUnmarshal(data, rsp) { logrus.Error("unmarshal err") return } if rsp.Dispatch == nil { return } a.noticeLabl.SetText(fmt.Sprintf("公告等级:%v 免费次数:%v 刷新次数:%v 任务数:%v 周任务数:%v 周奖励领取:%v", rsp.Dispatch.Lv, rsp.Dispatch.FreeCount, rsp.Dispatch.RefreshCount, rsp.Dispatch.TaskCount, rsp.Dispatch.WeekCount, rsp.Dispatch.WeekReceived, )) a.noticeLabl.Refresh() for _, v := range rsp.Dispatch.Tasks { t1 := time.Unix(v.Duration, 0) lt1 := t1.Format("15:04:05") t2 := time.Unix(v.LeftTime, 0) lt2 := t2.Format("15:04:05") item := common.Item{ Id: cast.ToString(v.TaskId), Text: fmt.Sprintf("ID:%v 状态:%v 任务截至:%v 派遣截至:%v", v.TaskId, v.Status, lt1, lt2), Data: v, } a.itemList.AddItem(item) } } }, }) a.flag = true }