Parcourir la source

1、订购页面适配关联产品订购关系查询及合约提示,退订省分连带退订非省分需求附带内容。
2、管理后台新增密码有效期判定,新增用户修改密码能力,超期密码强制修改密码提示
3、管理后台图片验证码升级,改用闪图形式,防AI识别同时加强肉眼识别能力
4、尊享畅视会员独立激活页面UI调整

hml il y a 2 ans
Parent
commit
634cd19214
93 fichiers modifiés avec 500 ajouts et 193 suppressions
  1. 41 7
      purchase_H5/src/common/common.js
  2. 88 30
      purchase_H5/src/components/unbuyModal.vue
  3. 88 30
      purchase_H5/src/componentsNew/unbuyModal.vue
  4. BIN
      purchase_H5/src/templates/suiXinxuan/images/QQYypng
  5. BIN
      purchase_H5/src/templates/suiXinxuan/images/QQ音乐@2x.png
  6. BIN
      purchase_H5/src/templates/suiXinxuan/images/TX@2x.png
  7. BIN
      purchase_H5/src/templates/suiXinxuan/images/aqy@2x.png
  8. BIN
      purchase_H5/src/templates/suiXinxuan/images/bilibili_98@2x.png
  9. BIN
      purchase_H5/src/templates/suiXinxuan/images/bsk.png
  10. BIN
      purchase_H5/src/templates/suiXinxuan/images/dyi.png
  11. BIN
      purchase_H5/src/templates/suiXinxuan/images/eleme.png
  12. BIN
      purchase_H5/src/templates/suiXinxuan/images/hemaxiansheng.png
  13. BIN
      purchase_H5/src/templates/suiXinxuan/images/jingdong.png
  14. BIN
      purchase_H5/src/templates/suiXinxuan/images/keep月会员@2x.png
  15. BIN
      purchase_H5/src/templates/suiXinxuan/images/kfc.png
  16. BIN
      purchase_H5/src/templates/suiXinxuan/images/maoyandianying.png
  17. BIN
      purchase_H5/src/templates/suiXinxuan/images/meituan.png
  18. BIN
      purchase_H5/src/templates/suiXinxuan/images/mg@2x.png
  19. BIN
      purchase_H5/src/templates/suiXinxuan/images/ppTY.png
  20. BIN
      purchase_H5/src/templates/suiXinxuan/images/pptv@2x.png
  21. BIN
      purchase_H5/src/templates/suiXinxuan/images/pp体育@2x.png
  22. BIN
      purchase_H5/src/templates/suiXinxuan/images/souhushipin.png
  23. BIN
      purchase_H5/src/templates/suiXinxuan/images/wangyiyunyinyue.png
  24. BIN
      purchase_H5/src/templates/suiXinxuan/images/xgxw.png
  25. BIN
      purchase_H5/src/templates/suiXinxuan/images/yk@2x.png
  26. BIN
      purchase_H5/src/templates/suiXinxuan/images/zhihudushu.png
  27. BIN
      purchase_H5/src/templates/suiXinxuan/images/喜马拉雅_98@2x.png
  28. BIN
      purchase_H5/src/templates/suiXinxuan/images/学国学网.png
  29. BIN
      purchase_H5/src/templates/suiXinxuan/images/必胜客_98@2x.png
  30. BIN
      purchase_H5/src/templates/suiXinxuan/images/抖音@2x.png
  31. BIN
      purchase_H5/src/templates/suiXinxuan/images/搜狐视频@2x.png
  32. BIN
      purchase_H5/src/templates/suiXinxuan/images/滴滴@2x.png
  33. BIN
      purchase_H5/src/templates/suiXinxuan/images/猫眼电影_98@2x.png
  34. BIN
      purchase_H5/src/templates/suiXinxuan/images/知乎读书会员@2x.png
  35. BIN
      purchase_H5/src/templates/suiXinxuan/images/网易云音乐@2x.png
  36. BIN
      purchase_H5/src/templates/suiXinxuan/images/美团优惠券_98@2x.png
  37. BIN
      purchase_H5/src/templates/suiXinxuan/images/肯德基_98@2x.png
  38. BIN
      purchase_H5/src/templates/suiXinxuan/images/饿了么_98@2x.png
  39. 1 0
      purchase_H5/src/templates/templateApplet/index.vue
  40. 1 0
      purchase_H5/src/templates/templateColor/index.vue
  41. 1 0
      purchase_H5/src/templates/templateColorNew/index.vue
  42. 1 0
      purchase_H5/src/templates/templateCom/index.vue
  43. 1 0
      purchase_H5/src/templates/templateKechuang/index.vue
  44. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/QQYypng
  45. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/QQ音乐@2x.png
  46. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/TX@2x.png
  47. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/aqy@2x.png
  48. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/bilibili_98@2x.png
  49. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/bsk.png
  50. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/dyi.png
  51. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/eleme.png
  52. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/hemaxiansheng.png
  53. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/jingdong.png
  54. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/keep月会员@2x.png
  55. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/kfc.png
  56. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/maoyandianying.png
  57. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/meituan.png
  58. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/mg@2x.png
  59. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/ppTY.png
  60. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/pptv@2x.png
  61. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/pp体育@2x.png
  62. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/souhushipin.png
  63. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/wangyiyunyinyue.png
  64. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/xgxw.png
  65. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/yk@2x.png
  66. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/zhihudushu.png
  67. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/喜马拉雅_98@2x.png
  68. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/学国学网.png
  69. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/必胜客_98@2x.png
  70. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/抖音@2x.png
  71. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/搜狐视频@2x.png
  72. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/滴滴@2x.png
  73. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/猫眼电影_98@2x.png
  74. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/知乎读书会员@2x.png
  75. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/网易云音乐@2x.png
  76. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/美团优惠券_98@2x.png
  77. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/肯德基_98@2x.png
  78. BIN
      purchase_H5/src/templates/templateSuixinxuan/images/饿了么_98@2x.png
  79. 5 4
      purchase_H5/src/templates/templateSuixinxuan/index.vue
  80. 2 1
      purchase_H5/src/templates/templateThree/index.vue
  81. 3 0
      purchase_H5/src/templates/templateTogether-Col/index.vue
  82. 3 0
      purchase_H5/src/templates/templateTogether/index.vue
  83. 1 0
      purchase_H5/src/templates/templateXinJiang/index.vue
  84. 1 0
      purchase_H5/src/views/index.vue
  85. BIN
      purchase_H5/src/views/page/img/tishi.png
  86. BIN
      purchase_H5/src/views/page/img/title.png
  87. 35 21
      purchase_H5/src/views/page/jihuo-suixinxuan.vue
  88. 108 0
      purchase_ao/src/components/password/index.vue
  89. 23 18
      purchase_ao/src/layout/components/Navbar.vue
  90. 35 75
      purchase_ao/src/views/login/index.vue
  91. 19 2
      purchase_ao/src/views/productV2/addProduct.vue
  92. 22 4
      purchase_ao/src/views/productV2/editProduct.vue
  93. 21 1
      purchase_ao/src/views/schemeV2/index.vue

