Files
2024-10-16 01:34:36 +08:00

131 lines
3.5 KiB
Go

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
}