wangshan 3 жил өмнө
parent
commit
12458fed36

+ 1 - 1
src/jfw/front/wxMyOrder.go

@@ -345,5 +345,5 @@ func (t *WxMyOrder) PcfilePackDetail() {
 	t.T["nickname"] = mynickname
 	t.T["avatar"] = myavatar
 	t.T["order_code"] = t.GetString("order_code")
-	t.Render("/pc/filePack/detail.html", &t.T)
+	t.Render("/order/pc/filePack/detail.html", &t.T)
 }

+ 1 - 1
src/jfw/modules/app/src/app/front/myorder.go

@@ -29,7 +29,7 @@ type MyOrder struct {
 	cantInvoice      xweb.Mapper `xweb:"/jyapp/front/cantInvoice"`
 	viewPdf          xweb.Mapper `xweb:"/jyapp/front/viewPdf"`
 	tointegralDetail xweb.Mapper `xweb:"/jyapp/front/myorder/tointegralDetail"`
-	CreateOrder      xweb.Mapper `xweb:"/jyapp/filePack/createOrder"` //数据包创建订单
+	createOrder      xweb.Mapper `xweb:"/jyapp/filePack/createOrder"` //数据包创建订单
 }
 
 func init() {

+ 113 - 0
src/jfw/modules/app/src/web/templates/commonPay/filePack/orderDetail.html

@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+
+<head>
+    <!--引入公共资源头部-->
+    {{include "/big-member/meta.html"}}
+    <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}}/jyapp/big-member/css/j-icons.css?v={{Msg "seo" "version"}}'>
+    <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/order-list/css/order-detail.css?v={{Msg "seo" "version"}}' />
+</head>
+
+<body>
+    <div class="j-container transparent-header">
+        <div class="j-header jy-app-header border-line-b transparent-header">
+            <span class="header-left">
+                <span class="van-icon van-icon-arrow-left"></span>
+            </span>
+            <span class="header-title title-left">订单详情</span>
+            <span class="header-right"></span>
+        </div>
+        <div class="j-main order-detail" id="app" v-cloak>
+            <div class="j-container">
+                <div class="j-main no-scrollbar">
+                    <div class="wrapper">
+                        <div class="header-pic arc-container" :class="orderStateMap[orderInfo.state].bgcClassName">
+                            <div class="order-state">${ orderStateMap[orderInfo.state].text }</div>
+                            <div class="surplus-time" v-if="orderStateMap[orderInfo.state].surplusTimeShow && orderInfo.surplusTime > 0">
+                                <span>剩余支付时间:</span>
+                                <van-count-down @finish="onCountdownFinish" :time="orderInfo.surplusTime"></van-count-down>
+                            </div>
+                        </div>
+                        <div class="card-list">
+                            <div class="j-card report-p">
+                                <span class="rp-left" :class="'badge-' + (orderInfoFilter.badge || '')">
+                                    <img class="card-l-pic" :src="orderInfo.headerImg">
+                                </span>
+                                <span class="rp-right">
+                                    <span class="product-type">${ orderInfo.productType }</span>
+                                    <span class="pay-money">&yen; ${ orderInfo.payMoney }</span>
+                                </span>
+                            </div>
+                            <div class="j-card product-info">
+                                <div class="j-card-title">购买信息</div>
+                                <div class="j-card-items">
+                                    <div
+                                        class="j-card-item"
+                                        :class="item.className"
+                                        v-for="(item, index) in orderInfo.productInfoList"
+                                        :key="index"
+                                        v-show="item.text"
+                                    >
+                                        <span class="card-item-l">${ item.label + item.split }</span>
+                                        <span class="card-item-r" v-html="item.text"></span>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="j-card report-info">
+                                <div class="j-card-title">订单信息</div>
+                                <div class="j-card-items">
+                                    <div
+                                        class="j-card-item"
+                                        :class="item.className"
+                                        v-for="(item, index) in orderInfo.orderInfoList"
+                                        :key="index"
+                                        v-show="item.text"
+                                    >
+                                        <span class="card-item-l">${ item.label + item.split }</span>
+                                        <span class="card-item-r" v-html="item.text"></span>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="j-button-group j-footer" v-show="buttonGroupShow">
+                    <button
+                        class="j-button-confirm pay"
+                        v-if="orderStateMap[orderInfo.state].bottomButtonShow.pay"
+                        @click="onConfirmPay">立即支付</button>
+                    <button
+                        class="j-button-cancel invoke"
+                        v-if="orderStateMap[orderInfo.state].bottomButtonShow.invoke"
+                        @click="lookInvoke">${ invokeButtonText }</button>
+                    <button
+                        class="j-button-confirm buy-again"
+                        v-if="orderStateMap[orderInfo.state].bottomButtonShow.buyAgain"
+                        @click="buyAgain">再次购买</button>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--S-当前页面的资源-->
+    <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>
+    {{include "/big-member/commonjs.html"}}
+    <script>
+        var pageInfo = {
+            platform: 'app',
+            version: {{Msg "seo" "version"}},
+        }
+    </script>
+    <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/order-list/js/order-list-config.js?v={{Msg "seo" "version"}}'></script>
+    <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/order-list/js/order-detail.js?v={{Msg "seo" "version"}}'></script>
+    <!--E-当前页面的资源-->
+    {{include "/common/baiducc.html"}}
+</body>
+
+</html>

