logins.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. // import { models, db } from '../../utils/cloudbase.js'
  2. import { getDB, getModels, getCommand, getTempFileURLs } from '../../utils/cloudbase.js'
  3. Page({
  4. data: {
  5. phone: '', // 用户输入的手机号码
  6. logins: true
  7. },
  8. async onLoad(options) {
  9. if (options.phone) {
  10. console.log('注册跳转手机号:', options.phone);
  11. this.setData({
  12. phone: options.phone,
  13. logins: false // 隐藏验证码
  14. });
  15. // 自动登录
  16. await this.autoLogin(options.phone);
  17. }
  18. },
  19. // 监听手机号码输入
  20. onInputPhone(e) {
  21. this.setData({
  22. phone: e.detail.value
  23. });
  24. },
  25. // 确定按钮点击事件
  26. async onConfirm() {
  27. const { phone } = this.data;
  28. if (!phone) {
  29. wx.showToast({
  30. title: '请输入手机号码',
  31. icon: 'none'
  32. });
  33. return;
  34. }
  35. if (!/^1[3-9]\d{9}$/.test(phone)) {
  36. wx.showToast({
  37. title: '输入的手机号码有误',
  38. icon: 'none'
  39. });
  40. return;
  41. }
  42. const childComponent = this.selectComponent('#loginCaptcha');
  43. const result = childComponent.validCaptcha()
  44. if (!result.flag) {
  45. wx.showToast({
  46. title: result.msg,
  47. icon: 'none'
  48. });
  49. return
  50. }
  51. const models = await getModels()
  52. const { data } = await models.wx_user.list({
  53. filter: {
  54. where: {
  55. phone: this.data.phone
  56. }
  57. },
  58. pageSize: 100, // 分页大小,建议指定,如需设置为其它值,需要和 pageNumber 配合使用,两者同时指定才会生效
  59. pageNumber: 1, // 第几页
  60. getCount: true, // 开启用来获取总数
  61. // envType: pre 体验环境, prod 正式环境
  62. envType: "prod",
  63. });
  64. const users = data.records || [];
  65. // 如果查不到任何数据
  66. if (users.length === 0) {
  67. wx.showToast({
  68. title: '该手机号未注册,请换其他手机号登录',
  69. icon: 'none'
  70. });
  71. return;
  72. }
  73. // ✅ 如果查到了,但全部都是 delete === 1,则视为无有效账号
  74. const allDeleted = users.every(user => user.delete === 1);
  75. if (allDeleted) {
  76. wx.showToast({
  77. title: '该手机号未注册,请换其他手机号登录',
  78. icon: 'none'
  79. });
  80. return;
  81. }
  82. // ✅ 只要有一个 delete === 0,就继续登录
  83. const validUser = users.find(user => user.delete === 0);
  84. wx.setStorageSync('userInfo', validUser);
  85. wx.showToast({
  86. title: '登录成功',
  87. icon: 'success'
  88. });
  89. wx.switchTab({
  90. url: '/pages/index/index'
  91. });
  92. },
  93. // 自动登录逻辑
  94. async autoLogin(phone) {
  95. try {
  96. if (!/^1[3-9]\d{9}$/.test(phone)) {
  97. wx.showToast({
  98. title: '手机号格式错误',
  99. icon: 'none'
  100. });
  101. return;
  102. }
  103. const models = await getModels();
  104. const { data } = await models.wx_user.list({
  105. filter: { where: { phone } },
  106. pageSize: 100,
  107. pageNumber: 1,
  108. getCount: true,
  109. envType: "prod",
  110. });
  111. const users = data.records || [];
  112. if (users.length === 0 || users.every(user => user.delete === 1)) {
  113. wx.showToast({
  114. title: '该手机号未注册,请重新注册',
  115. icon: 'none'
  116. });
  117. return;
  118. }
  119. // 找到有效账号
  120. const validUser = users.find(user => user.delete === 0);
  121. wx.setStorageSync('userInfo', validUser);
  122. wx.showToast({
  123. title: '登录成功',
  124. icon: 'success'
  125. });
  126. wx.switchTab({
  127. url: '/pages/index/index'
  128. });
  129. } catch (err) {
  130. console.error('自动登录失败:', err);
  131. wx.showToast({
  132. title: '登录失败,请稍后重试',
  133. icon: 'none'
  134. });
  135. }
  136. }
  137. })