App.vue 5.4 KB

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