+ 41 - 7
purchase_H5/src/common/common.js

@@ -9,7 +9,8 @@ import {
   login,
   aqyUser,
   numberSearch,
-  getPhoneAddres
+  getPhoneAddres,
+  detMainProduct
 } from '../api'
 import util from '../util'
 import addR from "../common/addRecord";
@@ -251,7 +252,7 @@ export default {
         }
         that.$toast.clear();
       }
-      
+
     },
     async onMessageSuccess (data) {
       addR.getToken()
@@ -529,21 +530,55 @@ export default {
           cpid: this.param.cpid,
           spid: this.param.spid,
         }).then((res) => {
+          // console.log(res)
           let data = res.data;
           if (data.length === 0) {
-            this.isBuy = "未订购";
+            this.getBuyList('未订购')
           } else {
             for (let i = 0; i < data.length; i++) {
               if (data[i].STATUS === "0") {
                 this.isBuy = "已订购";
               } else {
-                this.isBuy = "已退订";
+                this.getBuyList('已退订')
               }
             }
           }
         });
       }
-
+    },
+    // 查询关联产品订购记录
+    async getBuyList (isBuy) {
+      let arr = []
+      if (this.pageData.mainProduct.cacheSeatOne[0].relationIds != '') {
+        let ids = this.pageData.mainProduct.cacheSeatOne[0].relationIds.split(',')
+        for (let j = 0; j < ids.length; j++) {
+          let info = await detMainProduct({ productId: ids[j] })
+          let obj = {
+            userid: this.user.userid,
+            spid: info.data.spid,
+            cpid: info.data.cpid
+          }
+          await orderList(obj).then(result => {
+            if (result.data.length > 0) {
+              arr = result.data
+              return false
+            }
+          })
+        }
+      } else {
+        this.isBuy = isBuy
+      }
+      if (arr.length > 0) {
+        arr.forEach(val => {
+          if (val.STATUS === "0") {
+            this.isBuy = "已订购";
+          } else {
+            this.isBuy = "已退订";
+          }
+        })
+      } else {
+        this.isBuy = isBuy
+      }
     },
     // 客户端免流激活
     jihuo (val) {
@@ -619,8 +654,7 @@ export default {
           addR.loginSuccess()
           this.number(res.data)
         })
-      }
-      if (localStorage.getItem('phone')) {
+      }else if (localStorage.getItem('phone')) {
         this.number(localStorage.getItem('phone'))
       }
       if (this.pageData.remarks.dispose && this.pageData.remarks.dispose !== '' && this.$route.query.token) {

+ 88 - 30
purchase_H5/src/components/unbuyModal.vue

@@ -117,6 +117,7 @@ import {
   outFeed,
   memberList,
   orderList,
+  detMainProduct
 } from "../api/index";
 import addR from "../common/addRecord";
 import vuePuzzle from "vue-puzzle-vcode";
@@ -243,44 +244,101 @@ export default {
         }
       );
     },
