Ver Fonte

1. 迁移对流量激活链接、会员领取链接配置到策略中
2. 单独建立按钮菜单管理页配置管理
3. 建立两套管理方案,一套适配小程序环境,一套适配其他客户端
4. 流量激活:适配客户端和统一激活页面
5. 会员领取:小程序外-适配领取页面和华胜中转页;小程序内-适配小程序页面地址+领取页面
6. 小程序二维码改为小程序中转页链接
7. 自定义排序能力

hml há 2 anos atrás
pai
commit
2a66784a40

+ 42 - 1
purchase_H5/src/common/common.js

@@ -15,7 +15,6 @@ import util from '../util'
 import addR from "../common/addRecord";
 import sensors from "sa-sdk-javascript";
 import wx from "weixin-js-sdk";
-import axios from 'axios';
 import {
   Dialog
 } from "vant";
@@ -183,6 +182,48 @@ export default {
     }
   },
   methods: {
+    tabClick (item) {
+      if (this.isApplet == true) {
+        if (item.tabUrlApplet !== '') {
+          let url = item.tabUrlApplet +'&channelName='+this.pageData.channl.channelKey
+          window.location.href = url
+        } else {
+          if (item.tabName == '订购记录') {
+            this.beforeLogin('manual')
+          } else if (item.tabName == '流量激活') {
+            this.jihuo('点击激活')
+          } else if (item.tabName == '一键反馈') {
+            this.toPhone()
+          } else if (item.tabName == '退订产品') {
+            this.beforeLogin('unBUy')
+          } else if (item.tabName == '剩余流量查询') {
+            this.chaxun()
+          } else if (item.tabName == '会员领取') {
+            this.beforeLogin('member')
+          }
+        }
+      } else {
+        if (item.tabUrlBasics !== '') {
+          let url = item.tabUrlBasics +'&channelName='+this.pageData.channl.channelKey
+          window.location.href = url
+        } else {
+          if (item.tabName == '订购记录') {
+            this.beforeLogin('manual')
+          } else if (item.tabName == '流量激活') {
+            this.jihuo('点击激活')
+          } else if (item.tabName == '一键反馈') {
+            this.toPhone()
+          } else if (item.tabName == '退订产品') {
+            this.beforeLogin('unBUy')
+          } else if (item.tabName == '剩余流量查询') {
+            console.log(123)
+            this.chaxun()
+          } else if (item.tabName == '会员领取') {
+            this.beforeLogin('member')
+          }
+        }
+      }
+    },
     openIframe () {
       document.body.style.overflow = 'hidden';
       // outsideJs()

+ 165 - 0
purchase_H5/src/components/tabModal.vue

@@ -0,0 +1,165 @@
+<template>
+  <div>
+    <div class="tabBox">
+      <div class="tab" v-for="(item,index) in tabArr" :key="index" @click="$emit('tabClick',item)">
+        <img :src="item.icon" alt="" />
+        <div>{{item.tabName}}</div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data () {
+    return {
+      tabArr: []
+    }
+  },
+  props: {
+    isApplet: Boolean
+  },
+  computed: {
+    user () {
+      return this.$store.state.user
+    },
+    pageData () {
+      return this.$store.state.pageData
+    }
+  },
+  created () {
+    if (this.pageData.remarks.tabArr && this.pageData.remarks.tabArr.length > 0) {
+      this.tabArr = this.pageData.remarks.tabArr
+      let arr = []
+      this.tabArr.forEach(val => {
+        if (val.tabName == '订购记录') {
+          let obj = {}
+          obj.tabName = val.tabName
+          obj.tabUrlBasics = val.tabUrlBasics
+          obj.tabUrlApplet = val.tabUrlApplet
+          obj.icon = require("../templates/assets/record.png")
+          arr.push(obj)
+        }
+        if (val.tabName == '流量激活') {
+          let obj = {}
+          obj.tabName = val.tabName
+          obj.tabUrlBasics = val.tabUrlBasics
+          obj.tabUrlApplet = val.tabUrlApplet
+          obj.icon = require("../templates/assets/liuliang.png")
+          arr.push(obj)
+        } if (val.tabName == '一键反馈') {
+          let obj = {}
+          obj.tabName = val.tabName
+          obj.tabUrlBasics = val.tabUrlBasics
+          obj.tabUrlApplet = val.tabUrlApplet
+          obj.icon = require("../templates/assets/fankui.png")
+          arr.push(obj)
+        } if (val.tabName == '退订产品') {
+          let obj = {}
+          obj.tabName = val.tabName
+          obj.tabUrlBasics = val.tabUrlBasics
+          obj.tabUrlApplet = val.tabUrlApplet
+          obj.icon = require("../templates/assets/tuiding.png")
+          arr.push(obj)
+        } if (val.tabName == '剩余流量查询' && this.isApplet == false) {
+          let obj = {}
+          obj.tabName = val.tabName
+          obj.tabUrlBasics = val.tabUrlBasics
+          obj.tabUrlApplet = val.tabUrlApplet
+          obj.icon = require("../templates/assets/guanzhu.png")
+          arr.push(obj)
+        } if (val.tabName == '会员领取') {
+          let obj = {}
+          obj.tabName = val.tabName
+          obj.tabUrlBasics = val.tabUrlBasics
+          obj.tabUrlApplet = val.tabUrlApplet
+          obj.icon = require("../templates/assets/huiyuan.png")
+          arr.push(obj)
+        }
+      })
+      this.tabArr = arr
+    } else {
+      if (this.pageData.remarks.jiluBtn === '1') {
+        let obj = {}
+        obj.tabUrlBasics = ""
+        obj.tabUrlApplet = ""
+        obj.icon = require("../templates/assets/record.png")
+        obj.tabName = '订购记录'
+        this.tabArr.push(obj)
+      } if (this.pageData.remarks.jihuoBtn === '1') {
+        let obj = {}
+        obj.tabUrlBasics = ""
+        obj.tabUrlApplet = ""
+        obj.icon = require("../templates/assets/liuliang.png")
+        obj.tabName = '流量激活'
+        this.tabArr.push(obj)
+      }
+      if (this.pageData.remarks.memberBtn === '1') {
+        let obj = {}
+        obj.tabUrlBasics = ""
+        obj.tabUrlApplet = ""
+        obj.icon = require("../templates/assets/huiyuan.png")
+        obj.tabName = '会员领取'
+        this.tabArr.push(obj)
+      }
+      if (this.pageData.remarks.chaxunBtn === '1' && this.isApplet == false) {
+        let obj = {}
+        obj.tabUrlBasics = ""
+        obj.tabUrlApplet = ""
+        obj.icon = require("../templates/assets/guanzhu.png")
+        obj.tabName = '剩余流量查询'
+        this.tabArr.push(obj)
+      } 
+       if (this.pageData.remarks.guanzhuBtn === '1') {
+        let obj = {}
+        obj.tabUrlBasics = ""
+        obj.tabUrlApplet = ""
+        obj.icon = require("../templates/assets/fankui.png")
+        obj.tabName = '一键反馈'
+        this.tabArr.push(obj)
+      } if (this.pageData.remarks.tuidingBtn === '1') {
+        let obj = {}
+        obj.tabUrlBasics = ""
+        obj.tabUrlApplet = ""
+        obj.icon = require("../templates/assets/tuiding.png")
+        obj.tabName = '退订产品'
+        this.tabArr.push(obj)
+      } 
+    }
+  },
+
+}
+</script>
+
+<style lang="scss" scoped>
+.tabBox {
+  margin: 20px 30px;
+  width: 690px;
+  border-radius: 20px;
+  box-shadow: 0px 0px 2px 0px #acacac;
+  //height: 138px;
+  background: #ffffff;
+  border-radius: 8px;
+  display: -webkit-box;
+  overflow-x: scroll;
+  -webkit-overflow-scrolling: touch;
+
+  .tab {
+    width: 160px;
+    margin: 26px 5px;
+
+    img {
+      width: 50px;
+      height: 50px;
+      margin: 0 55px;
+    }
+
+    div {
+      text-align: center;
+      font-size: 24px;
+      font-weight: bold;
+      color: #0d0d0d;
+    }
+  }
+}
+</style>

+ 0 - 1
purchase_H5/src/components/unbuyModal.vue

@@ -202,7 +202,6 @@ export default {
     if (this.pageData.remarks.treatyText && this.pageData.remarks.treatyText !== '') {
       this.text = this.pageData.remarks.treatyText
     }
-    console.log(this.pageData)
   },
   methods: {
     closeUnbuy () {

+ 39 - 2
purchase_H5/src/templates/templateApplet/index.vue

@@ -51,8 +51,7 @@
 
     <!-- tab导航 -->
     <div class="tabBox">
-      <span v-if="pageData.remarks.memberBtn === '1'" class="tabText" @click="beforeLogin('member')">领取会员</span>
-      <span v-if="pageData.remarks.tuidingBtn === '1'" class="tabText" @click="beforeLogin('unBUy')">退订产品</span>
+      <span v-for="(item,index) in tabArr" :key="index" class="tabText" @click="tabClick(item)">{{item.tabName}}</span>
     </div>
     <!-- 使用说明 -->
     <!-- <div class="rule" @click="ruleClick">
@@ -148,6 +147,7 @@ export default {
       productJson: [],
       isBuy: "未订购",
       phone: "",
+      tabArr: []
       // opoutShow: false
     };
   },
@@ -178,6 +178,43 @@ export default {
     if (this.pageData.mainProduct.cacheSeatOne && this.pageData.mainProduct.cacheSeatOne !== null) {
       this.productJson = this.pageData.mainProduct.cacheSeatOne;
     }
+    if (this.pageData.remarks.tabArr && this.pageData.remarks.tabArr.length > 0) {
+      this.tabArr = this.pageData.remarks.tabArr
+      let arr = []
+      this.tabArr.forEach(val => {
+        if (val.tabName == '会员领取') {
+          let obj = {}
+          obj.tabName = val.tabName
+          obj.tabUrlBasics = val.tabUrlBasics
+          obj.tabUrlApplet = val.tabUrlApplet
+          arr.push(obj)
+        }
+        if (val.tabName == '退订产品') {
+          let obj = {}
+          obj.tabName = val.tabName
+          obj.tabUrlBasics = val.tabUrlBasics
+          obj.tabUrlApplet = val.tabUrlApplet
+          arr.push(obj)
+        }
+      })
+      this.tabArr = arr
+    } else {
+      if (this.pageData.remarks.memberBtn == '1') {
+        let obj = {}
+        obj.tabUrlBasics = ""
+        obj.tabUrlApplet = ""
+        obj.tabName = '会员领取'
+        this.tabArr.push(obj)
+      }
+      if (this.pageData.remarks.tuidingBtn == '1') {
+        let obj = {}
+        obj.tabUrlBasics = ""
+        obj.tabUrlApplet = ""
+        obj.tabName = '退订产品'
+        this.tabArr.push(obj)
+      }
+
+    }
   },
   mounted () {
     addR.showSP();

+ 4 - 30
purchase_H5/src/templates/templateColor/index.vue

@@ -32,10 +32,7 @@
       " @btnClick="btnClick" :pageData="pageData" :isBuy="isBuy" @hideClick="showConceal = true" @ruleClick="ruleClick" @toBuy="toBuy" @toNewBuy="toNewBuy" :indexNum="indexNum">
     </unify-color>
     <!-- 产品说明 -->
-    <div class="descbox" v-if="productJson.length > 0 && productJson[0].productV === '2'" :style="{
-        backgroundColor: pageData.mainProduct.bgColor[2],
-        borderColor: pageData.mainProduct.bgColor[3],
-      }" style="padding-top: 30px; padding-bottom: 15px">
+    <div class="descbox" v-if="productJson.length > 0 && productJson[0].productV === '2'" :style="{'backgroundColor': pageData.mainProduct.bgColor[2],'borderColor': pageData.mainProduct.bgColor[3],}" style="padding-top: 30px; padding-bottom: 15px">
       <div class="titleImg">
         <img :src="imgUrl + pageData.mainProduct.guidancePic.c" style="width: 100%; height: 100%" />
         <div class="titleText" :style="productJson[0].proC.s?{ color: `${productJson[0].proC.s}` }:{}">
@@ -61,32 +58,7 @@
         backgroundImage: `url(${pageData.strategyInfo.posterPhoto})`,
       }"></div>
     <!-- tab导航 -->
-    <div class="tabBox">
-      <div class="tab" v-if="pageData.remarks.jiluBtn === '1'" @click="beforeLogin('manual')">
-        <img src="../assets/record.png" alt="" />
-        <div>订购记录</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.jihuoBtn === '1'" @click="jihuo('点击激活')">
-        <img src="../assets/liuliang.png" alt="" />
-        <div>流量激活</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.memberBtn === '1'" @click="beforeLogin('member')">
-        <img src="../assets/huiyuan.png" alt="" />
-        <div>领取会员</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.chaxunBtn === '1'&&isApplet == false" @click="chaxun">
-        <img src="../assets/guanzhu.png" alt="" />
-        <div>剩余流量查询</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.guanzhuBtn ==='1'" @click="toPhone()">
-        <img src="../assets/fankui.png" alt="" />
-        <div>一键反馈</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.tuidingBtn === '1'" @click="beforeLogin('unBUy')">
-        <img src="../assets/tuiding.png" alt="" />
-        <div>退订产品</div>
-      </div>
-    </div>
+    <tab-Modal @tabClick="tabClick" :isApplet="isApplet"></tab-Modal>
     <!-- 使用说明 -->
     <div class="rule" @click="ruleClick">
       <div class="icon"></div>
@@ -158,6 +130,7 @@ import unifyColor from "../../components/unifyColor.vue";
 import MgtvApi from "@/util/mgTvJssdk.js";
 import { Dialog } from "vant";
 import lottie from 'lottie-web';
+import tabModal from "../../components/tabModal.vue";
 // import wx from "weixin-js-sdk";
 // import axios from 'axios';
 export default {
@@ -198,6 +171,7 @@ export default {
     duanRen,
     jianRen,
     unifyColor,
+    tabModal
   },
   created () {
     document.title = this.pageData.mainProduct.productName;

+ 4 - 30
purchase_H5/src/templates/templateCom/index.vue

@@ -78,32 +78,7 @@
         backgroundImage: `url(${pageData.strategyInfo.posterPhoto})`,
       }"></div>
     <!-- tab导航 -->
-    <div class="tabBox">
-      <div class="tab" v-if="pageData.remarks.jiluBtn === '1'" @click="beforeLogin('manual')">
-        <img src="../assets/record.png" alt="" />
-        <div>订购记录</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.jihuoBtn === '1'" @click="jihuo('点击激活')">
-        <img src="../assets/liuliang.png" alt="" />
-        <div>流量激活</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.memberBtn === '1'" @click="beforeLogin('member')">
-        <img src="../assets/huiyuan.png" alt="" />
-        <div>领取会员</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.chaxunBtn === '1' && isApplet == false" @click="chaxun">
-        <img src="../assets/guanzhu.png" alt="" />
-        <div>剩余流量查询</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.guanzhuBtn === '1'" @click="toPhone()">
-        <img src="../assets/fankui.png" alt="" />
-        <div>一键反馈</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.tuidingBtn === '1'" @click="beforeLogin('unBUy')">
-        <img src="../assets/tuiding.png" alt="" />
-        <div>退订产品</div>
-      </div>
-    </div>
+    <tab-Modal @tabClick="tabClick" :isApplet="isApplet"></tab-Modal>
     <!-- 使用说明 -->
     <div class="rule" @click="ruleClick">
       <div class="icon"></div>
@@ -169,6 +144,7 @@ import tongRen from "./components/tongRen.vue";
 import duanRen from "./components/duanRen.vue";
 import jianRen from "./components/jianRen.vue";
 import unifyModal from "../../components/unifyModal.vue";
+import tabModal from "../../components/tabModal.vue";
 import { Dialog } from "vant";
 export default {
   mixins: [common],
@@ -208,6 +184,7 @@ export default {
     duanRen,
     jianRen,
     unifyModal,
+    tabModal
   },
   filters: {
     formatPhone: (phone) => {
@@ -218,10 +195,7 @@ export default {
   created () {
     document.title = this.pageData.mainProduct.productName;
     this.phone = this.$route.query.phone;
-    if (
-      this.pageData.mainProduct.cacheSeatOne &&
-      this.pageData.mainProduct.cacheSeatOne !== null
-    ) {
+    if ( this.pageData.mainProduct.cacheSeatOne &&this.pageData.mainProduct.cacheSeatOne !== null) {
       this.productJson = this.pageData.mainProduct.cacheSeatOne;
     }
   },

+ 74 - 74
purchase_H5/src/templates/templatePush/components/tongRen.vue

@@ -1,87 +1,87 @@
 <template>
-    <div class="btnModal">
-        <div class="inputBox">
-            <input v-model="phone" class="input" type="text" @input="inpChange" maxlength="11" placeholder="请输入联通号码">
-        </div>
-        <div class="btnBox">
-            <div class="btnText"
-                :style="{'background-image': `linear-gradient(#fff,${pageData.mainProduct.themeColor[0]})`,color:pageData.mainProduct.themeColor[1]}"
-                @click="btnClick">
-                立即开通
-            </div>
-        </div>
+  <div class="btnModal">
+    <div class="inputBox">
+      <input v-model="phone" class="input" type="text" @input="inpChange" maxlength="11" placeholder="请输入联通号码">
     </div>
+    <div class="btnBox">
+      <div class="btnText" :style="{'background-image': `linear-gradient(${pageData.mainJson.btnTopcol},${pageData.mainJson.btnBotcol})`}" @click="btnClick">
+        立即开通
+      </div>
+    </div>
+  </div>
 </template>
 
 <script>
-    import {
-    Dialog
-    } from "vant";
-    export default {
-        data() {
-            return {
-                phone: ""
+import {
+  Dialog
+} from "vant";
+export default {
+  data () {
+    return {
+      phone: ""
+    }
+  },
+  props: {
+    pageData: Object
+  },
+  methods: {
+    inpChange (e) {
+      if (/^1[3456789]\d{9}$/.test(this.phone)) {
+        let str = this.phone.slice(0, 3)
+        let str2 = this.phone.slice(0, 4)
+        let number = this.$store.state.fictitious.split(',')
+        let isDialog = true
+        if (number !== '') {
+          number.forEach(element => {
+            if (element === str || element === str2) {
+              isDialog = false
             }
-        },
-        props: {
-            pageData: Object
-        },
-        methods: {
-            inpChange(e) {
-                if (/^1[3456789]\d{9}$/.test(this.phone)) {
-                    let str = this.phone.slice(0,3)
-                    let str2 =  this.phone.slice(0,4)
-                    let number = this.$store.state.fictitious.split(',')
-                    let isDialog = true
-                    if(number !== ''){
-                      number.forEach(element => {
-                        if(element===str || element===str2){
-                           isDialog = false
-                        }
-                      });
-                    }
-                    if(isDialog === false){
-                        Dialog({
-                          message: '您的号码为虚拟运营商号码,不支持办理此业务',
-                          theme: 'round-button',
-                          })
-                      return false
-                    }
-                    this.$emit('phoneNum', this.phone)
-                    setTimeout(() => {
-                        this.$emit('btnClick')
-                        e.srcElement.blur()
-                    }, 100)
+          });
+        }
+        if (isDialog === false) {
+          Dialog({
+            message: '您的号码为虚拟运营商号码,不支持办理此业务',
+            theme: 'round-button',
+          })
+          return false
+        }
+        this.$emit('phoneNum', this.phone)
+        setTimeout(() => {
+          this.$emit('btnClick')
+          e.srcElement.blur()
+        }, 100)
 
-                }
-            },
-            btnClick() {
-                if (this.phone === '') {
-                    this.$toast('请输入手机号')
-                    return false
-                }
-                if (/^1[3456789]\d{9}$/.test(this.phone)) {
-                    let str = this.phone.slice(0,3)
-                    let str2 =  this.phone.slice(0,4)
-                    if(str === '167' || str === '171' || str2 ==='1704' || str2 ==='1707' || str2 ==='1708'|| str2 ==='1709'){
-                         Dialog({
-                          message: '您的号码为虚拟运营商号码,不支持办理此业务',
-                          theme: 'round-button',
-                          })
-                          return false
-                    }
-                    this.$emit('btnClick')
-                    this.$emit('phoneNum', this.phone)
-                } else {
-                    this.$toast('手机号格式错误')
-                }
+      }
+    },
+    btnClick () {
+      if (this.phone === '') {
+        this.$toast('请输入手机号')
+        return false
+      }
+      if (/^1[3456789]\d{9}$/.test(this.phone)) {
+        let str = this.phone.slice(0, 3)
+        let str2 = this.phone.slice(0, 4)
+        if (str === '167' || str === '171' || str2 === '1704' || str2 === '1707' || str2 === '1708' || str2 === '1709') {
+          Dialog({
+            message: '您的号码为虚拟运营商号码,不支持办理此业务',
+            theme: 'round-button',
+          })
+          return false
+        }
+        this.$emit('btnClick')
+        this.$emit('phoneNum', this.phone)
+      } else {
+        this.$toast('手机号格式错误')
+      }
 
 
-            }
-        }
     }
+  }
+}
 </script>
 
-<style lang="scss">
-
+<style lang="scss" scoped>
+.btnText {
+  color: #f60f0b;
+}
 </style>

+ 274 - 304
purchase_H5/src/templates/templatePush/index.vue

@@ -1,322 +1,292 @@
 <template>
-    <div class="templatePush" id="temp" :style="
-      pageData.mainProduct.bgColor !== null &&
-      pageData.mainProduct.bgColor.length > 0
-        ? { backgroundColor:pageData.mainProduct.bgColor[0] }
-        : { backgroundColor: '#000' }
-    ">
-        <div class="bannerBox">
-            <img class="banner" :src="imgUrl+pageData.mainProduct.bannerPics[0]" alt="">
+  <div class="templatePush" id="temp" :style="{'backgroundColor':pageData.mainJson.pageBgcol }">
+    <div class="bannerBox">
+      <img class="banner" :src="imgUrl+pageData.mainJson.bannerImg" alt="">
+    </div>
+    <!-- 统一认证组件 -->
+    <tong-ren @btnClick='openIframe' :pageData="pageData" @phoneNum="phoneFuction">
+    </tong-ren>
+    <div class="contentBox" v-if="pageData.mainJson.orderImg" :style="{'backgroundColor':pageData.mainJson.orderBgcol,'color':pageData.mainJson.pageTextcol}">
+      <div class="roundBox long">
+        <div class="mini" :style="{'backgroundColor':pageData.mainJson.orderBdcol}">
+        </div>
+        <div class="small" :style="{'backgroundColor':pageData.mainJson.orderBdcol}">
+        </div>
+        <div class="model" :style="{'backgroundColor':pageData.mainJson.orderBdcol}">
+        </div>
+        <div class="text" :style="{'backgroundColor':pageData.mainJson.orderBdcol,'color':pageData.mainJson.orderBgcol}">
+          {{pageData.mainProduct.memberName}}</div>
+        <div class="model" :style="{'backgroundColor':pageData.mainJson.orderBdcol}">
+        </div>
+        <div class="small" :style="{'backgroundColor':pageData.mainJson.orderBdcol}">
+        </div>
+        <div class="mini" :style="{'backgroundColor':pageData.mainJson.orderBdcol}">
+        </div>
+      </div>
+      <div class="guidancePic">
+        <img :src="imgUrl +pageData.mainJson.orderImg" style="width: 100%;height:100%" />
+      </div>
+    </div>
+    <div class="contentBox" v-if="pageData.mainProduct.givePhoneInfo" :style="{'backgroundColor':pageData.mainJson.orderBgcol,'color':pageData.mainJson.pageTextcol}">
+      <div class="roundBox">
+        <div class="mini" :style="{'backgroundColor':pageData.mainJson.orderBdcol}">
+        </div>
+        <div class="small" :style="{'backgroundColor':pageData.mainJson.orderBdcol}">
+        </div>
+        <div class="model" :style="{'backgroundColor':pageData.mainJson.orderBdcol}">
+        </div>
+        <div class="text" :style="{'backgroundColor':pageData.mainJson.orderBdcol,'color':pageData.mainJson.orderBgcol}">
+          产品说明</div>
+        <div class="model" :style="{'backgroundColor':pageData.mainJson.orderBdcol}">
         </div>
-        <!-- 统一认证组件 -->
-        <tong-ren @btnClick='openIframe' :pageData="pageData" @phoneNum="phoneFuction">
-        </tong-ren>
-        <div class="contentBox" v-if="pageData.mainProduct.guidancePic.p"
-            :style="{backgroundColor:pageData.mainProduct.bgColor[3],color:pageData.mainProduct.bgColor[2]}">
-            <div class="roundBox long">
-                <div class="mini"
-                    :style="pageData.mainProduct.bgColor[2]!==''?{backgroundColor:pageData.mainProduct.bgColor[2]}:{backgroundColor:'#fff'}">
-                </div>
-                <div class="small"
-                    :style="pageData.mainProduct.bgColor[2]!==''?{backgroundColor:pageData.mainProduct.bgColor[2]}:{backgroundColor:'#fff'}">
-                </div>
-                <div class="model"
-                    :style="pageData.mainProduct.bgColor[2]!==''?{backgroundColor:pageData.mainProduct.bgColor[2]}:{backgroundColor:'#fff'}">
-                </div>
-                <div class="text"
-                    :style="{backgroundColor:pageData.mainProduct.bgColor[2],color:pageData.mainProduct.bgColor[3]}">
-                    {{pageData.mainProduct.memberName}}</div>
-                <div class="model"
-                    :style="pageData.mainProduct.bgColor[2]!==''?{backgroundColor:pageData.mainProduct.bgColor[2]}:{backgroundColor:'#fff'}">
-                </div>
-                <div class="small"
-                    :style="pageData.mainProduct.bgColor[2]!==''?{backgroundColor:pageData.mainProduct.bgColor[2]}:{backgroundColor:'#fff'}">
-                </div>
-                <div class="mini"
-                    :style="pageData.mainProduct.bgColor[2]!==''?{backgroundColor:pageData.mainProduct.bgColor[2]}:{backgroundColor:'#fff'}">
-                </div>
-            </div>
-            <div class="guidancePic">
-                <img :src="imgUrl +pageData.mainProduct.guidancePic.p" style="width: 100%;height:100%" />
-            </div>
+        <div class="small" :style="{'backgroundColor':pageData.mainJson.orderBdcol}">
         </div>
-        <div class="contentBox" v-if="pageData.mainProduct.givePhoneInfo"
-            :style="{backgroundColor:pageData.mainProduct.bgColor[3],color:pageData.mainProduct.bgColor[2]}">
-            <div class="roundBox">
-                <div class="mini"
-                    :style="pageData.mainProduct.bgColor[2]!==''?{backgroundColor:pageData.mainProduct.bgColor[2]}:{backgroundColor:'#fff'}">
-                </div>
-                <div class="small"
-                    :style="pageData.mainProduct.bgColor[2]!==''?{backgroundColor:pageData.mainProduct.bgColor[2]}:{backgroundColor:'#fff'}">
-                </div>
-                <div class="model"
-                    :style="pageData.mainProduct.bgColor[2]!==''?{backgroundColor:pageData.mainProduct.bgColor[2]}:{backgroundColor:'#fff'}">
-                </div>
-                <div class="text"
-                    :style="{backgroundColor:pageData.mainProduct.bgColor[2],color:pageData.mainProduct.bgColor[3]}">
-                    产品说明</div>
-                <div class="model"
-                    :style="pageData.mainProduct.bgColor[2]!==''?{backgroundColor:pageData.mainProduct.bgColor[2]}:{backgroundColor:'#fff'}">
-                </div>
-                <div class="small"
-                    :style="pageData.mainProduct.bgColor[2]!==''?{backgroundColor:pageData.mainProduct.bgColor[2]}:{backgroundColor:'#fff'}">
-                </div>
-                <div class="mini"
-                    :style="pageData.mainProduct.bgColor[2]!==''?{backgroundColor:pageData.mainProduct.bgColor[2]}:{backgroundColor:'#fff'}">
-                </div>
-            </div>
-            <div class="main" v-html="pageData.mainProduct.givePhoneInfo">
-            </div>
+        <div class="mini" :style="{'backgroundColor':pageData.mainJson.orderBdcol}">
         </div>
-        <!-- 订购超时 -->
-        <timeout-modal v-model="showTimeout"></timeout-modal>
+      </div>
+      <div class="main" v-html="pageData.mainProduct.givePhoneInfo">
+      </div>
     </div>
+    <!-- 订购超时 -->
+    <timeout-modal v-model="showTimeout"></timeout-modal>
+  </div>
 </template>
 <script>
-    import common from "../../common/common";
-    import timeoutModal from "../../components/timeoutModal.vue";
-    import tongRen from "./components/tongRen.vue";
-    export default {
-
-        mixins: [common],
-        components: {
-            timeoutModal,
-            tongRen,
-        },
-        data() {
-            return {
-                imgUrl: process.env.VUE_APP_IMGS_URL,
-                showTimeout: false,
-                phone: "",
-                isBuy: "未订购",
-            }
-        },
-        created() {
-            document.title = this.pageData.mainProduct.productName;
-            if (this.$route.query.phone) {
-                this.phone = this.$route.query.phone
-            }
+import common from "../../common/common";
+import timeoutModal from "../../components/timeoutModal.vue";
+import tongRen from "./components/tongRen.vue";
+export default {
+
+  mixins: [common],
+  components: {
+    timeoutModal,
+    tongRen,
+  },
+  data () {
+    return {
+      imgUrl: process.env.VUE_APP_IMGS_URL,
+      showTimeout: false,
+      phone: "",
+      isBuy: "未订购",
+    }
+  },
+  created () {
+    document.title = this.pageData.mainProduct.productName;
+    if (this.$route.query.phone) {
+      this.phone = this.$route.query.phone
+    }
 
-        },
-        methods: {
-            phoneFuction(e) {
-                this.phone = e
-            }
-        }
+  },
+  methods: {
+    phoneFuction (e) {
+      this.phone = e
+    }
+  }
 
 
-    }
+}
 </script>
 <style lang='scss'>
-    .templatePush {
-        // background-color: #042B85;
-        color: #0d0d0d;
-        min-height: 100vh;
-        font-family: PingFang SC;
-        width: 100vw;
-        overflow-x: hidden;
-
-        @keyframes scale {
-            from {
-                transform: scale(1);
-            }
-
-            to {
-                transform: scale(0.8);
-            }
-        }
-
-
-        .iframe {
-            position: fixed;
-            width: 100%;
-            height: 100%;
-            left: 0;
-            top: 0;
-            z-index: 9999;
-        }
-
-        .bannerBox {
-            width: 100%;
-            height: auto;
-
-            .banner {
-                width: 100%;
-                height: 100%;
-            }
-        }
-
-        .inputBox {
-            width: 603px;
-            height: 91px;
-            background: #FFFFFF;
-            border-radius: 46px;
-            margin: 18px auto 0 auto;
-            box-sizing: border-box;
-            padding-left: 44px;
-            padding-right: 44px;
-
-            .input {
-                width: 100%;
-                margin: 0;
-                padding: 0;
-                border: none;
-                outline: none;
-                height: 100%;
-                font-size: 29px;
-
-                font-family: HYQiHei;
-                font-weight: bold;
-                color: #B0ACAC;
-                opacity: 0.7;
-                line-height: 79px;
-            }
-        }
-
-        .btnBox {
-            width: 516px;
-            height: 96px;
-            margin: 30px auto 40px auto;
-            border-radius: 35px;
-            animation-name: scale;
-            animation-duration: 0.3s;
-            animation-timing-function: ease-in-out;
-            animation-iteration-count: infinite;
-            animation-direction: alternate-reverse;
-
-            .btnText {
-                width: 100%;
-                height: 100%;
-                border-radius: 48px;
-                text-align: center;
-                line-height: 96px;
-                font-size: 50px;
-                font-family: HYQiHei;
-                font-weight: bold;
-                // background: linear-gradient(rgb(158, 156, 149), #FBD657);
-                // box-shadow: 0px 3px 6px 0px rgba(255, 255, 255, 0.64);
-                // color: #F60F0B;
-
-            }
-        }
-
-        .contentBox {
-            width: 638px;
-            border-radius: 20px;
-            margin: 0 auto;
-            margin-bottom: 68px;
-            padding: 41px 35px 56px 40px;
-            box-sizing: border-box;
-
-
-
-            .roundBox {
-                min-width: 400px;
-                margin: 40px auto;
-                display: flex;
-                justify-content: center;
-                align-items: center;
-                line-height: 79px;
-                height: 79px;
-
-
-                .mini {
-                    width: 8px;
-                    height: 8px;
-                    border-radius: 50%;
-
-                    margin: 0 5px;
-                }
-
-                .small {
-                    width: 12px;
-                    height: 12px;
-                    border-radius: 50%;
-                    margin: 0 5px;
-
-                }
-
-                .model {
-                    width: 16px;
-                    height: 16px;
-                    border-radius: 50%;
-
-                    margin: 0 5px;
-                }
-
-                .text {
-                    min-width: 200px;
-                    height: 79px;
-                    text-align: center;
-                    font-size: 36px;
-                    font-family: HYQiHei;
-                    font-weight: bold;
-                    line-height: 79px;
-                    border-radius: 39px;
-                    margin: 0 15px;
-                    padding: 0 30px;
-                }
-            }
-
-            .main {
-                font-size: 22px;
-                font-family: HYQiHei;
-                font-weight: normal;
-                line-height: 33px;
-            }
-
-
-        }
-
-        .timeout-modal {
-            padding: 60px 40px;
-            font-size: 28px;
-            line-height: 50px;
-            text-align: center;
-            color: #222222;
-
-            .btn {
-                width: 160px;
-                line-height: 60px;
-                margin: 50px auto 0;
-                border-radius: 8px;
-                background-color: #1876bc;
-                color: #fff;
-            }
-        }
-
-        .modal {
-            box-sizing: border-box;
-            position: absolute;
-            left: 50%;
-            top: 333px;
-            transform: translateX(-50%);
-            width: 530px;
-            background-color: #fff;
-            border-radius: 8px;
+.templatePush {
+  // background-color: #042B85;
+  color: #0d0d0d;
+  min-height: 100vh;
+  font-family: PingFang SC;
+  width: 100vw;
+  overflow-x: hidden;
+
+  @keyframes scale {
+    from {
+      transform: scale(1);
+    }
 
-            .close {
-                width: 80px;
-                height: 80px;
-                position: absolute;
-                bottom: -130px;
-                left: 50%;
-                transform: translateX(-50%);
-            }
+    to {
+      transform: scale(0.8);
+    }
+  }
+
+  .iframe {
+    position: fixed;
+    width: 100%;
+    height: 100%;
+    left: 0;
+    top: 0;
+    z-index: 9999;
+  }
+
+  .bannerBox {
+    width: 100%;
+    height: auto;
+
+    .banner {
+      width: 100%;
+      height: 100%;
+    }
+  }
+
+  .inputBox {
+    width: 603px;
+    height: 91px;
+    background: #ffffff;
+    border-radius: 46px;
+    margin: 18px auto 0 auto;
+    box-sizing: border-box;
+    padding-left: 44px;
+    padding-right: 44px;
+
+    .input {
+      width: 100%;
+      margin: 0;
+      padding: 0;
+      border: none;
+      outline: none;
+      height: 100%;
+      font-size: 29px;
+
+      font-family: HYQiHei;
+      font-weight: bold;
+      color: #b0acac;
+      opacity: 0.7;
+      line-height: 79px;
+    }
+  }
+
+  .btnBox {
+    width: 516px;
+    height: 96px;
+    margin: 30px auto 40px auto;
+    border-radius: 35px;
+    animation-name: scale;
+    animation-duration: 0.3s;
+    animation-timing-function: ease-in-out;
+    animation-iteration-count: infinite;
+    animation-direction: alternate-reverse;
+
+    .btnText {
+      width: 100%;
+      height: 100%;
+      border-radius: 48px;
+      text-align: center;
+      line-height: 96px;
+      font-size: 50px;
+      font-family: HYQiHei;
+      font-weight: bold;
+      // background: linear-gradient(rgb(158, 156, 149), #FBD657);
+      // box-shadow: 0px 3px 6px 0px rgba(255, 255, 255, 0.64);
+      // color: #F60F0B;
+    }
+  }
+
+  .contentBox {
+    width: 638px;
+    border-radius: 20px;
+    margin: 0 auto;
+    margin-bottom: 68px;
+    padding: 41px 35px 56px 40px;
+    box-sizing: border-box;
+
+    .roundBox {
+      min-width: 400px;
+      margin: 40px auto;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      line-height: 79px;
+      height: 79px;
+
+      .mini {
+        width: 8px;
+        height: 8px;
+        border-radius: 50%;
+
+        margin: 0 5px;
+      }
+
+      .small {
+        width: 12px;
+        height: 12px;
+        border-radius: 50%;
+        margin: 0 5px;
+      }
+
+      .model {
+        width: 16px;
+        height: 16px;
+        border-radius: 50%;
+
+        margin: 0 5px;
+      }
+
+      .text {
+        min-width: 200px;
+        height: 79px;
+        text-align: center;
+        font-size: 36px;
+        font-family: HYQiHei;
+        font-weight: bold;
+        line-height: 79px;
+        border-radius: 39px;
+        margin: 0 15px;
+        padding: 0 30px;
+      }
+    }
 
-            .top {
-                width: 100%;
-                height: 96px;
-            }
+    .main {
+      font-size: 22px;
+      font-family: HYQiHei;
+      font-weight: normal;
+      line-height: 33px;
+    }
+  }
+
+  .timeout-modal {
+    padding: 60px 40px;
+    font-size: 28px;
+    line-height: 50px;
+    text-align: center;
+    color: #222222;
+
+    .btn {
+      width: 160px;
+      line-height: 60px;
+      margin: 50px auto 0;
+      border-radius: 8px;
+      background-color: #1876bc;
+      color: #fff;
+    }
+  }
+
+  .modal {
+    box-sizing: border-box;
+    position: absolute;
+    left: 50%;
+    top: 333px;
+    transform: translateX(-50%);
+    width: 530px;
+    background-color: #fff;
+    border-radius: 8px;
+
+    .close {
+      width: 80px;
+      height: 80px;
+      position: absolute;
+      bottom: -130px;
+      left: 50%;
+      transform: translateX(-50%);
+    }
 
-            .logo {
-                width: 92px;
-                height: 50px;
-                position: absolute;
-                top: 22px;
-                left: 37px;
-            }
-        }
+    .top {
+      width: 100%;
+      height: 96px;
+    }
 
+    .logo {
+      width: 92px;
+      height: 50px;
+      position: absolute;
+      top: 22px;
+      left: 37px;
     }
+  }
+}
 </style>

+ 9 - 26
purchase_H5/src/templates/templateTogether-Col/index.vue

@@ -49,32 +49,7 @@
     <!-- 活动图 -->
     <div v-if="pageData.strategyInfo.posterPhoto" class="probox" @click="onGoLink()" :style="{backgroundImage: `url(${pageData.strategyInfo.posterPhoto})`}"></div>
     <!-- tab导航 -->
-    <div class="tabBox">
-      <div class="tab" v-if="pageData.remarks.jiluBtn === '1'" @click="beforeLogin('manual')">
-        <img src="../assets/record.png" alt="" />
-        <div>订购记录</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.jihuoBtn === '1'" @click="jihuo('点击激活')">
-        <img src="../assets/liuliang.png" alt="" />
-        <div>流量激活</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.memberBtn === '1'" @click="beforeLogin('member')">
-        <img src="../assets/huiyuan.png" alt="" />
-        <div>领取会员</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.chaxunBtn === '1'&&isApplet == false" @click="chaxun">
-        <img src="../assets/guanzhu.png" alt="" />
-        <div>剩余流量查询</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.guanzhuBtn ==='1'" @click="toPhone()">
-        <img src="../assets/fankui.png" alt="" />
-        <div>一键反馈</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.tuidingBtn === '1'" @click="beforeLogin('unBUy')">
-        <img src="../assets/tuiding.png" alt="" />
-        <div>退订产品</div>
-      </div>
-    </div>
+    <tab-Modal @tabClick="tabClick" :isApplet="isApplet"></tab-Modal>
     <!-- 使用说明 -->
     <div class="rule" @click="ruleClick">
       <div class="icon"></div>
@@ -141,6 +116,7 @@ import conceal from "../../components/hideModal.vue";
 import repeatModal from "../../components/repeatModal.vue";
 import unify from "./unify.vue";
 import MgtvApi from "@/util/mgTvJssdk.js";
+import tabModal from "../../components/tabModal.vue";
 import {
   Dialog
 } from "vant";
@@ -180,6 +156,7 @@ export default {
     conceal,
     repeatModal,
     unify,
+    tabModal
   },
   created () {
     document.title = this.pageData.mainProduct.productName;
@@ -322,6 +299,12 @@ export default {
         MgtvApi.setWebviewTitle({
           title: title,
         });
+        if (this.pageData.remarks.jihuoUrl && this.pageData.remarks.jihuo !== '') {
+          this.pageData.mainProduct.flowJumpUrl = this.pageData.remarks.jihuo
+        }
+        if (this.pageData.remarks.memberUrl && this.pageData.remarks.memberUrl !== '') {
+          this.pageData.mainProduct.cacheSeatOne[0].memberUrl = this.pageData.remarks.memberUrl
+        }
         this.$store.commit("setPageData", this.pageData);
         this.getIsBuy()
       } else {

+ 11 - 37
purchase_H5/src/templates/templateTogether/index.vue

@@ -3,12 +3,7 @@
     <div class="bannerBox" @click="bannerClick">
       <!-- 底层banner -->
 
-      <img class="banner" v-if="pageData.mainProduct.bannerPics[0] && indexNum >= 0" :class="
-          productJson.length > 0 &&
-          productJson[0].dongHua &&
-          productJson[0].dongHua == '1'
-            ? 'cartoon1'
-            : ''
+      <img class="banner" v-if="pageData.mainProduct.bannerPics[0] && indexNum >= 0" :class="productJson.length > 0 && productJson[0].dongHua &&productJson[0].dongHua == '1'? 'cartoon1': ''
         " :src="imgUrl + pageData.mainProduct.bannerPics[0]" alt="" />
       <!-- json动图 -->
       <div class="svgBanner">
@@ -39,7 +34,7 @@
     </div>
     <div v-if="newProduct.length>0">
       <div class="productBox">
-        <div class="product" v-for="(item,index) in newProduct" :key="index" :style="clickCss === index? { 'border-color': item.themeColor[0] }: {}" @click="productClick(item.id, index)">
+        <div class="product" v-for="(item,index) in newProduct" :key="index" :style="clickCss === index? { 'border-color': pageData.mainProduct.themeColor[0] }: {}" @click="productClick(item.id, index)">
           <div v-if="index === 0">
             <div class="i" v-if="pageData.remarks.mainTagText &&  pageData.remarks.mainTagText!==''">{{pageData.remarks.mainTagText}}</div>
           </div>
@@ -136,32 +131,7 @@
         backgroundImage: `url(${pageData.strategyInfo.posterPhoto})`,
       }"></div>
     <!-- tab导航 -->
-    <div class="tabBox">
-      <div class="tab" v-if="pageData.remarks.jiluBtn === '1'" @click="beforeLogin('manual')">
-        <img src="../assets/record.png" alt="" />
-        <div>订购记录</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.jihuoBtn === '1'" @click="jihuo('点击激活')">
-        <img src="../assets/liuliang.png" alt="" />
-        <div>流量激活</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.memberBtn === '1' " @click="beforeLogin('member')">
-        <img src="../assets/huiyuan.png" alt="" />
-        <div>领取会员</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.chaxunBtn === '1'&&isApplet == false" @click="chaxun">
-        <img src="../assets/guanzhu.png" alt="" />
-        <div>剩余流量查询</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.guanzhuBtn === '1'" @click="toPhone()">
-        <img src="../assets/fankui.png" alt="" />
-        <div>一键反馈</div>
-      </div>
-      <div class="tab" v-if="pageData.remarks.tuidingBtn === '1'" @click="beforeLogin('unBUy')">
-        <img src="../assets/tuiding.png" alt="" />
-        <div>退订产品</div>
-      </div>
-    </div>
+    <tab-Modal @tabClick="tabClick" :isApplet="isApplet"></tab-Modal>
     <!-- 使用说明 -->
     <div class="rule" @click="ruleClick">
       <div class="icon"></div>
@@ -210,8 +180,6 @@
 
 <script>
 import {
-  orderList,
-  changeUserid,
   strategyGetID,
   detMainProduct,
   strategytemplate,
@@ -234,6 +202,7 @@ import duanRen from "./components/duanRen.vue";
 import jianRen from "./components/jianRen.vue";
 import unifyModal from "../../components/unifyModal.vue";
 import lottie from "lottie-web";
+import tabModal from "../../components/tabModal.vue";
 export default {
   name: "baseNew",
   mixins: [common],
@@ -276,6 +245,7 @@ export default {
     duanRen,
     jianRen,
     unifyModal,
+    tabModal
   },
   filters: {
     formatPhone: (phone) => {
@@ -508,7 +478,6 @@ export default {
             spid: info.data.spid,
             themeColor: [mainJson.btnTopcol, mainJson.btnBotcol],
           };
-
           this.productJson = mainProduct.cacheSeatOne;
           this.pageData.mainProduct = mainProduct;
         }
@@ -520,8 +489,13 @@ export default {
           title: title,
         });
         this.getIsBuy()
+        if (this.pageData.remarks.jihuoUrl && this.pageData.remarks.jihuo !== '') {
+          this.pageData.mainProduct.flowJumpUrl = this.pageData.remarks.jihuo
+        }
+        if (this.pageData.remarks.memberUrl && this.pageData.remarks.memberUrl !== '') {
+          this.pageData.mainProduct.cacheSeatOne[0].memberUrl = this.pageData.remarks.memberUrl
+        }
         this.$store.commit("setPageData", this.pageData);
-
       } else {
         detMainProduct({
           productId: val,

+ 66 - 21
purchase_H5/src/templates/templateXinJiang/index.vue

@@ -45,23 +45,11 @@
       </div>
       <!--底部导航-->
       <div class="btnbox">
-        <div class="tabBox" v-if="pageData.remarks.chaxunBtn === '1'&&isApplet == false" @click="beforeLogin('query')">
+        <div class="tabBox" v-for="(item,index) in tabArr" :key="index" @click="tabClick(item)">
           <div class="img">
-            <img src="../assets/guanzhuNew.png" alt="" />
+            <img :src="item.icon" alt="" />
           </div>
-          <div>剩余流量查询</div>
-        </div>
-        <div class="tabBox" v-if="pageData.remarks.memberBtn === '1'" @click="beforeLogin('member')">
-          <div class="img">
-            <img src="../assets/huiyuanNew.png" alt="" />
-          </div>
-          <div>领取会员</div>
-        </div>
-        <div class="tabBox" v-if="pageData.remarks.tuidingBtn === '1'" @click="beforeLogin('unBuy')">
-          <div class="img">
-            <img src="../assets/tuidingNew.png" alt="" />
-          </div>
-          <div>退订产品</div>
+          <div>{{item.tabName}}</div>
         </div>
       </div>
     </div>
@@ -137,7 +125,7 @@ export default {
       repeatShow: false,
       isApplet: false,
       isBuy: "未订购",
-
+      tabArr: []
     };
   },
   created () {
@@ -148,6 +136,62 @@ export default {
         this.checked = true
       }
     }
+    if (this.pageData.remarks.tabArr && this.pageData.remarks.tabArr.length > 0) {
+      this.tabArr = this.pageData.remarks.tabArr
+      let arr = []
+      this.tabArr.forEach(val => {
+        if (val.tabName == '会员领取') {
+          let obj = {}
+          obj.tabName = val.tabName
+          obj.tabUrlBasics = val.tabUrlBasics
+          obj.tabUrlApplet = val.tabUrlApplet
+          obj.icon = require("../assets/huiyuanNew.png")
+          arr.push(obj)
+        }
+        if (val.tabName == '剩余流量查询') {
+          let obj = {}
+          obj.tabName = val.tabName
+          obj.tabUrlBasics = val.tabUrlBasics
+          obj.tabUrlApplet = val.tabUrlApplet
+          obj.icon = require("../assets/guanzhuNew.png")
+          arr.push(obj)
+        }
+        if (val.tabName == '退订产品') {
+          let obj = {}
+          obj.tabName = val.tabName
+          obj.tabUrlBasics = val.tabUrlBasics
+          obj.tabUrlApplet = val.tabUrlApplet
+          obj.icon = require("../assets/tuidingNew.png")
+          arr.push(obj)
+        }
+      })
+      this.tabArr = arr
+    } else {
+      if (this.pageData.remarks.memberBtn == '1') {
+        let obj = {}
+        obj.tabUrlBasics = ""
+        obj.tabUrlApplet = ""
+        obj.icon = require("../assets/guanzhuNew.png")
+        obj.tabName = '剩余流量查询'
+        this.tabArr.push(obj)
+      }
+      if (this.pageData.remarks.memberBtn == '1') {
+        let obj = {}
+        obj.tabUrlBasics = ""
+        obj.tabUrlApplet = ""
+        obj.icon = require("../assets/huiyuanNew.png")
+        obj.tabName = '会员领取'
+        this.tabArr.push(obj)
+      }
+      if (this.pageData.remarks.tuidingBtn == '1') {
+        let obj = {}
+        obj.tabUrlBasics = ""
+        obj.tabUrlApplet = ""
+        obj.icon = require("../assets/tuidingNew.png")
+        obj.tabName = '退订产品'
+        this.tabArr.push(obj)
+      }
+    }
   },
   mounted () {
     addR.showSP();
@@ -174,13 +218,10 @@ export default {
               url: this.productJson[0].memberUrl
             })
           }
-        }else{
+        } else {
           window.location.href = "https://cs.mige.tv/H"
         }
-      } else if (type === "query") {
-        addR.clickFollow();
-        this.showQr = true;
-      } else if (type === "unBuy") {
+      } else if (type === "unBUy") {
         addR.unBuyClick();
         if (this.pageData.strategyInfo.unsubscribeStrategyList !== null && this.pageData.strategyInfo.unsubscribeStrategyList.length > 0) {
           let productId = await strategytemplate(this.pageData.strategyInfo.unsubscribeStrategyList[0]);
@@ -192,6 +233,10 @@ export default {
         }
       }
     },
+    chaxun () {
+      addR.clickFollow();
+      this.showQr = true;
+    },
     // 推荐产品跳转
     recommend (val) {
       strategytemplate(val).then(async res => {

+ 6 - 0
purchase_H5/src/views/index.vue

@@ -280,6 +280,12 @@ export default {
             viceProductStrategyList: data.viceProductIds,
           }
         };
+        if(pageData.remarks.jihuoUrl && pageData.remarks.jihuo !==''){
+          pageData.mainProduct.flowJumpUrl =  pageData.remarks.jihuo
+        }
+        if(pageData.remarks.memberUrl && pageData.remarks.memberUrl !==''){
+          pageData.mainProduct.cacheSeatOne[0].memberUrl =  pageData.remarks.memberUrl
+        }
         this.$store.commit("setPageData", pageData);
         if (window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == "micromessenger") {
           let banners = pageData.mainProduct.bannerPics[0];

+ 98 - 8
purchase_H5/src/views/manual/manual004.vue

@@ -17,12 +17,14 @@
     </div>
     <div class="oreder">
       <div class="oerdetText" @click="showConceal = true">隐私声明</div>
-      <div class="oerdetText" v-if="pageData.remarks.memberBtn === '1'" @click="getMember">
+      <!-- <div class="oerdetText" v-if="pageData.remarks.memberBtn === '1'" @click="getMember">
         领取权益
       </div>
       <div class="oerdetText" v-if="pageData.remarks.tuidingBtn === '1'" @click="beforeLogin">
         退订产品
-      </div>
+      </div> -->
+      <div class="oerdetText" v-for="(item,index) in tabArr" :key="index" @click="tabClick(item)">
+        {{item.tabName}}</div>
     </div>
     <!-- 隐私条款 -->
     <conceal v-model="showConceal" :cpid="pageData.mainProduct.cpid"></conceal>
@@ -66,7 +68,8 @@ export default {
       channelKey: "",
       channelName: "",
       showConceal: false,
-      isApplet: false
+      isApplet: false,
+      tabArr: []
     };
   },
   created () {
@@ -77,7 +80,6 @@ export default {
       this.channelName = res.data.channelName;
       this.getTemplate(res.data.fullCode, res.data.onOffStatus)
     });
-
   },
   mounted () {
     wx.miniProgram.getEnv(res => {
@@ -91,9 +93,13 @@ export default {
       this.unBuyDrainage = false;
       this.showUnbuy = true
     },
-    async beforeLogin () {
-      addR.unBuyClick();
-      this.showUnbuy = true;
+    async beforeLogin (type) {
+      if (type === 'member') {
+        this.getMember()
+      } else if (type === "unBUy") {
+        addR.unBuyClick();
+        this.showUnbuy = true;
+      }
     },
     getTemplate (fullCode, edition) {
       let anonymousId = this.$sensors.store._state.$device_id;
@@ -102,7 +108,7 @@ export default {
         anonymousId: anonymousId,
         channelKey: this.channelKey,
         location: "",
-        userId:userid
+        userId: userid
       }
       newStrategy(params).then(async (res) => {
         let data = res.data;
@@ -203,7 +209,50 @@ export default {
             viceProductStrategyList: data.viceProductIds,
           }
         };
+        if(pageData.remarks.jihuoUrl && pageData.remarks.jihuo !==''){
+          pageData.mainProduct.flowJumpUrl =  pageData.remarks.jihuo
+        }
+        if(pageData.remarks.memberUrl && pageData.remarks.memberUrl !==''){
+          pageData.mainProduct.cacheSeatOne[0].memberUrl =  pageData.remarks.memberUrl
+        }
         this.pageData = pageData
+        if (this.pageData.remarks.tabArr && this.pageData.remarks.tabArr.length > 0) {
+          this.tabArr = this.pageData.remarks.tabArr
+          let arr = []
+          this.tabArr.forEach(val => {
+            if (val.tabName == '会员领取') {
+              let obj = {}
+              obj.tabName = val.tabName
+              obj.tabUrlBasics = val.tabUrlBasics
+              obj.tabUrlApplet = val.tabUrlApplet
+              arr.push(obj)
+            }
+            if (val.tabName == '退订产品') {
+              let obj = {}
+              obj.tabName = val.tabName
+              obj.tabUrlBasics = val.tabUrlBasics
+              obj.tabUrlApplet = val.tabUrlApplet
+              arr.push(obj)
+            }
+          })
+          this.tabArr = arr
+        } else {
+          if (this.pageData.remarks.memberBtn == '1') {
+            let obj = {}
+            obj.tabUrlBasics = ""
+            obj.tabUrlApplet = ""
+            obj.tabName = '会员领取'
+            this.tabArr.push(obj)
+          }
+          if (this.pageData.remarks.tuidingBtn == '1') {
+            let obj = {}
+            obj.tabUrlBasics = ""
+            obj.tabUrlApplet = ""
+            obj.tabName = '退订产品'
+            this.tabArr.push(obj)
+          }
+
+        }
         this.$store.commit("setPageData", pageData);
       });
     },
@@ -227,6 +276,47 @@ export default {
       }
 
     },
+    tabClick (item) {
+      if (this.isApplet == true) {
+        if (item.tabUrlApplet !== '') {
+          let url = item.tabUrlApplet +'&channelName='+this.pageData.channl.channelKey
+          window.location.href = url
+        } else {
+          if (item.tabName == '订购记录') {
+            this.beforeLogin('manual')
+          } else if (item.tabName == '流量激活') {
+            this.jihuo('点击激活')
+          } else if (item.tabName == '一键反馈') {
+            this.toPhone()
+          } else if (item.tabName == '退订产品') {
+            this.beforeLogin('unBUy')
+          } else if (item.tabName == '剩余流量查询') {
+            this.chaxun()
+          } else if (item.tabName == '会员领取') {
+            this.beforeLogin('member')
+          }
+        }
+      } else {
+        if (item.tabUrlBasics !== '') {
+          let url = item.tabUrlBasics +'&channelName='+this.pageData.channl.channelKey
+          window.location.href = url
+        } else {
+          if (item.tabName == '订购记录') {
+            this.beforeLogin('manual')
+          } else if (item.tabName == '流量激活') {
+            this.jihuo('点击激活')
+          } else if (item.tabName == '一键反馈') {
+            this.toPhone()
+          } else if (item.tabName == '退订产品') {
+            this.beforeLogin('unBUy')
+          } else if (item.tabName == '剩余流量查询') {
+            this.chaxun()
+          } else if (item.tabName == '会员领取') {
+            this.beforeLogin('member')
+          }
+        }
+      }
+    },
   },
 };
 </script>

+ 2 - 2
purchase_H5/src/views/members/member.vue

@@ -32,7 +32,7 @@
       <div class="title">领取须知</div>
       <div class="main">
         <p>
-          1.订购、续订本产品当月,请在【腾讯视频】、【爱奇艺】、【优酷视频】会员月卡中任选其一进行领取,领取成功后系统将会员充值到订购手机号码中;订购期间务必每月手动领取当月会员,逾期不补。
+          1.订购、续订本产品当月,请在【腾讯视频】、【爱奇艺】、【优酷视频】会员月卡中任选其一进行领取,领取成功后系统将会员充值到订购手机号码中;<span style="font-weight: bold" >订购期间务必每月手动领取当月会员,逾期不补</span>
         </p>
         <p>
           2.其中如果手机号码已绑定视腾讯视频账号,可直接登录使用,如未绑定,需先绑定方可使用,腾讯视频账号绑定地址
@@ -89,7 +89,7 @@ export default {
           name: "优酷视频",
           cpid: "youtu",
         },
-        
+
         {
           img: require("./memberImg/aiqiyi.png"),
           name: "爱奇艺视频",

+ 33 - 0
purchase_ao/src/components/imgBox/index.vue

@@ -0,0 +1,33 @@
+<template>
+  <div>
+    <!-- <el-upload class="avatar-uploader" :show-file-list="false" :action="imgapi" :on-success="((file,fileList)=>{fileSuccess(file,fileList,'副banner')})">
+      <img v-if="imgUrl" :src="imgUrl+viceJson.bannerImg" class="avatar" />
+      <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+    </el-upload>
+    <span v-if="viceJson.bannerImg!==''" @click="viceJson.bannerImg=''" style="color: #F56C6C; cursor: pointer">删除</span> -->
+    <div class="imgBox" @click="openImgClick">
+      <i class="el-icon-plus"></i>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style lang="scss">
+.imgBox {
+  width: 120px;
+  height: 120px;
+  border: 1px dashed #d9d9d9;
+  cursor: pointer;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.imgBox:hover {
+  border-color: #409eff;
+}
+</style>

+ 10 - 1
purchase_ao/src/router/index.js

@@ -150,7 +150,16 @@ export const constantRoutes = [{
     meta: {
       title: '编辑策略'
     }
-  }]
+  }, 
+  // {
+  //   path: '/strategy/test',
+  //   component: () => import('@/views/strategy/test'),
+  //   name: '测试',
+  //   meta: {
+  //     title: '测试'
+  //   }
+  // }
+]
 },
 {
   path: '/newSchemeProinfo',

+ 7 - 3
purchase_ao/src/views/login/index.vue

@@ -49,7 +49,7 @@
       </el-form-item>
       <el-form-item prop="imgCode" class="login-code">
         <el-input v-model="loginForm.imgCode" placeholder="验证码" />
-        <img :src="imgurl" alt="" @click="getCode" />
+        <img v-if="imgurl" :src="imgurl" alt="" @click="getCode" />
       </el-form-item>
       <el-button
         type="primary"
@@ -95,8 +95,8 @@ export default {
   data() {
     return {
       loginForm: {
-        username: process.env.NODE_ENV == "development" ? "Lt_ad" : "",
-        password: process.env.NODE_ENV == "development" ? "Adgh#$%!13t" : "",
+        username: "",
+        password: "",
         imgCode: "",
       },
       loginRules: {
@@ -190,6 +190,8 @@ export default {
                 }, 500);
               }
             }
+          }).catch((error) => {
+              this.getCode()
           });
           // this.$store
           //   .dispatch('user/login', { username, password, imgCode })
@@ -288,6 +290,8 @@ $cursor: #fff;
       img {
         flex: 0 0 100px;
         margin: 10px;
+          width: 60px;
+          height: 30px;
       }
     }
   }

+ 92 - 46
purchase_ao/src/views/strategy/add.vue

@@ -150,6 +150,15 @@
                 <el-input v-model="productJson.remark3" placeholder="请输入分享简述">
                 </el-input>
               </el-form-item>
+              <el-form-item label="会员领取链接">
+                <el-input v-model="extJson.memberUrl" placeholder="会员领取链接">
+                </el-input>
+              </el-form-item>
+              <el-form-item label="激活指引">
+                <el-input v-model="extJson.jihuoUrl" placeholder="流量激活指引">
+                </el-input>
+              </el-form-item>
+
               <el-form-item>
                 <template slot="label">
                   <el-popover :open-delay="500" placement="right" trigger="hover">
@@ -492,48 +501,26 @@
                   </el-form-item>
                 </el-collapse-item>
                 <el-collapse-item title="菜单按钮" name="4">
-                  <el-row style="margin:0" :gutter="24">
-                    <el-col style="display: flex;" :span="10">
-                      <el-tooltip :open-delay="500" effect="dark" content="底部导航订购记录按钮" placement="top">
-                        <span class="spanStyle">订购记录</span>
-                      </el-tooltip>
-                      <el-switch v-model="extJson.jiluBtn" active-text="勾选" inactive-text="不勾选" active-value="1" inactive-value="0" />
-                    </el-col>
-                    <el-col style="display: flex;" :span="10">
-                      <el-tooltip :open-delay="500" effect="dark" content="底部导航流量激活按钮" placement="top">
-                        <span class="spanStyle">流量激活</span>
-                      </el-tooltip>
-                      <el-switch v-model="extJson.jihuoBtn" active-text="勾选" inactive-text="不勾选" active-value="1" inactive-value="0" />
-                    </el-col>
-                  </el-row>
-                  <el-row style="margin:0" :gutter="24">
-                    <el-col style="display: flex;" :span="10">
-                      <el-tooltip :open-delay="500" effect="dark" content="底部导航一键反馈按钮" placement="top">
-                        <span class="spanStyle">一键反馈</span>
-                      </el-tooltip>
-                      <el-switch v-model="extJson.guanzhuBtn" active-text="勾选" inactive-text="不勾选" active-value="1" inactive-value="0" />
-                    </el-col>
-                    <el-col style="display: flex;" :span="10">
-                      <el-tooltip :open-delay="500" effect="dark" content="底部导航退订产品按钮" placement="top">
-                        <span class="spanStyle">退订产品</span>
-                      </el-tooltip>
-                      <el-switch v-model="extJson.tuidingBtn" active-text="勾选" inactive-text="不勾选" active-value="1" inactive-value="0" />
-                    </el-col>
-                  </el-row>
-                  <el-row style="margin:0" :gutter="24">
-                    <el-col style="display: flex;" :span="10">
-                      <el-tooltip :open-delay="500" effect="dark" content="底部导航流量查询按钮" placement="top">
-                        <span class="spanStyle">流量查询</span>
-                      </el-tooltip>
-                      <el-switch v-model="extJson.chaxunBtn" active-text="勾选" inactive-text="不勾选" active-value="1" inactive-value="0" />
-                    </el-col>
-                    <el-col style="display: flex;" :span="10">
-                      <el-tooltip :open-delay="500" effect="dark" content="底部导航会员领取按钮" placement="top">
-                        <span class="spanStyle">会员领取</span>
-                      </el-tooltip>
-                      <el-switch v-model="extJson.memberBtn" active-text="勾选" inactive-text="不勾选" active-value="1" inactive-value="0" />
-                    </el-col>
-                  </el-row>
+                  <el-checkbox-group v-model="tabList">
+                    <el-checkbox v-for="item in tabs" :label="item" @change="tabChange(item,$event)">{{item}}</el-checkbox>
+                  </el-checkbox-group>
+                  <div style="margin-top:20px;border:1px solid #DCDFE6;padding: 20px 20px;">
+                    <el-row>
+                      <el-col :span="24">
+                        <el-tag v-for="item in tabList" closable style="margin-left:10px" @close="tabRemove(item)">{{item}}</el-tag>
+                      </el-col>
+                    </el-row>
+                  </div>
+                  <el-collapse>
+                    <el-collapse-item v-for="(item,index) in tabForm" :key="index" :title="item.tabName">
+                      <el-form-item label="基础环境">
+                        <el-input type="text" v-model="item.tabUrlBasics" placeholder="请填写URL,不填则为默认能力"></el-input>
+                      </el-form-item>
+                      <el-form-item label="小程序环境">
+                        <el-input type="text" v-model="item.tabUrlApplet"  placeholder="请填写URL,不填则为默认能力"></el-input>
+                      </el-form-item>
+                    </el-collapse-item>
+                  </el-collapse>
                 </el-collapse-item>
               </el-collapse>
             </el-form>
@@ -871,6 +858,9 @@ export default {
         mainPrice: "",
         viceTagText: "",
         vicePrice: "",
+        memberUrl: "",
+        jihuoUrl: "",
+        tabArr: []
       },   //策略json
       productJson: {
         logoPic: "",   //logo图   (对应原字段)
@@ -939,7 +929,10 @@ export default {
       strategyInfoList: [],
       editId: null,
       copy: 0,
-      oldform: {}
+      oldform: {},
+      tabList: [],
+      tabs: ['订购记录', '流量激活', '一键反馈', '退订产品', '剩余流量查询', '会员领取'],
+      tabForm: []
     }
   },
   created () {
@@ -961,6 +954,56 @@ export default {
 
   },
   methods: {
+    getTabList () {
+      this.tabList = []
+      if (this.extJson.tabArr && this.extJson.tabArr.length>0) {
+        this.tabForm = this.extJson.tabArr
+        this.extJson.tabArr.forEach(val=>{
+          this.tabList.push(val.tabName)
+        })
+      } else {
+        if (this.extJson.jiluBtn == '1') {
+          this.tabList.push('订购记录')
+        }
+        if (this.extJson.jihuoBtn == '1') {
+          this.tabList.push('流量激活')
+        }
+        if (this.extJson.guanzhuBtn == '1') {
+          this.tabList.push('一键反馈')
+        }
+        if (this.extJson.tuidingBtn == '1') {
+          this.tabList.push('退订产品')
+        }
+        if (this.extJson.chaxunBtn == '1') {
+          this.tabList.push('剩余流量查询')
+        }
+        if (this.extJson.memberBtn == '1') {
+          this.tabList.push('会员领取')
+        }
+        this.tabList.forEach(val => {
+          let obj = {}
+          obj.tabName = val
+          obj.tabUrlBasics = ""
+          obj.tabUrlApplet = ""
+          this.tabForm.push(obj)
+        })
+      }
+    },
+    tabRemove (val) {
+      this.tabList = this.tabList.filter(item => item != val)
+      this.tabForm = this.tabForm.filter(item => item.tabName != val)
+    },
+    tabChange (item, e) {
+      if (e == true) {
+        let obj = {}
+        obj.tabName = item
+        obj.tabUrlBasics = ""
+        obj.tabUrlApplet = ""
+        this.tabForm.push(obj)
+      } else {
+        this.tabForm = this.tabForm.filter(element => element.tabName != item)
+      }
+    },
     inputBlur () {
       this.form.strategyName = this.$store.state.user.name + '——' + this.form.strategyName
     },
@@ -1014,6 +1057,7 @@ export default {
         }
         this.form.id = res.data.id
         this.oldform = res.data;
+        this.getTabList()
         setTimeout(() => {
           this.preview()
         }, 1000)
@@ -1097,14 +1141,16 @@ export default {
         cancelButtonText: '取消',
         type: 'warning'
       }).then(() => {
+        this.productJson.productV="2"
+        this.viceJson.productV="2"
         let obj = {
           product: this.productJson,
           viceProduct: this.viceJson
         }
+        this.extJson.tabArr = this.tabForm
         this.form.productJson = JSON.stringify(obj)
         this.form.extJson = JSON.stringify(this.extJson)
         this.form.otherJson = JSON.stringify(this.otherJson)
-
         if (this.editId !== null) {
           let id = this.$route.query.id
           post('/strategytemplate/update/' + id, this.form).then(res => {
@@ -1271,8 +1317,8 @@ export default {
           this.form.activityLogo = this.imgUrl + file.data
         } else if (name === '活动海报') {
           this.form.posterPhoto = this.imgUrl + file.data
-        }else if(name === 'extend'){
-           this.extJson.extendImg = this.imgUrl + file.data
+        } else if (name === 'extend') {
+          this.extJson.extendImg = this.imgUrl + file.data
         }
 
       }

+ 18 - 0
purchase_ao/src/views/strategy/test.vue

@@ -0,0 +1,18 @@
+<template>
+  <div class="test">
+     <img-box></img-box>
+  </div>
+</template>
+
+<script>
+import imgBox from '@/components/imgBox/index.vue'
+export default {
+  components:{
+    imgBox
+  }
+
+}
+</script>
+
+<style>
+</style>