Bläddra i källkod

Merge remote-tracking branch 'origin/developer' into developerA

# Conflicts:
#	src/main/resources/config/dev/application-dev.yml
yuwenjun1997 2 år sedan
förälder
incheckning
efa970b0c8
41 ändrade filer med 804 tillägg och 195 borttagningar
  1. 8 0
      src/main/java/com/caimei/www/controller/unlimited/HelpPageController.java
  2. 26 13
      src/main/java/com/caimei/www/controller/unlimited/ProductController.java
  3. 19 2
      src/main/java/com/caimei/www/controller/unlimitedApi/ShortLinkApi.java
  4. 3 0
      src/main/java/com/caimei/www/mapper/ShortLinkDao.java
  5. 1 1
      src/main/java/com/caimei/www/service/link/ShortLinkService.java
  6. 2 1
      src/main/java/com/caimei/www/service/link/impl/ShortLinkServiceImpl.java
  7. 15 8
      src/main/resources/mapper/ShortLinkMapper.xml
  8. 2 0
      src/main/resources/static/css/activity/attestation.css
  9. 99 0
      src/main/resources/static/css/help/clubinfo.css
  10. 1 1
      src/main/resources/static/css/index/index_new.h5.css
  11. 7 3
      src/main/resources/static/css/index/index_new.pc.css
  12. 1 1
      src/main/resources/static/js/article/list.js
  13. 0 1
      src/main/resources/static/js/common/ajax.service.js
  14. 12 0
      src/main/resources/static/js/common/serviceapi/pay.service.js
  15. 16 0
      src/main/resources/static/js/common/serviceapi/product.service.js
  16. 44 0
      src/main/resources/static/js/common/serviceapi/user.service.js
  17. 6 3
      src/main/resources/static/js/document/beautyArchiveDetailMixin.js
  18. 176 0
      src/main/resources/static/js/help/clubinfo.js
  19. 1 0
      src/main/resources/static/js/index.js
  20. 23 0
      src/main/resources/static/js/mixins/bankMixins.js
  21. 51 0
      src/main/resources/static/js/mixins/cmsMixins.js
  22. 3 3
      src/main/resources/static/js/pay/caimei-hlbpay.js
  23. 2 0
      src/main/resources/static/js/pay/caimei-paylist.js
  24. 2 9
      src/main/resources/static/js/pay/caimei-payunder.js
  25. 65 49
      src/main/resources/static/js/product/detail.js
  26. 1 0
      src/main/resources/static/js/single-page/promotions.js
  27. 2 1
      src/main/resources/static/js/supplier-center/article/article-list.js
  28. 2 1
      src/main/resources/static/js/supplier-center/encyclopedia/instrument-list.js
  29. 2 1
      src/main/resources/static/js/supplier-center/encyclopedia/product-list.js
  30. 1 0
      src/main/resources/static/js/user-center/member/memberPage.js
  31. 4 2
      src/main/resources/static/js/user-center/order/detail.js
  32. 4 2
      src/main/resources/static/js/user-center/order/list.js
  33. 1 1
      src/main/resources/static/js/utils.js
  34. 1 1
      src/main/resources/templates/components/footer.html
  35. 99 0
      src/main/resources/templates/help/clubinfo.html
  36. 13 11
      src/main/resources/templates/index.html
  37. 4 3
      src/main/resources/templates/pay/caimei-paylist.html
  38. 4 3
      src/main/resources/templates/pay/caimei-payunder.html
  39. 68 65
      src/main/resources/templates/product/detail.html
  40. 2 2
      src/main/resources/templates/product/product-hot.html
  41. 11 7
      src/main/resources/templates/single-page/promotions.html

+ 8 - 0
src/main/java/com/caimei/www/controller/unlimited/HelpPageController.java

