소스 검색

分支合并

lianbingjie 5 년 전
부모
커밋
ec6775fce4
7개의 변경된 파일79개의 추가작업 그리고 15개의 파일을 삭제
  1. 3 3
      addVersion.js
  2. 2 2
      package.json
  3. 5 2
      src/utils/globalVariable.ts
  4. 12 0
      src/views/404.vue
  5. 11 0
      src/views/buy/Buy.vue
  6. 1 8
      src/views/main/Home.vue
  7. 45 0
      src/views/pay/Pay.vue

+ 3 - 3
addVersion.js

@@ -23,10 +23,10 @@ fs.readFile(`${config.projectPath}${config.filePath}${config.templateName}`, 'ut
   config.output.forEach(function (item, index) {
     let replaced = files.replace(new RegExp(`${config.filePath}`, 'g'), `${item.origin}${config.filePath}`)
     // 在文件中部分 标签 前加换行,避免被正则贪婪匹配全部匹配到
-    replaced = replaced.replace(/<script/g, `\n<script`)
-                        .replace(/<link/g, `\n<link`)
-                        .replace(/<div/g, `\n<div`)
+    replaced = replaced.replace(/(<[a-z])/g, `\n$1`)
     replaced = replaced.replace(/script(.*?)src=\/(.*)\/(.*).min.js/g, `script$1src=${item.origin}${config.urlLocal}/$3.min.js`)
+    // 将前面添加的换行去掉
+    replaced = replaced.replace(/\n/g, '')
     fs.writeFileSync(`${config.projectPath}${config.filePath}${item.fileName}`, replaced, 'utf8', function (err) {
       if (err) return console.log(err)
     })

+ 2 - 2
package.json

@@ -1,12 +1,12 @@
 {
   "name": "jianyu-datareport",
-  "version": "1.8.51",
+  "version": "1.8.53",
   "private": true,
   "scripts": {
     "serve": "vue-cli-service serve",
     "build": "vue-cli-service build --mode production",
+    "build:prod": "npm run build && npm run replace",
     "replace": "node addVersion.js",
-    "prod": "npm run build && npm run replace",
     "lint": "vue-cli-service lint --fix",
     "analyzer": "use_analyzer=true vue-cli-service build --mode production",
     "analyze": "cross-env use_analyzer=true vue-cli-service build --mode production"

+ 5 - 2
src/utils/globalVariable.ts

@@ -1,6 +1,6 @@
 import Vue from 'vue'
 import WeiXinSDK from '@/utils/wx-js-sdk-register.ts'
-import { isWeiXinBrowser } from '@/utils/globalFunctions.ts'
+import { isWeiXinBrowser, androidOrIOS } from '@/utils/globalFunctions.ts'
 import { getWxSdkSign } from '@/api/pay.ts'
 
 declare module 'vue/types/vue' {
@@ -12,11 +12,14 @@ declare module 'vue/types/vue' {
 }
 
 const inWeiXinBrowser = isWeiXinBrowser()
+const isAndroidOrIos = androidOrIOS()
 
 // 全局变量
 Vue.prototype.$env = {
   isWeiXinBrowser: inWeiXinBrowser,
-  platform: inWeiXinBrowser ? 'wx' : 'app'
+  platform: inWeiXinBrowser ? 'wx' : 'app',
+  isAndroid: isAndroidOrIos === 'android',
+  isIOS: isAndroidOrIos === 'ios'
 }
 
 // 如果是微信浏览器, 注册一个微信SDK初始化函数

+ 12 - 0
src/views/404.vue

@@ -20,11 +20,23 @@ import empty from '@/components/common/Empty.vue'
 })
 
 export default class Page404 extends Vue {
+  fromPath = ''
+
+  beforeRouteEnter (to, from, next) {
+    next(vm => {
+      vm.fromPath = from.fullPath
+    })
+  }
+
   created () {
     const route = this.$route
     const redirectedFrom = route.redirectedFrom
     if (redirectedFrom) {
       console.log('路由:%c %s %c未找到', 'color: red', redirectedFrom, 'color: #000')
+    } else {
+      setTimeout(() => {
+        console.log('主动跳转: 来自 -> %s', this.fromPath)
+      }, 500)
     }
   }
 }

+ 11 - 0
src/views/buy/Buy.vue

@@ -269,6 +269,17 @@ export default class BuyReport extends Vue {
   }
 
   mounted () {
+    // 解决安卓微信,在支付页面无交互的情况下,popstate不会触发的问题
+    // 此处使用变量控制
+    if (this.$env.isAndroid && this.$env.isWeiXinBrowser) {
+      const t = sessionStorage.getItem('datareport-ordercode')
+      if (t) {
+        sessionStorage.removeItem('datareport-ordercode')
+        location.href = `${process.env.BASE_URL}order/detail/${t}`
+        return
+      }
+    }
+
     const recover = this.recoverState()
     if (!recover) {
       this.getInfo()

+ 1 - 8
src/views/main/Home.vue

@@ -79,14 +79,7 @@ export default class Home extends Vue {
     scroll: 0
   }
 
-  defaultListState = {
-    list: [],
-    loading: false,
-    finished: false,
-    currentPage: 1,
-    totalPage: 0,
-    scroll: 0
-  }
+  defaultListState = JSON.parse(JSON.stringify(this.listState))
 
   beforeRouteEnter (to, from, next) {
     if (from.name === 'detail') {

+ 45 - 0
src/views/pay/Pay.vue

@@ -93,14 +93,26 @@ export default class Pay extends Vue {
 
   checkPaySuccessTimer = 0
 
+  // 保存当前监听popstate的history.state
+  historyState = {
+    id: ''
+  }
+
   beforeRouteLeave (to, from, next) {
     clearInterval(this.checkPaySuccessTimer)
+
+    // app端(不跳出vue程序) --- 支付返回订单详情
+    // (由于微信端使用location.href跳转,故此处监听不到,不会执行)
+    if (to.name === 'buy' && from.name === 'pay') {
+      next({ path: `/order/detail/${this.orderInfo.ordercode}` })
+    }
     next()
   }
 
   created () {
     const query: any = this.$route.query
     this.orderInfo.ordercode = query.ordercode
+    sessionStorage.setItem('datareport-ordercode', query.ordercode)
     if (this.env.isWeiXinBrowser) {
       // 微信端注册wxjsSdk
       this.$registerWxSdk()
@@ -109,6 +121,18 @@ export default class Pay extends Vue {
 
   mounted () {
     this.getInfo()
+
+    // 微信下使用addEventListener监听返回 跳转订单详情
+    if (this.env.isWeiXinBrowser) {
+      this.pushHistory()
+
+      window.addEventListener('popstate', this.onpopstate)
+
+      // 当组件销毁时解绑addEventListener的事件监听
+      this.$once('hook:beforeDestroy', () => {
+        window.removeEventListener('popstate', this.onpopstate)
+      })
+    }
   }
 
   radioCheck (type) {
@@ -228,6 +252,27 @@ export default class Pay extends Vue {
       })
     }, 3000)
   }
+
+  // 微信专用后退监听
+  onpopstate () {
+    if (this.historyState.id && this.historyState.id === '1') {
+      sessionStorage.removeItem('datareport-ordercode')
+      location.replace(`${process.env.BASE_URL}order/detail/${this.orderInfo.ordercode}`)
+    } else {
+      console.log('onpopstate事件监听未被正常注销', history.state)
+    }
+    this.historyState.id = ''
+  }
+
+  pushHistory () {
+    const pushContent = {
+      id: '1',
+      title: '订单详情',
+      url: '#backToOrderDetail'
+    }
+    this.historyState = pushContent
+    history.pushState(pushContent, pushContent.title, pushContent.url)
+  }
 }
 </script>