-    getOrderList (userid) {
+    async getOrderList (userid) {
+      // 查询主产品订购关系
       orderList({
         cpid: this.pageData.mainProduct.cpid,
         spid: this.pageData.mainProduct.spid,
         userid: userid,
-      }).then((res) => {
+      }).then(async (res) => {
+        // 主产品查询有订购关系
         if (res.data.length > 0) {
-          this.$emit('change', false)
-          let orderTime = res.data[0].ORDERTIME.substring(0, 8)
-          let date = new Date()
-          let year = parseInt(date.getFullYear())
-          let month = parseInt(date.getMonth() + 1)
-          let day = parseInt(date.getDate())
-          let orderYear = parseInt(orderTime.substring(0, 4))
-          let orderMonth = parseInt(orderTime.substring(4, 6))
-          let orderDay = parseInt(orderTime.substring(6, 8))
-          if (orderYear == year) {
-            if ((month - orderMonth) < 5) {
-              this.opoutShow = true
+          //主产品为订购状态 根据合约期条件显示合约期提示
+          if (res.data[0].STATUS === "0") {
+            this.getOpout(res)
+          } else {
+            // 主产品为退订
+            //有关联产品 根据合约期条件显示合约期提示
+            if (this.pageData.mainProduct.cacheSeatOne[0].relationIds != '') {
+              let ids = this.pageData.mainProduct.cacheSeatOne[0].relationIds.split(',')
+              for (let j = 0; j < ids.length; j++) {
+                let info = await detMainProduct({ productId: ids[j] })
+                let obj = {
+                  userid: userid,
+                  spid: info.data.spid,
+                  cpid: info.data.cpid
+                }
+                await orderList(obj).then(res => {
+                  if (res.data.length > 0) {
+                    if (res.data[0].STATUS === '0') {
+                      this.getOpout(res)
+                      return false
+                    }
+                  }
+                })
+              }
             } else {
-              this.unbuyClick()
+              // 无关联产品直接退订
+              this.$emit('change', false)
+              this.unbuyClick();
             }
-          } else if ((year - orderYear) == 1) {
-            let number = (12 - orderMonth) + month
-            if (number < 5) {
-              this.opoutShow = true
-            } else {
-              this.unbuyClick()
+          }
+        } else {
+          // 主产品没有订购关系
+          // 有关联产品   根据合约期条件显示合约期提示
+          if (this.pageData.mainProduct.cacheSeatOne[0].relationIds != '') {
+            let ids = this.pageData.mainProduct.cacheSeatOne[0].relationIds.split(',')
+            for (let j = 0; j < ids.length; j++) {
+              let info = await detMainProduct({ productId: ids[j] })
+              let obj = {
+                userid: userid,
+                spid: info.data.spid,
+                cpid: info.data.cpid
+              }
+              await orderList(obj).then(res => {
+                if (res.data.length > 0) {
+                  if (res.data[0].STATUS === '0') {
+                    this.getOpout(res)
+                  }
+                  return false
+                }
+              })
             }
           } else {
-            this.unbuyClick()
+            // 无关联产品直接退订
+            this.$emit('change', false)
+            this.unbuyClick();
           }
-        } else {
-          this.$emit('change', false)
-          this.unbuyClick();
         }
       });
     },
+    getOpout (res) {
+      this.$emit('change', false)
+      let orderTime = res.data[0].ORDERTIME.substring(0, 8)
+      let date = new Date()
+      let year = parseInt(date.getFullYear())
+      let month = parseInt(date.getMonth() + 1)
+      let day = parseInt(date.getDate())
+      let orderYear = parseInt(orderTime.substring(0, 4))
+      let orderMonth = parseInt(orderTime.substring(4, 6))
+      let orderDay = parseInt(orderTime.substring(6, 8))
+      if (orderYear == year) {
+        if ((month - orderMonth) < 5) {
+          this.opoutShow = true
+        } else {
+          this.unbuyClick()
+        }
+      } else if ((year - orderYear) == 1) {
+        let number = (12 - orderMonth) + month
+        if (number < 5) {
+          this.opoutShow = true
+        } else {
+          this.unbuyClick()
+        }
+      } else {
+        this.unbuyClick()
+      }
+    },
     unbuy () {
       // this.getOrderList(this.$store.state.user.userid)
       let { phone, vcode } = this.loginForm;
@@ -347,11 +405,11 @@ export default {
         userid: this.$store.state.user.userid,
       };
       await this.postReson(this.$store.state.user.userid, this.$store.state.user.phone);
-        this.$toast.loading({
-            type: "loading",
-            message: "退订中",
-            duration: 0
-        })
+      this.$toast.loading({
+        type: "loading",
+        message: "退订中",
+        duration: 0
+      })
       postBuy(updata).then((res) => {
         if (res.code === 10000) {
           addR.unBuySuccess();

+ 88 - 30
purchase_H5/src/componentsNew/unbuyModal.vue

@@ -117,6 +117,7 @@ import {
   outFeed,
   memberList,
   orderList,
+  detMainProduct
 } from "../api/index";
 import addR from "../common/addRecord";
 import vuePuzzle from "vue-puzzle-vcode";
@@ -243,44 +244,101 @@ export default {
         }
       );
     },
-    getOrderList (userid) {
+    async getOrderList (userid) {
+      // 查询主产品订购关系
       orderList({
         cpid: this.pageData.mainProduct.cpid,
         spid: this.pageData.mainProduct.spid,
         userid: userid,
-      }).then((res) => {
+      }).then(async (res) => {
+        // 主产品查询有订购关系
         if (res.data.length > 0) {
-          this.$emit('change', false)
-          let orderTime = res.data[0].ORDERTIME.substring(0, 8)
-          let date = new Date()
-          let year = parseInt(date.getFullYear())
-          let month = parseInt(date.getMonth() + 1)
-          let day = parseInt(date.getDate())
-          let orderYear = parseInt(orderTime.substring(0, 4))
-          let orderMonth = parseInt(orderTime.substring(4, 6))
-          let orderDay = parseInt(orderTime.substring(6, 8))
-          if (orderYear == year) {
-            if ((month - orderMonth) < 5) {
-              this.opoutShow = true
+          //主产品为订购状态 根据合约期条件显示合约期提示
+          if (res.data[0].STATUS === "0") {
+            this.getOpout(res)
+          } else {
+            // 主产品为退订
+            //有关联产品 根据合约期条件显示合约期提示
+            if (this.pageData.mainProduct.cacheSeatOne[0].relationIds != '') {
+              let ids = this.pageData.mainProduct.cacheSeatOne[0].relationIds.split(',')
+              for (let j = 0; j < ids.length; j++) {
+                let info = await detMainProduct({ productId: ids[j] })
+                let obj = {
+                  userid: userid,
+                  spid: info.data.spid,
+                  cpid: info.data.cpid
+                }
+                await orderList(obj).then(res => {
+                  if (res.data.length > 0) {
+                    if (res.data[0].STATUS === '0') {
+                      this.getOpout(res)
+                      return false
+                    }
+                  }
+                })
+              }
             } else {
-              this.unbuyClick()
+              // 无关联产品直接退订
+              this.$emit('change', false)
+              this.unbuyClick();
             }
-          } else if ((year - orderYear) == 1) {
-            let number = (12 - orderMonth) + month
-            if (number < 5) {
-              this.opoutShow = true
-            } else {
-              this.unbuyClick()
+          }
+        } else {
+          // 主产品没有订购关系
+          // 有关联产品   根据合约期条件显示合约期提示
+          if (this.pageData.mainProduct.cacheSeatOne[0].relationIds != '') {
+            let ids = this.pageData.mainProduct.cacheSeatOne[0].relationIds.split(',')
+            for (let j = 0; j < ids.length; j++) {
+              let info = await detMainProduct({ productId: ids[j] })
+              let obj = {
+                userid: userid,
+                spid: info.data.spid,
+                cpid: info.data.cpid
+              }
+              await orderList(obj).then(res => {
+                if (res.data.length > 0) {
+                  if (res.data[0].STATUS === '0') {
+                    this.getOpout(res)
+                  }
+                  return false
+                }
+              })
             }
           } else {
-            this.unbuyClick()
+            // 无关联产品直接退订
+            this.$emit('change', false)
+            this.unbuyClick();
           }
-        } else {
-          this.$emit('change', false)
-          this.unbuyClick();
         }
       });
     },
+    getOpout (res) {
+      this.$emit('change', false)
+      let orderTime = res.data[0].ORDERTIME.substring(0, 8)
+      let date = new Date()
+      let year = parseInt(date.getFullYear())
+      let month = parseInt(date.getMonth() + 1)
+      let day = parseInt(date.getDate())
+      let orderYear = parseInt(orderTime.substring(0, 4))
+      let orderMonth = parseInt(orderTime.substring(4, 6))
+      let orderDay = parseInt(orderTime.substring(6, 8))
+      if (orderYear == year) {
+        if ((month - orderMonth) < 5) {
+          this.opoutShow = true
+        } else {
+          this.unbuyClick()
+        }
+      } else if ((year - orderYear) == 1) {
+        let number = (12 - orderMonth) + month
+        if (number < 5) {
+          this.opoutShow = true
+        } else {
+          this.unbuyClick()
+        }
+      } else {
+        this.unbuyClick()
+      }
+    }, 
     unbuy () {
       // this.getOrderList(this.$store.state.user.userid)
       let { phone, vcode } = this.loginForm;
@@ -347,11 +405,11 @@ export default {
         userid: this.$store.state.user.userid,
       };
       await this.postReson(this.$store.state.user.userid, this.$store.state.user.phone);
-        this.$toast.loading({
-            type: "loading",
-            message: "退订中",
-            duration: 0
-        })
+      this.$toast.loading({
+        type: "loading",
+        message: "退订中",
+        duration: 0
+      })
       postBuy(updata).then((res) => {
         if (res.code === 10000) {
           addR.unBuySuccess();

BIN
purchase_H5/src/templates/suiXinxuan/images/QQYypng


BIN
purchase_H5/src/templates/suiXinxuan/images/QQ音乐@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/TX@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/aqy@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/bilibili_98@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/bsk.png


BIN
purchase_H5/src/templates/suiXinxuan/images/dyi.png


BIN
purchase_H5/src/templates/suiXinxuan/images/eleme.png


BIN
purchase_H5/src/templates/suiXinxuan/images/hemaxiansheng.png


BIN
purchase_H5/src/templates/suiXinxuan/images/jingdong.png


BIN
purchase_H5/src/templates/suiXinxuan/images/keep月会员@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/kfc.png


BIN
purchase_H5/src/templates/suiXinxuan/images/maoyandianying.png


BIN
purchase_H5/src/templates/suiXinxuan/images/meituan.png


BIN
purchase_H5/src/templates/suiXinxuan/images/mg@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/ppTY.png


BIN
purchase_H5/src/templates/suiXinxuan/images/pptv@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/pp体育@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/souhushipin.png


BIN
purchase_H5/src/templates/suiXinxuan/images/wangyiyunyinyue.png


BIN
purchase_H5/src/templates/suiXinxuan/images/xgxw.png


BIN
purchase_H5/src/templates/suiXinxuan/images/yk@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/zhihudushu.png


BIN
purchase_H5/src/templates/suiXinxuan/images/喜马拉雅_98@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/学国学网.png


BIN
purchase_H5/src/templates/suiXinxuan/images/必胜客_98@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/抖音@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/搜狐视频@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/滴滴@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/猫眼电影_98@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/知乎读书会员@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/网易云音乐@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/美团优惠券_98@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/肯德基_98@2x.png


BIN
purchase_H5/src/templates/suiXinxuan/images/饿了么_98@2x.png


+ 1 - 0
purchase_H5/src/templates/templateApplet/index.vue

@@ -384,6 +384,7 @@ export default {
                 s: productJson.tabMaincol,
               },
               btnUrl: "",
+              relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
             }],
             cpid: info.data.cpid,
             discountInfo: null,

+ 1 - 0
purchase_H5/src/templates/templateColor/index.vue

@@ -339,6 +339,7 @@ export default {
                 s: productJson.tabMaincol,
               },
               btnUrl: "",
+              relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
             }],
             cpid: info.data.cpid,
             discountInfo: null,

+ 1 - 0
purchase_H5/src/templates/templateColorNew/index.vue

@@ -268,6 +268,7 @@ export default {
                 s: productJson.tabMaincol,
               },
               btnUrl: "",
+              relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
             },
           ],
           cpid: info.data.cpid,

+ 1 - 0
purchase_H5/src/templates/templateCom/index.vue

@@ -401,6 +401,7 @@ export default {
                   s: productJson.tabMaincol,
                 },
                 btnUrl: "",
+                relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
               },
             ],
             cpid: info.data.cpid,

+ 1 - 0
purchase_H5/src/templates/templateKechuang/index.vue

@@ -276,6 +276,7 @@ export default {
               s: productJson.tabMaincol,
             },
             btnUrl: "",
+            relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
           }],
           cpid: info.data.cpid,
           discountInfo: null,

BIN
purchase_H5/src/templates/templateSuixinxuan/images/QQYypng


BIN
purchase_H5/src/templates/templateSuixinxuan/images/QQ音乐@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/TX@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/aqy@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/bilibili_98@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/bsk.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/dyi.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/eleme.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/hemaxiansheng.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/jingdong.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/keep月会员@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/kfc.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/maoyandianying.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/meituan.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/mg@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/ppTY.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/pptv@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/pp体育@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/souhushipin.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/wangyiyunyinyue.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/xgxw.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/yk@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/zhihudushu.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/喜马拉雅_98@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/学国学网.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/必胜客_98@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/抖音@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/搜狐视频@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/滴滴@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/猫眼电影_98@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/知乎读书会员@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/网易云音乐@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/美团优惠券_98@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/肯德基_98@2x.png


BIN
purchase_H5/src/templates/templateSuixinxuan/images/饿了么_98@2x.png


+ 5 - 4
purchase_H5/src/templates/templateSuixinxuan/index.vue

@@ -43,7 +43,7 @@
       <!--图窗2-->
       <div class="box boxTwo">
         <div class="banTitle">
-            热门会员多选{{ pageData.mainProduct.spid === "99144187" ? "2" : "1" }}
+          热门会员多选{{ pageData.mainProduct.spid === "99144187" ? "2" : "1" }}
         </div>
         <div class="secImg">
           <div v-for="(item, index) in images" :key="index">
@@ -214,6 +214,7 @@ export default {
                 s: productJson.tabMaincol,
               },
               btnUrl: "",
+              relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
             }],
             cpid: info.data.cpid,
             discountInfo: null,
@@ -439,7 +440,7 @@ export default {
         font-weight: 600;
         color: #efd3b8;
         line-height: 88px;
-        background: url('../assets/LLtitle.png');
+        background: url("../assets/LLtitle.png");
         background-size: cover;
         position: absolute;
         top: -44px;
@@ -501,7 +502,7 @@ export default {
       background: #ffffff;
       border-radius: 0.08rem;
       margin: 0 auto;
-      background-image: url('../../assets/img/top@2x.png');
+      background-image: url("../../assets/img/top@2x.png");
       background-size: 581px 96px;
       background-repeat: no-repeat;
       position: relative;
@@ -510,7 +511,7 @@ export default {
       .logo {
         width: 92.4px;
         height: 50.4px;
-        background-image: url('../../assets/img/unicmlogo.png');
+        background-image: url("../../assets/img/unicmlogo.png");
         background-repeat: no-repeat;
         background-size: 100% 100%;
         position: absolute;

+ 2 - 1
purchase_H5/src/templates/templateThree/index.vue

@@ -367,6 +367,7 @@ export default {
                 s: productJson.tabMaincol,
               },
               btnUrl: "",
+              relationIds: info.data.cacheSeatOne[0].relationIds ? info.data.cacheSeatOne[0].relationIds : ""
             },
           ],
           cpid: info.data.cpid,
@@ -502,5 +503,5 @@ export default {
 </script>
 
 <style lang="scss">
-@import './index.scss';
+@import "./index.scss";
 </style>

+ 3 - 0
purchase_H5/src/templates/templateTogether-Col/index.vue

@@ -209,6 +209,7 @@ export default {
                 s: viceProduct.tabMaincol,
               },
               btnUrl: "",
+              relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
             }],
             cpid: info.data.cpid,
             discountInfo: null,
@@ -261,6 +262,7 @@ export default {
                 s: mainJson.tabMaincol,
               },
               btnUrl: "",
+              relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
             }],
             cpid: info.data.cpid,
             discountInfo: null,
@@ -501,6 +503,7 @@ export default {
                 s: productJson.tabMaincol,
               },
               btnUrl: "",
+              relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
             }],
             cpid: info.data.cpid,
             discountInfo: null,

