MainViewModel.ets 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { DateFormat, IBestToast, userInfo, UserInfo, YTAvoid, YTDateUtil, yTRouter } from "basic"
  2. import { BabyFoodApi } from "../Apis/BabyFoodApi"
  3. import { routerUtils } from "../utils/RouterUtils"
  4. import { AppStorageV2 } from "@kit.ArkUI"
  5. import { BabyInfo, Cuisine, WeeklyPlan, WeeklyPlanPurchaseList } from "../model/Index"
  6. @ObservedV2
  7. export class MainViewModel{
  8. @Trace safeTop: number = 0
  9. @Trace babyList: BabyInfo[] = []
  10. // 当前选择的宝宝信息
  11. @Trace selectedBabyIndex: number = 0
  12. // 当前的宝宝信息
  13. @Trace babyInfo: BabyInfo = new BabyInfo()
  14. // 用户信息
  15. @Trace userInfo: UserInfo = AppStorageV2.connect<UserInfo>(UserInfo, 'UserInfo', () => userInfo)!
  16. // 菜品下拉菜单
  17. @Trace dishList: Cuisine[] = []
  18. // 本周的食谱计划
  19. @Trace allPlan: WeeklyPlan = {}
  20. @Trace planList?: WeeklyPlanPurchaseList
  21. // 一周
  22. week: string[] = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
  23. constructor() {
  24. this.safeTop = AppStorage.get(YTAvoid.SAFE_TOP_KEY) as number
  25. }
  26. // 登录状态改变
  27. async LoginStatusChange(){
  28. this.userInfo.setUserInfoAndLogin(userInfo, false)
  29. if(this.userInfo.checkLogin()){
  30. // 如果需要同步操作记得加 await
  31. await this.getBabyList()
  32. await this.getWeeklyPlan()
  33. await this.getDishList()
  34. } else {
  35. this.babyList = []
  36. }
  37. }
  38. // 登录校验函数
  39. checkLogin(f: () => void, isCheckBaby: boolean = true) {
  40. if(this.userInfo.checkLogin()) {
  41. if(this.babyInfo?.id || !isCheckBaby){
  42. f()
  43. } else {
  44. IBestToast.show('请先添加宝宝信息吧!')
  45. this.increaseBabyInfo()
  46. }
  47. } else {
  48. yTRouter.router2LoginPage(true)
  49. }
  50. }
  51. // 修改选中的宝宝信息
  52. updateBabyInfo(index: number) {
  53. this.babyInfo = this.babyList[index]
  54. this.selectedBabyIndex = index
  55. }
  56. // 获取本周食谱计划
  57. async getWeeklyPlan(startDate?: string){
  58. if(!startDate) startDate = YTDateUtil.formatDate(new Date(), DateFormat.UNDERLINE)
  59. this.allPlan = await BabyFoodApi.getWeeklyPlan(this.babyInfo.id, startDate)
  60. this.planList = this.allPlan.weeklyPlan
  61. }
  62. // 获取菜品列表
  63. async getDishList(){
  64. this.dishList = await BabyFoodApi.getDishList()
  65. }
  66. // 获取宝宝信息列表
  67. async getBabyList(){
  68. this.babyList = await BabyFoodApi.getBabyList()
  69. this.updateBabyInfo(0)
  70. }
  71. // 进入添加宝宝信息页面
  72. increaseBabyInfo(){
  73. routerUtils.router2IncreaseBabyInfo((res) => {
  74. this.getBabyList()
  75. })
  76. }
  77. /**
  78. * 重写的返回逻辑
  79. * @returns
  80. */
  81. _onBackPressed(){
  82. yTRouter.pop('')
  83. return true;
  84. }
  85. }