优惠券小程序(猎户)

App.vue 6.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <script>
  2. import { get as $get, postJSON as $postJSON, } from './config/util'
  3. import { api as $api } from './config/api'
  4. import $store from './store/index'
  5. const md5 = require('./config/md5')
  6. export default {
  7. globalData: {
  8. isIphoneX: false, // 是否为 iphoneX 及以上机型
  9. statusBarHeight: 44, // 状态栏高度
  10. },
  11. onLaunch: function (options) {
  12. console.log("App onLaunch options => ", options);
  13. // 判断当前设备是否为 iphoneX 及以上机型
  14. this.handleGetIsIphoneX();
  15. // 判断当前小程序是否为最新版本
  16. this.handleVersionUpdate();
  17. },
  18. onShow: function () {
  19. console.log('App onShow => ')
  20. // 执行用户登录
  21. this.handleUserLogin()
  22. },
  23. onHide: function () {
  24. console.log("App Hide");
  25. },
  26. methods: {
  27. // 判断当前设备是否为 iphoneX 及以上机型
  28. handleGetIsIphoneX() {
  29. const systemInfo = uni.getSystemInfoSync()
  30. this.$scope.globalData.statusBarHeight = systemInfo.statusBarHeight
  31. if (systemInfo.system.toUpperCase().includes("IOS")) {
  32. if (systemInfo.safeArea.top > 20) {
  33. this.$scope.globalData.isIphoneX = true;
  34. }
  35. }
  36. },
  37. // 判断当前小程序是否为最新版本
  38. handleVersionUpdate() {
  39. const that = this;
  40. // 判断应用的 getUpdateManager 是否在当前版本可用
  41. if (uni.canIUse("getUpdateManager")) {
  42. const updateManager = uni.getUpdateManager();
  43. // 向小程序后台请求完新版本信息
  44. updateManager.onCheckForUpdate(function (res) {
  45. if (res.hasUpdate) {
  46. // 小程序有新版本,静默下载新版本,新版本下载完成
  47. updateManager.onUpdateReady(function () {
  48. uni.showModal({
  49. title: "更新提示",
  50. content: "小程序已发布新版本,是否重启应用?",
  51. success: function (res) {
  52. if (res.confirm) {
  53. updateManager.applyUpdate();
  54. } else if (res.cancel) {
  55. // 强制用户更新,弹出第二次弹窗
  56. uni.showModal({
  57. title: "提示",
  58. content: "小程序已发布新版本,是否重启应用",
  59. showCancel: false, // 隐藏取消按钮
  60. success: function (res) {
  61. // 第二次提示后,强制更新
  62. if (res.confirm) {
  63. // 当新版本下载完成,调用该方法会强制当前小程序应用上新版本并重启
  64. updateManager.applyUpdate();
  65. } else if (res.cancel) {
  66. // 重新回到版本更新提示
  67. that.handleVersionUpdate();
  68. }
  69. },
  70. });
  71. }
  72. },
  73. });
  74. });
  75. // 当新版本下载失败
  76. updateManager.onUpdateFailed(function () {
  77. uni.showModal({
  78. title: "提示",
  79. content: "小程序版本更新失败,请您删除当前小程序并重新打开",
  80. });
  81. });
  82. }
  83. });
  84. } else {
  85. // 提示用户在最新版本的客户端上体验
  86. uni.showModal({
  87. title: "温馨提示",
  88. content: "当前微信版本过低,可能无法使用该功能,请升级到最新版本后重试。",
  89. });
  90. }
  91. },
  92. // 显示获取用户信息确认弹框
  93. handleShowModal() {
  94. return new Promise((resolve) => {
  95. uni.showModal({
  96. title: '提示',
  97. content: '请授权您的昵称、头像',
  98. success: async (res) => {
  99. if (res.confirm) {
  100. resolve('确认')
  101. }
  102. }
  103. })
  104. })
  105. },
  106. // 获取用户微信头像、昵称信息
  107. handleGetUserProfile() {
  108. return new Promise((resolve, reject) => {
  109. uni.getUserProfile({
  110. desc: '请授权您的昵称、头像', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  111. success(res) {
  112. console.log('getUserProfile => ', res)
  113. const { avatarUrl, nickName } = res.userInfo
  114. resolve({ avatarUrl, nickName })
  115. },
  116. fail(err) {
  117. console.log('getUserProfile err => ', err)
  118. reject(err)
  119. }
  120. })
  121. })
  122. },
  123. // 保存用户信息
  124. async handleSaveUserInfo({ avatarUrl, nickName }) {
  125. const isLogin = uni.getStorageSync('isLogin')
  126. let user_id = uni.getStorageSync('user_id')
  127. if (!isLogin || !user_id) {
  128. await this.handleUserLogin()
  129. user_id = uni.getStorageSync('user_id')
  130. }
  131. console.log('user_id => ', user_id)
  132. const url = $api.my_setInfo
  133. const params = {
  134. user_id: user_id,
  135. type: 1, // 头像类型 1链接 2文件
  136. avatar_file: avatarUrl,
  137. nickname: nickName,
  138. }
  139. const { data: res = {} } = await $postJSON(url, params)
  140. if (res && res.errno == 0) {
  141. console.log('res => ', res)
  142. // 重新获取用户最新信息
  143. await this.handleUserLogin()
  144. } else {
  145. uni.showToast({ title: res.err || '操作失败', icon: 'none' })
  146. }
  147. },
  148. // 用户登录
  149. handleUserLogin() {
  150. return new Promise((resolve, reject) => {
  151. uni.login({
  152. success: async res => {
  153. const code = res.code
  154. try {
  155. const { data: res = {} } = await $get($api.user_login, { code })
  156. if (res && res.errno == 0) {
  157. uni.setStorageSync('user_info', res.rst.user_info)
  158. uni.setStorageSync('openid', res.rst.openid)
  159. uni.setStorageSync('session_key', res.rst.session_key)
  160. uni.setStorageSync('user_id', res.rst.user_id)
  161. uni.setStorageSync('union_id', res.rst.union_id)
  162. uni.setStorageSync('ttl', res.rst.ttl)
  163. const sign = md5.hex_md5(`random=${res.rst.random}&ttl=${res.rst.ttl}&user_id=${res.rst.user_id}`)
  164. uni.setStorageSync('sign', sign)
  165. uni.setStorageSync('isLogin', true)
  166. $store.commit('setIsLogin', true)
  167. resolve(res)
  168. } else {
  169. uni.showToast({ title: res.err, icon: 'none' })
  170. }
  171. } catch (error) {
  172. reject(error)
  173. console.log('error => ', error)
  174. }
  175. },
  176. })
  177. })
  178. },
  179. },
  180. };
  181. </script>
  182. <style lang="scss">
  183. @import "uview-ui/index.scss";
  184. /*每个页面公共css */
  185. </style>