Kaynağa Gözat

推荐云手机

HUANGYAQIAN-PC\huangyaqian 1 yıl önce
ebeveyn
işleme
8ad78aacc2

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


+ 113 - 0
pages/introductionCloudPhone/articleDetails.vue

@@ -0,0 +1,113 @@
+<template>
+  <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>
+</template>
+  
+  <script>
+import layout from './components/layout';
+export default {
+  auth: false,
+  name: 'articleDetails',
+  head: {
+    title: '福利社区文章',
+  },
+  data() {
+    return {
+      title: '',
+      content: '',
+    };
+  },
+  components: { layout },
+  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 = 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;
+  }
+
+  .article-title2 {
+    margin-top: 24px;
+    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>
+  

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

@@ -0,0 +1,171 @@
+<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 v-if="isShowApp" class="floating-back" @click="leaveFun"> <img width="42" src="@/assets/image/introductionCloudPhone/back.png" /></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 = 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 = 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);
+    },// 退出相关逻辑
+    leaveFun() {
+      const isIos = this.$userAgent.isIos;
+      const isAndroid = this.$userAgent.isAndroid;
+      const isWx = this.$userAgent.isWx;
+
+      if (this.isRouterBack) {
+        if (this.$listeners.goBack) {
+          this.$emit('goBack');
+          return;
+        }
+        this.$router.go(-1);
+      } else if (isAndroid) {
+        window.native.backClick && window.native.backClick();
+      } else if (isIos) {
+        window.webkit.messageHandlers.appGoBack && window.webkit.messageHandlers.appGoBack.postMessage({})
+      }
+      else if (isWx) {
+        this.$wx.miniProgram.navigateBack({
+          data: 1
+        })
+      }
+      else {
+        uni.reLaunch({
+          url: '/pages/index/index'
+        });
+      }
+
+
+    },
+  },
+};
+  </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>
+  

+ 369 - 0
pages/introductionCloudPhone/index.vue

@@ -0,0 +1,369 @@
+<template>
+  <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 v-model="searchText" type="search" placeholder="请输入应用名"/>
+        <div @click="search">搜索</div>
+      </div>
+
+      <div v-if="applicationList.length && isShow">
+        <div class="introduction-tips">
+          以下推荐应用选您需要使用的应用
+        </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>
+</template>
+
+<script>
+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 },
+  created() {
+    this.getSuggestApp()
+    if (this.$userAgent.isAndroid) {
+      window.native.goneBack()
+    }
+  },
+  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 = isAndroid || isIos ? true : false;
+      return bool;
+    },
+  },
+  methods: {
+    pay() {
+      if (this.$userAgent.isSzx && this.$userAgent.isAndroid) {
+        window.native.startPurchase();
+      } else if (this.$userAgent.isSzx && 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;
+  }
+  .introduction-tips {
+    font-family: PingFangSC, PingFang SC;
+    font-weight: bold;
+    font-size: 14px;
+    color: #fefefe;
+    font-style: normal;
+    margin-top: 24px;
+  }
+
+  .introduction-search {
+    margin-top: 16px;
+    height: 42px;
+    width: 100%;
+    background: #2c2c2d;
+    border-radius: 8px;
+    border: 1px solid #545660;
+    padding: 3px 4px 4px 12px;
+    img {
+      margin-top: 8px;
+      vertical-align: top;
+      width: 16px;
+    }
+    input {
+      margin-top: 8px;
+      vertical-align: top;
+      height: 17px;
+      line-height: 17px;
+      font-size: 14px;
+      width: 70%;
+      color: #ffffff;
+    }
+    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;
+    }
+  }
+
+  .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;
+    }
+
+    .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) => {