+ 7 - 6
src/jfw/modules/subscribepay/src/baseApi.json

@@ -1,11 +1,12 @@
 {
   "appId": "10000",
   "apiList": {
-    "buyBalance": "http://127.0.0.1:8889/resources/purchaseUserBalance",
-    "useBalance": "http://127.0.0.1:8889/resources/useUserDetailed",
-    "findPreview": "http://127.0.0.1:8889/resources/findPreview",
-    "findBalance": "http://127.0.0.1:8889/resources/findBalance",
-    "findRecord": "http://127.0.0.1:8889/resources/findRecord",
-    "entdedupUrl": "http://127.0.0.1:8888/data/deduplication"
+    "buyBalance": "http://127.0.0.1:8124/resources/purchaseUserBalance",
+    "useBalance": "http://127.0.0.1:8124/resources/useUserDetailed",
+    "findPreview": "http://127.0.0.1:8124/resources/findPreview",
+    "findBalance": "http://127.0.0.1:8124/resources/findBalance",
+    "findRecord": "http://127.0.0.1:8124/resources/findRecord",
+    "entdedupUrl": "http://127.0.0.1:8888/data/deduplication",
+    "updateVipTime":"http://127.0.0.1:8124/resources/updateVipTime"
   }
 }

+ 7 - 6
src/jfw/modules/subscribepay/src/config/config.go

@@ -253,12 +253,13 @@ var JyApiConfig *ApiConfig
 type ApiConfig struct {
 	AppId   string `json:"appId"`
 	ApiList struct {
-		BuyBalance  string `json:"buyBalance"`  //购买资源
-		UseBalance  string `json:"useBalance"`  //使用资源
-		FindBalance string `json:"findBalance"` //查询账户余额接口
-		FindRecord  string `json:"findRecord"`  //查询流水账接口
-		FindPreview string `json:"findPreview"` //数据导出去重查询
-		EntDedupUrl string `json:"entdedupUrl"` //企业去重
+		BuyBalance    string `json:"buyBalance"`    //购买资源
+		UseBalance    string `json:"useBalance"`    //使用资源
+		FindBalance   string `json:"findBalance"`   //查询账户余额接口
+		FindRecord    string `json:"findRecord"`    //查询流水账接口
+		FindPreview   string `json:"findPreview"`   //数据导出去重查询
+		EntDedupUrl   string `json:"entdedupUrl"`   //企业去重
+		UpdateVipTime string `json:"updateVipTime"` //更新超级订阅到期时间接口
 	} `json:"apiList"`
 }
 

+ 23 - 0
src/jfw/modules/subscribepay/src/entity/commonApi.go

@@ -201,3 +201,26 @@ func (this *FindRecordStruct) FindBalance() ([]interface{}, int, error) {
 	list, _ := resMap["data"].([]interface{})
 	return list, total, err
 }
+
+//
+
+type UpdateVipTimeStruct struct {
+	AccountId string //账户标识
+	VipTime   int64  //结束时间时间戳
+}
+
+// @Summary 更新超级订阅到期时间
+// @Param  &UpdateVipTimeStruct
+// @return list列表 , int数量 , error
+func (this *UpdateVipTimeStruct) UpdateVipEndTime() (bool, error) {
+	resMap, err := commonPost(config.JyApiConfig.ApiList.UpdateVipTime, url.Values{
+		"accountId": []string{this.AccountId},                  //账户标识
+		"vipTime":   []string{fmt.Sprintf("%v", this.VipTime)}, //到期时间戳
+	})
+	if err != nil {
+		return false, err
+	}
+	ok := qu.IntAll(resMap["code"]) == 1
+	log.Println(resMap)
+	return ok, nil
+}

+ 10 - 0
src/jfw/modules/subscribepay/src/entity/subscribeVip.go