+ 3 - 0
purchase_H5/src/templates/templateTogether/index.vue

@@ -385,6 +385,7 @@ export default {
                   s: viceProduct.tabMaincol,
                 },
                 btnUrl: "",
+                relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
               },
             ],
             cpid: info.data.cpid,
@@ -449,6 +450,7 @@ export default {
                   s: mainJson.tabMaincol,
                 },
                 btnUrl: "",
+                relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
               },
             ],
             cpid: info.data.cpid,
@@ -677,6 +679,7 @@ export default {
                   s: productJson.tabMaincol,
                 },
                 btnUrl: "",
+                relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
               },
             ],
             cpid: info.data.cpid,

+ 1 - 0
purchase_H5/src/templates/templateXinJiang/index.vue

@@ -265,6 +265,7 @@ export default {
               s: productJson.tabMaincol,
             },
             btnUrl: "",
+            relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
           }],
           cpid: info.data.cpid,
           discountInfo: null,

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

@@ -207,6 +207,7 @@ export default {
               s: mainJson.tabMaincol,
             },
             btnUrl: "",
+            relationIds: info.data.cacheSeatOne[0].relationIds?info.data.cacheSeatOne[0].relationIds:""
           }],
           cpid: info.data.cpid,
           discountInfo: null,

