Переглянути джерело

Merge branch 'dev5.8.2' into develop

leo 1 рік тому
батько
коміт
639ca97504
34 змінених файлів з 810 додано та 700 видалено
  1. 2 0
      .env.production
  2. 2 0
      .env.test
  3. 3 0
      .env.uat
  4. BIN
      assets/image/claimCloudPhone/Invitee-to-claim.png
  5. BIN
      assets/image/claimCloudPhone/Inviting-others-img.png
  6. BIN
      assets/image/claimCloudPhone/claim-mobile-phone-btn.png
  7. BIN
      assets/image/claimCloudPhone/first-reward-2.png
  8. BIN
      assets/image/claimCloudPhone/first-reward-3.png
  9. BIN
      assets/image/claimCloudPhone/first-reward-container-privilege.png
  10. BIN
      assets/image/claimCloudPhone/first-reward-img.png
  11. BIN
      assets/image/claimCloudPhone/purchase-img.png
  12. BIN
      assets/image/claimCloudPhone/second-reward-img.png
  13. BIN
      assets/image/introductionCloudPhone/back.png
  14. BIN
      assets/image/introductionCloudPhone/btn.png
  15. BIN
      assets/image/introductionCloudPhone/default.png
  16. BIN
      assets/image/introductionCloudPhone/defaultWhite.png
  17. BIN
      assets/image/introductionCloudPhone/search.png
  18. 18 15
      components/layout/index.vue
  19. 1 0
      nuxt.config.js
  20. 61 647
      package-lock.json
  21. 1 0
      package.json
  22. 44 14
      pages/claimCloudPhone/components/bargainingAssistance.vue
  23. 1 1
      pages/claimCloudPhone/components/setMealItem.vue
  24. 2 2
      pages/claimCloudPhone/confirmation.vue
  25. 3 3
      pages/claimCloudPhone/index.vue
  26. 7 10
      pages/claimCloudPhone/purchase.vue
  27. 1 1
      pages/claimCloudPhone/_type.vue
  28. 116 0
      pages/introductionCloudPhone/articleDetails.vue
  29. 141 0
      pages/introductionCloudPhone/components/layout.vue
  30. 387 0
      pages/introductionCloudPhone/index.vue
  31. 1 1
      plugins/axios.js
  32. 11 5
      plugins/plugins.js
  33. 5 0
      plugins/vue-clipboard2.js
  34. 3 1
      static/webRtcYJ/WXtrialInterface.html

+ 2 - 0
.env.production

@@ -27,3 +27,5 @@ QIYUKF_TEMPLATE_ID = "6635862"
 
 IMG_URL = "https://www.androidscloud.com:9001/cloud/picture/assist"
 
+H5_URL = "https://client.phone.androidscloud.com"
+

+ 2 - 0
.env.test

@@ -26,3 +26,5 @@ SZX_APP_ANDROID_SCHEME = "opengeminiapp"
 QIYUKF_TEMPLATE_ID = "6635862"
 
 IMG_URL = "http://gntest.phone.androidscloud.com:9002/cloud/picture/assist"
+
+H5_URL = "http://gntest.phone.androidscloud.com:1280"

+ 3 - 0
.env.uat

@@ -27,3 +27,6 @@ SZX_APP_ANDROID_SCHEME = "opengeminiapp"
 QIYUKF_TEMPLATE_ID = "6635862"
 
 IMG_URL = "https://gntest.phone.androidscloud.com:9001/clouduat/picture/assist"
+
+H5_URL = "https://prese.phone.androidscloud.com"
+

BIN
assets/image/claimCloudPhone/Invitee-to-claim.png


BIN
assets/image/claimCloudPhone/Inviting-others-img.png


BIN
assets/image/claimCloudPhone/claim-mobile-phone-btn.png


BIN
assets/image/claimCloudPhone/first-reward-2.png


BIN
assets/image/claimCloudPhone/first-reward-3.png


BIN
assets/image/claimCloudPhone/first-reward-container-privilege.png


BIN
assets/image/claimCloudPhone/first-reward-img.png


BIN
assets/image/claimCloudPhone/purchase-img.png


BIN
assets/image/claimCloudPhone/second-reward-img.png


BIN
assets/image/introductionCloudPhone/back.png


BIN
assets/image/introductionCloudPhone/btn.png


