App.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <script>
  2. import { mapActions } from 'vuex'
  3. //https://ext.dcloud.net.cn/plugin?id=22675
  4. import permissionListener from "@/uni_modules/c-permission-listener";
  5. export default {
  6. mixins:[],
  7. // 全端,数据共享,还可以解决页面初始化模板访问不到值得
  8. // 有坑 分包里的页面访问不到
  9. globalData: {},
  10. onLaunch() {
  11. // #ifdef APP-PLUS
  12. // 清除角标数字
  13. plus.runtime.setBadgeNumber(0);
  14. // #endif
  15. uni.onPushMessage((res) => {
  16. console.log("收到推送消息:",res) //监听推送消息
  17. let message = res.data;
  18. // 兼容两种可能的数据结构
  19. let title = message.aps && message.aps.alert ? message.aps.alert.title : '';
  20. let content = message.content || (message.aps && message.aps.alert ? message.aps.alert.body : '');
  21. // 提取页面路径(支持 pagesOrder/detail 这样的格式)
  22. let pagePath = message.payload && message.payload.page;
  23. // 用户点击查看详情,跳转到指定页面
  24. // 检查是否需要添加 / 前缀
  25. let url = pagePath.startsWith('/') ? pagePath : `/${pagePath}`;
  26. // 如果有额外参数,拼接到URL
  27. if (message.params || (message.payload && message.payload.params)) {
  28. let params = message.params || message.payload.params;
  29. let queryString = Object.keys(params).map(key => `${key}=${params[key]}`).join('&');
  30. url = `${url}?${queryString}`;
  31. }
  32. console.log('推送消息跳转页面:', url);
  33. // 使用 navigateTo 跳转
  34. uni.navigateTo({
  35. url: url,
  36. fail: (err) => {
  37. console.error('页面跳转失败:', err);
  38. }
  39. });
  40. // 设置角标
  41. let badgeNumber = message.aps && message.aps.badge ? message.aps.badge - 1 : false;
  42. if (badgeNumber !== false) {
  43. //plus.runtime.setBadgeNumber(badgeNumber);
  44. // 清除数字
  45. plus.runtime.setBadgeNumber(0);
  46. } else {
  47. // 清除数字
  48. plus.runtime.setBadgeNumber(0);
  49. }
  50. })
  51. // 删除缓存
  52. if (process.env.NODE_ENV == 'production') {
  53. uni.removeStorageSync('shopUser')
  54. }
  55. // #ifdef APP-PLUS
  56. const extConfig = {}
  57. // #endif
  58. // #ifdef MP-WEIXIN
  59. const extConfig = wx.getExtConfigSync ? wx.getExtConfigSync() : {}
  60. uni.setStorageSync('account', extConfig.account)
  61. // #endif
  62. },
  63. onLoad(){
  64. },
  65. onShow() {
  66. // #ifdef APP-PLUS
  67. // 清除角标数字
  68. plus.runtime.setBadgeNumber(0);
  69. // #endif
  70. // permissionEnums枚举建议单独一个js文件,然后引入
  71. const permissionEnums = {
  72. // 取android.permission.ACCESS_COARSE_LOCATION后面那个
  73. "ACCESS_COARSE_LOCATION": {
  74. name: "定位", // 当前权限的名称
  75. explain: "展示附近店铺、填写收货地址等相关功能" // 权限说明
  76. },
  77. "CALL_PHONE": {
  78. name: "电话", // 当前权限的名称
  79. explain: "为了方便联系客服, 我们需要申请您设备的拨打电话权限" // 权限说明
  80. },
  81. "CAMERA":{
  82. name:"使用摄像头",
  83. explain: "为了方便给花材拍照片,上传花材图片等"
  84. },
  85. "READ_EXTERNAL_STORAGE":{
  86. name:"读取外部存储空间",
  87. explain:"为了修改个人头像和上传花材图片, 我们需要申请您设备的相机和存储权限",
  88. },
  89. "WRITE_EXTERNAL_STORAGE":{
  90. name:"写入外部存储空间",
  91. explain:"为了保存推广海报和小程序码到手机相册, 我们需要申请您设备的存储权限",
  92. },
  93. "READ_MEDIA_IMAGES":{
  94. name:"读取外部存储空间",
  95. explain:"为了修改个人头像和上传花材图片, 我们需要申请您设备的相机和存储权限",
  96. },
  97. "READ_MEDIA_VIDEO":{
  98. name:"读取外部存储空间",
  99. explain:"为了修改个人头像和上传花材图片, 我们需要申请您设备的相机和存储权限",
  100. },
  101. "READ_MEDIA_AUDIO":{
  102. name:"读取外部存储空间",
  103. explain:"为了修改个人头像和上传花材图片, 我们需要申请您设备的相机和存储权限",
  104. },
  105. }
  106. // 唤起权限会触发onHide,所以listenerFunc须在onShow生命周期调用
  107. permissionListener && permissionListener.listenerFunc(permissionEnums)
  108. },
  109. onHide() {},
  110. onError(err) {
  111. console.error(err, '错误捕获')
  112. },
  113. methods: {
  114. ...mapActions(['setUserShopAll'])
  115. }
  116. }
  117. </script>
  118. <style lang="scss">
  119. //没有scss变量方法的,主要引入 这样打包的时候就不会所有的组件都打包进去
  120. @import './static/iconfont/iconfont.css';
  121. @import './static/css/uni2.css';
  122. @import './static/css/base.scss';
  123. @import './static/css/common.scss';
  124. @import './static/css/reset.scss';
  125. page {
  126. height: 100%;
  127. }
  128. /**开单-扎和支切换样式**/
  129. .switchover-unit{
  130. position: fixed;
  131. left: calc(170upx / 2 - 50upx);
  132. bottom: 140upx;
  133. display: flex;
  134. align-items: center;
  135. justify-content: center;
  136. width: 100upx;
  137. height: 100upx;
  138. color: #FFFFFF;
  139. background: #4b8cf4;
  140. border-radius: 50%;
  141. font-size: 42upx;
  142. font-weight: 700;
  143. z-index: 2;
  144. }
  145. /**开单-增加减少动画**/
  146. .animation{animation:imgmove 0.3s 1;animation-iteration-count:1;}
  147. @-webkit-keyframes imgmove{0%{transform: scale(0.7);}100%{transform: scale(1);}}
  148. </style>