BIN
purchase_H5/src/views/page/img/tishi.png


BIN
purchase_H5/src/views/page/img/title.png


+ 35 - 21
purchase_H5/src/views/page/jihuo-suixinxuan.vue

@@ -4,25 +4,28 @@
       <img src="./img/title.png" alt="">
     </div>
 
-      <div class="box contentBox">
-          <div class="roundBox">
-              <div class="mini"></div>
-              <div class="small"></div>
-              <div class="model"></div>
-              <div class="text">温馨提示</div>
-              <div class="model"></div>
-              <div class="small"></div>
-              <div class="mini"></div>
-          </div>
-          <div class="main">
-              <p>如您在收看视频时,播放页面未显示免流标识(免流标识为联通logo),请点击下面的对应图标,进入激活流程引导页面,按照流程指引进行操作激活。</p>
-          </div>
+    <div class="box contentBox">
+      <div class="tishi">
+        <img src="./img/tishi.png" alt="">
       </div>
+      <!-- <div class="roundBox">
+        <div class="mini"></div>
+        <div class="small"></div>
+        <div class="model"></div>
+        <div class="text">温馨提示</div>
+        <div class="model"></div>
+        <div class="small"></div>
+        <div class="mini"></div>
+      </div> -->
+      <div class="main">
+        <p>如您在收看视频时,播放页面未显示免流标识(免流标识为联通logo),请点击下面的对应图标,进入激活流程引导页面,按照流程指引进行操作激活。</p>
+      </div>
+    </div>
 
     <div class="box list">
-<!--      <div class="span">-->
-<!--        点击相应APP查看其流量激活流程-->
-<!--      </div>-->
+      <!--      <div class="span">-->
+      <!--        点击相应APP查看其流量激活流程-->
+      <!--      </div>-->
       <div class="flex">
         <div class="iconBox" @click="openUrl('tencent')">
           <img class="icon" src="./img/tencent.png" alt="">