@@ -200,6 +200,16 @@ func (this *vipSubscribeStruct) PayCallBack(param *CallBackParam) bool {
 		flag = JyVipSubStruct.UpgradeSubVip(userid, vmsg, qutil.ObjToString((*orderdata)["vip_endtime"]))
 	} else if vmsg.OrderType == 5 { //续费(可升降级)
 		flag = JyVipSubStruct.WillNew(userid, vmsg, qutil.ObjToString((*orderdata)["vip_starttime"]), qutil.ObjToString((*orderdata)["vip_endtime"]))
+
+	}
+	if vmsg.OrderType == 2 || vmsg.OrderType == 5 {
+		//延长【附件下载包】到期时间
+		etm, _ := time.ParseInLocation(qutil.Date_Full_Layout, qutil.ObjToString((*orderdata)["vip_endtime"]), time.Local)
+		updateT := &UpdateVipTimeStruct{
+			AccountId: userid,
+			VipTime:   etm.Unix(),
+		}
+		updateT.UpdateVipEndTime()
 	}
 	//支付成功后
 	if flag {

+ 19 - 0
src/jfw/modules/subscribepay/src/service/resourcePack.go

@@ -25,6 +25,7 @@ type ResourcePack struct {
 	account     xweb.Mapper `xweb:"/resourcePack/account"`     //个人账户
 	recordList  xweb.Mapper `xweb:"/resourcePack/recordList"`  //“资源包”使用记录
 	consumePack xweb.Mapper `xweb:"/resourcePack/consumePack"` //“资源包”消费
+	price       xweb.Mapper `xweb:"/resourcePack/price"`       //价格
 }
 
 const (
@@ -33,6 +34,14 @@ const (
 
 func (this *ResourcePack) Tes() {
 	userId := qu.ObjToString(this.GetSession("userId"))
+
+	etm, _ := time.ParseInLocation(qu.Date_Full_Layout, "2022-12-12 23:59:59", time.Local)
+	updateT := &entity.UpdateVipTimeStruct{
+		AccountId: userId,
+		VipTime:   etm.Unix(),
+	}
+	updateT.UpdateVipEndTime()
+	return
 	a, b, c := entity.InitFindRecord(userId, entity.ATTACHMENT, "2022-01", "PC", 10, 1, 0).FindBalance()
 	this.ServeJson(map[string]interface{}{
 		"a": a,
@@ -177,3 +186,13 @@ func (this *ResourcePack) Account() {
 	}
 	this.ServeJson(Result{Data: data})
 }
+
+func (this *ResourcePack) Price() {
+	product := this.GetString("product")
+	switch product {
+	case "attachmentDownPack":
+		this.ServeJson(Result{Data: config.ResConf.AttachmentDownPackPrice})
+		return
+	}
+	this.ServeJson(Result{Error_msg: "参数错误"})
+}

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

@@ -264,12 +264,10 @@ var vm = new Vue({
       var productType = order.product_type
       var platform = this.platform
       var headerImgUrl = ''
-      if (productType === '省份订阅包') {
-        headerImgUrl = assetsConf.areaPackLink.imgMap.headerImg[platform]
-      }else if (productType === '数据流量包') {
-        headerImgUrl = assetsConf.dataPackLink.imgMap.headerImg[platform]
+      var productKey = assetsConf.productionTypeMap[productType]
+      if (productKey) {
+        headerImgUrl =  assetsConf[productKey].imgMap.headerImg[platform]
       }
-
       return headerImgUrl
     },
     getSurplusTimeTime: function (order) {
@@ -422,80 +420,37 @@ var vm = new Vue({
       })
     },
     onConfirmPay: function () {
-      var order = this.reqOrder
-      var productType = order.product_type
-      var orderCode = order.order_code
-      var platform = this.platform
-      switch (productType) {
-        case '数据流量包': {
-          var href = assetsConf.dataPackLink.pay[platform]
-          if (href) {
-            this.goToLink(`${href}?orderCode=${orderCode}`)
-          }
-          break
-        }
-        case '省份订阅包': {
-          var href = assetsConf.areaPackLink.pay[platform]
-          if (href) {
-            this.goToLink(`${href}?orderCode=${orderCode}`)
-          }
-          break
-        }
-        default: {
-          break
-        }
+      var link = this.getPublicLinkOfKey(this.reqOrder.product_type, 'pay')
+      if (link) {
+        this.goToLink(`${link}?orderCode=${this.reqOrder.order_code}`)
       }
     },
-    renew: function () {
+    getPublicLinkOfKey (productKey, key) {
       var order = this.reqOrder
       var orderCode = order.order_code
       var productType = order.product_type
       var platform = this.platform
-      switch (productType) {
-        case '数据流量包': {
-          var href = assetsConf.dataPackLink.renew[platform]
-          if (href) {
-            this.goToLink(`${href}?orderCode=${orderCode}`)
-          }
-          break
-        }
-        case '省份订阅包': {
-            var href = assetsConf.areaPackLink.renew[platform]
-            if (href) {
-              this.goToLink(`${href}&orderCode=${orderCode}`)
-            }
-            break
-        }
-        default: {
-          break
+      var productKey = assetsConf.productionTypeMap[productType]
+      var tempValue = ''
+      if (productKey) {
+        try {
+          tempValue = assetsConf[productKey][key][platform]
+        } catch (e) {
+          console.warn(e)
         }
       }
+      return tempValue
+    },
+    renew: function () {
+      var link = this.getPublicLinkOfKey(this.reqOrder.product_type, 'renew')
+      if (link) {
+        this.goToLink(`${link}?orderCode=${this.reqOrder.order_code}`)
+      }
     },
     buyAgain: function () {
-      var _this = this
-      var order = this.reqOrder
-      var productType = order.product_type
-      var orderCode = order.order_code
-      var platform = this.platform
-
-      switch (productType) {
-        case '数据流量包': {
-          var href = assetsConf.dataPackLink.buyAgain[platform]
-          if (href) {
-            this.goToLink(`${href}?orderCode=${orderCode}`)
-          }
-          break
-        }
-        case '省份订阅包': {
-          var href = assetsConf.areaPackLink.buyAgain[platform]
-          if (href) {
-            this.goToLink(`${href}&orderCode=${orderCode}`)
-          }
-          break
-        }
-        default: {
-          break
-        }
+      var link = this.getPublicLinkOfKey(this.reqOrder.product_type, 'buyAgain')
+      if (link) {
+        this.goToLink(`${link}?orderCode=${this.reqOrder.order_code}`)
       }
     },
     getProductInfoList: function (info) {
@@ -513,6 +468,10 @@ var vm = new Vue({
           infoList = this.getAreaPackInfo(order)
           break
         }
+        case '附件下载包': {
+          infoList = this.getFilePackInfo(order)
+          break
+        }
         default: {
           break
         }
@@ -520,6 +479,26 @@ var vm = new Vue({
 
       return infoList
     },
+    // 附件下载包订单卡片信息整理
+    getFilePackInfo: function (order) {
+      var filterInfo = JSON.parse(order.filter)
+      var payNum = filterInfo.num + '个'
+      if(filterInfo.give_cycle){
+        payNum += '<span class="highlight-text">&nbsp赠' +	filterInfo.give_cycle + '个</span>'
+      }
+      var numInfo = {
+        label: '附件个数',
+        split: ':',
+        text: payNum
+      }
+      var date = {
+        label: '有效期至',
+        split: ':',
+        text: filterInfo.validTime.replace(/-/g, '/')
+      }
+
+      return [numInfo, date]
+    },
     // 省份订阅包订单卡片信息整理
     getAreaPackInfo: function (order) {
       var filterInfo = JSON.parse(order.filter)

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

@@ -3,6 +3,12 @@
 var assetsConf = {
   version: pageInfo.version,
   platform: pageInfo.platform,
+  // 维护 KeyMap 用于公用订单详情页
+  productionTypeMap: {
+    '数据流量包': 'dataPackLink',
+    '省份订阅包': 'areaPackLink',
+    '附件下载包': 'filePackLink'
+  },
   // 产品集合
   productionTypeList: [
     '历史数据',

+ 15 - 23
src/web/staticres/common-module/order-list/js/order-list.js

@@ -1111,6 +1111,13 @@ var vm = new Vue({
           }
           break
         }
+        case '附件下载包': {
+          var href = assetsConf.filePackLink.pay[platform]
+          if (href) {
+            this.goToLink(`${href}?orderCode=${orderCode}`)
+          }
+          break
+        }
         case '省份订阅包': {
           var href = assetsConf.areaPackLink.pay[platform]
           if (href) {
@@ -2098,40 +2105,25 @@ var vm = new Vue({
       specs.text = specMap[filterInfo.pType]
       return [prodType, buyCount, date, specs]
     },
-    // 数据包订单卡片信息整理
+    // 附件下载包订单卡片信息整理
     getFilePackInfo: function (order) {
       var filterInfo = JSON.parse(order.filter)
-    	  var payNum = filterInfo.pNum + '条'
+    	  var payNum = filterInfo.num + '个'
 	  if(filterInfo.give_cycle){
-		payNum += '<span class="highlight-text">&nbsp赠' +	filterInfo.give_cycle + '</span>'
+		payNum += '<span class="highlight-text">&nbsp赠' +	filterInfo.give_cycle + '</span>'
 	  }
-      var prodType = {
-        label: '产品类型',
-        split: ':',
-        text: order.product_type
-      }
-      var buyCount = {
-        label: '充值条数',
+      var numInfo = {
+        label: '附件个数',
         split: ':',
         text: payNum
       }
       var date = {
-        label: '使用有效日期',
-        split: ':',
-        text: filterInfo.validYear + '年'
-      }
-      var specs = {
-        label: '数据规格',
+        label: '有效期至',
         split: ':',
-        text: ''
+        text: filterInfo.validTime.replace(/-/g, '/')
       }
 
-      var specMap = {
-        1: '标准字段包',
-        2: '高级字段包'
-      }
-      specs.text = specMap[filterInfo.pType]
-      return [prodType, buyCount, date, specs]
+      return [numInfo, date]
     },
     // 省份订阅包订单卡片信息整理
     getAreaPackInfo: function (order) {

+ 324 - 0
src/web/templates/order/pc/filePack/detail.html

@@ -0,0 +1,324 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <title>订单详情</title>
+    <meta content="增值服务" theme="light" name="enable-header"/>
+    <script>
+        var myPageNavIsNormal = true;
+    </script>
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/course/css/bootstrap.min.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/course/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/course/css/reset_pc.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/course/css/order_detail.css?v={{Msg "seo" "version"}}">
+    {{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 rel="stylesheet" type="text/css"
+          href="{{Msg "seo" "cdn"}}/pccss/public-nav-1200.css?v={{Msg "seo" "version"}}"/>
+    <script type="text/javascript" src="{{Msg "seo" "cdn"}}/js/public-nav.js?v={{Msg "seo" "version"}}3"></script>
+    <!--[if lt IE 9]>
+    <script src="https://cdn-common.jianyu360.com/cdn/lib/html5shiv/3.7.3/html5shiv.min.js"></script>
+    <script src="https://cdn-common.jianyu360.com/cdn/lib/respond-js/1.4.2/respond.min.js"></script>
+    <![endif]-->
+    <style>
+        .filter_data p {
+            font-size: 14px;
+            margin-bottom: 10px;
+        }
+
+        #order_detail {
+            line-height: 1;
+            padding-top: 76px;
+            padding-bottom: 0px !important;
+            background-color: #fff;
+        }
+
+        .qxBg {
+            border-top: 2px solid #999999;
+            background-color: #ececec;
+        }
+
+        .qxBgFont {
+            color: #686868;
+        }
+    </style>
+</head>
+<body>
+{{include "/common/pchead.html"}}
+<!-- header -->
+<!-- main  START -->
+<div class="order_detail" id="order_detail">
+    <div class="w order_crumb">
+        <a href="#" onclick="window.location.href='/front/swordfish/toMyOrder'">我的订单</a><em> > </em>
+        <a href="#" class="active">订单详情</a>
+    </div>
+    <div class="w order_main">
+        <!-- greenBg 为绿色背景及边框 redBg为红色背景及边框 -->
+        <div id="bg" class="o_m_thead greenBg">
+            <p class="order_id"></p>
+            <p class="clearfix order_state">
+                <!--greenFont为绿色字体 redFont为红色字体 -->
+                <span class="greenFont hide" id="status_success">已完成</span>
+                <span class="redFont hide" id="status_wait_pay">待付款</span>
+                <span class="qxBgFont hide" id="status_cancelled">已取消</span>
+
+                <a class="go_pay payOrder" style="display: none;">去支付</a>
+
+                <!-- 当状态为已完成时显示开发票 或 查看发票 -->
+                <a class="openinvoice go_pay" style="display: none;">开发票</a>
+                <a class="lookinvoice go_pay" style="display: none;">查看发票</a>
+            </p>
+        </div>
+
+        <div class="o_m_tbody">
+            <div class="b_list">
+                <div class="list_thead">
+                    <span class="fl">购买信息</span>
+                </div>
+                <div class="clearfix list_tbody">
+                    <div class="filter_data">
+                        <p><span class="hy_text">附件个数</span>:<span class="hysl"></span>个<span class="give_num"  style="color:#2CB7CA"></span></p>
+                        <p><span class="zq_text">有效期至</span>:<span class="dyzq"></span></p>
+                    </div>
+                </div>
+            </div>
+            <div class="b_list">
+                <div class="list_thead">
+                    <span class="fl">订单信息</span>
+                </div>
+                <div class="clearfix list_tbody">
+                    <div class="filter_data">
+                        <p>订单编号:<span class="order_code"></span></p>
+                        <p>下单时间:<span class="order_time"></span></p>
+                        <p class="pay_time_p" style="display: none;">支付时间:<span class="pay_time"></span></p>
+                        <p class="pay_way_p" style="display:none">支付方式:<span class="pay_way"></span></p>
+                        <p class="pay_num_p" style="display:none">支付单号:<span class="pay_num"></span></p>
+                        <p class="price_p" data-need-before-money>商品总价:<span class="price"></span> &nbsp; <span class="valuationList"
+                                                                                                                style="color:#2CB7CA;display:none;cursor:pointer">计费清单</span>
+                        </p>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+    </div>
+    <div style="margin-top: 20px;"></div>
+    <!-- main END -->
+    {{include "/common/pcbottom.html"}}
+    {{include "/common/baiducc.html"}}
+    <script src="{{Msg "seo" "cdn"}}/course/js/jquery-2.1.4.min.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/course/js/bootstrap.min.js?v={{Msg "seo" "version"}}"></script>
+    <!-- footer -->
+    <script>
+        $(function () {
+            $("#public-nav").css("background", "#fff");
+            $(".public-nav").css("border-bottom", "1px solid #e0e0e0");
+            $("section[id='drder']").css("padding-top", "80px");
+            haslogin({{.T.logid}});
+
+            var orderCode = getParam("order_code");
+            $(".order_id").text("订单编号:" + orderCode);
+            $.post("/subscribepay/orderListDetails/getOrderPayAllMsg", {"orderCode": orderCode}, function (r) {
+                if (r == '{"error":"需要登录!"}') {
+                    location.href = '/';
+                }
+                if (r.success) {
+                    //订单信息
+                    $(".order_code").text(orderCode);
+                    var filterObj = JSON.parse(r.data.order.filter);
+                    if (r.data.order.create_time) {
+                        $(".order_time").text(r.data.order.create_time.replace(/-/g, "."));
+                    }
+
+                    /*---S-优惠券---*/
+                    function insetMoneyItem () {
+                        // 商品总价=订单金额(order_money)+优惠金额(order.discount_price)
+                        var order_money = (r.data.order.order_money / 100)
+                        var getPayMoney = (r.data.order.pay_money / 100)
+                        var getCouponMoney = (r.data.order.discount_price / 100) || 0
+                        var prodMoney = (order_money * 100) + (getCouponMoney * 100)
+                        var insetDom = $('*[data-need-before-money]')
+
+                        $(".price").text("¥ " + formatMoney(prodMoney / 100) + "元");
+                        // 已取消和已退款订单不显示优惠信息
+                        if (r.data.order.order_status != -2 && r.data.order.order_status != -3) {
+                            if (getPayMoney) {
+                                insetDom.after('<p>实付金额:¥' + formatMoney(getPayMoney) +'元</p>')
+                            }
+                            if (getCouponMoney) {
+                                insetDom.after('<p>优惠金额:-¥' + formatMoney(getCouponMoney) +'元</p>')
+                            }
+                        }
+
+                    }
+                    insetMoneyItem()
+                    /*---E-优惠券---*/
+
+                    //优惠码
+                    if (r.data.order.isUsedActiveCode) {
+                        $(".discount-container").removeClass("hide");
+                        $(".highlight-text").text("赠送30天");
+                    }
+                    var give_cycle=filterObj.give_cycle;
+                    if (give_cycle!=undefined){
+                        give_cycle = give_cycle < 12 ? (give_cycle + '个月') : ('1年');
+                    }
+                    if (give_cycle) {
+                        $(".discount-container").removeClass("hide");
+                        $(".highlight-text").text("赠送"+give_cycle);
+                    }
+                    if (r.data.order.order_status == 1) {
+                        $("#status_success").removeClass("hide");
+                        if (r.data.order.pay_time){
+                            $(".pay_time_p").css("display", "");
+                            $(".pay_time").text(r.data.order.pay_time.replace("-", ".").replace("-", "."));
+                        }
+                        //支付方式
+                        if (r.data.order.pay_way && r.data.order.pay_way.indexOf("wx") > -1) {
+                            $(".pay_way_p").css("display", "");
+                            $(".pay_way").text("微信支付");
+                        } else if (r.data.order.pay_way && r.data.order.pay_way.indexOf("ali") > -1) {
+                            $(".pay_way").text("支付宝支付");
+                            $(".pay_way_p").css("display", "");
+                        }
+                        if (r.data.order.original_price == 0) {
+                            $(".pay_time_p").css("display", "none");
+                            $(".vip_type").text("(试用)");
+                        } else if (r.data.order.pay_money > 0){
+                            $(".pay_num_p").css("display", "");
+                            if (r.data.transaction_id) $(".pay_num").text(r.data.transaction_id);
+                            //发票
+                            if (r.data.order.applybill_status === 0) {
+                                $(".openinvoice").css("display", "");
+                            } else if (r.data.applybill_status === 1 || r.data.applybill_status === 2) {
+                                $(".lookinvoice").css("display", "").on("click", function () {
+                                    checkinvoice(r.data.applybill_status, orderCode)//查看发票
+                                })
+                            }
+                        }
+                    }
+                    if (r.data.order.order_status == -2 || r.data.order.order_status == -3) {
+                        $("#status_cancelled").removeClass("hide");
+                        $("#bg").addClass("qxBg").removeClass("greenBg");
+                    }
+                    if (r.data.order.order_status == 0) {
+                        $("#status_wait_pay").removeClass("hide");
+                        $("#bg").addClass("redBg").removeClass("greenBg");
+                        $(".payOrder").show();
+                    }
+                    // 展示字段
+                    $('.filter_data .level').text(filterObj.pType == '1' ? '标准' : '高级')
+                    $('.filter_data .dyzq').text(filterObj.validTime.replace(/-/g, '.'))
+                    $('.filter_data .hysl').text(filterObj.num)
+                    $('.filter_data .give_num').text((filterObj.give_cycle > 0 ? ' 赠'+filterObj.give_cycle + '个' : ''))
+                    $(".payOrder").on("click", function () {
+                        location.href = "/front/filePack/orderPay/" + orderCode;
+                    })
+
+                    //计价清单
+                    var filterObj = JSON.parse(r.data.order.filter);
+                    var upgradeSubtotail = filterObj.upgradeSubtotail;
+                    if (upgradeSubtotail) {	//有则显示
+                        $(".valuationList").css("display", "");
+                        $(".valuationList").on("click", function () {
+                            window.location.href = "/front/order/valuationList/" + orderCode;
+                        })
+                    }
+                }
+            })
+
+
+            $(".openinvoice").on("click", function () {
+                return false // 待可开发票时删除
+                $.post("/subscribepay/orderListDetails/isOver", {"order_code": orderCode}, function (r) {
+                    if (r.status != 1) {
+                        window.open("/front/order/invoicetimeOut", '_self');
+                    } else {
+                        window.open("/front/order/invoice/" + orderCode, '_self');
+                    }
+                })
+            })
+        })
+
+        // 格式化金钱的函数
+        // s: 金额(number) 必传
+        // n: 保留小数的位数(int:0-100)
+        function formatMoney(s, n) {
+            if (n === undefined) {
+                n = -1
+            } else {
+                n = n > 0 && n <= 20 ? n : 2;
+            }
+            var intS = parseInt(s)
+            var point = '.'
+            var left;
+            var right;
+            s = parseFloat((s + '').replace(/[^\d\.-]/g, ''))
+            // 没传n,默认(如果为整数,则不保留小数。如果为浮点数,则保留两位小数)
+            if (n === -1) {
+                if (s === intS) {
+                    n = 0
+                    right = ''
+                    point = ''
+                } else {
+                    n = 2
+                    s = s.toFixed(n);
+                    right = s.split('.')[1];
+                }
+                s = s + ''
+                left = s.split('.')[0].split("").reverse();
+            } else {
+                s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(n) + '';
+                left = s.split('.')[0].split('').reverse();
+                right = s.split('.')[1];
+            }
+
+            t = "";
+            for (i = 0; i < left.length; i++) {
+                t += left[i] + ((i + 1) % 3 == 0 && (i + 1) != left.length ? ',' : '');
+            }
+
+            var money = t.split('').reverse().join('') + point + right;
+            return money;
+        }
+
+
+        /******* 获取url参数(正则)********/
+        function getParam(name) {
+            var search = document.location.search;
+            // alert(search);
+            var pattern = new RegExp("[?&]" + name + "\=([^&]+)", "g");
+            var matcher = pattern.exec(search);
+            var items = null;
+            if (null != matcher) {
+                try {
+                    items = decodeURIComponent(decodeURIComponent(matcher[1]));
+                } catch (e) {
+                    try {
+                        items = decodeURIComponent(matcher[1]);
+                    } catch (e) {
+                        items = matcher[1];
+                    }
+                }
+            }
+            return items;
+        };
+        //查看发票
+        function checkinvoice(flag, orderCode) {
+            if (flag === 2) {
+                var showHtml = '<div style="width: 100%;height: 100%;z-index: 999; position: absolute;top: 0;background: rgba(0, 0, 0, 0.65);">   <div style="position: fixed;z-index: 9999;width: 540px;height: 262px;left: 50%;top: 30%;margin-left: -270px;background-color: #fff;border-radius: 6px;padding: 32px;display: flex;flex-direction: column;justify-items: center;align-items: center;">       <div class="invoice_title" style="color: #1D1D1D;font-size: 18px;line-height: 28px;">提示</div>       <div class="invoice_body"            style="height: 78px;margin: 20px 0px;font-size: 14px;line-height: 24px;text-align: center;">           您已开具发票<br>           如有问题请联系客服<br>           400-108-6670       </div>       <div class="invoice_control"            style="width: 132px;height: 36px;text-align: center;background: #2CB7CA;border-radius: 6px;font-size: 16px;line-height: 36px;color: #FFFFFF;cursor: pointer;"            onclick="document.querySelector(\'#invoice_tip\').remove()"       >           我知道了       </div>   </div>\n</div>'
+                var div_invoice_tip = document.createElement('div');
+                div_invoice_tip.innerHTML = showHtml;
+                div_invoice_tip.id = "invoice_tip"
+                document.body.appendChild(div_invoice_tip)
+                return
+            }
+            window.open("/front/order/check_invoice/" + orderCode, '_self');
+        }
+    </script>
+</body>
+</html>

+ 7 - 4
src/web/templates/pc/myOrder.html

@@ -274,8 +274,8 @@
                                     <p>数据规格:@#item.filter.pType == '1' ? '标准' : '高级'#@字段包</p>
                                 </div>
                                 <div class="fl shop_main" v-if="item.product_type === '附件下载包'">
-                                    <p>附件个数:@#item.filter.pNum#@个<span style="color: #2cb7ca;"> @#item.filter.give_cycle >0 ? '赠' + item.filter.give_cycle +'个': ''#@</span></p>
-                                    <p>有效期至:@#item.filter.validTime#@</p>
+                                    <p>附件个数:@#item.filter.num#@个<span style="color: #2cb7ca;"> @#item.filter.give_cycle >0 ? '赠' + item.filter.give_cycle +'个': ''#@</span></p>
+                                    <p>有效期至:@#item.filter.validTime | FormatStrSplit#@</p>
                                 </div>
                                 <div class="fl shop_main" v-if="item.product_type === '中标必听课'">
                                     <p>课程名称:@#item.filter.s_name#@</p>
@@ -710,6 +710,9 @@
         FormatDateFn: function (value) {
           return new Date(value * 1000).Format('yyyy/MM/dd')
         },
+        FormatStrSplit: function (value) {
+          return value.replace(/-/g, '.')
+        },
         formatAreaText: function (value, old) {
             return value === -1  ? '全国' : ((old ? (value - old) : value)  + '个省')
         },
@@ -995,7 +998,7 @@
               break
             }
             case '附件下载包': {
-              href = '/front/file/orderPay/' + item.order_code
+              href = '/front/filePack/orderPay/' + item.order_code
               break
             }
             case '数据流量包': {
@@ -1061,7 +1064,7 @@
         },
         goInvoice: function (item) {
           if (item.applybill_status === 0) {
-            return $('#cantOpenInvoiceDialog').modal() 
+            return $('#cantOpenInvoiceDialog').modal()
             // $.alert({
             //     title: '温馨提示',
             //     titleClass: 'custom-alert-title',

+ 117 - 0
src/web/templates/weixin/commonPay/filePack/orderDetail.html

@@ -0,0 +1,117 @@
+<!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>
+    <!--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"}}/big-member/css/j-icons.css?v={{Msg "seo" "version"}}'>
+    <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/css/public.css?v={{Msg "seo" "version"}}'>
+    <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/common-module/order-list/css/order-detail.css?v={{Msg "seo" "version"}}' />
+</head>
+<body>
+    <div class="j-container">
+        <div class="j-main order-detail" id="app" v-cloak>
+            <div class="j-container">
+                <div class="j-main no-scrollbar">
+                    <div class="wrapper">
+                        <div class="header-pic arc-container" :class="orderStateMap[orderInfo.state].bgcClassName">
+                            <div class="order-state">${ orderStateMap[orderInfo.state].text }</div>
+                            <div class="surplus-time" v-if="orderStateMap[orderInfo.state].surplusTimeShow && orderInfo.surplusTime > 0">
+                                <span>剩余支付时间:</span>
+                                <van-count-down @finish="onCountdownFinish" :time="orderInfo.surplusTime"></van-count-down>
+                            </div>
+                        </div>
+                        <div class="card-list">
+                            <div class="j-card report-p">
+                                <span class="rp-left" :class="'badge-' + (orderInfoFilter.badge || '')">
+                                    <img class="card-l-pic" :src="orderInfo.headerImg">
+                                </span>
+                                <span class="rp-right">
+                                    <span class="product-type">${ orderInfo.productType }</span>
+                                    <span class="pay-money">&yen; ${ orderInfo.payMoney }</span>
+                                </span>
+                            </div>
+                            <div class="j-card product-info">
+                                <div class="j-card-title">购买信息</div>
+                                <div class="j-card-items">
+                                    <div
+                                        class="j-card-item"
+                                        :class="item.className"
+                                        v-for="(item, index) in orderInfo.productInfoList"
+                                        :key="index"
+                                        v-show="item.text"
+                                    >
+                                        <span class="card-item-l">${ item.label + item.split }</span>
+                                        <span class="card-item-r" v-html="item.text"></span>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="j-card report-info">
+                                <div class="j-card-title">订单信息</div>
+                                <div class="j-card-items">
+                                    <div
+                                        class="j-card-item"
+                                        :class="item.className"
+                                        v-for="(item, index) in orderInfo.orderInfoList"
+                                        :key="index"
+                                        v-show="item.text"
+                                    >
+                                        <span class="card-item-l">${ item.label + item.split }</span>
+                                        <span class="card-item-r" v-html="item.text"></span>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="j-button-group j-footer" v-show="buttonGroupShow">
+                    <button
+                        class="j-button-confirm pay"
+                        v-if="orderStateMap[orderInfo.state].bottomButtonShow.pay"
+                        @click="onConfirmPay">立即支付</button>
+                    <button
+                        class="j-button-cancel invoke"
+                        v-if="orderStateMap[orderInfo.state].bottomButtonShow.invoke"
+                        @click="lookInvoke">${ invokeButtonText }</button>
+                    <button
+                        class="j-button-confirm buy-again"
+                        v-if="orderStateMap[orderInfo.state].bottomButtonShow.buyAgain"
+                        @click="buyAgain">再次购买</button>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--S-当前页面的资源-->
+    <script src="/big-member/js/rem.js"></script>
+    <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/jquery/3.6.0/jquery.min.js></script>
+    <!--E-当前页面的资源-->
+    <script>
+        var pageInfo = {
+            platform: 'wx',
+            version: {{Msg "seo" "version"}},
+        }
+    </script>
+    <script src='{{Msg "seo" "cdn"}}/big-member/js/utils.js?v={{Msg "seo" "version"}}'></script>
+    <script src='{{Msg "seo" "cdn"}}/common-module/order-list/js/order-list-config.js?v={{Msg "seo" "version"}}'></script>
+    <script src='{{Msg "seo" "cdn"}}/common-module/order-list/js/order-detail.js?v={{Msg "seo" "version"}}'></script>
+    {{include "/common/baiducc.html"}}
+</body>
+
+</html>