Эх сурвалжийг харах

Merge branch 'dev4.6.2.1' of http://192.168.3.207:8080/qmx/jy into dev4.6.2.1

yangfeng 3 жил өмнө
parent
commit
b133539728
94 өөрчлөгдсөн 2882 нэмэгдсэн , 189 устгасан
  1. 5 5
      src/config.json
  2. 6 0
      src/jfw/front/front.go
  3. 6 0
      src/jfw/modules/app/src/app/front/front.go
  4. 1 1
      src/jfw/modules/app/src/web/staticres/jyapp/css/subscribe.css
  5. 55 1
      src/jfw/modules/app/src/web/staticres/jyapp/js/common.js
  6. 5 8
      src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/vip_index_new.js
  7. 2 2
      src/jfw/modules/app/src/web/staticres/jyapp/wxtsguide/main.js
  8. 5 5
      src/jfw/modules/app/src/web/templates/areaPack/page_buy.html
  9. 7 1
      src/jfw/modules/app/src/web/templates/areaPack/page_set_area.html
  10. 60 0
      src/jfw/modules/app/src/web/templates/frontRouter/messageCenter/sess/detail.html
  11. 69 0
      src/jfw/modules/app/src/web/templates/frontRouter/messageCenter/sess/index.html
  12. 1 1
      src/jfw/modules/app/src/web/templates/vipsubscribe/vip_index_new.html
  13. 3 0
      src/jfw/modules/app/src/web/templates/weixin/historypush.html
  14. 6 0
      src/jfw/modules/app/src/web/templates/weixin/search/mainSearch.html
  15. 4 4
      src/jfw/modules/app/src/web/templates/weixin/wxtsguide.html
  16. 24 24
      src/jfw/modules/bigmember/src/entity/portraitBuyerSearch.go
  17. 12 0
      src/jfw/modules/subscribepay/src/entity/areaPack.go
  18. 13 6
      src/jfw/modules/subscribepay/src/service/areaPack.go
  19. 7 7
      src/jfw/modules/subscribepay/src/service/dataExportPay.go
  20. 10 8
      src/jfw/modules/subscribepay/src/service/dataexportPack.go
  21. 7 7
      src/jfw/modules/subscribepay/src/service/integral.go
  22. 42 13
      src/jfw/modules/subscribepay/src/service/orderListDetails.go
  23. 7 7
      src/jfw/modules/subscribepay/src/service/vipSubscribeChange.go
  24. 13 12
      src/jfw/modules/subscribepay/src/service/vipSubscribePay.go
  25. 50 25
      src/web/staticres/common-module/area-pack/js/buy.js
  26. 244 0
      src/web/staticres/common-module/messageCenter/css/index.css
  27. 530 0
      src/web/staticres/common-module/messageCenter/css/public.css
  28. BIN
      src/web/staticres/common-module/messageCenter/image/dingyue@2x.png
  29. BIN
      src/web/staticres/common-module/messageCenter/image/fenxi@2x.png
  30. BIN
      src/web/staticres/common-module/messageCenter/image/fuwu@2x.png
  31. BIN
      src/web/staticres/common-module/messageCenter/image/huodong@2x.png
  32. BIN
      src/web/staticres/common-module/messageCenter/image/mesg.png
  33. BIN
      src/web/staticres/common-module/messageCenter/image/mesg_active.png
  34. BIN
      src/web/staticres/common-module/messageCenter/image/no-mesg.png
  35. BIN
      src/web/staticres/common-module/messageCenter/image/qiye@2x.png
  36. BIN
      src/web/staticres/common-module/messageCenter/image/quanbu@2x.png
  37. BIN
      src/web/staticres/common-module/messageCenter/image/xiangmu@2x.png
  38. BIN
      src/web/staticres/common-module/messageCenter/image/xitong@2x.png
  39. 134 0
      src/web/staticres/common-module/messageCenter/js/detail.js
  40. 138 0
      src/web/staticres/common-module/messageCenter/js/func.js
  41. 137 0
      src/web/staticres/common-module/messageCenter/js/index.js
  42. 1 1
      src/web/staticres/common-module/order-list/js/order-detail.js
  43. 6 3
      src/web/staticres/common-module/order-list/js/order-list-config.js
  44. 37 1
      src/web/staticres/common-module/order-list/js/order-list.js
  45. 18 7
      src/web/staticres/common-module/vipsubscribe/js/vip-subscribe-set-template.js
  46. 235 0
      src/web/staticres/frontRouter/pc/mesgCenter/css/index-pc.css
  47. BIN
      src/web/staticres/frontRouter/pc/mesgCenter/image/no-mesg.png
  48. 109 0
      src/web/staticres/frontRouter/pc/mesgCenter/js/index-pc.js
  49. BIN
      src/web/staticres/images/pc/dingyue@2x.png
  50. BIN
      src/web/staticres/images/pc/fenxi@2x.png
  51. BIN
      src/web/staticres/images/pc/fuwu@2x.png
  52. BIN
      src/web/staticres/images/pc/guan.png
  53. BIN
      src/web/staticres/images/pc/guan_active.png
  54. BIN
      src/web/staticres/images/pc/huodong@2x.png
  55. BIN
      src/web/staticres/images/pc/lines.png
  56. BIN
      src/web/staticres/images/pc/mesg.png
  57. BIN
      src/web/staticres/images/pc/mesg_active.png
  58. BIN
      src/web/staticres/images/pc/mesg_fff.png
  59. BIN
      src/web/staticres/images/pc/no-mesg.png
  60. BIN
      src/web/staticres/images/pc/qiye@2x.png
  61. BIN
      src/web/staticres/images/pc/quanbu@2x.png
  62. BIN
      src/web/staticres/images/pc/xiangmu@2x.png
  63. BIN
      src/web/staticres/images/pc/xitong@2x.png
  64. BIN
      src/web/staticres/images/tabbar/book.png
  65. BIN
      src/web/staticres/images/tabbar/book_active.png
  66. BIN
      src/web/staticres/images/tabbar/box.png
  67. BIN
      src/web/staticres/images/tabbar/box_active.png
  68. BIN
      src/web/staticres/images/tabbar/home.png
  69. BIN
      src/web/staticres/images/tabbar/home_active.png
  70. BIN
      src/web/staticres/images/tabbar/mesg.png
  71. BIN
      src/web/staticres/images/tabbar/mesg_active.png
  72. BIN
      src/web/staticres/images/tabbar/mine.png
  73. BIN
      src/web/staticres/images/tabbar/mine_active.png
  74. 53 0
      src/web/staticres/js/dateFunc.js
  75. 5 1
      src/web/staticres/js/login.js
  76. 177 0
      src/web/staticres/js/message.js
  77. 2 2
      src/web/staticres/js/wxSupersearch.js
  78. 1 1
      src/web/staticres/me/css/mine.css
  79. 2 7
      src/web/staticres/vipsubscribe/js/vip_index_new.js
  80. 2 2
      src/web/staticres/wxtsguide/main.js
  81. 4 1
      src/web/templates/areaPack/pc/page_order.html
  82. 5 5
      src/web/templates/areaPack/wx/page_buy.html
  83. 7 1
      src/web/templates/areaPack/wx/page_set_area.html
  84. 237 14
      src/web/templates/common/pchead.html
  85. 102 0
      src/web/templates/frontRouter/pc/messageCenter/sess/index.html
  86. 66 0
      src/web/templates/frontRouter/wx/messageCenter/sess/detail.html
  87. 78 0
      src/web/templates/frontRouter/wx/messageCenter/sess/index.html
  88. 1 1
      src/web/templates/pc/myOrder.html
  89. 4 0
      src/web/templates/weixin/historypush.html
  90. 2 0
      src/web/templates/weixin/my.html
  91. 9 0
      src/web/templates/weixin/search/mainSearch.html
  92. 111 0
      src/web/templates/weixin/tabbar.html
  93. 1 1
      src/web/templates/weixin/vipsubscribe/vip_index_new.html
  94. 4 4
      src/web/templates/weixin/wxtsguide.html

+ 5 - 5
src/config.json