BIN
assets/image/introductionCloudPhone/default.png


BIN
assets/image/introductionCloudPhone/defaultWhite.png


BIN
assets/image/introductionCloudPhone/search.png


+ 18 - 15
components/layout/index.vue

@@ -16,9 +16,9 @@ export default {
   },
   data() {
     return {
-        visible: true,
-        isApp: null,
-        isAndroid: null
+      visible: true,
+      isApp: null,
+      isAndroid: null
     };
   },
   mounted() {
@@ -26,19 +26,19 @@ export default {
     // 如果是H5、微信小程序,不需要显示次按钮
     this.isApp = this.$userAgent.isSzx || this.$userAgent.isSzxBrowser
     this.isAndroid = this.$userAgent.isAndroid;
-    if(!this.isApp) return this.visible = false
-    if(this.isApp && this.isAndroid) {
-      this.visible = !!window.native.goneBack 
+    if (!this.isApp) return this.visible = false
+    if (this.isApp && this.isAndroid) {
+      this.visible = !!window.native.goneBack
       this.visible && window.native.goneBack()
-        return
+      return
     }
   },
   methods: {
     goBack() {
       // 如果为true是最前一页
-      if(this.isGoBack) {
+      if (this.isGoBack) {
         this.isAndroid ? window.native.backClick() : window.webkit.messageHandlers.appGoBack.postMessage({})
-        return 
+        return
       }
       this.$router.go(-1)
     }
@@ -47,11 +47,14 @@ export default {
 </script>
 
 <style lang="less" scoped>
-.go-back{
-    position: fixed;
-    width: 42px;
-    height: 42px;
-    left: 26px;
-    bottom: 98px;
+.layout {
+  height: 100%;
+}
+.go-back {
+  position: fixed;
+  width: 42px;
+  height: 42px;
+  left: 26px;
+  bottom: 98px;
 }
 </style>

+ 1 - 0
nuxt.config.js

@@ -83,6 +83,7 @@ export default {
     '~/plugins/jweixin',
     // '~/plugins/umeng-datasources',
     '@/plugins/vant',
+    '@/plugins/vue-clipboard2',
     '~/plugins/common',
 
   ],

Різницю між файлами не показано, бо вона завелика
+ 61 - 647
package-lock.json


+ 1 - 0
package.json

@@ -48,6 +48,7 @@
     "vconsole": "^3.14.6",
     "vee-validate": "^3.4.14",
     "vue": "^2.7.8",
+    "vue-clipboard2": "^0.3.3",
     "vue-data-dict": "^1.0.6",
     "vue-lottie": "^0.2.1",
     "vue-server-renderer": "^2.7.8",

+ 44 - 14
pages/claimCloudPhone/components/bargainingAssistance.vue

@@ -178,7 +178,8 @@
       <template v-if="bargainingTipsBool">
         <div class="bargaining-amount">
           <div class="bargaining-amount-text">
-            恭喜您,砍价成功<span>{{ bargainingAmount }}元</span>
+            <div>恭喜您</div>
+            砍价成功<span>{{ bargainingAmount }}元</span>
           </div>
           <lottie
             class="species"
@@ -311,6 +312,15 @@
         为您带来更多精彩的活动和内容。<br />
       </div> -->
     </van-dialog>
+    <!-- <van-dialog
+      style="background: #fff !important"
+      v-model="copyVisble"
+      showCancelButton
+      :showConfirmButton="false"
+    >
+      <div class="copy-visble">请手动复制以下内容</div>
+      <van-field v-model="copyValue" rows="4" type="textarea" />
+    </van-dialog> -->
     <Verify
       @success="success"
       mode="pop"
@@ -330,8 +340,8 @@ import customProgress from './customProgress.vue';
 import loadList from '@/components/loadList';
 import { fileKeyToUrl } from '@/plugins/file-center.js';
 import Verify from '@/components/verifition/Verify';
-import { writeToClipboard } from '@/plugins/plugins.js';
 import lottie from '@/components/lottie';
+import { writeToClipboard } from '@/plugins/plugins.js';
 export default {
   props: {
     operateActivityId: {
@@ -395,6 +405,8 @@ export default {
       species,
       redPacket,
       glory,
+      // copyVisble: false,
+      // copyValue: '',
     };
   },
   components: {
@@ -746,17 +758,28 @@ export default {
                   if (this.$userAgent.isSzx || this.$userAgent.isSzxBrowser) {
                     this.$native.share(shareInfo);
                   } else {
-                    writeToClipboard(res.data.link)
-                      .then(() => {
+                    writeToClipboard(
+                      res.data.link,
+                      () => {
                         setTimeout(() => {
                           this.$toast('链接复制成功');
                         });
-                      })
-                      .catch((err) => {
-                        setTimeout(() => {
-                          this.$toast('链接复制失败');
-                        });
-                      });
+                      },
+                      () => {
+                        this.$copyText(res.data.link).then(
+                          (e) => {
+                            setTimeout(() => {
+                              this.$toast('链接复制成功');
+                            });
+                          },
+                          (e) => {
+                            setTimeout(() => {
+                              this.$toast('链接复制失败');
+                            });
+                          },
+                        );
+                      },
+                    );
                   }
                 }
               })
@@ -1253,6 +1276,9 @@ export default {
             font-size: 14px;
             color: #6d2b12;
             text-align: center;
+            overflow: hidden;
+            white-space: nowrap;
+            text-overflow: ellipsis;
             font-style: normal;
           }
         }
@@ -1414,7 +1440,7 @@ export default {
       font-weight: bold;
       font-size: 24px;
       color: #ffffff;
-      line-height: 20px;
+      line-height: 30px;
       text-align: center;
       font-style: normal;
       span {
@@ -1437,12 +1463,12 @@ export default {
       width: 284px;
       z-index: -1;
     }
-    .exit-glory{
+    .exit-glory {
       position: absolute;
       top: 50%;
       left: 50%;
       transform: translate(-50%, -50%) scale(1.5);
-      z-index: -2
+      z-index: -2;
     }
     .exit-content {
       position: absolute;
@@ -1681,7 +1707,11 @@ export default {
   margin-bottom: 24px !important;
 }
 
-.mask{
+.mask {
   z-index: 4000;
 }
+
+.copy-visble {
+  padding: 16px;
+}
 </style>

+ 1 - 1
pages/claimCloudPhone/components/setMealItem.vue

@@ -94,7 +94,7 @@ export default {
           .then((res) => {
             if (res.success) {
               if (!res.data.bargainingStatus) {
-                let url = '/claimCloudPhone/1?menuRuleId=' + data.id;
+                let url = '/claimCloudPhone/type?type=1&menuRuleId=' + data.id;
                 if (this.$route.query.userCardId) {
                   url += `&userCardId=${this.$route.query.userCardId}`;
                 }

+ 2 - 2
pages/claimCloudPhone/confirmation.vue

@@ -64,6 +64,7 @@ export default {
       },
       currentStatus: '',
       index: 1,
+      H5_URL: process.env.H5_URL,
     };
   },
   mounted() {
@@ -118,8 +119,7 @@ export default {
         : 'https://www.androidscloud.com';
     },
     toH5() {
-      location.href =
-        'http://gntest.phone.androidscloud.com:1280/cloud/phone/web/#/';
+      location.href = this.H5_URL + '/cloud/phone/web/#/';
     },
   },
 };

+ 3 - 3
pages/claimCloudPhone/index.vue

@@ -48,8 +48,8 @@ export default {
         window.atob(operateActivityId),
       );
       this.$router.replace({
-        path: '/claimCloudPhone/0',
-        query: this.$route.query,
+        path: '/claimCloudPhone/type',
+        query: {...this.$route.query, type: 0},
       });
       return;
     }
@@ -98,7 +98,7 @@ export default {
                 break;
               default:
                 this.$router.replace(
-                  '/claimCloudPhone/' + res.data.bargainingStatus,
+                  '/claimCloudPhone/type?type=' + res.data.bargainingStatus,
                 );
                 break;
             }

Різницю між файлами не показано, бо вона завелика
+ 7 - 10
pages/claimCloudPhone/purchase.vue


+ 1 - 1
pages/claimCloudPhone/_type.vue

@@ -3,7 +3,7 @@
     <!-- type 1(砍一刀) 2(邀请好友) 3 (失败) 4 (成功)都是邀请人  0 是被邀请人 -->
     <bargainingAssistance
       ref="bargainingAssistance"
-      :type="$route.params.type"
+      :type="$route.query.type"
       :operateActivityId="operateActivityId"
       :getSystemTime="getSystemTime"
       :leaveFun="leaveFun"

+ 116 - 0
pages/introductionCloudPhone/articleDetails.vue

@@ -0,0 +1,116 @@
+<template>
+  <layoutBack :isGoBack='false'>
+    <layout title='福利社区文章' :isRouterBack="true">
+      <div :class="isShowApp?'article':'article article-white'">
+        <div class="article-title" v-if="isShowApp">
+          福利社区文章
+        </div>
+
+        <div class="article-title2">
+          {{ title }}
+        </div>
+
+        <div class="article-content" v-html="content">
+        </div>
+
+      </div>
+    </layout>
+  </layoutBack>
+</template>
+  
+  <script>
+import layout from './components/layout';
+import layoutBack from '@/components/layout';
+export default {
+  auth: false,
+  name: 'articleDetails',
+  head: {
+    title: '福利社区文章',
+  },
+  data() {
+    return {
+      title: '',
+      content: '',
+    };
+  },
+  components: { layout, layoutBack },
+  created() {
+    if (this.$route.query.id) {
+      this.evantDetails(this.$route.query.id)
+    }
+
+  },
+  computed: {
+    isShowApp() {
+      // 是否是APP
+      const isApp = this.$userAgent.isSzx || this.$userAgent.isSzxBrowser;
+      const isAndroid = this.$userAgent.isAndroid;
+      const isIos = this.$userAgent.isIos;
+      const isWx = this.$userAgent.isWx;
+      // 如果是App并且是安卓,就不显示头部, ios显示
+      // 如果微信小程序环境的,也不显示头部
+      // 如果是h5 就显示头部
+      let bool = false;
+      bool = isApp && (isAndroid || isIos) ? true : false;
+      return bool;
+    },
+  },
+  methods: {
+    async evantDetails(id) {
+      await this.$axios.$get('/activity/v1/evant/information/get/evantDetails/' + id).then((res) => {
+        // console.log(res)
+        this.title = res.data.title;
+        this.content = res.data.content;
+      });
+    }
+  },
+};
+  </script>
+  
+  <style lang="less" scoped>
+.article {
+  height: 100%;
+  box-sizing: border-box;
+  .article-title {
+    margin-left: 10px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 500;
+    font-size: 18px;
+    color: #cfd1d4;
+    line-height: 25px;
+    text-align: left;
+    font-style: normal;
+    margin-bottom: 24px;
+  }
+
+  .article-title2 {
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 500;
+    font-size: 20px;
+    color: #ffffff;
+    line-height: 30px;
+    text-align: left;
+    font-style: normal;
+  }
+
+  .article-content {
+    margin-top: 24px;
+    color: #ffffff;
+  }
+}
+
+.article-white {
+  .article-title {
+    color: #0a132b;
+  }
+
+  .article-title2 {
+    color: #0a132b;
+  }
+
+  .article-content {
+    color: #0a132b;
+  }
+}
+</style>
+  

+ 141 - 0
pages/introductionCloudPhone/components/layout.vue

@@ -0,0 +1,141 @@
+<template>
+  <div :class="isShowApp?'layout':'layout layout-white'">
+    <div style="height: 12.2666666667vw" v-if="isShowNavBar">
+      <van-nav-bar :title="title" left-arrow fixed @click-left="goBackFun" />
+    </div>
+    <div class="layout-container" :style="containerStyle">
+      <slot></slot>
+    </div>
+
+  </div>
+</template>
+  
+  <script>
+export default {
+  name: 'layout',
+  props: {
+    // 是否显示头部
+    title: {
+      type: String,
+      default: '推荐云手机',
+    },
+    // 是否强制像是头部
+    forceShowNavBar: {
+      type: Boolean,
+      default: false
+    },
+    padding: {
+      type: String,
+      default: ''
+    },
+    isRouterBack: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {};
+  },
+  mounted() { },
+  computed: {
+    containerStyle() {
+      if (this.isShowApp) {
+        return { backgroundColor: '#1C1C1E', padding: this.padding ? this.padding : '16px' };
+      }
+      return { backgroundColor: '#F2F4F7', padding: this.padding ? this.padding : '16px' };
+    },
+    isShowApp() {
+      // 是否是APP
+      const isApp = this.$userAgent.isSzx || this.$userAgent.isSzxBrowser;
+      const isAndroid = this.$userAgent.isAndroid;
+      const isIos = this.$userAgent.isIos;
+      const isWx = this.$userAgent.isWx;
+
+      console.log('isApp:' + isApp)
+      console.log('isAndroid:' + isAndroid)
+      console.log('isIos:' + isIos)
+      console.log('isWx:' + isWx)
+
+      // 如果是App并且是安卓,就不显示头部, ios显示
+      // 如果微信小程序环境的,也不显示头部
+      // 如果是h5 就显示头部
+      let bool = false;
+      bool = isApp && (isAndroid || isIos) ? true : false;
+      return bool;
+    },
+    isShowNavBar() {
+      // 是否是APP
+      const isApp = this.$userAgent.isSzx || this.$userAgent.isSzxBrowser;
+      const isAndroid = this.$userAgent.isAndroid;
+      const isIos = this.$userAgent.isIos;
+      const isWx = this.$userAgent.isWx;
+      // 如果是App并且是安卓,就不显示头部, ios显示
+      // 如果微信小程序环境的,也不显示头部
+      // 如果是h5 就显示头部
+      let bool = false;
+      // bool = isApp ? (isAndroid ? !isAndroid : isIos) : (isWx ? !isWx : !isWx);
+
+      bool = (isApp && (isAndroid || isIos)) || isWx ? false : true;
+
+      // console.log()
+      return bool || this.forceShowNavBar;
+    },
+
+  },
+  methods: {
+    goBackFun() {
+      if (this.$listeners.goBack) {
+        this.$emit('goBack');
+        return;
+      }
+      this.$router.go(-1);
+    },// 退出相关逻辑
+  },
+};
+  </script>
+  
+  <style lang="less" scoped>
+.layout {
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  .layout-container {
+    flex: 1;
+    overflow-y: auto;
+  }
+
+  ::v-deep .van-nav-bar__arrow {
+    color: #000000;
+    font-size: 24px;
+  }
+
+  ::v-deep .van-nav-bar__title {
+    font-weight: bold !important;
+    font-size: 17px !important;
+    color: #0a132b !important;
+    line-height: 24px !important;
+  }
+
+  .van-nav-bar {
+    z-index: 0;
+  }
+
+  .floating-back {
+    position: fixed; /* 设定定位为固定 */
+    left: 26px; /* 距离右侧10像素 */
+    bottom: 98px; /* 距离底部10像素 */
+    background-color: transparent; /* 背景颜色 */
+    z-index: 1000; /* 确保悬浮在其他内容之上 */
+  }
+}
+.layout-white {
+  .van-nav-bar {
+    background-color: #f2f4f7;
+  }
+
+  ::v-deep [class*='van-hairline']::after {
+    border: 0px;
+  }
+}
+</style>
+  

+ 387 - 0
pages/introductionCloudPhone/index.vue

@@ -0,0 +1,387 @@
+<template>
+  <layoutBack :isGoBack='true'>
+    <layout title='推荐云手机'>
+      <div :class="isShowApp?'introduction':'introduction introduction-white'">
+        <div class="introduction-title" v-if="isShowApp">
+          推荐云手机
+        </div>
+
+        <div class="introduction-tips">
+          请搜索您在云手机内希望使用的应用!
+        </div>
+
+        <div class="introduction-search">
+          <img src="@/assets/image/introductionCloudPhone/search.png" alt="" />
+          <input ref="inputField" v-model="searchText" type="search" placeholder="请输入应用名" />
+          <div @click="search">搜索</div>
+        </div>
+
+        <div v-if="applicationList.length && isShow">
+          <div class="introduction-tips" style="margin-top: 24px;">
+            以下推荐应用选您需要使用的应用
+          </div>
+          <div>
+            <div class="application">
+              <div v-for="(item,index) in applicationList" :key="index" @click="selectApplication(item)">
+                {{ item }}
+              </div>
+            </div>
+          </div>
+        </div>
+
+        <div style="margin-top: 24px;" v-if="appSeatchList.length && !isShow">
+          <div class="application-list" v-for="(item,index) in appSeatchList" :key="index">
+            <div class="application-list-top">
+              <img class="application-list-img" width="42" height="42" :src="item.img" alt="" />
+              <div class="application-list-rigth">
+                <div class="application-list-title">{{item.appName}} <span v-if="item.articleId>0" @click="goArticleDetails(item)">点击阅读</span></div>
+                <div class="application-list-tips">游戏名称云手机使用教程</div>
+              </div>
+              <div class="application-list-btn" @click="pay(item)">购买云手机 <img width="12" src="@/assets/image/introductionCloudPhone/btn.png" /></div>
+
+            </div>
+
+            <div class="application-list-bottom">推荐机型:{{item.list?item.list.map(o=>o.phoneTypeStr).join('/'):''}}</div>
+          </div>
+
+        </div>
+
+        <div class="application-default" v-if="!appSeatchList.length && !isShow">
+          <img v-if="isShowApp" width="305" src="@/assets/image/introductionCloudPhone/default.png" />
+
+          <img v-else width="305" src="@/assets/image/introductionCloudPhone/defaultWhite.png" />
+          <div>很遗憾,没有搜索到您想要的应用</div>
+        </div>
+
+      </div>
+    </layout>
+  </layoutBack>
+</template>
+
+<script>
+import layoutBack from '@/components/layout';
+import layout from './components/layout';
+import { fileKeyToUrl } from '@/plugins/file-center.js';
+import uni from '@/static/static/js/uni.webview.1.5.2';
+export default {
+  auth: false,
+  name: 'introductionCloudPhone',
+  head: {
+    title: '推荐云手机',
+  },
+  data() {
+    return {
+      searchText: '',
+      isShow: true,
+      applicationList: [], //  推荐应用数组
+      appSeatchList: [], //  应用数组
+    };
+  },
+  components: { layout, layoutBack },
+  created() {
+    this.getSuggestApp()
+
+    let _this = this
+    document.addEventListener('keydown', function (e) {
+      // 检查是否是搜索键(通常是“Enter”键)
+      if (e.keyCode === 13) { // Enter key
+        // 执行搜索操作
+        _this.search();
+
+        // 调用原生方法隐藏软键盘
+        _this.$refs.inputField.blur();
+      }
+    });
+  },
+  watch: {
+    searchText(value) {
+      if (!value)
+        this.isShow = true
+    }
+  },
+  computed: {
+    isShowApp() {
+      // 是否是APP
+      const isApp = this.$userAgent.isSzx || this.$userAgent.isSzxBrowser;
+      const isAndroid = this.$userAgent.isAndroid;
+      const isIos = this.$userAgent.isIos;
+      const isWx = this.$userAgent.isWx;
+      // 如果是App并且是安卓,就不显示头部, ios显示
+      // 如果微信小程序环境的,也不显示头部
+      // 如果是h5 就显示头部
+      let bool = false;
+      bool = isApp && (isAndroid || isIos) ? true : false;
+      return bool;
+    },
+  },
+  methods: {
+    pay() {
+      this.isApp = this.$userAgent.isSzx || this.$userAgent.isSzxBrowser
+      if (this.isApp && this.$userAgent.isAndroid) {
+        window.native.startPurchase();
+      } else if (this.isApp && this.$userAgent.isIos) {
+        window.webkit.messageHandlers.startPurchase.postMessage({});
+      } else if (this.$userAgent.isMiniProgram) {
+        this.$wx.miniProgram.navigateTo({
+          url: '/package/purchase/purchase',
+        });
+      } else {
+        uni.navigateTo({
+          url: '/package/purchase/purchase',
+        });
+      }
+    },
+    goArticleDetails(item) {
+      this.$router.push({ path: '/introductionCloudPhone/articleDetails?token=needToken', query: { id: item.articleId } })
+    },
+    getSuggestApp() {
+      this.$axios.$post('/public/v1/market/getSuggestApp', {
+        pageNum: 1, pageSize: -1
+      }).then((res) => {
+        this.applicationList = res.data
+      });
+    },
+    selectApplication(name) {
+      this.searchText = name
+      this.search()
+    },
+    search() {
+      if (!this.searchText) return
+      this.appSeatchList.slice(0, this.appSeatchList.length)
+      this.isShow = false
+      this.$axios.$post('/public/v1/market/clientSearchSuggestApp', { pageSize: 100, pageNum: 1, appName: this.searchText }).then((res) => {
+        this.appSeatchList = res.data.list
+        this.appSeatchList.forEach(element => {
+          element.img = fileKeyToUrl(element.imageId)
+        });
+      });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.introduction {
+  height: 100%;
+  box-sizing: border-box;
+  .introduction-title {
+    margin-left: 10px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 500;
+    font-size: 18px;
+    color: #cfd1d4;
+    font-style: normal;
+    margin-bottom: 24px;
+  }
+  .introduction-tips {
+    font-family: PingFangSC, PingFang SC;
+    font-weight: bold;
+    font-size: 14px;
+    color: #fefefe;
+    font-style: normal;
+  }
+
+  .introduction-search {
+    margin-top: 16px;
+    height: 42px;
+    width: 100%;
+    background: #2c2c2d;
+    border-radius: 8px;
+    border: 1px solid #545660;
+    display: flex;
+    align-items: center;
+    // padding: 12px 4px 4px 12px;
+    img {
+      margin: 12px 4px 12px 12px;
+      vertical-align: top;
+      width: 16px;
+    }
+    input {
+      // margin-top: 8px;
+      // vertical-align: top;
+      height: 42px;
+      line-height: 42px;
+      font-size: 14px;
+      color: #ffffff;
+      flex: 1;
+    }
+    div {
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 500;
+      font-size: 14px;
+      color: #ffffff;
+      line-height: 34px;
+      width: 60px;
+      height: 34px;
+      background: linear-gradient(90deg, #38aefc 0%, #3b7fff 100%);
+      float: right;
+      text-align: center;
+      border-radius: 8px;
+      // margin: 4px 4px 0 0;
+      margin: 0 4px;
+    }
+  }
+
+  .application {
+    padding: 0 16px;
+    margin-top: 24px;
+    display: grid;
+    grid-gap: 16px;
+    grid-template-columns: repeat(3, 1fr);
+    & > div {
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 400;
+      font-size: 14px;
+      color: #ffffff;
+      line-height: 20px;
+      text-align: center;
+      font-style: normal;
+      background: #2c2c2d;
+      border-radius: 14px;
+      padding: 11px 0;
+    }
+  }
+
+  .application-list {
+    width: 100%;
+    background: #2c2c2d;
+    border-radius: 12px;
+    color: #ffffff;
+    margin-bottom: 15px;
+
+    .application-list-top {
+      padding: 16px;
+    }
+    .application-list-img {
+      width: 42px;
+      margin-right: 8px;
+      border-radius: 12px;
+    }
+
+    .application-list-rigth {
+      display: inline-block;
+      overflow: hidden;
+    }
+    .application-list-title {
+      vertical-align: top;
+      font-weight: 500;
+      font-size: 14px;
+      color: #ffffff;
+      font-style: normal;
+      margin-right: 4px;
+
+      span {
+        font-family: PingFangSC, PingFang SC;
+        font-weight: 400;
+        font-size: 10px;
+        color: #3b7fff;
+        line-height: 14px;
+        text-align: left;
+        font-style: normal;
+      }
+    }
+
+    .application-list-tips {
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 400;
+      font-size: 12px;
+      color: #999999;
+      line-height: 16px;
+      text-align: left;
+      font-style: normal;
+      margin-right: 4px;
+    }
+    .application-list-btn {
+      width: 82px;
+      height: 32px;
+      background: linear-gradient(90deg, #38aefc 0%, #3b7fff 100%);
+      border-radius: 8px;
+      color: #ffffff;
+      line-height: 32px;
+      padding: 0 8px;
+      float: right;
+      font-size: 10px;
+      img {
+        vertical-align: middle;
+        margin-top: -1px;
+      }
+    }
+
+    .application-list-bottom {
+      padding: 12px;
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 400;
+      font-size: 14px;
+      color: #ffffff;
+      line-height: 20px;
+      text-align: left;
+      font-style: normal;
+      background: #333333;
+      border-radius: 0px 0px 12px 12px;
+    }
+  }
+
+  .application-default {
+    width: 100%;
+    text-align: center;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 400;
+    font-size: 12px;
+    color: #999999;
+    line-height: 18px;
+    font-style: normal;
+    margin-top: 42px;
+  }
+}
+
+.introduction-white {
+  .introduction-title {
+    color: #0a132b;
+  }
+  .introduction-tips {
+    color: #0a132b;
+  }
+
+  .introduction-search {
+    background: #ffffff;
+    border: 1px solid #ffffff;
+    input {
+      color: #0a132b;
+    }
+    div {
+      color: #ffffff;
+    }
+  }
+
+  .application {
+    & > div {
+      color: #0a132b;
+      background: #ffffff;
+    }
+  }
+
+  .application-list {
+    background: #ffffff;
+
+    .application-list-title {
+      color: #0a132b;
+      span {
+        color: #3b7fff;
+      }
+    }
+
+    .application-list-tips {
+      color: #666666;
+    }
+    .application-list-btn {
+      background: linear-gradient(90deg, #38aefc 0%, #3b7fff 100%);
+      color: #ffffff;
+    }
+
+    .application-list-bottom {
+      color: #0a132b;
+      background: #edeef0;
+    }
+  }
+}
+</style>

+ 1 - 1
plugins/axios.js

@@ -15,7 +15,7 @@ export default function ({ $axios, $auth, $userAgent, query, redirect }) {
     } else {
       config.headers.client = 7;
     }
-    config.headers.versionname = '5.8.1'
+    config.headers.versionname = '5.8.2'
     return config;
   });
   $axios.onResponse(async (response) => {

+ 11 - 5
plugins/plugins.js

@@ -17,16 +17,21 @@ export function timeStamp(StatusMinute, userCardType, nextSendTime) {
 
 
 // 封装对剪贴板的访问为异步函数
-export async function writeToClipboard(text) {
+export function writeToClipboard(text, success = () => { }, error = () => { }) {
     // 如果navigator.clipboard存在,直接使用复制功能
     if (navigator.clipboard) {
         try {
-            await navigator.clipboard.writeText(text);
+            setTimeout(() => {
+                navigator.clipboard.writeText(text).then(() => {
+                    success()
+                }).catch((err) => {
+                    error()
+                })
+            }, 0);
         } catch (err) {
-            throw err
+            error()
         }
     } else {
-        // 否则使用传统的document.execCommand('copy')方法
         const textArea = document.createElement('textarea');
         textArea.value = text;
         document.body.appendChild(textArea);
@@ -34,11 +39,12 @@ export async function writeToClipboard(text) {
         try {
             const successful = document.execCommand('copy');
             if (successful) {
+                success()
             } else {
                 throw '复制失败'
             }
         } catch (err) {
-            throw err
+            error()
         }
         document.body.removeChild(textArea);
     }

+ 5 - 0
plugins/vue-clipboard2.js

@@ -0,0 +1,5 @@
+import Vue from 'vue'
+import VueClipboard from 'vue-clipboard2'
+
+VueClipboard.config.autoSetContainer = true // add this line
+Vue.use(VueClipboard)

+ 3 - 1
static/webRtcYJ/WXtrialInterface.html

@@ -38,6 +38,7 @@
   <link rel="stylesheet" href="../static/css/jquery-weui.min.css" />
   <!-- <link rel="stylesheet" href="../static/lib/swiper/swiper-bundle.min.css" />
     <script src="../static/lib/swiper/swiper-bundle.js"></script> -->
+  <!-- <script type="text/javascript" src="https://cdn.bootcss.com/vConsole/3.2.0/vconsole.min.js"></script> -->
   <script src="../static/lib/doT-1.1.3/doT.min.js"></script>
   <script src="../static/lib/qs.js"></script>
   <script src="../static/lib/copy-to-clipboard.js"></script>
@@ -386,6 +387,7 @@
     var username = parameters['username'];
     var connectStatus = parameters['connectStatus'];
     var isTips = +parameters['isTips'];
+    var isWeixin = +parameters['isWeixin'];
     var videoTimer = null,
       videoTime = 0,
       adType = 0,
@@ -1242,7 +1244,7 @@
     }
     let extranetIp, extranetPort, connectClearSetInterval, numberOfTimes = 1;
     function doConnectBusiness(res) {
-      if (isVideo && !isShowiPhoneWebRTC) {
+      if (isVideo && !isShowiPhoneWebRTC && !isWeixin) {
         var url0 = url[0]; //协议
         let ip = res.data.internetIp; //服务器拿到的ip
         let port = res.data.internetVideoPort; //服务器拿到的端口