@@ -72,7 +75,8 @@ export default {
   width: 100%;
   height: 100vh;
   overflow-y: scroll;
-  background: linear-gradient(0deg, #03115c, #042b86);
+  background-color: #fc4643;
+  // background: linear-gradient(0deg, #03115c, #042b86);
   .title {
     width: 380px;
     height: 75px;
@@ -86,7 +90,8 @@ export default {
   }
   .box {
     width: 638px;
-    background: #2048a5;
+    min-height: 440px;
+    background: #ff7775;
     border-radius: 20px;
     margin: 0 auto;
   }
@@ -168,19 +173,28 @@ export default {
         border-radius: 39px;
         margin: 0 15px;
         padding: 0 30px;
-        color: #2048a5;
+        color: #fc4643;
+      }
+    }
+    .tishi {
+      width: 394px;
+      height: 68px;
+      margin: 0 auto;
+      img {
+        width: 100%;
+        height: auto;
       }
     }
 
     .main {
       /*height: 655px;*/
       /*overflow-y: scroll;*/
-      font-size: 24px;
+      font-size: 22px;
       font-family: HYQiHei;
       font-weight: normal;
       margin-top: 36px;
       p {
-          font-size: 30px;
+        font-size: 30px;
         line-height: 54px;
       }
     }

+ 108 - 0
purchase_ao/src/components/password/index.vue

@@ -0,0 +1,108 @@
+<template>
+  <div>
+    <el-dialog title="修改密码" :visible.sync="value" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false" width="30%">
+      <el-form label-width="100px" :model="form" style="width:70%" :rules="rules" ref="ruleForm">
+        <el-form-item label="旧密码" prop="oldPassword">
+          <el-input placeholder="请输入旧密码" v-model="form.oldPassword" show-password></el-input>
+        </el-form-item>
+        <el-form-item label="新密码" prop="newPassword">
+          <el-input placeholder="请输入新密码" v-model="form.newPassword" show-password></el-input>
+        </el-form-item>
+        <el-form-item label="确认新密码" prop="newPassword2">
+          <el-input placeholder="请输入新密码" v-model="form.newPassword2" show-password></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="$emit('change',false)">取 消</el-button>
+        <el-button type="primary" @click="rePassword('ruleForm')">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { post, get, puk } from '@/api/common'
+export default {
+  model: {
+    prop: "value",
+    event: "change"
+  },
+  props: {
+    value: Boolean
+  },
+  data () {
+    const repasswordValidator = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('请再次输入密码'));
+      } else if (value !== this.form.newPassword) {
+        callback(new Error('两次输入密码不一致!'));
+      } else {
+        callback();
+      }
+    };
+    return {
+      rules: {
+        oldPassword: [
+          { required: true, message: '请输入旧密码', trigger: 'blur' }
+        ],
+        newPassword: [
+          { required: true, message: '请输入新密码', trigger: 'blur' }
+        ],
+        newPassword2: [
+          { required: true, message: '请输入确认密码', trigger: 'blur' },
+          { validator: repasswordValidator, trigger: 'blur' },
+        ]
+      },
+      form: {
+        oldPassword: "",
+        newPassword: "",
+        newPassword2: "",
+      },
+      encrypt: null,
+
+    }
+  },
+  created () {
+    puk().then((res) => {
+      const encrypt = new JSEncrypt();
+      encrypt.setPublicKey(res.data);
+      this.encrypt = encrypt;
+    });
+  },
+  methods: {
+    rePassword (formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          // alert('submit!');
+          this.editPassWord()
+        } else {
+          // console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    editPassWord () {
+      let oldPassword = this.encrypt.encrypt(this.form.oldPassword)
+      let newPassword = this.encrypt.encrypt(this.form.newPassword)
+      let params = {
+        newPassword: newPassword,
+        oldPassword: oldPassword,
+      }
+      post('/sysUser/changepw', params).then(res => {
+        if (res.code == 10000) {
+          this.$message.success('修改成功!')
+          setTimeout(() => {
+            this.$store.dispatch("user/logout");
+            this.$router.push(`/login?redirect=${this.$route.fullPath}`);
+          }, 1500)
+        }
+
+      })
+
+    }
+  }
+}
+</script>
+
+<style>
+</style>

+ 23 - 18
purchase_ao/src/layout/components/Navbar.vue

@@ -1,33 +1,31 @@
 <template>
   <div class="navbar">
-    <hamburger
-      :is-active="sidebar.opened"
-      class="hamburger-container"
-      @toggleClick="toggleSideBar"
-    />
-
+    <hamburger :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
     <breadcrumb class="breadcrumb-container" />
-
     <div class="right-menu">
       <el-dropdown class="avatar-container" trigger="click">
         <div class="avatar-wrapper">
-<!--          <img-->
-<!--            src="https://facegame.platomix.net/images/aouser.png"-->
-<!--            class="user-avatar"-->
-<!--          />-->
-            <div>你好  {{$store.state.user.name}}</div>
-<!--          <i class="el-icon-caret-bottom" />-->
+          <!--          <img-->
+          <!--            src="https://facegame.platomix.net/images/aouser.png"-->
+          <!--            class="user-avatar"-->
+          <!--          />-->
+          <div>你好 {{$store.state.user.name}}</div>
+          <!--          <i class="el-icon-caret-bottom" />-->
         </div>
         <el-dropdown-menu slot="dropdown" class="user-dropdown">
           <router-link to="/">
             <el-dropdown-item>首页</el-dropdown-item>
           </router-link>
+          <el-dropdown-item divided @click.native="(passShow = true)">
+            <span style="display: block">修改密码</span>
+          </el-dropdown-item>
           <el-dropdown-item divided @click.native="logout">
             <span style="display: block">退出</span>
           </el-dropdown-item>
         </el-dropdown-menu>
       </el-dropdown>
     </div>
+    <passBox v-model="passShow" />
   </div>
 </template>
 
@@ -35,23 +33,30 @@
 import { mapGetters } from "vuex";
 import Breadcrumb from "@/components/Breadcrumb";
 import Hamburger from "@/components/Hamburger";