@@ -10,8 +10,8 @@
     "agreement": "http",
     "webdomain": "https://web-zxl.jydev.jianyu360.com",
     "redirect": {
-        "searchinfo": "/jylab/mainSearch",
-        "rssset": "/swordfish/newhistorypush",
+        "searchinfo": "/jylab/mainSearch?msg=0",
+        "rssset": "/swordfish/newhistorypush?msg=1",
         "viewdemo": "/front/viewdemo",
         "wxpushlist": "/wxpush/bidinfo/%s",
         "share": "/swordfish/guide/share",
@@ -38,10 +38,10 @@
         "futureIndex": "/active/future/index",
         "keysetIndex": "/wxkeyset/keyset/index?tiptext=%s",
         "followEntDetail": "/jylab/followent/detail/%s",
-        "mymenu": "/front/wxMyOrder/myMenu",
-		"historypush": "/swordfish/newhistorypush?times=%s",
+        "mymenu": "/front/wxMyOrder/myMenu?msg=4",
+		"historypush": "/swordfish/newhistorypush?times=%s&msg=1",
 		"msgremind": "/front/vipsubscribe/msgremind?%s",
-		"treasurebox":"/jyTreasureBox/treasureBox",
+		"treasurebox":"/jyTreasureBox/treasureBox?msg=3",
 		"vipreport":"/subscribepay/report/wxtplmsg?start=%s&end=%s&pushcount=%s",
 		"viphomepage":"/front/vipsubscribe/introducePage",
 		"viphomepage_new":"/front/vipsubscribe/vipsubscribe_new",

+ 6 - 0
src/jfw/front/front.go

@@ -1033,6 +1033,7 @@ func (f *Front) TSGuide() error {
 		return f.Render("/weixin/wxtsguide.html")
 	} else {
 		reqType := f.GetString("reqType")
+		index, _ := f.GetInteger("index")
 		result := make(bson.M)
 		if reqType == "save" {
 			var keyMaps []map[string]interface{}
@@ -1073,6 +1074,11 @@ func (f *Front) TSGuide() error {
 				"o_jy.l_modifydate": time.Now().Unix(),
 				"i_ts_guide":        1,
 			}
+			if index > 2 {
+				saveData = bson.M{
+					"i_ts_guide": 1,
+				}
+			}
 			result["flag"] = mongodb.UpdateById("user", userid, bson.M{"$set": saveData})
 		} else if reqType == "preview" {
 			rlt := elastic.GetByNgram(INDEX, TYPE, strings.Split(f.GetString("key"), " "), "", FINDF, `{"publishtime":-1}`, `"_id","title","publishtime","toptype","subtype","type","area","href","areaval"`, 0, 10)

+ 6 - 0
src/jfw/modules/app/src/app/front/front.go

@@ -291,6 +291,7 @@ func (f *Front) TSGuide() error {
 		return f.Render("/weixin/wxtsguide.html")
 	} else {
 		reqType := f.GetString("reqType")
+		index, _ := f.GetInteger("index")
 		result := make(bson.M)
 		if reqType == "save" {
 			var keyMaps []map[string]interface{}
@@ -331,6 +332,11 @@ func (f *Front) TSGuide() error {
 				"o_jy.l_modifydate": time.Now().Unix(),
 				"i_ts_guide":        1,
 			}
+			if index > 2 {
+				saveData = bson.M{
+					"i_ts_guide": 1,
+				}
+			}
 			result["flag"] = mongodb.UpdateById("user", userid, bson.M{"$set": saveData})
 		} else if reqType == "preview" {
 			rlt := elastic.GetByNgram(INDEX, TYPE, strings.Split(f.GetString("key"), " "), "", FINDF, `{"publishtime":-1}`, `"_id","title","publishtime","toptype","subtype","type","area","href","areaval"`, 0, 10)

+ 1 - 1
src/jfw/modules/app/src/web/staticres/jyapp/css/subscribe.css

@@ -2032,7 +2032,7 @@ html, body {
 .fixedPover{
   position: fixed;
   bottom: 0.2rem;
-  left: 1.24rem;
+  left: 0.64rem;
   padding: .24rem;
   width: 164px;
   height: 109px;

+ 55 - 1
src/jfw/modules/app/src/web/staticres/jyapp/js/common.js

@@ -341,6 +341,12 @@ $(function () {
         window.webkit.messageHandlers.skipCameraWithParam.postMessage(JyObjMessage)
         JyObj.clearMessage()
       },
+      // 底部导航消息总数方法
+      sendMsgCount: function (num) {
+        JyObjMessage.num = num
+        window.webkit.messageHandlers.sendMsgCount.postMessage(JyObjMessage)
+        JyObj.clearMessage()
+      },
       // 新打开相册客户端方法
       skipAlbumWithParam: function (type) {
         JyObjMessage.type = type
@@ -1032,6 +1038,48 @@ function autoLogin (url, callBack) {
   });
 }
 
+// 底部导航消息总数
+function checkMsgCount(acync, str, callback) {
+  $.ajax({
+    type: 'GET',
+    url: '/jymessageCenter/isMsgOpen?t=' + Date.now(),
+    async: acync || false,
+    success: function (r) {
+      var num = r.data.count
+      try {
+        JyObj.sendMsgCount(num)
+      } catch (e) {
+        console.log(e)
+      }
+      if (str == 1) {
+        var isMsg = localStorage.getItem('isMsgNum')
+        if (num !== Number(isMsg)) {
+          try {
+            JyObj.refreshAppointTab('message', 1)
+          } catch (e) {
+            console.log(e)
+          }
+          localStorage.setItem('isMsgNum', num)
+        }
+      } else {
+        localStorage.setItem('isMsgNum', num)
+      }
+      
+      callback && callback()
+    }
+  })
+}
+
+function keepQuest() {
+  var appType = androidOrIOS(), timer = null
+  if (appType == 'ios' || appType == 'android') {
+    clearInterval(timer)
+    timer = setInterval(() => {
+      checkMsgCount(true, 1)
+    }, 300000)
+  }
+}
+
 function loginSuccess (result) {
   JyObj.saveUserToken(result.sign);
   // 数据包默认选中企业需请求默认企业接口
@@ -1045,6 +1093,9 @@ function loginSuccess (result) {
 
       window.onlyUserID = getCookieValue('SESSIONID')
     }
+
+    // 消息总数方法
+    checkMsgCount(false, 0);
   } catch (e) {
     console.log('获取ID失败')
   }
@@ -1055,6 +1106,7 @@ function loginSuccess (result) {
       url: '/entbase/ent/mySelectent?t=' + new Date().getTime()
     })
   }
+
   //分销跳转
   if (getUrlParam("DisUrl") != null) {
     afterLoginSuccess("", true);
@@ -1089,6 +1141,7 @@ function loginSuccess (result) {
   afterLoginSuccess("S", false);
   //window.location.href = "/jyapp/jylab/mainSearch";
   //location.replace("/jyapp/jylab/mainSearch");
+
 }
 
 //2020-05-30 android replace失效
@@ -1219,7 +1272,7 @@ function redSpotOnMenu () {
 function redSpotBackFuc (r, flag) {
   var noticeCount = r.notice;
   //JyObj.getUnReadMessageCount("");
-
+  checkMsgCount(false, 0)
   // message红点
   if (noticeCount > 0) {
     $(".trigger-div-notice .dot-red").show()
@@ -1552,6 +1605,7 @@ function afterReceivePushMessage (type, url) {
 	}else if (type == "entnichepush" || type == "member" || type == "projectforecast" || type == "entchange" || type == "memberreport") {
       	JyObj.hideRedSpotOnMenu("my");
     }
+    checkMsgCount(true, 1)
     receivePushMessageHandle(type, url);
   } catch (e) { }
 }

+ 5 - 8
src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/vip_index_new.js

@@ -47,11 +47,7 @@ var subNode = new Vue({
         },
         // 省份订阅包升级 
         updateBtn: function () {
-            let thisList = []
-            for (const key in this.freeUserArea) {
-                thisList.push(key)
-            }
-            location.href = '/jyapp/areaPack/page/buy?type=upgrade&area=' +  encodeURIComponent(JSON.stringify(thisList))
+            location.href = '/jyapp/areaPack/page/buy?type=upgrade&area=' +  encodeURIComponent(JSON.stringify(this.freeUserArea))
         },
         // 得到用户是否购买省份包
         getUserSubscribe: function () {
@@ -63,7 +59,7 @@ var subNode = new Vue({
                     _this.freeUserArea = res.data.area
                     _this.userAreaNum = res.data.areanum
                     _this.userType = res.data.provincenum === 0 ? false : true
-                    _this.userAreaAllNum = res.data.provincenum
+                    _this.userAreaAllNum = res.data.provincenum === -1 ? '全国' : res.data.provincenum
                     // _this.$emit('UserSubscribe',res)
                     _this.subscribeTime = new Date(res.data.ppstart * 1000).pattern('yyyy年MM月dd日') + "-" + new Date(res.data.ppend * 1000).pattern('yyyy年MM月dd日')
                     _this.initdata = res.data
@@ -416,13 +412,14 @@ $(function () {
   // 设置已购买的区域和行业
   function setBuyAreaAndInd(buySet) {
       // 设置已购买区域
-      var buySetCitySum = arrSum(buySet.newcitys)
+      if (buySet) {
+        var buySetCitySum = arrSum(buySet.newcitys)
+      }
       var text = {
           p: buySet.areacount === 0 ? '' : buySet.areacount + '个省',
           c: buySetCitySum === 0 ? '' : buySetCitySum + '个市',
           s: buySet.newcitys.length === 1 ? '' : '(分布在' + buySet.newcitys.length + '个省内)'
       }
-
       if (buySet.areacount === -1) {
           $('.vip-body .area .buy-set-area').text('全国')
       } else {

+ 2 - 2
src/jfw/modules/app/src/web/staticres/jyapp/wxtsguide/main.js

@@ -56,8 +56,8 @@ var Guide = {
 		});
 	},
 	//跳过向导
-	skip: function(){
-		$.post("/jyapp/tenderSubscribe/guide",{reqType: "over"},function(r){
+	skip: function(index){
+		$.post("/jyapp/tenderSubscribe/guide",{reqType: "over",index:index},function(r){
 		    var guideKey = localStorage.tsGuide_keywords
 		      if(localStorage){
 		        localStorage.tsGuide_status = "1";

+ 5 - 5
src/jfw/modules/app/src/web/templates/areaPack/page_buy.html

@@ -29,13 +29,13 @@
                 <van-icon name="arrow"></van-icon>
               </div>
             </div>
-            <div class="area-count-footer" v-if="selectAreaCount >= 0 && (buyType === 'buy' || buyType === 'renew')">
-              <span class="van-tag van-tag--round default" v-if="selectAreaCount > priceInfo.provinceFreeCount">本次${ buyTypeText }省份数量:${ buyAreaText  }</span>
+            <div class="area-count-footer" v-if="selectAreaCount >= 0 && (buyType === 'buy' || buyType === 'renew') && alreadyBuyInfo.loaded">
+              <span class="van-tag van-tag--round default" v-if="(selectAreaCount > priceInfo.provinceFreeCount) || (buyType === 'renew')">本次${ buyTypeText }省份数量:${ buyAreaText }</span>
               <span class="van-tag van-tag--round red" v-else-if="selectAreaCount >= 0 && selectAreaCount <= priceInfo.provinceFreeCount && alreadyBuyInfo.loaded">${ priceInfo.provinceFreeCount } 个省份免费,请增加省份数量再进行购买</span>
             </div>
-            <div class="area-count-footer" v-if="buyType === 'upgrade'">
+            <div class="area-count-footer" v-if="buyType === 'upgrade' && selectAreaCount !== -1 && alreadyBuyInfo.loaded">
               <span class="van-tag van-tag--round default" v-if="upgradeAreaCount > 0">本次${ buyTypeText }省份数量:${ upgradeAreaText  }</span>
-              <span class="van-tag van-tag--round red" v-else-if="alreadyBuyInfo.loaded">无法升级,选择省份数量需大于原套餐数</span>
+              <span class="van-tag van-tag--round red" v-else>无法升级,选择省份数量需大于原套餐数</span>
             </div>
           </div>
           <div class="spec-list-container border-line-t" v-if="buyType !== 'upgrade'">
@@ -84,7 +84,7 @@
               </div>
               <div class="notes-section-content" v-if="buyType === 'upgrade'">
                 1、省份订阅包升级不改变您原有订阅周期,只增加省份数量。<br />
-                2、省份订阅包是按时间、订阅省份个数计算费用,其中${ priceInfo.provinceFreeCount }个省份免费,超过${ priceInfo.provinceMaxCount }个省则按照全国计价;从升级之日起到原订阅周期结束之日,计算升级价格,不足月价格将按照天进行折算。<br />
+                2、省份订阅包是按时间、订阅省份个数计算费用,其中${ priceInfo.provinceFreeCount }个省份免费,超过${ priceInfo.provinceMaxCount }个省则按照全国计价;从升级之日起到原订阅周期结束之日,计算升级价格,不足月价格将按照整月计费。<br />
                 3、订阅区域每月可修改次数为可订阅省份数量,购买全国不限制修改次数。
               </div>
             </section>

+ 7 - 1
src/jfw/modules/app/src/web/templates/areaPack/page_set_area.html

@@ -142,7 +142,7 @@
     <script>
         var setAreaFn = {
             conf: {
-                sKey: 'sub_vip_state'
+                sKey: 'sub_free_state'
             },
             buyPageInfo: {},
             init: function () {
@@ -218,11 +218,17 @@
                 url: '/publicapply/free/subscribe',
                 type: 'POST',
                 success: function (res) {
+                    let freeArea = JSON.stringify(res.data)
+                    sessionStorage.setItem('sub_free_state', freeArea)
+                    setAreaFn.init()
+                    onChange(res.data.area)
                     userType = res.data.provincenum === 0 ? false : true
                     maxSelect = res.data.provincenum + res.data.basenum
                     // _this.$emit('UserSubscribe',res)
                     if (maxSelect === -1) {
                         $('#canSelect').text(`全国`)
+                    } else if (res.data.provincenum === 0 && res.data.areanum === 1) {
+                        vueComponent.provinceListMap['#'][0].selectedState = ''
                     } else {
                         $('#canSelect').text(`${maxSelect}个省`)
                     }

+ 60 - 0
src/jfw/modules/app/src/web/templates/frontRouter/messageCenter/sess/detail.html

@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+    <!--引入公共资源头部-->
+    {{include "/big-member/meta.html"}}
+    <meta http-equiv="Cache-control" content="no-cache">
+    <title></title>
+    <!--S-当前页面的css资源-->
+    <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/reset-css/5.0.1/reset.min.css />
+    <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/index.css />
+    <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/icon/local.css />
+    <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/messageCenter/css/public.css?v={{Msg "seo" "version"}}' />
+    <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/messageCenter/css/index.css?v={{Msg "seo" "version"}}' />
+  </head>
+<body>
+  <div class="j-container" v-cloak id="detailed">
+    <div class="j-header jy-app-header">
+      <span class="header-left" @click="history.back()">
+        <span class="icon-back j-icon base-icon"></span>
+      </span>
+      <span class="l-title"></span>
+      <span class="header-title">{tit}</span>
+    </div>
+    <div class="j-main detailed">
+      <div class="j-container">
+        <div class="j-main descri" id="descri">
+          <van-list
+            :finished="tabsList.finished"
+            finished-text=""
+            @load="msgData"
+          >
+            <div class="d-list" v-for="item in lists" :key="item.id">
+              <p class="p-time">{dateMatter(item.createtime, 'in')}</p>
+              <div class="words">
+                <img :src="'/common-module/messageCenter/image/'+imgSrcs[item.msg_type - 1].url+'@2x.png'">
+                <div class="m-tip" @click="msgClick(item.url)">
+                  <span class="trangle"></span>
+                  <p class="p1">{item.title}</p>
+                  <p class="p2">{item.content}</p>
+                </div>
+              </div>
+            </div>
+          </van-list>
+        </div>
+      </div>
+    </div>
+  </div>
+  <!--S-当前页面的资源-->
+  <script src='https://cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js'></script>
+  <script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js></script>
+  <script src=//cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js></script>
+  <!--E-当前页面的资源-->
+  {{include "/big-member/commonjs.html"}}
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/common.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/messageCenter/js/func.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/messageCenter/js/detail.js?v={{Msg "seo" "version"}}'></script>
+  {{include "/common/baiducc.html"}}
+</body>
+
+</html>

+ 69 - 0
src/jfw/modules/app/src/web/templates/frontRouter/messageCenter/sess/index.html

@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+    <!--引入公共资源头部-->
+    {{include "/big-member/meta.html"}}
+    <meta http-equiv="Cache-control" content="no-cache">
+    <title>消息中心</title>
+    <!--S-当前页面的css资源-->
+    <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/reset-css/5.0.1/reset.min.css />
+    <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/index.css />
+    <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/icon/local.css />
+    <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/bidedoc/css/public.css?v={{Msg "seo" "version"}}' />
+    <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/messageCenter/css/index.css?v={{Msg "seo" "version"}}' />
+  </head>
+<body>
+  <div class="j-container">
+    <div class="j-header jy-app-header">
+      <span class="l-title">消息中心</span>
+      <span class="header-title"></span>
+    </div>
+    <div class="j-main mesged" v-cloak id="mesged">
+      <div class="j-container">
+        <div class="j-main" v-show="msgList">
+          <div class="head-mesg" v-show="!$.isEmptyObject(lastData)">
+            <h5>重要提醒</h5>
+            <div class="h-conts" @click="msgClick(lastData.url,lastData.isRead,lastData.id,lastData.msg_type)">
+              <div class="p1">
+                <span class="spa-tit">{lastData.title}</span>
+                <span class="spa flex" @click.stop="toggleClick" v-show="isRow">{isToggle?'收起':'展开'}&nbsp;<van-icon :class="isToggle?'is-icon1':'is-icon2'" name="arrow-down" /></span>
+              </div>
+              <p class="p2" :class="{'active':isRow && !isToggle}">{lastData.content}</p>
+            </div>
+          </div>
+          <div class="t-list">
+            <div class="tips" v-for="(ite, index) in msgList" :key="index" @click="msgDetailed(ite.type,ite.count)" v-show="!$.isEmptyObject(ite.newMsg)">
+              <div class="imgs">
+                <van-badge :class="{'no-active':ite.count <= 0}" :content="ite.count" max="99">
+                  <img :src="'/common-module/messageCenter/image/'+imgSrcs[ite.type - 1].url+'@2x.png'">
+                </van-badge>
+              </div>
+              <div class="r-lis">
+                  <div class="title">
+                      <span>{imgSrcs[ite.type - 1].title}</span>
+                      <span v-if="ite.newMsg">{dateMatter(ite.newMsg.createtime, 'out')}</span>
+                  </div>
+                  <p class="p3" v-if="ite.newMsg">{ite.newMsg.content}</p>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="no-data" v-show="!msgList"><img src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/messageCenter/image/no-mesg.png?v={{Msg "seo" "version"}}'><div class="tip-text"><p>暂无消息</p></div></div>
+        
+      </div>
+    </div>
+  </div>
+  <!--S-当前页面的资源-->
+  <script src='https://cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js'></script>
+  <script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js></script>
+  <script src=//cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js></script>
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/utils.js?v={{Msg "seo" "version"}}'></script>
+  <!--E-当前页面的资源-->
+  {{include "/big-member/commonjs.html"}}
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/common.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/messageCenter/js/func.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/messageCenter/js/index.js?v={{Msg "seo" "version"}}'></script>
+  {{include "/common/baiducc.html"}}
+</body>
+
+</html>

+ 1 - 1
src/jfw/modules/app/src/web/templates/vipsubscribe/vip_index_new.html

@@ -297,7 +297,7 @@
             <div class="provincePay">
               <div class="provincePay-text">订阅周期:${subscribeTime}</div>
               <div class="provincePay-text provincePay-numText">
-                省份数量:<span class="provincePay-num">&nbsp;<span v-html="userAreaAllNum"></span>&nbsp;</span>个
+                省份数量:<span class="provincePay-num">&nbsp;<span v-html="userAreaAllNum"></span>&nbsp;</span><span v-show="userAreaAllNum !== '全国'"></span>
               </div>
               <div class="provincePay-btnWrap">
                 <div class="privincePay-btn"  @click="renewBtn">续费</div>

+ 3 - 0
src/jfw/modules/app/src/web/templates/weixin/historypush.html

@@ -467,6 +467,9 @@
         </div>
     </div>
 </div>
+
+<!-- 底部导航 -->
+{{include "/weixin/tabbar.html"}}
 <div class="vip_report_tip">
     <div class="weui-mask weui-animate-fade-in"></div>
     <div class="weui-dialog weui-animate-fade-in">

+ 6 - 0
src/jfw/modules/app/src/web/templates/weixin/search/mainSearch.html

@@ -730,6 +730,12 @@
     var member_status;
     var isMember = false;
     var vSwitch = 'v'
+    // 消息总数
+    try {
+        checkMsgCount(true, 0)
+    } catch (e) {
+        console.log(e)
+    }
     // 子账户判断
     $.ajax({
         type:'POST',

+ 4 - 4
src/jfw/modules/app/src/web/templates/weixin/wxtsguide.html

@@ -290,7 +290,7 @@ if(localStorage && localStorage.tsGuide_status == "1"){
 					比如您输入“绿化工程”以后,当某招标人发布了《某某县中心敬老院一期观景<font class="keyword">绿化工程</font>施工》,剑鱼标讯就会把这条信息推送给您。
 				</div>
 				<div class="btnarea">
-					<button type="button" class="btn" onclick="Guide.skip()">跳过向导</button>
+					<button type="button" class="btn" onclick="Guide.skip(2)">跳过向导</button>
 					<span>
 						<button type="button" class="btn btn-normal prevStep" onclick="Guide.prevStep(2)">上一步</button>
 						<button type="button" class="btn nextStep" onclick="Guide.nextStep(2)">下一步</button>
@@ -314,7 +314,7 @@ if(localStorage && localStorage.tsGuide_status == "1"){
 					</div>
 				</div>
 				<div class="btnarea">
-					<button type="button" class="btn" onclick="Guide.skip()">跳过向导</button>
+					<button type="button" class="btn" onclick="Guide.skip(3)">跳过向导</button>
 					<span>
 						<button type="button" class="btn btn-normal prevStep" onclick="Guide.prevStep(3)">上一步</button>
 						<button type="button" class="btn nextStep" onclick="Guide.nextStep(3)">下一步</button>
@@ -339,7 +339,7 @@ if(localStorage && localStorage.tsGuide_status == "1"){
 			<div class="btnarea">
 				<span>
 					<button type="button" class="btn btn-normal prevStep" onclick="Guide.prevStep(4)">上一步</button>
-					<button type="button" class="btn nextStep" onclick="Guide.skip()">开始使用</button>
+					<button type="button" class="btn nextStep" onclick="Guide.skip(4)">开始使用</button>
 				</span>
 				<font>点击开始使用后,剑鱼标讯会为您打开订阅设置页面</font>
 			</div>
@@ -400,7 +400,7 @@ if(localStorage && localStorage.tsGuide_status == "1"){
 		}
 	})
 	$("#skipOver").on('click', function () {
-	  Guide.skip()
+	  Guide.skip(1)
 	})
 </script>
 {{include "/common/baiducc.html"}}

+ 24 - 24
src/jfw/modules/bigmember/src/entity/portraitBuyerSearch.go

@@ -100,36 +100,36 @@ func BuyerPortraitSearch(screen *PortraitScreen) (map[string]interface{}, error)
 
 	//按照当前年份,往前推4年,共5个年份可选
 	mustQueryArr = append(mustQueryArr, fmt.Sprintf(`{"range":{"firsttime":{"gte":"%d","lt":"%d"}}}`, startTime.Unix(), endTime.Unix()))
-	if screen.HasPower {
-		//文本输入框,字数限制50个字,超过上限不再允许输入内容
-		if screen.Match != "" {
-			if pareWord := screen.PareMatchWord(); pareWord != "" {
-				findFields := fmt.Sprintf(`"%s"`, strings.Join(screen.PareMatchType(), "\",\""))
-				var keywordArr []string
-				for _, keyword := range strings.Split(pareWord, " ") {
-					if keyword == "" {
-						continue
-					}
-					keywordArr = append(keywordArr, fmt.Sprintf(multi_match, keyword, findFields))
-				}
-				if screen.ExactMatch { //精确匹配(必须包含每个关键词)
-					mustQueryArr = append(mustQueryArr, fmt.Sprintf(must_match, strings.Join(keywordArr, ",")))
-				} else { //模糊匹配(只需包含一个关键词)
-					mustQueryArr = append(mustQueryArr, fmt.Sprintf(should_match, strings.Join(keywordArr, ",")))
+	//if screen.HasPower {
+	//文本输入框,字数限制50个字,超过上限不再允许输入内容
+	if screen.Match != "" {
+		if pareWord := screen.PareMatchWord(); pareWord != "" {
+			findFields := fmt.Sprintf(`"%s"`, strings.Join(screen.PareMatchType(), "\",\""))
+			var keywordArr []string
+			for _, keyword := range strings.Split(pareWord, " ") {
+				if keyword == "" {
+					continue
 				}
+				keywordArr = append(keywordArr, fmt.Sprintf(multi_match, keyword, findFields))
+			}
+			if screen.ExactMatch { //精确匹配(必须包含每个关键词)
+				mustQueryArr = append(mustQueryArr, fmt.Sprintf(must_match, strings.Join(keywordArr, ",")))
+			} else { //模糊匹配(只需包含一个关键词)
+				mustQueryArr = append(mustQueryArr, fmt.Sprintf(should_match, strings.Join(keywordArr, ",")))
 			}
 		}
+	}
 
-		//地区多选,选项:全部(初始值)、项目地区(省、直辖市)
-		if screen.Area != "" {
-			mustQueryArr = append(mustQueryArr, fmt.Sprintf(`{"terms":{"area":["%s"]}}`, strings.ReplaceAll(screen.Area, ",", "\",\"")))
-		}
+	//地区多选,选项:全部(初始值)、项目地区(省、直辖市)
+	if screen.Area != "" {
+		mustQueryArr = append(mustQueryArr, fmt.Sprintf(`{"terms":{"area":["%s"]}}`, strings.ReplaceAll(screen.Area, ",", "\",\"")))
+	}
 
-		//行业多选
-		if screen.ScopeClass != "" {
-			mustQueryArr = append(mustQueryArr, fmt.Sprintf(`{"terms":{"subscopeclass":["%s"]}}`, strings.ReplaceAll(screen.ScopeClass, ",", "\",\"")))
-		}
+	//行业多选
+	if screen.ScopeClass != "" {
+		mustQueryArr = append(mustQueryArr, fmt.Sprintf(`{"terms":{"subscopeclass":["%s"]}}`, strings.ReplaceAll(screen.ScopeClass, ",", "\",\"")))
 	}
+	//}
 
 	tBegin := time.Now()
 	doSearchSql := fmt.Sprintf(buyerPortraitSearchSql, strings.Join(mustQueryArr, ","), bidamountTimeRange, getMoneyRange(), comminTimeRange, comminTimeRange)

+ 12 - 0
src/jfw/modules/subscribepay/src/entity/areaPack.go

@@ -2,6 +2,7 @@ package entity
 
 import (
 	"encoding/json"
+	"fmt"
 	"log"
 	qutil "qfw/util"
 	"time"
@@ -169,6 +170,17 @@ func (this *areaPackPrice) PayCallBack(param *CallBackParam) bool {
 				log.Printf("用户%s更新省份订阅包用户状态出错:%v", userId, areaPack)
 				return false
 			}
+			//卡卷使用
+			userLotteryId := qutil.ObjToString((*orderData)["d_relation_id"])
+			order_code := qutil.ObjToString((*orderData)["order_code"])
+			if userLotteryId != "" {
+				go func(userId, userLotteryId, order_code string) {
+					phone, name := util.GetMyPhoneAndName(userId)
+					if !util.UpdateCouponState(userId, userLotteryId, name, phone, order_code, "省份订阅包", "0", 1, 0) {
+						log.Println(fmt.Sprintf("单号%s-消费失败-卡卷%s", order_code, userLotteryId))
+					}
+				}(userId, userLotteryId, order_code)
+			}
 			return true
 		} else {
 			return true

+ 13 - 6
src/jfw/modules/subscribepay/src/service/areaPack.go

@@ -80,15 +80,15 @@ func (this *AreaPack) CreateOrder() {
 				full_price, reduce_price := 0, 0
 				var discount float64
 				full_price, reduce_price, discount, userLotteryId = util.GetCouponInfo(userId, lotteryId, products)
-				if discount == 100 { //满减
-					if full_price <= totalfee {
+				if full_price <= totalfee {
+					if discount == 100 { //满减
 						totalfee = totalfee - reduce_price
 						discount_price = reduce_price
+					} else { //满折
+						disCount_int := int(math.Ceil(discount * 100))
+						discount_price = totalfee - totalfee*disCount_int/1000
+						totalfee = totalfee * disCount_int / 1000
 					}
-				} else { //满折
-					disCount_int := int(math.Ceil(discount * 100))
-					discount_price = totalfee - totalfee*disCount_int/1000
-					totalfee = totalfee * disCount_int / 1000
 				}
 			}
 		}
@@ -124,6 +124,11 @@ func (this *AreaPack) CreateOrder() {
 			if area_status < 0 && filter.OrderType > 1 { //非省份订阅用户不可升级续费
 				return nil, fmt.Errorf("非法请求")
 			}
+			o_buyset_p := qutil.ObjToMap((*ojy)["o_buyset_p"])
+			count := qutil.IntAllDef((*o_buyset_p)["areacount"], 0)
+			if area_status == 1 && count == -1 && filter.OrderType == 2 {
+				return nil, fmt.Errorf("非法请求")
+			}
 			start := qutil.Int64All((*ojy)["l_areaStart_p"])
 			end := qutil.Int64All((*ojy)["l_areaEnd_p"])
 			//续费
@@ -139,6 +144,8 @@ func (this *AreaPack) CreateOrder() {
 				}
 				now := time.Now()
 				//校验是否超过三年
+				log.Println(time.Date(now.Year(), now.Month(), now.Day(), 23, 59, 59, 59, now.Location()).
+					AddDate(3, 0, 0).Before(endTime))
 				if time.Date(now.Year(), now.Month(), now.Day(), 23, 59, 59, 59, now.Location()).
 					AddDate(3, 0, 0).Before(endTime) && !isgive {
 					return nil, fmt.Errorf("订阅周期超过三年")

+ 7 - 7
src/jfw/modules/subscribepay/src/service/dataExportPay.go

@@ -156,16 +156,16 @@ func (p *DataExportPay) CreateOrder() {
 		discount_price := 0
 		if lotteryId != "" {
 			full_price, reduce_price, discount, userLotteryId = util.GetCouponInfo(userId, lotteryId, config.CouponConfig.Products["数据导出"])
-			if discount == 100 {
-				if full_price <= order_money {
+			if full_price <= order_money {
+				if discount == 100 {
 					order_money = order_money - reduce_price
 					discount_price = reduce_price
+				} else {
+					//折扣
+					disCount_int := int(math.Ceil(discount * 100))
+					discount_price = order_money - order_money*disCount_int/1000
+					order_money = order_money * disCount_int / 1000
 				}
-			} else {
-				//折扣
-				disCount_int := int(math.Ceil(discount * 100))
-				discount_price = order_money - order_money*disCount_int/1000
-				order_money = order_money * disCount_int / 1000
 			}
 		}
 		log.Println(userLotteryId, "--discount_price:", discount_price)

+ 10 - 8
src/jfw/modules/subscribepay/src/service/dataexportPack.go

@@ -130,18 +130,20 @@ func (this *DataExportPack) CreateOrder() {
 			}
 			var fullPrice, reducePrice int
 			fullPrice, reducePrice, discount, userLotteryId = util.GetCouponInfo(userId, lotteryId, products)
-			if discount == 100 {
-				if fullPrice <= orderMoney {
+			if fullPrice <= orderMoney {
+				if discount == 100 {
+
 					orderMoney = orderMoney - reducePrice
 					discountPrice = reducePrice
+
+				} else {
+					//折扣
+					disCount_int := int(math.Ceil(discount * 100))
+					discountPrice = orderMoney - orderMoney*disCount_int/1000
+					orderMoney = orderMoney * disCount_int / 1000
 				}
-			} else {
-				//折扣
-				disCount_int := int(math.Ceil(discount * 100))
-				discountPrice = orderMoney - orderMoney*disCount_int/1000
-				orderMoney = orderMoney * disCount_int / 1000
+				log.Printf("用户%s 购买数据流量包 使用卡券:%s 折扣金额:%d", userId, userLotteryId, discountPrice)
 			}
-			log.Printf("用户%s 购买数据流量包 使用卡券:%s 折扣金额:%d", userId, userLotteryId, discountPrice)
 		}
 		//赠品相关
 		useProduct, _ = strconv.Atoi(config.CouponConfig.Products[packId])

+ 7 - 7
src/jfw/modules/subscribepay/src/service/integral.go

@@ -84,16 +84,16 @@ func (b *Integral) CreateOrder() {
 		if lotteryId != "" {
 			var discount float64
 			full_price, reduce_price, discount, userLotteryId = util.GetCouponInfo(userId, lotteryId, config.CouponConfig.Products["剑鱼币"])
-			if discount == 100 {
-				if full_price <= order_money {
+			if full_price <= order_money {
+				if discount == 100 {
 					order_money = order_money - reduce_price
 					discount_price = reduce_price
+				} else {
+					//折扣
+					disCount_int := int(math.Ceil(discount * 100))
+					discount_price = order_money - order_money*disCount_int/1000
+					order_money = order_money * disCount_int / 1000
 				}
-			} else {
-				//折扣
-				disCount_int := int(math.Ceil(discount * 100))
-				discount_price = order_money - order_money*disCount_int/1000
-				order_money = order_money * disCount_int / 1000
 			}
 		}
 		log.Println(userLotteryId, "--discount_price:", discount_price)

+ 42 - 13
src/jfw/modules/subscribepay/src/service/orderListDetails.go

@@ -543,18 +543,45 @@ func (o *OrderListDetails) EntIsCanBuy() {
 	return
 }
 
+//获取最后一次购买的订单 product_type : 参数
+func LastOrder(product_type, userid string) map[string]string {
+	m := map[string]string{}
+	args := []interface{}{}
+	sql := `select product_type,order_code from dataexport_order where del_status=0 
+and order_status=1 and  product_type in(`
+	for k, v := range strings.Split(product_type, ",") {
+		m[v] = ""
+		if len(strings.Split(product_type, ",")) == (k + 1) {
+			sql += `?`
+		} else {
+			sql += `?,`
+		}
+		args = append(args, v)
+	}
+	sql += `)and user_id=? order by pay_time DESC`
+	args = append(args, userid)
+	log.Println(sql)
+	data := util.Mysql.SelectBySql(sql, args...)
+
+	if data != nil && len(*data) > 0 {
+		for _, v := range *data {
+			product_type := qutil.ObjToString(v["product_type"])
+			order_code := qutil.ObjToString(v["order_code"])
+			if m[product_type] == "" {
+				m[product_type] = order_code
+			}
+		}
+	}
+	return m
+}
+
 func (o *OrderListDetails) SetRes(res []map[string]interface{}, queryM map[string]interface{}) {
 	entid := o.GetUserEntId() //用户购买的entid
 	ent_ordercode := GetEntOrdercode(queryM, entid)
 	var create_time_stamp int64 = 0
+	userid := qutil.ObjToString(queryM["user_id"])
 	//获取最后一次购买的vip订单
-	queryM["product_type"] = "VIP订阅"
-	lastbuy := *util.Mysql.Find(tableName_order, queryM, "order_code,pay_time", "pay_time desc", -1, 0)
-	lastbuy_code := ""
-	if len(lastbuy) > 0 && lastbuy != nil {
-		lastbuy_code = qutil.ObjToString(lastbuy[0]["order_code"])
-	}
-	delete(queryM, "product_type")
+	lastOrderMap := LastOrder("VIP订阅,省份订阅包", userid)
 
 	for _, v := range res {
 		//获取单号 如果是vip xx小时取消
@@ -615,17 +642,19 @@ func (o *OrderListDetails) SetRes(res []map[string]interface{}, queryM map[strin
 		if pay_money != nil {
 			v["pay_money"] = float64(pay_money.(int64)) / 100
 		}
-		/*if v["id"] != nil && v["order_money"] != nil && v["order_code"] != nil {
-			v["token"] = entity.GetWaitPayToken(v["id"].(int64), int(orderMoney.(int64)), v["order_code"].(string), v["pay_way"].(string), queryM["user_id"].(string))
-		}*/
 		//最后一次够买的vip订单
-		if lastbuy_code == v["order_code"] {
-			v["lastbuy_code"] = lastbuy_code
+		for _, n := range lastOrderMap {
+			if n == order_code {
+				v["lastbuy_code"] = n
+			}
 		}
-		if v["pay_time"] != nil && ((v["product_type"] == "VIP订阅") || (v["product_type"] == "VIP订阅")) {
+		product_type := v["product_type"]
+		if v["pay_time"] != nil && ((product_type == "VIP订阅") || (product_type == "省份订阅包")) {
 			data, err := util.MQFW.FindOne("user", bson.M{"_id": StringTOBsonId(qutil.ObjToString(o.GetSession("userId")))})
 			if len(*data) > 0 && err {
 				v["i_vip_status"] = qutil.Int64All((*data)["i_vip_status"])
+				ojy := qutil.ObjToMap((*data)["o_jy"])
+				v["i_pp_status"] = qutil.IntAllDef((*ojy)["i_pp_status"], 0) //i_pp_status : -1 到期  0未购买 1已购买
 			}
 		}
 		//

+ 7 - 7
src/jfw/modules/subscribepay/src/service/vipSubscribeChange.go

@@ -235,16 +235,16 @@ func (this *SubscribeChange) Upgrade() {
 		var discount float64
 		if lotteryId != "" {
 			full_price, reduce_price, discount, userLotteryId = util.GetCouponInfo(userId, lotteryId, config.CouponConfig.Products["超级订阅"])
-			if discount == 100 {
-				if reduce_price > 0 && full_price <= final_price {
+			if reduce_price > 0 && full_price <= final_price {
+				if discount == 100 {
 					final_price = final_price - reduce_price
 					discount_price = reduce_price
+				} else {
+					//折扣
+					disCount_int := int(math.Ceil(discount * 100))
+					discount_price = final_price - final_price*disCount_int/1000
+					final_price = final_price * disCount_int / 1000
 				}
-			} else {
-				//折扣
-				disCount_int := int(math.Ceil(discount * 100))
-				discount_price = final_price - final_price*disCount_int/1000
-				final_price = final_price * disCount_int / 1000
 			}
 		}
 		//测试打折

+ 13 - 12
src/jfw/modules/subscribepay/src/service/vipSubscribePay.go

@@ -178,15 +178,16 @@ func (this *SubVipPayOrder) CreateOrder() {
 			full_price, reduce_price := 0, 0
 			var discount float64
 			full_price, reduce_price, discount, userLotteryId = util.GetCouponInfo(userId, lotteryId, products)
-			if discount == 100 { //满减
-				if full_price <= totalfee {
+			if full_price <= totalfee {
+				if discount == 100 { //满减
 					totalfee = totalfee - reduce_price
 					discount_price = reduce_price
+
+				} else { //满折
+					disCount_int := int(math.Ceil(discount * 100))
+					discount_price = totalfee - totalfee*disCount_int/1000
+					totalfee = totalfee * disCount_int / 1000
 				}
-			} else { //满折
-				disCount_int := int(math.Ceil(discount * 100))
-				discount_price = totalfee - totalfee*disCount_int/1000
-				totalfee = totalfee * disCount_int / 1000
 			}
 		}
 		//赠品相关
@@ -392,15 +393,15 @@ func (this *SubVipPayOrder) Renew() {
 				products = strconv.Itoa(useProduct)
 			}
 			full_price, reduce_price, discount, userLotteryId = util.GetCouponInfo(userId, lotteryId, products)
-			if discount == 100 { //满减
-				if full_price <= totalfee {
+			if full_price <= totalfee {
+				if discount == 100 { //满减
 					totalfee = totalfee - reduce_price
 					discount_price = reduce_price
+				} else { //满折
+					disCount_int := int(math.Ceil(discount * 100))
+					discount_price = totalfee - totalfee*disCount_int/1000
+					totalfee = totalfee * disCount_int / 1000
 				}
-			} else { //满折
-				disCount_int := int(math.Ceil(discount * 100))
-				discount_price = totalfee - totalfee*disCount_int/1000
-				totalfee = totalfee * disCount_int / 1000
 			}
 		}
 		filterStr, _ := json.Marshal(filter)

+ 50 - 25
src/web/staticres/common-module/area-pack/js/buy.js

@@ -13,15 +13,11 @@ var vm = new Vue({
       // 已经购买的信息
       alreadyBuyInfo: {
         loaded: false,
-        // ppstart: 1631847136,
-        // ppend: 1641847136,
-        // areanum: 1, // 可调整地区次数
-        // provincenum: 3, // 已购买省份数量
-        // area: {
-        //   '安徽': [],
-        //   '北京': [],
-        //   '河南': [],
-        // }
+        ppstart: 0,
+        ppend: 0,
+        areanum: 0, // 可调整地区次数
+        provincenum: 0, // 已购买省份数量
+        area: {}
       },
       // 选择的省份数量
       areaInfo: '', // 空字符串或者null表示未选择省份,空对象表示全国/provinceMaxCount
@@ -126,24 +122,33 @@ var vm = new Vue({
       return count
     },
     buyAreaText: function () {
-      var selectCount = this.selectAreaCount
-      if (selectCount === -1) {
-        var buyCount = this.priceInfo.provinceMaxCount + this.priceInfo.provinceFreeCount
-        return buyCount + '个省'
-        // return '全国'
+      var buyAreaCount = this.buyAreaCount
+      if (buyAreaCount === -1) {
+        return '全国'
       } else {
-        var buyCount = selectCount - this.priceInfo.provinceFreeCount
-        return (buyCount >= 0 ? buyCount : 0) + ' 个省'
+        return (buyAreaCount >= 0 ? buyAreaCount : 0) + ' 个省'
       }
     },
     // 购买的省份数量 = 选中数量 - 免费数量
     buyAreaCount: function () {
-      var selectCount = this.selectAreaCount
-      if (selectCount === -1) {
-        return selectCount
+      if (this.buyType === 'renew') {
+        return this.renewAreaCount
+      } else {
+        var selectCount = this.selectAreaCount
+        if (selectCount === -1) {
+          return selectCount
+        } else {
+          var buyCount = selectCount - this.priceInfo.provinceFreeCount
+          return buyCount >= 0 ? buyCount : 0
+        }
+      }
+    },
+    renewAreaCount: function () {
+      var buyCount = this.alreadyBuyInfo.provincenum
+      if (buyCount) {
+        return buyCount
       } else {
-        var buyCount = selectCount - this.priceInfo.provinceFreeCount
-        return buyCount >= 0 ? buyCount : 0
+        return 0
       }
     },
     upgradeAreaText: function () {
@@ -194,9 +199,9 @@ var vm = new Vue({
     this.setTitle()
     this.checkConfirmButtonDisabled()
     utils.iosBackRefresh()
-    if (this.buyType === 'buy') {
-      this.addBackTip()
-    }
+    // if (this.buyType === 'buy') {
+    //   this.addBackTip()
+    // }
   },
   methods: {
     showLoading: function () {
@@ -239,6 +244,12 @@ var vm = new Vue({
         setHeaderTitle(title)
       } catch (error) {}
     },
+    getUrlArea: function () {
+      var area = utils.getParam('area')
+      if (area) {
+        this.areaInfo = JSON.parse(decodeURIComponent(area))
+      }
+    },
     getBuyType: function () {
       var buyTypeList = ['buy', 'renew', 'upgrade']
       var buyType = utils.getParam('type')
@@ -303,10 +314,14 @@ var vm = new Vue({
           loading && loading.clear()
           _this.alreadyBuyInfo.loaded = true
           if (res && res.error_code === 0) {
+            // _this.checkBuyStatus(res.data)
             for (var key in res.data) {
               _this.$set(_this.alreadyBuyInfo, key, res.data[key])
             }
-            _this.$set(_this, 'areaInfo', res.data.area)
+            _this.getUrlArea()
+            if (!_this.areaInfo) {
+              _this.$set(_this, 'areaInfo', res.data.area)
+            }
             _this.getPrice()
           }
         },
@@ -317,6 +332,16 @@ var vm = new Vue({
         }
       })
     },
+    // 检查是否满足购买/续费/升级的条件
+    checkBuyStatus: function (data) {
+      if (!data) return
+      var buyCount = data.provincenum
+      if (buyCount === -1) {
+        if (this.buyType !== 'renew') {
+          this.buyType === 'renew'
+        }
+      }
+    },
     // 获取赠品信息
     getGiftInfo: function () {
       var _this = this

+ 244 - 0
src/web/staticres/common-module/messageCenter/css/index.css

@@ -0,0 +1,244 @@
+.flex {
+    display: -webkit-box;
+    display: -webkit-flex;
+    display: flex;
+    -webkit-align-items: center;
+    align-items: center;
+}
+
+.j-header.jy-app-header {
+    padding: 31px 0.24rem 6px;
+    background-color: #fff;
+}
+
+.j-header:after {
+  content: unset;
+}
+
+.j-header .l-title {
+    font-size: .44rem;
+    color: #171826;
+    line-height: .64rem;
+}
+
+.j-container .j-header.jy-app-header .border-line-t:after, .border-line-b:after {
+    height: 0;
+}
+
+[v-cloak] {
+    display: none !important;
+}
+
+.mesged, .detailed {
+    width: 100%;
+}
+
+.head-mesg {
+    margin: .24rem .4rem 0 .4rem;
+}
+
+.head-mesg h5 {
+    font-size: .26rem;
+    color: #9b9ca3;
+    line-height: .4rem;
+}
+
+.head-mesg .h-conts {
+    padding: .32rem;
+    background: #ffffff;
+    border-radius: 8px;
+    box-shadow: 0px 2px 8px 0px rgba(54,147,179,0.05);
+    margin-top: .08rem;
+}
+
+.head-mesg .h-conts .p1 {
+    display: flex;
+    justify-content: space-between;
+    font-size: .28rem;
+    font-weight: 700;
+    color: #171826;
+    line-height: .48rem;
+}
+
+.head-mesg .h-conts .p1 .spa {
+    width: 1.12rem;
+    height: .36rem;
+    line-height: .36rem;
+    /* padding: .0 .2rem; */
+    background: rgba(42,190,209,0.10);
+    border-radius: 4px;
+    font-size: .24rem;
+    color: #2abed1;
+    font-weight: 400;
+    justify-content: center;
+}
+
+.head-mesg .h-conts .p1 .spa-tit {
+    width: 4.8rem;
+}
+
+.head-mesg .h-conts .p1 .spa .is-icon1::before {
+    transform: rotate(180deg) translateZ(0);
+    transition: transform 0.2s;
+}
+
+.head-mesg .h-conts .p1 .spa .is-icon2::before {
+    transform: rotate(0deg) translateZ(0);
+    transition: transform 0.2s;
+}
+
+.head-mesg .h-conts .p2 {
+    font-size: .26rem;
+    color: #9b9ca3;
+    line-height: .4rem;
+    margin-top: .08rem;
+}
+
+.head-mesg .h-conts .active {
+    overflow: hidden;
+    display: -webkit-box; 
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2; 
+    text-overflow: ellipsis;
+
+}
+
+.head-mesg .h-conts .p2 i {
+    color: #2cb7ca;
+}
+
+.j-main .tips:first-child {
+    margin-top: .32rem;
+}
+.t-list {
+    margin-bottom: 1.2rem;
+}
+.tips {
+    display: flex;
+    flex-direction: initial;
+    padding: .32rem;
+    background: #fff;
+    margin-bottom: 1px;
+}
+.tips .imgs {
+    position: relative;
+    margin-right: .16rem;
+}
+.tips .imgs img {
+    width: .96rem;
+}
+.tips .imgs .van-badge {
+    min-width: .3rem;
+    height: .3rem;
+    line-height: .3rem;
+    background-color: #FB483D;
+    font-size: .22rem;
+}
+.tips .imgs .van-badge--fixed {
+    top: .15rem;
+    right: .15rem;
+}
+.tips .imgs .no-active .van-badge--fixed {
+    display: none;
+}
+.tips .r-lis {
+    width: 100%;
+}
+.tips .r-lis .title {
+    display: flex;
+    flex-direction: initial;
+    justify-content: space-between;
+    font-size: .32rem;
+    color: #171826;
+    font-weight: 700;
+    line-height: .48rem;
+}
+.tips .r-lis .title span:nth-child(2) {
+    font-size: .22rem;
+    color: #9B9CA3;
+    font-weight: 500;
+}
+.tips .r-lis .p3 {
+    overflow: hidden;
+    display: -webkit-box; 
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 1; 
+    text-overflow: ellipsis;
+    font-size: .26rem;
+    color: #9B9CA3;
+    line-height: .4rem;
+    margin-top: .08rem;
+    word-break: break-all;
+}
+.no-data {
+    margin-top: 1.56rem;
+    text-align: center;
+}
+.no-data img {
+    width: 4rem;
+    height: 4rem;
+    overflow: visible;
+}
+.no-data .tip-text {
+    color: #5F5E64;
+    font-size: .28rem;
+    line-height: .4rem;
+}
+/* 详情页样式 */
+.descri {
+    padding: 0 .48rem .52rem .24rem;
+}
+.descri .d-list {
+    margin-top: .48rem;
+}
+.descri .d-list .p-time {
+    font-size: .22rem;
+    color: #9b9ca3;
+    line-height: .36rem;
+    text-align: center;
+    padding-left: .24rem;
+}
+.descri .d-list .words {
+    display: flex;
+    margin-top: .16rem;
+}
+.descri .d-list .words img {
+    width: .8rem;
+    height: .8rem;
+}
+.descri .d-list .words .m-tip {
+    width: 100%;
+    position: relative;
+    padding: .16rem .24rem;
+    margin-left: .32rem;
+    background: #ffffff;
+    border-radius: .16rem;
+    box-shadow: 0px 2px 8px 0px rgba(54,147,179,0.05);
+}
+.descri .d-list .words .m-tip .p1 {
+    font-size: .28rem;
+    font-weight: 700;
+    color: #171826;
+    line-height: .48rem;
+}
+
+.descri .d-list .words .m-tip .p2 {
+    font-size: .26rem;
+    color: #9b9ca3;
+    line-height: .4rem;
+    margin-top: .08rem;
+    word-break: break-all;
+}
+.descri .d-list .words .m-tip .p2 i {
+    color: #2cb7ca;
+}
+.descri .d-list .words .m-tip .trangle{
+    position: absolute;
+    left: -0.16rem;
+    top: .28rem;
+    width: 0;
+    height: 0;
+    border-top: .16rem solid transparent;
+    border-bottom: .16rem solid transparent;
+    border-right: .24rem solid #fff;
+}

+ 530 - 0
src/web/staticres/common-module/messageCenter/css/public.css

@@ -0,0 +1,530 @@
+@charset "UTF-8";
+
+/* reset css start ---------> */
+* {
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    -webkit-overflow-scrolling: touch;
+    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+    -webkit-tap-highlight-color: transparent;
+}
+html,
+body {
+    height: 100%;
+    color: #171826;
+}
+
+html > body {
+    font-size: 12px;
+    background-color: #F5F6F7;
+}
+
+input, textarea {
+    caret-color: #2cb7ca;
+}
+
+
+/* 清除默认样式 */
+ul,
+ol {
+    list-style: none;
+}
+/*清除输入框内阴影*/
+input,
+textarea,
+select,
+button {
+    outline: none;
+    border: 0;
+    -webkit-appearance: none;
+    appearance: none;
+}
+button,
+span,
+div {
+    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+    /* -webkit-user-modify:read-only; */
+}
+img {
+    border: 0;
+    vertical-align: middle;
+    max-width: 100%;
+    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+a {
+    text-decoration: none;
+    color: #3d3d3d;
+    -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
+    -webkit-user-select: none;
+    -moz-user-focus: none;
+    -moz-user-select: none;
+}
+/*禁用长按页面时的弹出菜单(iOS下有效) ,img和a标签都要加*/
+img,
+a {
+    -webkit-touch-callout: none;
+}
+
+input::placeholder {
+    color: #C0C4CC;
+}
+
+/* reset css end ------ */
+
+/* common css class start */
+[v-cloak] {
+    display: none!important;
+}
+
+.clearfix {
+    zoom: 1;
+}
+.clearfix:after {
+    clear: both;
+    height: 0;
+    overflow: hidden;
+    display: block;
+    visibility: hidden;
+    content: '';
+}
+.left {
+    float: left;
+}
+.right {
+    float: right;
+}
+.ellipsis {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+/* 超过2行省略号显示 */
+.ellipsis-2 {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: -webkit-box;
+    -webkit-line-clamp: 2;
+    -webkit-box-orient: vertical;
+}
+/* 超过3行省略号显示 */
+.ellipsis-3 {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: -webkit-box;
+    -webkit-line-clamp: 3;
+    -webkit-box-orient: vertical;
+}
+.scrollbar-none::-webkit-scrollbar {
+    display: none;
+}
+
+/* 禁止长按复制 加给body ---- */
+.no-touch {
+    -webkit-touch-callout: none;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+}
+
+.j-pd {
+    padding-left: 0.32rem;
+    padding-right: 0.32rem;
+}
+
+.j-arrow {
+    display: inline-block;
+    width: 0.26rem;
+    height: 0.26rem;
+    border: 2px solid #5f5e64;
+    border-bottom-color: transparent;
+    border-right-color: transparent;
+    background: 0 0;
+    transform: rotate(-45deg);
+}
+
+.highlight-text {
+    color: #2cb7ca!important;
+}
+.bg-white {
+    background-color: #fff;
+}
+[class*=clickable]:active {
+    background-color: #f2f3f5;
+}
+
+/* 
+    border-line-t 0.5px上边框
+    border-line-b 0.5px下边框
+*/
+.border-line-t,
+.border-line-b {
+    position: relative;
+}
+.border-line-t:after,
+.border-line-b:after {
+    content: '';
+    position: absolute;
+    left: 0;
+    width: 100%;
+    height: 1px;
+    transform: scaleY(0.6);
+    transform-origin: 0 0;
+    background: rgba(0, 0, 0, 0.05);
+    /* background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.05) 65%, transparent 35%); */
+}
+.border-line-t:after {
+    top: -1px;
+}
+.border-line-b:after {
+    bottom: -1px;
+}
+
+/* common css class end ---- */
+
+/* j-container布局  start ---- */
+.j-container {
+    display: flex;
+    flex-direction: column;
+    height: 100%;
+}
+
+.j-header {
+    position: relative;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+}
+
+.j-header.jy-app-header {
+    box-sizing: border-box;
+    padding: 10.66667vw 3.2vw 0 3.2vw;
+    height: 21.33333vw;
+    background: #fff;
+    z-index: 9;
+}
+
+.j-header .header-left,
+.j-header .header-title,
+.j-header .header-right {
+    display: flex;
+    align-items: center;
+}
+
+.j-header .header-left {
+    height: .6rem;
+    width: .6rem;
+}
+.j-header .header-left .j-icon {
+    height: .4rem;
+    width: .4rem;
+}
+
+.j-header .header-title {
+    position: absolute;
+    left: 50%;
+    font-size: 17px;
+    color: #171826;
+    transform: translateX(-50%);
+}
+
+.j-header .header-right {
+    height: 100%;
+    min-width: 0.4rem;
+    font-size: .3rem;
+}
+
+.j-header .header-left.hide,
+.j-header .header-right.hide {
+    visibility: hidden;
+}
+
+/* 头部透明 */
+.j-container .j-header.transparent-header {
+    background-color: transparent;
+}
+.j-container .j-header.transparent-header:after {
+    content: unset;
+}
+.j-header.transparent-header .header-left,
+.j-header.transparent-header .header-title {
+    color: #fff;
+}
+.j-header.transparent-header .header-title {
+    font-size: 0;
+}
+
+.j-main {
+    position: relative;
+    display: flex;
+    flex-direction: column;
+    flex: 1;
+    overflow-y: scroll;
+    overflow-x: hidden;
+    /* 所有都j-main开启ios-touch */
+    -webkit-overflow-scrolling: touch;
+}
+
+.j-main.calc-height-1px {
+    height: calc(100% + 1Px);
+}
+
+/* 单独关闭ios惯性滚动 */
+.j-main.no-ios-touch {
+    -webkit-overflow-scrolling: auto;
+}
+
+.j-footer {
+    box-shadow: 0px -2px 8px rgba(54, 147, 179, 0.051);
+}
+/* j-container布局  end ---- */
+
+@keyframes ballRotate {
+    0% {
+        transform: rotate(0);
+    }
+
+    100% {
+        transform: rotate(360deg);
+    }
+}
+
+.ball-clip-rotate {
+    position: absolute;
+    left: 50%;
+    top: 50%;
+    z-index: 2;
+    transform: translate(-50%, -50%);
+}
+
+.ball-clip-rotate .ball {
+    display: inline-block;
+    width: 26px;
+    height: 26px;
+    border-radius: 50%;
+    border: 3px solid #fff;
+    border-bottom-color: transparent;
+    background: 0 0;
+    -webkit-animation: ballRotate 0.75s 0s linear infinite;
+    animation: ballRotate 0.75s 0s linear infinite;
+}
+
+.j-mask {
+    position: fixed;
+    z-index: 1000;
+    top: 0;
+    right: 0;
+    left: 0;
+    bottom: 0;
+}
+
+.black {
+    background: rgba(0, 0, 0, 0.6);
+}
+
+.j-loading {
+    display: none;
+}
+
+.j-loading .j-toast {
+    position: fixed;
+    top: 45%;
+    left: 50%;
+    z-index: 1001;
+    padding: 0.2rem;
+    min-width: 2.2rem;
+    max-width: 6.2rem;
+    width: auto;
+    height: auto;
+    color: #fff;
+    font-size: 0.28rem;
+    text-align: center;
+    background: rgba(18, 18, 18, 0.7);
+    border-radius: 5px;
+    transform: translate(-50%, -50%);
+}
+
+.j-loading .j-toast.icon {
+    padding: 0.5rem 0.2rem;
+}
+
+.j-loading .j-toast.icon .j-toast_icon {
+    display: inline-block;
+    width: 38px;
+    height: 38px;
+}
+
+.j-loading .j-toast .j-toast_icon {
+    display: none;
+}
+
+.j-loading .j-toast .j-toast_content {
+    text-align: center;
+}
+
+.j-loading-icon {
+    display: inline-block;
+    width: 20px;
+    height: 20px;
+    vertical-align: baseline;
+    background: transparent url("data:image/svg+xml;charset=utf8, %3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E9E9E9' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23989697' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%239B999A' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23A3A1A2' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23ABA9AA' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23B2B2B2' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23BAB8B9' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23C2C0C1' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23CBCBCB' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23D2D2D2' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23DADADA' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E2E2E2' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E") no-repeat;
+    background-size: 100%;
+    -webkit-animation: ballRotate 1s steps(12) infinite;
+    animation: ballRotate 1s steps(12) infinite;
+}
+
+.j-button-group {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    width: 100%;
+    padding: 0.16rem 0.32rem 0.24rem;
+    background-color: #fff;
+    box-sizing: border-box;
+}
+
+.j-button-confirm,
+.j-button-cancel {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    flex: 1;
+    width: 100%;
+    height: 0.8rem;
+    font-size: 0.32rem;
+    line-height: inherit;
+    text-align: center;
+    border-radius: 0.16rem;
+}
+
+.single .j-button-confirm,
+.single .j-button-cancel {
+    height: 0.92rem;
+}
+
+.j-button-cancel {
+    margin-right: 0.26rem;
+    color: #5f5e64;
+    background-color: #edeff2;
+}
+
+.j-button-confirm {
+    color: #fff;
+    background-color: #2cb7ca;
+}
+
+button[disabled] {
+    opacity: 0.5;
+}
+
+.checkbox {
+    width: 0.4rem;
+    height: 0.4rem;
+    border: 1px solid #ddd;
+    border-radius: 50%;
+    margin-right: 0.2rem;
+    -webkit-appearance: none;
+    background: #fff;
+}
+
+.checkbox:checked {
+    border: 0;
+    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACpElEQVRogc1asa2DMBBlhIyQMpKNxAiMwAiMwAhswAgZgQrOHSVwLhiBERghvwCSwMdgOzYG6aQUhLw7v3u+Z+J5Bq4g724U6pCUTeIznlGGHQHsKcOBAPbT544yntOiTSnUoYnf/Rm0X7YRAXxShgMFfCkH4zkBjE8HTos21QYtCJ/xzDpwAhgTwN4k8OWK4GBlRYK8u1HGc2vA/yfSPaC+GwFPoQ6tVn1vNQoMfgJPyiYxzXXl3ijbSA88YOwa/BzKfUEKDK4C/hOSe8cD6vv1wOOLMhykGvtUtVFPotunDmDsHORBCPth1PoLUmeDStvUKdrUObgxqinE9xRt+q/6TjarZWW79cZFGXaiVQjy7va+0S/byDX4LYUhZZOIvrPoBafKw7BbVFOW1ozn7pt3B/xe9ed4QH33KNSho+pXv4CngC9SNon0zVcDTwFHNTqb/wTwqcX5TQry3KNHmmswfMYzEXif8Uz5mQwHT1r/55MGC+AJ4FPruVIJrJwRhToUbjA74LeATxuoHvg5gSMJFf24bO9YAy+7AgTwuQVAirfrmeULvBHxYDhINTEpm0SYhGgMsQ1+LG4v3f17B09rCyqa2Y0fzzCeq8pXJUpiPB/F6jTwc1GVJ1GNQ6dp3lJSLqkEyjbSG+YYDrKnBA+o77a8xruQunK219yeN/aGNaM0j9NTAvpmXqA2VsHDSigMWMrFdDnt1vY8xtpSep4hUz+qTGXbIG1K+iWMvW7137x1Y27UQtBzHyqd6A80qi/00AsqXfKETuWFh0OjLwSv/KLjSkkcbZjXTYLhoA3eeRI6tBFd86h8Inhzr1m/L+v7xESZQ6m8XCJnARckoketca+paNGmVuiievllG032tKKjtezf1f36u43PeEYAY1PV/gMeU6lGAhyHxgAAAABJRU5ErkJggg==) no-repeat center center;
+    background-size: 100% 100%;
+}
+
+.checkbox.transparent:checked {
+    border: 0;
+    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHBSURBVHgBzZiPcYIwFIeDE7hB6QR1gzqCG2g3cAPtBLqBdoK6Ae0EXCd4bmA3+PW9JlxTJEJCgnx37xQSku9IyL9MeQIg558FxxPHnGNqQvjmOJv45DhlWXZWKWCRFUcBf0p5VsWCC5tzEPpDvcT44SnHDvGRMqe+Mjn0q04FQffFzjKE9FCrFHQzEYZDWuFf801qThuOXA3HzNR5DfRnfS/mlUdmCZEa9u3YnHkAfZQ/EyOzGkjmyPHWcD+HPUYh7SdesbXqOzakF1VijvRs7dfB1wdHvgdJXCMtdZnljbxryfCOccgIh1v9h6CbM3Qa8ZX5rVMyXtoKhB7Bfd5kiIxwUTcSCbW5hq/38JdZwAPVkk4NUlt0l5nB3QJOobYHqKNUbxmYJqMuGaWCWoX23HeMICOUrlHTxbKh4n0kGeEUMjA2LxdUlMXdOnTq2CSQEfKqsAL+7CLLlK4O6lUI9C4itM/YrMRlnAs0w4u6H6+Nd9FtaojN3qkJPYkOsXqsILTtYjGmjeKAUmVnmVrzpehTUqbfYUNNTMYoQn8I1oawN0YspMMX8DgXypQn+DvSe1Z6IJWwj/QkPji+VMCR3g//T7SIqLP6vQAAAABJRU5ErkJggg==) no-repeat center center;
+    background-size: 100% 100%;
+}
+
+.j-button {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    height: 0.72rem;
+    padding: 0 0.2rem;
+    background-color: #f5f6f7;
+    color: #5f5e64;
+    border-radius: 0.08rem;
+}
+
+.j-button-item {
+    position: relative;
+    display: inline-block;
+    color: #171826;
+}
+
+.j-button-item.active {
+    color: #2abed1;
+    background-color: #e8fafd;
+}
+
+.j-button-item.active:after {
+    content: '';
+    position: absolute;
+    right: 0;
+    bottom: 0;
+    width: 0.24rem;
+    height: 0.24rem;
+    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKySURBVHgB7Zg/aNRQHMd/eXfWP6i9omJBhBOXa0W4bK6ni6Murro76Cgu1kF0aysOjnXTyTopLkEcHM8TxIMOHghFQfBAaUtp8/P9Qt+Rpnm99y+XBO6zXJJ7gc83v+S9XwIwZsyY0jIbdB54UFIuBF/mEfFu6QLUX7drR2qVeUC8RfulChDJT7KAbzbFsdIEaLxt19nBSL4eP16KADJ5ovAB9pMnCh1g9n276VVZgAA12RgGBaURdG4OkycKWYGZoHPHQ1hQGVu4CkSrq6I8UagKkDwgzOmcU5gAojUATXIPkGwNdMk1QFproEtuAYYtUKrkEsCVPDHyAC7liZEGUGkNdBnZQqbaGugykgrotAa6ZF4B3dZAlwpkiElrILg2PQVL/nm4ceYE/N3ahu6/jdRxmd1Cpq0BQfKPZs4O9inApY9fU8dWwTGiNUDD1iApT1AAGU4DDFoDRKPWIE2eePb9l/QcZ7eQ7QIlk7//7Qe8+flHep6TAHnJE9azUFJedfYQ2MgTVgGoNWAT7BPfnBbHnl6sw8mJA3C8WoErpyZhdWNTGsJWntM3XshkrQGJxyFBEk3iQJ7oGVWAWgOG8JxvHkr+93tzK7rycZKVcCTPn2B8px1gpzV4IvufJElWFqJx9LAbeU6IuKg1C+m0BrKrnIaJPLHmhVPKFaDWgMvfUx0vq0QSU3l++yyttPxXQ1dim9ZgeUdMVgljeU4I+JB+961A7KvBVTBEVgkbeURY7F5uvqRtaQVcvruKStw+dxqO8Wn28cqquTyfOtdZOCf2Ux9i1y/eriB59MJWt+X3xLE9C1mR5T0vvB6XJ3ZVIIuvBi5Iu/KCQQWy+mpgCz2w617op8kTUQWy/GpgSB8xfIEMFmTiAs/mxdshfX6te9zjM78pPqyx7eVey++rnPgfnLxxiLvERTEAAAAASUVORK5CYII=) no-repeat;
+    background-size: contain;
+}
+
+/* 空状态 配合j-icons中的img-empty和j-img使用 */
+/* 具体使用参考page_ent_follow.html */
+.empty {
+    display: flex;
+    align-items: center;
+    flex-direction: column;
+    flex: 1;
+    padding-top: 1.34rem;
+    width: 100%;
+}
+.empty .empty-img {
+    padding: .2rem;
+    width: 3.2rem;
+    height: 3.2rem;
+    margin-bottom: 0.24rem;
+    background-origin: content-box;
+}
+.empty .empty-text {
+    font-size: .26rem;
+    line-height: .4rem;
+    color: #9B9CA3;
+}
+
+.shiyong_common {
+    width: 5.92rem!important;
+    height: 4.48rem;
+}
+
+.shiyong_common .van-dialog__header{
+    font-size: 0.36rem;
+    font-weight: bold;
+    color: #000000;
+}
+
+.shiyong_common .van-dialog__message--has-title {
+    padding-top: 0.36rem;
+    padding-bottom: 0;
+}
+
+.shiyong_common .van-dialog__message--has-title .shiyong_text{
+    line-height: 0.4rem;
+    font-size: 0.28rem;
+    text-align: justify;
+    color: #5f5e64;
+}
+
+.shiyong_common .van-dialog__message--has-title .shiyong_buy{
+    margin-top: 0.36rem;
+    width: 100%;
+    height: 0.8rem;
+    background: #2ABED1;
+    border-radius: 4px;
+    color: #F7F9FA;
+    font-size: 0.32rem;
+}

BIN
src/web/staticres/common-module/messageCenter/image/dingyue@2x.png


BIN
src/web/staticres/common-module/messageCenter/image/fenxi@2x.png


BIN
src/web/staticres/common-module/messageCenter/image/fuwu@2x.png


BIN
src/web/staticres/common-module/messageCenter/image/huodong@2x.png


BIN
src/web/staticres/common-module/messageCenter/image/mesg.png


BIN
src/web/staticres/common-module/messageCenter/image/mesg_active.png


BIN
src/web/staticres/common-module/messageCenter/image/no-mesg.png


BIN
src/web/staticres/common-module/messageCenter/image/qiye@2x.png


BIN
src/web/staticres/common-module/messageCenter/image/quanbu@2x.png


BIN
src/web/staticres/common-module/messageCenter/image/xiangmu@2x.png


BIN
src/web/staticres/common-module/messageCenter/image/xitong@2x.png


+ 134 - 0
src/web/staticres/common-module/messageCenter/js/detail.js

@@ -0,0 +1,134 @@
+var vm = new Vue({
+  el: '#detailed',
+  delimiters: ['{', '}'],
+  data () {
+    return {
+      tit: '',
+      imgSrcs: [
+        {title: '活动优惠', url:'huodong'},
+        {title: '服务通知', url:'fuwu'},{title: '订阅消息', url:'dingyue'},
+        {title: '项目动态', url:'xiangmu'},{title: '企业动态', url:'qiye'},
+        {title: '分析报告', url:'fenxi'},{title: '系统通知', url:'xitong'}
+      ],
+      lists: [],
+      tabsList: {
+        offset: 1,
+        pageSize: 20,
+        totals: 0,
+        loading: true,
+        finished: false
+      }
+    }
+  },
+  created() {
+    let wxType = getType()
+    if (!wxType) {
+      checkMsgCount(true, 0)
+    }
+    let indx = getQueryString('type')
+    let nums = getQueryString('num')
+    if (nums != 0) {
+      this.setRead(indx)
+    }
+    this.tit = this.imgSrcs[indx - 1].title
+    document.title = this.imgSrcs[indx - 1].title
+  },
+  mounted () {
+    iosBackRefresh()
+  },
+  updated() {
+    let el = document.getElementById('descri')
+    el.scrollTop = el.scrollHeight
+  },
+  methods: {
+    // 点击分类修改分类下的消息为已读
+    setRead(val) {
+      $.ajax({
+        type:'POST',
+        url:'/jymessageCenter/setReadStatus',
+        data: {
+          msgType: val
+        },
+        success:function (res) {
+          console.log(res)
+        }
+      })
+    },
+    // 消息详情
+    msgData() {
+      const _this = this
+      $.ajax({
+        type: 'POST',
+        url: '/jymessageCenter/messageList',
+        data: {
+          needFilter: 0,
+          msgType: getQueryString('type'),
+          isRead: '-1',
+          offset: this.tabsList.offset,
+          pageSize: this.tabsList.pageSize
+        },
+        success: function (r) {
+          if (r && r.status == 1) {
+            _this.tabsList.offset++
+            if (_this.tabsList.offset === 1) {
+              if (r.data.total || r.data.total === 0) {
+                _this.tabsList.total = r.data.total
+              } else {
+                _this.tabsList.finished = true
+              }
+            }
+            if (Array.isArray(r.data.list) && r.data.list.length !== 0) {
+              setTimeout(() => {
+                r.data.list.map(function (v) {
+                  _this.lists.unshift({
+                    id: v.id,
+                    msg_type: v.msg_type,
+                    title: v.title,
+                    content: v.content,
+                    createtime: v.createtime,
+                    link: v.link,
+                    url: v.url
+                  })
+                })
+              }, 200)
+            } else {
+              _this.tabsList.finished = true
+            }
+    
+            // _this.tabsList.loading = false
+            if (_this.tabsList.total !== -1 && _this.tabsList.total <= _this.lists.length) {
+              _this.tabsList.finished = true
+            }
+          }
+        }
+      })
+    },
+    msgClick(url) {
+      console.log(url)
+      let wxType = getType()
+      let appType = androidOrIOS()
+      if (wxType) {
+        if (url.weChatUrl) {
+          location.href = url.weChatUrl
+        } else {
+          return
+        }
+      } else {
+        if (appType == 'android') {
+          if (url.androidUrl) {
+            location.href = url.androidUrl
+          } else {
+            return
+          }
+        } else {
+          if (url.iosUrl) {
+            location.href = url.iosUrl
+          } else {
+            return
+          }
+        }
+      }
+    }
+  }
+})
+

+ 138 - 0
src/web/staticres/common-module/messageCenter/js/func.js

@@ -0,0 +1,138 @@
+
+// 判断是否为微信浏览器
+function getType () {
+  var ua = window.navigator.userAgent.toLowerCase()
+  if(ua.match(/MicroMessenger/i) == 'micromessenger'){
+    return true
+  } else {
+    return false
+  }
+}
+
+// ios or android
+function androidOrIOS () {
+  var u = navigator.userAgent.toLowerCase()
+  var agent = null;
+  if (/iphone|ipod|ipad|ios/.test(u)) {
+    agent = 'ios'
+  } else if (/(Android)/i.test(u)) {
+    agent = 'android'
+  }
+  return agent
+}
+function isApp() {
+  return /Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)
+}
+// android
+function androided() {
+  var u = navigator.userAgent
+  return u.indexOf("Chrome") > -1
+}
+
+function iosBackRefresh () {
+  var isPageHide = false;
+  window.addEventListener('pageshow', function () {
+      if (isPageHide) {
+          location.reload();
+      }
+  });
+  window.addEventListener('pagehide', function () {
+      isPageHide = true;
+  });
+}
+
+//获取url中"?"符后的字符串并正则匹配
+function getQueryString(name) {
+  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
+  var r = window.location.search.substr(1).match(reg);
+  var context = "";
+  if (r != null)
+    context = r[2];
+    reg = null;
+    r = null;
+  return context == null || context == "" || context == "undefined" ? "" : context;
+}
+
+function dateTime (date, fmt='yyyy年MM月dd日 hh:mm') {// 时间戳转换
+  if (!date) return ''
+  d = new Date(date)
+  var o = {
+    "M+": d.getMonth() + 1, //月份 
+    "d+": d.getDate(), //日 
+    "h+": d.getHours(), //小时 
+    "m+": d.getMinutes(), //分 
+    "s+": d.getSeconds() //秒
+  }
+
+  // 根据y的长度来截取年
+  if (/(y+)/.test(fmt)){ 
+    fmt = fmt.replace(RegExp.$1, (d.getFullYear() + "").substr(4 - RegExp.$1.length))
+  }
+  for (var k in o){
+    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)))
+  }
+  return fmt
+}
+function dateTime (date, fmt='yyyy年MM月dd日 hh:mm') {// 时间戳转换
+  if (!date) return ''
+  var changes =  date ? String(date).replace(/-/g, '/') : ''
+  d = new Date(changes)
+  var o = {
+    "M+": d.getMonth() + 1, //月份 
+    "d+": d.getDate(), //日 
+    "h+": d.getHours(), //小时 
+    "m+": d.getMinutes(), //分 
+    "s+": d.getSeconds() //秒
+  }
+
+  // 根据y的长度来截取年
+  if (/(y+)/.test(fmt)){ 
+    fmt = fmt.replace(RegExp.$1, (d.getFullYear() + "").substr(4 - RegExp.$1.length))
+  }
+  for (var k in o){
+    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)))
+  }
+  return fmt
+}
+function dateYear () {// 获取当年的第一天
+  var date = new Date()
+  date.setDate(1)
+  date.setMonth(0)
+  return date.getTime()
+}
+function dateLast () {// 获取昨天
+  var day = new Date()
+  day.setTime(day.getTime()-24*60*60*1000)
+  return dateTime(day,'yyyy/MM/dd')
+}
+function dateMatter (time, type) {// 时间转换
+  var iosTime = time ? time.replace(/-/g, '/') : '' // 兼容ios
+  var timeStr = ''
+  var currentDay = dateTime(time,'yyyy/MM/dd') // 当前日期
+  var lingDay = new Date(new Date().toLocaleDateString()).getTime() // 获取当天0点
+  var isTime = new Date(iosTime) - lingDay
+  var diff = isTime < 0 ? '昨天' : ''
+  var isDate = new Date(iosTime) - dateYear()
+  if (isDate < 0) {
+    timeStr = dateTime(time)
+  } else {
+    if (currentDay === dateLast()) {
+      if (type === 'out') {
+        timeStr = diff
+      } else {
+        timeStr = diff + dateTime(time,'hh:mm')
+      }
+    } else {
+      if (isTime < 0) {
+        if (type === 'out') {
+          timeStr = dateTime(time,'MM月dd日')
+        } else {
+          timeStr = dateTime(time,'MM月dd日 hh:mm')
+        }
+      } else {
+        timeStr = dateTime(time,'hh:mm')
+      }
+    }
+  }
+  return timeStr
+}

+ 137 - 0
src/web/staticres/common-module/messageCenter/js/index.js

@@ -0,0 +1,137 @@
+var vm = new Vue({
+  el: '#mesged',
+  delimiters: ['{', '}'],
+  data: function () {
+    return {
+      isToggle: false,
+      isRow: false,
+      lastData: [],
+      msgList: [],
+      timer: null,
+      imgSrcs: [
+        {title: '活动优惠', url:'huodong'},
+        {title: '服务通知', url:'fuwu'},{title: '订阅消息', url:'dingyue'},
+        {title: '项目动态', url:'xiangmu'},{title: '企业动态', url:'qiye'},
+        {title: '分析报告', url:'fenxi'},{title: '系统通知', url:'xitong'}
+      ]
+    }
+  },
+  created() {
+    this.lastMsg()
+    this.msgData()
+    let wxType = getType()
+    if (!wxType) {
+      checkMsgCount(true, 0)
+    }
+  },
+  mounted () {
+    iosBackRefresh()
+    keepQuest()
+  },
+  beforeDestroy() {
+    clearInterval(this.timer)
+  },
+  methods: {
+    // 置顶消息
+    lastMsg() {
+      const _this = this
+      $.ajax({
+        type:'POST',
+        url:'/jymessageCenter/lastMessage',
+        success:function (res) {
+          if (res && res.status == 1) {
+            _this.lastData = $.isEmptyObject(res.data) ? false : res.data
+            if (res.data && res.data.content && res.data.content.length > 46) {
+              _this.isRow = true
+            } else {
+              _this.isRow = false
+            }
+          }
+        }
+      })
+    },
+    // 消息列表
+    msgData() {
+      const _this = this
+      $.ajax({
+        type:'POST',
+        url:'/jymessageCenter/classAndNew',
+        success:function (res) {
+          if (res && res.status == 1) {
+            _this.msgList = $.isEmptyObject(res.data) ? false : res.data
+          }
+        }
+      })
+    },
+    // 点击置顶消息为已读
+    topRead(ids) {
+      const _this = this
+      $.ajax({
+        type:'POST',
+        url:'/jymessageCenter/markRead',
+        data: {
+          msgId: ids,
+          msgType: type
+        },
+        success:function (res) {
+          console.log(res)
+          _this.msgData()
+        }
+      })
+    },
+    // 置顶消息跳转
+    msgClick(url, num, ids, type) {
+      console.log(url)
+      let wxType = getType()
+      let appType = androidOrIOS()
+      if (wxType) {
+        if (url.weChatUrl) {
+          if (!num) {
+            this.topRead(ids, type)
+          }
+          setTimeout(() => {
+            location.href = url.weChatUrl
+          }, 300)
+        } else {
+          return
+        }
+      } else {
+        if (appType == 'android') {
+          if (url.androidUrl) {
+            location.href = url.androidUrl
+            if (!num) {
+              this.topRead(ids)
+            }
+          } else {
+            return
+          }
+        } else {
+          if (url.iosUrl) {
+            if (!num) {
+              this.topRead(ids)
+            }
+            setTimeout(() => {
+              location.href = url.iosUrl
+            }, 300)
+          } else {
+            return
+          }
+        }
+      }
+    },
+    // 置顶消息展开,收起
+    toggleClick() {
+      this.isToggle = !this.isToggle
+    },
+    // 列表消息跳转详情页
+    msgDetailed(type, num) {
+      let wxType = getType()
+      if (wxType) {
+          location.href = '/weixin/frontPage/messageCenter/sess/detail?type=' + type + '&num=' + num
+      } else {
+          location.href = '/jyapp/frontPage/messageCenter/sess/detail?type=' + type + '&num=' + num
+      }
+    }
+  }
+})
+

+ 1 - 1
src/web/staticres/common-module/order-list/js/order-detail.js

@@ -511,7 +511,7 @@ var vm = new Vue({
       }
 
       var result = [prodType, buyCount]
-      if (order.vip_endtime) {
+      if (order.order_status == 1 && order.vip_endtime) {
         result.push(date)
       }
       return result

+ 6 - 3
src/web/staticres/common-module/order-list/js/order-list-config.js

@@ -24,7 +24,6 @@ var assetsConf = {
   canBuyAgainProductions: [
     '历史数据',
     '数据流量包',
-    '省份订阅包'
   ],
   // 支持开发票的产品product_type
   canInvokeProductions: [
@@ -325,9 +324,13 @@ var assetsConf = {
       wx: '/weixin/common/areaPack/orderDetail',
       app: '/jyapp/common/areaPack/orderDetail'
     },
+    renew: {
+      wx: '/areaPack/wx/page/buy?type=renew',
+      app: '/jyapp/areaPack/page/buy?type=renew'
+    },
     buyAgain: {
-      wx: '/areaPack/wx/page/buy',
-      app: '/jyapp/areaPack/page/buy'
+      wx: '/areaPack/wx/page/buy?type=buy',
+      app: '/jyapp/areaPack/page/buy?type=buy'
     },
     imgMap: {
       headerImg: {

+ 37 - 1
src/web/staticres/common-module/order-list/js/order-list.js

@@ -876,6 +876,26 @@ var vm = new Vue({
           }
           break
         }
+        case '省份订阅包': {
+          if (orderStatus === 1) {
+            // 续费升级的判断(再次购买按钮值修改)
+            // i_pp_status : -1 到期  0未购买 1已购买
+            var vipStatus = order.i_pp_status
+            if (order.lastbuy_code) {
+              if (vipStatus === -1) {
+                state.bugAgainShow = true
+                state.bugAgainText = '再次购买'
+                state.buyState = 2
+              }
+              if (vipStatus === 1) {
+                state.bugAgainShow = true
+                state.bugAgainText = '续费'
+                state.buyState = 1
+              }
+            }
+          }
+          break
+        }
         default: {
           break
         }
@@ -1159,6 +1179,22 @@ var vm = new Vue({
           }
           break
         }
+        case '省份订阅包': {
+          // buyState  1续费 2再次购买
+          var buyState = bConf.buyState
+          if (buyState === 1) {
+            var href = assetsConf.areaPackLink.renew[platform]
+            if (href) {
+              this.goToLink(`${href}&orderCode=${orderCode}`)
+            }
+          } else if (buyState === 2) {
+            var href = assetsConf.areaPackLink.buyAgain[platform]
+            if (href) {
+              this.goToLink(`${href}&orderCode=${orderCode}`)
+            }
+          }
+          break
+        }
         default: {
           break
         }
@@ -2100,7 +2136,7 @@ var vm = new Vue({
 
 
       var result = [prodType, buyCount]
-      if (order.vip_endtime) {
+      if (order.order_status == 1 && order.vip_endtime) {
         result.push(date)
       }
       return result

+ 18 - 7
src/web/staticres/common-module/vipsubscribe/js/vip-subscribe-set-template.js

@@ -670,7 +670,6 @@ var subComponent = {
                     var href = '/jyapp/areaPack/page/buy?type=buy'
                   }
                 }
-                
                 location.href = href
               }
             }]
@@ -678,10 +677,12 @@ var subComponent = {
       } 
       else {
         // this.linkobj.area = '/jyapp/big/page/set_area?callback=setting_save'
-        if (location.href.indexOf('front') !== -1) {
-          this.linkobj.area = '/areaPack/wx/page/set_area'
-        } else {
-          this.linkobj.area = '/jyapp/areaPack/page/set_area'
+        if (this.vSwitch === 'f') {
+          if (location.href.indexOf('front') !== -1) {
+            this.linkobj.area = '/areaPack/wx/page/set_area'
+          } else {
+            this.linkobj.area = '/jyapp/areaPack/page/set_area'
+          }
         }
       }
     },
@@ -702,7 +703,16 @@ var subComponent = {
     },
     // 打开信息类型
     openInfoType: function () {
-      this.infoTypeMenu = true
+      if (this.vSwitch === 'f') {
+        this.infoTypeMenu = true
+      } else {
+        if (location.href.indexOf('front') !== -1) {
+          location.href = '/front/vipsubscribe/toSetInfoTypePage'
+        } else {
+          location.href = '/jyapp/vipsubscribe/toSetInfoTypePage'
+        }
+        
+      }
     },
     // 重置信息类型
     reset: function () {
@@ -766,7 +776,8 @@ var subComponent = {
           url: '/publicapply/free/subscribe',
           type: 'POST',
           success: function (res) {
-            console.info(res)
+              let freeArea = JSON.stringify(res.data)
+              sessionStorage.setItem('sub_free_state', freeArea)
               _this.UserSubscribe = res
               _this.info.area = res.data.area
               _this.userAreaNum = res.data.areanum

+ 235 - 0
src/web/staticres/frontRouter/pc/mesgCenter/css/index-pc.css

@@ -0,0 +1,235 @@
+
+[v-cloak] {
+    display: none !important;
+}
+
+.flex {
+    display: flex;
+    align-items: center;
+  }
+.mesg-container {
+  padding-top: 64px;
+  min-height: calc(100vh - 364px);
+  background: #F2F4F7;
+}
+.main-mesg {
+  width: 1000px;
+  margin: 0 auto;
+  padding: 52px 0 80px 0;
+}
+.main-mesg h3 {
+  font-size: 20px;
+  font-weight: 700;
+  color: #1d1d1d;
+  line-height: 30px;
+}
+.main-mesg .tips {
+  display: flex;
+  flex-direction: initial;
+  padding: 20px 20px 12px;
+  background: #fff;
+  border-radius: 4px;
+  margin-top: 24px;
+  cursor: pointer;
+}
+.main-mesg .tips .imgs {
+  position: relative;
+  margin-right: 12px;
+}
+.main-mesg .tips .imgs img {
+  width: 40px;
+  height: 40px;
+  margin-top: 4px;
+}
+.main-mesg .tips .dots {
+  position: absolute;
+  right: 0;
+  top: 7px;
+  width: 6px;
+  height: 6px;
+  background: #fb483d;
+  border: 1px solid #ffffff;
+  border-radius: 50%;
+}
+.main-mesg .tips .r-lis {
+  width: 100%;
+}
+.main-mesg .tips .r-lis .title {
+  display: flex;
+  flex-direction: initial;
+  justify-content: space-between;
+  font-size: 14px;
+  color: #1d1d1d;
+  font-weight: 700;
+  line-height: 22px;
+}
+.main-mesg .tips .r-lis .title span:nth-child(2) {
+  font-size: 12px;
+  color: #999;
+  font-weight: 500;
+}
+.main-mesg .tips .r-lis p {
+  font-size: 14px;
+  color: #686868;
+  line-height: 22px;
+  margin-top: 4px;
+  text-align: left;
+  word-break: break-all;
+}
+.main-mesg .tips .r-lis p a {
+  color: #2CB7CA;
+  text-decoration: none;
+}
+.main-mesg .tabs-mesg {
+  background: #fff;
+  border-radius: 4px;
+  margin-top: 20px;
+  box-shadow: 0px 0px 18px 0px rgba(0,0,0,0.02); 
+}
+.main-mesg .tabs-mesg .el-tabs .el-tabs__item {
+  height: auto;
+  padding: 0;
+  padding: 0 34.5px;
+}
+.el-tabs--top .el-tabs__item.is-top:nth-child(2) {
+  padding-left: 0!important;
+}
+.main-mesg .tabs-mesg .el-tabs .el-tabs__item .msg-label {
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  width: 56px;
+}
+.main-mesg .tabs-mesg .el-tabs .el-tabs__item .msg-label .b-item {
+  position: absolute;
+  right: -2px;
+  top: 2px;
+  height: 18px;
+  line-height: 16px;
+  padding: 0 4px;
+  border: 1px solid #fff;
+  background: #ff3a20;
+  border-radius: 10px;
+  font-size: 12px;
+  color: #fff;
+}
+.main-mesg .tabs-mesg .el-tabs .el-tabs__item .msg-label .words {
+  font-size: 14px;
+  color: #1d1d1d;
+  line-height: 22px;
+  margin: 8px 0 16px 0;
+}
+.main-mesg .tabs-mesg .el-tabs .el-tabs__item .msg-label img {
+  width: 48px;
+  height: 48px;
+}
+.main-mesg .tabs-mesg .el-tabs .el-tabs__nav {
+  margin: 16px 0 0 35px;
+}
+.main-mesg .tabs-mesg .el-tabs .el-tabs__active-bar {
+  width: 56px!important;
+  height: 7px;
+  background: url('/images/pc/lines.png') no-repeat;
+  background-size: cover;
+}
+.main-mesg .tabs-mesg .el-tabs .el-tabs__item.is-active .msg-label p, .main-mesg .tabs-mesg .el-tabs .el-tabs__item:hover .msg-label p {
+  color: #2CB7CA;
+}
+.main-mesg .tabs-mesg .el-tabs .el-tabs__nav-wrap::after {
+  height: 1px;
+}
+.main-mesg .tabs-mesg .el-tabs .el-tabs__header {
+  margin: 0;
+}
+.main-mesg .tabs-mesg .el-tabs .el-tabs__content {
+  padding: 8px 0;
+}
+.main-mesg .is-tabs .el-tabs .el-tabs__content {
+  padding-bottom: 16px;
+}
+.main-mesg .tab-tips {
+  margin-top: 0;
+  padding: 0;
+  padding: 16px 20px 0 20px;
+}
+.main-mesg .tab-tips .r-lis {
+  padding-bottom: 16px;
+}
+.main-mesg .tab-tips:not(:last-child) .r-lis {
+  box-shadow: 0px -1px 0px 0px rgb(0 0 0 / 5%) inset;
+}
+.main-mesg .tab-tips:hover {
+  cursor: pointer;
+  background: #f5f6f7;
+}
+.main-mesg .tab-tips .r-lis:hover .title {
+  color: #2CB7CA;
+}
+.main-mesg .tab-tips .r-lis .title {
+  font-weight: 400;
+}
+.no-data {
+  margin: 80px auto 80px auto;
+  text-align: center;
+}
+.no-data img {
+  width: 200px;
+  height: 200px;
+  overflow: visible;
+}
+.no-data .tip-text {
+  margin-top: 20px;
+  color: #999;
+  font-size: 14px;
+  line-height: 22px;
+}
+.tabs-mesg .el-pagination {
+  margin: 28px 0 20px 0;
+  padding: 2px 15px;
+  text-align: right;
+  color: rgba(0, 0, 0, 0.65);
+}
+
+.tabs-mesg .el-pagination .el-pager .active + li {
+  border: 1px solid #D9D9D9;
+}
+
+.tabs-mesg .el-pagination ul li {
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+  background: #fff!important;
+  border: 1px solid #D9D9D9;
+  font-weight: normal;
+  border-radius: 2px;
+  padding: 0;
+}
+
+.tabs-mesg .el-pagination ul li:hover {
+  color: #2CB7CA!important;
+}
+
+.tabs-mesg .el-pagination.is-background .btn-prev, .tabs-mesg .el-pagination.is-background .btn-next {
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+  background: none;
+  border: 1px solid #D9D9D9;
+}
+
+.tabs-mesg .el-pagination.is-background .el-pager li:not(.disabled).active {
+  background: #2CB7CA!important;
+  border-radius: 2px;
+  border-color: #2CB7CA;
+}
+
+.tabs-mesg .el-pagination.is-background .el-pager li:not(.disabled).active:hover {
+  color: #fff!important;
+}
+
+.tabs-mesg .el-pagination.is-background .btn-next, 
+.tabs-mesg .el-pagination.is-background .btn-prev, 
+.tabs-mesg .el-pagination.is-background .el-pager li {
+  color: #1d1d1d;
+}

BIN
src/web/staticres/frontRouter/pc/mesgCenter/image/no-mesg.png


+ 109 - 0
src/web/staticres/frontRouter/pc/mesgCenter/js/index-pc.js

@@ -0,0 +1,109 @@
+
+var vm = new Vue({
+  el: '.mesg-container',
+  delimiters: ['{', '}'],
+  data: function () {
+    return {
+      activeName: '0',
+      counts: [],
+      isTabs: '',
+      imgSrcs: [
+        {type: '0', title: '全部', url:'/images/pc/quanbu@2x.png'},{type: '1', title: '活动优惠', url:'/images/pc/huodong@2x.png'},
+        {type: '2', title: '服务通知', url:'/images/pc/fuwu@2x.png'},{type: '3', title: '订阅消息', url:'/images/pc/dingyue@2x.png'},
+        {type: '4', title: '项目动态', url:'/images/pc/xiangmu@2x.png'},{type: '5', title: '企业动态', url:'/images/pc/qiye@2x.png'},
+        {type: '6', title: '分析报告', url:'/images/pc/fenxi@2x.png'},{type: '7', title: '系统通知', url:'/images/pc/xitong@2x.png'}
+      ],
+      tabsList: {
+        lasts: [],
+        lists: [],
+        offset: 1,
+        pageSize: 20,
+        totals: 0,
+      }
+    }
+  },
+  created() {
+    this.tabsCount()
+    this.tabsData('0')
+  },
+  methods: {
+    tabClick(val) {
+      this.isTabs = val.name
+      this.tabsList.lists = []
+      this.tabsList.offset = 1
+      this.tabsData(val.name)
+    },
+    tabsCount() {
+      const _this = this
+      $.ajax({
+        type:'GET',
+        url:'/jymessageCenter/ClassCount',
+        data: {},
+        success:function (res) {
+          if (res && res.status == 1) {
+            _this.counts = res.data
+          }
+        }
+      })
+    },
+    tabsData(num) {
+      const _this = this
+      $.ajax({
+        type:'POST',
+        url:'/jymessageCenter/messageList',
+        data: {
+          needFilter: 0,
+          msgType: num,
+          isRead: '-1',
+          offset: this.tabsList.offset,
+          pageSize: this.tabsList.pageSize
+        },
+        success:function (res) {
+          if (res && res.status == 1) {
+            _this.tabsList.lasts = $.isEmptyObject(res.data.last) ? false : res.data.last
+            _this.tabsList.lists = $.isEmptyObject(res.data.list) ? false : res.data.list
+            _this.tabsList.totals = res.data.total
+          }
+        }
+      })
+    },
+    onPageChange(page) {
+      this.tabsList.offset = page
+      this.tabsList.lists = []
+      this.tabsData(this.isTabs)
+    },
+    readed(ids, type) {
+      const _this = this
+      $.ajax({
+        type:'GET',
+        url:'/jymessageCenter/markRead',
+        data: {
+          msgId: ids,
+          msgType: type
+        },
+        success:function () {
+          _this.tabsData(_this.isTabs)
+          _this.tabsCount()
+          message.checkOpened()
+        }
+      })
+    },
+    linked(id, url, str, num, type) {
+      if (url) {
+        location.href = url
+      }
+      if (num == 1) {
+        if (url) {
+          this.readed(id, type)
+        }
+      }
+      if (num == 2) {
+        if (!str) {
+          this.readed(id, type)
+        }
+      }
+    }
+  }
+})
+
+

BIN
src/web/staticres/images/pc/dingyue@2x.png


BIN
src/web/staticres/images/pc/fenxi@2x.png


BIN
src/web/staticres/images/pc/fuwu@2x.png


BIN
src/web/staticres/images/pc/guan.png


BIN
src/web/staticres/images/pc/guan_active.png


BIN
src/web/staticres/images/pc/huodong@2x.png


BIN
src/web/staticres/images/pc/lines.png


BIN
src/web/staticres/images/pc/mesg.png


BIN
src/web/staticres/images/pc/mesg_active.png


BIN
src/web/staticres/images/pc/mesg_fff.png


BIN
src/web/staticres/images/pc/no-mesg.png


BIN
src/web/staticres/images/pc/qiye@2x.png


BIN
src/web/staticres/images/pc/quanbu@2x.png


BIN
src/web/staticres/images/pc/xiangmu@2x.png


BIN
src/web/staticres/images/pc/xitong@2x.png


BIN
src/web/staticres/images/tabbar/book.png


BIN
src/web/staticres/images/tabbar/book_active.png


BIN
src/web/staticres/images/tabbar/box.png


BIN
src/web/staticres/images/tabbar/box_active.png


BIN
src/web/staticres/images/tabbar/home.png


BIN
src/web/staticres/images/tabbar/home_active.png


BIN
src/web/staticres/images/tabbar/mesg.png


BIN
src/web/staticres/images/tabbar/mesg_active.png


BIN
src/web/staticres/images/tabbar/mine.png


BIN
src/web/staticres/images/tabbar/mine_active.png


+ 53 - 0
src/web/staticres/js/dateFunc.js

@@ -0,0 +1,53 @@
+function dateTime (date, fmt='yyyy年MM月dd日 hh:mm') {// 时间戳转换
+  if (!date) return ''
+  d = new Date(date)
+  var o = {
+    "M+": d.getMonth() + 1, //月份 
+    "d+": d.getDate(), //日 
+    "h+": d.getHours(), //小时 
+    "m+": d.getMinutes(), //分 
+    "s+": d.getSeconds() //秒
+  }
+
+  // 根据y的长度来截取年
+  if (/(y+)/.test(fmt)){ 
+    fmt = fmt.replace(RegExp.$1, (d.getFullYear() + "").substr(4 - RegExp.$1.length))
+  }
+  for (var k in o){
+    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)))
+  }
+  return fmt
+}
+function dateYear () {// 获取当年的第一天
+  var date = new Date()
+  date.setDate(1)
+  date.setMonth(0)
+  return date.getTime()
+}
+function dateLast () {// 获取昨天
+  var day = new Date()
+  day.setTime(day.getTime()-24*60*60*1000)
+  return dateTime(day,'yyyy/MM/dd')
+}
+function dateMatter (time) {// 时间转换
+  var timeStr = ''
+  var currentDay = dateTime(time,'yyyy/MM/dd') // 当前日期
+  var lingDay = new Date(new Date().toLocaleDateString()).getTime() // 获取当天0点
+  var isTime = new Date(time) - lingDay
+  var diff = isTime < 0 ? '昨天' : ''
+  var isDate = new Date(time) - dateYear()
+  if (isDate < 0) {
+    timeStr = dateTime(time)
+  } else {
+    if (currentDay === dateLast()) {
+      timeStr = diff + dateTime(time,'hh:mm')
+    } else {
+      if (isTime < 0) {
+        timeStr = dateTime(time,'MM月dd日 hh:mm')
+      } else {
+        timeStr = dateTime(time,'hh:mm')
+      }
+    }
+  }
+  return timeStr
+}

+ 5 - 1
src/web/staticres/js/login.js

@@ -335,6 +335,7 @@ function checkMenuForEnt () {
         }
     })
 }
+
 //查询用户信息,响应页面登录信息
 var logic = function(data,num){
 	if(data.result=="ok"){
@@ -419,6 +420,7 @@ var logic = function(data,num){
       checkMenuForEnt()
 			infoListCss();
 			commonMouseEvent();
+            message.init()
 		}catch(e){}
 	}
 }
@@ -605,7 +607,8 @@ var signout = function(){
 	$(".superSearch").show();
 	$.post("/front/signOut",function(data){
 		if(data=="ok"){
-		  clearLoginStorage(/-login-clear/)
+            $('#noticed').hide()
+            clearLoginStorage(/-login-clear/)
 			try{
 				$.cookie("userid_secure","",{expires:-1,path:"/",domain:document.domain.replace(/[^.]+/,"")});
 			}catch(e){
@@ -700,6 +703,7 @@ var haslogin = function(num,kyorpn,url){
         checkMenuForEnt()
 				infoListCss();
 				commonMouseEvent();
+                message.init()
 			}catch(e){}
 		}else{
 			$("#login").html("<button class='loginBtn' data-toggle='modal' onclick='openLoginDig()'>登录</button>");

+ 177 - 0
src/web/staticres/js/message.js

@@ -0,0 +1,177 @@
+// 点击置顶消息为已读
+function topRead(ids, type) {
+    $.ajax({
+      type:'POST',
+      url:'/jymessageCenter/markRead',
+      data: {
+        msgId: ids,
+        msgType: type
+      },
+      success:function (res) {
+        message.checkMessage()
+        message.checkOpened()
+      }
+    })
+  }
+// 消息悬浮窗列表跳转详情页
+function linked (ids, url, num, type) {
+    console.info(ids, url, num, type)
+    if (url) {
+        window.location.href = url
+    }
+    if (num == 0) {
+        topRead(ids, type)
+    }
+}
+function Message() {
+    this.isOpened = false
+    this.imgArrs = ['quanbu', 'huodong', 'fuwu', 'dingyue', 'xiangmu', 'qiye', 'fenxi', 'xitong']
+    this.messageInfoList = {}
+    
+    // 初始化
+    this.init = function () {
+        if (!loginflag) return
+        this.checkOpened()
+        this.checkMessage()
+        this.bindEvents()
+    }
+    // 悬浮窗列表数据请求
+    this.checkMessage = function () {
+        var _this = this
+        $('#noticed').show()
+        $.ajax({
+            url: '/jymessageCenter/messageList',
+            type: 'POST',
+            data: {
+                needFilter: 1,
+                msgType: '0',
+                isRead: '-1',
+                offset: 0,
+                pageSize: 5
+            },
+            success: function (r) {
+                if (r && r.status === 1) {
+                    // message列表数据赋值
+                    _this.messageInfoList = r.data
+                    _this.renderMessageList()
+                }
+            }
+        })
+    }
+    // 判断今天是否首次打开过剑鱼网站和是否有未读消息
+    this.checkOpened = function () {
+        var _this = this
+        $.ajax({
+            url: '/jymessageCenter/isMsgOpen',
+            type: 'GET',
+            success: function (r) {
+                if (r && r.status === 1) {
+                    // 头部导航消息中心显示/隐藏
+                    if (r.data.count > 0) {
+                        $('#tips').show()
+                        $('#tips').html(r.data.count > 99 ? '99+' : r.data.count)
+                        $('#noNum').html(r.data.count)
+                    } else {
+                        $('#tips').hide()
+                    }
+
+                    _this.isOpened = r.data.open
+                    _this.openedChange()
+                }
+            }
+        })
+    }
+    
+    // 消息浮窗显示隐藏
+    this.openedChange = function () {
+        var isOpened = this.isOpened
+        if (isOpened) {
+            $('#public-nav .iner .jynav li').find('.jy-list-msg').removeClass('jynav-list')
+            $('#public-nav .iner .jynav li').find('.jy-list-msg').show()
+            $(this).find('.msg-img1').hide()
+            $(this).find('.msg-img2').show()
+        } else {
+            $('#public-nav .iner .jynav li').find('.jy-list-msg').addClass('jynav-list')
+            $('#public-nav .iner .jynav li').find('.jy-list-msg').hide()
+        }
+    }
+    
+    // 渲染浮窗消息列表数据
+    this.renderMessageList = function () {
+        var imgArrs = this.imgArrs
+        var messageInfoList = this.messageInfoList
+        var lists = $.isEmptyObject(messageInfoList.list) ? false : messageInfoList.list
+
+        var lasts = $.isEmptyObject(messageInfoList.last) ? false : messageInfoList.last
+        var temp = ''
+        if (lasts) {
+            if (lasts.isRead == 0) {
+                temp += '<div id="firsted" class="m-li" onclick="linked(\''+lasts.id+'\',\''+lasts.link+'\',\''+lasts.isRead+'\',\''+lasts.msg_type+'\')"><div class="lis-cont"><img src="/images/pc/'+imgArrs[lasts.msg_type]+'@2x.png"><i class="dots"></i><div class="r-lis"><div class="title"><span>'+lasts.title+'</span><span>'+dateMatter(lasts.createtime)+'</span></div><p>'+lasts.content+'</p></div></div></div>'
+            } else {
+                temp += '<div id="firsted" class="m-li" onclick="linked(\''+lasts.id+'\',\''+lasts.link+'\',\''+lasts.isRead+'\',\''+lasts.msg_type+'\')"><div class="lis-cont"><img src="/images/pc/'+imgArrs[lasts.msg_type]+'@2x.png"><div class="r-lis"><div class="title"><span>'+lasts.title+'</span><span>'+dateMatter(lasts.createtime)+'</span></div><p>'+lasts.content+'</p></div></div></div>'
+            }
+        }
+        if (lists) {
+            for (var i = 0; i < lists.length; i++) {
+                if (lists[i].isRead == 0) {
+                    temp += '<div class="m-li" onclick="linked(\''+lists[i].id+'\',\''+lists[i].link+'\',\''+lists[i].isRead+'\',\''+lists[i].msg_type+'\')"><div class="lis-cont"><img src="/images/pc/'+imgArrs[lists[i].msg_type]+'@2x.png"><i class="dots"></i><div class="r-lis"><div class="title"><span>'+lists[i].title+'</span><span>'+dateMatter(lists[i].createtime)+'</span></div><p>'+lists[i].content+'</p></div></div></div>'
+                } else {
+                    temp += '<div class="m-li" onclick="linked(\''+lists[i].id+'\',\''+lists[i].link+'\',\''+lists[i].isRead+'\',\''+lists[i].msg_type+'\')"><div class="lis-cont"><img src="/images/pc/'+imgArrs[lists[i].msg_type]+'@2x.png"><div class="r-lis"><div class="title"><span>'+lists[i].title+'</span><span>'+dateMatter(lists[i].createtime)+'</span></div><p>'+lists[i].content+'</p></div></div></div>'
+                }
+            }
+        }
+        var tempNo = '<div class="no-datas"><img src="/frontRouter/pc/mesgCenter/image/no-mesg.png"><div class="tip-text"><p>暂未接收到信息</p></div></div>'
+        $('#public-nav .iner .jynav li').find('.m-ul').html('')
+        if (lasts || lists) {
+            $('#public-nav .iner .jynav li').find('.m-ul').append(temp)
+        } else {
+            $('#public-nav .iner .jynav li').find('.m-ul').append(tempNo)
+        }
+    }
+    // 消息事件绑定
+    this.bindEvents = function () {
+        // 消息tabs事件
+        $('#public-nav .iner .jynav').find('#noticed').bind("mouseenter", function () {
+            $(this).find('.msg-img1').hide()
+            $(this).find('.msg-img2').show()
+            $('#public-nav .iner .jynav li').find('.jy-list-msg').show()
+        })
+        // 头像tabs事件
+        $('#public-nav .iner').find('.useronline').bind("mouseenter", function () {
+            $('#public-nav .iner .jynav li').find('.jy-list-msg').hide()
+        })
+        $('#public-nav .iner').find('.useronline').bind("mouseleave", function () {
+            $('#public-nav .iner .jynav li').find('.jy-list-msg').show()
+        })
+
+        // 消息浮窗关闭按钮事件
+        $('#public-nav .iner .jynav li').find('.imgs').bind("mouseenter", function () {
+            $(this).toggle()
+            $('#public-nav .iner .jynav li').find('.imgs').hide()
+            $('#public-nav .iner .jynav li').find('.imgs1').show()
+        })
+        $('#public-nav .iner .jynav li').find('.imgs1').bind("mouseleave", function () {
+            $(this).toggle()
+            $('#public-nav .iner .jynav li').find('.imgs').show()
+            $('#public-nav .iner .jynav li').find('.imgs1').hide()
+        })
+        // 关闭悬浮窗
+        $('#imgActive').on('click', function () {
+            $('#public-nav .iner .jynav li').find('.jy-list-msg').addClass('jynav-list')
+            $.ajax({
+                url: '/jymessageCenter/closeMessage',
+                type: 'GET',
+                success: function (r) {
+                    if (r && r.status === 1) {
+                        $('#public-nav .iner .jynav li').find('.jy-list-msg').hide()
+                    }
+                },
+                error: function () {
+                    $('#public-nav .iner .jynav li').find('.jy-list-msg').show()
+                }
+            })
+        })
+    }
+
+    this.init()
+}

+ 2 - 2
src/web/staticres/js/wxSupersearch.js

@@ -2739,12 +2739,12 @@ var SuperSearch = {
         window.location.href="/front/vipsubscribe/toSubVipSetPage"
       }else{
         sessionStorage.removeItem("keysetindexToHistory");
-        window.location.href="/swordfish/newhistorypush"
+        window.location.href="/swordfish/newhistorypush?msg=1"
       }
     })
     $(".tips_all .GetAll").click(function(){
       sessionStorage.removeItem("keysetindexToHistory");
-      window.location.href="/swordfish/newhistorypush"
+      window.location.href="/swordfish/newhistorypush?msg=1"
     })
     $(".home_todetails").click(function(){
       window.location.href="/front/vipsubscribe/introducePage"

+ 1 - 1
src/web/staticres/me/css/mine.css

@@ -108,7 +108,7 @@
 }
 
 .main-list {
-    padding: 0 .32rem 0.32rem;
+    padding: 0 .32rem 1.32rem 0.32rem;
 }
 
 /* menu-list相关 样式在安全中心多个页面复用,请慎重修改(单个页面的定制样式(小改动)建议在页面style标签中修改) */

+ 2 - 7
src/web/staticres/vipsubscribe/js/vip_index_new.js

@@ -49,7 +49,7 @@ var subNode = new Vue({
                     _this.freeUserArea = res.data.area
                     _this.userAreaNum = res.data.areanum
                     _this.userType = res.data.provincenum === 0 ? false : true
-                    _this.userAreaAllNum = res.data.provincenum
+                    _this.userAreaAllNum = res.data.provincenum === -1 ? '全国' : res.data.provincenum
                     // _this.$emit('UserSubscribe',res)
                     _this.subscribeTime = new Date(res.data.ppstart * 1000).pattern('yyyy年MM月dd日') + "-" + new Date(res.data.ppend * 1000).pattern('yyyy年MM月dd日')
                     _this.initdata = res.data
@@ -62,12 +62,7 @@ var subNode = new Vue({
         },
         // 省份订阅包升级 
         updateBtn: function () {
-            // '&area=' +  encodeURIComponent(JSON.stringify(thisData))
-            let thisList = []
-            for (const key in this.freeUserArea) {
-                thisList.push(key)
-            }
-            location.href = '/areaPack/wx/page/buy?type=upgrade&area=' +  encodeURIComponent(JSON.stringify(thisList))
+            location.href = '/areaPack/wx/page/buy?type=upgrade&area=' +  encodeURIComponent(JSON.stringify(this.freeUserArea))
         },
         // 判断用户权限版本
         getUserType: function (data) {

+ 2 - 2
src/web/staticres/wxtsguide/main.js

@@ -56,8 +56,8 @@ var Guide = {
 		});
 	},
 	//跳过向导
-	skip: function(){
-		$.post("/front/tenderSubscribe/guide",{reqType: "over"},function(r){
+	skip: function(index){
+		$.post("/front/tenderSubscribe/guide",{reqType: "over",index:index},function(r){
 	      	var guideKey = localStorage.tsGuide_keywords
 	      	if(localStorage){
 	       		localStorage.tsGuide_status = "1";

+ 4 - 1
src/web/templates/areaPack/pc/page_order.html

@@ -90,7 +90,7 @@
                                 <span class="highlight-text" style="color: #2cb7ca;"></span>
                             </span>
                         </p>
-                        <p><span>有效时间</span>:<span class="replace_text" name="time"></span></p>
+                        <p class="realTimeText" style="display: none;"><span>有效时间</span>:<span class="replace_text" name="time"></span></p>
                     </div>
                 </div>
             </div>
@@ -254,6 +254,9 @@
                     $('.filter_data .replace_text[name="area"]').text(formatAreaText(filterObj.num, filterObj.OldNum))
                     $('.filter_data .replace_text[name="cycle"]').text(filterObj.ordertype === 2 ? '不延期' : formatCycleText(filterObj.cycleunit))
                     $('.filter_data .replace_text[name="time"]').text(formatTimeText(r.data.order.vip_endtime) + '到期')
+                    if (r.data.order.order_status == 1) {
+                        $(".realTimeText").show()
+                    }
 
 
                     $('.filter_data .level').text(filterObj.pType == '1' ? '标准' : '高级')

+ 5 - 5
src/web/templates/areaPack/wx/page_buy.html

@@ -29,13 +29,13 @@
                 <van-icon name="arrow"></van-icon>
               </div>
             </div>
-            <div class="area-count-footer" v-if="selectAreaCount >= 0 && (buyType === 'buy' || buyType === 'renew')">
-              <span class="van-tag van-tag--round default" v-if="selectAreaCount > priceInfo.provinceFreeCount">本次${ buyTypeText }省份数量:${ buyAreaText  }</span>
+            <div class="area-count-footer" v-if="selectAreaCount >= 0 && (buyType === 'buy' || buyType === 'renew') && alreadyBuyInfo.loaded">
+              <span class="van-tag van-tag--round default" v-if="(selectAreaCount > priceInfo.provinceFreeCount) || (buyType === 'renew')">本次${ buyTypeText }省份数量:${ buyAreaText }</span>
               <span class="van-tag van-tag--round red" v-else-if="selectAreaCount >= 0 && selectAreaCount <= priceInfo.provinceFreeCount && alreadyBuyInfo.loaded">${ priceInfo.provinceFreeCount } 个省份免费,请增加省份数量再进行购买</span>
             </div>
-            <div class="area-count-footer" v-if="buyType === 'upgrade'">
+            <div class="area-count-footer" v-if="buyType === 'upgrade' && selectAreaCount !== -1 && alreadyBuyInfo.loaded">
               <span class="van-tag van-tag--round default" v-if="upgradeAreaCount > 0">本次${ buyTypeText }省份数量:${ upgradeAreaText  }</span>
-              <span class="van-tag van-tag--round red" v-else-if="alreadyBuyInfo.loaded">无法升级,选择省份数量需大于原套餐数</span>
+              <span class="van-tag van-tag--round red" v-else>无法升级,选择省份数量需大于原套餐数</span>
             </div>
           </div>
           <div class="spec-list-container border-line-t" v-if="buyType !== 'upgrade'">
@@ -84,7 +84,7 @@
               </div>
               <div class="notes-section-content" v-if="buyType === 'upgrade'">
                 1、省份订阅包升级不改变您原有订阅周期,只增加省份数量。<br />
-                2、省份订阅包是按时间、订阅省份个数计算费用,其中${ priceInfo.provinceFreeCount }个省份免费,超过${ priceInfo.provinceMaxCount }个省则按照全国计价;从升级之日起到原订阅周期结束之日,计算升级价格,不足月价格将按照天进行折算。<br />
+                2、省份订阅包是按时间、订阅省份个数计算费用,其中${ priceInfo.provinceFreeCount }个省份免费,超过${ priceInfo.provinceMaxCount }个省则按照全国计价;从升级之日起到原订阅周期结束之日,计算升级价格,不足月价格将按照整月计费。<br />
                 3、订阅区域每月可修改次数为可订阅省份数量,购买全国不限制修改次数。
               </div>
             </section>

+ 7 - 1
src/web/templates/areaPack/wx/page_set_area.html

@@ -142,7 +142,7 @@
     <script>
         var setAreaFn = {
             conf: {
-                sKey: 'sub_vip_state'
+                sKey: 'sub_free_state'
             },
             buyPageInfo: {},
             init: function () {
@@ -212,11 +212,17 @@
                 url: '/publicapply/free/subscribe',
                 type: 'POST',
                 success: function (res) {
+                    let freeArea = JSON.stringify(res.data)
+                    sessionStorage.setItem('sub_free_state', freeArea)
+                    setAreaFn.init()
+                    onChange(res.data.area)
                     userType = res.data.provincenum === 0 ? false : true
                     maxSelect = res.data.provincenum  + res.data.basenum
                     // _this.$emit('UserSubscribe',res)
                     if (maxSelect === -1) {
                         $('#canSelect').text(`全国`)
+                    } else if (res.data.provincenum === 0 && res.data.areanum === 1) {
+                        vueComponent.provinceListMap['#'][0].selectedState = ''
                     } else {
                         $('#canSelect').text(`${maxSelect}个省`)
                     }

+ 237 - 14
src/web/templates/common/pchead.html

@@ -15,8 +15,11 @@
         position: fixed;
         top: 0;
     }
+    #public-nav .iner {
+        width: 1200px;
+    }
     #public-nav .iner .fl{
-        margin-left: 60px;
+        margin-left: 0;
         display: flex;
         width: 430px;
         height: 100%;
@@ -156,11 +159,12 @@
     }
     #public-nav .iner .jynav li{
         position: relative;
-        padding: 0 24px !important;
+        padding: 0 23px !important;
         min-width: inherit !important;
     }
-    #public-nav .iner .jynav li:nth-child(5){
-        padding-right: 8px !important;
+    #public-nav .iner .jynav li:nth-child(6){
+        height: 63px;
+        margin-left: 23px;
     }
     #public-nav .iner .jynav li .jynav-list{
         display: flex;
@@ -220,6 +224,191 @@
         left: 68px;
         width: 50px;
     }
+    #public-nav .iner .jynav li .jy-nav-msg{
+        width: 24px;
+        vertical-align: middle;
+    }
+    #public-nav .iner .jynav li .msg-img2 {
+        display: none;
+    }
+    #public-nav[data-theme] .iner .jynav li .img-flex {
+        display: flex;
+        flex-direction: column;
+    }
+    #public-nav[data-theme] .iner .jynav li .msg-img1,#public-nav[data-theme] .iner .jynav li .msg-img2 {
+        position: absolute;
+        left: 0;
+        top: 20px;
+    }
+    #public-nav[data-theme] .iner .jynav li .msg-img1 {
+        opacity: 0;
+    }
+    #public-nav[data-theme="light"] .iner .jynav li .msg-img1[data-theme='light'] {
+        opacity: 1;
+    }
+    #public-nav[data-theme="dark"] .iner .jynav li .msg-img1[data-theme='dark'] {
+        opacity: 1;
+    }
+    #public-nav .iner .jynav li .tips {
+        display: none;
+        position: absolute;
+        left: 14px;
+        top: 13px;
+        height: 18px;
+        line-height: 16px;
+        padding: 0 4px;
+        border: 1px solid #fff;
+        background: #ff3a20;
+        border-radius: 10px;
+        font-size: 12px;
+        color: #fff;
+    }
+    /* 滚动条样式 */
+    #public-nav .iner .jynav li .jy-list-msg .msg-par ::-webkit-scrollbar {
+        /*滚动条整体样式*/
+        width: 6px;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par ::-webkit-scrollbar-thumb {
+        /*滚动条里面小方块*/
+        border-radius: 3px;
+        background: #E0E0E0;
+        opacity: 0.15;
+    }
+    #public-nav .iner .jynav li .msg-style {
+        display: none;
+        position: absolute;
+        right: 0!important;
+        left: initial;
+        transform: translate(0%, 0%)!important;
+        width: 400px;
+        padding: 0;
+        background: #ffffff;
+        border-radius: 0px 0px 8px 8px;
+        box-shadow: 0px 6px 8px 0px rgba(0,0,0,0.08);
+        margin-top: 63px;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par {
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+        height: 368px;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-head {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        padding: 16px 24px;
+        line-height: 24px;
+        box-shadow: 0px -1px 0px 0px rgba(0,0,0,0.05) inset; 
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-head .imgs, #public-nav .iner .jynav li .jy-list-msg .msg-par .m-head .imgs1 {
+        width: 16px;
+        height: 16px;
+        cursor: pointer;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-head .imgs1 {
+        display: none;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-head .spa {
+        height: auto;
+        font-size: 16px;
+        color: #1d1d1d;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-head .spa i {
+        font-size: 14px;
+        color: #686868;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-head .spa i em {
+        color: #2CB7CA;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-ul {
+        flex: 1;
+        overflow-y: scroll;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-ul .lis-cont .dots {
+        position: absolute;
+        left: 28px;
+        top: 7px;
+        width: 6px;
+        height: 6px;
+        background: #fb483d;
+        border: 1px solid #ffffff;
+        border-radius: 50%;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-ul .m-li {
+        padding: 12px 24px!important;
+        box-shadow: 0px -1px 0px 0px rgb(0 0 0 / 5%) inset;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-ul .m-li:hover {
+        cursor: pointer;
+        background: #f5f6f7;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-ul .m-li .lis-cont {
+        position: relative;
+        display: flex;
+        flex-direction: initial;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-ul .m-li .lis-cont img {
+        width: 32px;
+        height: 32px;
+        margin: 4px 12px 0 0;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-ul .m-li .lis-cont .r-lis {
+        width: 100%;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-ul .m-li .lis-cont .r-lis .title {
+        display: flex;
+        flex-direction: initial;
+        justify-content: space-between;
+        font-size: 14px;
+        color: #1d1d1d;
+        line-height: 22px;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-ul .m-li .lis-cont .r-lis .title span {
+        height: auto;
+        text-align: left;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-ul .m-li .lis-cont .r-lis .title span:nth-child(2) {
+        font-size: 12px;
+        color: #999;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-ul .m-li .lis-cont .r-lis p {
+        font-size: 13px;
+        color: #686868;
+        line-height: 20px;
+        margin-top: 4px;
+        text-align: left;
+        word-break: break-all;
+    }
+    #public-nav .iner .jynav li .no-datas {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        margin-top: 18px;
+    }
+    #public-nav .iner .jynav li .no-datas img {
+        width: 200px;
+        height: 200px;
+    }
+    #public-nav .iner .jynav li .no-datas .tip-text p {
+        color: #999;
+        font-size: 14px;
+        line-height: 22px;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-foot {
+        padding: 12px 0;
+        display: flex;
+        justify-content: center;
+        box-shadow: 0px 1px 0px 0px rgba(0,0,0,0.05) inset; 
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-foot a {
+        font-size: 16px;
+        color: #1d1d1d;
+        line-height: 24px;
+    }
+    #public-nav .iner .jynav li .jy-list-msg .msg-par .m-foot a:hover {
+        color: #2CB7CA;
+    }
     #public-nav .iner .jynav li .jynav-list span.active a{
         color: #2CB7CA;
     }
@@ -372,6 +561,7 @@
     }
     #public-nav .useronline{
       height: 50px;
+      margin-left: 20px;
     }
 </style>
 <style type="text/css">
@@ -538,6 +728,27 @@
                         <span name="广告服务"><a href="/front/advservices.html">广告服务</a></span>
                         <span name="关于我们"><a href="/front/aboutus.html">关于我们</a></span>
                         <span name="产品销售合作" class="recruit"><a href="/swordfish/frontPage/partner/free/index">产品销售合作</a></span>
+                    </div>
+				</li>
+                <li  name="消息" id="noticed" style="display: none;">
+                    <a href="/swordfish/frontPage/messageCenter/sess/index">
+                        <div class="img-flex">
+                            <img data-theme="light" src='{{Msg "seo" "cdn"}}/images/pc/mesg.png?v={{Msg "seo" "version"}}' class="jy-nav-msg msg-img1" alt="" />
+                            <img data-theme="dark" src='{{Msg "seo" "cdn"}}/images/pc/mesg_fff.png?v={{Msg "seo" "version"}}' class="jy-nav-msg msg-img1" alt="" />
+                        </div>
+                        <img src='{{Msg "seo" "cdn"}}/images/pc/mesg_active.png?v={{Msg "seo" "version"}}' class="jy-nav-msg msg-img2" alt="" />
+                        <span class="tips" id="tips"></span>
+                    </a>
+                    <div class="jy-list-msg msg-style">
+                        <div class="msg-par">
+                            <div class="m-head">
+                                <span class="spa">消息中心<i>( <em id="noNum">0</em> 条未读 )</i></span>
+                                <img class="imgs" src='{{Msg "seo" "cdn"}}/images/pc/guan.png?v={{Msg "seo" "version"}}'>
+                                <img id="imgActive" class="imgs1" src='{{Msg "seo" "cdn"}}/images/pc/guan_active.png?v={{Msg "seo" "version"}}'>
+                            </div>
+                            <div class="m-ul"></div>
+                            <div class="m-foot"><a href="/swordfish/frontPage/messageCenter/sess/index">查看全部</a></div>
+                        </div>
                     </div>
 				</li>
 				<li class="slider"></li>
@@ -630,8 +841,12 @@
       </div>
   </div>
 </div>
+<script src='{{Msg "seo" "cdn"}}/js/dateFunc.js?v={{Msg "seo" "version"}}'></script>
+<script src='{{Msg "seo" "cdn"}}/js/message.js?v={{Msg "seo" "version"}}'></script>
 <script type="text/javascript">
-
+    // 初始化message模块内容
+    var message = new Message()
+    
     function zbSeatch(id){
         $("#"+id).submit();
     }
@@ -746,11 +961,9 @@
 
     }
     window.addEventListener('scroll', docScroll, true)
-
-
-
+    
 $(function(){
-
+    
     // 搜索框显示、隐藏
     $("#public-nav .iner .fl .jy_nav_searchBtn").on("click",function(){
         $(this).hide()
@@ -759,16 +972,20 @@ $(function(){
     $("#public-nav .iner .fl .search-box .search-close").on('click',function(){
         $(this).parents('.search-box').hide()
         $("#public-nav .iner .fl .jy_nav_searchBtn").show()
-    })
-
-
-        // 导航栏展示/关闭
+    })  
+    
+    // 导航栏展示/关闭
     var curTheme = 'light'
     $("#public-nav .iner .jynav li").bind("mouseenter",function(){
          var l = $(this).find('.jynav-list').length;
          if(l > 0){
-            $(this).siblings().find('.jynav-list').hide()
+            //  隐藏消息悬浮窗
+            $('#public-nav .iner .jynav li').find('.jy-list-msg').hide()
             $(this).find('.jynav-list').toggle()
+            $(this).find('.msg-img1').hide()
+            $(this).find('.msg-img2').show()
+
+            $(this).siblings().find('.jynav-list').hide()
             curTheme =$("#public-nav").attr('data-theme')
             setNavTheme('light',1)
             $(".loginBtn").css({"borderColor":"#e0e0e0","color":'#252627'})
@@ -777,7 +994,13 @@ $(function(){
     $("#public-nav .iner .jynav li").bind("mouseleave",function(){
         setNavTheme(curTheme,1)
         docScroll()
+
+        //  隐藏消息悬浮窗
+        $('#public-nav .iner .jynav li').find('.jy-list-msg').show()
+        
         $("#public-nav .iner .jynav li").find('.jynav-list').hide()
+        $(this).find('.msg-img1').show()
+        $(this).find('.msg-img2').hide()
     })
 
 

+ 102 - 0
src/web/templates/frontRouter/pc/messageCenter/sess/index.html

@@ -0,0 +1,102 @@
+
+<html lang="zh-cn">
+	<head>
+		<title>消息中心_{{Msg "seo" "qfw.swordfishsl.title"}}</title>
+		<meta name="Keywords" content="{{Msg "seo" "qfw.swordfishsl.key"}}"/>
+		<meta name="Description" content="{{Msg "seo" "qfw.swordfishsl.description"}}"/>
+		<meta name="renderer" content="webkit">
+		<meta content="telephone=no" name="format-detection"/>
+    <meta content="消息中心" theme="light" name="enable-header"/>
+		{{include "/common/pnc.html"}}
+		<link href="{{Msg "seo" "cdn"}}/css/pc.css?v={{Msg "seo" "version"}}" rel="stylesheet" />
+		<link href="{{Msg "seo" "cdn"}}/css/dev2/reset_pc.css?v={{Msg "seo" "version"}}" rel="stylesheet" />
+		<link href="{{Msg "seo" "cdn"}}/pccss/public-nav-1200.css?v={{Msg "seo" "version"}}" rel="stylesheet" />
+    <link href="//cdn.jsdelivr.net/npm/element-ui@2.13.2/lib/theme-chalk/index.css" rel="stylesheet" />
+    <link href='{{Msg "seo" "cdn"}}/frontRouter/pc/mesgCenter/css/index-pc.css?v={{Msg "seo" "version"}}' rel="stylesheet"> 
+    <script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js></script>
+    <script src="//cdn.jsdelivr.net/npm/element-ui@2.13.2/lib/index.js"></script>
+  </head>
+
+	<body>
+	{{include "/common/pchead.html"}}
+	  <section class="mesg-container" v-cloak>
+        <div class="main-mesg">
+          <h3>消息中心</h3>
+          <div class="tips" @click="linked(tabsList.lasts.id, tabsList.lasts.link, tabsList.lasts.isRead,1,tabsList.lasts.msg_type)" v-show="tabsList.lasts">
+            <div class="imgs">
+              <img :src='imgSrcs[tabsList.lasts.msg_type].url' v-if="tabsList.lasts.msg_type">
+              <i class="dots" v-if="tabsList.lasts.isRead == 0"></i>
+            </div>
+            <div class="r-lis">
+                <div class="title">
+                    <span>{tabsList.lasts.title}</span>
+                    <span>{dateMatter(tabsList.lasts.createtime)}</span>
+                </div>
+                <p>{tabsList.lasts.content}</p>
+            </div>
+          </div>
+          <div class="tabs-mesg" :class="{'is-tabs':tabsList.totals < 20}">
+            <el-tabs v-model="activeName" @tab-click="tabClick">
+              <el-tab-pane v-for="(item, index) in counts" :key="index" :name="imgSrcs[item.type].type">
+                <div class="msg-label" slot="label">
+                  <img :src='imgSrcs[item.type].url'>
+                  <i class="b-item" v-show="item.count">{item.count > 99 ? '99+' : item.count}</i>
+                  <p class="words">{imgSrcs[item.type].title}</p>
+                </div>
+                <div
+                  class="tips tab-tips"
+                  v-for="(ite, indx) in tabsList.lists"
+                  @click="linked(ite.id, ite.link, ite.isRead,2,ite.msg_type)"
+                  v-if="tabsList.lists"
+                >
+                  <div class="imgs">
+                    <img :src='imgSrcs[ite.msg_type].url'>
+                    <i class="dots" v-show="!ite.isRead"></i>
+                  </div>
+                  <div class="r-lis">
+                      <div class="title">
+                          <span>{ite.title}</span>
+                          <span>{dateMatter(ite.createtime)}</span>
+                      </div>
+                      <p>{ite.content}</p>
+                  </div>
+                </div>
+                <div class="no-data" v-if="!tabsList.lists"><img src='{{Msg "seo" "cdn"}}/frontRouter/pc/mesgCenter/image/no-mesg.png?v={{Msg "seo" "version"}}'><div class="tip-text"><p>暂未接收到信息</p></div></div>
+                <div class="el-pagination-container" v-if="tabsList.totals > 20">
+                  <el-pagination
+                      background
+                      layout="prev, pager, next, ->"
+                      :hide-on-single-page="true"
+                      :current-page="tabsList.offset"
+                      :page-size="tabsList.pageSize"
+                      :total="tabsList.totals"
+                      @current-change="onPageChange"
+                  ></el-pagination>
+                </div>
+              </el-tab-pane>
+            </el-tabs>
+          </div>
+        </div>
+    </section>
+
+    {{include "/common/pcbottom.html"}}
+    {{include "/common/baiducc.html"}}
+
+    <script>
+        haslogin({{.T.logid}})
+        function baiduEvent(name) {
+          try {
+            console.log(name, 'name')
+            _hmt.push(['_trackEvent', '超级订阅-pc', 'click', name]);
+          } catch (e) {
+            console.log('未初始化百度统计')
+          }
+        }
+    </script>
+    <script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js></script>
+    <script src=//cdn.jsdelivr.net/npm/element-ui@2.13.2/lib/index.js></script>
+    <script src='{{Msg "seo" "cdn"}}/frontRouter/pc/mesgCenter/js/index-pc.js?v={{Msg "seo" "version"}}'></script>
+</body>
+
+</html>
+

+ 66 - 0
src/web/templates/frontRouter/wx/messageCenter/sess/detail.html

@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+  <meta charset="utf-8">
+  <meta name="keywords" content="剑鱼标讯">
+  <meta name="description" content="剑鱼标讯">
+  <meta name="author" content="剑鱼标讯">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
+  <meta name="browsermode" content="application">
+  <meta name="x5-orientation" content="portrait">
+  <meta name="screen-orientation" content="portrait">
+  <meta name="x5-page-mode" content="app">
+  <meta name="apple-mobile-web-app-capable" content="yes">
+  <meta name="apple-mobile-web-app-status-bar-style" content="black">
+  <meta name="format-detection" content="telephone=no">
+  <title></title>
+  <script src="/big-member/js/rem.js"></script>
+  <!--S-当前页面的css资源-->
+  <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/reset-css/5.0.1/reset.min.css />
+  <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/index.css />
+  <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/icon/local.css />
+  <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/common-module/messageCenter/css/public.css?v={{Msg "seo" "version"}}' />
+  <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/common-module/messageCenter/css/index.css?v={{Msg "seo" "version"}}' />
+</head>
+<body>
+  <div class="j-container">
+    <!-- {{include "/big-member/header.html"}} -->
+    <div class="j-main detailed" id="detailed" v-cloak>
+      <div class="j-container">
+        <div class="j-main descri" id="descri">
+          <van-list
+            :finished="tabsList.finished"
+            finished-text=""
+            @load="msgData"
+          >
+            <div class="d-list" v-for="item in lists" :key="item.id">
+              <p class="p-time">{dateMatter(item.createtime, 'in')}</p>
+              <div class="words">
+                <img :src="'/common-module/messageCenter/image/'+imgSrcs[item.msg_type - 1].url+'@2x.png'">
+                <div class="m-tip" @click="msgClick(item.url)">
+                  <span class="trangle"></span>
+                  <p class="p1">{item.title}</p>
+                  <p class="p2">{item.content}</p>
+                </div>
+              </div>
+            </div>
+          </van-list>
+        </div>
+      </div>
+    </div>
+  </div>
+  <!--S-当前页面的资源-->
+  <script src='https://cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js'></script>
+  <script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js></script>
+  <script src=//cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js></script>
+  <script src='{{Msg "seo" "cdn"}}/big-member/js/utils.js?v={{Msg "seo" "version"}}'></script>
+  <!--E-当前页面的资源-->
+  {{include "/big-member/commonjs.html"}}
+  <!-- <script src='{{Msg "seo" "cdn"}}/jyapp/js/common.js?v={{Msg "seo" "version"}}'></script> -->
+  <script src='{{Msg "seo" "cdn"}}/common-module/messageCenter/js/func.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Msg "seo" "cdn"}}/common-module/messageCenter/js/detail.js?v={{Msg "seo" "version"}}'></script>
+  {{include "/common/baiducc.html"}}
+</body>
+
+</html>

+ 78 - 0
src/web/templates/frontRouter/wx/messageCenter/sess/index.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+  <meta charset="utf-8">
+  <meta name="keywords" content="剑鱼标讯">
+  <meta name="description" content="剑鱼标讯">
+  <meta name="author" content="剑鱼标讯">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
+  <meta name="browsermode" content="application">
+  <meta name="x5-orientation" content="portrait">
+  <meta name="screen-orientation" content="portrait">
+  <meta name="x5-page-mode" content="app">
+  <meta name="apple-mobile-web-app-capable" content="yes">
+  <meta name="apple-mobile-web-app-status-bar-style" content="black">
+  <meta name="format-detection" content="telephone=no">
+  <title>消息中心</title>
+  <script src="/big-member/js/rem.js"></script>
+  <!--S-当前页面的css资源-->
+  <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/reset-css/5.0.1/reset.min.css />
+  <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/index.css />
+  <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/icon/local.css />
+  <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/common-module/bidedoc/css/public.css?v={{Msg "seo" "version"}}' />
+  <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/common-module/messageCenter/css/index.css?v={{Msg "seo" "version"}}' />
+</head>
+<body>
+  <div class="j-container">
+    {{include "/big-member/header.html"}}
+    <div class="j-main mesged" id="mesged" v-cloak>
+      <div class="j-container">
+        <div class="j-main" v-show="msgList">
+          <div class="head-mesg" v-show="!$.isEmptyObject(lastData)">
+            <h5>重要提醒</h5>
+            <div class="h-conts" @click="msgClick(lastData.url,lastData.isRead,lastData.id,lastData.msg_type)">
+              <div class="p1">
+                <span class="spa-tit">{lastData.title}</span>
+                <span class="spa flex" @click.stop="toggleClick" v-show="isRow">{isToggle?'收起':'展开'}&nbsp;<van-icon :class="isToggle?'is-icon1':'is-icon2'" name="arrow-down" /></span>
+              </div>
+              <p class="p2" :class="{'active':isRow && !isToggle}">{lastData.content}</p>
+            </div>
+          </div>
+          <div class="t-list">
+            <div class="tips" v-for="(ite, index) in msgList" :key="index" @click="msgDetailed(ite.type,ite.count)" v-show="!$.isEmptyObject(ite.newMsg)">
+              <div class="imgs">
+                <van-badge :class="{'no-active':ite.count <= 0}" :content="ite.count" max="99">
+                  <img :src="'/common-module/messageCenter/image/'+imgSrcs[ite.type - 1].url+'@2x.png'">
+                </van-badge>
+              </div>
+              <div class="r-lis">
+                  <div class="title">
+                      <span>{imgSrcs[ite.type - 1].title}</span>
+                      <span v-if="ite.newMsg">{dateMatter(ite.newMsg.createtime, 'out')}</span>
+                  </div>
+                  <p class="p3" v-if="ite.newMsg">{ite.newMsg.content}</p>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="no-data" v-show="!msgList"><img src='{{Msg "seo" "cdn"}}/common-module/messageCenter/image/no-mesg.png?v={{Msg "seo" "version"}}'><div class="tip-text"><p>暂无消息</p></div></div>
+      </div>
+    </div>
+    <!-- 底部导航 -->
+    {{include "/weixin/tabbar.html"}}
+  </div>
+  <!--S-当前页面的资源-->
+  <script src=https://cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js></script>
+  <script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js></script>
+  <script src=//cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js></script>
+  <script src='{{Msg "seo" "cdn"}}/big-member/js/utils.js?v={{Msg "seo" "version"}}'></script>
+  <!--E-当前页面的资源-->
+  {{include "/big-member/commonjs.html"}}
+  <!-- <script src='{{Msg "seo" "cdn"}}/jyapp/js/common.js?v={{Msg "seo" "version"}}'></script> -->
+  <script src='{{Msg "seo" "cdn"}}/common-module/messageCenter/js/func.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Msg "seo" "cdn"}}/common-module/messageCenter/js/index.js?v={{Msg "seo" "version"}}'></script>
+  {{include "/common/baiducc.html"}}
+</body>
+
+</html>

+ 1 - 1
src/web/templates/pc/myOrder.html

@@ -290,7 +290,7 @@
                                         <span v-if="item.filter.give_cycle && item.filter.original_price" class="discount-container"><span> + </span><span class="highlight-text" style="color: #2cb7ca;">赠送@#item.filter.give_cycle < 12 ? (item.filter.give_cycle + '个月') : '1年'#@</span></span>
                                         <span v-if="item.filter.give_cycle && item.filter.give_type" class="discount-container"><span> + </span><span class="highlight-text" style="color: #2cb7ca;">赠送@#item.filter.give_type == 1 ? (item.filter.give_cycle + '天') :  item.filter.give_cycle < 12 ? (item.filter.give_cycle + '个月') : '1年'#@</span></span>
                                     </p>
-                                    <p v-if="item.order_status !== -2">有效时间:@#item.vip_endtime|formatTimeText#@到期</p>
+                                    <p v-if="item.order_status == 1">有效时间:@#item.vip_endtime|formatTimeText#@到期</p>
                                 </div>
                                 <div class="fl shop_main" v-if="item.product_type === '企业商机管理'">
                                     <p style="line-height: 33px;">企业名称:@#item.filter.entname#@</p>

+ 4 - 0
src/web/templates/weixin/historypush.html

@@ -71,6 +71,7 @@
             padding: 0px 10px;
             background: #fff;
             margin-top: 100px;
+            padding-bottom: 50px!important;
         }
 
         .adv-wxpush-center {
@@ -820,6 +821,9 @@
     <div class="listcontent">
         <div id="list"></div>
     </div>
+    
+    <!-- 底部导航 -->
+    {{include "/weixin/tabbar.html"}}
 
     <span class="empty findnull-no-key">
         <div><img class="empty-img" src="{{Msg "seo" "cdn"}}/common-module/public/image/jy-smile.png"></div>

+ 2 - 0
src/web/templates/weixin/my.html

@@ -250,6 +250,8 @@
             </div>
         </div>
         <div class="j-footer"></div>
+        <!-- 底部导航 -->
+        {{include "/weixin/tabbar.html"}}
     </div>
     <script src='https://cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js'></script>
     <script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js></script>

+ 9 - 0
src/web/templates/weixin/search/mainSearch.html

@@ -361,6 +361,12 @@
         .home .home_data .data_list .list_title p {
             transition: all 1s;
         }
+				.home .home_data .no-data {
+					margin-bottom: 1.2rem!important;
+				}
+				.home .tips {
+					padding-bottom: 1.2rem;
+				}
         .custom-toast .weui-toast {
             font-size: 0.3rem;
             padding: 0.2rem;
@@ -660,6 +666,9 @@
                 <a class="home_toset" id="wx-setting" data-cl-event="c_wx_keyword_linkclick">去设置</a>
             </div>
         </div>
+				<!-- 底部导航 -->
+				{{include "/weixin/tabbar.html"}}
+				
         <div class="tips">
             <p class="tips_text home_1" style="display: none;">设置订阅关键词,随时接收最新招标信息</p>
             <p class="tips_text home_2" style="display: none;">为了使您接收更多信息,可对关键词进行新增或修改。</p>

+ 111 - 0
src/web/templates/weixin/tabbar.html

@@ -0,0 +1,111 @@
+
+<link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/index.css />
+<style>
+  [v-cloak] {
+      display: none !important;
+  }
+  #tabMesg .van-tabbar-item__icon img {
+    width: .48rem;
+    height: .48rem;
+  }
+  #tabMesg .van-tabbar-item .van-tabbar-item__icon .van-info {
+    margin-top: .12rem;
+    background: #FB483D;
+  }
+  #tabMesg .a-badge .van-tabbar-item__icon .van-info{
+    display: none;
+  }
+</style>
+
+<div id="tabMesg" v-cloak>
+  <van-tabbar v-model="tabActive" active-color="#2ABED1" inactive-color="#171826">
+    <van-tabbar-item @click="routeHref('/jylab/mainSearch',0)">
+      <span>首页</span>
+      <template #icon="props">
+        <img :src="props.active ? home.active : home.inactive" />
+      </template>
+    </van-tabbar-item>
+    <van-tabbar-item @click="routeHref('/swordfish/newhistorypush',1)">
+      <span>订阅</span>
+      <template #icon="props">
+        <img :src="props.active ? book.active : book.inactive" />
+      </template>
+    </van-tabbar-item>
+    <van-tabbar-item @click="routeHref('/weixin/frontPage/messageCenter/sess/index',2)" :class="{'a-badge':counts==0}" :badge="counts">
+      <span>消息</span>
+      <template #icon="props">
+        <img :src="props.active ? mesg.active : mesg.inactive" />
+      </template>
+    </van-tabbar-item>
+    <van-tabbar-item @click="routeHref('/page_treasurebox/index.html',3)">
+      <span>百宝箱</span>
+      <template #icon="props">
+        <img :src="props.active ? box.active : box.inactive" />
+      </template>
+    </van-tabbar-item>
+    <van-tabbar-item @click="routeHref('/front/wxMyOrder/myMenu',4)">
+      <span>我的</span>
+      <template #icon="props">
+        <img :src="props.active ? my.active : my.inactive" />
+      </template>
+    </van-tabbar-item>
+  </van-tabbar>
+</div>
+<script src=//cdn-common.jianyu360.com/cdn/lib/vue/2.6.11/vue.min.js></script>
+<script src=//cdn-common.jianyu360.com/cdn/lib/vant/2.12.24/lib/vant.min.js></script>
+<script src=//cdn-common.jianyu360.com/cdn/lib/zepto/1.2.0/zepto.min.js></script>
+<script src='{{Msg "seo" "cdn"}}/common-module/messageCenter/js/func.js?v={{Msg "seo" "version"}}'></script>
+<script>
+	var vm = new Vue({
+  el: '#tabMesg',
+  delimiters: ['{', '}'],
+  data: function () {
+    return {
+			tabActive: 0,
+			counts: 0,
+			home: {
+				active: '/images/tabbar/home_active.png',
+				inactive: '/images/tabbar/home.png',
+			},
+			book: {
+				active: '/images/tabbar/book_active.png',
+				inactive: '/images/tabbar/book.png',
+			},
+			mesg: {
+				active: '/images/tabbar/mesg_active.png',
+				inactive: '/images/tabbar/mesg.png',
+			},
+			box: {
+				active: '/images/tabbar/box_active.png',
+				inactive: '/images/tabbar/box.png',
+			},
+			my: {
+				active: '/images/tabbar/mine_active.png',
+				inactive: '/images/tabbar/mine.png',
+			}
+		}
+	},
+	created() {
+		this.tabsCount()
+    this.tabActive = Number(getQueryString('msg'))
+	},
+	methods: {
+		tabsCount() {
+      const _this = this
+      $.ajax({
+        type:'GET',
+        url:'/jymessageCenter/isMsgOpen',
+        data: {},
+        success:function (res) {
+          if (res && res.status == 1) {
+            _this.counts = res.data.count > 99 ? '99+' : res.data.count
+          }
+        }
+      })
+    },
+		routeHref(url, status) {
+      location.href = url + '?msg=' + status
+		}
+	}
+})
+</script>

+ 1 - 1
src/web/templates/weixin/vipsubscribe/vip_index_new.html

@@ -193,7 +193,7 @@
             <div class="provincePay">
               <div class="provincePay-text">订阅周期:${subscribeTime}</div>
               <div class="provincePay-text provincePay-numText">
-                省份数量:<span class="provincePay-num">&nbsp;<span v-html="userAreaAllNum"></span>&nbsp;</span>个
+                省份数量:<span class="provincePay-num">&nbsp;<span v-html="userAreaAllNum"></span>&nbsp;</span><span v-show="userAreaAllNum !== '全国'"></span>
               </div>
               <div class="provincePay-btnWrap">
                 <div class="privincePay-btn" @click="renewBtn">续费</div>

+ 4 - 4
src/web/templates/weixin/wxtsguide.html

@@ -283,7 +283,7 @@ var isBodyShow = true;
 				比如您输入“绿化工程”以后,当某招标人发布了《某某县中心敬老院一期观景<font class="keyword">绿化工程</font>施工》,剑鱼标讯就会把这条信息推送给您。
 			</div>
 			<div class="btnarea">
-				<button type="button" class="btn" onclick="Guide.skip()">跳过向导</button>
+				<button type="button" class="btn" onclick="Guide.skip(2)">跳过向导</button>
 				<span>
 					<button type="button" class="btn btn-normal prevStep" onclick="Guide.prevStep(2)">上一步</button>
 					<button type="button" class="btn nextStep" onclick="Guide.nextStep(2)">下一步</button>
@@ -307,7 +307,7 @@ var isBodyShow = true;
 				</div>
 			</div>
 			<div class="btnarea">
-				<button type="button" class="btn" onclick="Guide.skip()">跳过向导</button>
+				<button type="button" class="btn" onclick="Guide.skip(3)">跳过向导</button>
 				<span>
 					<button type="button" class="btn btn-normal prevStep" onclick="Guide.prevStep(3)">上一步</button>
 					<button type="button" class="btn nextStep" onclick="Guide.nextStep(3)">下一步</button>
@@ -332,7 +332,7 @@ var isBodyShow = true;
 		<div class="btnarea">
 			<span>
 				<button type="button" class="btn btn-normal prevStep" onclick="Guide.prevStep(4)">上一步</button>
-				<button type="button" class="btn nextStep" onclick="Guide.skip()">开始使用</button>
+				<button type="button" class="btn nextStep" onclick="Guide.skip(4)">开始使用</button>
 			</span>
 			<font>点击开始使用后,剑鱼标讯会为您打开订阅设置页面</font>
 		</div>
@@ -393,7 +393,7 @@ var isBodyShow = true;
 		}
     })
     $("#skipOver").on('click', function () {
-      Guide.skip()
+      Guide.skip(1)
     })
 </script>
 {{include "/common/baiducc.html"}}