Browse Source

Merge branch '03/18VipActive' into test

lex-xin 4 years ago
parent
commit
72fd0a67d6
3 changed files with 81 additions and 2 deletions
  1. 5 0
      src/common/common.js
  2. 57 0
      src/helpers/native-message.js
  3. 19 2
      src/views/trainStatistics/trainDetail.vue

+ 5 - 0
src/common/common.js

@@ -1,3 +1,8 @@
+export const getRandomKey = () => {
+	let key = '' + new Date().getTime() + Math.floor(Math.random() * 1000000)
+	return key
+}
+
 const browser = () => {
   var u = navigator.userAgent
   //   app = navigator.appVersion;

+ 57 - 0
src/helpers/native-message.js

@@ -0,0 +1,57 @@
+import { browser, getRandomKey } from '../common/common'
+/**
+ *
+ * 目前已支持API
+ *
+ * openWebView
+ *
+ */
+
+const loop = () => {}
+
+const calls = {}
+
+const browserInfo = browser()
+if (browserInfo.isApp) {
+  window.addEventListener('message', evt => {
+    try {
+      const data = evt.data ? typeof evt.data === 'object' ? evt.data : JSON.parse(evt.data) : {}
+      const uuid = data.content.uuid || data.uuid
+      try {
+        if (data.content) {
+          data.content = JSON.parse(data.content)
+        }
+      } catch (error) {}
+      if (!uuid) {
+        const keys = Object.keys(calls).filter(key => key.indexOf(data.api) === 0)
+        for (const key of keys) {
+          const callback = calls[key] || loop
+          callback(data)
+        }
+        return
+      }
+      const callback = calls[data.content.uuid || data.uuid || (data.api + data.uuid)] || loop
+      callback(data)
+    } catch (error) {
+      console.error('通信消息解析错误', error)
+    }
+  })
+}
+
+const instance = window.DAYA || (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.DAYA)
+
+export const postMessage = (data, callback) => {
+  if (browserInfo.isApp) {
+    const uuid = getRandomKey()
+    calls[uuid] = callback || loop
+    data.content = data.content ? {...data.content, uuid} : {uuid}
+    instance.postMessage(JSON.stringify(data))
+  }
+}
+
+export const listenerMessage = (api, callback) => {
+  if (browserInfo.isApp) {
+    const uuid = api + getRandomKey()
+    calls[uuid] = callback || loop
+  }
+}

+ 19 - 2
src/views/trainStatistics/trainDetail.vue

@@ -61,7 +61,7 @@
             finished-text="- 没有更多内容 -"
             :immediate-check="false"
             @load="getList()">
-            <van-cell-group class="data-content" v-for="(item, index) in dataList" :key="index">
+            <van-cell-group class="data-content" v-for="(item, index) in dataList" :key="index" @click="showDetail(item)">
                 <van-cell style="padding: 16px 12px; 12px" :center="true">
                     <template #title>
                         <span style="font-size: .17rem; color:#333333; font-weight: 500; padding-right: .05rem;padding-bottom: .05rem;">{{ item.sysMusicScoreName }}</span>
@@ -73,7 +73,7 @@
                         <img v-if="getLevelByScore(item.score) == 3" class="scoreImg" src="./images/3.png" alt="">
                     </p>
                 </van-cell>
-                <van-cell :clickable="false" center style="padding: 12px 12px 16px">
+                <van-cell is-link :clickable="false" center style="padding: 12px 12px 16px">
                     <template #title>
                         <van-grid :border="false" column-num="4" :clickable="true">
                             <van-grid-item text="综合得分" class="van-hairline--right">
@@ -105,6 +105,7 @@
 <script>
 import MHeader from "@/components/MHeader";
 import MEmpty from '@/components/MEmpty';
+import { postMessage } from "@/helpers/native-message";
 import dayjs from "dayjs";
 import { browser } from "@/common/common";
 import { queryMusicCompareRecord } from './api.js'
@@ -157,6 +158,22 @@ export default {
                 }
             })
         },
+        showDetail(item) {
+            if(item.notesDataIndex > 0){
+                postMessage({
+                    api: "openAccompanyWebView",
+                    content: {
+                        url: location.origin + `/accompany/#/report/${item.id}`,
+                        orientation: 0,
+                        isHideTitle: true,
+                        statusBarTextColor: false,
+                        isOpenLight: true,
+                    },
+                });
+            }else{
+                this.$toast('本次评测未生成报告')
+            }
+        },
         async getList() {
             try {
                 let res = await queryMusicCompareRecord(this.searchList)