+import passBox from '@/components/password'
 
 export default {
   components: {
     Breadcrumb,
     Hamburger,
+    passBox
+  },
+  data () {
+    return {
+      passShow: false
+    }
   },
   computed: {
     ...mapGetters(["sidebar", "avatar"]),
   },
-    mounted() {
-        // console.log(this.$store.state.user.name)
-    },
+  mounted () {
+    // console.log(this.$store.state.user.name)
+  },
   methods: {
-    toggleSideBar() {
+    toggleSideBar () {
       this.$store.dispatch("app/toggleSideBar");
     },
-    async logout() {
+    async logout () {
       await this.$store.dispatch("user/logout");
       this.$router.push(`/login?redirect=${this.$route.fullPath}`);
     },

+ 35 - 75
purchase_ao/src/views/login/index.vue

@@ -1,13 +1,6 @@
 <template>
   <div class="login-container">
-    <el-form
-      ref="loginForm"
-      :model="loginForm"
-      :rules="loginRules"
-      class="login-form"
-      auto-complete="on"
-      label-position="left"
-    >
+    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left">
       <div class="title-container">
         <h3 class="title">请登录</h3>
       </div>
@@ -15,72 +8,32 @@
         <span class="svg-container">
           <svg-icon icon-class="user" />
         </span>
-        <el-input
-          ref="username"
-          v-model="loginForm.username"
-          placeholder="用户名"
-          name="username"
-          type="text"
-          tabindex="1"
-          auto-complete="on"
-          @blur="getCode"
-        />
+        <el-input ref="username" v-model="loginForm.username" placeholder="用户名" name="username" type="text" tabindex="1" auto-complete="on" @blur="getCode" />
       </el-form-item>
       <el-form-item prop="password">
         <span class="svg-container">
           <svg-icon icon-class="password" />
         </span>
-        <el-input
-          :key="passwordType"
-          ref="password"
-          v-model="loginForm.password"
-          :type="passwordType"
-          placeholder="密码"
-          name="password"
-          tabindex="2"
-          auto-complete="on"
-          @keyup.enter.native="handleLogin"
-        />
+        <el-input :key="passwordType" ref="password" v-model="loginForm.password" :type="passwordType" placeholder="密码" name="password" tabindex="2" auto-complete="on" @keyup.enter.native="handleLogin" />
         <span class="show-pwd" @click="showPwd">
-          <svg-icon
-            :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'"
-          />
+          <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
         </span>
       </el-form-item>
       <el-form-item prop="imgCode" class="login-code">
         <el-input v-model="loginForm.imgCode" placeholder="验证码" />
         <img v-if="imgurl" :src="imgurl" alt="" @click="getCode" />
       </el-form-item>
-      <el-button
-        type="primary"
-        style="width: 100%; margin-bottom: 30px"
-        @click.native.prevent="handleLogin"
-      >
+      <el-button type="primary" style="width: 100%; margin-bottom: 30px" @click.native.prevent="handleLogin">
         登录
       </el-button>
     </el-form>
-    <el-dialog
-      title="获取验证码"
-      width="450px"
-      :visible.sync="codeShow"
-      :close-on-press-escape="false"
-      :close-on-click-modal="false"
-    >
+    <el-dialog title="获取验证码" width="450px" :visible.sync="codeShow" :close-on-press-escape="false" :close-on-click-modal="false">
       <div class="getCode">
         <input type="text" v-model="vcode" placeholder="验证码" maxlength="6" />
-        <span
-          class="code"
-          :class="{ code: 1, number: codeState.state }"
-          @click="getCheck()"
-          >{{ codeState.state ? codeState.time + "s" : "重新获取" }}</span
-        >
+        <span class="code" :class="{ code: 1, number: codeState.state }" @click="getCheck()">{{ codeState.state ? codeState.time + "s" : "重新获取" }}</span>
       </div>
       <div class="loginBtn">
-        <el-button
-          type="primary"
-          style="width: 100%; margin-bottom: 30px"
-          @click="btnClick"
-        >
+        <el-button type="primary" style="width: 100%; margin-bottom: 30px" @click="btnClick">
           确定
         </el-button>
       </div>
@@ -90,9 +43,13 @@
 <script>
 import { puk } from "../../api/common";
 import urls from "../../api/urls";
+import {
+  post,
+  get
+} from '@/api/common'
 export default {
   name: "Login",
-  data() {
+  data () {
     return {
       loginForm: {
         username: "",
@@ -144,7 +101,7 @@ export default {
     //   immediate: true
     // }
   },
-  created() {
+  created () {
     puk().then((res) => {
       const encrypt = new JSEncrypt();
       encrypt.setPublicKey(res.data);
@@ -155,12 +112,11 @@ export default {
     }
   },
   methods: {
-    getCode() {
-      this.imgurl = `${process.env.VUE_APP_BASE_API}${urls.getCode}?userName=${
-        this.loginForm.username
-      }&refrech=${this.imgCodeRefrech}&times=${Date.now()}`;
+    getCode () {
+      this.imgurl = `${process.env.VUE_APP_BASE_API}${urls.getCode}?userName=${this.loginForm.username
+        }&refrech=${this.imgCodeRefrech}&times=${Date.now()}`;
     },
-    showPwd() {
+    showPwd () {
       if (this.passwordType === "password") {
         this.passwordType = "";
       } else {
@@ -170,7 +126,7 @@ export default {
         this.$refs.password.focus();
       });
     },
-    handleLogin() {
+    handleLogin () {
       this.$refs.loginForm.validate((valid) => {
         if (valid) {
           const username = this.encrypt.encrypt(this.loginForm.username);
@@ -191,7 +147,7 @@ export default {
               }
             }
           }).catch((error) => {
-              this.getCode()
+            this.getCode()
           });
           // this.$store
           //   .dispatch('user/login', { username, password, imgCode })
@@ -204,7 +160,7 @@ export default {
         }
       });
     },
-    getCheck() {
+    getCheck () {
       this.$post("/sysUser/login/smscode", {
         phone: this.phone,
       }).then((res) => {
@@ -221,15 +177,19 @@ export default {
         }, 1000);
       });
     },
-    btnClick() {
-      this.$store
-        .dispatch("user/login", {
-          phone: this.phone,
-          vcode: this.vcode,
-        })
-        .then(() => {
+    btnClick () {
+      this.$store.dispatch("user/login", {
+        phone: this.phone,
+        vcode: this.vcode,
+      }).then(() => {
+        get('/sysUser/info', {}).then(res => {
+          let nowTime = new Date().getTime()
+          let num = new Date(res.data.overdueTime).getTime() - nowTime
+          let day = num / (1000 * 60 * 60 * 24)
+          localStorage.setItem('dayNum', day)
           this.$router.push({ path: this.redirect || "/" });
-        });
+        })
+      });
       // this.$store
       //   .dispatch("/sysUser/login/valismscode", {
       //     phone: this.phone,
@@ -290,8 +250,8 @@ $cursor: #fff;
       img {
         flex: 0 0 100px;
         margin: 10px;
-          width: 60px;
-          height: 30px;
+        width: 60px;
+        height: 30px;
       }
     }
   }

+ 19 - 2
purchase_ao/src/views/productV2/addProduct.vue

@@ -7,6 +7,11 @@
           <el-option v-for="item in productList" :label="`${item.productName}/${item.spid}`" :key="item.id" :value="item.id"></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item label="关联产品">
+        <el-select style="width: 300px" v-model="relationIds" multiple filterable placeholder="选择产品" @change="relationChange">
+          <el-option v-for="item in productList" :label="`${item.productName}/${item.spid}`" :key="item.id" :value="item.id"></el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item label="spid">
         <el-input disabled style="width: 300px" v-model="form.spid" placeholder="spid"></el-input>
       </el-form-item>
@@ -232,7 +237,8 @@ export default {
         proC: { s: "", e: "" },
         tabC: { s: "", e: "" },
         memberUrl: "",
-        dongHua: "0"
+        dongHua: "0",
+        relationIds: ""
       },], //产品信息json
       form: {
         bannerPics: "",
@@ -310,7 +316,9 @@ export default {
         },
       },
       //产品列表
-      productList: []
+      productList: [],
+      //关联产品
+      relationIds: ""
     };
   },
   created () {
@@ -381,6 +389,10 @@ export default {
               }
             } else if (!val.dongHua) {
               val.dongHua = '0'
+            } else if (val.relationIds) {
+              this.relationIds = val.relationIds.split(',').map((v, i, a) => {
+                return Number(v)
+              })
             }
             list.push(val)
           });
@@ -400,6 +412,11 @@ export default {
     this.getProductList()
   },
   methods: {
+    relationChange (e) {
+      if (e) {
+        this.productJson[0].relationIds = e.join(',')
+      }
+    },
     // 选择产品
     productChange (e) {
       if (e) {

+ 22 - 4
purchase_ao/src/views/productV2/editProduct.vue

@@ -7,6 +7,11 @@
           <el-option v-for="item in productList" :label="`${item.productName}/${item.spid}`" :key="item.id" :value="item.id"></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item label="关联产品">
+        <el-select style="width: 300px" v-model="relationIds" multiple filterable placeholder="选择产品" @change="relationChange">
+          <el-option v-for="item in productList" :label="`${item.productName}/${item.spid}`" :key="item.id" :value="item.id"></el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item label="spid">
         <el-input disabled style="width: 300px" v-model="form.spid" placeholder="spid"></el-input>
       </el-form-item>
@@ -209,7 +214,7 @@ export default {
   },
   data () {
     return {
-      productId:"",
+      productId: "",
       lottie: {},
       id: "",
       imgapi: process.env.VUE_APP_BASE_IMG_API,
@@ -236,7 +241,8 @@ export default {
         proC: { s: "", e: "", },
         tabC: { s: "", e: "" },
         memberUrl: "",
-        dongHua: "0"
+        dongHua: "0",
+        relationIds: ""
       }], //产品信息json
       form: {
         bannerPics: [],
@@ -288,7 +294,9 @@ export default {
         },
       },
       //产品列表
-      productList: []
+      productList: [],
+      //关联产品
+      relationIds: ""
     };
   },
   created () {
@@ -356,6 +364,10 @@ export default {
             }
           } else if (!val.dongHua) {
             val.dongHua = '0'
+          } else if (val.relationIds) {
+            this.relationIds = val.relationIds.split(',').map((v, i, a) => {
+              return Number(v)
+            })
           }
           list.push(val)
         });
@@ -373,6 +385,12 @@ export default {
     this.getProductList()
   },
   methods: {
+    relationChange (e) {
+      console.log(e)
+      if (e) {
+        this.productJson[0].relationIds = e.join(',')
+      }
+    },
     // 选择产品
     productChange (e) {
       if (e) {
@@ -391,7 +409,7 @@ export default {
       }).then(res => {
         // console.log(res)
         this.productList = res.data.list
-        this.productId = this.productList.find(val=>{return this.form.productName == val.productName}).id
+        this.productId = this.productList.find(val => { return this.form.productName == val.productName }).id
       })
     },
     sureClick () {

+ 21 - 1
purchase_ao/src/views/schemeV2/index.vue

@@ -98,6 +98,15 @@
         </vxe-modal>
       </el-main>
     </el-container>
+    <el-dialog title="密码到期提示" :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" width="20%" top="35vh" :show-close="false">
+      <span v-if="dayNum<0">距您上次更新秘钥已超过90天,请更新您的登录秘钥</span>
+      <span v-else>您的登录秘钥即将到期,建议修改秘钥</span>
+      <span slot="footer" class="dialog-footer">
+        <el-button :disabled="(dayNum<0)" @click="dialogVisible = false">取消</el-button>
+        <el-button type="primary" @click="(passShow = true)">去修改</el-button>
+      </span>
+    </el-dialog>
+    <passBox v-model="passShow" />
   </div>
 </template>
 
@@ -106,9 +115,13 @@ import {
   post,
   get
 } from '@/api/common'
+import passBox from '../../components/password'
 
 export default {
   name: 'Index',
+  components: {
+    passBox
+  },
   data () {
     return {
       //  搜索相关内容
@@ -159,6 +172,9 @@ export default {
         pageSize: 10,
         totalResult: 0
       },
+      dayNum: localStorage.getItem('dayNum'),
+      passShow: false,
+      dialogVisible: false,
     }
   },
   mounted () {
@@ -175,10 +191,14 @@ export default {
     })
     this.init()
   },
+  created () {
+    if (this.dayNum < 15) {
+      this.dialogVisible = true
+    }
+  },
   methods: {
     init () {
       get('/strategyInfoNew/page', this.searchForm).then(res => {
-        console.log(res)
         if (res.data) {
           this.tableData = res.data.list
           this.searchForm.totalResult = res.data.total