package views import ( "fmt" "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/data/binding" "fyne.io/fyne/v2/dialog" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" "os" "path/filepath" "time" "work_cation/assets" "work_cation/cfg" "work_cation/global" "work_cation/models" "work_cation/pkg/utils" "work_cation/repo" "work_cation/service" ) func mainUserViews(w fyne.Window) fyne.CanvasObject { var userCard = widget.NewCard("", "", nil) user1 := repo.User.GetUserInfo(global.DB) refresh := func(user *models.Users) { userCard.SetTitle(user.Name) userCard.SetSubTitle(user.Ip) image := canvas.NewImageFromResource(assets.LogoDataSR) if user.Avatar != "" { bytes, err := os.ReadFile(filepath.Join(cfg.T.Avatar, user.Avatar)) if err == nil { image.Resource = fyne.NewStaticResource("", bytes) } } image.FillMode = canvas.ImageFillContain userCard.SetImage(image) var status = "" if service.Server.Status == service.StatusOnline { status = "在线" } else { status = "离线" } v := container.NewVBox( widget.NewLabel(fmt.Sprintf("状态:%s", status)), widget.NewButton("游戏", TenChinaGameView), ) userCard.SetContent(v) } refresh(user1) return container.NewBorder(widget.NewToolbar( widget.NewToolbarAction(theme.SettingsIcon(), func() { mainUserSetWin(refresh) }), widget.NewToolbarAction(theme.LoginIcon(), func() { err := service.Server.Online() if err != nil { dialog.ShowInformation("登录失败", err.Error(), w) return } refresh(user1) }), widget.NewToolbarAction(theme.LogoutIcon(), func() { err := service.Server.StatusOffline() if err != nil { dialog.ShowInformation("离线失败", err.Error(), w) return } refresh(user1) }), ), nil, nil, nil, userCard, ) } func mainUserSetWin(refresh func(*models.Users)) { myApp := fyne.CurrentApp() myWindow := myApp.NewWindow("设置个人信息") myWindow.CenterOnScreen() myWindow.Resize(fyne.NewSize(500, 0)) myWindow.SetContent(mainUserSetView(myWindow, refresh)) myWindow.Show() } func mainUserSetView(w fyne.Window, refresh func(*models.Users)) fyne.CanvasObject { var ( formWid = widget.NewForm() user = repo.User.GetUserInfo(global.DB) avatar = "" ) formWid.SubmitText = "保存" formWid.OnSubmit = func() { if avatar != "" { avatarPath := fmt.Sprintf("%s_avatar%s", user.ID, filepath.Ext(avatar)) // 删除旧的 if user.Avatar != "" { err := os.Remove(filepath.Join(cfg.T.Avatar, user.Avatar)) if err != nil { dialog.ShowInformation("原头像删除错误", err.Error(), w) } } // 拷贝文件 err := utils.File.CopyFile(avatar, filepath.Join(cfg.T.Avatar, avatarPath)) if err != nil { dialog.ShowInformation("头像地址错误", err.Error(), w) return } avatar = "" user.Avatar = avatarPath } err := repo.User.Update(global.DB, user) if err != nil { dialog.ShowInformation("保存失败", err.Error(), w) return } dialog.ShowInformation("结果", "保存成功", w) refresh(user) time.AfterFunc(200*time.Millisecond, w.Close) } formWid.Append("用户名", widget.NewEntryWithData(binding.BindString(&user.Name))) formWid.Append("头像", widget.NewEntryWithData(binding.BindString(&avatar))) formWid.Append("邮箱", widget.NewEntryWithData(binding.BindString(&user.Email))) formWid.Append("电话", widget.NewEntryWithData(binding.BindString(&user.Phone))) formWid.Append("工位", widget.NewEntryWithData(binding.BindString(&user.Address))) return formWid }