@@ -25,6 +25,7 @@ public class HelpPageController extends BaseController {
 	private static final String HELP_PAGE_PATH = "help/help";
 	private static final String HELP_PAGE_NEWS = "help/news";
 	private static final String HELP_PAGE_NEWSDETAILS = "help/details";
+    private static final String HELP_CLUBINFO_DETAIL = "help/clubinfo";
 
     private HelpService helpService;
     @Autowired
@@ -66,6 +67,13 @@ public class HelpPageController extends BaseController {
     public String news() {
         return HELP_PAGE_NEWS;
     }
+    /**
+     * 公告页
+     */
+    @GetMapping("/clubinfo.html")
+    public String clubinfo() {
+        return HELP_CLUBINFO_DETAIL;
+    }
     /**
      * 公告详情页
      */

+ 26 - 13
src/main/java/com/caimei/www/controller/unlimited/ProductController.java

@@ -36,7 +36,9 @@ public class ProductController extends BaseController {
     private static final String TEMPORARY_PAGE_PATH = "product/temporary";
     private static final String INSTRUMENT_LIST_PATH = "product/instruelist";
     // private static final String QUALITY_AUTHORRIZE_PATH = "product/qualityauthorize";
-    /** 新正品联盟页面 */
+    /**
+     * 新正品联盟页面
+     */
     private static final String QUALITY_AUTHORRIZE_PATH = "product/alliance-page";
     private static final String ACTIVITY_TOP_PATH = "activity/activityTopic";
     private static final String CLOUD_BEAUTY_PATH = "activity/beautyTopic";
@@ -102,19 +104,29 @@ public class ProductController extends BaseController {
      * 商品详情页
      */
     @GetMapping("/product-{id}.html")
-    public String detail(final Model model, @PathVariable("id") Integer productId) {
+    public String detail(final Model model, @PathVariable("id") String product) {
+        Integer productId = null;
+        Integer typeId = 0;
+        if (product.contains("-")) {
+            String[] split = product.split("-");
+            productId = Integer.valueOf(split[0]);
+            typeId = Integer.valueOf(split[1]);
+        } else {
+            productId = Integer.valueOf(product);
+        }
         ProductDetail detail = productService.getProductDetailById(productId);
         if (detail == null || detail.getValidFlag() == 0 || detail.getValidFlag() == 9) {
             return super.errorPath();
         }
-        List<String> images=productService.getImages(productId);
-        List<Parameter> params=productService.getParams(productId);
-        List<ProductList> productLists=productService.getProductLists(productId);
-        model.addAttribute("lists",productLists);
-        model.addAttribute("params",params);
-        model.addAttribute("images",images);
+        List<String> images = productService.getImages(productId);
+        List<Parameter> params = productService.getParams(productId);
+        List<ProductList> productLists = productService.getProductLists(productId);
+        model.addAttribute("lists", productLists);
+        model.addAttribute("params", params);
+        model.addAttribute("images", images);
         model.addAttribute("productId", productId);
         model.addAttribute("product", detail);
+        model.addAttribute("typeId", typeId);
         return PRODUCT_DETAIL_PATH;
     }
 
@@ -218,13 +230,13 @@ public class ProductController extends BaseController {
             productParams.append("?id=").append(bigTypeId).append("&idType=1");
         }
         productParams.append("&pageNum=").append(pageNum).append("&pageSize=").append(pageSize).append("&sortField=").append(sortField).append("&sortType=").append(sortType);
-        if(newg!=null){
+        if (newg != null) {
             productParams.append("&newFlag=").append(newg);
         }
-        if(pro!=null){
+        if (pro != null) {
             productParams.append("&promotionFlag=").append(pro);
         }
-        if(!StringUtils.isEmpty(bpn)){
+        if (!StringUtils.isEmpty(bpn)) {
             productParams.append("&brandIds=").append(bpn);
         }
         JSONObject productObj = productService.getProductListJson(productParams.toString());
@@ -369,7 +381,9 @@ public class ProductController extends BaseController {
      * 认证通页面
      */
     @GetMapping("/attestation.html")
-    public String getAttestationPath() { return ACTIVITY_ATTESTAION; }
+    public String getAttestationPath() {
+        return ACTIVITY_ATTESTAION;
+    }
 
     /**
      * H5配套商品页
@@ -388,5 +402,4 @@ public class ProductController extends BaseController {
     }
 
 
-
 }

+ 19 - 2
src/main/java/com/caimei/www/controller/unlimitedApi/ShortLinkApi.java

@@ -1,15 +1,20 @@
 package com.caimei.www.controller.unlimitedApi;
 
 import com.caimei.www.service.link.ShortLinkService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
+import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.http.server.reactive.ServerHttpResponse;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.server.ServerWebExchange;
 import org.thymeleaf.util.StringUtils;
 
 import java.net.URI;
+import java.util.Objects;
 
 /**
  * Description
@@ -18,6 +23,7 @@ import java.net.URI;
  * @date : 2021/6/24
  */
 @RestController
+@Slf4j
 public class ShortLinkApi {
     private ShortLinkService shortLinkService;
 
@@ -33,8 +39,19 @@ public class ShortLinkApi {
      * @param response
      */
     @GetMapping("/t/{link}")
-    public void linkJump(@PathVariable String link, ServerHttpResponse response) {
-        String jumpLink = shortLinkService.linkJump(link);
+    public void linkJump(@PathVariable String link, ServerWebExchange serverWebExchange, ServerHttpResponse response) {
+        ServerHttpRequest request = serverWebExchange.getRequest();
+        String ip = "";
+        HttpHeaders headers = request.getHeaders();
+        ip = String.valueOf(headers.get("x-forwarded-for"));
+        if (StringUtils.isEmpty(ip)) {
+            ip = String.valueOf(headers.get("X-Real-IP"));
+        }
+        if (null != ip && "" != ip) {
+            ip = ip.replaceAll("[^\\d.]", "");
+        }
+        log.info("访问短链接Ip--------------------------------------》" + ip + "link------------------------------->" + link);
+        String jumpLink = shortLinkService.linkJump(link, ip);
         response.setStatusCode(HttpStatus.FOUND);
         if (StringUtils.isEmpty(jumpLink)) {
             response.getHeaders().setLocation(URI.create("https://www.caimei365.com/404.html"));

+ 3 - 0
src/main/java/com/caimei/www/mapper/ShortLinkDao.java

@@ -2,6 +2,7 @@ package com.caimei.www.mapper;
 
 import com.caimei.www.pojo.link.ShortLink;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * Description
@@ -26,4 +27,6 @@ public interface ShortLinkDao {
      * @param markId
      */
     void updateOnClick(Integer markId);
+
+    void updateShortLink(@Param("link")String link,@Param("ip") String ip);
 }

+ 1 - 1
src/main/java/com/caimei/www/service/link/ShortLinkService.java

@@ -14,5 +14,5 @@ public interface ShortLinkService {
      * @param link
      * @return
      */
-    String linkJump(String link);
+    String linkJump(String link, String ip);
 }

+ 2 - 1
src/main/java/com/caimei/www/service/link/impl/ShortLinkServiceImpl.java

@@ -19,8 +19,9 @@ public class ShortLinkServiceImpl implements ShortLinkService {
     private ShortLinkDao shortLinkDao;
 
     @Override
-    public String linkJump(String link) {
+    public String linkJump(String link, String ip) {
         ShortLink shortLink = shortLinkDao.findByShortLink(link);
+        shortLinkDao.updateShortLink(link, ip);
         if (shortLink == null) {
             return "";
         }

+ 15 - 8
src/main/resources/mapper/ShortLinkMapper.xml

@@ -4,16 +4,23 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.caimei.www.mapper.ShortLinkDao">
     <select id="findByShortLink" resultType="com.caimei.www.pojo.link.ShortLink">
-        SELECT
-          markId,
-          jumpLink
-        FROM
-          cm_short_link
-        WHERE
-          shortLink = #{link}
+        SELECT markId,
+               jumpLink
+        FROM cm_short_link
+        WHERE shortLink = #{link}
     </select>
 
     <update id="updateOnClick">
-        UPDATE cm_sms_statistics SET onClick = (onClick + 1) WHERE markId = #{markId}
+        UPDATE cm_sms_statistics
+        SET onClick = (onClick + 1)
+        WHERE markId = #{markId}
+    </update>
+    <update id="updateShortLink">
+        update cm_short_link
+        set viewTime = now()
+          <if test="ip != null and ip != ''">
+          ,ip = #{ip}
+          </if>
+        where shortLink = #{link}
     </update>
 </mapper>

+ 2 - 0
src/main/resources/static/css/activity/attestation.css

@@ -171,6 +171,7 @@ li{list-style:none}
     .footer{width:1190px;margin:0 auto;text-align:center;height: 130px;-webkit-box-sizing: border-box;box-sizing: border-box;padding: 39px 0;}
     .footer p{line-height: 30px;color: #FFFFFF;}
     .footer p span{margin:0 5px}
+    .footer p span a{color: #FFFFFF;}
     .footer p span img.icp{width: 18px;height: 18px;display: inline-block;}
 }
 /**
@@ -325,6 +326,7 @@ li{list-style:none}
     /*底部*/
     .foot{width:100%;height:auto;background:#262626;}
     .footer{width:100%;padding:4vw 0;background:#262626;margin-top:4vw;text-align:center}
+    .footer p span a{color: #FFFFFF;}
     .footer .logo img{width:9.2vw;height:8vw;vertical-align:middle}
     .footer .dizhi{display:inline-table;color:#ccc;font-size:3.1vw;line-height:4.8vw;vertical-align:super}
 }

+ 99 - 0
src/main/resources/static/css/help/clubinfo.css

@@ -0,0 +1,99 @@
+/*PC端**/
+ @media screen and (min-width:768px) {
+  body{background-color: #FFFFFF;}
+  .club-info-logo{width: 100%;height: 104px;box-sizing: border-box;padding: 30px 0;background-color: #FFFFFF;}
+  .club-info-logo .logo{width: 168px;height: 44px;display: block;margin: 0 auto;}
+  .club-info-logo .logo img{width: 168px;height: 44px;display: block;}
+  #informationPage{width: 700px;margin: 0 auto;}
+  .info-header{width: 100%;height: auto;padding: 24px;float:left;box-sizing: border-box;background-color: #FFFFFF;}
+  .info-header p{width: 100%;font-size: 20px;line-height:34px;font-weight: bold;color: #333333;}
+  .info-header p span{font-size: 16px;color: #666666;font-weight: normal;}
+  .info-content{width: 100%;height: auto;float: left;box-sizing: border-box;padding:0 30px;background-color: #FFFFFF;}
+  .info-title{width: 100%;height: 68px;border-bottom: 1px solid #F0F0F0;}
+  .info-title .info-title-left{width: 50%;height: 68px;font-size: 20px;font-weight: bold;color: #333333;float: left;line-height:68px;}
+  .info-title .info-title-left span{display: inline-block;padding: 0 24px;line-height: 36px;background-color: #FFF2D5;font-size: 16px;color: #E4AA43;text-align: center;margin-left: 10px;font-weight: normal;}
+  .info-title .info-title-right{width: 50%;height: 68px;float: right;line-height: 68px;font-size: 16px;color: #999999;text-align: right;}
+  .info-main{width: 100%;height: auto;}
+  .info-main .info-h1{width: 100%;box-sizing: border-box;padding:0 20px;position: relative;line-height: 60px;font-size: 20px;color: #333333;}
+  .info-main .info-h1 .info-h1-tag{display: inline-block;padding: 0 24px;line-height: 36px;background-color: #FFF2D5;font-size: 16px;color: #ffffff;text-align: center;margin-left: 10px;font-weight: normal;}
+  .info-main .info-h1 .info-h1-tag.orange{background-color: #FFF2D5;color: #E4AA43;}
+  .info-main .info-h1 .info-h1-tag.grey{background-color: #0DB26D;}
+  .info-main .info-h1 .info-h1-tag.warn{background-color: #F94B4B;}
+  .info-main .info-h1:before{content: '';width: 6px;height: 20px;background-color: #E15616;position: absolute;left: 0;top: 20px;}
+  .info-main .info-p{width: 100%;box-sizing: border-box;padding:0 20px;position: relative;line-height: 46px;font-size: 16px;color: #999999;}
+  .info-main .info-p span{color: #333333;}
+  .info-main .info-img{width: 180px;height: 180px;}
+  .info-main .info-img img{width: 180px;height: 180px;display: block;margin-left: 20px;border: 1px dashed #E2E2E2;}
+  .info-button {width: 100%;height: 120px;box-sizing: border-box;background-color: #FFFFFF;padding:35px 40px;float: left;}
+  .info-button .btn{width: 300px;height: 50px;background-color: #E15616;line-height:50px;display: block;text-align: center;color: #FFFFFF;font-size:14px;float: left;}
+  /*弹窗*/
+  .seller-popup{width:100%;height:100%;position:fixed;top:0;left:0;background-color:rgba(0,0,0,.4);z-index: 99999;opacity: 0;}
+  .seller-popup.hide{opacity: 0;}
+  .seller-popup.show{opacity: 1;}
+  .seller-popup .seller-popup-model-content{width:100%;height:400px;position:absolute;left:0;bottom:0;background-color:#FFFFFF;border-radius:2px;box-sizing:border-box;}
+  .seller-popup .title{width:100%;height:50px;float:left;box-sizing:border-box;position:relative;padding:0 24px;background-color: #FEF6F1;}
+  .seller-popup .title p{font-size:16px;line-height:50px;text-align:left;color:#E15616;float:left;font-weight: bold;}
+  .seller-popup .title .icon{width:16px;height:16px;display:block;position:absolute;right:0;top:0;cursor:pointer;padding:10px}
+  .seller-popup .title .icon:before{width:16px;height:16px;background-position:-318px 0}
+  .seller-popup .seller-popup-main{width:100%;height:442px;box-sizing:border-box;float:left;}
+  .seller-popup .seller-popup-content{width:100%;height:385px;box-sizing:border-box;padding: 16px 0;float: left;}
+  .seller-popup .seller-popup-btn{width: 100%;height: 120px;box-sizing: border-box;background-color: #FFFFFF;padding:35px 40px;position: absolute;bottom: 0;left: 0;z-index: 99;}
+  .seller-popup .seller-popup-btn .btn{width: 100%;height: 50px;background-color: #E15616;line-height:50px;display: block;text-align: center;color: #FFFFFF;font-size:14px;float: left;}
+  .seller-popup .seller-popup-scroll{width:100%;height:100%;box-sizing:border-box;float:left;overflow:hidden;overflow-y:auto;padding-bottom:140px;}
+  .seller-popup .seller-list-cell{width: 100%;height: 60px;float: left;position: relative;border-bottom: 1px solid #E1E1E1;padding: 0 20px;box-sizing: border-box;}
+  .seller-popup .seller-list-cell .seller-list-le{width: 50%;height:60px;float: left;box-sizing: border-box;line-height: 60px;font-size: 14px;}
+  .seller-popup .seller-list-cell .seller-list-ri{width: 60px;height: 60px;float: right;box-sizing: border-box;font-size: 16px;color: #FFF;cursor: pointer;padding: 21px;}
+  .seller-popup .seller-list-cell .seller-list-ri .new-icon{width: 18px;height: 18px;box-sizing: border-box;display: block;background: url("/img/base/icon-news@2x.png");background-size: cover;float: left;}
+  .seller-popup .seller-list-cell .seller-list-ri .new-icon.active{background: url("/img/base/icon-news-active@2x.png");background-size: cover;}
+
+ }
+
+/*移动端**/
+ @media screen and (max-width:768px){
+  body{background-color: #FFFFFF;}
+  .club-info-logo{width: 100%;height: 14.6vw;box-sizing: border-box;padding: 4vw 0;background-color: #FFFFFF;}
+  .club-info-logo .logo{width: 24vw;height: 6.6vw;display: block;margin: 0 auto;}
+  .club-info-logo .logo img{width: 24vw;height: 6.6vw;display: block;}
+  .info-header{width: 100%;height: auto;padding: 3vw;float:left;box-sizing: border-box;border-bottom: 10px solid #F7F7F7;background-color: #FFFFFF;}
+  .info-header p{width: 100%;font-size: 4vw;line-height:6vw;font-weight: bold;color: #333333;}
+  .info-header p span{font-size: 3.4vw;color: #666666;font-weight: normal;}
+  .info-content{width: 100%;min-height: 100vw;float: left;box-sizing: border-box;padding: 3vw;background-color: #FFFFFF;}
+  .info-title{width: 100%;height: 9.8vw;border-bottom: 1px solid #F0F0F0;}
+  .info-title .info-title-left{width: 50%;height: 9.8vw;font-size: 4vw;font-weight: bold;color: #333333;float: left;line-height: 9.8vw;}
+  .info-title .info-title-left span{display: inline-block;padding: 0 2vw;line-height: 5.6vw;background-color: #FFF2D5;font-size: 3vw;color: #E4AA43;text-align: center;margin-left: 1vw;font-weight: normal;}
+  .info-title .info-title-right{width: 50%;height: 9.8vw;float: right;line-height: 9.8vw;font-size: 3vw;color: #999999;text-align: right;}
+  .info-main{width: 100%;height: auto;margin-bottom: 3vw;}
+  .info-main .info-h1{width: 100%;box-sizing: border-box;padding:0 2vw;position: relative;line-height: 10vw;font-size: 4vw;color: #333333;}
+  .info-main .info-h1 .info-h1-tag{display: inline-block;padding: 0 2vw;line-height: 5.6vw;background-color: #FFF2D5;font-size: 3vw;color: #ffffff;text-align: center;margin-left: 1vw;font-weight: normal;}
+  .info-main .info-h1 .info-h1-tag.orange{background-color: #FFF2D5;color: #E4AA43;}
+  .info-main .info-h1 .info-h1-tag.grey{background-color: #0DB26D;}
+  .info-main .info-h1 .info-h1-tag.warn{background-color: #F94B4B;}
+  .info-main .info-h1:before{content: '';width: 0.7vw;height: 3.2vw;background-color: #E15616;position: absolute;left: 0;top: 3.2vw;}
+  .info-main .info-p{width: 100%;box-sizing: border-box;padding:0 2vw;position: relative;line-height: 6.8vw;font-size: 3.4vw;color: #999999;}
+  .info-main .info-p span{color: #333333;}
+  .info-main .info-img{width: 26vw;height: 26vw;border: 1px dashed #E2E2E2;}
+  .info-main .info-img img{width: 26vw;height: 26vw;display: block;}
+  .info-button {width: 100%;height: 20vw;box-sizing: border-box;background-color: #FFFFFF;padding: 4vw;position: fixed;bottom: 0;left: 0;z-index: 99;}
+  .info-button .btn{width: 100%;height: 12vw;background-color: #E15616;line-height: 12vw;display: block;text-align: center;color: #FFFFFF;font-size: 4vw;}
+  /*优惠券弹窗*/
+  .seller-popup{width:100%;height:100%;position:fixed;bottom:0;left:0;background-color:rgba(0,0,0,.4);z-index: 99999;opacity: 0;}
+  .seller-popup.hide{opacity: 0;}
+  .seller-popup.show{opacity: 1;}
+  .seller-popup .seller-popup-model-content{width:100%;height:106.7vw;position:absolute;bottom:0;left:0;right:0;bottom:0;background-color:#FFFFFF;margin:auto;border-radius:2px;box-sizing:border-box}
+  .seller-popup .title{width:100%;height:11vw;float:left;box-sizing:border-box;position:relative;padding:2.3vw;background-color:#FEF6F1;}
+  .seller-popup .title p{font-size:3.4vw;line-height:6.4vw;text-align:left;color:#E15616;font-weight: bold;}
+  .seller-popup .title .icon{width:6.4vw;height:6.4vw;display:block;position:absolute;right:0;top:0;cursor:pointer;padding:10px}
+  .seller-popup .title .icon:before{width:6.4vw;height:6.4vw;background-position:-33.6vw 0;}
+  .seller-popup .seller-popup-main{width:100%;height:95.7vw;box-sizing:border-box;padding:0 3.5vw;float:left;}
+  .seller-popup .seller-popup-content{width:100%;height:84.7vw;box-sizing:border-box;padding: 4vw 0;float: left;position: relative;}
+  .seller-popup .seller-popup-btn{width: 100%;height: 20vw;box-sizing: border-box;background-color: #FFFFFF;padding: 4vw;position: absolute;bottom: 0;left: 0;z-index: 99;}
+  .seller-popup .seller-popup-btn .btn{width: 100%;height: 12vw;background-color: #E15616;line-height: 12vw;display: block;text-align: center;color: #FFFFFF;font-size: 4vw;}
+  .seller-popup .seller-popup-scroll{width:100%;height:100%;box-sizing:border-box;float:left;overflow:hidden;overflow-y:auto;padding-bottom: 20vw;}
+  .seller-popup .seller-list-cell{width: 100%;height: 12vw;float: left;position: relative;border-bottom: 1px solid #E1E1E1;}
+  .seller-popup .seller-list-cell:last-child{border-bottom: none;}
+  .seller-popup .seller-list-cell .seller-list-le{width: 80vw;height:12vw;float: left;box-sizing: border-box;line-height: 12vw;font-size:3.4vw;}
+  .seller-popup .seller-list-cell .seller-list-ri{width: 10vw;height: 12vw;float: right;box-sizing: border-box;font-size:3.4vw;color: #FFF;padding: 4vw 0;}
+  .seller-popup .seller-list-cell .seller-list-ri .new-icon{width: 18px;height: 18px;box-sizing: border-box;display: block;background: url("/img/account/icon-weigouxuan@2x.png");background-size: cover;float: left;cursor: pointer;}
+  .seller-popup .seller-list-cell .seller-list-ri .new-icon.active{background: url("/img/account/icon-yigouxuan@2x.png");background-size: cover;}
+
+ }

+ 1 - 1
src/main/resources/static/css/index/index_new.h5.css

@@ -19,7 +19,7 @@
  #new-container .new-list{float: left;width: 62vw;}
  #new-container .new-label{float: left;line-height: 8vw;font-size: 16px;color: #E15616;font-weight: bold;}
  #new-container .new-list .new-li{float: left;line-height:  8vw;font-size: 3.2vw;color: #4A4F58;box-sizing: border-box;display: block;}
- #new-container .new-list .new-li .new-icon{width: 3vw;height: 3vw;margin-top: 2.8vw;box-sizing: border-box;display: block;background: url("/img/base/icon-news@2x.png");background-size: cover;float: left;}
+ #new-container .new-list .new-li .new-icon{width: 1vw;height: 1vw;margin-top: 3.6vw;box-sizing: border-box;display: block;background:#999999;border-radius: 50%; float: left;}
  #new-container .new-list .new-li p{width: 50vw;float: left;margin-left:1vw;text-overflow: ellipsis;display: -webkit-box;word-break: break-all;-webkit-box-orient: vertical;-webkit-line-clamp: 1;overflow: hidden;}
  #new-container .new-list .new-li:hover{color: #E15616;text-decoration: line-through;}
  #new-container .new-more{float: right;line-height: 8vw;font-size: 3.2vw;;color: #93979F;}

+ 7 - 3
src/main/resources/static/css/index/index_new.pc.css

@@ -39,10 +39,13 @@ li{list-style:none;}
 #new-container .new-list{float: left;}
 #new-container .new-label{float: left;margin-right: 10px;line-height: 48px;font-size: 16px;color: #E15616;font-weight: bold;}
 #new-container .new-list .new-li{float: left;line-height: 28px;font-size: 14px;color: #4A4F58;margin-right: 50px;box-sizing: border-box;padding: 10px 0;display: block;}
-#new-container .new-list .new-li .new-icon{width: 18px;height: 18px;margin-top: 5px;box-sizing: border-box;display: block;background: url("/img/base/icon-news@2x.png");background-size: cover;float: left;}
+#new-container .new-list .new-li .new-icon{width: 4px;height: 4px;margin-top: 13px;box-sizing: border-box;display: block;background: #999999;border-radius: 50%; background-size: cover;float: left;}
 #new-container .new-list .new-li p{float: left;margin-left: 8px;}
-#new-container .new-list .new-li:hover{color: #E15616;text-decoration: line-through;}
+#new-container .new-list .new-li:hover{color: #E15616;}
+#new-container .new-list .new-li:hover p{text-decoration: underline;}
+#new-container .new-list .new-li:hover .new-icon{background: #E15616;}
 #new-container .new-more{float: right;line-height: 48px;font-size: 14px;color: #93979F;}
+#new-container .new-more:hover { color: #E15616;}
 /* 楼层 */
 .section_container{width:100%;height:auto;float:left}
 .section_container .inner{width:1184px;margin:0 auto}
@@ -70,7 +73,8 @@ li{list-style:none;}
 .section_right  .item_text .item_text_name:before{content:'';width:4px;height:4px;border-radius:50%;background-color:#cccccc;position:absolute;left:0;top:11px}
 .section_right  .item_text .item_text_time{float:right}
 .section_right .item_text .item_text_name.info{width:164px;}
-.section_right  .item_text:hover{color:#E15616;text-decoration:underline}
+.section_right  .item_text:hover{color:#E15616;}
+.section_right  .item_text:hover .item_text_name{text-decoration:underline;}
 .section_right  .item_text:hover .item_text_name:before{background-color:#E15616}
 
 footer{width:100%;height:auto;float:left}

+ 1 - 1
src/main/resources/static/js/article/list.js

@@ -301,7 +301,7 @@ function initFilter(option){
     comEl.find('.filter__item').on('click', function(){
         $(this).siblings('.filter__item').removeClass('active');
         $(this).addClass('active');
-        var status = $(this).attr('data-sort-status')
+        var status = $(this).attr('data-sort-status') && parseInt($(this).attr('data-sort-status'));
         option.confirm && option.confirm({ status: status });
     })
 }

+ 0 - 1
src/main/resources/static/js/common/ajax.service.js

@@ -55,7 +55,6 @@ var Http = {
         },
         uploadImage : function(option,callback) {//上传图片
             var NODE_ENV_BASE_URL = $("#coreServer").val();
-            // var NODE_ENV_BASE_URL = 'https://spi-b.caimei365.com';
             $.ajax({
                 url: NODE_ENV_BASE_URL + option.url,
                 type: 'POST',

+ 12 - 0
src/main/resources/static/js/common/serviceapi/pay.service.js

@@ -4,6 +4,18 @@
  * auther ZHJY
  */
 var PayApi = {
+        PayOrderReceiptBankData: function (params, callback) {//获取线下收款
+            Http.AjaxService({
+                url:'/order/receipt/bankData',
+                type:'GET',
+                data:params,
+                json:true,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
         PayOrderOnLineSwitch: function (params, callback) {//获取线上支付全局开关状态
             Http.AjaxService({
                 url:'/order/pay/online/switch',

+ 16 - 0
src/main/resources/static/js/common/serviceapi/product.service.js

@@ -486,4 +486,20 @@ var ProductApi = {
                     callback(res);
                 });
         },
+        /**
+         * @数据统计
+         * @param:typeId 1:首页banner;2:直播模块;3:最新活动;4:热门文章;5:新品橱窗;6:活动列表
+         */
+        getCommodityStatisticsType:function (params, callback) {//获取商品收藏列表
+            Http.AjaxService({
+                url:'/commodity/StatisticsType/statisticsNumber',
+                type:'get',
+                data:params,
+                json:true,
+                isHost:true
+            })
+                .then(function(res){
+                    callback(res);
+                });
+        },
 };

+ 44 - 0
src/main/resources/static/js/common/serviceapi/user.service.js

@@ -419,4 +419,48 @@ var UserApi = {
                 callback(res);
             });
         },
+        userClubRecordLinkage: function (params, callback) {//查询行为记录链接信息
+            Http.AjaxService({
+                url: '/user/club/recordLinkage',
+                type:'get',
+                data:params,
+                json:false,
+                isHost:true
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        userClubChoseList: function (params, callback) {//可分配协销列表
+            Http.AjaxService({
+                url: '/user/club/chose/list',
+                type:'get',
+                data:params,
+                json:false,
+                isHost:true
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        userClubChoseSales: function (params, callback) {//分配协销
+            Http.AjaxService({
+                url: '/user/club/chose/sales',
+                type:'post',
+                data:params,
+                json:false,
+                isHost:true
+            }).then(function (res) {
+                callback(res);
+            });
+        },
+        userGetWechatMinLink: function (params, callback) {//获取H5跳转小程序路径
+            Http.AjaxService({
+                url: '/user/wechat/link',
+                type:'get',
+                data:params,
+                json:false,
+                isHost:true
+            }).then(function (res) {
+                callback(res);
+            });
+        },
 };

+ 6 - 3
src/main/resources/static/js/document/beautyArchiveDetailMixin.js

@@ -115,7 +115,8 @@ var beautyArchiveDetailMixin = {
                 CAIMEI.Popup({
                     content: suffix + '类型文件暂时无法预览',
                     confitmBtnText: '确定',
-                    cancelBtnText: '取消'
+                    cancelBtnText: '取消',
+                    closeIcon:true
                 }, function () {
                 }, function () {
                 });
@@ -146,7 +147,8 @@ var beautyArchiveDetailMixin = {
                 CAIMEI.Popup({
                     content: '确认使用采美豆',
                     confitmBtnText: '确定',
-                    cancelBtnText: '取消'
+                    cancelBtnText: '取消',
+                    closeIcon:true
                 }, function () {
                     _self.SearchArchiveByBeans()
                 }, function () {
@@ -162,7 +164,8 @@ var beautyArchiveDetailMixin = {
             CAIMEI.Popup({
                 content: _self.TipStatus.text,
                 confitmBtnText: _self.TipStatus.btn,
-                cancelBtnText: '取消'
+                cancelBtnText: '取消',
+                closeIcon:true
             }, function () {
                 // 确认 执行 下一步  链接跳转 支付支付采美豆
                 _self.handleClickToPage(_self.TipStatus.redirect);

+ 176 - 0
src/main/resources/static/js/help/clubinfo.js

@@ -0,0 +1,176 @@
+/**
+ * Created by xw on 2020/7/22.
+ */
+var InformationPage = new Vue({
+    el:"#informationPage",
+    data: {
+        clubId:0,
+        clubInfo:{},
+        isShowPopup:false,
+        checkedIndex:0,
+        saleName:'',// 分配销售人名称
+        sellerList:[],
+        salesParams:{
+            clubId:0,
+            spId:0
+        },
+        linkParams:{
+            path:'pages/seller/club/club-info',
+            query:'',
+            env:'develop'//正式"release",体验"trial",开发"develop"
+        }
+    },
+    filters: {
+        FirstFormat: function(type) {
+            //处理金额
+            let name = ''
+            switch (type) {
+                case 1:
+                    name = '医美'
+                    break
+                case 2:
+                    name = '生美'
+                    break
+                case 3:
+                    name = '项目公司'
+                    break
+                case 4:
+                    name = '个人'
+                    break
+                case 5:
+                    name = '其他'
+                    break
+            }
+            return name
+        },
+        TwoFormat: function(type) {
+            //处理金额
+            let text = ''
+            switch (type) {
+                case 1:
+                    text = '诊所'
+                    break
+                case 2:
+                    text = '门诊'
+                    break
+                case 3:
+                    text = '医院'
+                    break
+            }
+            return text
+        },
+        statusFilters: function(value) {
+            // 订单来源
+            const map = {
+                1: '待审核',
+                90: '审核通过',
+                92: '审核未通过'
+            }
+            return map[value]
+        }
+    },
+    methods: {
+        userClubRecordLinkage: function () {
+            var _self = this;
+            UserApi.userClubRecordLinkage({clubId: _self.clubId}, function (response) {
+                if (response.code == 0) {
+                    _self.saleName = response.data.saleName;
+                    _self.clubInfo = response.data.club;
+                    _self.userClubChoseList()
+                    setBeforeUrl();
+                } else {
+                    console.log('获取机构信息异常')
+                }
+            })
+        },
+        userClubChoseList: function () {
+            var _self = this;
+            UserApi.userClubChoseList({}, function (response) {
+                if (response.code == 0) {
+                    _self.sellerList = response.data.map((el,index)=>{
+                        el.isCheck = false
+                        return el
+                    })
+                } else {
+                    console.log('获取可分配协销列表异常')
+                }
+            })
+        },
+        userClubChoseSales: function () {
+            var _self = this;
+            UserApi.userClubChoseSales(_self.salesParams, function (response) {
+                if (response.code == 0) {
+                    CAIMEI.dialog('分配成功',true,function () {
+                        _self.isShowPopup = false;
+                        _self.userClubRecordLinkage();
+                    });
+                } else {
+                    console.log('分配协销异常')
+                }
+            })
+        },
+        userGetWechatMinLink: function () {// 获取小程序路径并跳转
+            var _self = this;
+            UserApi.userGetWechatMinLink(_self.linkParams, function (response) {
+                if (response.code == 0) {
+                    location.href = response.data;
+                } else {
+                    console.log('分配协销异常')
+                }
+            })
+        },
+        checkedCoupon:function(idx){
+            // 选择商品
+            var _self = this;
+            _self.checkedIndex = idx;
+            _self.sellerList.forEach((el, index) => {
+                if (_self.checkedIndex == index) {
+                    el.isCheck = !el.isCheck;
+                    _self.salesParams.spId = el.serviceProviderId;
+                    console.log('分配协销ID', _self.salesParams.spId)
+                } else {
+                    el.isCheck = false;
+                }
+            })
+        },
+        handleConfirm:function () {
+            var _self = this;
+            if (_self.salesParams.spId === 0){
+                CAIMEI.dialog('请选择分配销售',false);
+                return;
+            }
+            _self.userClubChoseSales();
+        },
+        showPopup:function(){// 跳转小程序
+            var _self = this;
+            _self.userGetWechatMinLink();
+        },
+        hidePopup:function(){// 隐藏弹窗
+            var _self = this;
+            _self.isShowPopup = false;
+        },
+        setEvens:function () { //设置环境
+            var siteEnv = $("#siteEnv").val();
+            var map = {
+                0: 'develop',
+                1: 'trial',
+                2: 'release',
+            }
+            return map[siteEnv];
+        }
+    },
+    created: function () {
+
+    },
+    mounted: function () {
+        var _this = this;
+        _this.clubId = _this.salesParams.clubId = getUrlParam("clubId");
+        _this.linkParams.query = `clubId=${_this.clubId}`;
+        _this.linkParams.env = _this.setEvens();
+        console.log('env',_this.linkParams.env);
+        _this.userClubRecordLinkage();
+    }
+
+
+});
+

+ 1 - 0
src/main/resources/static/js/index.js

@@ -2,6 +2,7 @@
 // if(isFormal){var _czc = _czc || [];_czc.push(["_setAccount", "1279558759"]);}
 var homeData = new Vue({
     el: '#container',
+    mixins: [cmsMixins],
     data: {
         userId:0,
         asideNav: [],

+ 23 - 0
src/main/resources/static/js/mixins/bankMixins.js

@@ -0,0 +1,23 @@
+// 统计数据
+// 统计类型 1:首页banner;2:直播模块;3:最新活动;4:热门文章;5:新品橱窗;6:活动列表
+var bankMixins = function () {
+    return {
+        data() {
+            return {
+                bankInfo:{ }
+            }
+        },
+        methods: {
+            cmGetBankTypeLists:function() {
+                var _this = this;
+                PayApi.PayOrderReceiptBankData({},function (response) {
+                    if(response.code === 0){
+                        _this.bankInfo = response.data;
+                    }else{
+                        console.log('<-------获取收款银行数据异常------>')
+                    }
+                })
+            },
+        }
+    }
+}();

+ 51 - 0
src/main/resources/static/js/mixins/cmsMixins.js

@@ -0,0 +1,51 @@
+// 统计数据
+// 统计类型 1:首页banner;2:直播模块;3:最新活动;4:热门文章;5:新品橱窗;6:活动列表
+var cmsMixins = function () {
+    return {
+        mounted: function() {
+            window.handleBannerStatistics = this.handleBannerStatistics;
+            window.handleRightStatistics = this.handleRightStatistics;
+            window.handleHotStatistics = this.handleHotStatistics;
+        },
+        methods: {
+            handleBannerStatistics:function($event){// 首页轮播
+                const $eventHref  = $event[0].attributes[2].value;
+                this.cmsSysStatistics(1)
+                window.open($eventHref)
+            },
+            handleRightStatistics:function($event,type){// 右侧模块
+                const $eventHref  = $event[0].attributes[3].value;
+                this.cmsSysStatistics(type)
+                window.open($eventHref)
+            },
+            handleHotStatistics:function($event){// 新品橱窗
+                const $eventHref  = $event[0].attributes[2].value;
+                this.cmsSysStatistics(5)
+                window.open($eventHref)
+            },
+            handleActivityStatistics:function($eventHref){// 活动列表
+                this.cmsSysStatistics(6)
+                window.open($eventHref)
+            },
+            cmsSysStatistics :function (cmsSysType) {
+                ProductApi.getCommodityStatisticsType({typeId:cmsSysType},function (response) {
+                    if(response.code === 0){
+                        const map = {
+                            1: '首页轮播',
+                            2: '直播模块',
+                            3: '最新活动',
+                            4: '热门文章',
+                            5: '新品橱窗',
+                            6: '活动列表'
+                        }
+                        const sYsText = map[cmsSysType]
+                        console.log(`<-------${sYsText}统计数据成功------>`)
+                    }else{
+                        console.log('<-------统计数据异常------>')
+                    }
+                })
+            }
+        }
+    }
+}();
+

+ 3 - 3
src/main/resources/static/js/pay/caimei-hlbpay.js

@@ -35,7 +35,7 @@ var payContainer = new Vue({
         receiptAmount:'',//已支付金额
         balanceAmount:'',//应付剩余金额
         payAmount:'',//本次支付金额
-        paymentIimit:5000,
+        paymentIimit:50000,
         paymentIimitText:'',
         discernReceiptList:[],//支付记录列表
         tabIndex:0,//支付方式 0 移动支付 1网银支付 2线下转账
@@ -179,10 +179,10 @@ var payContainer = new Vue({
                 if(_self.payAmount > _self.paymentIimit){
                     switch (_self.payInfo.payBankNum) {
                         case 'WEIXIN':
-                            _self.paymentIimitText = '本次支付金额已超出微信支付限额,请输入小于5的金额进行支付。';
+                            _self.paymentIimitText = '本次支付金额已超出微信支付限额,请输入小于5的金额进行支付。';
                             break;
                         case 'ALIPAY':
-                            _self.paymentIimitText = '本次支付金额已超出支付宝限额,请输入小于5的金额进行支付。';
+                            _self.paymentIimitText = '本次支付金额已超出支付宝限额,请输入小于5的金额进行支付。';
                             break;
                     }
                     CAIMEI.Alert(_self.paymentIimitText,'知道了');

+ 2 - 0
src/main/resources/static/js/pay/caimei-paylist.js

@@ -2,6 +2,7 @@
  *Created by ZHJY on 2020/7/14.
  */
 var payContainer = new Vue({
+    mixins: [bankMixins],
     el:"#payContainer",
     data: {
         loginLoading:true,
@@ -89,6 +90,7 @@ var payContainer = new Vue({
         _self.orderId = CAIMEI.getUrlParam('orderId');
         _self.orderIdentificationId = '#'+ _self.orderId+'#';
         console.log(_self.payInfo.payType);
+        _self.cmGetBankTypeLists();
         _self.PayOrderShoporders();
     }
 });

+ 2 - 9
src/main/resources/static/js/pay/caimei-payunder.js

@@ -2,6 +2,7 @@
  *Created by ZHJY on 2020/7/14.
  */
 var payContainer = new Vue({
+    mixins: [bankMixins],
     el:"#payContainer",
     data: {
         payAmount:0,
@@ -33,15 +34,6 @@ var payContainer = new Vue({
                     _self.paySuccessCounter = data.order.paySuccessCounter;
                     _self.loginLoading = false;
                     _self.isRequest = true;
-                    switch (_self.payInfo.payType) {
-                        case 'WEIXIN':
-                            _self.getWrchatQrcodeShow();
-                            break;
-                        case 'ALIPAY':
-                            _self.getAliPayQrcodeInfo();
-                            break;
-                    }
-
                 }else{
                     CAIMEI.Alert(response.msg,'确定',false);
                 }
@@ -63,5 +55,6 @@ var payContainer = new Vue({
         _self.orderId = CAIMEI.getUrlParam('orderId');
         _self.orderIdentificationId = '#'+ _self.orderId+'#';
         _self.infoPayOrderCheckoutCounter();
+        _self.cmGetBankTypeLists();
     }
 });

+ 65 - 49
src/main/resources/static/js/product/detail.js

@@ -4,6 +4,7 @@ var productDetail = new Vue({
     data: {
         showProduct: false,
         productId: 0,
+        typeId:0,
         userId: 0,
         identity:0,
         number: 0,
@@ -172,7 +173,7 @@ var productDetail = new Vue({
         // },
         getProductDetails: function () {
             var _self = this;
-            ProductApi.GetProductDdtails({userId: GLOBAL_USER_ID, productId: _self.productId}, function (response) {
+            ProductApi.GetProductDdtails({userId: GLOBAL_USER_ID, productId: _self.productId,typeId:_self.typeId}, function (response) {
                 if (response.code == 0) {
                     var product = response.data;
                     _self.product = response.data;
@@ -220,10 +221,7 @@ var productDetail = new Vue({
                     if (product.stock == 0 && product.validFlag != 3) {
                         _self.disabledText = '售罄'
                     }
-                    if(product.productType === 2 && (GLOBAL_CLUB_TYPE != 1)){
-                        _self.isHideButton = true
-                        _self.handleShowProductType()
-                    }
+                    _self.handleShowProductType(product.commodityDetailsFlag);
                     _self.getRecommends();
                     _self.getProdcutArchiveDetails();  //获取资料列表
                     // 获取路由hash标识,设置默认展开tab
@@ -236,47 +234,64 @@ var productDetail = new Vue({
                 }
             })
         },
-        handleShowProductType: function (){
-            if(GLOBAL_USER_ID === 0){//游客
+        handleShowProductType: function (flag = ''){
+            // 根据商品详情可见度显示弹窗 flag 1.所有人可见 2.所有机构可见 3.仅会员机构可见 4.仅医美机构可见
+            let showModal = false;
+            const flagMap = {
+                '2': true,
+                '3': true,
+                '4': true
+            }
+            const textMap = {
+                '2': '该商品仅限已注册机构查看,请注册机构账户后继续查看。有采美账号的,请直接登录',
+                '3': '该商品仅限资质机构查看,请注册资质机构后继续查看。有采美账号的,请直接登录。',
+                '4': '该商品仅限医美类机构查看,请注册医美机构后继续查看。有采美账号的,请直接登录。',
+                '34': '该商品仅限资质机构查看,请升级为资质机构后继续查看。',
+                '44': '该商品仅限医美类机构查看,请升级为医美机构后继续查看。',
+                '42': '该商品仅限医美类机构查看,您暂无权限。您可去机构资料页面查看机构类型。'
+            }
+            const code = flag === 4 && GLOBAL_USER_IDENTITY === 2 && GLOBAL_CLUB_TYPE !== 1 ? '42' : `${flag}${GLOBAL_USER_IDENTITY}`
+            if (GLOBAL_USER_ID === 0) {
+                showModal = flagMap[flag];
+                this.showProsPopup(showModal,textMap[flag],'去注册/登录','/login.html')
+                return
+            }
+            if(GLOBAL_VIP_FLAG === 1){ return; }
+            if (flag === 3 && GLOBAL_USER_IDENTITY === 4) {
+                showModal = true
+                this.showProsPopup(showModal,textMap[code],'去升级','/user/setting/upgrade.html')
+                return
+            }
+            if (flag === 4 && GLOBAL_USER_IDENTITY === 4) {
+                showModal = true
+                this.showProsPopup(showModal,textMap[code],'去升级','/user/setting/upgrade.html')
+                return
+            }
+            if (flag === 4 && GLOBAL_USER_IDENTITY=== 2 && GLOBAL_CLUB_TYPE !== 1) {
+                showModal = true
+                this.showProsPopup(showModal,textMap[code],'去查看资料','/user/setting/information.html')
+                return
+            }
+        },
+        showProsPopup:function (showFlag,content,confitmBtnText,href) {// 商品详情限制弹窗
+            if(showFlag){
                 CAIMEI.Popup({
-                    content: '<div class="payAlert"><p>该商品仅限医美类机构查看,请注册医美机构后继续查看。有采美账号的,请直接登录。</p></div>',
-                    confitmBtnText: '去注册/登录',
-                    cancelBtnText: '关闭'
+                    content: `<div class="payAlert"><p>${content}</p></div>`,
+                    confitmBtnText: confitmBtnText,
+                    cancelBtnText: '关闭',
+                    closeIcon:false
                 },function(){
                     // 确定
-                    window.location.href = '/login.html';
+                    window.location.href = href;
                 },function(){
                     // 关闭
-                    window.history.back(-1);
-                });
-            }else{
-                if(GLOBAL_USER_IDENTITY === 4 ){// 普通机构
-                    CAIMEI.Popup({
-                        content: '<div class="payAlert"><p>该商品仅限医美类机构查看,请升级为医美机构后继续查看。</p></div>',
-                        confitmBtnText: '去升级',
-                        cancelBtnText: '关闭'
-                    },function(){
-                        // 确定
-                        window.location.href = '/user/setting/upgrade.html';
-                    },function(){
-                        // 关闭
-                        window.history.back(-1);
-                    });
-                }else if( GLOBAL_USER_IDENTITY === 2 ){//会员机构
-                    if(GLOBAL_CLUB_TYPE != 1){
-                        CAIMEI.Popup({
-                            content: '<div class="payAlert"><p>该商品仅限医美类机构查看,您暂无权限。您可去机构资料页面查看机构类型。</p></div>',
-                            confitmBtnText: '去查看资料',
-                            cancelBtnText: '关闭'
-                        },function(){
-                            // 确定
-                            window.location.href = '/user/setting/information.html';
-                        },function(){
-                            // 关闭
-                            window.history.back(-1);
-                        });
+                    if(window.history.length === 0){
+                        window.location.href="/index.html";
+                        window.close();
+                    }else{
+                        window.history.go(-1);
                     }
-                }
+                });
             }
         },
         getProductPrice: function () {//获取商品价格
@@ -802,20 +817,21 @@ var productDetail = new Vue({
     },
     created: function () {
         this.productId = this.couponParam.productId = this.listQuery.productId = $("#productId").val();
+        this.typeId = $("#typeId").val();
+        console.log('typeId', this.typeId)
         this.userId = this.couponParam.userId = this.listQuery.userId = GLOBAL_USER_ID;
         this.productStock = $("#productStock").val();
         // this.getImages();
         // identity: 0个人,1协销,2会员机构,3供应商,4普通机构
         // visibility:3:所有人可见,2:普通机构可见,1:会员机构可见 4:仅医美机构可见
-        var visible = $("#productVisibility").val() * 1;
-        console.log('visible',visible)
-        var identity = GLOBAL_USER_IDENTITY;
-        this.identity = identity
-        console.log('identity',identity)
-        this.showProduct = visible === 3 || visible == 4 || identity === 1 || identity === 2 || (identity === 4 && visible === 2);
-        if (!this.showProduct) {
-            window.location.href = "/404.html?error=未查询到该商品";
-        }
+        // var visible = $("#productVisibility").val() * 1;
+        // console.log('visible',visible)
+        // var identity = GLOBAL_USER_IDENTITY;
+        // console.log('identity',identity)
+        // this.showProduct = visible === 3 || visible == 4 || identity === 1 || identity === 2 || (identity === 4 && visible === 2);
+        // if (!this.showProduct) {
+        //     window.location.href = "/404.html?error=未查询到该商品";
+        // }
     },
     mounted: function () {
         this.userId = this.couponParam.userId = GLOBAL_USER_ID;

+ 1 - 0
src/main/resources/static/js/single-page/promotions.js

@@ -1,5 +1,6 @@
 var promotionsList = new Vue({
     el: "#promotionsList",
+    mixins: [cmsMixins],
     data: {
         searchFlag: false,
         listLoading: true,

+ 2 - 1
src/main/resources/static/js/supplier-center/article/article-list.js

@@ -153,7 +153,8 @@ var articleList = new Vue({
             var params = {
                 content: '确认删除改文章?',
                 cancelBtnText: '取消',
-                confitmBtnText: '删除'
+                confitmBtnText: '删除',
+                closeIcon:true
             };
             CAIMEI.Popup(params, function () {
                 that.articleDelete(article);

+ 2 - 1
src/main/resources/static/js/supplier-center/encyclopedia/instrument-list.js

@@ -195,7 +195,8 @@ var productList = new Vue({
             var params = {
                 content: '确认删除该仪器信息?',
                 cancelBtnText: '取消',
-                confitmBtnText: '删除'
+                confitmBtnText: '删除',
+                closeIcon:true
             };
             CAIMEI.Popup(params, function () {
                 that.productDelete(product);

+ 2 - 1
src/main/resources/static/js/supplier-center/encyclopedia/product-list.js

@@ -193,7 +193,8 @@ var productList = new Vue({
             var params = {
                 content: '确认删除该商品信息?',
                 cancelBtnText: '取消',
-                confitmBtnText: '删除'
+                confitmBtnText: '删除',
+                closeIcon:true
             };
             CAIMEI.Popup(params, function () {
                 that.productDelete(product);

+ 1 - 0
src/main/resources/static/js/user-center/member/memberPage.js

@@ -159,6 +159,7 @@ var memberPage = new Vue({
                 content: '确认使用' + (currentPackage.price * currentPackage.proportion) + '采美豆开通' + (currentPackage.duration) + '个月会员?',
                 confitmBtnText: '确认开通',
                 cancelBtnText: '取消',
+                closeIcon:true
             };
             CAIMEI.Popup(popupParams, function () {
                 console.log('采美豆支付');

+ 4 - 2
src/main/resources/static/js/user-center/order/detail.js

@@ -177,7 +177,8 @@ var orderPage = new Vue({
                                 CAIMEI.Popup({
                                     content: '<div class="payAlert">您有采美余额<em>¥'+toFloat(data.ableUserMoney)+'</em>暂未使用,是否需要抵扣订单? 抵扣后您只需再支付<em>¥'+toFloat(data.pendingPayments)+'</em></div>',
                                     confitmBtnText: '抵扣,继续付款',
-                                    cancelBtnText: '不抵扣,继续付款'
+                                    cancelBtnText: '不抵扣,继续付款',
+                                    closeIcon:true
                                 },function(){
                                     // 抵扣,继续付款
                                     _self.hanldPaymentConfirm(1)
@@ -191,7 +192,8 @@ var orderPage = new Vue({
                                 CAIMEI.Popup({
                                     content: '<div class="payAlert">您有采美余额<em>¥'+toFloat(data.ableUserMoney)+'</em>暂未使用,是否需要抵扣订单? 抵扣后订单支付完成</div>',
                                     confitmBtnText: '抵扣',
-                                    cancelBtnText: '不抵扣,继续付款'
+                                    cancelBtnText: '不抵扣,继续付款',
+                                    closeIcon:true
                                 },function(){
                                     // 抵扣全款
                                     _self.hanldPaymentConfirm(2);

+ 4 - 2
src/main/resources/static/js/user-center/order/list.js

@@ -253,7 +253,8 @@ var orderPage = new Vue({
                                 CAIMEI.Popup({
                                     content: '<div class="payAlert">您有采美余额<em>¥'+toFloat(data.ableUserMoney)+'</em>暂未使用,是否需要抵扣订单? 抵扣后您只需再支付<em>¥'+toFloat(data.pendingPayments)+'</em></div>',
                                     confitmBtnText: '抵扣,继续付款',
-                                    cancelBtnText: '不抵扣,继续付款'
+                                    cancelBtnText: '不抵扣,继续付款',
+                                    closeIcon:true
                                 },function(){
                                     // 抵扣,继续付款
                                     _self.hanldPaymentConfirm(1)
@@ -267,7 +268,8 @@ var orderPage = new Vue({
                                 CAIMEI.Popup({
                                     content: '<div class="payAlert">您有采美余额<em>¥'+toFloat(data.ableUserMoney)+'</em>暂未使用,是否需要抵扣订单? 抵扣后订单支付完成</div>',
                                     confitmBtnText: '抵扣',
-                                    cancelBtnText: '不抵扣,继续付款'
+                                    cancelBtnText: '不抵扣,继续付款',
+                                    closeIcon:true
                                 },function(){
                                     // 抵扣全款
                                     _self.hanldPaymentConfirm(2);

+ 1 - 1
src/main/resources/static/js/utils.js

@@ -146,7 +146,7 @@ CAIMEI.Popup = function(params,confirmCallback, cancelCallback){
         boxWidth: (isPC?'300px':'70%'),
         title:'提示',
         content: params.content,
-        closeIcon: true,
+        closeIcon: params.closeIcon,
         animation: 'opacity',
         closeAnimation: 'opacity',
         useBootstrap: false,

+ 1 - 1
src/main/resources/templates/components/footer.html

@@ -3,7 +3,7 @@
         <div class="wrap mf">
             <span class="icon mIcon mfi">国内首家美业共享平台</span>
             <span class="icon mIcon mfi">采美正品联盟货源保证</span>
-            <span class="icon mIcon mfi">6000+美容机构入驻</span>
+            <span class="icon mIcon mfi">8000+美容机构入驻</span>
             <span class="icon mIcon mfi">100+国际国内知名供应商</span>
         </div>
     </div>

+ 99 - 0
src/main/resources/templates/help/clubinfo.html

@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html lang="zh-CN" xmlns:th="https://www.thymeleaf.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="https://www.thymeleaf.org ">
+<head>
+  <title>采美365网-查看机构信息</title>
+  <template th:replace="components/head-link"></template>
+  <link th:href="@{/css/help/clubinfo.css(v=${version})}" rel="stylesheet" type="text/css">
+  <template th:replace="components/analysis"></template>
+</head>
+<body>
+<!-- 引用头部 -->
+<div class="club-info-logo">
+  <input type="hidden" th:value="${coreServer}" id="coreServer">
+  <input type="hidden" th:value="${siteEnv}" id="siteEnv">
+  <a href="/" class="logo">
+    <img src="/img/base/logo_m.png" alt="采美 生美/医美采购服务平台"/>
+  </a>
+</div>
+<!-- 机构信息 -->
+<div id="informationPage" v-cloak>
+  <div class="info-header clearfix" v-if="clubInfo.describe">
+    <p>描述:<span>{{ clubInfo.describe }}</span></p>
+  </div>
+  <div class="info-content clearfix">
+    <div class="info-title">
+      <div class="info-title-left">
+        <p>机构资料:<span>{{ clubInfo.userIdentity === 2 ? '资质机构' : '个人机构' }}</span></p>
+      </div>
+      <div class="info-title-right">
+        <p v-if="clubInfo.spType === 0">待分配销售</p>
+        <p v-else> 已分配销售:{{  saleName }}</p>
+      </div>
+    </div>
+    <div class="info-main">
+      <div class="info-h1">注册信息</div>
+      <div class="info-p">联系人:<span>{{ clubInfo.linkMan }}</span></div>
+      <div class="info-p">手机号:<span>{{ clubInfo.contractMobile }}</span></div>
+    </div>
+    <div class="info-main" v-if="clubInfo.userIdentity === 2 || (clubInfo.userIdentity === 4 && (clubInfo.status == 1 || clubInfo.status == 92))">
+      <div class="info-h1">升级信息 <span class="info-h1-tag" :class="{
+								orange: clubInfo.status == 1,
+								grey: clubInfo.status == 90,
+								warn: clubInfo.status == 92
+							}"> {{ clubInfo.status | statusFilters }} </span></div>
+      <div class="info-p">机构名称:<span>{{ clubInfo.name }}</span></div>
+      <div class="info-p">机构简称:<span>{{ clubInfo.shortName }}</span></div>
+      <div class="info-p">邮箱:<span>{{ clubInfo.contractEmail }}</span></div>
+      <div class="info-p">联系地址:<span>{{ clubInfo.provincialAddress }}{{ clubInfo.address }}</span></div>
+      <div class="info-p">营业执照编号:<span>{{ clubInfo.socialCreditCode }}</span></div>
+      <div class="info-p">营业执照:</div>
+      <div class="info-img"><img :src="clubInfo.businessLicense" alt=""></div>
+      <div class="info-p" v-if="clubInfo.shopPhoto">门头照:</div>
+      <div class="info-img"  v-if="clubInfo.shopPhoto"><img :src="clubInfo.shopPhoto" alt=""></div>
+      <div class="info-p">机构类型:<span>{{ clubInfo.firstClubType | FirstFormat }}</span></div>
+      <div class="info-p" v-if="clubInfo.medicalPracticeLicense">医疗许可证:</div>
+      <div class="info-img" v-if="clubInfo.medicalPracticeLicense"><img :src="clubInfo.medicalPracticeLicense" alt=""></div>
+      <div class="info-p" v-if="clubInfo.secondClubType">科室:<span>{{ clubInfo.secondClubType | TwoFormat}}</span></div>
+      <div class="info-p">主营内容:<span>{{ clubInfo.mainProduct }}</span></div>
+    </div>
+    <div class="info-main" v-if="clubInfo.contractPhone || clubInfo.fax || clubInfo.profile">
+      <div class="info-h1">其他信息</div>
+      <div class="info-p" v-if="clubInfo.contractPhone">固定电话:<span>{{ clubInfo.contractPhone ? clubInfo.contractPhone :'无' }}</span></div>
+      <div class="info-p" v-if="clubInfo.fax">传真:<span>{{ clubInfo.fax ? clubInfo.fax : '无' }}</span></div>
+      <div class="info-p" v-if="clubInfo.profile">公司介绍:<span>{{ clubInfo.profile ? clubInfo.profile : '无' }}</span></div>
+    </div>
+  </div>
+  <div class="info-button" v-if="clubInfo.spType === 0">
+    <a href="javascript:void(0)" class="btn" @click="showPopup">分配销售</a>
+  </div>
+  <!--优惠券弹窗-->
+  <div class="seller-popup" v-show="isShowPopup" :class="isShowPopup ? 'show' : 'hide'">
+    <div class="seller-popup-model-content">
+      <div class="title"><p>请选择一个销售人员进行分配</p><i class="icon mIcon" @click="hidePopup"></i></div>
+      <div class="seller-popup-main">
+        <div class="seller-popup-content">
+          <div class="seller-popup-scroll">
+            <div class="seller-list-cell" v-for="(seller, index) in sellerList" :key="index" @click="checkedCoupon(index)">
+              <div class="seller-list-le">
+                <p>{{ seller.name }}</p>
+              </div>
+              <div class="seller-list-ri">
+                <span class="new-icon" :class="seller.isCheck ? 'active' : ''"></span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="seller-popup-btn">
+        <a href="javascript:void(0)" class="btn" @click="handleConfirm"> 确定 </a>
+      </div>
+    </div>
+  </div>
+</div>
+"<!-- 引入底部 -->
+<template th:replace="components/foot-link"></template>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/user.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/help/clubinfo.js(v=${version})}"></script>
+</body>
+</html>

+ 13 - 11
src/main/resources/templates/index.html

@@ -23,7 +23,7 @@
     <div id="swiper-container" class="swiper-container">
         <ul class="swiper-wrapper swiper-wrapper-banner">
             <li class="swiper-slide mfc" th:each="img: ${bannerList}">
-                <a th:href="${img.link}"><img th:src="${img.image}" th:alt="${img.title}"></a>
+                <a href="javascript:void(0)" th:attr="data-href=${img.link}" onclick="handleBannerStatistics($(this))"><img th:src="${img.image}" th:alt="${img.title}"></a>
             </li>
         </ul>
         <div class="swiper-pagination swiper-pagination-banner mfc"><span v-if="isPC" th:each="img: ${bannerList}"></span></div>
@@ -62,7 +62,7 @@
                             </a>
                         </div>
                         <div class="right_item_main" th:each="live,stat : ${sideJson.get('liveList')}" th:object="${live}">
-                            <a th:if="${stat.index}==0" th:href="*{link}" th:title="*{liveTitle}" class="item_banner" target="_blank" rel="nofollow" onclick="_czc.push(['_trackEvent','商城首页','精彩直播','点击','','Um_Event_HomeLiveTemplateClick'])">
+                            <a th:if="${stat.index}==0" th:attr="data-href=*{link}" href="javascript:void(0)" onclick="handleRightStatistics($(this),2)" th:title="*{liveTitle}" class="item_banner">
                                 <img src="/img/base/placeholder.png" th:attr="data-original=*{homePageImage}" th:alt="*{liveTitle}">
                                 <div class="name" th:text="*{liveTitle}"></div>
                                 <div class="statu">
@@ -71,7 +71,7 @@
                                     <template th:if="*{liveStatus}==3"><i class="mIcon icon-end"></i><p>看回放</p></template>
                                 </div>
                             </a>
-                            <a th:if="${stat.index}>0" th:href="*{link}" th:title="*{liveTitle}" class="item_text" target="_blank" rel="nofollow" onclick="_czc.push(['_trackEvent','商城首页','精彩直播','点击','','Um_Event_HomeLiveTemplateClick'])">
+                            <a th:if="${stat.index}>0" th:attr="data-href=*{link}" href="javascript:void(0)" onclick="handleRightStatistics($(this),2)" th:title="*{liveTitle}" class="item_text">
                                 <p class="item_text_name" th:text="*{liveTitle}"></p>
                             </a>
                         </div>
@@ -84,11 +84,11 @@
                             </a>
                         </div>
                         <div class="right_item_main" th:each="image,stat : ${sideJson.get('cmImageList')}" th:object="${image}">
-                            <a th:if="${stat.index}==0" th:href="*{link}" th:title="*{title}" class="item_banner" target="_blank" onclick="_czc.push(['_trackEvent','商城首页','最新活动','点击','','Um_Event_HomeActivityTemplateClick'])">
+                            <a th:if="${stat.index}==0" th:attr="data-href=*{link}" onclick="handleRightStatistics($(this),3)" href="javascript:void(0)" th:title="*{title}" class="item_banner">
                                 <img src="/img/base/placeholder.png" th:attr="data-original=*{homePageImage}" th:alt="*{title}">
                                 <div class="name" th:text="*{title}"></div>
                             </a>
-                            <a th:if="${stat.index}>0" th:href="*{link}" th:title="*{title}" class="item_text" target="_blank" onclick="_czc.push(['_trackEvent','商城首页','最新活动','点击','','Um_Event_HomeActivityTemplateClick'])">
+                            <a th:if="${stat.index}>0" th:attr="data-href=*{link}" onclick="handleRightStatistics($(this),3)" href="javascript:void(0)"  th:title="*{title}" class="item_text">
                                 <p class="item_text_name" th:text="*{title}"></p>
                             </a>
                         </div>
@@ -101,11 +101,11 @@
                             </a>
                         </div>
                         <div class="right_item_main" th:each="info,stat : ${sideJson.get('infoList')}" th:object="${info}">
-                            <a th:if="${stat.index}==0" th:href="*{link}" th:title="*{title}" class="item_banner" target="_blank" onclick="_czc.push(['_trackEvent','商城首页','热门文章','点击','','Um_Event_HomeArticleTemplateClick'])">
+                            <a th:if="${stat.index}==0" th:attr="data-href=*{link}" onclick="handleRightStatistics($(this),4)" href="javascript:void(0)"  th:title="*{title}" class="item_banner">
                                 <img src="/img/base/placeholder.png" th:attr="data-original=*{homePageImage}" th:alt="*{title}">
                                 <div class="name" th:text="*{title}"></div>
                             </a>
-                            <a th:if="${stat.index}>0" th:href="*{link}" th:title="*{title}" class="item_text" target="_blank" onclick="_czc.push(['_trackEvent','商城首页','热门文章','点击','','Um_Event_HomeArticleTemplateClick'])">
+                            <a th:if="${stat.index}>0" th:attr="data-href=*{link}" onclick="handleRightStatistics($(this),4)" href="javascript:void(0)"  th:title="*{title}" class="item_text">
                                 <p class="item_text_name info" th:text="*{title}"></p>
                                 <p class="item_text_time" v-if="isPC" th:text="*{createDate}"></p>
                             </a>
@@ -119,11 +119,11 @@
                             </a>
                         </div>
                         <div class="right_item_main" th:each="info,stat : ${sideJson.get('baikeList')}" th:object="${info}">
-                            <a th:if="${stat.index}==0" th:href="*{link}" th:title="*{name}" class="item_banner" target="_blank" onclick="_czc.push(['_trackEvent','商城首页','热门百科','点击','','Um_Event_HomeBaikeTemplateClick'])">
+                            <a th:if="${stat.index}==0"  th:href="*{link}"  th:title="*{name}" class="item_banner">
                                 <img src="/img/base/placeholder.png" th:attr="data-original=*{image}" th:alt="*{name}">
                                 <div class="name" th:text="*{name}"></div>
                             </a>
-                            <a th:if="${stat.index}>0" th:href="*{link}" th:title="*{name}" class="item_text" target="_blank" onclick="_czc.push(['_trackEvent','商城首页','热门百科','点击','','Um_Event_HomeBaikeTemplateClick'])">
+                            <a th:if="${stat.index}>0" th:href="*{link}"  th:title="*{name}" class="item_text">
                                 <p class="item_text_name info" th:text="*{name}"></p>
                                 <!-- <p class="item_text_time" v-if="isPC" th:text="*{createDate}"></p> -->
                             </a>
@@ -143,7 +143,7 @@
                         <div class="swiper-container-floor hotList mySwiper" id="recommendBox">
                             <div class="swiper-wrapper section_page_main type_08  recommendBox-wrapperHot clear mfw section_8 max">
                                 <!-- 商品/图片 列表 -->
-                                <a :href="'/product-'+pros.product.productId+'.html'" class="swiper-slide page_main_item hot ad_04" target="_blank" v-for="pros in floor.floorImageList4">
+                                <a href="javascript:void(0)" onclick="handleHotStatistics($(this))" :data-href="pros.link" class="swiper-slide page_main_item hot ad_04" v-for="pros in floor.floorImageList4">
                                     <img class="page_main_image" src="/img/base/placeholder.png" :data-original="pros.product.image" :alt="pros.product && pros.product.name">
                                     <div class="page_main_type" v-if="pros.product && pros.product.productType === 2">医疗器械</div>
                                     <div class="page_main_text">
@@ -391,7 +391,7 @@
                             <div class="section_page_main type_08 swiper-wrapper  recommendBox-wrapperHot clear mfw section_8">
                                 <!-- 商品/图片 列表 -->
                                 <th:block th:each="pros : ${floor.get('floorImageList4')}"  th:object="${pros}">
-                                    <a th:href="*{link}" class="swiper-slide page_main_item hot ad_04" target="_blank">
+                                    <a href="javascript:void(0)"  onclick="handleHotStatistics($(this))" th:attr="data-href=*{link}"  class="swiper-slide page_main_item hot ad_04">
                                         <th:block th:if="${pros.get('product')}!=null" th:object="${pros.get('product')}">
                                             <img class="page_main_image" src="/img/base/placeholder.png" th:attr="data-original=*{image}" th:alt="*{name}">
                                         </th:block>
@@ -580,6 +580,8 @@
 <!-- 引入底部 -->
 <template th:replace="components/footer"></template>
 <template th:replace="components/foot-link"></template>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/product.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/mixins/cmsMixins.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/index.js(v=${version})}"></script>
 </body>
 </html>

+ 4 - 3
src/main/resources/templates/pay/caimei-paylist.html

@@ -87,13 +87,13 @@
                         待付金额:<span class="red">¥{{ paidAmount | NumFormat }}</span>
                     </div>
                     <div class="content-viw">
-                        开户行:<span>华夏银行深圳分行营业部</span>
+                        开户行:<span>{{ bankInfo.bankOfDeposit }}</span>
                     </div>
                     <div class="content-viw">
-                        户名:<span>周倩如</span>
+                        户名:<span>{{ bankInfo.bankUserName }}</span>
                     </div>
                     <div class="content-viw">
-                        银行卡号:<span>6230 2100 9221 2400</span>
+                        银行卡号:<span>{{ bankInfo.bankCardNo }}</span>
                     </div>
                     <div class="content-viw">
                         订单标识:<span v-text="orderIdentificationId"></span><span class="copy" @click="copyOrderBtnSubmitFn">复制</span>
@@ -113,6 +113,7 @@
 <script src="https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/pay.service.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/lib/qrcode.min.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/mixins/bankMixins.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/pay/caimei-paylist.js(v=${version})}"></script>
 
 </body>

+ 4 - 3
src/main/resources/templates/pay/caimei-payunder.html

@@ -29,13 +29,13 @@
             <div class="pay-bank">
                 <div class="pay-bank-content">
                     <div class="content-viw">
-                        开户行:<span>华夏银行深圳分行营业部</span>
+                        开户行:<span>{{ bankInfo.bankOfDeposit }}</span>
                     </div>
                     <div class="content-viw">
-                        户名:<span>周倩如</span>
+                        户名:<span>{{ bankInfo.bankUserName }}</span>
                     </div>
                     <div class="content-viw">
-                        银行卡号:<span>6230 2100 9221 2400</span>
+                        银行卡号:<span>{{ bankInfo.bankCardNo }}</span>
                     </div>
                     <div class="content-viw">
                         订单标识:<span v-text="orderIdentificationId"></span><span class="copy" @click="copyOrderBtnSubmitFn">复制</span>
@@ -54,6 +54,7 @@
 <script src="https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/pay.service.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/lib/qrcode.min.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/mixins/bankMixins.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/pay/caimei-payunder.js(v=${version})}"></script>
 
 </body>

+ 68 - 65
src/main/resources/templates/product/detail.html

@@ -17,8 +17,9 @@
 <template th:replace="components/header"></template>
 
 <!-- 商品详情 -->
-<div id="productDetail" v-show="showProduct" v-cloak>
+<div id="productDetail" v-cloak>
     <input type="hidden" th:value="${productId}" id="productId">
+    <input type="hidden" th:value="${typeId}" id="typeId">
     <input type="hidden" th:value="${product?.stock}" id="productStock">
     <input type="hidden" th:value="${product?.visibility}" id="productVisibility">
     <div class="wrap">
@@ -679,83 +680,85 @@
             </div>
         </div>
         <!--优惠券弹窗-->
-        <div class="coupon-popup" v-show="isShowPopup" :class="isShowPopup ? 'show' : 'hide'">
-            <div class="coupon-popup-model-content">
-                <div class="title"><p>优惠券</p><i class="icon mIcon" @click="hidePopup"></i></div>
-                <div class="coupon-popup-main">
-                    <div class="coupon-popup-tabs">
-                        <div class="popup-tabs-cell" :class="currentTab == 1 ? 'active' : ''"
-                             @click="queryCouponTabs(1)"><span>未领取</span></div>
-                        <div class="popup-tabs-cell" :class="currentTab == 2 ? 'active' : ''"
-                             @click="queryCouponTabs(2)"><span>已领取</span></div>
-                    </div>
-                    <div class="coupon-popup-content">
-                        <div class="empty" v-if="isCouponEmpty">
-                            <img src="/img/account/icon-coupon-empty@2x.png">
-                            <div class="msg"><p>暂无可领的优惠券</p></div>
+        <template v-if="GLOBAL_USER_ID>0">
+            <div class="coupon-popup" v-show="isShowPopup" :class="isShowPopup ? 'show' : 'hide'">
+                <div class="coupon-popup-model-content">
+                    <div class="title"><p>优惠券</p><i class="icon mIcon" @click="hidePopup"></i></div>
+                    <div class="coupon-popup-main">
+                        <div class="coupon-popup-tabs">
+                            <div class="popup-tabs-cell" :class="currentTab == 1 ? 'active' : ''"
+                                 @click="queryCouponTabs(1)"><span>未领取</span></div>
+                            <div class="popup-tabs-cell" :class="currentTab == 2 ? 'active' : ''"
+                                 @click="queryCouponTabs(2)"><span>已领取</span></div>
                         </div>
-                        <div class="coupon-popup-scroll" v-else>
-                            <div class="coupon-list-cell" v-for="(coupon, index) in productCouponList" :key="index"
-                                 :class="currentTab == 2 ? 'none' : ''">
-                                <div class="coupon-list-le">
-                                    <div class="coupon-list-money">
-                                        <p>¥<span class="maxMoney">{{ coupon.couponAmount }}</span><span
-                                                class="minMoney">满{{ coupon.touchPrice }}可用</span></p>
-                                    </div>
-                                    <div class="coupon-list-name">
-                                        <p v-if="coupon.couponType == 0">
-                                            {{ coupon.productType && coupon.productType == 1 ? '全商城商品通用' : '仅可购买指定商品' }}
-                                        </p>
-                                        <p v-if="coupon.couponType == 1">
-                                            {{ coupon.categoryType == 1 ? '仅限购买产品类商品' : '仅限购买仪器类商品' }}
-                                        </p>
-                                        <p v-if="coupon.couponType == 3">仅限购买店铺【{{ coupon.shopName }}】的商品</p>
-                                        <p v-if="coupon.couponType == 4 || coupon.couponType == 2">全商城商品通用</p>
+                        <div class="coupon-popup-content">
+                            <div class="empty" v-if="isCouponEmpty">
+                                <img src="/img/account/icon-coupon-empty@2x.png">
+                                <div class="msg"><p>暂无可领的优惠券</p></div>
+                            </div>
+                            <div class="coupon-popup-scroll" v-else>
+                                <div class="coupon-list-cell" v-for="(coupon, index) in productCouponList" :key="index"
+                                     :class="currentTab == 2 ? 'none' : ''">
+                                    <div class="coupon-list-le">
+                                        <div class="coupon-list-money">
+                                            <p>¥<span class="maxMoney">{{ coupon.couponAmount }}</span><span
+                                                    class="minMoney">满{{ coupon.touchPrice }}可用</span></p>
+                                        </div>
+                                        <div class="coupon-list-name">
+                                            <p v-if="coupon.couponType == 0">
+                                                {{ coupon.productType && coupon.productType == 1 ? '全商城商品通用' : '仅可购买指定商品' }}
+                                            </p>
+                                            <p v-if="coupon.couponType == 1">
+                                                {{ coupon.categoryType == 1 ? '仅限购买产品类商品' : '仅限购买仪器类商品' }}
+                                            </p>
+                                            <p v-if="coupon.couponType == 3">仅限购买店铺【{{ coupon.shopName }}】的商品</p>
+                                            <p v-if="coupon.couponType == 4 || coupon.couponType == 2">全商城商品通用</p>
+                                        </div>
+                                        <div class="coupon-list-time"> {{ coupon.startDate }} - {{ coupon.endDate }}</div>
                                     </div>
-                                    <div class="coupon-list-time"> {{ coupon.startDate }} - {{ coupon.endDate }}</div>
-                                </div>
-                                <div class="coupon-list-ri">
+                                    <div class="coupon-list-ri">
 
-                                    <template v-if="coupon.couponBtnType == 0">
-                                        <template v-if="coupon.couponPayWay == 2">
-                                            <div class="buy" @click="toDeductCoupon(coupon)"
-                                                 id="coupon-exchange-coupon"
-                                                 onclick="_czc.push(['_trackEvent','商品详情','优惠券采美豆兑换','优惠券兑换按钮点击',1,'coupon-exchange-coupon'])">
-                                                <p>{{ coupon.moneyCouponPrice }}采美豆</p>
-                                                <p>兑换</p>
-                                            </div>
-                                        </template>
-                                        <template v-else-if="coupon.couponPayWay == 1">
-                                            <div class="buy" @click="toBuyCoupon(coupon)"
-                                                 id="coupon-buy-coupon"
-                                                 onclick="_czc.push(['_trackEvent','商品详情','优惠券购买按钮点击','优惠券购买按钮点击',1,'coupon-buy-coupon'])">
-                                                <p>¥{{ coupon.moneyCouponPrice }}</p>
-                                                <p>购买</p>
-                                            </div>
-                                        </template>
-                                        <template v-else>
+                                        <template v-if="coupon.couponBtnType == 0">
+                                            <template v-if="coupon.couponPayWay == 2">
+                                                <div class="buy" @click="toDeductCoupon(coupon)"
+                                                     id="coupon-exchange-coupon"
+                                                     onclick="_czc.push(['_trackEvent','商品详情','优惠券采美豆兑换','优惠券兑换按钮点击',1,'coupon-exchange-coupon'])">
+                                                    <p>{{ coupon.moneyCouponPrice }}采美豆</p>
+                                                    <p>兑换</p>
+                                                </div>
+                                            </template>
+                                            <template v-else-if="coupon.couponPayWay == 1">
+                                                <div class="buy" @click="toBuyCoupon(coupon)"
+                                                     id="coupon-buy-coupon"
+                                                     onclick="_czc.push(['_trackEvent','商品详情','优惠券购买按钮点击','优惠券购买按钮点击',1,'coupon-buy-coupon'])">
+                                                    <p>¥{{ coupon.moneyCouponPrice }}</p>
+                                                    <p>购买</p>
+                                                </div>
+                                            </template>
+                                            <template v-else>
                                             <span class="none"
-                                              @click="receiveCoupon(coupon)"
-                                              id="coupon-receive"
-                                              onclick="_czc.push(['_trackEvent','商品详情','优惠券领取按钮点击','优惠券领取按钮点击',1,'coupon-receive'])">领取
+                                                  @click="receiveCoupon(coupon)"
+                                                  id="coupon-receive"
+                                                  onclick="_czc.push(['_trackEvent','商品详情','优惠券领取按钮点击','优惠券领取按钮点击',1,'coupon-receive'])">领取
                                             </span>
+                                            </template>
                                         </template>
+                                        <span v-if="coupon.couponBtnType == 1">已领取</span>
+                                    </div>
+                                    <template v-if="coupon.moneyCouponFlag == 1">
+                                        <div class="coupon-tags" v-if="coupon.moneyCouponType == 1">意向{{ coupon.couponType | TypeFormat }}</div>
+                                        <div class="coupon-tags"  v-else>定向{{ coupon.couponType | TypeFormat }}</div>
+                                    </template>
+                                    <template v-else>
+                                        <div class="coupon-tags">{{ coupon.couponType | TypeFormat }}</div>
                                     </template>
-                                    <span v-if="coupon.couponBtnType == 1">已领取</span>
                                 </div>
-                                <template v-if="coupon.moneyCouponFlag == 1">
-                                    <div class="coupon-tags" v-if="coupon.moneyCouponType == 1">意向{{ coupon.couponType | TypeFormat }}</div>
-                                    <div class="coupon-tags"  v-else>定向{{ coupon.couponType | TypeFormat }}</div>
-                                </template>
-                                <template v-else>
-                                    <div class="coupon-tags">{{ coupon.couponType | TypeFormat }}</div>
-                                </template>
                             </div>
                         </div>
                     </div>
                 </div>
             </div>
-        </div>
+        </template>
     </div>
 </div>
 

+ 2 - 2
src/main/resources/templates/product/product-hot.html

@@ -24,7 +24,7 @@
           <div id="productHotBanner" class="swiper-container">
             <ul class="swiper-wrapper">
               <li class="swiper-slide mfc" v-for="pros in topGoodList">
-                <a :href="'/product-'+pros.productId+'.html'" target="_blank">
+                <a :href="'/product-'+pros.productId+'-5.html'" target="_blank">
                   <div class="swiper-slide-image">
                     <img :src="pros.mainImage" alt="">
                   </div>
@@ -130,7 +130,7 @@
         <ul class="productList clear mfw">
           <li class="productItem " v-for="p in listData">
             <div class="page_main_type" v-if="p.productType === 2">医疗器械</div>
-            <a class="image" :href="'/product-'+p.productId+'.html'">
+            <a class="image" :href="'/product-'+p.productId+'-5.html'">
               <img :src="p.image" :alt="p.name">
               <p class="name" v-html="addhtml + p.name" v-if="p.beautyActFlag==1"></p>
               <p class="name" v-html="p.name" v-else></p>

+ 11 - 7
src/main/resources/templates/single-page/promotions.html

@@ -14,13 +14,15 @@
 <!-- 二级页面 -->
 <div id="promotionsList">
     <ul class="wrap">
-        <li class="promotions" v-for="item in listData"><a :href="item.link" :class="item.status==3?'noclick':''" >
-            <img :src="item.image">
-            <p v-text="item.title"></p>
-            <span v-if="item.status==1" class="time" v-text="''+item.detail">活动时间:活动即将开始</span>
-            <span v-if="item.status==2" class="time" v-text="'活动时间:'+item.detail"></span>
-            <span v-if="item.status==3" class="finish"></span>
-        </a></li>
+        <li class="promotions" v-for="item in listData" @click="handleActivityStatistics(item.link)">
+            <a href="javascript:void(0)" :class="item.status==3?'noclick':''" >
+                <img :src="item.image">
+                <p v-text="item.title"></p>
+                <span v-if="item.status==1" class="time" v-text="''+item.detail">活动时间:活动即将开始</span>
+                <span v-if="item.status==2" class="time" v-text="'活动时间:'+item.detail"></span>
+                <span v-if="item.status==3" class="finish"></span>
+            </a>
+        </li>
     </ul>
     <!--分页-->
     <div v-if="(!isPC) && noMore" class="noMore">---- 没有更多了 ----</div>
@@ -43,6 +45,8 @@
 <template th:replace="components/footer"></template>
 <template th:replace="components/foot-link"></template>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/pages.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/product.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/mixins/cmsMixins.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/single-page/promotions.js(v=${version})}"></script>
 </body>
 </html>