فهرست منبع

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

Aslee 3 سال پیش
والد
کامیت
3f0db4fe08
100فایلهای تغییر یافته به همراه3147 افزوده شده و 896 حذف شده
  1. 2 0
      README.md
  2. 4 1
      src/main/java/com/caimei/www/config/CustomExceptionHandler.java
  3. 0 3
      src/main/java/com/caimei/www/controller/BaseController.java
  4. 0 42
      src/main/java/com/caimei/www/controller/ClassificationController.java
  5. 1 1
      src/main/java/com/caimei/www/controller/authorized/document/DocumentAuthApi.java
  6. 0 10
      src/main/java/com/caimei/www/controller/unlimited/EquipmentController.java
  7. 50 24
      src/main/java/com/caimei/www/controller/unlimited/ProductController.java
  8. 66 0
      src/main/java/com/caimei/www/controller/unlimitedApi/RepairApi.java
  9. 1 1
      src/main/java/com/caimei/www/controller/unlimitedApi/ShortLinkApi.java
  10. 33 0
      src/main/java/com/caimei/www/mapper/RepairDao.java
  11. 112 0
      src/main/java/com/caimei/www/pojo/link/PageVo.java
  12. 34 0
      src/main/java/com/caimei/www/pojo/link/RepairLinkVo.java
  13. 35 0
      src/main/java/com/caimei/www/pojo/link/RepairUserVo.java
  14. 189 0
      src/main/java/com/caimei/www/pojo/link/RepairVo.java
  15. 0 4
      src/main/java/com/caimei/www/service/generate/impl/GenerateHtmlImpl.java
  16. 41 0
      src/main/java/com/caimei/www/service/link/RepairService.java
  17. 223 0
      src/main/java/com/caimei/www/service/link/impl/RepairServiceImpl.java
  18. 0 6
      src/main/java/com/caimei/www/service/page/EquipmentService.java
  19. 0 42
      src/main/java/com/caimei/www/service/page/impl/EquipmentServiceImpl.java
  20. 1 3
      src/main/java/com/caimei/www/service/page/impl/HomeServiceImpl.java
  21. 9 9
      src/main/resources/config/dev/application-dev.yml
  22. 184 0
      src/main/resources/mapper/RepairMapper.xml
  23. 0 26
      src/main/resources/static/css/help/select.css
  24. 9 1
      src/main/resources/static/css/product/detail.h5.css
  25. 51 1
      src/main/resources/static/css/product/detail.pc.css
  26. 54 2
      src/main/resources/static/css/product/instruement-list.css
  27. 54 5
      src/main/resources/static/css/product/list.css
  28. 55 0
      src/main/resources/static/css/product/product-supporting.h5.css
  29. 40 7
      src/main/resources/static/css/shopping/shopping.css
  30. BIN
      src/main/resources/static/img/base/icon-xiayibu@2x.png
  31. BIN
      src/main/resources/static/img/base/icon_m.png
  32. BIN
      src/main/resources/static/img/cart/icon_weigouxuan_desied@2x.png
  33. BIN
      src/main/resources/static/img/common/qr_code_hehe.jpg
  34. 2 2
      src/main/resources/static/js/account/register-club.js
  35. 2 2
      src/main/resources/static/js/account/register-supplier.js
  36. 2 2
      src/main/resources/static/js/account/supplier-information.js
  37. 1 71
      src/main/resources/static/js/base.js
  38. 2 5
      src/main/resources/static/js/common/ajax.service.js
  39. 72 0
      src/main/resources/static/js/common/request.service.js
  40. 3 6
      src/main/resources/static/js/common/serviceapi/beautyArchive.service.js
  41. 3 2
      src/main/resources/static/js/common/serviceapi/club.service.js
  42. 28 21
      src/main/resources/static/js/common/serviceapi/order.service.js
  43. 2 14
      src/main/resources/static/js/common/serviceapi/pages.service.js
  44. 39 1
      src/main/resources/static/js/common/serviceapi/product.service.js
  45. 9 9
      src/main/resources/static/js/common/serviceapi/repair.service.js
  46. 9 7
      src/main/resources/static/js/common/serviceapi/second.service.js
  47. 17 1
      src/main/resources/static/js/common/serviceapi/shopping.service.js
  48. 9 8
      src/main/resources/static/js/common/serviceapi/supplier.service.js
  49. 3 3
      src/main/resources/static/js/common/serviceapi/user.service.js
  50. 47 44
      src/main/resources/static/js/common/serviceapi/utils.service.js
  51. 0 1
      src/main/resources/static/js/document/base.js
  52. 3 6
      src/main/resources/static/js/flea-market/form.js
  53. 0 35
      src/main/resources/static/js/help/select.js
  54. 16 16
      src/main/resources/static/js/index.js
  55. 219 5
      src/main/resources/static/js/product/detail.js
  56. 123 4
      src/main/resources/static/js/product/list.js
  57. 132 12
      src/main/resources/static/js/product/produce-list.js
  58. 271 0
      src/main/resources/static/js/product/product-supporting.js
  59. 165 91
      src/main/resources/static/js/shopping/cart.js
  60. 96 70
      src/main/resources/static/js/shopping/confirm.js
  61. 1 1
      src/main/resources/static/js/single-page/live.js
  62. 10 25
      src/main/resources/static/js/single-page/topic.js
  63. 2 2
      src/main/resources/static/js/supplier-center/setting/information.js
  64. 42 37
      src/main/resources/static/js/supplier-center/shop/decoration.js
  65. 4 4
      src/main/resources/static/js/supplier-center/shop/release.js
  66. 2 2
      src/main/resources/static/js/supplier/index.js
  67. 3 1
      src/main/resources/static/js/user-center/account/beans.js
  68. 3 4
      src/main/resources/static/js/user-center/collection/collection.js
  69. 22 9
      src/main/resources/static/js/user-center/dashboard.js
  70. 3 3
      src/main/resources/static/js/user-center/message.js
  71. 14 14
      src/main/resources/static/js/user-center/order/list.js
  72. 2 2
      src/main/resources/static/js/user-center/repair/form-user.js
  73. 6 6
      src/main/resources/static/js/user-center/repair/repair.js
  74. 2 2
      src/main/resources/static/js/user-center/setting/information.js
  75. 4 4
      src/main/resources/static/js/user-center/setting/upgrade.js
  76. 1 1
      src/main/resources/templates/account/components/header.html
  77. 3 3
      src/main/resources/templates/account/register-club.html
  78. 3 3
      src/main/resources/templates/account/register-supplier.html
  79. 3 3
      src/main/resources/templates/account/supplier-information.html
  80. 0 1
      src/main/resources/templates/article/components/article-header.html
  81. 0 1
      src/main/resources/templates/components/header.html
  82. 0 1
      src/main/resources/templates/document/beauty-archive.html
  83. 1 1
      src/main/resources/templates/document/details.html
  84. 1 1
      src/main/resources/templates/document/list.html
  85. 1 1
      src/main/resources/templates/document/login.html
  86. 1 1
      src/main/resources/templates/document/more-content.html
  87. 1 1
      src/main/resources/templates/error/404.html
  88. 3 3
      src/main/resources/templates/flea-market/form.html
  89. 0 62
      src/main/resources/templates/help/select.html
  90. 1 1
      src/main/resources/templates/pay/caimei-pay.html
  91. 1 1
      src/main/resources/templates/pay/caimei-paymobile.html
  92. 1 1
      src/main/resources/templates/pay/caimei-starspay.html
  93. 1 1
      src/main/resources/templates/pay/caimei-success.html
  94. 1 1
      src/main/resources/templates/pay/caimei-wechatpay.html
  95. 0 1
      src/main/resources/templates/pay/caimei-wisapay.html
  96. 143 1
      src/main/resources/templates/product/detail.html
  97. 74 6
      src/main/resources/templates/product/instruelist.html
  98. 132 57
      src/main/resources/templates/product/list.html
  99. 132 0
      src/main/resources/templates/product/product-supporting.html
  100. 0 1
      src/main/resources/templates/product/qualityauthorize.html

+ 2 - 0
README.md

@@ -7,3 +7,5 @@
   3. [Thymeleaf](https://www.thymeleaf.org/)
   4. [Vue 2.6.11](https://cn.vuejs.org/)
   5. [Jquery 3.5.1](https://jquery.com/)
+
+test2.

+ 4 - 1
src/main/java/com/caimei/www/config/CustomExceptionHandler.java

@@ -1,5 +1,6 @@
 package com.caimei.www.config;
 
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -11,13 +12,14 @@ import reactor.core.publisher.Mono;
  * @author : Charles
  * @date : 2020/8/7
  */
+@Slf4j
 @ControllerAdvice
 public class CustomExceptionHandler {
 
     @ExceptionHandler(Exception.class)
     public String convertExceptionMsg(Exception e) {
         //自定义逻辑,可返回其他值
-        e.printStackTrace();
+        log.error("异常处理:", e);
         return "error/404";
     }
 
@@ -25,6 +27,7 @@ public class CustomExceptionHandler {
     @ResponseBody
     public Mono<String> convertIllegalAccessError(Exception e) {
         //自定义逻辑,可返回其他值
+        log.error("异常处理:", e);
         return Mono.just("illegal access");
     }
 }

+ 0 - 3
src/main/java/com/caimei/www/controller/BaseController.java

@@ -23,8 +23,6 @@ import java.util.List;
 public class BaseController {
 	@Value("${caimei.coreServer}")
 	private String coreServer;
-	@Value("${caimei.spiServer}")
-    private String spiServer;
     /** 打包时间 */
     @Value("${caimei.siteEnv}")
     private String siteEnv;
@@ -58,7 +56,6 @@ public class BaseController {
 	    model.addAttribute("version", buildTime);
 		// spi服务器地址
 		model.addAttribute("coreServer", coreServer);
-		model.addAttribute("spiServer", spiServer);
 		// 搜索热门关键字
 		List<String> searchHotWord = baseService.getSearchHotWord();
 		model.addAttribute("searchHotWord", searchHotWord);

+ 0 - 42
src/main/java/com/caimei/www/controller/ClassificationController.java

@@ -1,42 +0,0 @@
-package com.caimei.www.controller;
-
-import com.caimei.www.mapper.ProductDao;
-import com.caimei.www.pojo.JsonModel;
-import com.caimei.www.pojo.classify.Bigtype;
-import com.caimei.www.pojo.classify.SmallType;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.annotation.Resource;
-import java.util.List;
-
-/**
- * Description
- *
- * @author : plf
- * @date : 2020/12/23
- */
-@Controller
-@RequestMapping("classification")
-public class ClassificationController extends BaseController {
-    @Resource
-    private ProductDao productDao;
-
-    @GetMapping("/select.html")
-    public String selectUp() {
-        return "help/select";
-    }
-
-    @GetMapping("bigTypeData")
-    @ResponseBody
-    public JsonModel bigTypeData(){
-        List<Bigtype> bigtypeList = productDao.findBigtype();
-        bigtypeList.forEach((bigtype)->{
-            List<SmallType> smallTypes = productDao.findSmalltype();
-            bigtype.setSmallTypes(smallTypes);
-        });
-        return JsonModel.success(bigtypeList);
-    }
-}

+ 1 - 1
src/main/java/com/caimei/www/controller/authorized/document/DocumentAuthController.java → src/main/java/com/caimei/www/controller/authorized/document/DocumentAuthApi.java

@@ -19,7 +19,7 @@ import reactor.core.publisher.Mono;
  */
 @RestController
 @RequestMapping("/document")
-public class DocumentAuthController {
+public class DocumentAuthApi {
 
     private DocumentAuthService documentAuthService;
 

+ 0 - 10
src/main/java/com/caimei/www/controller/unlimited/EquipmentController.java

@@ -55,14 +55,4 @@ public class EquipmentController extends BaseController {
         model.addAttribute("equipment", detail);
         return equipment_DETAIL_PATH;
     }
-
-    /**
-     * 获取项目仪器详情页中层信息(搭配推荐,相似商品)
-     */
-    @GetMapping("/equipment/recommend")
-    @ResponseBody
-    public JsonModel<List<PageFloor>> getEquipmentRecommendById(Integer equipmentId) {
-        return equipmentService.getEquipmentRecommendById(equipmentId);
-    }
-
 }

+ 50 - 24
src/main/java/com/caimei/www/controller/unlimited/ProductController.java

@@ -27,6 +27,7 @@ public class ProductController extends BaseController {
 
     private static final String PRODUCT_LIST_PATH = "product/list";
     private static final String PRODUCT_DETAIL_PATH = "product/detail";
+    private static final String PRODUCT_SUPPORTING_PATH = "product/product-supporting";
     private static final String PROMOTIONS_LIST_PATH = "product/promotions";
     private static final String INSTRUMENT_PAGE_PATH = "product/instrument";
     private static final String TEMPORARY_PAGE_PATH = "product/temporary";
@@ -35,7 +36,9 @@ public class ProductController extends BaseController {
     private static final String ACTIVITY_TOP_PATH = "activity/activityTopic";
     private static final String CLOUD_BEAUTY_PATH = "activity/beautyTopic";
     private static final String ACTIVITY_COUPON_EXP = "activity/couponExp";
-    /** 优惠券活动商品列表 */
+    /**
+     * 优惠券活动商品列表
+     */
     private static final String PRODUCT_COUPON = "product/product-coupon";
     /**
      * 美博会专题页
@@ -68,7 +71,9 @@ public class ProductController extends BaseController {
      * 优惠券活动商品列表
      */
     @GetMapping("/product/product-coupon.html")
-    public String productCoupon() { return PRODUCT_COUPON; }
+    public String productCoupon() {
+        return PRODUCT_COUPON;
+    }
 
     /**
      * 促销活动商品列表
@@ -119,28 +124,28 @@ public class ProductController extends BaseController {
      * 商品分类列表页面
      */
     @GetMapping("/product/classify-{ids}.html")
-    public String instruelist(final Model model, @PathVariable("ids") String ids) {
+    public String instruelist(final Model model, @PathVariable("ids") String ids, String bpn, Integer pro, Integer newg) {
         String[] split = ids.split("-");
         // 分类类型:1产品,2仪器,0全部
-        Integer typeSort =  split.length>=1 ? Integer.valueOf(split[0]) : 0;
+        Integer typeSort = split.length >= 1 ? Integer.valueOf(split[0]) : 0;
         model.addAttribute("typeSort", typeSort);
         // 一级分类Id
-        Integer bigTypeId = split.length>=2 ? Integer.valueOf(split[1]) : 0;
+        Integer bigTypeId = split.length >= 2 ? Integer.valueOf(split[1]) : 0;
         model.addAttribute("bigTypeId", bigTypeId);
         // 二级分类Id
-        Integer smallTypeId = split.length>=3 ? Integer.valueOf(split[2]) : 0;
+        Integer smallTypeId = split.length >= 3 ? Integer.valueOf(split[2]) : 0;
         model.addAttribute("smallTypeId", smallTypeId);
         // 三级级分类Id
-        Integer tinyTypeId = split.length>=4 ? Integer.valueOf(split[3]) : 0;
+        Integer tinyTypeId = split.length >= 4 ? Integer.valueOf(split[3]) : 0;
         model.addAttribute("tinyTypeId", tinyTypeId);
         // 页码
-        Integer pageNum = split.length>=5 ? Integer.valueOf(split[4]) : 1;
+        Integer pageNum = split.length >= 5 ? Integer.valueOf(split[4]) : 1;
         // 每页数量
-        Integer pageSize = split.length>=6 ? Integer.valueOf(split[5]) : 24;
+        Integer pageSize = split.length >= 6 ? Integer.valueOf(split[5]) : 24;
         // 排序字段:价格price,销量sales,人气favorite
-        String sortField = split.length>=7 ? split[6] : "";
+        String sortField = split.length >= 7 ? split[6] : "";
         // 排序规则:1降序,其他升序
-        Integer sortType = split.length>=8 ? Integer.valueOf(split[7]) : 1;
+        Integer sortType = split.length >= 8 ? Integer.valueOf(split[7]) : 1;
         /*
          * 获取一级分类
          */
@@ -192,44 +197,57 @@ 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){
+            productParams.append("&newFlag=").append(newg);
+        }
+        if(pro!=null){
+            productParams.append("&promotionFlag=").append(pro);
+        }
+        if(!StringUtils.isEmpty(bpn)){
+            productParams.append("&brandIds=").append(bpn);
+        }
         JSONObject productObj = productService.getProductListJson(productParams.toString());
-        Integer totalCount = productObj.getInteger("total");
-        JSONArray productList = (JSONArray) productObj.get("items");
+        Integer totalCount = 0;
+        JSONArray productList = new JSONArray();
+        if (null != productObj) {
+            totalCount = productObj.getInteger("total");
+            productList = (JSONArray) productObj.get("items");
+        }
         model.addAttribute("productCount", totalCount);
         model.addAttribute("productListJson", productList);
 
-        int totalPage = (int) Math.ceil((double) totalCount/pageSize);
+        int totalPage = (int) Math.ceil((double) totalCount / pageSize);
         totalPage = totalPage > 0 ? totalPage : 1;
         int[] arr = null;
         if (totalPage <= 6) {
             int[] tmp = new int[]{1, 2, 3, 4, 5, 6};
             arr = Arrays.copyOf(tmp, totalPage);
-        }else if (pageNum <= 3) {
+        } else if (pageNum <= 3) {
             arr = new int[]{1, 2, 3, 4, 5, 0, totalPage};
-        }else if (pageNum >= totalPage - 2) {
+        } else if (pageNum >= totalPage - 2) {
             arr = new int[]{1, 0, totalPage - 4, totalPage - 3, totalPage - 2, totalPage - 1, totalPage};
-        }else{
+        } else {
             arr = new int[]{1, 0, pageNum - 2, pageNum - 1, pageNum, pageNum + 1, pageNum + 2, 0, totalPage};
         }
 
-        List<Map<String,Object>> arrPath = new ArrayList<>();
+        List<Map<String, Object>> arrPath = new ArrayList<>();
 
         final String basePath = "/product/classify-" + typeSort + "-" + bigTypeId + "-" + smallTypeId + "-" + tinyTypeId;
         if (pageNum > 1) {
             StringBuilder prevPath = new StringBuilder(basePath);
-            prevPath.append("-").append(pageNum-1).append("-").append(pageSize);
+            prevPath.append("-").append(pageNum - 1).append("-").append(pageSize);
             if (!StringUtils.isEmpty(sortField)) {
                 prevPath.append("-").append(sortField).append("-").append(sortType).append(".html");
             } else {
                 prevPath.append(".html");
             }
-            Map<String,Object> tempPath = new HashMap<>();
+            Map<String, Object> tempPath = new HashMap<>();
             tempPath.put("btn", -1);
             tempPath.put("path", prevPath);
             arrPath.add(tempPath);
         }
         for (int j : arr) {
-            Map<String,Object> tempPath = new HashMap<>();
+            Map<String, Object> tempPath = new HashMap<>();
             tempPath.put("btn", j);
             if (j > 0) {
                 StringBuilder btnPath = new StringBuilder(basePath);
@@ -247,13 +265,13 @@ public class ProductController extends BaseController {
         }
         if (pageNum < totalPage) {
             StringBuilder nextPath = new StringBuilder(basePath);
-            nextPath.append("-").append(pageNum+1).append("-").append(pageSize);
+            nextPath.append("-").append(pageNum + 1).append("-").append(pageSize);
             if (!StringUtils.isEmpty(sortField)) {
                 nextPath.append("-").append(sortField).append("-").append(sortType).append(".html");
             } else {
                 nextPath.append(".html");
             }
-            Map<String,Object> tempPath = new HashMap<>();
+            Map<String, Object> tempPath = new HashMap<>();
             tempPath.put("btn", -2);
             tempPath.put("path", nextPath);
             arrPath.add(tempPath);
@@ -322,7 +340,15 @@ public class ProductController extends BaseController {
      * 优惠券说明页
      */
     @GetMapping("/product/couponExp.html")
-    public String getCouponExpPath(){
+    public String getCouponExpPath() {
         return ACTIVITY_COUPON_EXP;
     }
+
+    /**
+     * H5配套商品页
+     */
+    @GetMapping("/product/product-supporting.html")
+    public String getProductSupporting() {
+        return PRODUCT_SUPPORTING_PATH;
+    }
 }

+ 66 - 0
src/main/java/com/caimei/www/controller/unlimitedApi/RepairApi.java

@@ -0,0 +1,66 @@
+package com.caimei.www.controller.unlimitedApi;
+
+import com.caimei.www.pojo.JsonModel;
+import com.caimei.www.pojo.link.PageVo;
+import com.caimei.www.pojo.link.RepairVo;
+import com.caimei.www.service.link.RepairService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/20
+ */
+@RestController
+@RequestMapping("/repair")
+public class RepairApi {
+
+    private RepairService repairService;
+    @Autowired
+    public void setRepairService(RepairService repairService) {
+        this.repairService = repairService;
+    }
+
+    /**
+     * 维修列表 (旧:/pcCenter/findMaintenance)
+     */
+    @GetMapping("/list")
+    public JsonModel findMaintenance(RepairVo repairVo, PageVo pageVo) {
+        return repairService.findMaintenance(repairVo, pageVo);
+    }
+
+    /**
+     * 申请维修 (旧:/pcCenter/applyMaintenance)
+     */
+    @PostMapping("/apply")
+    public JsonModel applyMaintenance(RepairVo repairVo) {
+        return repairService.applyMaintenance(repairVo);
+    }
+
+    /**
+     * 维修详情 (旧:/pcCenter/maintenance/detail)
+     * id 维修id
+     */
+    @GetMapping("/detail")
+    public JsonModel maintenanceDetail(Integer id) {
+        return repairService.findMaintenanceDetail(id);
+    }
+
+    /**
+     * 评价维修  (旧:/pcCenter/maintenance/evaluation)
+     * @param solveStatus    是否解决问题:0未解决,1已解决
+     * @param serviceRating  服务评分,一颗心表示1,多颗数次之
+     * @param serviceEvaluate  服务评价
+     */
+    @PostMapping("/evaluation")
+    public JsonModel evaluationMaintenance(Integer id, String solveStatus, String serviceRating, String serviceEvaluate){
+        return repairService.evaluationMaintenance(id, solveStatus, serviceRating, serviceEvaluate);
+
+    }
+
+}

+ 1 - 1
src/main/java/com/caimei/www/controller/ShortLinkApi.java → src/main/java/com/caimei/www/controller/unlimitedApi/ShortLinkApi.java

@@ -1,4 +1,4 @@
-package com.caimei.www.controller;
+package com.caimei.www.controller.unlimitedApi;
 
 import com.caimei.www.service.link.ShortLinkService;
 import org.springframework.beans.factory.annotation.Autowired;

+ 33 - 0
src/main/java/com/caimei/www/mapper/RepairDao.java

@@ -0,0 +1,33 @@
+package com.caimei.www.mapper;
+
+import com.caimei.www.pojo.link.RepairLinkVo;
+import com.caimei.www.pojo.link.RepairUserVo;
+import com.caimei.www.pojo.link.RepairVo;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/20
+ */
+@Mapper
+public interface RepairDao {
+    List<RepairVo> findMaintenance(RepairVo repairVo);
+
+    RepairUserVo getRepairUser(Integer userId);
+
+    String findOrderNoInToday(String date);
+
+    void insertMaintenance(RepairVo repairVo);
+
+    void insertMaintenanceLink(RepairLinkVo userLink);
+
+    RepairVo findMaintenanceDetail(Integer id);
+
+    int checkMobileSubmitTime(String mobile, String date);
+
+    void updateMaintenace(RepairVo repairVo);
+}

+ 112 - 0
src/main/java/com/caimei/www/pojo/link/PageVo.java

@@ -0,0 +1,112 @@
+package com.caimei.www.pojo.link;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2020/3/9
+ */
+@Data
+public class PageVo<T> implements Serializable {
+    /** 当前页码 */
+    @Builder.Default
+    private int pageNum = 1;
+    /** 每页大小 */
+    @Builder.Default
+    private int pageSize = 10;
+    /** 总记录数 */
+    private int totalRecord;
+    /** 总页数 */
+    private int totalPage;
+    /** 是否有后一页 */
+    private boolean hasNextPage;
+    /** 是否有前一页 */
+    private boolean hasPreviousPage;
+    /** 查询结果 */
+    List<T> results;
+
+    public PageVo(List<T> list) {
+        if (list instanceof com.github.pagehelper.Page) {
+            com.github.pagehelper.Page<T> page = (com.github.pagehelper.Page<T>) list;
+            this.pageNum = page.getPageNum();
+            this.pageSize = page.getPageSize();
+            this.totalRecord = (int) page.getTotal();
+            this.totalPage = page.getPages();
+            setHasPreviousAndNext();
+            this.results = page;
+        } else if (list != null) {
+            this.pageSize = list.size();
+            this.totalRecord = list.size();
+            this.totalPage = 1;
+            this.results = list;
+        }
+    }
+
+    public PageVo(int pageNum, int pageSize, int totalRecord, List<T> results) {
+        super();
+        this.pageNum = pageNum;
+        this.pageSize = pageSize;
+        this.totalRecord = totalRecord;
+        this.totalPage = totalRecord % pageSize == 0 ? totalRecord / pageSize : totalRecord / pageSize + 1;
+        this.results = results;
+        if (this.pageNum < 2) {
+            hasPreviousPage = false;
+        } else {
+            hasPreviousPage = true;
+        }
+        if (this.pageNum < totalPage) {
+            hasNextPage = true;
+        } else {
+            hasNextPage = false;
+        }
+    }
+
+    public PageVo(int pageNum, int maxSize, int totalRecord, int totalPage,
+                  List<T> results) {
+        super();
+        this.pageNum = pageNum;
+        this.pageSize = maxSize;
+        this.totalRecord = totalRecord;
+        this.totalPage = totalPage;
+        this.results = results;
+        if (this.pageNum < 2) {
+            hasPreviousPage = false;
+        } else {
+            hasPreviousPage = true;
+        }
+        if (this.pageNum < totalPage) {
+            hasNextPage = true;
+        } else {
+            hasNextPage = false;
+        }
+    }
+
+    public PageVo() {super();}
+
+    public void setHasPreviousAndNext() {
+        if (this.pageNum < 2) {
+            hasPreviousPage = false;
+        } else {
+            hasPreviousPage = true;
+        }
+        if (this.pageNum < totalPage) {
+            hasNextPage = true;
+        } else {
+            hasNextPage = false;
+        }
+    }
+
+    public int countTotalPage() {
+        int total = totalRecord % pageSize == 0 ? totalRecord / pageSize : totalRecord / pageSize + 1;
+        this.setTotalPage(total);
+        return total;
+    }
+
+    private static final long serialVersionUID = 1L;
+}

+ 34 - 0
src/main/java/com/caimei/www/pojo/link/RepairLinkVo.java

@@ -0,0 +1,34 @@
+package com.caimei.www.pojo.link;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 仪器维修分享链接
+ *
+ * @author : Aslee
+ * @date : 2020/9/1
+ */
+@Data
+public class RepairLinkVo implements Serializable {
+    private Integer id;
+    /**
+     * 用户ID
+     */
+    private Integer userId;
+    /**
+     *链接uuid
+     */
+    private String linkCode;
+    /**
+     * 1表示用户, 2表示维修商
+     */
+    private String type;
+    /**
+     * 仪器维修表ID
+     */
+    private Integer cmInstrumentMaintenanceId;
+    private static final long serialVersionUID = 1L;
+}

+ 35 - 0
src/main/java/com/caimei/www/pojo/link/RepairUserVo.java

@@ -0,0 +1,35 @@
+package com.caimei.www.pojo.link;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/20
+ */
+@Data
+public class RepairUserVo implements Serializable {
+    /**
+     *用户ID
+     */
+    private Integer userId;
+    /**
+     * 用户名
+     */
+    private String userName;
+    /**
+     * 用户类型,见表c_usertype或枚举UserType
+     */
+    private Integer registerUserTypeId;
+    /**
+     * 企业账号名
+     */
+    private String account;
+    /**
+     * 手机号码
+     */
+    private String mobile;
+}

+ 189 - 0
src/main/java/com/caimei/www/pojo/link/RepairVo.java

@@ -0,0 +1,189 @@
+package com.caimei.www.pojo.link;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 仪器维修
+ *
+ * @author : Aslee
+ * @date : 2020/9/1
+ */
+@Data
+public class RepairVo implements Serializable {
+    private Integer id;
+    /**
+     * 订单号
+     */
+    private String orderNo;
+    /**
+     *用户ID
+     */
+    private Integer userId;
+    /**
+     *仪器名称
+     */
+    private String instrumentName;
+    /**
+     *生产厂家
+     */
+    private String manufacturer;
+    /**
+     *仪器品牌/型号
+     */
+    private String instrumentBrand;
+    /**
+     *维修数量
+     */
+    private String maintenanceNum;
+    /**
+     *仪器图1
+     */
+    private String instrumentImage1;
+    /**
+     *仪器图2
+     */
+    private String instrumentImage2;
+    /**
+     *仪器图3
+     */
+    private String instrumentImage3;
+    /**
+     *仪器图4
+     */
+    private String instrumentImage4;
+    /**
+     *仪器图5
+     */
+    private String instrumentImage5;
+    /**
+     * 仪器图,以,隔开
+     */
+    private String instrumentImages;
+    /**
+     * 仪器图数组
+     */
+    private String[] instrumentArr;
+    /**
+     *问题描述
+     */
+    private String problemDescription;
+    /**
+     *用户账号
+     */
+    private String userAccount;
+    /**
+     *用户名称
+     */
+    private String userName;
+    /**
+     *用户联系人
+     */
+    private String userContact;
+    /**
+     *用户手机号
+     */
+    private Long userMobile;
+    /**
+     *用户联系地址
+     */
+    private String userAddress;
+    /**
+     *维修商名称
+     */
+    private String maintainerName;
+    /**
+     * 维修商手机号
+     */
+    private Long maintainerMobile;
+    /**
+     * 维修商联系地址
+     */
+    private String maintainerAddress;
+    /**
+     * 维修状态1.已提交,2已对接(确认真实后)3已评价,4取消
+     */
+    private String status;
+    /**
+     * 真实性 1已核实,2无效
+     */
+    private Long authenticity;
+    /**
+     * 服务评分,一颗心表示1,多颗数次之
+     */
+    private Long serviceRating;
+    /**
+     * 服务评价
+     */
+    private String serviceEvaluate;
+    /**
+     * 是否解决:0未解决,1已解决
+     */
+    private String solveStatus;
+    /**
+     * 取消原因
+     */
+    private String cancelReason;
+    /**
+     * 提交时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date submitDate;
+    /**
+     * 对接时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date dockingDate;
+    /**
+     * 评价时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date evaluateDate;
+    /**
+     * 取消时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date cancelDate;
+    /**
+     * 关键词 查询条件
+     */
+    private String keyword;
+    /**
+     * 注册时间开始 查询条件
+     */
+    private String startTime;
+    /**
+     * 注册时间结束  查询条件
+     */
+    private String endTime;
+    /**
+     * 省
+     */
+    private String provinceName;
+    /**
+     * 市
+     */
+    private String cityName;
+    /**
+     * 区
+     */
+    private String townName;
+    /**
+     *能不能评价 true 就是用户可评价,  false 就是供应商不可评价仅查看
+     */
+    private boolean canEvaluation;
+    /**
+     * true 只展示基本信息,  false  展示详细信息
+     */
+    private boolean onlyBaseInfo;
+    /**
+     *信息查看者类型 1=用户查看可以评价; (供应商只能查看不能操作)2=没有对接供应商查看基本信息; 3已对接供应查看完整信息
+     */
+    private String viewerType;
+
+    private static final long serialVersionUID = 1L;
+
+}

+ 0 - 4
src/main/java/com/caimei/www/service/generate/impl/GenerateHtmlImpl.java

@@ -42,8 +42,6 @@ public class GenerateHtmlImpl implements GenerateHtml {
     private String destPath;
 	@Value("${caimei.coreServer}")
 	private String coreServer;
-	@Value("${caimei.spiServer}")
-    private String spiServer;
     /** 打包时间 */
     @Value("${caimei.siteEnv}")
     private String siteEnv;
@@ -145,7 +143,6 @@ public class GenerateHtmlImpl implements GenerateHtml {
 	    map.put("version", buildTime);
 		// spi服务器地址
 		map.put("coreServer", coreServer);
-		map.put("spiServer", spiServer);
 		// 搜索热门关键字
 		List<String> searchHotWord = baseService.getSearchHotWord();
 		map.put("searchHotWord", searchHotWord);
@@ -187,7 +184,6 @@ public class GenerateHtmlImpl implements GenerateHtml {
         map.put("version", buildTime);
         // spi服务器地址
         map.put("coreServer", coreServer);
-        map.put("spiServer", spiServer);
         // 搜索热门关键字
         List<String> searchHotWord = baseService.getSearchHotWord();
         map.put("searchHotWord", searchHotWord);

+ 41 - 0
src/main/java/com/caimei/www/service/link/RepairService.java

@@ -0,0 +1,41 @@
+package com.caimei.www.service.link;
+
+import com.caimei.www.pojo.JsonModel;
+import com.caimei.www.pojo.link.PageVo;
+import com.caimei.www.pojo.link.RepairVo;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/20
+ */
+public interface RepairService {
+    /**
+     * 维修列表
+     * @param repairVo 维修列表查询条件
+     * @param pageVo 分页对象
+     * @return
+     */
+    JsonModel findMaintenance(RepairVo repairVo, PageVo pageVo);
+
+    /**
+     * 申请维修
+     * @param repairVo 申请维修提交的数据
+     */
+    JsonModel applyMaintenance(RepairVo repairVo);
+
+    /**
+     * 维修详情
+     * @param id
+     */
+    JsonModel findMaintenanceDetail(Integer id);
+
+    /**
+     * 评价维修
+     * @param solveStatus    是否解决问题:0未解决,1已解决
+     * @param serviceRating  服务评分,一颗心表示1,多颗数次之
+     * @param serviceEvaluate  服务评价
+     */
+    JsonModel evaluationMaintenance(Integer id, String solveStatus, String serviceRating, String serviceEvaluate);
+}

+ 223 - 0
src/main/java/com/caimei/www/service/link/impl/RepairServiceImpl.java

@@ -0,0 +1,223 @@
+package com.caimei.www.service.link.impl;
+
+import com.caimei.www.mapper.RepairDao;
+import com.caimei.www.pojo.JsonModel;
+import com.caimei.www.pojo.link.PageVo;
+import com.caimei.www.pojo.link.RepairLinkVo;
+import com.caimei.www.pojo.link.RepairUserVo;
+import com.caimei.www.pojo.link.RepairVo;
+import com.caimei.www.service.link.RepairService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.util.StringUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.lang.reflect.Method;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/10/20
+ */
+@Slf4j
+@Service
+public class RepairServiceImpl implements RepairService {
+    @Resource
+    private RepairDao repairDao;
+
+    /**
+     * 维修列表
+     *
+     * @param repairVo 维修列表查询条件
+     * @param page   分页对象
+     * @return
+     */
+    @Override
+    public JsonModel findMaintenance(RepairVo repairVo, PageVo page) {
+        if (repairVo.getUserId() == null) {
+            return JsonModel.error("参数错误");
+        }
+        PageHelper.startPage(page.getPageNum(), page.getPageSize());
+        List<RepairVo> list = repairDao.findMaintenance(repairVo);
+        PageVo<RepairVo> pageVo = new PageVo<>(list);
+        return JsonModel.success(pageVo);
+    }
+
+    /**
+     * 申请维修
+     *
+     * @param repairVo 申请维修提交的数据
+     */
+    @Override
+    public JsonModel applyMaintenance(RepairVo repairVo) {
+        JsonModel JsonModel = paramsCheck(repairVo);
+        if (JsonModel.getCode() == -1) {
+            return JsonModel;
+        }
+        if (repairVo.getUserId() != null) {
+            RepairUserVo user = repairDao.getRepairUser(repairVo.getUserId());
+            repairVo.setUserId(user.getUserId());
+            repairVo.setUserName(user.getUserName());
+            if (user.getRegisterUserTypeId() == 1 || user.getRegisterUserTypeId() == 3) {
+                repairVo.setUserAccount(user.getAccount());
+            } else {
+                repairVo.setUserAccount(user.getMobile());
+            }
+        }
+        try {
+            String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
+            //维修单号orderNo的生成规则 日期加上两位数字  2019080801
+            String orderNo = repairDao.findOrderNoInToday(date);
+            String no;
+            if (StringUtil.isEmpty(orderNo)) {
+                no = "01";
+            } else {
+                String substring = orderNo.substring(8);
+                int number = Integer.parseInt(substring);
+                number += 1;
+                if (number <= 9) {
+                    no = "0" + number;
+                } else {
+                    no = String.valueOf(number);
+                }
+            }
+            repairVo.setOrderNo(date + no);
+            repairVo.setSubmitDate(new Date());
+            //维修状态1.已提交,2已对接(确认真实后)3已评价,4取消
+            repairVo.setStatus("1");
+            String instrumentImages = repairVo.getInstrumentImages();
+            if (StringUtil.isNotEmpty(instrumentImages)) {
+                String[] instrumentImageArr = instrumentImages.split(",");
+                if (instrumentImageArr.length > 5) {
+                    return JsonModel.error("图片数量不能超过5张");
+                }
+                Class clazz = repairVo.getClass();
+                for (int i = 0; i < instrumentImageArr.length; i++) {
+                    Method method =  clazz.getDeclaredMethod("setInstrumentImage" + (i + 1),String.class);
+                    method.invoke(repairVo, instrumentImageArr[i]);
+                }
+            }
+            repairDao.insertMaintenance(repairVo);
+            RepairLinkVo userLink = new RepairLinkVo();
+            userLink.setType("1");
+            userLink.setUserId(repairVo.getUserId());
+            userLink.setCmInstrumentMaintenanceId(repairVo.getId());
+            userLink.setLinkCode(UUID.randomUUID().toString().replaceAll("-", ""));
+            RepairLinkVo repairerLink = new RepairLinkVo();
+            repairerLink.setType("2");
+            repairerLink.setUserId(repairVo.getUserId());
+            repairerLink.setCmInstrumentMaintenanceId(repairVo.getId());
+            repairerLink.setLinkCode(UUID.randomUUID().toString().replaceAll("-", ""));
+            repairDao.insertMaintenanceLink(userLink);
+            repairDao.insertMaintenanceLink(repairerLink);
+        } catch (Exception e) {
+            log.error("try-catch:",e);
+            return JsonModel.error("数据异常");
+        }
+        return JsonModel;
+    }
+
+    /**
+     * 维修详情
+     *
+     * @param id
+     */
+    @Override
+    public JsonModel findMaintenanceDetail(Integer id) {
+        if (id == null) {
+            return JsonModel.error("参数异常");
+        }
+        RepairVo repairVo = repairDao.findMaintenanceDetail(id);
+        if (repairVo == null) {
+            return JsonModel.error("参数异常");
+        }
+        Class clazz = repairVo.getClass();
+        List<String> instrumentImageList = new ArrayList<>();
+        for (int i = 0; i < 5; i++) {
+            try {
+                Method getMethod = clazz.getDeclaredMethod("getInstrumentImage" + (i+1));
+                Object image = getMethod.invoke(repairVo);
+                if (image != null && StringUtil.isNotEmpty(image.toString())) {
+                    instrumentImageList.add(image.toString()) ;
+                }
+            } catch (Exception e) {
+                log.error("try-catch:",e);
+            }
+        }
+        String[] instrumentArr = instrumentImageList.toArray(new String[instrumentImageList.size()]);
+        if (instrumentArr.length == 0) {
+            repairVo.setInstrumentArr(null);
+        }else{
+            repairVo.setInstrumentArr(instrumentArr);
+        }
+        return JsonModel.success(repairVo);
+    }
+
+    /**
+     * 评价维修
+     *
+     * @param id
+     * @param solveStatus     是否解决问题:0未解决,1已解决
+     * @param serviceRating   服务评分,一颗心表示1,多颗数次之
+     * @param serviceEvaluate 服务评价
+     */
+    @Override
+    public JsonModel evaluationMaintenance(Integer id, String solveStatus, String serviceRating, String serviceEvaluate) {
+        if (id  == null || StringUtil.isEmpty(solveStatus) || StringUtil.isEmpty(serviceEvaluate) || StringUtil.isEmpty(serviceRating)) {
+            return JsonModel.error("参数不全");
+        }
+        RepairVo repairVo = repairDao.findMaintenanceDetail(id);
+        if (repairVo == null){
+            return JsonModel.error("参数异常");
+        }
+        try {
+            repairVo.setServiceEvaluate(serviceEvaluate);
+            repairVo.setServiceRating(Long.valueOf(serviceRating));
+            repairVo.setSolveStatus(solveStatus);
+            repairVo.setStatus("3");
+            repairVo.setEvaluateDate(new Date());
+            repairDao.updateMaintenace(repairVo);
+        } catch (Exception e) {
+            JsonModel.error("服务器内部异常");
+        }
+        return JsonModel.success();
+    }
+
+    /**
+     * 验证提交的维修信息
+     */
+    private JsonModel paramsCheck(RepairVo bean) {
+        if (StringUtil.isEmpty(bean.getProvinceName()) || StringUtil.isEmpty(bean.getCityName())
+                || StringUtil.isEmpty(bean.getTownName()) || StringUtil.isEmpty(bean.getUserAddress())) {
+            return JsonModel.error("地址信息不全");
+        }
+        if (StringUtil.isEmpty(bean.getUserContact())) {
+            return JsonModel.error("联系人信息不全");
+        }
+        if (bean.getUserMobile() == null) {
+            return JsonModel.error("联系电话信息不全");
+        }
+        if (StringUtil.isEmpty(bean.getInstrumentName())) {
+            return JsonModel.error("仪器名称信息不全");
+        }
+        if (StringUtil.isEmpty(bean.getProblemDescription())) {
+            return JsonModel.error("问题描述信息不全");
+        }
+        //同一手机号同一天内只能提交一次申请
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+        //CmInstrumentMaintenance 的orderNo 生成规则就是  2019080802 日期加数字的规则,通过模糊查询查询出用户今日提交次数
+        int times = repairDao.checkMobileSubmitTime(bean.getUserMobile().toString(), sdf.format(new Date()));
+        if (times != 0) {
+            return JsonModel.error("抱歉,您今天已经提交过了");
+        }
+        return JsonModel.success();
+    }
+
+}

+ 0 - 6
src/main/java/com/caimei/www/service/page/EquipmentService.java

@@ -21,10 +21,4 @@ public interface EquipmentService {
      */
     PageContent getEquipmentById(Integer equipmentId);
 
-    /**
-     * 获取项目仪器详情页中层信息(搭配推荐,相似商品)
-     * @param equipmentId
-     * @return
-     */
-    JsonModel<List<PageFloor>> getEquipmentRecommendById(Integer equipmentId);
 }

+ 0 - 42
src/main/java/com/caimei/www/service/page/impl/EquipmentServiceImpl.java

@@ -1,20 +1,13 @@
 package com.caimei.www.service.page.impl;
 
 import com.caimei.www.mapper.EquipmentDao;
-import com.caimei.www.mapper.SinglePageDao;
-import com.caimei.www.pojo.JsonModel;
-import com.caimei.www.pojo.page.ImageLink;
 import com.caimei.www.pojo.page.PageContent;
-import com.caimei.www.pojo.page.PageFloor;
 import com.caimei.www.pojo.page.Parameter;
 import com.caimei.www.service.page.EquipmentService;
-import com.caimei.www.utils.ImageUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -28,11 +21,6 @@ import java.util.List;
 public class EquipmentServiceImpl implements EquipmentService {
     @Resource
     private EquipmentDao equipmentDao;
-    @Resource
-    SinglePageDao singlePageDao;
-
-    @Value("${caimei.wwwDomain}")
-    private String domain;
 
     /**
      * 项目仪器详情
@@ -49,34 +37,4 @@ public class EquipmentServiceImpl implements EquipmentService {
         }
         return equipment;
     }
-
-    /**
-     * 获取项目仪器详情页中层信息(搭配推荐,相似商品)
-     *
-     * @param equipmentId
-     * @return
-     */
-    @Override
-    public JsonModel<List<PageFloor>> getEquipmentRecommendById(Integer equipmentId) {
-        if (equipmentId == null) { return JsonModel.error("参数异常", null);}
-        List<PageFloor> floorList = singlePageDao.getFloorByPageId(equipmentId);
-        if (floorList.size() > 0) {
-            List<PageFloor> tempList = new ArrayList<>();
-            floorList.forEach(floor -> {
-                List<ImageLink> imageLinks = singlePageDao.getDataByFloorId(floor.getId());
-                if (imageLinks.size() > 0) {
-                    imageLinks.forEach(img -> {
-                        img.setImage(ImageUtil.getImageURL("actType", img.getImage(), 0, domain));
-                    });
-                    floor.setFloorData(imageLinks);
-                } else {
-                    tempList.add(floor);
-                }
-            });
-            if(tempList.size() > 0){
-                floorList.removeAll(tempList);
-            }
-        }
-        return JsonModel.success(floorList);
-    }
 }

+ 1 - 3
src/main/java/com/caimei/www/service/page/impl/HomeServiceImpl.java

@@ -37,8 +37,6 @@ public class HomeServiceImpl implements HomeService {
     private String domain;
 	@Value("${caimei.coreServer}")
 	private String coreServer;
-	@Value("${caimei.spiServer}")
-	private String spiServer;
 
     /**
      * 首页轮播
@@ -70,7 +68,7 @@ public class HomeServiceImpl implements HomeService {
     @Override
     public Map<String, Object> getHomeSideJson() {
         try {
-            String sideResult = RequestUtil.sendGet(spiServer+"/home/top/data?source=1");
+            String sideResult = RequestUtil.sendGet(coreServer+"/commodity/home/sidebar?source=1");
             log.debug(sideResult);
             Map<String, Object> sideMap = JSONObject.parseObject(sideResult, Map.class);
             return JSONObject.parseObject(String.valueOf(sideMap.get("data")), Map.class);

+ 9 - 9
src/main/resources/config/dev/application-dev.yml

@@ -4,14 +4,14 @@ spring:
   #数据源连接--start
   datasource:
     #本地连接数据库
-    #driverClassName: com.mysql.jdbc.Driver
-    #url: jdbc:mysql://192.168.2.100:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
-    #username: developer
-    #password: 05bZ/OxTB:X+yd%1
-    #测试连接数据库
-    url: jdbc:mysql://120.79.25.27:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
+    driverClassName: com.mysql.jdbc.Driver
+    url: jdbc:mysql://192.168.2.100:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
     username: developer
-    password: J5p3tgOVazNl4ydf
+    password: 05bZ/OxTB:X+yd%1
+    #测试连接数据库
+    #url: jdbc:mysql://120.79.25.27:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
+    #username: developer
+    #password: J5p3tgOVazNl4ydf
     #type: com.zaxxer.hikari.HikariDataSource
     hikari:
       minimum-idle: 5
@@ -54,10 +54,10 @@ logging:
 # 服务域名
 caimei:
   siteEnv: 0 #网站环境,(2:正式环境,1:测试环境,0:开发环境)
-  spiServer: https://spi-b.caimei365.com
-  #spiServer: http://192.168.2.68:8008
+  spiServer: http://192.168.2.68:8008
   coreServer: https://core-b.caimei365.com
   #coreServer: http://192.168.2.68:18002
+  #coreServer: http://192.168.2.75:18002
   imageDomain: https://img-b.caimei365.com
   wwwDomain: http:localhost:8009
   destPath: D:/_PLAN_WORKSPACE/test/static

+ 184 - 0
src/main/resources/mapper/RepairMapper.xml

@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.caimei.www.mapper.RepairDao">
+    <select id="findMaintenance" resultType="com.caimei.www.pojo.link.RepairVo">
+        SELECT
+        id,
+        orderNo,
+        instrumentName,
+        manufacturer,
+        submitDate,
+        maintainerName,
+        maintainerMobile,
+        status
+        FROM cm_instrument_maintenance a
+        <where>
+            <if test="userId != null">
+                AND a.userId = #{userId}
+            </if>
+            <if test="keyword != null and keyword != ''">
+                AND (a.maintainerName LIKE concat('%',#{keyword},'%')
+                OR a.instrumentName LIKE concat('%',#{keyword},'%'))
+            </if>
+            <if test="startTime != null and startTime != ''">
+                AND a.submitDate <![CDATA[ >= ]]> #{startTime}
+            </if>
+            <if test="endTime != null and endTime != ''">
+                AND a.submitDate <![CDATA[ <= ]]>  #{endTime}
+            </if>
+            <if test="status != null and status != '' and status != 0">
+                AND a.status = ${status}
+            </if>
+        </where>
+    </select>
+    <select id="getRepairUser" resultType="com.caimei.www.pojo.link.RepairUserVo">
+        SELECT
+            userID AS userId, userName, account, mobile, registerUserTypeID AS registerUserTypeId
+        FROM user WHERE userID = #{userId}
+    </select>
+    <select id="findOrderNoInToday" resultType="java.lang.String">
+        SELECT IFNULL(orderNo,"")
+        FROM cm_instrument_maintenance
+        WHERE DATE_FORMAT(submitDate,'%Y%m%d') = #{date} AND submitDate is not null
+        ORDER BY id DESC limit 1
+    </select>
+    <select id="findMaintenanceDetail" resultType="com.caimei.www.pojo.link.RepairVo">
+        SELECT
+            id,
+            orderNo,
+            userId,
+            instrumentName,
+            manufacturer,
+            instrumentBrand,
+            maintenanceNum,
+            instrumentImage1,
+            instrumentImage2,
+            instrumentImage3,
+            instrumentImage4,
+            instrumentImage5,
+            problemDescription,
+            userAccount,
+            userName,
+            userContact,
+            userMobile,
+            userAddress,
+            maintainerName,
+            maintainerMobile,
+            maintainerAddress,
+            status,
+            authenticity,
+            serviceRating,
+            serviceEvaluate,
+            solveStatus,
+            cancelReason,
+            submitDate,
+            dockingDate,
+            evaluateDate,
+            cancelDate,
+            provinceName,
+            cityName,
+            townName
+        FROM cm_instrument_maintenance
+        WHERE id = #{id}
+    </select>
+    <select id="checkMobileSubmitTime" resultType="java.lang.Integer">
+        SELECT count(id)
+        FROM cm_instrument_maintenance
+        WHERE userMobile = #{mobile} AND orderNo LIKE concat(#{date},"%")
+    </select>
+    <insert id="insertMaintenance">
+        INSERT INTO cm_instrument_maintenance(
+            orderNo,
+            userId,
+            instrumentName,
+            manufacturer,
+            instrumentBrand,
+            maintenanceNum,
+            instrumentImage1,
+            instrumentImage2,
+            instrumentImage3,
+            instrumentImage4,
+            instrumentImage5,
+            problemDescription,
+            userAccount,
+            userName,
+            userContact,
+            userMobile,
+            userAddress,
+            maintainerName,
+            maintainerMobile,
+            maintainerAddress,
+            status,
+            authenticity,
+            serviceRating,
+            serviceEvaluate,
+            solveStatus,
+            cancelReason,
+            submitDate,
+            dockingDate,
+            evaluateDate,
+            cancelDate,
+            provinceName,
+            cityName,
+            townName
+        ) VALUES (
+             #{orderNo},
+             #{userId},
+             #{instrumentName},
+             #{manufacturer},
+             #{instrumentBrand},
+             #{maintenanceNum},
+             #{instrumentImage1},
+             #{instrumentImage2},
+             #{instrumentImage3},
+             #{instrumentImage4},
+             #{instrumentImage5},
+             #{problemDescription},
+             #{userAccount},
+             #{userName},
+             #{userContact},
+             #{userMobile},
+             #{userAddress},
+             #{maintainerName},
+             #{maintainerMobile},
+             #{maintainerAddress},
+             #{status},
+             #{authenticity},
+             #{serviceRating},
+             #{serviceEvaluate},
+             #{solveStatus},
+             #{cancelReason},
+             #{submitDate},
+             #{dockingDate},
+             #{evaluateDate},
+             #{cancelDate},
+             #{provinceName},
+             #{cityName},
+             #{townName}
+         )
+    </insert>
+    <insert id="insertMaintenanceLink">
+        INSERT INTO cm_instrument_maintenance_links(
+            id,
+            userId,
+            linkCode,
+            type,
+            cmInstrumentMaintenanceId
+        ) VALUES (
+             #{id},
+             #{userId},
+             #{linkCode},
+             #{type},
+             #{cmInstrumentMaintenanceId}
+         )
+    </insert>
+    <update id="updateMaintenace">
+        update cm_instrument_maintenance
+        SET serviceRating = #{serviceRating},
+            serviceEvaluate = #{serviceEvaluate},
+            solveStatus = #{solveStatus} ,
+            status = #{status},
+            evaluateDate = #{evaluateDate}
+        WHERE id = #{id}
+    </update>
+</mapper>

+ 0 - 26
src/main/resources/static/css/help/select.css

@@ -1,26 +0,0 @@
-#selectClass{background: #fff}
-.productlist{padding: 30px}
-.select{
-    height: 36px;
-    width: 150px;
-}
-table{
-    width: 100%;
-    margin:auto;
-}
-table tbody tr,table tbody td{
-    line-height: 36px;
-    text-align: center;
-}
-select{
-    width: 100%;
-    height: 36px;
-    border: none;
-    text-align: center;
-    text-align-last: center;
-    cursor: pointer;
-}
-option{
-    text-align:center;
-}
-

+ 9 - 1
src/main/resources/static/css/product/detail.h5.css

@@ -63,7 +63,15 @@ li{list-style:none}
 .productBox .detailBox .concatBox{height:20vw;padding-bottom:4vw}
 .productBox .detailBox .concatBox img{height:20vw;width:auto}
 .productBox .detailBox .upgrade{width:100%;background:#F94B4B;border-radius:2px;display:inline-block;text-align:center;height:11.2vw;line-height:11.2vw;font-size:3.4vw;color:#FFF;margin:1.7vw 0}
-
+/*配套商品*/
+.product-supporting{width: 100%;height: 44vw;box-sizing: border-box;padding: 3.3vw;background-color: #FFFFFF;margin: 1.3vw 0;}
+.product-supporting-title{width: 100%;height: 6.2vw;line-height: 6.2vw;font-size: 3.6vw;color: #333333;text-align: left;font-weight: bold;}
+.product-supporting-content{width: 100%;height: 24.2vw;margin-top: 3vw;position: relative;}
+.product-supporting-content .product-supporting-list{width:24.2vw;height: 24.2vw;float: left;box-sizing: border-box;border: 1px solid #E2E7EF;margin-right: 2.4vw;border-radius: 2px;}
+.product-supporting-content .product-supporting-list img{width:100%;height: 100%;display: block;border-radius: 2px;}
+.product-supporting-more{width: 14vw;height: 100%;position: absolute;right: 0;top: 0;padding-left: 7.5vw;box-sizing: border-box;display: flex;align-items: center;}
+.product-supporting-more .mIcon{width: 6.5vw;height: 6.5vw;}
+.product-supporting-more .mIcon::before{width: 6.5vw;height: 6.5vw;background: url("/img/base/icon-xiayibu@2x.png");background-size: cover;}
 .recommendBox{margin-top:2vw;width:100%;background:#FFF}
 .recommendBox .hd{font-size:3.4vw;color:#E15621;font-weight:bold;padding:2.7vw;text-align:center}
 #productRecommend{width:100%;height:50vw;overflow:hidden;position:relative;box-sizing:border-box;padding:0 2.4vw}

+ 51 - 1
src/main/resources/static/css/product/detail.pc.css

@@ -77,7 +77,57 @@ li{list-style:none;}
 .productBox .detailBox .concatBox{height:120px;padding:15px}
 .productBox .detailBox .concatBox img{height:120px;width:auto}
 .productBox .detailBox .upgrade{background:#F94B4B;border-radius:2px;display:inline-block;text-align:center;color:#FFFFFF;height:40px;line-height:40px;padding:0 30px;font-size:16px}
-
+/*配套商品*/
+.product-supporting{width: 100%;min-height: 200px;background-color: #FFFFFF;box-sizing: border-box;padding: 16px;margin-bottom: 16px;}
+.product-supporting-title{width: 100%;height: 30px;line-height: 30px;text-align: left;font-size: 16px;color: #333333;font-weight: bold;}
+.product-supporting-content{width: 100%;height: auto;}
+.product-supporting-td{width: 100%;height: 38px;line-height: 38px;}
+.product-supporting-td p{font-size: 14px;color: #627386;float: left;text-align: center;}
+.product-supporting-td p.td-1{width: 10%;text-align: left;}
+.product-supporting-td p.td-2{width: 20%;text-align: center;}
+.product-supporting-td p.td-3{width: 15%;}
+.product-supporting-td p.td-4{width: 20%;}
+.product-supporting-td p.td-5{width: 20%;}
+.product-supporting-td p.td-6{width: 15%;}
+.product-supporting-list{width: 100%;height: 102px;box-sizing: border-box;padding: 16px;}
+.product-supporting-list.active{background-color: #F3F7FE;}
+.product-supporting-list .tr{font-size: 14px;color: #627386;float: left;text-align: center;}
+.product-supporting-list .tr-1{width:10%;}
+.product-supporting-list .tr-1 img{width: 70px;height: 70px;display: block;box-sizing: border-box;border: 1px solid #E2E7EF;border-radius: 2px;}
+.product-supporting-list .tr-2{width:20%;height: 100%;box-sizing: border-box;padding: 16px 0;}
+.product-supporting-list .tr-2 p{text-align: justify;text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-line-clamp: 2;line-clamp: 2;-webkit-box-orient: vertical;word-break: break-all;}
+.product-supporting-list .tr-3{width:15%;height: 100%;box-sizing: border-box;padding: 16px;}
+.product-supporting-list .tr-4{width:20%;box-sizing: border-box;padding: 16px 0 0 44px;text-align: left;}
+.product-supporting-list .tr-4 .price .icon:before{width:63px;height: 22px;}
+.product-supporting-list .tr-4 .price .icon.i5:before{background-position:-2px -835px}
+.product-supporting-list .tr-4 .price .icon.i1:before{background-position:-2px -715px}
+.product-supporting-list .tr-4 .price .icon.i2:before{background-position:-2px -745px}
+.product-supporting-list .tr-4 .price .icon.i3:before{background-position:-2px -775px}
+.product-supporting-list .tr-4 .price .icon.i4:before{background-position:-2px -805px}
+.product-supporting-list .tr-4 .price .price_text_tag .svip-tag{-webkit-transform: translateX(4px);-ms-transform: translateX(4px);transform: translateX(4px);}
+.product-supporting-list .tr-4 .price .price_text_tag .listTag{-webkit-transform: translateX(4px);-ms-transform: translateX(4px);transform: translateX(4px);margin: 0;float: left;}
+.product-supporting-list .tr-4 .price .svip-tag{width:100%;height:22px;letter-spacing:0}
+.product-supporting-list .tr-4 .price .couponTag{margin: 0 4px 0 0;float: left;}
+.product-supporting-list .tr-4 .price .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:22px;text-align:center;line-height:22px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+.product-supporting-list .tr-4 .price .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+.product-supporting-list .tr-4 .price .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:24px;padding-right:2px;margin-left:-27px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:12px}
+.product-supporting-list .tr-4 .price .svip-tag .svip-price span{color: #333}
+.product-supporting-list .tr-5{width:20%;box-sizing: border-box;padding: 16px 0;}
+.product-supporting-list .tr-5 .number{display:inline-block;width:96px;line-height:24px;height:24px;box-sizing:border-box;border:1px solid #FFE6DC;border-radius:2px;font-size:0;white-space:nowrap;text-align:center;overflow:hidden;vertical-align:top}
+.product-supporting-list .tr-5 .number>em{display:inline-block;width:24px;height:22px;background:#FFE6DC;font-size:20px;font-style:normal;line-height:20px;vertical-align:top;cursor:pointer}
+.product-supporting-list .tr-5 .number input{width:48px;border:none;line-height:22px;font-size:14px;vertical-align:top;text-align:center;color:#E15616}
+.product-supporting-list .tr-6{width:15%;box-sizing: border-box;padding: 16px 0;padding-left: 30px;}
+.product-supporting-more{width: 100%;height: 32px;}
+.product-supporting-more .more{width: 98px;height: 32px;line-height: 32px;font-size: 14px;margin: 0 auto;border-radius: 2px;border: 1px solid #cccccc;color: #909090;text-align: left;transition: all 0.2s;cursor: pointer;padding-left: 15px;box-sizing: border-box;position: relative;}
+.product-supporting-more .more .icon:before{background-position: -93px 7px;width: 20px;height: 32px;right: 0;position: absolute;}
+.product-supporting-button{width: 100%;height: auto;}
+.product-supporting-button .product-supporting-total{width: 100%;height: 44px;text-align: right;line-height: 44px;font-size: 16px;color: #22272E;}
+.product-supporting-button .product-supporting-total .ore{color: #E15621;}
+.product-supporting-button .product-supporting-total .red{color: #F94B4B;}
+.product-supporting-button .product-supporting-btn{width: 100%;height: 36px;text-align: right;}
+.product-supporting-button .product-supporting-btn .btn{width: 128px;height: 36px;text-align: center;border: 1px solid #E15621;float: right;margin-left: 20px;line-height: 36px;font-size: 14px;cursor: pointer;}
+.product-supporting-button .product-supporting-btn .btn.add{background-color: #FFE6DC;color: #E15621;}
+.product-supporting-button .product-supporting-btn .btn.buy{background-color: #E15621;color: #FFFFFF;}
 .recommendBox{margin-bottom:16px;overflow: hidden;}
 .recommendBox .hd{font-size:16px;color:#4A4F58;font-weight:bold;padding:16px 15px}
 #productRecommend{padding:16px 5px;background: #fff}

+ 54 - 2
src/main/resources/static/css/product/instruement-list.css

@@ -1,9 +1,25 @@
 .productItem .price .price_text_tag{-webkit-transform: scale(0.8) translateX(-20px);-ms-transform: scale(0.8) translateX(-20px);transform: scale(0.8) translateX(-20px)}
 
 @media screen and (min-width:768px){
-    #productList{width: 1184px;margin:32px auto}
+    #productList{width: 1184px;margin:32px auto;position: relative;}
     .crumbs-nav{height: 40px}
     .crumbs-nav .crumbs-link{color:#4a4f58 }
+    .product-brand{width:1184px;box-sizing:border-box;min-height: 88px;padding:24px 12px 12px 12px;font-size:0;text-align:center;background:#FFF;position: relative;}
+    .product-brand .product-brand-name{width: 116px;float: left;border-right: 1px solid #F7F7F7;line-height: 44px;text-align: center;font-size: 16px;color: #4A4F58;}
+    .product-brand .product-brand-name.show{line-height: 88px;}
+    .product-brand-more{width: 50px;height: 32px;line-height: 32px;font-size: 14px;margin: 0 auto;color: #909090;text-align: left;transition: all 0.2s;cursor: pointer;box-sizing: border-box;position: absolute;right: 24px;top: 24px;}
+    .product-brand-more .icon:before{background-position: -93px 7px;width: 20px;height: 32px;right: 0;position: absolute;}
+    .product-brand-more.show .icon:before{background-position: -123px 7px;width: 20px;height: 32px;right: 0;position: absolute;}
+    .product-brand-list{width: 970px;float: left;box-sizing: border-box;padding:0 24px;height: 44px;overflow: scroll;overflow-x: hidden;overflow-y:auto;}
+    .product-brand-list.show{height: 88px;}
+    .product-brand-list .brand-list{width: 90px;height: 32px;padding: 0 12px;border: 1px solid #E2E7EF;float: left;box-sizing: border-box;line-height: 32px;font-size: 16px;color: #4A4F58;border-radius: 2px;margin-right: 24px;margin-bottom: 12px;}
+    .product-brand-list .brand-list.checked{border-color: #E15621;}
+    .product-brand-list .brand-list.checked a{color: #E15621;}
+    .product-brand-list .brand-list a{width: 100%;height: 100%;display: block;text-align: center;text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-line-clamp: 1;line-clamp: 1;-webkit-box-orient: vertical;word-break: break-all;}
+    .product-brand-list .brand-list a:hover{color: #4A4F58;}
+    .product-brand-list .brand-list.checked a:hover{color: #E15621;}
+    .sortBox{width:1184px;margin:16px auto;box-sizing:border-box;text-align:center;background:#FFFFFF;position: relative;}
+    .sortBox li{float: left;}
     .sortBox li:before,.sortBox li:after{position:absolute;right:35px;content:'';width:0;height:0;border-style:solid}
     .sortBox li:before{border-width:0 5px 5px 5px;border-color:transparent transparent #BEC2C9 transparent;top:27px}
     .sortBox li:after{border-width:5px 5px 0 5px;border-color:#BEC2C9 transparent transparent transparent;top:34px}
@@ -12,6 +28,11 @@
     .sortBox li.up:after{border-top-color:#E15616;opacity:.3}
     .sortBox li.down:after{border-top-color:#E15616}
     .sortBox li.down:before{border-bottom-color:#E15616;opacity:.3}
+    .sortBox .sortBox-checked{width: 200px;height: 64px;position: absolute;top: 0;right: 0;box-sizing: border-box;padding: 18px;}
+    .sortBox-checked .sortBox-new{float: right;height: 28px;line-height: 16px;box-sizing: border-box;padding: 6px 0;display: flex;cursor: pointer;margin-right: 10px;}
+    .sortBox-checked .coll-checked{width: 16px;height: 16px;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;}
+    .sortBox-checked .coll-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
+
     .classification .class-nav-main div,.classification .class-nav-main li{text-align:center;display:inline-block;line-height:64px;color:#4a4f58;font-size:16px;cursor:pointer;padding:0 16px}
     #listClassify{margin:0 auto;-webkit-box-sizing:border-box;box-sizing:border-box;background:rgba(255,255,255,1);border-radius:0 0 2px 2px}
     .classification{border-bottom:1px solid #f7f7f7;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-flex}
@@ -63,10 +84,11 @@
 
 
 @media screen and (max-width:768px){
+    #productList{position: relative;}
     .sortBox{width:100%;margin:1px auto;box-sizing:border-box;background:#FFF;}
     .sortBox li{width:15vw;height:11.6vw;line-height:11.6vw;text-align:center;font-size:3.4vw;color:#93979F;position:relative;margin:0 5vw}
     .sortBox li.on,.sortBox li.up,.sortBox li.down{color:#E15616}
-    .sortBox li:before,.sortBox li:after{position:absolute;right:1vw;content:'';width:0;height:0;border-style:solid}
+    .sortBox li:before,.sortBox li:after{position:absolute;right:0;content:'';width:0;height:0;border-style:solid}
     .sortBox li:before{border-width:0 .8vw .8vw .8vw;border-color:transparent transparent #BEC2C9 transparent;top:5vw}
     .sortBox li:after{border-width:.8vw .8vw 0 .8vw;border-color:#BEC2C9 transparent transparent transparent;top:6.5vw}
     .sortBox li:first-child:before,.sortBox li:first-child:after{display:none}
@@ -74,6 +96,10 @@
     .sortBox li.up:after{border-top-color:#E15616;opacity:.3}
     .sortBox li.down:after{border-top-color:#E15616}
     .sortBox li.down:before{border-bottom-color:#E15616;opacity:.3}
+    .sortBox li.screen:before{border-width:0 0 0 0;border-color:transparent transparent transparent transparent;top:5vw;}
+    .sortBox li.screen:after{border-width:0 0 0 0;border-color:transparent transparent transparent transparent;top:5vw}
+    .sortBox li.screen .mIcon{width: 4vw;height: 4vw;display: block;position: absolute;top: 0.8vw;right: -2vw;}
+    .sortBox li.screen .mIcon:before{width: 4vw;height: 4vw;background-position: -70vw -78vw;}
     .list-container ul{margin: 3.2vw auto;width: 97vw;}
     .list-container ul li{width: 45.6vw;height: 70vw;overflow: hidden;margin: 0 1.3vw 2.6vw 1.3vw;background: #fff;text-align: left;}
     .productItem .price em {display: block;height: 7vw;line-height: 7vw;color: #4A4F58;font-style: normal;float: left;}
@@ -104,5 +130,31 @@
     .productItem .price .price_text_tag .svip-tag .svip-price{z-index:1;position:relative;float: left;padding-left:5.4vw;padding-right:0.6vw;margin-left:-6vw;line-height:4.74vw;height: 4.74vw; background:#F0CB72;opacity:1;border-radius:2px;font-size:2.8vw}
     .productItem .price .price_text_tag .svip-tag .svip-price span{color: #333}
     .productItem .price .price_text_tag .svip-tag .svip-price span:nth-child(2){margin-left: -0.4vw}
+    /*筛选项*/
+    .product-brand-fiexd{width: 100%;height: 100%;position: fixed;top: 15vw;left: 0;background: rgba(0,0,0,0.6);z-index: 9999;}
+    .product-brand{width: 100%;position: relative;top: 0;left: 0;background: #FFFFFF;z-index: 9999;padding: 3vw 0;border-radius: 0 0 1.6vw 1.6vw;box-sizing: border-box;}
+    .product-brand .product-brand-name{width: 100%;float: left;line-height: 10.4vw;background: #F7F7F7;height: 10.4vw;padding:0 3vw;box-sizing: border-box;}
+    .product-brand .product-brand-name .title{float: left;}
+    .product-brand .product-brand-name .num{float: right;font-size: 3vw;}
+    .product-brand .product-brand-name .num span{color: #E15621;}
+    .product-brand-more{width: 100%;height: 32px;line-height: 32px;font-size: 3.4vw;float: left;color: #909090;text-align: center;box-sizing: border-box;}
+    .product-brand-more .icon:before{background-position: -51.5vw 0px;width: 5.4vw;height: 6.7vw;right: 37vw;position: absolute;}
+    .product-brand-more.show .icon:before{background-position: -43.5vw 0px;width: 5.4vw;height: 6.7vw;right: 37vw;position: absolute;}
+    .product-brand-list{width: 100%;float: left;box-sizing: border-box;padding:3vw;height:22vw;overflow: scroll;overflow-x: hidden;overflow-y:auto;}
+    .product-brand-list.show{height: 44vw;}
+    .product-brand-list .brand-list{width: 20.5vw;height: 7.2vw;padding: 0 2.4vw;border: 1px solid #E2E7EF;float: left;box-sizing: border-box;line-height: 7.2vw;;font-size: 3vw;color: #4A4F58;border-radius: 1vw;margin-right: 3.2vw;margin-bottom: 2.4vw;}
+    .product-brand-list .brand-list:nth-child(4n){margin-right: 0;}
+    .product-brand-list .brand-list.checked{border-color: #E15621;}
+    .product-brand-list .brand-list.checked a{color: #E15621;}
+    .product-brand-list .brand-list a{width: 100%;height: 100%;display: block;text-align: center;text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-line-clamp: 1;line-clamp: 1;-webkit-box-orient: vertical;word-break: break-all;}
+    .product-brand-list .brand-list a:hover{color: #4A4F58;}
+    .product-brand-list .brand-list.checked a:hover{color: #E15621;}
+    .product-screen{width: 100%;height: auto;padding:0 3vw;box-sizing: border-box;}
+    .product-screen .sortBox-new{width: 100%;height: 9vw;line-height: 16px;box-sizing: border-box;padding: 2.5vw 0;cursor: pointer;margin-right: 10px;}
+    .product-screen .coll-checked{width: 16px;height: 16px;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;display: block;float: right;}
+    .product-screen .coll-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
+    .product-screen-btn{width: 100%;height: 11.2vw;float: left;margin-top: 4vw;}
+    .product-screen-btn .sub-button{width: 64vw;height: 11.2vw;margin: 0 auto;line-height: 11.2vw;background-color: #E15621;text-align: center;font-size: 3.4ve;color: #FFFFFF;}
+
 }
 

+ 54 - 5
src/main/resources/static/css/product/list.css

@@ -4,17 +4,36 @@ li{list-style:none}
  * PC端
  */
 @media screen and (min-width:768px){
-    .sortBox{width:1184px;margin:16px auto;box-sizing:border-box;padding:12px;font-size:0;text-align:center;background:#FFF}
-    .sortBox li{display:inline-block;cursor:pointer;width:128px;height:40px;line-height:40px;font-size:16px;background:#F5F5F5;color:#93979F;position:relative;margin:0 8px}
+    .product-brand{width:1184px;margin:16px auto;box-sizing:border-box;min-height: 88px;padding:24px 12px 12px 12px;font-size:0;text-align:center;background:#FFF;position: relative;}
+    .product-brand .product-brand-name{width: 116px;float: left;border-right: 1px solid #F7F7F7;line-height: 44px;text-align: center;font-size: 16px;color: #4A4F58;}
+    .product-brand .product-brand-name.show{line-height: 88px;}
+    .product-brand-more{width: 50px;height: 32px;line-height: 32px;font-size: 14px;margin: 0 auto;color: #909090;text-align: left;transition: all 0.2s;cursor: pointer;box-sizing: border-box;position: absolute;right: 24px;top: 24px;}
+    .product-brand-more .icon:before{background-position: -93px 7px;width: 20px;height: 32px;right: 0;position: absolute;}
+    .product-brand-more.show .icon:before{background-position: -123px 7px;width: 20px;height: 32px;right: 0;position: absolute;}
+    .product-brand-list{width: 970px;float: left;box-sizing: border-box;padding:0 24px;height: 44px;overflow: scroll;overflow-x: hidden;overflow-y:auto;}
+    .product-brand-list.show{height: 88px;}
+    .product-brand-list .brand-list{width: 90px;height: 32px;padding: 0 12px;border: 1px solid #E2E7EF;float: left;box-sizing: border-box;line-height: 32px;font-size: 16px;color: #4A4F58;border-radius: 2px;margin-right: 24px;margin-bottom: 12px;}
+    .product-brand-list .brand-list.checked{border-color: #E15621;}
+    .product-brand-list .brand-list.checked a{color: #E15621;}
+    .product-brand-list .brand-list a{width: 100%;height: 100%;display: block;text-align: center;text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-line-clamp: 1;line-clamp: 1;-webkit-box-orient: vertical;word-break: break-all;}
+    .product-brand-list .brand-list a:hover{color: #4A4F58;}
+    .product-brand-list .brand-list.checked a:hover{color: #E15621;}
+    .sortBox{width:1184px;margin:16px auto;box-sizing:border-box;text-align:center;background:#FFFFFF;position: relative;}
+    .sortBox li{display:inline-block;cursor:pointer;width:128px;height:64px;line-height:64px;font-size:16px;background:#FFFFFF;color:#93979F;position:relative;float: left;border-right: 1px solid #F7F7F7;}
     .sortBox li.on,.sortBox li.up,.sortBox li.down{background:#FFE6DC;color:#E15616}
     .sortBox li:before,.sortBox li:after{position:absolute;right:35px;content:'';width:0;height:0;border-style:solid}
-    .sortBox li:before{border-width:0 5px 5px 5px;border-color:transparent transparent #BEC2C9 transparent;top:14px}
-    .sortBox li:after{border-width:5px 5px 0 5px;border-color:#BEC2C9 transparent transparent transparent;top:22px}
+    .sortBox li:before{border-width:0 5px 5px 5px;border-color:transparent transparent #BEC2C9 transparent;top:26px}
+    .sortBox li:after{border-width:5px 5px 0 5px;border-color:#BEC2C9 transparent transparent transparent;top:34px}
     .sortBox li:first-child:before,.sortBox li:first-child:after{display:none}
     .sortBox li.up:before{border-bottom-color:#E15616}
     .sortBox li.up:after{border-top-color:#E15616;opacity:.3}
     .sortBox li.down:after{border-top-color:#E15616}
     .sortBox li.down:before{border-bottom-color:#E15616;opacity:.3}
+    .sortBox .sortBox-checked{width: 200px;height: 64px;position: absolute;top: 0;right: 0;box-sizing: border-box;padding: 18px;}
+    .sortBox-checked .sortBox-new{float: right;height: 28px;line-height: 16px;box-sizing: border-box;padding: 6px 0;display: flex;cursor: pointer;margin-right: 10px;}
+    .sortBox-checked .coll-checked{width: 16px;height: 16px;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;}
+    .sortBox-checked .coll-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
+
     .productList{width:1184px;margin:0 auto;box-sizing:border-box}
     .productList .productItem{width:184px;height:268px;float:left;background:#fff;position:relative;margin:0 16px 16px 0;overflow:hidden;float:left}
     .productList .productItem:nth-child(6n){margin-right:0}
@@ -63,11 +82,12 @@ li{list-style:none}
 * 移动端
 */
 @media screen and (max-width:768px){
+    #productList{position: relative;}
     /*footer{display:none!important;}*/
     .sortBox{width:100%;margin:1px auto;box-sizing:border-box;background:#FFF;}
     .sortBox li{width:15vw;height:11.6vw;line-height:11.6vw;text-align:center;font-size:3.4vw;color:#93979F;position:relative;margin:0 5vw}
     .sortBox li.on,.sortBox li.up,.sortBox li.down{color:#E15616}
-    .sortBox li:before,.sortBox li:after{position:absolute;right:1vw;content:'';width:0;height:0;border-style:solid}
+    .sortBox li:before,.sortBox li:after{position:absolute;right:0vw;content:'';width:0;height:0;border-style:solid}
     .sortBox li:before{border-width:0 .8vw .8vw .8vw;border-color:transparent transparent #BEC2C9 transparent;top:5vw}
     .sortBox li:after{border-width:.8vw .8vw 0 .8vw;border-color:#BEC2C9 transparent transparent transparent;top:6.5vw}
     .sortBox li:first-child:before,.sortBox li:first-child:after{display:none}
@@ -75,6 +95,10 @@ li{list-style:none}
     .sortBox li.up:after{border-top-color:#E15616;opacity:.3}
     .sortBox li.down:after{border-top-color:#E15616}
     .sortBox li.down:before{border-bottom-color:#E15616;opacity:.3}
+    .sortBox li.screen:before{border-width:0 0 0 0;border-color:transparent transparent transparent transparent;top:5vw;}
+    .sortBox li.screen:after{border-width:0 0 0 0;border-color:transparent transparent transparent transparent;top:5vw}
+    .sortBox li.screen .mIcon{width: 4vw;height: 4vw;display: block;position: absolute;top: 0.8vw;right: -2vw;}
+    .sortBox li.screen .mIcon:before{width: 4vw;height: 4vw;background-position: -70vw -78vw;}
     .productList{margin: 3.2vw auto;width: 97vw;}
     .productList .productItem{width: 45.6vw;height: 70vw;overflow: hidden;margin: 0 1.3vw 2.6vw 1.3vw;background: #fff;text-align: left;}
     .productItem .price em {display: block;height: 7vw;line-height: 7vw;color: #4A4F58;font-style: normal;float: left;}
@@ -112,6 +136,31 @@ li{list-style:none}
     .productItem .price .svip-tag .svip-price{z-index:1;position:relative;float: left;padding-left:5.4vw;padding-right:0.6vw;margin-left:-6vw;line-height:4.74vw;height: 4.74vw; background:#F0CB72;opacity:1;border-radius:2px;font-size:2.8vw}
     .productItem .price .svip-tag .svip-price span{color: #333}
     .productItem .price .svip-tag .svip-price span:nth-child(2){margin-left: -0.4vw}
+    /*筛选项*/
+    .product-brand-fiexd{width: 100%;height: 100%;position: fixed;top: 15vw;left: 0;background: rgba(0,0,0,0.6);z-index: 9999;}
+    .product-brand{width: 100%;position: relative;top: 0;left: 0;background: #FFFFFF;z-index: 9999;padding: 3vw 0;border-radius: 0 0 1.6vw 1.6vw;box-sizing: border-box;}
+    .product-brand .product-brand-name{width: 100%;float: left;line-height: 10.4vw;background: #F7F7F7;height: 10.4vw;padding:0 3vw;box-sizing: border-box;}
+    .product-brand .product-brand-name .title{float: left;}
+    .product-brand .product-brand-name .num{float: right;font-size: 3vw;}
+    .product-brand .product-brand-name .num span{color: #E15621;}
+    .product-brand-more{width: 100%;height: 32px;line-height: 32px;font-size: 3.4vw;float: left;color: #909090;text-align: center;box-sizing: border-box;}
+    .product-brand-more .icon:before{background-position: -51.5vw 0px;width: 5.4vw;height: 6.7vw;right: 37vw;position: absolute;}
+    .product-brand-more.show .icon:before{background-position: -43.5vw 0px;width: 5.4vw;height: 6.7vw;right: 37vw;position: absolute;}
+    .product-brand-list{width: 100%;float: left;box-sizing: border-box;padding:3vw;height:22vw;overflow: scroll;overflow-x: hidden;overflow-y:auto;}
+    .product-brand-list.show{height: 44vw;}
+    .product-brand-list .brand-list{width: 20.5vw;height: 7.2vw;padding: 0 2.4vw;border: 1px solid #E2E7EF;float: left;box-sizing: border-box;line-height: 7.2vw;;font-size: 3vw;color: #4A4F58;border-radius: 1vw;margin-right: 3.2vw;margin-bottom: 2.4vw;}
+    .product-brand-list .brand-list:nth-child(4n){margin-right: 0;}
+    .product-brand-list .brand-list.checked{border-color: #E15621;}
+    .product-brand-list .brand-list.checked a{color: #E15621;}
+    .product-brand-list .brand-list a{width: 100%;height: 100%;display: block;text-align: center;text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-line-clamp: 1;line-clamp: 1;-webkit-box-orient: vertical;word-break: break-all;}
+    .product-brand-list .brand-list a:hover{color: #4A4F58;}
+    .product-brand-list .brand-list.checked a:hover{color: #E15621;}
+    .product-screen{width: 100%;height: auto;padding:0 3vw;box-sizing: border-box;}
+    .product-screen .sortBox-new{width: 100%;height: 9vw;line-height: 16px;box-sizing: border-box;padding: 2.5vw 0;cursor: pointer;margin-right: 10px;}
+    .product-screen .coll-checked{width: 16px;height: 16px;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;display: block;float: right;}
+    .product-screen .coll-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
+    .product-screen-btn{width: 100%;height: 11.2vw;float: left;margin-top: 4vw;}
+    .product-screen-btn .sub-button{width: 64vw;height: 11.2vw;margin: 0 auto;line-height: 11.2vw;background-color: #E15621;text-align: center;font-size: 3.4ve;color: #FFFFFF;}
 
 }
 

+ 55 - 0
src/main/resources/static/css/product/product-supporting.h5.css

@@ -0,0 +1,55 @@
+@media screen and (max-width:768px) {
+    #supporting{width: 100%;}
+    .supporting-title{width:100%;height: 11.4vw;box-sizing: border-box;padding:3vw;background-color: #F7F7F7;box-sizing: border-box;}
+    .supporting-title .title{float: left;line-height: 5.4vw;font-size: 3.6vw;color: #2D3036;text-align: left;}
+    .supporting-title .coll-span{display: block;float: right;margin-left: 20px;height: 28px;line-height: 16px;box-sizing: border-box;padding: 6px 0;display: flex;cursor: pointer;}
+    .supporting-title .coll-checked{width: 16px;height: 16px;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;}
+    .supporting-title .coll-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
+    .supporting-content{width: 100%;min-height:50vw;background-color: #FFFFFF;padding-bottom: 27.7vw;}
+    .supporting-list{width: 100%;height: 38vw;box-sizing: border-box;border-bottom: 1px solid #E1E1E1;padding:3.2vw 4vw;}
+    .supporting-list .list-checked{width: 6.5vw;height: 100%;display: flex;align-items: center;float: left;}
+    .supporting-list .list-checked .coll-checked{width: 16px;height: 16px;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;}
+    .supporting-list .list-checked .coll-checked.none{width: 16px;height: 16px;background: url("/img/cart/icon_weigouxuan_desied@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;}
+    .supporting-list .list-checked .coll-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
+    .supporting-list .list-image{width: 24vw;height: 100%;float: left;margin-right: 2vw;}
+    .supporting-list .list-image img{width: 24vw;height: 24vw;box-sizing: border-box;display: block;border: 1px solid #E1E1E1;border-radius: 2px;}
+    .supporting-list .list-info{width: 59vw;float: left;height: 100%;}
+    .supporting-list .list-info .list-name{width:100%;height: 10.5vw;text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-line-clamp: 2;line-clamp: 2;-webkit-box-orient: vertical;word-break: break-all;line-height: 5.2vw;text-align: justify;font-size: 3.6vw;color: #22272E;}
+    .supporting-list .list-info .list-unit{width: 100%;line-height: 5vw;height: 5vw;font-size: 2.8vw;color: #627386;}
+    .supporting-list .list-info .list-price{width: 100%;line-height: 5vw;height: 5vw;font-size: 2.8vw;margin-bottom: 1.5vw;}
+    .supporting-list .list-info .list-price .price-box{float: left;line-height: 5vw;}
+
+    .supporting-list .list-info .list-price .price-box .main_price_show{color: #F94B4B;font-size: 3.6vw;line-height: 5vw;}
+    .supporting-list .list-info .list-price .price-box .main_price_show.none{text-decoration: line-through;color: #999999;}
+    .supporting-list .list-info .list-price .price-number{float: right;width: 20.8vw;height: 5vw;box-sizing: border-box;}
+    .supporting-list .list-info .list-price .price-number .number{display: inline-block;width: 100%;line-height: 5.5vw;height: 5.5vw;box-sizing: border-box;border: 1px solid #FFE6DC;border-radius: 2px;font-size: 0;white-space: nowrap;text-align: center;overflow: hidden;vertical-align: top;}
+    .supporting-list .list-info .list-price .price-number .number>em{display: inline-block;width: 5vw;height: 5vw;background: #FFE6DC;font-size: 3.8vw;line-height: 5vw;vertical-align: top;font-style: normal;text-align: center;}
+    .supporting-list .list-info .list-price .price-number .number input{width: 10.2vw;border: none;line-height: 5vw;vertical-align: top;text-align: center;color: #E15616;font-size: 3.4vw;}
+
+    .supporting-list .list-info .list-price .price_grade{width: 100%;float: left;}
+    .supporting-list .list-info .list-price .price_grade .bold{font-size: 3.4vw;}
+    .supporting-list .list-info .list-price .mIcon:before{width:15.8vw;height: 5vw}
+    .supporting-list .list-info .list-price .mIcon.i5:before {background-position: -84vw -97.5vw;}
+    .supporting-list .list-info .list-price .mIcon.i1:before {background-position: -84vw -69.5vw;}
+    .supporting-list .list-info .list-price .mIcon.i2:before {background-position: -84vw -76.5vw;}
+    .supporting-list .list-info .list-price .mIcon.i3:before {background-position: -84vw -83.7vw;}
+    .supporting-list .list-info .list-price .mIcon.i4:before {background-position: -84vw -90.7vw;}
+    .supporting-list .list-info .list-price .mIcon {display: inline-block;font-size: 0;height: 5vw;line-height: 5vw;vertical-align: text-bottom;}
+
+    .supporting-list .list-info .svip-tag{float: left; height:4.74vw;letter-spacing:0;overflow: hidden}
+    .supporting-list .list-info .svip-tag .svip-icon{position:relative;z-index:9;float: left; width:7.8vw;height:4.74vw;text-align:center;line-height:4.74vw;font-size:2.6vw;font-weight:400;color:#F0CB72;opacity:1;background:#333333}
+    .supporting-list .list-info .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
+    .supporting-list .list-info .svip-tag .svip-price{z-index:1;position:relative;float: left;padding-left:5.4vw;padding-right:0.6vw;margin-left:-5vw;line-height:4.74vw;height: 4.74vw; background:#F0CB72;opacity:1;border-radius:2px;font-size:2.8vw}
+    .supporting-list .list-info .svip-tag .svip-price span{color: #333}
+    .supporting-list .list-info .svip-tag .svip-price span:nth-child(2){margin-left: -0.4vw}
+
+    .supporting-submit{width: 100%;height: 26.7vw;box-sizing: border-box;padding:7.2vw 3.3vw;position:fixed;bottom: 0;left: 0;z-index: 999;background-color: #FFFFFF;display: flex;box-shadow: 8px 8px 8px 8px rgb(0 0 0 / 7%);}
+    .supporting-submit .supporting-submit-total{flex: 4;}
+    .supporting-submit .supporting-submit-total p{line-height:5.6vw;font-size: 3.4vw;color: #4A4F58; }
+    .supporting-submit .supporting-submit-total p .ore{color: #E15621;}
+    .supporting-submit .supporting-submit-total p .red{color: #F94B4B;}
+    .supporting-submit .supporting-submit-button{flex: 6;display: flex;}
+    .supporting-submit .btn{width: 22.4vw;height: 11.2vw;flex: 1;line-height: 11.2vw;border: 1px solid #E15621;text-align: center;color: #FFFFFF;font-size: 3.4vw;margin: 0 2vw;border-radius: 2px;}
+    .supporting-submit .btn.buy{background-color: #E15621;}
+    .supporting-submit .btn.add{background-color: #FFE6DC;color: #E15621;}
+}

+ 40 - 7
src/main/resources/static/css/shopping/shopping.css

@@ -47,7 +47,7 @@ li{list-style:none}
     .listWrap .cartItem:first-child{margin-top:0}
     .listWrap .cartItem .c2{text-align:left}
     .listWrap .cartItem>div>*{vertical-align:middle}
-    .listWrap .c0{float:left;width:34px;text-align:left}
+    .listWrap .c0{float:left;width:34px;text-align:left;height: 100%;display: flex;align-items: center;}
     .listWrap .c1{float:left;width:102px;height:100%;position:relative;}
     .listWrap .c2{float:left;width:400px}
     .listWrap .c3{float:left;width:200px}
@@ -58,7 +58,8 @@ li{list-style:none}
     .listWrap .c10{float:left;width:495px}
     .listWrap .c11{float:left;width:480px;text-align:left}
     .listWrap .c1 span.tip{position:absolute;background:#ff4500;line-height:20px;height:20px;padding:0 10px;white-space:nowrap;font-size:12px;color:#FFF;top:0;left:0}
-    .listWrap .check{width:16px;height:16px;line-height:14px;vertical-align:middle}
+    .listWrap .coll-checked{width: 16px;height: 16px;cursor: pointer;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;}
+    .listWrap .coll-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
     .listWrap .image{display:block;width:100px;height:100px;border:1px solid #F7F7F7}
     .listWrap .name,.listWrap .unit{line-height:20px;display:inline-block;max-height:100px;overflow:hidden;vertical-align:middle}
     .listWrap .cartItem .name{padding-left:14px}
@@ -103,7 +104,8 @@ li{list-style:none}
     .summaryWrap .summary .item.priceTotal{float: right;margin-right: 0;}
     .summaryWrap .summary .item p.priceTotal-t{height: 32px;font-size: 16px;display: inline-block;width: 100%;float: left;text-align: left;line-height: 30px;}
     .summaryWrap .summary .item p.priceTotal-b{height: 18px;font-size: 14px;display: inline-block;width: 100%;float: left;text-align: left;line-height: 18px;}
-    .summaryWrap .summary .check{width:14px;height:14px;line-height:14px;vertical-align:top;margin:18px 16px 0 16px}
+    .summaryWrap .summary .coll-checked{width: 16px;height: 16px;float: left;cursor: pointer;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;vertical-align:top;margin:18px 16px 0 16px;}
+    .summaryWrap .summary .coll-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
     .summaryWrap .summary .delete{margin-left:16px;color:#f55c5c}
     .summaryWrap .summary .totalMoney{display:inline-block;margin-right:32px;position:relative;}
     .summaryWrap .summary .totalPrice{line-height: 24px;font-size: 18px;}
@@ -237,6 +239,20 @@ li{list-style:none}
     .listWrap .cartItem .priceTag .svip-tag .svip-icon.btr{border-radius:2px 8px 0px 2px}
     .listWrap .cartItem .priceTag .svip-tag .svip-price{z-index:1;position:relative;display:inline-block;padding-left:24px;padding-right:2px;margin-left:-27px;line-height:22px;background:#F0CB72;opacity:1;border-radius:2px;font-size:14px}
     .listWrap .cartItem .priceTag .svip-tag .svip-price span{color: #333}
+    /*订单金额偏小弹窗提示*/
+    .confirm-Model{width: 100%;height: 100%;position: fixed;top: 0;left: 0;background: rgba(0,0,0,0.3);z-index: 9999;}
+    .confirm-Model .model-content{width: 389px;height: 342px;background: #FFFFFF;border-radius: 2px;position: absolute;top: 0;right: 0;left: 0;bottom: 0;margin: auto;z-index: 9998;}
+    .confirm-Model .model-content .title{width: 100%;height: 48px;box-sizing: border-box;font-size: 14px;line-height: 48px;text-align: left;color: #333333;float: left;position: relative;border-bottom: 1px solid #EFEFEF;background-color: #F8F8F8;padding: 0 14px;}
+    .confirm-Model .model-content .title .icon-close{width: 16px;height: 16px;display: block;position: absolute;right:12px;top: 12px;background: url("/img/base/icon.png")-319px 0 no-repeat;cursor: pointer;}
+    .confirm-Model .model-content .content{margin: 10px 0 0 0;width: 100%;height: auto;line-height: 24px;float: left;padding: 0 14px;box-sizing: border-box;}
+    .confirm-Model .model-content .content p{text-align: left;font-size: 14px;color: #666666;font-weight: normal;}
+    .confirm-Model .model-content .content p.small{font-size:12px;color: #E15621;}
+    .confirm-Model .model-content .content-image {width: 100%;height: 120px;float: left;margin: 12px 0;}
+    .confirm-Model .model-content .content-image img{width: 120px;height: 120px;display: block;margin: 0 auto;}
+    .confirm-Model .model-content .button{width: 100%;height: 32px;float: left;padding: 0 14px;box-sizing: border-box;}
+    .confirm-Model .model-content .button a{height: 32px;padding: 0 15px;display: block;margin-left: 10px;border-radius: 2px;font-size: 14px;text-align: center;line-height: 32px;color: #FFFFFF;float: right;box-sizing: border-box;border: 1px solid #FFFFFF;}
+    .confirm-Model .model-content .button a.cancel{background: #FFFFFF;border-color: #B8BFCA;color: #333333;}
+    .confirm-Model .model-content .button a.confirm{background: #E15616;}
 
 }
 
@@ -265,6 +281,7 @@ li{list-style:none}
     .listWrap .supplierItem.disable{background:#f1f0f5}
     .listWrap .supplierItem em{font-style:normal}
     .listWrap .supplierTit{border-bottom:1px solid #F7F7F7;height:7.4vw;line-height:7.4vw;padding:1.3vw 3.3vw;position:relative;}
+    .listWrap .supplierTit .coll-checked{margin-top: 2vw;}
     .listWrap .supplierTit .price{height:6.4vw;float: left;}
     .listWrap .supplierTit .shop{display: block;float: left;}
     .listWrap .supplierTit .couponTag{float:left;margin-left: 10px;height: 6.4vw;line-height: 6.4vw;box-sizing: border-box;border-radius: 0.2vw;}
@@ -285,8 +302,9 @@ li{list-style:none}
     .listWrap .supplierBtn .note{text-align:left;white-space:nowrap;overflow:hidden}
     .listWrap .supplierBtn .note input{width:79vw;height:8vw;line-height:8vw;background:#F7F7F7;border-radius:1vw;border:none;padding:0 2vw;font-size:3.1vw}
     .listWrap .supplierBtn .item{display:inline-block;padding-top:2vw;line-height:7vw;}
-    .listWrap .supplierItem .c0{float:left;width:9.6vw;text-align:center}
-    .listWrap .check{width:3.5vw;height:3.5vw;line-height:3.5vw;vertical-align:middle}
+    .listWrap .supplierItem .c0{float:left;width:9.6vw;text-align:center;    height: 100%;display: flex;align-items: center;}
+    .listWrap .coll-checked{width: 16px;height: 16px;cursor: pointer;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;margin-top: 0;}
+    .listWrap .coll-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
     .listWrap .supplierItem .c1{float:left;width:24vw;position:relative;}
     .listWrap .c1 span.tip{position:absolute;background:#ff4500;line-height:5vw;height:5vw;padding:0 2vw;white-space:nowrap;font-size:3.1vw;color:#FFF;top:0;left:0}
     .listWrap .supplierItem .image{display:block;box-sizing:border-box;width:24vw;height:24vw;border:1px solid #F7F7F7}
@@ -332,11 +350,12 @@ li{list-style:none}
     .summaryWrap .summary .left{height:9.4vw;line-height:9.4vw}
     .summaryWrap .summary .right{height:11.2vw;line-height:11.2vw}
     .summaryWrap .summary .right .item{float: left;}
-    .summaryWrap .summary .item.priceTotal{float: left;margin-left: 11vw;}
+    .summaryWrap .summary .item.priceTotal{float: left;margin-left:0;}
     .summaryWrap .summary .item p.priceTotal-t{height:11.2vw;line-height:11.2vw;font-size: 3.4vw;display: inline-block;width: 100%;float: left;text-align: left;}
     .summaryWrap .summary .item.priceTotal p.priceTotal-t{height: 6.6vw;line-height: 6.6vw;}
     .summaryWrap .summary .item p.priceTotal-b{height: 4.6vw;font-size: 3vw;display: inline-block;width: 100%;float: left;text-align: left;line-height: 4.6vw;}
-    .summaryWrap .summary .check{width:3.5vw;height:3.5vw;line-height:3.5vw;vertical-align:top;margin:3vw 3vw 0 3.3vw}
+    .summaryWrap .summary .coll-checked{width: 16px;height: 16px;float: left;cursor: pointer;background: url("/img/cart/icon_weigouxuan@2x.png") no-repeat;background-size: cover;display: block;margin-right: 6px;vertical-align:top;margin:11px 16px 0 0;}
+    .summaryWrap .summary .coll-checked.checked{background: url("/img/cart/icon_yixuanze@2x.png") no-repeat;background-size: cover;}
     .summaryWrap .summary .delete{width:12vw;height:6vw;line-height:6vw;display:inline-block;text-align:center;color:#f55c5c}
     .summaryWrap .summary .totalPrice{line-height: 5.1vw;font-size: 3.4vw;}
     .summaryWrap .summary .totalPrice.none{line-height: 11.2vw;}
@@ -428,6 +447,20 @@ li{list-style:none}
     .coupon-popup .coupon-list-cell .coupon-tags{height: 4.8vw;line-height: 4.8vw;text-align: center;background-color: #f94b4b;color: #FFF;border-radius: 1.6vw 0 1.6vw 0;position: absolute;top: 0;left: 0;padding: 0 1.5vw;font-size: 3vw;}
     .coupon-popup .coupon-list-cell{background: url("/img/account/icon-coupon-uesb@h52x.png") no-repeat;background-size: cover;}
     .coupon-popup .coupon-list-cell.none{background: url("/img/account/icon-coupon-received@h52x.png") no-repeat;background-size: cover;}
+    /*订单金额偏小弹窗提示*/
+    .confirm-Model{width: 100%;height: 100%;position: fixed;top: 0;left: 0;background: rgba(0,0,0,0.3);z-index: 9999;}
+    .confirm-Model .model-content{width: 74.6vw;height: 100.8vw;background: #FFFFFF;border-radius: 2vw;position: absolute;top: 0;right: 0;left: 0;bottom: 0;margin: auto;z-index: 9998;}
+    .confirm-Model .model-content .title{width: 100%;height: 11vw;box-sizing: border-box;font-size: 14px;line-height: 11vw;text-align: left;color: #333333;float: left;position: relative;border-bottom: 1px solid #EFEFEF;background-color: #FFFFFF;padding: 0 14px;}
+    .confirm-Model .model-content .title .icon-close{width: 16px;height: 16px;display: block;position: absolute;right:12px;top: 12px;background: url("/img/base/icon.png")-319px 0 no-repeat;cursor: pointer;}
+    .confirm-Model .model-content .content{margin: 4.8vw 0 4.8vw 0;width: 100%;height: auto;line-height: 4.8vw;float: left;box-sizing: border-box;}
+    .confirm-Model .model-content .content p{text-align: left;font-size: 3.4vw;color: #666666;font-weight: normal;}
+    .confirm-Model .model-content .content p.small{font-size:3vw;color: #E15621;}
+    .confirm-Model .model-content .content-image {width: 100%;height: 128px;float: left;margin-bottom: 20px;}
+    .confirm-Model .model-content .content-image img{width: 29.5vw;height: 29.5vw;display: block;margin: 0 auto;}
+    .confirm-Model .model-content .button{width: 100%;height: 9.9vw;float: left;box-sizing: border-box;}
+    .confirm-Model .model-content .button a{width: 100%;height: 9.9vw;display: block;border-radius: 2px;font-size: 3.4vw;text-align: center;line-height: 9.9vw;color: #FFFFFF;float: right;box-sizing: border-box;border: 1px solid #FFFFFF;}
+    .confirm-Model .model-content .button a.cancel{background: #FFFFFF;border-color: #B8BFCA;color: #333333;}
+    .confirm-Model .model-content .button a.confirm{background: #E15616;margin-bottom: 2vw}
 
 }
 

BIN
src/main/resources/static/img/base/icon-xiayibu@2x.png


BIN
src/main/resources/static/img/base/icon_m.png


BIN
src/main/resources/static/img/cart/icon_weigouxuan_desied@2x.png


BIN
src/main/resources/static/img/common/qr_code_hehe.jpg


+ 2 - 2
src/main/resources/static/js/account/register-club.js

@@ -421,7 +421,7 @@ var registerPage = new Vue({
         },
         ChangeGetcity:function(event){//加载市
             var _this = this;
-            PublicApi.GetCity({ provinceId: _this.addressfrom.province },function(response){
+            PublicApi.GetCity({ type:1, parentId: _this.addressfrom.province },function(response){
                 if(response.code == 0 ){
                     _this.cityArray = response.data;
                     _this.addressfrom.city = event.target.value;
@@ -438,7 +438,7 @@ var registerPage = new Vue({
         },
         ChangeGetcTown:function(event){//选择地区
             var _this = this;
-            PublicApi.GetTown({ cityId: _this.addressfrom.city },function(response){
+            PublicApi.GetTown({ type:2, parentId: _this.addressfrom.city },function(response){
                 if(response.code == 0 ){
                     _this.townArray = response.data;
                     _this.clubUpgradeUser.townId = event.target.value;

+ 2 - 2
src/main/resources/static/js/account/register-supplier.js

@@ -259,7 +259,7 @@ var registerPage = new Vue({
         },
         ChangeGetcity:function(event){//加载市
             var _this = this;
-            PublicApi.GetCity({ provinceId: _this.addressfrom.province },function(response){
+            PublicApi.GetCity({ type:1, parentId: _this.addressfrom.province },function(response){
                 if(response.code == 0 ){
                     _this.cityArray = response.data;
                     _this.addressfrom.city = event.target.value;
@@ -276,7 +276,7 @@ var registerPage = new Vue({
         },
         ChangeGetcTown:function(event){//选择地区
             var _this = this;
-            PublicApi.GetTown({ cityId: _this.addressfrom.city },function(response){
+            PublicApi.GetTown({ type:2, parentId: _this.addressfrom.city },function(response){
                 if(response.code == 0 ){
                     _this.townArray = response.data;
                     _this.supplierUser.townId = event.target.value;

+ 2 - 2
src/main/resources/static/js/account/supplier-information.js

@@ -228,7 +228,7 @@ var registerPage = new Vue({
         },
         ChangeGetcity:function(event){//加载市
             var _this = this;
-            PublicApi.GetCity({ provinceId: _this.supplierUser.provinceId },function(response){
+            PublicApi.GetCity({ type:1, parentId: _this.supplierUser.provinceId },function(response){
                 if(response.code == 0 ){
                     _this.cityArray = response.data;
                     _this.supplierUser.cityId = event.target.value;
@@ -245,7 +245,7 @@ var registerPage = new Vue({
         },
         ChangeGetcTown:function(event){//选择地区
             var _this = this;
-            PublicApi.GetTown({ cityId: _this.supplierUser.cityId },function(response){
+            PublicApi.GetTown({ type:2, parentId: _this.supplierUser.cityId },function(response){
                 if(response.code == 0 ){
                     _this.townArray = response.data;
                     _this.supplierUser.townId = event.target.value;

+ 1 - 71
src/main/resources/static/js/base.js

@@ -1,5 +1,4 @@
 var coreServer = $("#coreServer").val();
-var spiServer = $("#spiServer").val();
 var isPC = ($(window).width()>768);
 var globalUserData = '';
 var GLOBAL_TOKEN = 'X-Token';
@@ -25,7 +24,7 @@ if(localStorage.getItem('userInfo')){
         if (userAgent.match(/MicroMessenger/i)) {
             // 微信浏览器自动授权登录
             var urlForWeChat = 'https://www.caimei365.com/we_chat/redirect_uri.html';
-            $.get(spiServer+'/user/authorizationLink?mode=1&redirectUri='+urlForWeChat, function(r){
+            $.get(coreServer+'/user/login/auth/link?mode=1&redirectUri='+urlForWeChat, function(r){
                 if(r.code===0 && r.data){
                     setBaseCookie("weChatAutoLogin", 1);
                     setBeforeUrl();
@@ -573,35 +572,6 @@ function updateUrlParam(params) {
     }
 }
 
-function tokenAjax(type, url, params, callback, errorBack){
-    $.ajax({
-        type: type,
-        url: spiServer + url,
-        xhrFields: {
-            withCredentials: true
-        },
-        data: params,
-        headers:{
-            'Content-Type': type=='post'?'application/x-www-form-urlencoded':'application/json;charset=utf8',
-            'X-Token':GLOBAL_TOKEN
-        },
-        success : function (res) {
-            if(res.code === -99){
-                localStorage.removeItem('userInfo');
-                delBaseCookie("loginBeforePath");
-                // window.location.href ='/login.html';
-            }else{
-                callback(res);
-            }
-        },
-        error : function (res) {
-           alertInfo("网络连接超时,请重试!",function (res) {
-               console.log(res)
-           });
-        }
-    });
-}
-
 function setSearchProductList(list, userId, callback) {//处理搜索
     var productIdArr = [];
     var resultData = [];
@@ -790,43 +760,3 @@ function dialog(txt,callback) {
     });
 }
 
-// 加入购物车
-function addShoppingCart(userId, productId, count, callback){
-    tokenAjax("post", "/shoppingCart/addCart", {
-        userID: userId,
-        productID: productId,
-        productCount: count
-    },function (res) {
-        if(res && res.code*1 === 0){
-            globalHead.getHeadCart(userId);
-            $.confirm({
-                useBootstrap: false,
-                boxWidth: (isPC?'338px':'74.6vw'),
-                title: false,
-                content:'<div class="cartAlert"><h6>商品已成功加入购物车!</h6><p>当前购物车共<em>'+res.data+'</em>种商品</p></div>',
-                closeIcon: true,
-                animation: 'opacity',
-                closeAnimation: 'opacity',
-                animateFromElement: false,
-                scrollToPreviousElement: false,
-                buttons: {
-                    login: {
-                        text: '去结算',
-                        btnClass: 'btn-to-cart',
-                        action: function(){
-                            window.location.href = '/shopping/cart.html';
-                        }
-                    },
-                    close: {
-                        text: '继续购物',
-                        btnClass: 'btn-to-goon',
-                        action: callback?callback():function(){}
-                    }
-                }
-            });
-        } else {
-            dialog("加入购物车失败!");
-        }
-    });
-}
-

+ 2 - 5
src/main/resources/static/js/common/ajax.service.js

@@ -11,10 +11,7 @@
 */
 var Http = {
         AjaxService : function(option){
-            var NODE_ENV_BASE_URL = $("#spiServer").val();
-            if(option.isHost){
-                NODE_ENV_BASE_URL = $("#coreServer").val();
-            }
+            var NODE_ENV_BASE_URL = $("#coreServer").val();
             var REV_TOKEN_ENV = '',REV_TOKEN_USERID='';
             var GET_LOGIN_STAUS = JSON.parse(window.localStorage.getItem("userInfo"));
             if (GET_LOGIN_STAUS != null) {
@@ -56,7 +53,7 @@ var Http = {
             return def;
         },
         uploadImage : function(option,callback) {//上传图片
-            var NODE_ENV_BASE_URL = $("#spiServer").val();
+            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,

+ 72 - 0
src/main/resources/static/js/common/request.service.js

@@ -0,0 +1,72 @@
+/*
+*封装的ajax函数
+* Created by ZHJY on 2020/06/03.
+* @param  option.type     请求类型  get 和 post
+* @param  option.json     数据请求方式,
+* @param  option.url(必选) 请求的url地址   相同域名下的页面(此函数不支持跨域请求)
+* @param  option.data(必选) 请求协带的参数  以js对象的形式定义,如:{name:'张三'}
+* @param  option.replace  是否更新续签
+* @param  option.mask     是否使用模态层加载动画
+*/
+var Request = {
+    AjaxService: function (option) {
+        var REV_TOKEN_ENV = '', REV_TOKEN_USERID = '';
+        var GET_LOGIN_STAUS = JSON.parse(window.localStorage.getItem("userInfo"));
+        if (GET_LOGIN_STAUS != null) {
+            REV_TOKEN_ENV = GET_LOGIN_STAUS.token;
+            REV_TOKEN_USERID = GET_LOGIN_STAUS.userID;
+        } else {
+            REV_TOKEN_ENV = 'X-token'
+        }
+        var loading = '';
+        var def = $.Deferred();
+        $.ajax({
+            url: option.url,
+            data: option.data,
+            xhrFields: {//此处为跨域后台保持session一致,切勿删除!!!
+                withCredentials: true
+            },
+            type: option.type,
+            dataType: "json",
+            headers: {'X-Token': REV_TOKEN_ENV},
+            async: false,
+            contentType: option.json ? 'application/json;charset=UTF-8' : 'application/x-www-form-urlencoded',
+            beforeSend: function () {
+                // if (option.mask) {
+                //     loading = layer.load(0,{shade: [0.1,'#000']}); //0.1透明度的白色背景
+                // }
+            }
+        }).then(function (res) {
+            if (res.code == -99) {
+                CAIMEI.Storage.clear();
+                setBeforeUrl();
+                // location.href = "/login.html";
+            } else {
+                def.resolve(res);
+            }
+        }, function (error) {
+            console.log('网络请求超时,请重试~');
+            def.reject(error);
+        });
+        return def;
+    },
+    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',
+            cache: false,
+            data: option.data,
+            processData: false,
+            contentType: false,
+            dataType: "json",
+            success: function (res) {
+                callback(res)
+            },
+            error: function (xhr, type, errorThrown) {
+                console.log("照片上传失败")
+            }
+        });
+    }
+};

+ 3 - 6
src/main/resources/static/js/common/serviceapi/beautyArchive.service.js

@@ -1,25 +1,23 @@
 // 美业资料库列表
 var BeautyArchiveApi = {
     //获取资料库商品列表
-    GetArchiveProduct: function (params, callback) {//资料库获取详情
+    GetArchiveProduct: function (params, callback) {
         Http.AjaxService({
             url: '/commodity/product/archive',
             type: 'GET',
             data: params,
             json: false,
-            isHost: true,
         }).then(function (res) {
             callback(res);
         });
     },
-    //获取商品资料列表
-    GetProdcutArchiveDetails: function (params, callback) {//资料库获取详情
+    //资料库获取详情
+    GetProdcutArchiveDetails: function (params, callback) {
         Http.AjaxService({
             url: '/commodity/product/archive/detail',
             type: 'GET',
             data: params,
             json: false,
-            isHost: true,
         }).then(function (res) {
             callback(res);
         });
@@ -31,7 +29,6 @@ var BeautyArchiveApi = {
             type: 'POST',
             data: params,
             json: false,
-            isHost: true,
         }).then(function (res) {
             callback(res);
         });

+ 3 - 2
src/main/resources/static/js/common/serviceapi/club.service.js

@@ -4,7 +4,8 @@
  * auther ZHJY
  */
 var ClubApi = {
-        ClubRegister: function (params, callback) {//获取扫码登陆二维码
+        //获取扫码登陆二维码
+        ClubRegister: function (params, callback) {
             Http.AjaxService({
                 url:'/club/common',
                 type:'post',
@@ -17,4 +18,4 @@ var ClubApi = {
                 callback(res);
             });
         },
-};
+};

+ 28 - 21
src/main/resources/static/js/common/serviceapi/order.service.js

@@ -11,7 +11,6 @@ var OrderApi = {
                 type:'GET',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -24,7 +23,6 @@ var OrderApi = {
                 type:'POST',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -37,7 +35,6 @@ var OrderApi = {
                 type:'POST',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -50,19 +47,18 @@ var OrderApi = {
                 type:'POST',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
             });
         },
-        GetAddressSelect:function(params,callback){ //获取省市区信息
+        //获取省市区信息
+        GetAddressSelect:function(params,callback){
             Http.AjaxService({
                 url:'/order/address/select',
                 type:'get',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res)
@@ -75,7 +71,6 @@ var OrderApi = {
                 type:'GET',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -88,6 +83,18 @@ var OrderApi = {
                 type:'GET',
                 data:params,
                 json:false,
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        /* 组合商品立即购买确认订单 */
+        OrderClubProductSupporting: function (params, callback) {
+            Http.AjaxService({
+                url:'/order/club/product/buynow',
+                type:'GET',
+                data:params,
+                json:false,
                 isHost:true
             })
             .then(function(res){
@@ -101,7 +108,6 @@ var OrderApi = {
                 type:'GET',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -114,7 +120,6 @@ var OrderApi = {
                 type:'POST',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -127,7 +132,6 @@ var OrderApi = {
                 type:'GET',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -140,7 +144,6 @@ var OrderApi = {
                 type:'GET',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -149,10 +152,10 @@ var OrderApi = {
         /* 查询订单列表选项卡标签数量*/
         GetQueryOrderNum: function (params, callback) {
             Http.AjaxService({
-                url:'/pcCenter/getOrderNum',
+                url:'/order/club/count',
                 type:'GET',
                 data:params,
-                json:false
+                json:false,
             })
             .then(function(res){
                 callback(res);
@@ -165,7 +168,6 @@ var OrderApi = {
                 type:'post',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -178,7 +180,6 @@ var OrderApi = {
                 type:'POST',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -191,7 +192,6 @@ var OrderApi = {
                 type:'POST',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -204,7 +204,6 @@ var OrderApi = {
                 type:'POST',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -217,7 +216,6 @@ var OrderApi = {
                 type:'GET',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -230,7 +228,6 @@ var OrderApi = {
                 type:'post',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -243,7 +240,6 @@ var OrderApi = {
                 type:'get',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -256,7 +252,18 @@ var OrderApi = {
                 type:'post',
                 data:params,
                 json:false,
-                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        // 机构最新订单
+        OrderClubLatest: function (params, callback) {
+            Http.AjaxService({
+                url:'/order/club/latest',
+                type:'get',
+                data:params,
+                json:false,
             })
             .then(function(res){
                 callback(res);

+ 2 - 14
src/main/resources/static/js/common/serviceapi/pages.service.js

@@ -7,21 +7,10 @@ var PagesApi = {
         /* 二级列表页 */
         GetPageTopicData: function (params, callback) {
             Http.AjaxService({
-                url:'/page/topic',
+                url:'/commodity/page/floor',
                 type:'GET',
                 data:params,
-                json:false
-            })
-            .then(function(res){
-                callback(res);
-            });
-        },
-        GetPageTopicInfoData: function (params, callback) {
-            Http.AjaxService({
-                url:'/page/topic/info',
-                type:'GET',
-                data:params,
-                json:false
+                json:false,
             })
             .then(function(res){
                 callback(res);
@@ -34,7 +23,6 @@ var PagesApi = {
                 type:'GET',
                 data:params,
                 json:false,
-                isHost:true
             })
             .then(function(res){
                 callback(res);

+ 39 - 1
src/main/resources/static/js/common/serviceapi/product.service.js

@@ -208,7 +208,7 @@ var ProductApi = {
         },
         getActivityData: function (params, callback) {
             Http.AjaxService({
-                url: '/commodity/page/floor',
+                url: '/commodity/page/beauty',
                 type: 'get',
                 data: params,
                 json: true,
@@ -397,4 +397,42 @@ var ProductApi = {
                 callback(res);
             });
         },
+        /**
+         * @组合商品
+         * @param:userId 用户userId
+         * @param:productId 商品Id
+         * @param:pageNum 页码
+         * @param:pageSize 每一页条数
+         */
+        getCommodityCombinationList:function (params, callback) {//获取商品收藏列表
+            Http.AjaxService({
+                url:'/commodity/seller/combination/list',
+                type:'get',
+                data:params,
+                json:true,
+                isHost:true
+            })
+                .then(function(res){
+                    callback(res);
+                });
+        },
+        /**
+         * @商品筛选品牌项
+         * @param:keyword 关键词
+         * @param:id 分类Id
+         * @param:idType 1 一级分类 2 二级分类 3 三级分类
+         * @param:identity
+         */
+        getCommoditySearchQUeryBrand:function (params, callback) {//获取商品收藏列表
+            Http.AjaxService({
+                url:'/commodity/search/query/brand',
+                type:'get',
+                data:params,
+                json:true,
+                isHost:true
+            })
+                .then(function(res){
+                    callback(res);
+                });
+        },
 };

+ 9 - 9
src/main/resources/static/js/common/serviceapi/repair.service.js

@@ -6,8 +6,8 @@
 var RepairApi = {
         /* 查询用户维修列表 */
         GetFindMaintenance: function (params, callback) {
-            Http.AjaxService({
-                url:'/pcCenter/findMaintenance',
+            Request.AjaxService({
+                url:'/repair/list',
                 type:'GET',
                 data:params,
                 json:false
@@ -18,8 +18,8 @@ var RepairApi = {
         },
         /* 用户申请维修 */
         AddApplyMaintenance: function (params, callback) {
-            Http.AjaxService({
-                url:'/pcCenter/applyMaintenance',
+            Request.AjaxService({
+                url:'/repair/apply',
                 type:'POST',
                 data:params,
                 json:false
@@ -30,8 +30,8 @@ var RepairApi = {
         },
          /* 维修详情 */
         MaintenanceDetail: function (params, callback) {
-            Http.AjaxService({
-                url:'/pcCenter/maintenance/detail',
+            Request.AjaxService({
+                url:'/repair/detail',
                 type:'GET',
                 data:params,
                 json:false
@@ -42,7 +42,7 @@ var RepairApi = {
         },
          /* 商户维修详情 */
         CommodityRroductRepair: function (params, callback) {
-            Http.AjaxService({
+            Request.AjaxService({
                 url:'/commodity/product/repair',
                 type:'GET',
                 data:params,
@@ -55,8 +55,8 @@ var RepairApi = {
         },
         /* 维修详情 提交评论 */
        evaluation: function (params, callback) {
-            Http.AjaxService({
-                url:'/pcCenter/maintenance/evaluation',
+            Request.AjaxService({
+                url:'/repair/evaluation',
                 type:'POST',
                 data:params,
                 json:false

+ 9 - 7
src/main/resources/static/js/common/serviceapi/second.service.js

@@ -12,19 +12,19 @@ var SecondApi = {
         },
         uploadimg: function (params, callback) {//上传图片
             Http.uploadImage({
-                url:'/formData/MultiPictareaddData',
+                url:'/tools/image/upload/multi',
                 data:params
             },callback)
         },
         uploadFile: function (params, callback) {//上传文件
             Http.uploadImage({
-                url:'/file/upload',
+                url:'/tools/file/upload/oss',
                 data:params
             },callback)
         },
         deleteOssFile: function (params, callback) {//删除Oss文件
             Http.AjaxService({
-                url:'/file/delete',
+                url:'/tools/file/delete/oss',
                 type:'post',
                 data:params,
                 json:false,
@@ -65,12 +65,13 @@ var SecondApi = {
         },
         ProductCount: function (params, callback) {//浏览量
             Http.AjaxService({
-                url:'/product/updateSecondHandProductCount',
+                url:'/commodity/second/views',
                 type:'get',
                 data:params,
                 json:true,
                 mask:true,
-                replace:false
+                replace:false,
+                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -92,12 +93,13 @@ var SecondApi = {
         },
          ProductRecommend: function (params, callback) {//商品详情/相关推荐
             Http.AjaxService({
-                url:'/product/getSecondHandProductRecommend',
+                url:'/commodity/second/recommend',
                 type:'get',
                 data:params,
                 json:true,
                 mask:true,
-                replace:false
+                replace:false,
+                isHost:true
             })
             .then(function(res){
                 callback(res);

+ 17 - 1
src/main/resources/static/js/common/serviceapi/shopping.service.js

@@ -131,9 +131,25 @@ var ShoppingApi = {
          */
         ShoppingAddCarts:function (params, callback) {
             Http.AjaxService({
-                url:'/shoppingCart/addCarts',
+                url:'/order/club/cart/add/bulk',
                 type:'post',
                 data:params,
+                json:false,
+                isHost:true
+            })
+            .then(function(res){
+                callback(res);
+            });
+        },
+        /**
+         * @购物车-购物车数量
+         * @param:userId 用户userId
+         */
+        ShoppingCartCount: function(){
+            Http.AjaxService({
+                url:'/order/club/cart/count',
+                type:'get',
+                data:params,
                 json:false
             })
             .then(function(res){

+ 9 - 8
src/main/resources/static/js/common/serviceapi/supplier.service.js

@@ -42,7 +42,7 @@ var SupplierApi = {
         },
         uploadimg: function (params, callback) {//供应商添加物流上传图片
             Http.uploadImage({
-                url:'/formData/MultiPictareaddData',
+                url:'/tools/image/upload/multi',
                 data:params},callback)
         },
         GetMyProductList: function (params, callback) {//供应商商品列表
@@ -344,10 +344,11 @@ var SupplierApi = {
         },
         homePageData: function (params, callback) {//供应商 首页个人中心
             Http.AjaxService({
-                url:'/supplier/homePageData',
+                url:'/user/shop/personal/data',
                 type:'get',
                 data:params,
-                json:false
+                json:false,
+                isHost:true
             })
             .then(function(res){
                 callback(res);
@@ -355,7 +356,7 @@ var SupplierApi = {
         },
          uploadAvatar: function (params, callback) {//供应商 首页上传头像成功后调用
             Http.AjaxService({
-                url:'/user/uploadAvatar',
+                url:'/user/center/avatar/save',
                 type:'post',
                 data:params,
                 json:false
@@ -366,7 +367,7 @@ var SupplierApi = {
         },
         dressUpList : function(params,callback) {//装扮主页列表
             Http.AjaxService({
-                url:'/supplier/dressUp',
+                url:'/user/shop/home/images',
                 type:'get',
                 data:params,
                 json:true
@@ -377,7 +378,7 @@ var SupplierApi = {
         },
          ShopBanner : function(params,callback) {//装扮主页修改与添加
             Http.AjaxService({
-                url:'/supplier/saveShopBanner',
+                url:'/user/shop/home/images/update',
                 type:'POST',
                 data:params,
                 json:false
@@ -388,7 +389,7 @@ var SupplierApi = {
         },
         deleteShopBanner : function(params,callback) {//装扮主页删除广告 Integer shopBannerId
             Http.AjaxService({
-                url:'/supplier/deleteShopBanner',
+                url:'/user/shop/home/images/delete',
                 type:'POST',
                 data:params,
                 json:false
@@ -411,7 +412,7 @@ var SupplierApi = {
         },
          GetMymessageList : function(params,callback) {//个人中心消息列表
             Http.AjaxService({
-                url:'/user/messageList',
+                url:'/user/center/messages',
                 type:'get',
                 data:params,
                 json:true

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

@@ -122,7 +122,7 @@ var UserApi = {
         },
         GetMyPcCenterInfo : function(params,callback) {//机构个人中心数据查询(暂时废除)
             Http.AjaxService({
-                url:'/pcCenter/myPcCenter',
+                url:'/user/club/personal/data',
                 type:'get',
                 data:params,
                 json:true
@@ -133,7 +133,7 @@ var UserApi = {
         },
         GetMymessageList : function(params,callback) {//个人中心消息列表
             Http.AjaxService({
-                url:'/user/messageList',
+                url:'/user/center/messages',
                 type:'get',
                 data:params,
                 json:true
@@ -144,7 +144,7 @@ var UserApi = {
         },
         UserPuploadAvatar : function(params,callback) {//机构个人中心头像更新
             Http.AjaxService({
-                url:'/user/uploadAvatar ',
+                url:'/user/center/avatar/save',
                 type:'post',
                 data:params,
                 json:false

+ 47 - 44
src/main/resources/static/js/common/serviceapi/utils.service.js

@@ -5,17 +5,17 @@
  */
 var PublicApi = {
         uploadimg: function (params, callback) {//供应商添加物流上传图片
-            Http.uploadImage({ url:'/formData/MultiPictareaddData',data:params},callback)
+            Http.uploadImage({ url:'/tools/image/upload/multi',data:params},callback)
         },
         uploadFile: function (params, callback) {//上传文件
             Http.uploadImage({
-                url:'/file/upload',
+                url:'/tools/file/upload/oss',
                 data:params
             },callback)
         },
         deleteOssFile: function (params, callback) {//删除Oss文件
             Http.AjaxService({
-                url:'/file/delete',
+                url:'/tools/file/delete/oss',
                 type:'post',
                 data:params,
                 json:false,
@@ -50,28 +50,28 @@ var PublicApi = {
                 callback(res)
             });
         },
-        GetHomeBanner:function(params,callback){ //首页bnner
-            Http.AjaxService({
-                url:'/home/banner',
-                type:'get',
-                data:params,
-                json:false
-            })
-            .then(function(res){
-                callback(res)
-            });
-        },
-        GetHomeRightData:function(params,callback){ //首页右侧模块
-            Http.AjaxService({
-                url:'/home/top/data',
-                type:'get',
-                data:params,
-                json:false
-            })
-            .then(function(res){
-                callback(res)
-            });
-        },
+        // GetHomeBanner:function(params,callback){ //首页bnner
+        //     Http.AjaxService({
+        //         url:'/home/banner',
+        //         type:'get',
+        //         data:params,
+        //         json:false
+        //     })
+        //     .then(function(res){
+        //         callback(res)
+        //     });
+        // },
+        // GetHomeRightData:function(params,callback){ //首页右侧模块
+        //     Http.AjaxService({
+        //         url:'/commodity/home/sidebar',
+        //         type:'get',
+        //         data:params,
+        //         json:false,
+        //     })
+        //     .then(function(res){
+        //         callback(res)
+        //     });
+        // },
         GetProductClassify:function(params,callback){ //获取一级分类
             Http.AjaxService({
                 url:'/commodity/classify',
@@ -84,23 +84,24 @@ var PublicApi = {
                 callback(res)
             });
         },
-        GetNavigationMenu:function(params,callback){ //获取顶部导航
-            Http.AjaxService({
-                url:'/home/init',
-                type:'get',
-                data:params,
-                json:false
-            })
-            .then(function(res){
-                callback(res)
-            });
-        },
+        // GetNavigationMenu:function(params,callback){ //获取顶部导航
+        //     Http.AjaxService({
+        //         url:'/home/init',
+        //         type:'get',
+        //         data:params,
+        //         json:false
+        //     })
+        //     .then(function(res){
+        //         callback(res)
+        //     });
+        // },
         GetProvince:function(params,callback){ //获取省份信息
             Http.AjaxService({
-                url:'/club/province',
+                url:'/order/address/select',
                 type:'get',
                 data:params,
-                json:false
+                json:false,
+                isHost:true
             })
             .then(function(res){
                 callback(res)
@@ -108,10 +109,11 @@ var PublicApi = {
         },
         GetCity:function(params,callback){ //获取区分信息
             Http.AjaxService({
-                url:'/club/city',
+                url:'/order/address/select',
                 type:'get',
                 data:params,
-                json:true
+                json:false,
+                isHost:true
             })
             .then(function(res){
                 callback(res)
@@ -119,10 +121,11 @@ var PublicApi = {
         },
         GetTown:function(params,callback){ //获取市信息
             Http.AjaxService({
-                url:'/club/town',
+                url:'/order/address/select',
                 type:'get',
                 data:params,
-                json:true
+                json:false,
+                isHost:true
             })
             .then(function(res){
                 callback(res)
@@ -445,7 +448,7 @@ var PublicApi = {
         },
         markAsRead:function (params,callback) {//已读消息
             Http.AjaxService({
-                url:'/user/markAsRead',
+                url:'/user/center/messages/read',
                 type:'post',
                 data:params,
                 json:false
@@ -456,7 +459,7 @@ var PublicApi = {
         },
         deleteMessage:function (params,callback) {//删除消息
             Http.AjaxService({
-                url:'/user/deleteMessage',
+                url:'/user/center/messages/delete',
                 type:'post',
                 data:params,
                 json:false

+ 0 - 1
src/main/resources/static/js/document/base.js

@@ -1,4 +1,3 @@
-var spiServer = $("#spiServer").val();
 var isPC = ($(window).width()>768);
 /** 表单输入框校验 */
 function verifyHandle(obj){

+ 3 - 6
src/main/resources/static/js/flea-market/form.js

@@ -469,6 +469,7 @@ var fleaMarketForm = new Vue({
         province:function () {
            var _this = this;
            _this.from.province = event.target.value;
+           console.log('aaa', _this.from.province)
             if(_this.from.province==''){//省为请选择时市区初始化
                 _this.cityArray=[];
                 _this.townArray=[];
@@ -479,7 +480,7 @@ var fleaMarketForm = new Vue({
         },
         getcity:function(event){//加载市
            var _this = this;
-            PublicApi.GetCity({ provinceId: _this.from.province },function(response){
+            PublicApi.GetCity({ type:1, parentId: _this.from.province },function(response){
                  if(response.code == 0 ){
                     _this.cityArray = response.data;
                      _this.from.city = event.target.value;
@@ -491,12 +492,10 @@ var fleaMarketForm = new Vue({
 
                 }
             })
-
-
         },
         getcTown:function(event){
             var _this = this;
-            PublicApi.GetTown({cityId:_this.from.city},function(response){
+            PublicApi.GetTown({ type:2, parentId:_this.from.city},function(response){
                 if(response.code == 0 ){
                     _this.townArray = response.data;
                     _this.secondParams.townId = event.target.value;
@@ -528,6 +527,4 @@ var fleaMarketForm = new Vue({
             }
         })
     },
-
-
 })

+ 0 - 35
src/main/resources/static/js/help/select.js

@@ -1,35 +0,0 @@
-var selectClass = new Vue({
-    el:'#selectClass',
-    data:{
-        commodityType:'',
-
-        List:[
-            {id:'1010',name:'卡琪紫红色精华油',shop:'供应商',stauts:'已上架',bigName:'会所常用品',smallName:'客装产品',tinyName:'其他'},
-            {id:'1011',name:'卡琪紫红色精华油',shop:'供应商',stauts:'已上架',bigName:'会所常用品',smallName:'客装产品',tinyName:'其他'},
-            {id:'1012',name:'卡琪紫红色精华油',shop:'供应商',stauts:'已上架',bigName:'会所常用品',smallName:'客装产品',tinyName:'其他'},
-            {id:'1013',name:'卡琪紫红色精华油',shop:'供应商',stauts:'已上架',bigName:'会所常用品',smallName:'客装产品',tinyName:'其他'},
-            {id:'1014',name:'卡琪紫红色精华油',shop:'供应商',stauts:'已上架',bigName:'会所常用品',smallName:'客装产品',tinyName:'其他'},
-            {id:'1015',name:'卡琪紫红色精华油',shop:'供应商',stauts:'已上架',bigName:'会所常用品',smallName:'客装产品',tinyName:'其他'},
-            {id:'1016',name:'卡琪紫红色精华油',shop:'供应商',stauts:'已上架',bigName:'会所常用品',smallName:'客装产品',tinyName:'其他'},
-            {id:'1017',name:'卡琪紫红色精华油',shop:'供应商',stauts:'已上架',bigName:'会所常用品',smallName:'客装产品',tinyName:'其他'},
-            {id:'1018',name:'卡琪紫红色精华油',shop:'供应商',stauts:'已上架',bigName:'会所常用品',smallName:'客装产品',tinyName:'其他'},
-            {id:'1019',name:'卡琪紫红色精华油',shop:'供应商',stauts:'已上架',bigName:'会所常用品',smallName:'客装产品',tinyName:'其他'},
-            {id:'1020',name:'卡琪紫红色精华油',shop:'供应商',stauts:'已上架',bigName:'会所常用品',smallName:'客装产品',tinyName:'其他'},
-        ],
-        bigList:[]
-    },
-    methods:{
-        changeAttr:function (event) {
-            this.commodityType = event.target.value;
-
-        },
-
-    },
-    mounted:function () {
-        var _this = this;
-        $.getJSON(spiServer+"/classification/bigTypeData").done(function (r) {
-                if (r.code === 0 && r.data) {
-                }
-            });
-    }
-})

+ 16 - 16
src/main/resources/static/js/index.js

@@ -5,9 +5,9 @@ var homeData = new Vue({
     data: {
         userId:0,
         asideNav: [],
-        liveList:[],//右侧直播模块
-        cmImageList:[],//右侧活动模块
-        infoList:[],//右侧文章模块
+        // liveList:[],//右侧直播模块
+        // cmImageList:[],//右侧活动模块
+        // infoList:[],//右侧文章模块
         popupFlag:false,
         couponEntry:2,// 活动优惠券弹窗显示控制
         homePageFloor:[]//楼层
@@ -98,19 +98,19 @@ var homeData = new Vue({
                 }
             });
         },
-        GetHomeRightData: function(){//模块加载
-            var _self = this;
-            PublicApi.GetHomeRightData({ source: 1 },function(response){
-                if(response.code == 0){
-                    var data = response.data;
-                    _self.liveList = data.liveList;
-                    _self.cmImageList = data.cmImageList;
-                    _self.infoList = data.infoList;
-                }else{
-                    CAIMEI.Alert(response.msg, '确定');
-                }
-            });
-        },
+        // GetHomeRightData: function(){//模块加载
+        //     var _self = this;
+        //     PublicApi.GetHomeRightData({ source: 1 },function(response){
+        //         if(response.code == 0){
+        //             var data = response.data;
+        //             _self.liveList = data.liveList;
+        //             _self.cmImageList = data.cmImageList;
+        //             _self.infoList = data.infoList;
+        //         }else{
+        //             CAIMEI.Alert(response.msg, '确定');
+        //         }
+        //     });
+        // },
         GetHomeData: function(){//获取首页楼层
             var _self = this;
             PublicApi.GetHomeData({ source: 1,userId: _self.userId },function(response){

+ 219 - 5
src/main/resources/static/js/product/detail.js

@@ -41,6 +41,13 @@ var productDetail = new Vue({
         trainingType: '',
         isShowPopup: false,
         currentTab: 1,
+        listQuery:{
+            source:1,
+            userId:0,
+            productId:0,
+            pageNum:1,
+            pageSize:30,
+        },
         couponParam: {// 获取弹窗优惠券领取参数
             userId: 0,
             productId: 0,
@@ -48,10 +55,16 @@ var productDetail = new Vue({
             source: 1
         },
         isCouponEmpty: false,
+        isProductChecked:false,
         productCoupon: [], 							// 优惠券
         productCouponList: [],						// 优惠券弹窗列表
         collectionType:false,                       // 商品收藏状态
-
+        supportingList:[],
+        defaultSupportingList:[],
+        isShowSupportingList:false,
+        isShowMoreButton:false,
+        totalPrice:0,  // 勾选配套商品总价格
+        totalNumber:0, // 勾选配套商品总数量
     },
     filters: {
         TypeFormat: function (value) {
@@ -72,9 +85,50 @@ var productDetail = new Vue({
                     return '新用户券';
                     break;
             }
+        },
+        NumFormat:function(value) {
+            return Number(value).toFixed(2);
         }
     },
     methods: {
+        // 是否显示vip标签价格
+        showVipPriceTag: function(product){
+            return (product.priceFlag !== 1 && product.svipProductFlag === 1 && ((GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG === 1) || GLOBAL_USER_IDENTITY === 2));
+        },
+        PromotionsFormat:function(promo){//促销活动类型数据处理
+            if(promo!=null){
+                if(promo.type == 1 && promo.mode == 1){
+                    return true
+                }else{
+                    return false
+                }
+            }
+            return false
+        },
+        getCommodityCombinationList: function () {// 获取收藏商品列表
+            var _self = this;
+            ProductApi.getCommodityCombinationList(_self.listQuery,function (response) {
+                if (response.code === 0 ) {
+                    var data = response.data;
+                    if(data.results.length > 0 ){
+                        var list = data.results.map((el,index)=>{
+                            el.isChecked = false;
+                            el.number = el.minBuyNumber;
+                            return el;
+                        });
+                        _self.supportingList = list;
+                        _self.defaultSupportingList = _self.supportingList.slice(0,5);
+                        if(_self.supportingList.length > 5 ){
+                            _self.isShowMoreButton = true;
+                        }
+                    }else{
+                        _self.supportingList = [];
+                    }
+                }else {
+                    CAIMEI.Alert(response.msg, '确定');
+                }
+            });
+        },
         getImages: function () {
             var _self = this;
             if (!this.productId) {
@@ -181,6 +235,9 @@ var productDetail = new Vue({
                         _self.promotions = response.data.promotions;
                         _self.promotionsId = response.data.promotions.id;
                     }
+                    if(_self.userId == 0 || _self.priceObj.userIdentity == 2 || _self.priceObj.userIdentity == 4){
+                        _self.isShowSupportingList = true;
+                    }
                 }
             });
         },
@@ -468,14 +525,171 @@ var productDetail = new Vue({
                 })
             }
         },
+        supportingNumberSub: function(pros){// 配套商品数量减减
+            var _self = this;
+            if (pros.number <= pros.minBuyNumber) {
+                pros.number = pros.minBuyNumber
+                return
+            } else {
+                if (pros.step === 2) {
+                    pros.number -= pros.minBuyNumber
+                } else {
+                    pros.number--
+                }
+            }
+            _self.numberChange(pros);
+        },
+        supportingNumberAdd: function(pros){  // 配套商品数量加加
+            var _self = this;
+            if (pros.step === 2) {
+                pros.number += pros.minBuyNumber
+            } else {
+                pros.number++
+            }
+            _self.numberChange(pros);
+        },
+        supportingNumberChange: function(pros){ // 配套商品数量输入
+            var _self = this;
+            pros.number = Math.ceil(pros.number/pros.step)*pros.step;
+            _self.numberChange(pros);
+        },
+        numberChange: function(pros){
+            var _self = this;
+            if(pros.ladderPriceFlag){
+                pros.ladderPrices.forEach(function(ladder){
+                    if(pros.number>=ladder.buyNum){
+                        pros.price = ladder.buyPrice;
+                        pros.originalPrice = ladder.buyPrice;
+                    }
+                });
+            }
+            // 计算价格
+            _self.calculatetTtalPrice();
+        },
+        calculatetTtalPrice: function () { // 计算配套商品总价格
+            var _self = this;
+            var totalPrice = 0;
+            var totalNumber = 0;
+            _self.supportingList.forEach(function (pros) {
+                if(pros.isChecked){
+                    pros.totalPrice = pros.number*pros.price;
+                    totalNumber+= pros.number
+                }else{
+                    pros.totalPrice = 0;
+                }
+                totalPrice += pros.totalPrice;
+            })
+            _self.totalPrice = totalPrice;
+            _self.totalNumber = totalNumber;
+        },
+        checkedSoperv:function (pros) {// 勾选配套商品
+            console.log(pros)
+            var _self = this;
+            var goodsCheckedLength = 0;
+            pros.isChecked = !pros.isChecked
+            _self.supportingList.forEach(el => {
+                if(el.isChecked) {
+                    goodsCheckedLength++;
+                }
+            })
+            if(goodsCheckedLength>0){
+                _self.isProductChecked = true
+            }else{
+                _self.isProductChecked = false
+            }
+            _self.calculatetTtalPrice();
+        },
+        handleSupportingSubmit:function (type) {
+            var _self = this;
+            if (_self.userId > 0) {
+                switch (type) {
+                    case 'buy':
+                        console.log('立即购买')
+                        _self.toConfirmation()
+                        break
+                    case 'add':
+                        console.log('加入购物车')
+                        _self.getAddProductCart()
+                        break
+                }
+            } else {
+                _self.toLogin();
+            }
+        },
+        getAddProductCart:function () {
+            //批量增加购物车成功和toast弹窗提示成功
+            var _self = this;
+            var checkedList = [];
+            if(!_self.isProductChecked){
+                CAIMEI.dialog('请先选择商品',false);
+                return;
+            }
+            _self.supportingList.forEach((el)=>{
+                if(el.isChecked){
+                    checkedList.push({ productId:el.productId , productCount: el.number });
+                }
+            })
+            ShoppingApi.ShoppingAddCarts({userId:_self.listQuery.userId,productInfo:JSON.stringify(checkedList)},function(response){
+                if(response.code === 0){
+                    globalHead.getHeadCart(_self.listQuery.userId);
+                    $.confirm({
+                        useBootstrap: false,
+                        boxWidth: (isPC?'338px':'74.6vw'),
+                        title: false,
+                        content:'<div class="cartAlert"><h6>商品已成功加入购物车!</h6><p>当前购物车共<em>'+response.data+'</em>种商品</p></div>',
+                        closeIcon: true,
+                        animation: 'opacity',
+                        closeAnimation: 'opacity',
+                        animateFromElement: false,
+                        scrollToPreviousElement: false,
+                        buttons: {
+                            login: {
+                                text: '去结算',
+                                btnClass: 'btn-to-cart',
+                                action: function(){
+                                    window.location.href = '/shopping/cart.html';
+                                }
+                            },
+                            close: {
+                                text: '继续购物',
+                                btnClass: 'btn-to-goon'
+                            }
+                        }
+                    });
+                } else {
+                    dialog("加入购物车失败!");
+                }
+            })
+        },
+        toConfirmation:function () {
+            var _self = this;
+            //跳转确认订单页面
+            var checkedList = []
+            if(!_self.isProductChecked){
+                CAIMEI.dialog('请先选择商品',false);
+                return;
+            }
+            _self.supportingList.forEach((el)=>{
+                if(el.isChecked){
+                    checkedList.push({ id:el.productId , count: el.number })
+                }
+            })
+            CAIMEI.Storage.setItem('KEY_SUPPORE', JSON.stringify(checkedList));
+            window.location.href = '/shopping/confirm.html?type=3';
+        },
+        showSupportingMore:function () {
+            var _self = this;
+            _self.isShowMoreButton = false;
+            _self.defaultSupportingList = _self.supportingList;
+        },
         // 是否显示vip标签价格
         showVipPriceTag(product){
             return (product.priceFlag !== 1 && product.svipProductFlag === 1 && ((GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG === 1) || GLOBAL_USER_IDENTITY === 2));
-        }
+        },
     },
     created: function () {
-        this.productId = this.couponParam.productId = $("#productId").val();
-        this.userId = this.couponParam.userId = GLOBAL_USER_ID;
+        this.productId = this.couponParam.productId = this.listQuery.productId = $("#productId").val();
+        this.userId = this.couponParam.userId = this.listQuery.userId = GLOBAL_USER_ID;
         this.productStock = $("#productStock").val();
         this.getImages();
         // identity: 0个人,1协销,2会员机构,3供应商,4普通机构
@@ -493,7 +707,7 @@ var productDetail = new Vue({
         this.getProductPrice();
         this.getParameters();
         this.queryProductDetilsCoupons();
-
+        this.getCommodityCombinationList();
         // $('.productInfo').slide({
         //     mainCell:".tabCon"
         //     ,titCell:".tabTit span"

+ 123 - 4
src/main/resources/static/js/product/list.js

@@ -11,6 +11,9 @@ var productList = new Vue({
             keyword: "",
             sortField: "",
             sortType: 1, // 1降序,其他升序
+            brandIds: '', // 品牌Id
+            newFlag: 0, // 查询新品标记,默认0,新品1
+            promotionFlag: 0, // 查询促销标记,默认0,促销1
             // bid: "",
             // sid: "",
             // tid: ""
@@ -26,7 +29,22 @@ var productList = new Vue({
         shopID:0,
         userIdentity: '',
         userToken: '',
-        addhtml:'<span class="tag">美博会</span>'
+        addhtml:'<span class="tag">美博会</span>',
+        brandParam: {
+            keyword: '',
+            id: '',
+            idType: '',
+            identity: 0
+        },
+        hrefBrandId:null,
+        brandLists: [],
+        defaultBrandLists:[],
+        checkedBrandList:[],
+        checkedBrandLength:0,
+        isProductScreen:false,
+        isActiviChecked:false,
+        isNewsChecked:false,
+        isShowAllBrands:false
     },
     filters: {
         NumFormat:function(value) {
@@ -96,7 +114,10 @@ var productList = new Vue({
                 pageSize: this.params.size,
                 pageNum: this.params.num,
                 sortField: this.params.sortField,
-                sortType: this.params.sortType
+                sortType: this.params.sortType,
+                brandIds: this.params.brandIds, // 品牌Id
+                newFlag: this.params.newFlag, // 查询新品标记,默认0,新品1
+                promotionFlag: this.params.promotionFlag, // 查询促销标记,默认0,促销1
             },function (res) {
                 console.log(res);
                 if (res.code === 0 && res.data ) {
@@ -123,6 +144,86 @@ var productList = new Vue({
                 }
             });
         },
+        getCommoditySearchQUeryBrand:function() { // 查询筛选项品牌
+            var _self = this;
+            ProductApi.getCommoditySearchQUeryBrand(_self.brandParam,function (response) {
+                console.log(response);
+                if (response.code === 0 && response.data ) {
+                    var data = response.data;
+                    _self.defaultBrandLists = data.map((el, index) => {
+                        if(_self.hrefBrandId && _self.hrefBrandId == el.id){
+                            el.isChecked = true;
+                        }else{
+                            el.isChecked = false;
+                        }
+                        return el;
+                    })
+                    _self.brandLists = _self.defaultBrandLists.slice(0,8)
+                }else {
+                    console.log('查询品牌列表异常')
+                }
+            });
+        },
+        choiceBrandHref: function (brand, index) {// PC端跳转链接
+            window.location.href =  '/product/list.html?keyword=' + encodeURIComponent(this.params.keyword) +
+                                    '&bpn=' + brand.id + '&pro=' + this.params.promotionFlag +
+                                    '&newg='+ this.params.newFlag;
+        },
+        choiceBrand:function(brand,index){// 选择品牌
+            var _self = this;
+            brand.isChecked = !brand.isChecked
+            if (brand.isChecked) {
+                _self.checkedBrandList.push(brand.id)
+            } else {
+                _self.checkedBrandList.splice(index, 1)
+            }
+            _self.checkedBrandLength = _self.checkedBrandList.length
+            _self.params.brandIds = this.checkedBrandList.join(',')
+        },
+        showMoreItem:function(){// 点击更多品牌
+            this.isShowAllBrands = !this.isShowAllBrands;
+            if( this.isShowAllBrands){
+                this.brandLists = this.defaultBrandLists;
+            }else{
+                this.brandLists = this.defaultBrandLists.slice(0,8)
+            }
+        },
+        hanldCheckedActivi:function(){// 选择促销商品选项
+            this.isActiviChecked = !this.isActiviChecked;
+            if(this.isActiviChecked){
+                this.params.promotionFlag = 1
+            }else{
+                this.params.promotionFlag = 0
+            }
+        },
+        hanldCheckedNews:function(){// 选择新品选项
+            this.isNewsChecked = !this.isNewsChecked;
+            if(this.isNewsChecked){
+                this.params.newFlag = 1
+            }else{
+                this.params.newFlag = 0
+            }
+        },
+        hanldCheckedActiviHref(){// 选择促销商品选项跳转链接(PC专用)
+            var promotionFlag = this.isActiviChecked ? 0 : 1;
+            window.location.href = '/product/list.html?keyword='+encodeURIComponent(this.params.keyword)+
+                                   '&bpn='+this.hrefBrandId+ '&pro='+promotionFlag+'&newg='+ this.params.newFlag;
+        },
+        hanldCheckedNewsHref(){// 选择新品选项跳转链接(PC专用)
+            var newFlag = this.isNewsChecked ? 0 : 1;
+            window.location.href = '/product/list.html?keyword='+encodeURIComponent(this.params.keyword)+
+                                   '&bpn='+this.hrefBrandId+ '&pro=' + this.params.promotionFlag +
+                                   '&newg='+newFlag;
+        },
+        showIsProductScreen:function(){//
+            this.isProductScreen = true;
+        },
+        handleConfirmScreen:function(){
+            this.params.num = 1;
+            this.listData = [];
+            this.getListByKeyword();
+            this.isProductScreen = false;
+        }
         // getListByCategory: function (path, categoryId) {
         //     var _self = this;
         //     $.getJSON(spiServer+"/search/query/product/"+ path ,{
@@ -159,11 +260,27 @@ var productList = new Vue({
         if(isPC){
             this.params.size = getUrlParam("pageSize") ? getUrlParam("pageSize") * 1 : 20;
             this.params.num = getUrlParam("pageNum") ? getUrlParam("pageNum") * 1 : 1;
+            this.hrefBrandId = getUrlParam("bpn") ? getUrlParam("bpn") : null; //bpn 品牌链接参数
+            this.params.promotionFlag = getUrlParam("pro") ? getUrlParam("pro")*1 : 0; // pro 促销商品链接参数
+            this.params.newFlag = getUrlParam("newg") ? getUrlParam("newg")*1 : 0; // newg 新品链接参数
+            if(this.hrefBrandId){
+                this.params.brandIds = this.hrefBrandId +',';
+            }
+            if(this.params.promotionFlag == 1){
+                this.isActiviChecked = true;
+            }else{
+                this.isActiviChecked = false;
+            }
+            if(this.params.newFlag == 1){
+                this.isNewsChecked = true;
+            }else{
+                this.isNewsChecked = false;
+            }
         }else{
             this.params.size = 10;
             this.params.num = 1;
         }
-        this.params.keyword = getUrlParam("keyword") ? getUrlParam("keyword") : "";
+        this.params.keyword = this.brandParam.keyword = getUrlParam("keyword") ? getUrlParam("keyword") : "";
         // 搜索框赋值
         $('#topSearch').find('[data-select]').attr("data-select", 0).text("产品");
         $('#topSearch').find('.jqSelect').find('select').val(0);
@@ -183,7 +300,8 @@ var productList = new Vue({
         }
         // 获取列表数据
         this.getListByKeyword();
-
+        // 获取对应品牌列表
+        this.getCommoditySearchQUeryBrand();
         // if (this.searchFlag) {
         //     // 获取列表数据
         //     this.getListByKeyword();
@@ -229,6 +347,7 @@ var productList = new Vue({
                             _self.params.num = next;
                             // 获取列表数据
                             _self.getListByKeyword();
+
                             // if (_self.searchFlag) {
                             //     // 获取列表数据
                             //     _self.getListByKeyword();

+ 132 - 12
src/main/resources/static/js/product/produce-list.js

@@ -20,9 +20,27 @@ var productList = new Vue({
             sortType: 1, // 上传0,下传1 綜合1
             pageSize: 24,
             pageNum: 1,
-            idType:1
+            idType:1,
+            brandIds: '', // 品牌Id
+            newFlag: 0, // 查询新品标记,默认0,新品1
+            promotionFlag: 0, // 查询促销标记,默认0,促销1
         },
-        addhtml:'<span class="tag">美博会</span>'
+        addhtml:'<span class="tag">美博会</span>',
+        brandParam: {
+            keyword: '',
+            id: '',
+            idType: '',
+            identity: 0
+        },
+        hrefBrandId:'',
+        brandLists: [],
+        defaultBrandLists:[],
+        checkedBrandList:[],
+        checkedBrandLength:0,
+        isProductScreen:false,
+        isActiviChecked:false,
+        isNewsChecked:false,
+        isShowAllBrands:false
     },
      filters:{
          NumFormat:function(value) {//处理金额
@@ -55,12 +73,12 @@ var productList = new Vue({
                                 $("img[data-original]").lazyload();
                             },500);
                         });
-                        console.log(resultData);
                         if(isPC){
                             _self.listData = resultData;
                         }else{
                             _self.listData = _self.listData.concat(resultData);
                         }
+                   console.log('listData',_self.listData);
                }else {
                   console.log('暂无数据')
                }
@@ -80,15 +98,15 @@ var productList = new Vue({
                 this.params.pageNum = pageNum*1;
                 var url = '/product/classify-'+this.typeSort+'-'+this.bigTypeId+'-'+this.smallTypeId+'-'+this.tinyTypeId+'-'+this.params.pageNum+'-'+this.params.pageSize;
                 if (this.params.sortField) {
-                    url += '-'+this.params.sortField+'-'+this.params.sortType+'.html';
+                    url += '-'+this.params.sortField+'-'+this.params.sortType+'.html?bpn=' + this.hrefBrandId + '&pro=' + this.params.promotionFlag +'&newg='+ this.params.newFlag;
                 } else {
-                    url += '.html';
+                    url += '.html?bpn=' + this.hrefBrandId + '&pro=' + this.params.promotionFlag +'&newg='+ this.params.newFlag;
                 }
                 window.location.href = url;
             }
         },
         toSortList: function (sortField, sortType) {
-            var url = '/product/classify-'+this.typeSort+'-'+this.bigTypeId+'-'+this.smallTypeId+'-'+this.tinyTypeId+'-1-'+this.params.pageSize+'-'+sortField+'-'+sortType+'.html';
+            var url = '/product/classify-'+this.typeSort+'-'+this.bigTypeId+'-'+this.smallTypeId+'-'+this.tinyTypeId+'-1-'+this.params.pageSize+'-'+sortField+'-'+sortType+'.html?bpn=' + this.hrefBrandId + '&pro=' + this.params.promotionFlag +'&newg='+ this.params.newFlag;
             this.params.sortField= sortField;
             this.params.sortType = sortType;
             this.params.pageNum = 1;
@@ -104,6 +122,90 @@ var productList = new Vue({
             }
             return false
         },
+        getCommoditySearchQUeryBrand:function() { // 查询筛选项品牌
+            var _self = this;
+            ProductApi.getCommoditySearchQUeryBrand(_self.brandParam,function (response) {
+                console.log(response);
+                if (response.code === 0 && response.data ) {
+                    var data = response.data;
+                    _self.defaultBrandLists = data.map((el, index) => {
+                        if(_self.hrefBrandId && _self.hrefBrandId == el.id){
+                            el.isChecked = true;
+                        }else{
+                            el.isChecked = false;
+                        }
+                        return el;
+                    })
+                    _self.brandLists = _self.defaultBrandLists.slice(0,8)
+                }else {
+                    console.log('查询品牌列表异常')
+                }
+            });
+        },
+        choiceBrandHref: function (brand, index) {// PC端品牌跳转链接
+            var url = '/product/classify-'+this.typeSort+'-'+this.bigTypeId+'-'+this.smallTypeId+'-'+this.tinyTypeId+'-1-'+this.params.pageSize+'-'+this.params.sortField+'-'+this.params.sortType+'.html?bpn=' + brand.id + '&pro=' + this.params.promotionFlag +'&newg='+ this.params.newFlag;
+            window.location.href =  url;
+        },
+        choiceBrand:function(brand,index){// 选择品牌
+            var _self = this;
+            brand.isChecked = !brand.isChecked
+            if (brand.isChecked) {
+                _self.checkedBrandList.push(brand.id)
+            } else {
+                _self.checkedBrandList.splice(index, 1)
+            }
+            _self.checkedBrandLength = _self.checkedBrandList.length
+            _self.params.brandIds = this.checkedBrandList.join(',')
+        },
+        showMoreItem:function(){// 点击更多品牌
+            this.isShowAllBrands = !this.isShowAllBrands;
+            if( this.isShowAllBrands){
+                this.brandLists = this.defaultBrandLists;
+            }else{
+                this.brandLists = this.defaultBrandLists.slice(0,8)
+            }
+        },
+        hanldCheckedActivi:function(){// 选择促销商品选项
+            this.isActiviChecked = !this.isActiviChecked;
+            if(this.isActiviChecked){
+                this.params.promotionFlag = 1
+            }else{
+                this.params.promotionFlag = 0
+            }
+        },
+        hanldCheckedNews:function(){// 选择新品选项
+            this.isNewsChecked = !this.isNewsChecked;
+            if(this.isNewsChecked){
+                this.params.newFlag = 1
+            }else{
+                this.params.newFlag = 0
+            }
+        },
+        hanldCheckedActiviHref(){// 选择促销商品选项跳转链接(PC专用)
+            var promotionFlag = this.isActiviChecked ? 0 : 1;
+            var url =  '/product/classify-'+this.typeSort+'-'+this.bigTypeId+'-'+this.smallTypeId+'-'+this.tinyTypeId+'-1-'+this.params.pageSize+'-'+this.params.sortField+'-'+this.params.sortType+'.html?bpn='+this.hrefBrandId+ '&pro='+promotionFlag+'&newg='+ this.params.newFlag;
+            window.location.href = url;
+        },
+        hanldCheckedNewsHref(){// 选择新品选项跳转链接(PC专用)
+            var newFlag = this.isNewsChecked ? 0 : 1;
+            var url =  '/product/classify-'+this.typeSort+'-'+this.bigTypeId+'-'+this.smallTypeId+'-'+this.tinyTypeId+'-1-'+this.params.pageSize+'-'+this.params.sortField+'-'+this.params.sortType+'.html?bpn='+this.hrefBrandId+ '&pro=' + this.params.promotionFlag+'&newg='+newFlag;
+            window.location.href = url;
+        },
+        showIsProductScreen:function(){//
+            this.isProductScreen = true;
+        },
+        handleConfirmScreen:function(){// 确定筛选项
+            if (GLOBAL_USER_ID && GLOBAL_USER_ID>0) {
+                this.params.pageNum = 1;
+                this.listData = [];
+                this.getproductList();
+                this.isProductScreen = false;
+            }else{
+                var url =  '/product/classify-'+this.typeSort+'-'+this.bigTypeId+'-'+this.smallTypeId+'-'+this.tinyTypeId+'-1-'+this.params.pageSize+'-'+this.params.sortField+'-'+this.params.sortType+'.html?bpn='+this.params.brandIds+ '&pro=' + this.params.promotionFlag+'&newg='+this.params.newFlag;
+                console.log('url============>',url)
+                window.location.href = url;
+            }
+        }
     },
     created:function () {
         var userInfo = localStorage.getItem('userInfo');
@@ -118,19 +220,35 @@ var productList = new Vue({
         this.params.pageNum = paramsArr.length>=6 ? paramsArr[5]*1 : 1;
         this.params.sortField= paramsArr.length>=8 ? paramsArr[7] : "";
         this.params.sortType = paramsArr.length>=9 ? paramsArr[8]*1 : 1;
+        this.hrefBrandId = getUrlParam("bpn") ? getUrlParam("bpn") : null; //bpn 品牌链接参数
+        this.params.promotionFlag = getUrlParam("pro") ? getUrlParam("pro")*1 : 0; // pro 促销商品链接参数
+        this.params.newFlag = getUrlParam("newg") ? getUrlParam("newg")*1 : 0; // newg 新品链接参数
+        if(this.hrefBrandId){
+            this.params.brandIds = this.hrefBrandId +',';
+        }
+        if(this.params.promotionFlag == 1){
+            this.isActiviChecked = true;
+        }else{
+            this.isActiviChecked = false;
+        }
+        if(this.params.newFlag == 1){
+            this.isNewsChecked = true;
+        }else{
+            this.isNewsChecked = false;
+        }
     },
     mounted:function () {
         var _self = this;
         this.listRecord = $('#productCount').val() ? $('#productCount').val()*1 : 0;
         if (this.bigTypeId && this.smallTypeId && this.tinyTypeId) {
-            this.params.id=this.tinyTypeId;
-            this.params.idType = 3;
+            this.params.id= this.brandParam.id = this.tinyTypeId;
+            this.params.idType = this.brandParam.idType = 3;
         } else if (this.bigTypeId && this.smallTypeId) {
-            this.params.id=this.smallTypeId;
-            this.params.idType = 2;
+            this.params.id= this.brandParam.id = this.smallTypeId;
+            this.params.idType = this.brandParam.idType = 2;
         } else {
-            this.params.id=this.bigTypeId;
-            this.params.idType = 1;
+            this.params.id= this.brandParam.id = this.bigTypeId;
+            this.params.idType = this.brandParam.idType = 1;
         }
         if (GLOBAL_USER_ID && GLOBAL_USER_ID>0) {
             _self.getproductList();
@@ -141,6 +259,8 @@ var productList = new Vue({
                 $("img[data-original]").lazyload();
             });
         }
+        // 获取对应品牌列表
+        this.getCommoditySearchQUeryBrand();
         if(!isPC){
             $('footer').addClass("noneImportant");
             //移动端上垃加载更多

+ 271 - 0
src/main/resources/static/js/product/product-supporting.js

@@ -0,0 +1,271 @@
+var supporting = new Vue({
+    el: "#supporting",
+    data: {
+        listLoading: true,
+        showProduct: false,
+        productId: 0,
+        userId: 0,
+        listQuery:{
+            source:1,
+            userId:0,
+            productId:0,
+            pageNum:1,
+            pageSize:30,
+        },
+        supportingList:[],
+        isAllChecked:false,
+        isProductChecked:false,
+        totalPrice:0,
+        totalNumber:0,
+    },
+    filters: {
+        NumFormat:function(value) {
+            return Number(value).toFixed(2);
+        }
+    },
+    methods: {
+        getCommodityCombinationList: function () {// 获取组合商品列表
+            var _self = this;
+            ProductApi.getCommodityCombinationList(_self.listQuery,function (response) {
+                if (response.code === 0 ) {
+                    var data = response.data;
+                    if(data.results.length > 0 ){
+                        var list = data.results.map((el,index)=>{
+                            el.isChecked = false;
+                            el.number = el.minBuyNumber;
+                            return el;
+                        });
+                        _self.supportingList = list;
+                        if(_self.supportingList.length > 0 ){
+                            _self.isShowMoreButton = true;
+                        }
+                        _self.listLoading = false;
+                    }else{
+                        _self.supportingList = [];
+                    }
+                }else {
+                    CAIMEI.Alert(response.msg, '确定');
+                }
+            });
+        },
+        supportingNumberSub: function(pros){
+            var _self = this;
+            if (pros.number <= pros.minBuyNumber) {
+                pros.number = pros.minBuyNumber
+                return
+            } else {
+                if (pros.step === 2) {
+                    pros.number -= pros.minBuyNumber
+                } else {
+                    pros.number--
+                }
+            }
+            _self.numberChange(pros);
+        },
+        supportingNumberAdd: function(pros){  //商品数量加加
+            var _self = this;
+            if (pros.step === 2) {
+                pros.number += pros.minBuyNumber
+            } else {
+                pros.number++
+            }
+            _self.numberChange(pros);
+        },
+        supportingNumberChange: function(pros){
+            var _self = this;
+            pros.number = Math.ceil(pros.number/pros.step)*pros.step;
+            _self.numberChange(pros);
+        },
+        numberChange: function(pros){
+            var _self = this;
+            if(pros.ladderPriceFlag){
+                pros.ladderPrices.forEach(function(ladder){
+                    if(pros.number>=ladder.buyNum){
+                        pros.price = ladder.buyPrice;
+                        pros.originalPrice = ladder.buyPrice;
+                    }
+                });
+            }
+            // 计算价格
+            _self.calculatetTtalPrice();
+        },
+        calculatetTtalPrice: function () {
+            var _self = this;
+            var totalPrice = 0;
+            var totalNumber = 0;
+            _self.supportingList.forEach(function (pros) {
+                if(pros.isChecked){
+                    pros.totalPrice = pros.number*pros.price;
+                    totalNumber+= pros.number
+                    totalPrice += pros.totalPrice;
+                }else{
+                    pros.totalPrice = 0;
+                }
+            })
+            _self.totalPrice = totalPrice;
+            _self.totalNumber = totalNumber;
+        },
+        disabledChecked(pros){
+            if(pros.priceFlag ==1){// 为公开价格返回 true 禁用按钮
+                return true
+            }else{
+                if(GLOBAL_USER_IDENTITY == 4 && pros.priceFlag ==2){// 普通机构且商品价格仅会员可见 禁用按钮
+                    return true
+                }
+            }
+        },
+        isCheckedAll(){//全选
+            var _self = this;
+            var list = [];
+            _self.isAllChecked = !_self.isAllChecked;
+            _self.supportingList.forEach((pros)=>{
+                if(!_self.disabledChecked(pros)){
+                    pros.isChecked = _self.isAllChecked;
+                    list.push(pros);
+                }
+            })
+            if(_self.isAllChecked){
+                _self.isProductChecked = true;
+            }else{
+                _self.isProductChecked = false;
+            }
+            _self.calculatetTtalPrice();
+        },
+        checkedSoperv:function (pros) {// 勾选
+            var _self = this;
+            var goodsCheckedLength = 0;
+            if(_self.disabledChecked(pros)){
+                CAIMEI.dialog('该商品暂不能购买',false);
+                return;
+            }
+            pros.isChecked = !pros.isChecked
+            _self.supportingList.forEach(el => {
+                if(el.isChecked) {
+                    goodsCheckedLength++;
+                }
+            })
+            _self.isAllChecked = goodsCheckedLength === _self.supportingList.length;
+            if(goodsCheckedLength>0){
+                _self.isProductChecked = true
+            }else{
+                _self.isProductChecked = false
+            }
+            _self.calculatetTtalPrice();
+        },
+        // 是否显示vip标签价格
+        showVipPriceTag: function(product){
+            return (product.priceFlag !== 1 && product.svipProductFlag === 1 && ((GLOBAL_USER_IDENTITY === 4 && GLOBAL_VIP_FLAG === 1) || GLOBAL_USER_IDENTITY === 2));
+        },
+        PromotionsFormat:function(promo){//促销活动类型数据处理
+            if(promo!=null){
+                if(promo.type == 1 && promo.mode == 1){
+                    return true
+                }else{
+                    return false
+                }
+            }
+            return false
+        },
+        handleSupportingSubmit:function (type) {
+            var _self = this;
+            if (_self.listQuery.userId > 0) {
+                switch (type) {
+                    case 'buy':
+                        console.log('立即购买')
+                        _self.toConfirmation()
+                        break
+                    case 'add':
+                        console.log('加入购物车')
+                        _self.getAddProductCart()
+                        break
+                }
+            } else {
+                _self.toLogin();
+            }
+        },
+        getAddProductCart:function () {
+            //批量增加购物车成功和toast弹窗提示成功
+            var _self = this;
+            var checkedList = [];
+            if(!_self.isProductChecked){
+                CAIMEI.dialog('请先选择商品',false);
+                return;
+            }
+            _self.supportingList.forEach((el)=>{
+                if(el.isChecked){
+                    checkedList.push({ productId:el.productId , productCount: el.number });
+                }
+            })
+            ShoppingApi.ShoppingAddCarts({userId:_self.listQuery.userId,productInfo:JSON.stringify(checkedList)},function(response){
+                if(response.code === 0){
+                    globalHead.getHeadCart(_self.listQuery.userId);
+                    $.confirm({
+                        useBootstrap: false,
+                        boxWidth: (isPC?'338px':'74.6vw'),
+                        title: false,
+                        content:'<div class="cartAlert"><h6>商品已成功加入购物车!</h6><p>当前购物车共<em>'+response.data+'</em>种商品</p></div>',
+                        closeIcon: true,
+                        animation: 'opacity',
+                        closeAnimation: 'opacity',
+                        animateFromElement: false,
+                        scrollToPreviousElement: false,
+                        buttons: {
+                            login: {
+                                text: '去结算',
+                                btnClass: 'btn-to-cart',
+                                action: function(){
+                                    window.location.href = '/shopping/cart.html';
+                                }
+                            },
+                            close: {
+                                text: '继续购物',
+                                btnClass: 'btn-to-goon'
+                            }
+                        }
+                    });
+                } else {
+                    dialog("加入购物车失败!");
+                }
+            })
+        },
+        toConfirmation:function () {
+            var _self = this;
+            //跳转确认订单页面
+            var checkedList = []
+            if(!_self.isProductChecked){
+                CAIMEI.dialog('请先选择商品',false);
+                return;
+            }
+            _self.supportingList.forEach((el)=>{
+                if(el.isChecked){
+                    checkedList.push({ id:el.productId , count: el.number })
+                }
+            })
+            CAIMEI.Storage.setItem('KEY_SUPPORE', JSON.stringify(checkedList));
+            window.location.href = '/shopping/confirm.html?type=3';
+        },
+        toLogin: function () {
+            setBeforeUrl();
+            window.location.href = '/login.html';
+        },
+    },
+    created: function () {
+        this.userId = this.listQuery.userId = GLOBAL_USER_ID;
+        console.log('GLOBAL_USER_ID',GLOBAL_USER_ID)
+        // identity: 0个人,1协销,2会员机构,3供应商,4普通机构
+    },
+    mounted: function () {
+        this.listQuery.productId = getUrlParam("productId") ? getUrlParam("productId")*1 : "";
+        this.userId = this.listQuery.userId = GLOBAL_USER_ID;
+        if(isPC){
+            window.location.href = '/product-'+this.listQuery.productId+'.html';
+        }else{
+            this.getCommodityCombinationList();
+        }
+        // $('.productInfo').slide({
+        //     mainCell:".tabCon"
+        //     ,titCell:".tabTit span"
+        //     ,trigger: "click"
+        // });
+    }
+});

+ 165 - 91
src/main/resources/static/js/shopping/cart.js

@@ -17,6 +17,7 @@ var shoppingCart = new Vue({
         originalPrice: 0,
         allChecked: true,
         submitIds: [],//去结算商品Ids
+        checkenProsList:[],// 勾选中的商品
         isShowPopup:false,
         currentTab:1,
         couponParam:{// 获取弹窗优惠券领取参数
@@ -31,6 +32,7 @@ var shoppingCart = new Vue({
         couponPrice:0,							// 优惠金额
         totalDiscountAmount:0,					// 总共减去金额
         isDiscount:false,						// 控制显示优惠明细
+        isCheckedProductStatus:false
     },
     watch:{
         listData: {
@@ -84,8 +86,11 @@ var shoppingCart = new Vue({
                     _self.listData.forEach(function(supplier){
                         supplier.isChecked = true;
                         if(supplier.cartList.length>0){
-                            supplier.cartList.forEach(function(cartItem){
-                                _self.submitIds.push(cartItem.productId);
+                            supplier.cartList.forEach(function(pros){
+                                pros.isChecked = true
+                                _self.submitIds.push(pros.productId);
+                                _self.checkenProsList.push(pros);
+                                _self.isCheckedProductStatus = true;
                             })
                         }
                     });
@@ -112,57 +117,86 @@ var shoppingCart = new Vue({
             $(el).parents('.priceTag').find('.tag').removeClass("on").siblings('.mFixed').hide();
             if(!isPC){looseBody();}
         },
-        ckeckItem: function(event){
-            var el = event.currentTarget;
-            if(!$(el).prop("checked")){
-                $(el).parents('.supplierItem').find('.supplierTit').find('input.check').prop("checked", false);
+        ckeckItem: function(supplier,pro){//为未选中的时候改变为true,反之为true
+            var _self = this;
+            pro.isChecked = !pro.isChecked;
+            if (pro.isChecked) {
+                if (!_self.submitIds.includes(pro.productId * 1)) {
+                    _self.submitIds.push(pro.productId);
+                    _self.checkenProsList.push(pro);
+                }
+                _self.isCheckedProductStatus = true;
+            } else {
+                var lent = _self.submitIds.indexOf(pro.productId * 1)
+                if (lent >= 0) {
+                    _self.submitIds.splice(lent, 1);
+                    _self.checkenProsList.splice(lent, 1);
+                }
             }
-            this.computedPrice();
+            _self.updateProductCheckedAllBtn(supplier)
+            _self.updateCheckAllBtn()
+            _self.computedPrice();
         },
-        ckeckSupplier: function(event, supplierChecked){
-            var el = event.currentTarget;
+        ckeckSupplier: function(supplier){
             var _self = this;
-            var cartList = $(el).parents('.supplierItem').find('input[name=cartList]');
-            this.$nextTick(function(){
-                if (supplierChecked) {
-                    $.each(cartList, function (index, item) {
-                        if (!_self.submitIds.includes(item.value*1)){
-                            _self.submitIds.push(item.value*1);
-                        }
-                    });
-                }else{
-                    $.each(cartList, function (index, item) {
-                        var loc = _self.submitIds.indexOf(item.value*1);
-                        if(loc >=0 ){
-                            _self.submitIds.splice(loc, 1);
-                            _self.allChecked = false;
-                        }
-                    });
+            supplier.isChecked = !supplier.isChecked;
+            _self.setProductChecked(supplier);
+            _self.updateCheckAllBtn();
+            _self.computedPrice();
+        },
+        updateProductCheckedAllBtn: function(supplier) { // 单独每个供应商的勾选判断
+            var productsList = supplier.cartList,
+                productsCheckedLength = 0;
+            productsList.forEach(pros => {
+                if (pros.isChecked) {
+                    productsCheckedLength++;
                 }
-                _self.computedPrice();
-            });
+            })
+            supplier.isChecked = productsCheckedLength === productsList.length
         },
-        ckeckAll: function(){
+        updateCheckAllBtn: function() { // 全选勾选判断
             var _self = this;
-            this.$nextTick(function(){
-                if (_self.allChecked) {
-                    _self.submitIds = [];
-                    _self.listData.forEach(function(supplier){
-                        supplier.isChecked = true;
-                        if(supplier.cartList.length>0){
-                            supplier.cartList.forEach(function(cartItem){
-                                _self.submitIds.push(cartItem.productId);
-                            })
-                        }
-                    });
-                }else{
-                    _self.submitIds = [];
-                    _self.listData.forEach(function(supplier){
-                        supplier.isChecked = false;
-                    });
+            var goodsCheckedLength = 0,
+                goodsList = _self.listData;
+                goodsList.forEach(function(supplier){
+                    if (supplier.isChecked) {
+                        goodsCheckedLength++;
+                    }
+                })
+            _self.allChecked = goodsCheckedLength === goodsList.length;
+        },
+        updateBothCheckBtn: function(){// 更新商铺勾选状态
+            var _self = this;
+            _self.listData.forEach(supplier => {
+                supplier.isChecked = _self.allChecked;
+                _self.setProductChecked(supplier);
+            })
+        },
+        setProductChecked: function(supplier) {//
+            var _self = this;
+            supplier.cartList.forEach(pros => {
+                if (supplier.isChecked) {
+                    pros.isChecked = true;
+                    if (!_self.submitIds.includes(pros.productId * 1)) {
+                        _self.submitIds.push(pros.productId);
+                        _self.checkenProsList.push(pros);
+                    }
+                    _self.isCheckedProductStatus = true;
+                } else {
+                    pros.isChecked = false;
+                    var lent = this.submitIds.indexOf(pros.productId * 1);
+                    if (lent >= 0) {
+                        _self.submitIds.splice(lent, 1);
+                        _self.checkenProsList.splice(lent, 1);
+                    }
                 }
-                _self.computedPrice();
-            });
+            })
+            _self.computedPrice();
+        },
+        ckeckAll: function(){
+            var _self = this;
+            _self.allChecked = !_self.allChecked;
+            _self.updateBothCheckBtn()
         },
         setPromotions:function(){
             var _self = this;
@@ -198,10 +232,22 @@ var shoppingCart = new Vue({
                                 totalCount += cart.number;
                                 // 单品满减
                                 if (cart.promotions && cart.promotions.type * 1 === 1 && cart.promotions.mode * 1 === 2) {
-                                    // 单品满减-重新计算供应商总价/满减金额
-                                    if (cart.price * cart.number >= cart.promotions.touchPrice) {
-                                        supplierPrice -= cart.promotions.reducedPrice;
-                                        supplierReducedPrice += cart.promotions.reducedPrice;
+                                    var price = cart.price * cart.number;
+                                    if(cart.promotions.discount == 1){
+                                        var discountNum = parseInt( price/cart.promotions.touchPrice);
+                                        console.log('单品满减促销叠加通道叠加次数',discountNum)
+                                        // 单品满减-重新计算供应商总价/满减金额
+                                        if ( price >= cart.promotions.touchPrice) {
+                                            supplierPrice -= cart.promotions.reducedPrice*discountNum
+                                            supplierReducedPrice += cart.promotions.reducedPrice*discountNum
+                                        }
+                                    }else{
+                                        console.log(' 单品满减非促销叠加通道')
+                                        // 单品满减-重新计算供应商总价/满减金额
+                                        if ( price >= cart.promotions.touchPrice) {
+                                            supplierPrice -= cart.promotions.reducedPrice;
+                                            supplierReducedPrice += cart.promotions.reducedPrice;
+                                        }
                                     }
                                 }
                                 //sivp优惠价格
@@ -212,10 +258,20 @@ var shoppingCart = new Vue({
                         });
                         // 店铺满减
                         if (supplier.promotions && supplier.promotions.mode * 1 === 2) {
-                            // 店铺满减-计算供应商总价/满减金额
-                            if (supplierPrice >= supplier.promotions.touchPrice) {
-                                supplierPrice -= supplier.promotions.reducedPrice;
-                                supplierReducedPrice += supplier.promotions.reducedPrice;
+                            if(supplier.promotions.discount == 1){// 支持促销叠加条件的店铺满减 执行
+                                var prosDiscountNum = parseInt(supplierPrice/supplier.promotions.touchPrice) // 店铺满减促销叠加次数 = 店铺合计价格/满减促销价格
+                                console.log('店铺满减促销叠加通道叠加次数',prosDiscountNum)
+                                if (supplierPrice >= supplier.promotions.touchPrice) {
+                                    supplierPrice -= supplier.promotions.reducedPrice*prosDiscountNum
+                                    supplierReducedPrice += supplier.promotions.reducedPrice*prosDiscountNum
+                                }
+                            }else{
+                                console.log('店铺满减非促销叠加通道')
+                                // 店铺满减-计算供应商总价/满减金额
+                                if (supplierPrice >= supplier.promotions.touchPrice) {
+                                    supplierPrice -= supplier.promotions.reducedPrice;
+                                    supplierReducedPrice += supplier.promotions.reducedPrice;
+                                }
                             }
                         }
                     }
@@ -226,48 +282,69 @@ var shoppingCart = new Vue({
                     reducedPrice += supplier.reducedPrice;
                     originalPrice += supplier.originalPrice;
                 });
-                // 总促销计算
-                _self.promotionsList.forEach(function (promotions) {
-                    // 凑单满减
-                    if (promotions.mode * 1 === 2 && promotions.type * 1 === 2) {
-                        var total = 0;
-                        promotions.productList.forEach(function (product) {
-                            if (_self.submitIds.includes(product.productId * 1)) {
-                                total += product.number * product.price;
+                if(_self.isCheckedProductStatus){
+                    // 总促销计算
+                    _self.promotionsList.forEach(function (promotions) {
+                        // 凑单满减
+                        if (promotions.mode * 1 === 2 && promotions.type * 1 === 2) {
+                            var collecTotal = 0;
+                            var collecDiscountNum = 0;
+                            promotions.productList.forEach(function (product) {
+                                collecTotal += _self.collecTotalPrice(product);
+                            });
+                            if(promotions.discount == 1){// 支持凑单满减促销叠加条件的执行
+                                collecDiscountNum += parseInt(collecTotal/promotions.touchPrice) // 凑单满减促销叠加次数 = 凑单商品合计价格/凑单满减促销价格
+                                console.log('凑单促销满减叠加通道叠加次数',`${collecDiscountNum}次`)
+                                if (collecTotal >= promotions.touchPrice) {
+                                    totalPrice -= promotions.reducedPrice*collecDiscountNum
+                                    reducedPrice += promotions.reducedPrice*collecDiscountNum
+                                }
+                            }else{
+                                console.log('凑单促销满减非叠加通道')
+                                if (collecTotal >= promotions.touchPrice) {
+                                    totalPrice -= promotions.reducedPrice
+                                    reducedPrice += promotions.reducedPrice
+                                }
                             }
-                        });
-                        if (total >= promotions.touchPrice) {
-                            totalPrice -= promotions.reducedPrice;
-                            reducedPrice += promotions.reducedPrice;
+                        }
+                    });
+                    _self.totalPrice = totalPrice;
+                    _self.reducedPrice = reducedPrice;
+                    _self.originalPrice = originalPrice;
+                    _self.kindCount = kindCount;
+                    _self.totalCount = totalCount;
+                    // 计算优惠券
+                    if (_self.totalCouponList.length > 0) {
+                        let eligibleCoupons = _self.calculationCoupon();
+                        if (eligibleCoupons.length > 0) {
+                            _self.eligibleCoupons.splice(0, _self.eligibleCoupons.length);
+                            _self.eligibleCoupons = eligibleCoupons.sort((a, b) => b.couponAmount - a.couponAmount)
+                            _self.couponPrice = this.eligibleCoupons[0].couponAmount
+                        } else {
+                            _self.couponPrice = 0
                         }
                     }
-                });
-                _self.totalPrice = totalPrice;
-                _self.reducedPrice = reducedPrice;
-                _self.originalPrice = originalPrice;
-                _self.kindCount = kindCount;
-                _self.totalCount = totalCount;
-                // 计算优惠券
-                if (_self.totalCouponList.length > 0) {
-                    let eligibleCoupons = _self.calculationCoupon();
-                    if (eligibleCoupons.length > 0) {
-                        _self.eligibleCoupons.splice(0, _self.eligibleCoupons.length);
-                        _self.eligibleCoupons = eligibleCoupons.sort((a, b) => b.couponAmount - a.couponAmount)
-                        _self.couponPrice = this.eligibleCoupons[0].couponAmount
+                    // 最后满减金额 = 店铺减去金额 + 单品减去金额 + 凑单减去金额
+                    _self.totalDiscountAmount = _self.reducedPrice + _self.couponPrice;
+                    console.log('最终优惠金额', _self.totalDiscountAmount);
+                    // 控制显示优惠明细
+                    if (_self.totalDiscountAmount > 0) {
+                        _self.isDiscount = true;
                     } else {
-                        _self.couponPrice = 0
+                        _self.isDiscount = false;
                     }
                 }
-                // 最后满减金额 = 店铺减去金额 + 单品减去金额 + 凑单减去金额
-                _self.totalDiscountAmount = _self.reducedPrice + _self.couponPrice;
-                console.log('最终优惠金额', _self.totalDiscountAmount);
-                // 控制显示优惠明细
-                if (_self.totalDiscountAmount > 0) {
-                    _self.isDiscount = true;
-                } else {
-                    _self.isDiscount = false;
+            })
+        },
+        collecTotalPrice:function(pros){// 凑单满减计算勾选的凑单商品总价
+            var _self = this;
+            var price;
+            _self.checkenProsList.forEach(el => {
+                if(pros.productId == el.productId ){
+                    price = el.number * el.price
                 }
             })
+            return price
         },
         calculationCoupon:function(){// 优惠券计算
             var _self = this;
@@ -433,10 +510,7 @@ var shoppingCart = new Vue({
                     if(data.couponList && data.couponList.length >0){
                         _self.productCouponList = data.couponList;
                         _self.isCouponEmpty = false;
-                        console.log('有优惠券')
-                        console.log(_self.productCouponList)
                     }else{
-                        console.log('没有优惠券')
                         _self.isCouponEmpty = true;
                     }
                 }else{

+ 96 - 70
src/main/resources/static/js/shopping/confirm.js

@@ -51,6 +51,11 @@ var shoppingConfirm = new Vue({
         productParam: Object.assign({}, defaultProductParam), 	// 商品立即购买确认订单参数
         postageParam: Object.assign({}, defaultPostageParam),	// 邮费计算参数
         confirmParam: Object.assign({}, defaultConfirmParam), 	// 提交订单参数
+        supportParm:{// 组合商品立即购买确认订单参数
+            productInfo:'',
+            source:2,			// 来源:1WWW 2小程序
+            userId:0			// 用户Id
+        },
         address: {
             id: '',
             townId: '',
@@ -118,6 +123,9 @@ var shoppingConfirm = new Vue({
         couponList:[], // 可用优惠券列表
         isCouponShow:false,
         svipReducedPrice: 0, //超级会员优惠金额
+        isModelAlert:false, // 订单不足提示弹窗
+        isModelAlertText:'',
+        isShowConfirm:true
     },
     computed: {
 
@@ -161,34 +169,18 @@ var shoppingConfirm = new Vue({
             if(_self.userId ===0){return;}
             OrderApi.ProductCreateOrderInfo(_self.productParam,function(response){
                 if (response.code === 0 ) {
-                    var data = response.data;
-                    _self.listData = data.list;
-                    _self.totalPrice =  data.totalPrice;
-                    _self.reducedPrice = data.reducedPrice;
-                    _self.totalCount =  data.totalCount;
-                    _self.kindCount = data.kindCount;
-                    _self.balance.userMoney = data.userMoney;
-                    _self.balance.originUserMoney = data.userMoney;
-                    _self.hanldShouldPayFee = data.totalPrice;
-                    _self.svipReducedPrice = data.svipReducedPrice;
-                    _self.postageParam.productIds =  _self.getProductIds(data.list); // 获取订单商品id列表 以 , 隔开
-                    console.log('邮费接口数据',  _self.postageParam)
-                    _self.getAddressList(_self.userId,20);
-                    if( data.couponList &&  data.couponList.length>0){
-                        _self.isCouponShow = true;
-                        _self.couponAmount = data.couponList[0].couponAmount;
-                        _self.confirmParam.clubCouponId = data.couponList[0].clubCouponId;
-                        data.couponList.forEach((el) => {
-                            _self.couponList.push(Object.assign(el,{ischecked:false}))
-                        })
-                        _self.couponList[0].ischecked = true;
-                        _self.hanldShouldPayFee = data.totalPrice - _self.couponAmount;
-                    }
-                    _self.totalDiscountAmount =  _self.reducedPrice + _self.couponAmount;
-                    if(data.invoice){
-                        data.invoice.type = 0;
-                        _self.orderInvoice =  data.invoice;
-                    }
+                    _self.setCreatDataInfo(response.data)
+                }else{
+                    CAIMEI.Alert(r.msg, '确定', false);
+                }
+            });
+        },
+        OrderClubProductSupporting:function(){// 组合商品确认订单初始化
+            var _self = this;
+            if(_self.userId ===0){return;}
+            OrderApi.OrderClubProductSupporting(_self.supportParm,function(response){
+                if (response.code === 0 ) {
+                    _self.setCreatDataInfo(response.data)
                 }else{
                     CAIMEI.Alert(r.msg, '确定', false);
                 }
@@ -199,39 +191,42 @@ var shoppingConfirm = new Vue({
             if(_self.userId ===0){return;}
             OrderApi.GetOrderConfirmInfo(_self.cartParam,function(response){
                 if (response.code === 0 ) {
-                    var data = response.data;
-                    _self.listData = data.list;
-                    _self.totalPrice =  data.totalPrice;
-                    _self.reducedPrice = data.reducedPrice;
-                    _self.totalCount =  data.totalCount;
-                    _self.kindCount = data.kindCount;
-                    _self.balance.userMoney = data.userMoney;
-                    _self.balance.originUserMoney = data.userMoney;
-                    _self.hanldShouldPayFee = data.totalPrice;
-                    _self.svipReducedPrice = data.svipReducedPrice;
-                    _self.postageParam.productIds =  _self.getProductIds(data.list); // 获取订单商品id列表 以 , 隔开
-                    _self.getAddressList(_self.userId,20);
-                    console.log('邮费接口数据',  _self.postageParam)
-                    if( data.couponList &&  data.couponList.length>0){
-                        _self.isCouponShow = true;
-                        _self.couponAmount = data.couponList[0].couponAmount;
-                        _self.confirmParam.clubCouponId = data.couponList[0].clubCouponId;
-                        data.couponList.forEach((el) => {
-                            _self.couponList.push(Object.assign(el,{ischecked:false}))
-                        })
-                        _self.couponList[0].ischecked = true;
-                        _self.hanldShouldPayFee = data.totalPrice - _self.couponAmount;
-                    }
-                    _self.totalDiscountAmount =  _self.reducedPrice + _self.couponAmount;
-                    if(data.invoice){
-                        data.invoice.type = 0;
-                        _self.orderInvoice =  data.invoice;
-                    }
+                    _self.setCreatDataInfo(response.data)
                 }else{
                     CAIMEI.Alert(r.msg, '确定', false);
                 }
             });
         },
+        setCreatDataInfo(data){
+            var _self = this;
+            _self.listData = data.list;
+            _self.totalPrice =  data.totalPrice;
+            _self.reducedPrice = data.reducedPrice;
+            _self.totalCount =  data.totalCount;
+            _self.kindCount = data.kindCount;
+            _self.balance.userMoney = data.userMoney;
+            _self.balance.originUserMoney = data.userMoney;
+            _self.hanldShouldPayFee = data.totalPrice;
+            _self.svipReducedPrice = data.svipReducedPrice;
+            _self.postageParam.productIds =  _self.getProductIds(data.list); // 获取订单商品id列表 以 , 隔开
+            _self.getAddressList(_self.userId,20);
+            console.log('邮费接口数据',  _self.postageParam)
+            if( data.couponList &&  data.couponList.length>0){
+                _self.isCouponShow = true;
+                _self.couponAmount = data.couponList[0].couponAmount;
+                _self.confirmParam.clubCouponId = data.couponList[0].clubCouponId;
+                data.couponList.forEach((el) => {
+                    _self.couponList.push(Object.assign(el,{ischecked:false}))
+                })
+                _self.couponList[0].ischecked = true;
+                _self.hanldShouldPayFee = data.totalPrice - _self.couponAmount;
+            }
+            _self.totalDiscountAmount =  _self.reducedPrice + _self.couponAmount;
+            if(data.invoice){
+                data.invoice.type = 0;
+                _self.orderInvoice =  data.invoice;
+            }
+        },
         getFreight: function(){// 获取邮费
             var _self = this;
             console.log(_self.postageParam, '邮费接口调用')
@@ -662,8 +657,18 @@ var shoppingConfirm = new Vue({
             n=(r1>=r2)?r1:r2;
             return ((arg1*m-arg2*m)/m).toFixed(n);
         },
-        submitOrder: function(){
+        submitOrder: function(){// 提交按钮点击
+            var _self = this;
+            if( _self.hanldShouldPayFee<1000){
+                _self.isModelAlert = true;
+                _self.isModelAlertText = '采购金额过小,将扣除500采美豆。建议您使用微信扫描 以下二维码,进入采美旗下“呵呵商城”小程序购买小额 商品。';
+            }else{
+                _self.handleClickOrderSubmitMit()
+            }
+        },
+        handleClickOrderSubmitMit:function () {// 提交订单
             var _self = this;
+            _self.isModelAlert = false;
             if(_self.submitLoading){return false;}
             if(!_self.confirmParam.addressId){
                 CAIMEI.dialog('请先添加收货地址~');
@@ -726,7 +731,7 @@ var shoppingConfirm = new Vue({
                 _self.confirmParam.orderInvoice = _self.orderInvoice;
             }
             var hanldPostageFlag =
-            _self.confirmParam.payInfo.postage = parseInt(_self.hanldPostage).toFixed(2);
+                _self.confirmParam.payInfo.postage = parseInt(_self.hanldPostage).toFixed(2);
             _self.confirmParam.payInfo.postageFlag = parseInt(_self.hanldPostageFlag);
             _self.confirmParam.payInfo.orderShouldPayFee = parseFloat(_self.hanldShouldPayFee).toFixed(2);
             _self.confirmParam.payInfo = JSON.stringify(_self.confirmParam.payInfo);
@@ -743,27 +748,47 @@ var shoppingConfirm = new Vue({
                         window.location.href = '/pay/success.html?pageType=www&type=success&payAmount='+data.payTotalFee;
                     }else{//余额抵扣部分订单金额或者未支付的
                         var order = {
-                                orderId:data.orderId,
-                                orderNo:data.orderNo,
-                                orderMark:data.orderMark,
-                                payableAmount:data.payableAmount
-                            };
+                            orderId:data.orderId,
+                            orderNo:data.orderNo,
+                            orderMark:data.orderMark,
+                            payableAmount:data.payableAmount
+                        };
                         CAIMEI.Storage.removeItem('confirmOrderInfo');
                         CAIMEI.Storage.setItem('confirmOrderInfo',JSON.stringify({data:order}));
                         window.location.href = '/pay/caimei-paycash.html?type=confirm&orderId='+data.orderId;
                     }
+                }else if(res.code === -3){
+                    _self.isModelAlert = true;
+                    _self.isShowConfirm = false;
+                    _self.submitLoading = false;
+                    _self.isModelAlertText = '您已有2个采购金额过小的订单,本次不能再进行采购。您可使用微信扫描以下二维码,进入采美旗下“呵呵商城”小程序购买小额商品。';
+                    _self.formatConfirmParam();
+                }else if(res.code === -4){
+                    _self.isModelAlert = true;
+                    _self.isShowConfirm = false;
+                    _self.submitLoading = false;
+                    _self.isModelAlertText = '采美豆不足,不能提交订单。您可使用微信扫描以下二维码,进入采美旗下“呵呵商城”小程序购买小额商品。';
+                    _self.formatConfirmParam();
                 }else{
                     CAIMEI.Alert(res.msg,'确定',true, function(){
                         setTimeout(function(){
                             _self.submitLoading = false;
-                            _self.confirmParam.payInfo = JSON.parse(_self.confirmParam.payInfo);
-                            _self.confirmParam.orderInfo = JSON.parse(_self.confirmParam.orderInfo);
-                            _self.confirmParam.orderInvoice = JSON.parse(_self.confirmParam.orderInvoice);
+                            _self.formatConfirmParam();
                         },500);
                     });
                 }
             });
         },
+        formatConfirmParam:function(){// 还原提交订单参数格式
+            var _self = this;
+            _self.confirmParam.payInfo = JSON.parse(_self.confirmParam.payInfo);
+            _self.confirmParam.orderInfo = JSON.parse(_self.confirmParam.orderInfo);
+            _self.confirmParam.orderInvoice = JSON.parse(_self.confirmParam.orderInvoice);
+        },
+        handleCloseModel:function () {
+            this.isModelAlert = false;
+            this.isShowConfirm= true;
+        },
         getProductIds: function(list){// 获取订单商品id列表
             var productIds = [];
             list.forEach(function(supplier){
@@ -778,27 +803,28 @@ var shoppingConfirm = new Vue({
     created: function () {
         var _self = this;
         var urlType = getUrlParam("type") ? getUrlParam("type")*1 : "";
-        console.log('urlType',urlType)
         if(globalUserData){
-            _self.userId = _self.productParam.userId = _self.cartParam.userId = _self.postageParam.userId =   globalUserData.userId;
+            _self.userId = _self.productParam.userId = _self.cartParam.userId = _self.postageParam.userId = _self.supportParm.userId =   globalUserData.userId;
             _self.confirmParam.clubId = globalUserData.clubId
             _self.userIdentity = globalUserData.identity;
             _self.userToken = globalUserData.token;
             // type:(1购物车提交[对应表cm_cart],2直接购买提交, 3协销下单)
             if(urlType === 1) {//购物车提交
                 _self.confirmParam.cartType = 1;
-                // _self.cartParam.productIds = _self.postageParam.productIds = _self.productIds = window.localStorage.getItem("shoppingProductIds");
                 _self.cartParam.productIds =  _self.productIds = window.localStorage.getItem("shoppingProductIds");
                 // 获取列表数据
                 _self.getCartCreateOrderInfo();
             }else if(urlType === 2){//立即购买
                 _self.confirmParam.cartType = 2;
-                // _self.productParam.productId = _self.postageParam.productIds = _self.productIds = getUrlParam("productId");
                 _self.productParam.productId =  _self.productIds = getUrlParam("productId");
                 _self.productParam.productCount = getUrlParam("count");
                 if(_self.productParam.productId && _self.productParam.productCount) {
                     _self.getProductCreateOrderInfo();
                 }
+            }else if(urlType === 3){// 组合商品立即购买
+                _self.confirmParam.cartType = 2;
+                _self.supportParm.productInfo = CAIMEI.Storage.getItem("KEY_SUPPORE");
+                _self.OrderClubProductSupporting()
             }
         }
     },

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

@@ -50,7 +50,7 @@ var livePage = new Vue({
         },
         getLiveArticle: function(){
             var _self = this;
-            $.getJSON(spiServer+"/search/query/article/type" ,{
+            $.getJSON(coreServer+"/commodity/search/query/article/type" ,{
                 id: 8,
                 pageSize: 4,
                 pageNum: 1

+ 10 - 25
src/main/resources/static/js/single-page/topic.js

@@ -1,46 +1,31 @@
 var topicPage = new Vue({
     el: "#topicPage",
     data: {
-        pageType: 0,
+        pageId: 0,
         floorDatas: [],
         buttonName:'',
         buttonLink:''
-    },
-    computed: {
-
     },
     methods: {
         getFloorDatas: function () {
             var _self = this;
-            if(_self.pageType ===0){return;}
-            PagesApi.GetPageTopicData({type: _self.pageType},function(response){
-                if(response.code === 0){
-                    _self.floorDatas = response.data;
-                }else{
+            if(_self.pageId ===0){return;}
+            PagesApi.GetPageTopicData({pageId: _self.pageId, source: 1}, function (response) {
+                if (response.code === 0) {
+                    var data = response.data;
+                    _self.floorDatas = data.floorList;
+                    _self.buttonLink = data.page.buttonLink;
+                    _self.buttonName = data.page.buttonName;
+                } else {
                     CAIMEI.Alert(response.msg, '确定', false);
                 }
             });
         },
-        GetPageTopicBanner:function(){
-            var _self = this;
-            PagesApi.GetPageTopicInfoData({type: _self.pageType},function(response){
-                if(response.code === 0){
-                    _self.buttonLink = response.data.buttonLink;
-                    _self.buttonName = response.data.buttonName;
-                }else{
-                    CAIMEI.Alert(response.msg, '确定', false);
-                }
-            });
-        }
     },
     created: function () {
         var paramsArr = window.location.pathname.split(".")[0].split("-");
-        this.pageType  =  paramsArr.length>=1 ? paramsArr[1] : '';
+        this.pageId  =  paramsArr.length>=1 ? paramsArr[1] : '';
         // 获取列表数据
         this.getFloorDatas();
-        this.GetPageTopicBanner();
-    },
-    mounted: function () {
-        var _self = this;
     }
 });

+ 2 - 2
src/main/resources/static/js/supplier-center/setting/information.js

@@ -405,7 +405,7 @@
         },
         getcity:function(event){//加载市
            var _this = this;
-            PublicApi.GetCity({ provinceId: _this.params.provinceId },function(response){
+            PublicApi.GetCity({ type:1, parentId: _this.params.provinceId },function(response){
                  if(response.code == 0 ){
                     _this.cityArray = response.data;
                      _this.params.cityId = event.target.value;
@@ -421,7 +421,7 @@
         },
          getcTown:function(event){
             var _this = this;
-            PublicApi.GetTown({cityId:_this.params.cityId},function(response){
+            PublicApi.GetTown({ type:2, parentId:_this.params.cityId},function(response){
                 if(response.code == 0 ){
                     _this.townArray = response.data;
                     _this.params.townId = event.target.value;

+ 42 - 37
src/main/resources/static/js/supplier-center/shop/decoration.js

@@ -5,9 +5,9 @@ var decoration = new Vue({
         iconflag:true,
         bgflag:false,
         logoShow:false,
-        formData:new FormData(),
         params:{
-            shopID:'',
+            id: '',
+            shopId:'',
             title:'',
             link:'',
             info:'',
@@ -18,15 +18,16 @@ var decoration = new Vue({
         list:[],
     },
     methods:{
-          uploadlogo:function () { //上传图片
+        uploadlogo: function () { //上传图片
             var _this = this;
             var inputDOM = _this.$refs.images;
             var file = inputDOM.files;
-            _this.formData.append('file', file[0]);
-            SupplierApi.uploadimg(_this.formData,function(response){
-               _this.params.image = response.data;
-               _this.logoShow = true;
-               _this.iconflag = false;
+            var formData = new FormData();
+            formData.append('file', file[0]);
+            SupplierApi.uploadimg(formData, function (response) {
+                _this.params.image = response.data;
+                _this.logoShow = true;
+                _this.iconflag = false;
                 event.target.value = '';
             });
         },
@@ -49,15 +50,16 @@ var decoration = new Vue({
             if(_this.params.image==''){
                 CAIMEI.dialog('请上传广告图片')
             }else {
-            console.log(_this.params)
-                SupplierApi.ShopBanner(_this.params,function (res) {
-                   CAIMEI.dialog('提交成功');
+                console.log(_this.params);
+                SupplierApi.ShopBanner(_this.params, function (res) {
+                    debugger
+                    CAIMEI.dialog('提交成功');
                     location.reload()
                 })
             }
         },
-        editpictures:function(item){
-             var _this = this;
+        editpictures: function (item) {
+            var _this = this;
             _this.name = '编辑主页广告图';
             _this.shopBannerId = item.shopBannerID;
             _this.bgflag = true;
@@ -65,28 +67,40 @@ var decoration = new Vue({
             _this.params.link = item.link;
             _this.params.info = item.info;
             _this.params.image = item.image;
-            if(item.image !=''){
-            _this.params.image=item.image;
-            _this.logoShow = true;
-            _this.iconflag = false;
-             }else {
+            _this.params.id = item.id;
+            if (item.image != '') {
+                _this.params.image = item.image;
+                _this.logoShow = true;
+                _this.iconflag = false;
+            } else {
                 _this.logoShow = false;
                 _this.iconflag = true;
-             }
+            }
         },
         deletepictures:function(item){
             var _this = this;
-            var shopBannerId = item.shopBannerID;
-            console.log(shopBannerId)
+            var id = item.id;
             CAIMEI.Modal('您确定要删除么?','取消','确定',function () {
-               SupplierApi.deleteShopBanner({shopBannerId:shopBannerId},function (res) {
-                    if(res.code==0){
+                SupplierApi.deleteShopBanner({id: id}, function (res) {
+                    if (res.code == 0) {
                         CAIMEI.dialog('删除成功');
                         location.reload()
                     }
-               })
+                })
             })
         },
+        // 获取广告图片列表
+        fetchDressUpList: function () {
+            var _self = this;
+            SupplierApi.dressUpList({shopId: _self.params.shopId}, function (res) {
+                if (res.code == 0) {
+                    console.log(res);
+                    if (res.data.length > 0) {
+                        _self.list = res.data;
+                    }
+                }
+            });
+        },
         close:function () {
             var _this = this;
             _this.bgflag = false;
@@ -95,22 +109,13 @@ var decoration = new Vue({
             _this.params.info = '';
             _this.params.image = '';
         }
-
     },
     mounted:function () {
         var _self = this;
-         if(globalUserData){
-              _self.params.shopID = globalUserData.shopId;
-
-            }
-        SupplierApi.dressUpList({shopId:_self.params.shopID},function (res) {
-            if(res.code==0){
-                console.log(res)
-                if(res.data.length>0){
-                _self.list =res.data;
-                }
-            }
-        })
+        if (globalUserData) {
+            _self.params.shopId = globalUserData.shopId;
+        }
+        this.fetchDressUpList();
         $('.navLayout').find('.navList').removeClass("on").find('.con').hide().find('a').removeClass("on");
         $('.navLayout').find('.navList').eq(1).addClass("on").find('.con').show().find('a').eq(1).addClass("on");
     }

+ 4 - 4
src/main/resources/static/js/supplier-center/shop/release.js

@@ -967,7 +967,7 @@ var releaseContainer = new Vue({
             _this.vShow_detailInfoEditor = false;
             ClassicEditor.create(document.querySelector('#detailInfoEditor'), {
                 ckfinder: {
-                    uploadUrl: _this.NODE_ENV_BASE_URL+'/formData/ckeditorImage'
+                    uploadUrl: _this.NODE_ENV_BASE_URL+'/tools/image/upload/ckeditor'
                 }
             }).then(function(editor) {
                 window.detailInfoEditor = editor;
@@ -983,7 +983,7 @@ var releaseContainer = new Vue({
             _this.vShow_orderInfoEditor = false;
             ClassicEditor.create(document.querySelector('#orderInfoEditor'), {
                 ckfinder: {
-                    uploadUrl: _this.NODE_ENV_BASE_URL+'/formData/ckeditorImage'
+                    uploadUrl: _this.NODE_ENV_BASE_URL+'/tools/image/upload/ckeditor'
                 }
             }).then(function(editor) {
                 window.orderInfoEditor = editor;
@@ -999,7 +999,7 @@ var releaseContainer = new Vue({
             _this.vShow_orderInfoEditor = false;
             ClassicEditor.create(document.querySelector('#severInfoEditor'), {
                 ckfinder: {
-                    uploadUrl: _this.NODE_ENV_BASE_URL+'/formData/ckeditorImage'
+                    uploadUrl: _this.NODE_ENV_BASE_URL+'/tools/image/upload/ckeditor'
                 }
             }).then(function(editor) {
                 window.severInfoEditor = editor;
@@ -1179,7 +1179,7 @@ var releaseContainer = new Vue({
     },
     mounted: function () {
         var _this = this;
-        var NODE_ENV_BASE_URL = $('#spiServer').val();
+        var NODE_ENV_BASE_URL = $('#coreServer').val();
         _this.NODE_ENV_BASE_URL = NODE_ENV_BASE_URL;
         if(globalUserData){
             _this.releaseParams.shopId = globalUserData.shopId;

+ 2 - 2
src/main/resources/static/js/supplier/index.js

@@ -46,7 +46,7 @@ var supplierHome = new Vue({
         },
         getShopInfo: function(){
             var _self = this;
-            $.getJSON(spiServer + "/supplier/home/detail",{supplierId: this.params.id}).done(function (r) {
+            $.getJSON(coreServer + "/user/shop/home/data",{shopId: this.params.id}).done(function (r) {
                 if (r.code === 0 && r.data) {
                     _self.supplierInfo = r.data;
                 }
@@ -54,7 +54,7 @@ var supplierHome = new Vue({
         },
         getBanners: function(){
             var _self = this;
-            $.getJSON(spiServer + "/supplier/home/images",{supplierId: this.params.id}).done(function (r) {
+            $.getJSON(coreServer + "/user/shop/home/images",{shopId: this.params.id}).done(function (r) {
                 if (r.code === 0 && r.data) {
                    _self.supplierBanner = r.data;
                     _self.supplierBanner = r.data;

+ 3 - 1
src/main/resources/static/js/user-center/account/beans.js

@@ -71,7 +71,9 @@ var orderPage = new Vue({
                     11:'退款回收',
                     12:'登录奖励',
                     13:'查看商品资料',
-                    14:'购买超级会员'
+                    14:'购买超级会员',
+                    15:'系统扣除',
+                    16:'系统退回',
                 };
             Object.keys(stateTextObject).forEach(function(key){
                 if(key == state){

+ 3 - 4
src/main/resources/static/js/user-center/collection/collection.js

@@ -142,8 +142,6 @@ var orderPage = new Vue({
         },
         hanldBuyCart:function (pros,type) {// 1 加入购物车 2 立即购买
             var _self = this;
-            console.log('pros',pros)
-            console.log('type',type)
             if(type == 1) {
                 _self.shoppingCart(pros);
             }else{
@@ -155,13 +153,14 @@ var orderPage = new Vue({
             var checkedList = [];
             if(!_self.isProductChecked){
                 CAIMEI.dialog('请先选择商品',false);
+                return;
             }
             _self.listData.forEach((el)=>{
                 if(el.isChecked){
-                    checkedList.push(el.productId);
+                    checkedList.push({ productId:el.productId , productCount: el.minBuyNumber });
                 }
             })
-            ShoppingApi.ShoppingAddCarts({userId:_self.listQuery.userId,productIds:checkedList.join(",")},function(response){
+            ShoppingApi.ShoppingAddCarts({userId:_self.listQuery.userId, productInfo:JSON.stringify(checkedList)},function(response){
                 if(response.code === 0){
                     globalHead.getHeadCart(_self.listQuery.userId);
                     $.confirm({

+ 22 - 9
src/main/resources/static/js/user-center/dashboard.js

@@ -8,7 +8,6 @@ var helpSuggestion = new Vue({
         degree:'',
         userInfo:{},
         vipInfo: {},
-        formData:new FormData(),
         unReadMessageCount:'',// 消息数
         confirmedCount:'',// 待確認數量
         paymentCount:'',// 待付款
@@ -69,23 +68,35 @@ var helpSuggestion = new Vue({
                     var data = response.data;
                     _self.userInfo = data.user;
                     _self.degree = data.degree;
+                    _self.productList = data.homePageAdvertiseList;
+                    _self.newsList = data.homePageInfoList;
+                    _self.couponNum = data.couponNum;
+                    _self.isRequset = false;
+                }else{
+                    CAIMEI.Alert(response.msg, '确定', false);
+                    _self.isRequset = false;
+                }
+            })
+        },
+        // 获取订单数量
+        GetQueryOrderNum: function(){
+            var _self = this;
+            OrderApi.GetQueryOrderNum({userId: _self.userId}, function (response) {
+                if (response.code === 0) {
+                    var data = response.data;
                     _self.unReadMessageCount = _self.showBadge(data.unReadMessageCount);
                     _self.confirmedCount = _self.showBadge(data.confirmedCount);
                     _self.paymentCount = _self.showBadge(data.paymentCount);
                     _self.waitShipmentsCount = _self.showBadge(data.waitShipmentsCount);
                     _self.shipmentsCount = _self.showBadge(data.shipmentsCount);
                     _self.salesReturnCount = _self.showBadge(data.salesReturnCount);
-                    _self.productList = data.homePageAdvertiseList;
-                    _self.newsList = data.homePageInfoList;
-                    _self.couponNum = data.couponNum;
-                    _self.isRequset = false;
-                }else{
+                } else {
                     CAIMEI.Alert(response.msg, '确定', false);
                     _self.isRequset = false;
                 }
             })
         },
-        GetUserClubHome(){
+        GetUserClubHome: function(){
             var _self = this;
             UserApi.GetUserClubHome({userId:_self.userId}, function(response){
                 console.log(response);
@@ -101,8 +112,9 @@ var helpSuggestion = new Vue({
             var _self = this;
             var inputDOM = _self.$refs.clubUseLogo;
             var file = inputDOM.files;
-            _self.formData.append('file', file[0]);
-            PublicApi.uploadimg(_self.formData,function(response){
+            var formData = new FormData();
+            formData.append('file', file[0]);
+            PublicApi.uploadimg(formData, function (response) {
                 _self.userInfo.image = response.data;
                 event.target.value = '';
                 UserApi.UserPuploadAvatar({userId:_self.userId,image:response.data},function(res){
@@ -156,6 +168,7 @@ var helpSuggestion = new Vue({
             _self.userId = globalUserData.userId;
             _self.GetUserClubHome();
             _self.GetMyPcCenterInfo();
+            _self.GetQueryOrderNum();
             _self.GetInitBeansInfo();
             _self.isShowBeansAlet = false;
         }

+ 3 - 3
src/main/resources/static/js/user-center/message.js

@@ -77,10 +77,10 @@ var helpSuggestion = new Vue({
         checkedItemFn:function(item){ //单选
             var _self = this;
                     if(event.target.checked){
-                         _self.checklist.push(item.messageID);
+                         _self.checklist.push(item.messageId);
                          _self.msgId = _self.checklist.toString()+','
                     }else {
-                      _self.checklist.splice(_self.checklist.indexOf(item.messageID), 1);
+                      _self.checklist.splice(_self.checklist.indexOf(item.messageId), 1);
                       _self.msgId = _self.checklist.toString()+','
                     }
                     if(_self.checklist.length==_self.messagesList.length){
@@ -97,7 +97,7 @@ var helpSuggestion = new Vue({
                     _self.checklist = [];
                     _self.messagesList.forEach(function (item) {
                              item.check = true;
-                             _self.checklist.push(item.messageID);
+                             _self.checklist.push(item.messageId);
                              _self.msgId = _self.checklist.toString()+','
                         })
                 }else{

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

@@ -99,21 +99,21 @@ var orderPage = new Vue({
         }
     },
     methods: {
-    hanldConfirmFn:function(userId,orderId){//确认打款供应商
-         var _self = this;
-            CAIMEI.Modal('确定委托采美平台打款给供应商吗?确定之前请务必确保货品完好?','取消','确定',function () {
-                 OrderApi.confirmpayment({orderID:orderId,userId:userId},function(response){
-                    if(response.code == 0){
-                        CAIMEI.dialog('确认成功',true,function () {
-                            _self.GetQueryOrderListData();
-                        });
+        hanldConfirmFn:function(userId,orderId){//确认打款供应商
+             var _self = this;
+                CAIMEI.Modal('确定委托采美平台打款给供应商吗?确定之前请务必确保货品完好?','取消','确定',function () {
+                     OrderApi.confirmpayment({orderID:orderId,userId:userId},function(response){
+                        if(response.code == 0){
+                            CAIMEI.dialog('确认成功',true,function () {
+                                _self.GetQueryOrderListData();
+                            });
 
-                    }else{
-                        CAIMEI.Alert(response.msg, '确定', false);
-                    }
+                        }else{
+                            CAIMEI.Alert(response.msg, '确定', false);
+                        }
+                    })
                 })
-            })
-    },
+        },
         toPagination: function (pageNum) {//点击切换分页
             if (pageNum <= this.pageTotal) {
                 this.listQuery.pageNum = pageNum;
@@ -167,6 +167,7 @@ var orderPage = new Vue({
                         _self.orderList = data.list;
                         _self.listRecord = data.total;
                     }
+                    _self.GetQueryOrderNumInfo();
                     _self.isRequset = false;
                 }else{
                     CAIMEI.Alert(response.msg, '确定', false);
@@ -375,7 +376,6 @@ var orderPage = new Vue({
             _self.listQuery.userId = this.userId;
             _self.orderTabBarIndex = this.listQuery.orderState;
             _self.GetQueryOrderListData();
-            _self.GetQueryOrderNumInfo();
         }
         $('.navLayout').find('.navList').removeClass("on").find('.con').hide().find('a').removeClass("on");
         $('.navLayout').find('.navList').eq(0).addClass("on").find('.con').show().find('a').eq(0).addClass("on");

+ 2 - 2
src/main/resources/static/js/user-center/repair/form-user.js

@@ -100,7 +100,7 @@ var addFormPage = new Vue({
         },
         GetCtiyFn: function(){//获取市
             var _self = this;
-            PublicApi.GetCity({ provinceId: _self.addressfrom.province },function(response){
+            PublicApi.GetCity({ type:1, parentId: _self.addressfrom.province },function(response){
                 if(response.code == 0 ){
                     _self.cityArray = response.data;
                 }else{
@@ -110,7 +110,7 @@ var addFormPage = new Vue({
         },
         GetTownFn: function(){//获取区
             var _self = this;
-            PublicApi.GetTown({ cityId: _self.addressfrom.city },function(response){
+            PublicApi.GetTown({ type:2, parentId: _self.addressfrom.city },function(response){
                 if(response.code == 0 ){
                     _self.townArray = response.data;
                 }else{

+ 6 - 6
src/main/resources/static/js/user-center/repair/repair.js

@@ -80,17 +80,17 @@ var repairForm = new Vue({
                 event.target.value = '';
             });
         },
-         removeImagesFn: function(index){//删除图片
+        removeImagesFn: function (index) {//删除图片
             var _this = this;
-            _this.productImagesList.splice(index,1);
-            _this.postData.instrumentImages =_this.productImagesList.toString()+',';
-         },
+            _this.productImagesList.splice(index, 1);
+            _this.postData.instrumentImages = _this.productImagesList.toString() + ',';
+        },
          getcity:function(event){//加载市
            var _this = this;
            var donClass = '#cityname';
            var domCityname =  document.querySelector(donClass);
            _this.postData.cityName = domCityname.options[domCityname.selectedIndex].text;
-            PublicApi.GetCity({ provinceId: _this.provinceID },function(response){
+            PublicApi.GetCity({ type:1, parentId: _this.provinceID },function(response){
                  if(response.code == 0 ){
                     _this.cityArray = response.data;
                      _this.cityID = event.target.value;
@@ -107,7 +107,7 @@ var repairForm = new Vue({
             var donClass = '#townname';
            var domTownname =  document.querySelector(donClass);
            _this.postData.townName = domTownname.options[domTownname.selectedIndex].text;
-            PublicApi.GetTown({cityId:_this.cityID},function(response){
+            PublicApi.GetTown({ type:2, parentId:_this.cityID},function(response){
                 if(response.code == 0 ){
                     _this.townArray = response.data;
                     _this.townID = event.target.value;

+ 2 - 2
src/main/resources/static/js/user-center/setting/information.js

@@ -422,7 +422,7 @@ var informationPage = new Vue({
         },
         GetCtiyFn: function(){//获取市
             var _self = this;
-            PublicApi.GetCity({ provinceId: _self.addressfrom.provinceId },function(response){
+            PublicApi.GetCity({ type:1, parentId: _self.addressfrom.provinceId },function(response){
                 if(response.code == 0 ){
                     _self.cityArray = response.data;
                 }else{
@@ -432,7 +432,7 @@ var informationPage = new Vue({
         },
         GetTownFn: function(){//获取区
             var _self = this;
-            PublicApi.GetTown({ cityId: _self.addressfrom.cityId },function(response){
+            PublicApi.GetTown({ type:2, parentId: _self.addressfrom.cityId },function(response){
                 if(response.code == 0 ){
                     _self.townArray = response.data;
                 }else{

+ 4 - 4
src/main/resources/static/js/user-center/setting/upgrade.js

@@ -362,7 +362,7 @@ var upgradePage = new Vue({
         // },
         // GetCtiyFn: function(){//获取市
         //     var _self = this;
-        //     PublicApi.GetCity({ provinceId: _self.addressfrom.provinceID },function(response){
+        //     PublicApi.GetCity({ type:1, parentId: _self.addressfrom.provinceID },function(response){
         //         if(response.code == 0 ){
         //             _self.cityArray = response.data;
         //         }else{
@@ -372,7 +372,7 @@ var upgradePage = new Vue({
         // },
         // GetTownFn: function(){//获取区
         //     var _self = this;
-        //     PublicApi.GetTown({ cityId: _self.addressfrom.cityID },function(response){
+        //     PublicApi.GetTown({ type:2, parentId: _self.addressfrom.cityID },function(response){
         //         if(response.code == 0 ){
         //             _self.townArray = response.data;
         //         }else{
@@ -395,7 +395,7 @@ var upgradePage = new Vue({
         },
         getcity:function(event){//加载市
            var _this = this;
-            PublicApi.GetCity({ provinceId: _this.clubUpgradeUser.provinceId },function(response){
+            PublicApi.GetCity({ type:1, parentId: _this.clubUpgradeUser.provinceId },function(response){
                  if(response.code == 0 ){
                     _this.cityArray = response.data;
                      _this.clubUpgradeUser.cityId = event.target.value;
@@ -411,7 +411,7 @@ var upgradePage = new Vue({
         },
          getcTown:function(event){
             var _this = this;
-            PublicApi.GetTown({cityId:_this.clubUpgradeUser.cityId},function(response){
+            PublicApi.GetTown({ type:2, parentId:_this.clubUpgradeUser.cityId},function(response){
                 if(response.code == 0 ){
                     _this.townArray = response.data;
                     _this.clubUpgradeUser.townId = event.target.value;

+ 1 - 1
src/main/resources/templates/account/components/header.html

@@ -10,6 +10,6 @@
             <p class="accountLogin">已有账号?请直接<a href="/login.html" rel="nofollow">登录</a></p>
         </div>
     </div>
-    <input type="hidden" th:value="${spiServer}" id="spiServer"><input type="hidden" th:value="${coreServer}" id="coreServer">
+    <input type="hidden" th:value="${coreServer}" id="coreServer">
     <input type="hidden" th:value="${agent}" id="userAgent">
 </header>

+ 3 - 3
src/main/resources/templates/account/register-club.html

@@ -93,15 +93,15 @@
                     <div class="address">
                         <select name="provinceID" id="cProvince" @change="ChangeProvince">
                             <option value="" >请选择</option>
-                            <option v-for="(item ,index) in ProvinceList" :key="index" :value='item.provinceID' >{{item.name}}</option>
+                            <option v-for="(item ,index) in ProvinceList" :key="index" :value='item.id' >{{item.name}}</option>
                         </select>
                         <select name="cityID" id="cCity" @change="ChangeGetcity($event)" >
                             <option value="">请选择</option>
-                            <option v-for="(item ,index) in cityArray" :key="index" :value="item.cityID" >{{item.name}}</option>
+                            <option v-for="(item ,index) in cityArray" :key="index" :value="item.id" >{{item.name}}</option>
                         </select>
                         <select name="townID" id="cTown" @change="ChangeGetcTown($event)" needverify>
                             <option value="">请选择</option>
-                            <option v-for="(item ,index) in townArray" :key="index" :value="item.townID"  >{{item.name}}</option>
+                            <option v-for="(item ,index) in townArray" :key="index" :value="item.id"  >{{item.name}}</option>
                         </select>
                         <textarea placeholder="请输入您的详细联系地址"  v-model="clubUpgradeUser.address" @blur="blurHandle($event)" needverify></textarea>
                         <span class="errTips icon mIcon" tips="请输入正确的联系地址"></span>

+ 3 - 3
src/main/resources/templates/account/register-supplier.html

@@ -91,15 +91,15 @@
                         <p><em>*</em>联系地址:</p>
                         <select name="provinceID" id="cProvince" @change="ChangeProvince">
                             <option value="">请选择</option>
-                            <option v-for="(item ,index) in ProvinceList" :key="index" :value='item.provinceID' >{{item.name}}</option>
+                            <option v-for="(item ,index) in ProvinceList" :key="index" :value='item.id' >{{item.name}}</option>
                         </select>
                         <select name="cityID" id="cCity" @change="ChangeGetcity($event)" >
                             <option value="">请选择</option>
-                            <option v-for="(item ,index) in cityArray" :key="index" :value="item.cityID" >{{item.name}}</option>
+                            <option v-for="(item ,index) in cityArray" :key="index" :value="item.id" >{{item.name}}</option>
                         </select>
                         <select name="townID" id="cTown" @change="ChangeGetcTown($event)">
                             <option value="">请选择</option>
-                            <option v-for="(item ,index) in townArray" :key="index" :value="item.townID"  >{{item.name}}</option>
+                            <option v-for="(item ,index) in townArray" :key="index" :value="item.id"  >{{item.name}}</option>
                         </select>
                         <span class="errTips icon mIcon"></span>
                     </div>

+ 3 - 3
src/main/resources/templates/account/supplier-information.html

@@ -47,15 +47,15 @@
                         <p><em>*</em>联系地址:</p>
                         <select name="provinceID" id="cProvince" @change="ChangeProvince"  v-model="supplierUser.provinceId">
                             <option value="0">请选择</option>
-                            <option v-for="(item ,index) in ProvinceList" :key="index" :value='item.provinceID'>{{item.name}}</option>
+                            <option v-for="(item ,index) in ProvinceList" :key="index" :value='item.id'>{{item.name}}</option>
                         </select>
                         <select name="cityID" id="cCity" @change="ChangeGetcity($event)" v-model="supplierUser.cityId">
                             <option value="0">请选择</option>
-                            <option v-for="(item ,index) in cityArray" :key="index" :value="item.cityID" >{{item.name}}</option>
+                            <option v-for="(item ,index) in cityArray" :key="index" :value="item.id" >{{item.name}}</option>
                         </select>
                         <select name="townID" id="cTown" @change="ChangeGetcTown($event)" v-model="supplierUser.townId">
                             <option value="0">请选择</option>
-                            <option v-for="(item ,index) in townArray" :key="index" :value="item.townID"  >{{item.name}}</option>
+                            <option v-for="(item ,index) in townArray" :key="index" :value="item.id"  >{{item.name}}</option>
                         </select>
                         <textarea placeholder="请输入您的详细联系地址"  v-model="supplierUser.address" @blur="blurHandle($event)" needverify></textarea>
                         <i class="checked icon mIcon"></i>

+ 0 - 1
src/main/resources/templates/article/components/article-header.html

@@ -24,7 +24,6 @@
     <input type="hidden" th:value="${labelId}" id="labelId">
     <input type="hidden" th:value="${typeId}" id="typeId">
     <input type="hidden" th:value="${pageNum}" id="pageNum">
-    <input type="hidden" th:value="${spiServer}" id="spiServer">
     <input type="hidden" th:value="${coreServer}" id="coreServer">
     <input type="hidden" th:value="${agent}" id="userAgent">
 </header>

+ 0 - 1
src/main/resources/templates/components/header.html

@@ -196,7 +196,6 @@
             </div>
         </div>
     </div>
-    <input type="hidden" th:value="${spiServer}" id="spiServer">
     <input type="hidden" th:value="${coreServer}" id="coreServer">
     <input type="hidden" th:value="${agent}" id="userAgent">
 </header>

+ 0 - 1
src/main/resources/templates/document/beauty-archive.html

@@ -8,7 +8,6 @@
     <link th:href="@{/css/document/beauty-archive.css(v=${version})}" rel="stylesheet" type="text/css">
 </head>
 <body>
-<input type="hidden" th:value="${spiServer}" id="spiServer">
 <input type="hidden" th:value="${coreServer}" id="coreServer">
 
 <div id="beautyArchive" v-cloak>

+ 1 - 1
src/main/resources/templates/document/details.html

@@ -25,7 +25,7 @@
                 </div>
             </div>
         </div>
-        <input type="hidden" th:value="${spiServer}" id="spiServer"><input type="hidden" th:value="${coreServer}" id="coreServer">
+        <input type="hidden" th:value="${coreServer}" id="coreServer">
         <input type="hidden" th:value="${agent}" id="userAgent">
     </div>
     <div class="document-content">

+ 1 - 1
src/main/resources/templates/document/list.html

@@ -24,7 +24,7 @@
                 </div>
             </div>
         </div>
-        <input type="hidden" th:value="${spiServer}" id="spiServer"><input type="hidden" th:value="${coreServer}" id="coreServer">
+        <input type="hidden" th:value="${coreServer}" id="coreServer">
         <input type="hidden" th:value="${agent}" id="userAgent">
     </div>
     <div class="document-content clear">

+ 1 - 1
src/main/resources/templates/document/login.html

@@ -18,7 +18,7 @@
                 <span>采美资料库</span>
             </div>
         </div>
-        <input type="hidden" th:value="${spiServer}" id="spiServer"><input type="hidden" th:value="${coreServer}" id="coreServer">
+        <input type="hidden" th:value="${coreServer}" id="coreServer">
         <input type="hidden" th:value="${agent}" id="userAgent">
     </header>
     <div class="login-contailer">

+ 1 - 1
src/main/resources/templates/document/more-content.html

@@ -24,7 +24,7 @@
                 </div>
             </div>
         </div>
-        <input type="hidden" th:value="${spiServer}" id="spiServer"><input type="hidden" th:value="${coreServer}" id="coreServer">
+        <input type="hidden" th:value="${coreServer}" id="coreServer">
         <input type="hidden" th:value="${agent}" id="userAgent">
     </div>
     <div class="document-content">

+ 1 - 1
src/main/resources/templates/error/404.html

@@ -89,7 +89,7 @@
 <template th:replace="components/footer"></template>
 <template th:replace="components/foot-link"></template>
 <script type="text/javascript">
-    if(!($('#spiServer').val() && $('#spiServer').val().length>0)){
+    if(!($('#coreServer').val() && $('#coreServer').val().length>0)){
         window.location.href = '/404.html';
     }
 </script>

+ 3 - 3
src/main/resources/templates/flea-market/form.html

@@ -130,17 +130,17 @@
                             <i class="province icon mIcon selected"></i>
                         <select class="address-input reg-select province" name="provinceID" id="cProvince" @change="province" >
                             <option value="" >请选择</option>
-                            <option v-for="(item ,index) in provinceArray" :key="index" :value='item.provinceID' >{{item.name}}</option>
+                            <option v-for="(item ,index) in provinceArray" :key="index" :value='item.id' >{{item.name}}</option>
                         </select>
                         <i class="cCity icon mIcon selected"></i>
                         <select class="address-input reg-select city" name="cityID" id="cCity" @change="getcity($event)" >
                             <option value="" >请选择</option>
-                            <option v-for="(item ,index) in cityArray" :key="index" :value="item.cityID" >{{item.name}}</option>
+                            <option v-for="(item ,index) in cityArray" :key="index" :value="item.id" >{{item.name}}</option>
                         </select>
                         <i class="cTown icon mIcon selected"></i>
                         <select class="address-input reg-select town" name="townID" id="cTown" @change="getcTown($event)">
                             <option value="" >请选择</option>
-                            <option v-for="(item ,index) in townArray" :key="index" :value="item.townID"  >{{item.name}}</option>
+                            <option v-for="(item ,index) in townArray" :key="index" :value="item.id"  >{{item.name}}</option>
                         </select>
                         <span class="release-tips errTips icon mIcon" v-show="vShow_TownId">{{fromMessage}}</span>
                             <textarea type="text" id="addressDetails" class="border-grey address-details" v-model="secondParams.address" maxlength="50" placeholder="请填写详细地址,如街道/小区/门牌等" /></textarea>

+ 0 - 62
src/main/resources/templates/help/select.html

@@ -1,62 +0,0 @@
-<!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/select.css(v=${version})}" rel="stylesheet" type="text/css">
-    <template th:replace="components/analysis"></template>
-</head>
-	<body>
-	<!-- 引用头部 -->
-<template th:replace="components/header"></template>
-		<div id="selectClass">
-			<div class="productlist">
-				<table width="300" border="1" cellspacing="0">
-					<tr>
-						<th>商品ID</th>
-						<th>名称</th>
-						<th>供应商</th>
-						<th>状态</th>
-						<th>一级分类</th>
-						<th>二级分类</th>
-						<th>三级分类</th>
-						<th>商品属性</th>
-						<th>新一级</th>
-						<th>新二级</th>
-					</tr>
-					<tr v-for="(item,index) in List">
-						<td>{{item.id}}</td>
-						<td>{{item.name}}</td>
-						<td>{{item.shop}}</td>
-						<td>{{item.stauts}}</td>
-						<td>{{item.bigName}}</td>
-						<td>{{item.smallName}}</td>
-						<td>{{item.tinyName}}</td>
-						<td>
-							<select @change="changeAttr($event)">
-								<option value="0">属性</option>
-								<option value="1">产品</option>
-								<option value="2">仪器</option>
-							</select>
-						</td>
-						<td>
-							<select @change="preserve($event)">
-								<option>一级分类</option>
-							</select>
-						</td>
-						<td>
-							<select @change="SeconPreserve($event)">
-								<option>二类分类</option>
-							</select>
-						</td>
-					</tr>
-				</table>
-			</div>
-		</div>
-<!-- 引入底部 -->
-<template th:replace="components/footer"></template>
-<template th:replace="components/foot-link"></template>
-<script charset="utf-8" type="text/javascript" th:src="@{/js/help/select.js(v=${version})}"></script>
-	</body>
-</html>

+ 1 - 1
src/main/resources/templates/pay/caimei-pay.html

@@ -11,7 +11,7 @@
     <div class="inner clear">
         <div class="logo"><a href="/index.html"><img src="/img/base/index_logo.png" alt=""></a></div>
         <div class="text">生美/医美采购服务平台</div>
-        <input type="hidden" th:value="${spiServer}" id="spiServer"><input type="hidden" th:value="${coreServer}" id="coreServer">
+        <input type="hidden" th:value="${coreServer}" id="coreServer">
         <input type="hidden" th:value="${agent}" id="userAgent">
     </div>
 </div>

+ 1 - 1
src/main/resources/templates/pay/caimei-paymobile.html

@@ -11,7 +11,7 @@
     <div class="inner clear">
         <div class="logo"><a href="/index.html"><img src="/img/base/index_logo.png" alt=""></a></div>
         <div class="text">收银台</div>
-        <input type="hidden" th:value="${spiServer}" id="spiServer"><input type="hidden" th:value="${coreServer}" id="coreServer">
+        <input type="hidden" th:value="${coreServer}" id="coreServer">
         <input type="hidden" th:value="${agent}" id="userAgent">
     </div>
 </div>

+ 1 - 1
src/main/resources/templates/pay/caimei-starspay.html

@@ -11,7 +11,7 @@
     <div class="inner clear">
         <div class="logo"><a href="/index.html"><img src="/img/base/index_logo.png" alt=""></a></div>
         <div class="text">生美/医美采购服务平台</div>
-        <input type="hidden" th:value="${spiServer}" id="spiServer"><input type="hidden" th:value="${coreServer}" id="coreServer">
+        <input type="hidden" th:value="${coreServer}" id="coreServer">
         <input type="hidden" th:value="${agent}" id="userAgent">
     </div>
 </div>

+ 1 - 1
src/main/resources/templates/pay/caimei-success.html

@@ -13,7 +13,7 @@
     <div class="inner clear">
         <div class="logo"><a href="/index.html"><img src="/img/base/index_logo.png" alt=""></a></div>
         <div class="text">收银台</div>
-        <input type="hidden" th:value="${spiServer}" id="spiServer"><input type="hidden" th:value="${coreServer}" id="coreServer">
+        <input type="hidden" th:value="${coreServer}" id="coreServer">
         <input type="hidden" th:value="${agent}" id="userAgent">
     </div>
 </div>

+ 1 - 1
src/main/resources/templates/pay/caimei-wechatpay.html

@@ -10,7 +10,7 @@
 <body>
 <!-- 引用头部 -->
 <div class="head-wrap">
-    <input type="hidden" th:value="${spiServer}" id="spiServer"><input type="hidden" th:value="${coreServer}" id="coreServer">
+    <input type="hidden" th:value="${coreServer}" id="coreServer">
     <input type="hidden" th:value="${agent}" id="userAgent">
 </div>
 <div class="pay-container  clearfix" id="payContainer" :class="isRequest? 'active' : ''">

+ 0 - 1
src/main/resources/templates/pay/caimei-wisapay.html

@@ -11,7 +11,6 @@
     <div class="inner clear">
         <div class="logo"><a href="/index.html"><img src="/img/base/index_logo.png" alt=""></a></div>
         <div class="text">生美/医美采购服务平台</div>
-        <input type="hidden" th:value="${spiServer}" id="spiServer">
         <input type="hidden" th:value="${agent}" id="userAgent">
     </div>
 </div>

+ 143 - 1
src/main/resources/templates/product/detail.html

@@ -243,7 +243,7 @@
                            onclick="_czc.push(['_trackEvent','商品详情','点击','升级查看价格','','Um_Event_ProductUpgrade'])">升级会员查看价格</a>
                     </div>
                     <div class="btnBox"
-                         v-else-if="(priceObj.priceFlag==0 && priceObj.userIdentity!=3) || (priceObj.priceFlag==2 && priceObj.userIdentity==2) || GLOBAL_VIP_FLAG === 1">
+                         v-else-if="(priceObj.priceFlag==0 && priceObj.userIdentity!=3) || (priceObj.priceFlag==2 && priceObj.userIdentity==2) || (priceObj.priceFlag==2&&GLOBAL_VIP_FLAG === 1)">
                         <a href="javascript:void(0);" class="cart icon" @click='addShopCart()' v-if="!isNoneDisabled"
                            onclick="_czc.push(['_trackEvent','商品详情','点击','加入购物车','','Um_Event_ProductAddCart'])">加入购物车</a>
                         <a href="javascript:void(0);" class="buy" @click="buyNowSubmit()" v-if="!isNoneDisabled"
@@ -258,6 +258,148 @@
                 </template>
             </div>
         </div>
+        <!--配套商品区域-->
+        <div class="wrap" v-if="isShowSupportingList && defaultSupportingList.length>0">
+            <div class="product-supporting">
+                <!--PC-->
+                <template v-if="isPC">
+                    <div class="product-supporting-title">配套商品</div>
+                    <div class="product-supporting-content">
+                        <div class="product-supporting-td">
+                            <p class="td-1">商品图片</p>
+                            <p class="td-2">商品名称</p>
+                            <p class="td-3">规格</p>
+                            <p class="td-4">价格</p>
+                            <p class="td-5">采购量</p>
+                            <p class="td-6">选择</p>
+                        </div>
+                        <div class="product-supporting-pro">
+                            <div class="product-supporting-list" v-for="(pros,index) in defaultSupportingList" :class="index == 0 ? 'active' : ''">
+                                <div class="tr tr-1">
+                                    <a :href="'/product-'+pros.productId+'.html'" target="_blank">
+                                        <img :src="pros.image" :alt="pros.name">
+                                    </a>
+                                </div>
+                                <div class="tr tr-2">
+                                    <a :href="'/product-'+pros.productId+'.html'" target="_blank">
+                                        <p v-html="pros.name"></p>
+                                    </a>
+                                </div>
+                                <div class="tr tr-3">
+                                    <p v-html="pros.unit"></p>
+                                </div>
+                                <div class="tr tr-4">
+                                    <div class="price">
+                                        <!--用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构-->
+                                        <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
+                                            <!--0公开价格 1不公开价格 2仅对会员机构公开-->
+                                            <div class="main_price_unde" v-if="pros.priceFlag==1">¥价格未公开</div>
+                                            <!-- 资质机构 || (价格全部机构可见 && 普通机构) || (供应商 && 商品为供应商下的商品) || 超级会员用户 -->
+                                            <template
+                                                    v-else-if="GLOBAL_USER_IDENTITY === 2 || (pros.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && pros.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                                <div class="main_price_show"
+                                                     :class="{none: PromotionsFormat(pros.promotions) || (pros.svipProductFlag === 1 && showVipPriceTag(pros))}">
+                                                    ¥{{ (PromotionsFormat(pros.promotions) || showVipPriceTag(pros) ? pros.originalPrice :
+                                                    pros.price ) | NumFormat }}
+                                                </div>
+                                            </template>
+                                            <!--机构价仅会员可见 && 用户是普通机构-->
+                                            <div class="main_price_unde" v-else-if="pros.priceFlag==2 && GLOBAL_USER_IDENTITY === 4">
+                                                ¥会员可见
+                                            </div>
+                                            <!--供应商除自己的商品外,也显示价格等级-->
+                                            <div class="price_grade" v-else><span class="bold">¥</span><i
+                                                    :class="'icon mIcon i'+pros.priceGrade"></i></div>
+                                            <div class="price_text_tag clear">
+                                                <p class="couponTag" v-if="pros.couponsLogo">优惠券</p>
+                                                <template v-if="pros.svipProductFlag === 1">
+                                                    <div class="svip-tag">
+                                                        <div class="svip-icon">SVIP</div>
+                                                        <template v-if="showVipPriceTag(pros)">
+                                                            <div class="svip-price">
+                                                                <span v-html="pros.svipPriceTag"></span>
+                                                            </div>
+                                                        </template>
+                                                    </div>
+                                                </template>
+                                                <template v-else>
+                                                    <p class="listTag" v-if="pros.actStatus==1">{{pros.promotions.name}}
+                                                        <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.promotions)">:¥{{pros.price | NumFormat}}</span>
+                                                    </p>
+                                                </template>
+                                            </div>
+                                        </template>
+                                        <template v-else>
+                                            <div class="price_grade"><i :class="'icon mIcon i'+pros.priceGrade"></i></div>
+                                            <div class="price_text_tag">
+                                                <p class="couponTag" v-if="pros.couponsLogo">优惠券</p>
+                                                <template v-if="pros.svipProductFlag === 1">
+                                                    <div class="svip-tag">
+                                                        <div class="svip-icon">SVIP</div>
+                                                    </div>
+                                                </template>
+                                                <template v-else>
+                                                    <p class="listTag" v-if="pros.actStatus==1">{{pros.promotions.name}}</p>
+                                                </template>
+                                            </div>
+                                        </template>
+                                    </div>
+                                </div>
+                                <div class="tr tr-5">
+                                    <span class="number">
+                                        <em class="sub" @click="supportingNumberSub(pros)">-</em>
+                                        <input type="number" :value="pros.number" v-model="pros.number" @change="supportingNumberChange(pros)">
+                                        <em class="add" @click="supportingNumberAdd(pros)">+</em>
+                                    </span>
+                                </div>
+                                <div class="tr tr-6">
+                                    <template v-if="pros.priceFlag == 1 || (pros.priceFlag==2 && GLOBAL_USER_IDENTITY === 4) || GLOBAL_USER_IDENTITY == 3">
+                                        <div class="checked-box">
+                                           <p>不可选择</p>
+                                        </div>
+                                    </template>
+                                    <template v-else>
+                                        <div class="checked-box" @click="checkedSoperv(pros)">
+                                            <input class="check" type="checkbox" @change="" v-model="pros.isChecked">
+                                        </div>
+                                    </template>
+                                </div>
+                            </div>
+                            <div class="product-supporting-more" v-if="isShowMoreButton">
+                                <div class="more" @click="showSupportingMore">
+                                    <i class="icon mIcon"></i>
+                                    查看更多
+                                </div>
+                            </div>
+                        </div>
+                        <div class="product-supporting-button">
+                            <div class="product-supporting-total">
+                                <p>共 <span class="ore">{{ totalNumber }}</span>件商品,合计:<span class="red">¥{{ totalPrice | NumFormat }}元</span></p>
+                            </div>
+                            <div class="product-supporting-btn">
+                                <div class="btn buy" @click="handleSupportingSubmit('buy')">立即购买</div>
+                                <div class="btn add" @click="handleSupportingSubmit('add')">加入购物车</div>
+                            </div>
+                        </div>
+                    </div>
+                </template>
+                <!--H5-->
+                <template v-else>
+                    <div class="product-supporting-title">配套商品({{ supportingList.length }})</div>
+                    <div class="product-supporting-content">
+                        <a :href="'/product/product-supporting.html?productId='+productId">
+                            <div class="product-supporting-list" v-for="(pros,index) in defaultSupportingList" :key="index" v-if="index<3">
+                                <img :src="pros.image" :alt="pros.name">
+                            </div>
+                            <div class="product-supporting-more">
+                                <i class="icon mIcon"></i>
+                            </div>
+                        </a>
+                    </div>
+                </template>
+            </div>
+        </div>
+        <!--相关推荐区域-->
         <div class="recommendBox" v-if="recommends.length>0">
             <div class="hd">相关推荐</div>
             <div id="productRecommend" class="swiper-container">

+ 74 - 6
src/main/resources/templates/product/instruelist.html

@@ -25,6 +25,7 @@
                 <div class="crumbs-nav-item" th:if="not${#strings.isEmpty(bigTypeName)}" th:text="${bigTypeName}"></div>
                 <div class="crumbs-nav-item on" th:if="not${#strings.isEmpty(smallTypeName)}" th:text="${smallTypeName}"></div>
                 <div class="crumbs-nav-item on" th:if="not${#strings.isEmpty(tinyTypeName)}" th:text="${tinyTypeName}"></div>
+                <div class="crumbs-nav-item on" th:if="not${#strings.isEmpty(tinyTypeName)}" th:text="${tinyTypeName}"></div>
             </div>
         </div>
         <div id="listClassify">
@@ -53,6 +54,55 @@
                     </div>
                 </div>
             </div>
+        </template>
+        <!--品牌选择-->
+        <template v-if="isPC">
+            <div class="product-brand clear">
+                <div class="product-brand-name" :class="isShowAllBrands ? 'show' : ''">
+                    <p class="title">品牌</p>
+                    <p v-if="!isPC" class="num">已选中<span>{{ checkedBrandLength }}</span>个品牌</p>
+                </div>
+                <div class="product-brand-list" :class="isShowAllBrands ? 'show' : ''">
+                    <div class="brand-list" v-for="(brand,index) in brandLists" :key="index"
+                         @click="choiceBrandHref(brand, index)" :class="brand.isChecked ? 'checked' : ''">
+                        <a href="javascript:void(0)" :title="brand.name" v-html="brand.name"></a>
+                    </div>
+                </div>
+                <div class="product-brand-more" v-if="defaultBrandLists.length>8" :class="isShowAllBrands ? 'show' : ''" @click="showMoreItem">{{
+                    isShowAllBrands ? '收起' : '更多' }} <i class="icon mIcon"></i></div>
+            </div>
+        </template>
+        <template v-else>
+            <div class="product-brand-fiexd" v-if="isProductScreen">
+                <div class="product-brand clear">
+                    <div class="product-screen">
+                        <div class="sortBox-new" @click="hanldCheckedActivi">
+                            <span>促销商品</span>
+                            <span class="coll-checked" :class="[isActiviChecked ? 'checked': '']"></span>
+                        </div>
+                        <div class="sortBox-new" @click="hanldCheckedNews">
+                            <span>新品</span>
+                            <span class="coll-checked" :class="[isNewsChecked ? 'checked': '']"></span>
+                        </div>
+                    </div>
+                    <div class="product-brand-name" :class="isShowAllBrands ? 'show' : ''">
+                        <p class="title">品牌</p>
+                        <p v-if="!isPC" class="num">已选中<span>{{ checkedBrandLength }}</span>个品牌</p>
+                    </div>
+                    <div class="product-brand-list" :class="isShowAllBrands ? 'show' : ''">
+                        <div class="brand-list" v-for="(brand,index) in brandLists" :key="index"
+                             @click="choiceBrand(brand, index)" :class="brand.isChecked ? 'checked' : ''">
+                            <a href="javascript:void(0)" :title="brand.name" v-html="brand.name"></a>
+                        </div>
+                    </div>
+                    <div class="product-brand-more" v-if="defaultBrandLists.length>8" :class="isShowAllBrands ? 'show' : ''" @click="showMoreItem">{{
+                        isShowAllBrands ? '收起' : '查看全部' }} <i
+                                class="icon mIcon"></i></div>
+                    <div class="product-screen-btn" @click="handleConfirmScreen">
+                        <div class="sub-button">确定</div>
+                    </div>
+                </div>
+            </div>
         </template>
             <div class="sortBox classification">
                 <ul class="mfc class-nav-main">
@@ -78,7 +128,23 @@
                             @click="toSortList('price',1)"><span>价格</span></li>
                             <li v-else @click="toSortList('price',0)"><span>价格</span></li>
                         </template>
+                        <template v-if="!isPC">
+                            <li class="screen" @click="showIsProductScreen">
+                                <span>筛选</span>
+                                <i class="mIcon"></i>
+                            </li>
+                        </template>
                 </ul>
+                <div class="sortBox-checked" v-if="isPC">
+                    <div class="sortBox-new" @click="hanldCheckedActiviHref">
+                        <span class="coll-checked" :class="[isActiviChecked ? 'checked': '']"></span>
+                        <span>促销商品</span>
+                    </div>
+                    <div class="sortBox-new" @click="hanldCheckedNewsHref">
+                        <span class="coll-checked" :class="[isNewsChecked ? 'checked': '']"></span>
+                        <span>新品</span>
+                    </div>
+                </div>
             </div>
         </div>
         <!--商品列表-->
@@ -141,7 +207,7 @@
                                         </div>
                                     </template>
                                     <!--会员可见-->
-                                    <div class="main_price_unde" v-if="p.priceFlag==2 && GLOBAL_USER_IDENTITY === 4">¥会员可见</div>
+                                    <div class="main_price_unde" v-else-if="p.priceFlag==2 && GLOBAL_USER_IDENTITY === 4">¥会员可见</div>
                                     <!--其他-->
                                     <div class="price_grade" v-else><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
                                 </template>
@@ -178,11 +244,13 @@
     <!--分页-->
     <div v-if="(!isPC) && noMore" class="noMore">---- 没有更多了 ----</div>
     <div v-if="isPC && pageTotal>1" class="pageWrap clear">
-        <th:block th:each="page : ${pageBtnList}">
-            <a th:if="${page.btn} == -1" class="prev" th:href="${page.path}"></a>
-            <span th:if="${page.btn} == 0">···</span>
-            <a th:if="${page.btn} > 0" th:class="${page.btn == pageBtnNum} ? 'on' : ''" th:href="${page.path}" th:text="${page.btn}"></a>
-            <a th:if="${page.btn} == -2" class="next" th:href="${page.path}"></a>
+        <th:block th:if="not${#lists.isEmpty(pageBtnList)}">
+            <th:block th:each="page : ${pageBtnList}">
+                <a th:if="${page.btn} == -1" class="prev" th:href="${page.path}"></a>
+                <span th:if="${page.btn} == 0">···</span>
+                <a th:if="${page.btn} > 0" th:class="${page.btn == pageBtnNum} ? 'on' : ''" th:href="${page.path}" th:text="${page.btn}"></a>
+                <a th:if="${page.btn} == -2" class="next" th:href="${page.path}"></a>
+            </th:block>
         </th:block>
         <span>共<b v-text="pageTotal>1?pageTotal:1"></b>页</span>
         <span>跳至</span>

+ 132 - 57
src/main/resources/templates/product/list.html

@@ -19,53 +19,53 @@
         <span>&gt;</span> <a href="javascript:void(0);" @click="toPagination(1)" v-text="params.keyword"></a>
     </div>
 
-<!--    <template v-if="isPC && listData && listData.length>0">-->
-<!--        &lt;!&ndash; 面包屑 &ndash;&gt;-->
-<!--        <div v-if="searchFlag" class="crumbs">-->
-<!--            <span>搜索结果</span>-->
-<!--            <span>&gt;</span> <a href="javascript:void(0);" @click="toPagination(1)" v-text="params.keyword"></a>-->
-<!--        </div>-->
-<!--        <div v-else class="crumbs">-->
-<!--            <a href="/">首页</a>-->
-<!--            <template v-if="params.bid && params.bid>0">-->
-<!--                <template v-if="params.sid && params.sid>0">-->
-<!--                    <span>&gt;</span> <a :href="'/product/list.html?category='+params.bid+'-0-0'" v-text="bigType"></a>-->
-<!--                    <template v-if="params.tid && params.tid>0">-->
-<!--                        <span>&gt;</span> <a :href="'/product/list.html?category='+params.bid+'-'+params.sid+'-0'" v-text="smallType"></a>-->
-<!--                        <span>&gt;</span> <span v-text="tinyType"></span>-->
-<!--                    </template>-->
-<!--                    <template v-else>-->
-<!--                        <span>&gt;</span> <span v-text="smallType"></span>-->
-<!--                    </template>-->
-<!--                </template>-->
-<!--                <template v-else>-->
-<!--                    <span>&gt;</span> <span v-text="bigType"></span>-->
-<!--                </template>-->
-<!--            </template>-->
-<!--        </div>-->
-<!--        &lt;!&ndash;分类&ndash;&gt;-->
-<!--        <div v-if="(!searchFlag)" id="listClassify" class="classifyBox">-->
-<!--            <div class="clsTab">-->
-<!--                <template v-for="(big,i) in classify">-->
-<!--                    <a :class="{'on': params.bid==big.bigTypeID}" v-if="big.validFlag==1" href="javascript:void(0);" v-text="big.name"></a>-->
-<!--                </template>-->
-<!--            </div>-->
-<!--            <div class="clsCon">-->
-<!--                <div class="tabItem" v-for="big in classify" :bid="big.bigTypeID" style="display: none;">-->
-<!--                    <div class="line" :class="{'on': params.sid==small.smallTypeID}" v-for="small in big.smalltypeList" v-if="small.validFlag==1">-->
-<!--                        <div class="lft" :class="{'on': params.sid==small.smallTypeID}">-->
-<!--                            <a :href="'/product/list.html?category='+big.bigTypeID+'-'+small.smallTypeID+'-0'" v-text="small.name"></a>-->
-<!--                        </div>-->
-<!--                        <div class="rgt">-->
-<!--                            <template v-for="tiny in small.tinytypeList">-->
-<!--                                <a v-if="tiny.validFlag==1" :class="{'on': params.tid==tiny.tinyTypeID}" :href="'/product/list.html?category='+big.bigTypeID+'-'+small.smallTypeID+'-'+tiny.tinyTypeID" v-text="tiny.name"></a>-->
-<!--                            </template>-->
-<!--                        </div>-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--            </div>-->
-<!--        </div>-->
-<!--    </template>-->
+    <!--    <template v-if="isPC && listData && listData.length>0">-->
+    <!--        &lt;!&ndash; 面包屑 &ndash;&gt;-->
+    <!--        <div v-if="searchFlag" class="crumbs">-->
+    <!--            <span>搜索结果</span>-->
+    <!--            <span>&gt;</span> <a href="javascript:void(0);" @click="toPagination(1)" v-text="params.keyword"></a>-->
+    <!--        </div>-->
+    <!--        <div v-else class="crumbs">-->
+    <!--            <a href="/">首页</a>-->
+    <!--            <template v-if="params.bid && params.bid>0">-->
+    <!--                <template v-if="params.sid && params.sid>0">-->
+    <!--                    <span>&gt;</span> <a :href="'/product/list.html?category='+params.bid+'-0-0'" v-text="bigType"></a>-->
+    <!--                    <template v-if="params.tid && params.tid>0">-->
+    <!--                        <span>&gt;</span> <a :href="'/product/list.html?category='+params.bid+'-'+params.sid+'-0'" v-text="smallType"></a>-->
+    <!--                        <span>&gt;</span> <span v-text="tinyType"></span>-->
+    <!--                    </template>-->
+    <!--                    <template v-else>-->
+    <!--                        <span>&gt;</span> <span v-text="smallType"></span>-->
+    <!--                    </template>-->
+    <!--                </template>-->
+    <!--                <template v-else>-->
+    <!--                    <span>&gt;</span> <span v-text="bigType"></span>-->
+    <!--                </template>-->
+    <!--            </template>-->
+    <!--        </div>-->
+    <!--        &lt;!&ndash;分类&ndash;&gt;-->
+    <!--        <div v-if="(!searchFlag)" id="listClassify" class="classifyBox">-->
+    <!--            <div class="clsTab">-->
+    <!--                <template v-for="(big,i) in classify">-->
+    <!--                    <a :class="{'on': params.bid==big.bigTypeID}" v-if="big.validFlag==1" href="javascript:void(0);" v-text="big.name"></a>-->
+    <!--                </template>-->
+    <!--            </div>-->
+    <!--            <div class="clsCon">-->
+    <!--                <div class="tabItem" v-for="big in classify" :bid="big.bigTypeID" style="display: none;">-->
+    <!--                    <div class="line" :class="{'on': params.sid==small.smallTypeID}" v-for="small in big.smalltypeList" v-if="small.validFlag==1">-->
+    <!--                        <div class="lft" :class="{'on': params.sid==small.smallTypeID}">-->
+    <!--                            <a :href="'/product/list.html?category='+big.bigTypeID+'-'+small.smallTypeID+'-0'" v-text="small.name"></a>-->
+    <!--                        </div>-->
+    <!--                        <div class="rgt">-->
+    <!--                            <template v-for="tiny in small.tinytypeList">-->
+    <!--                                <a v-if="tiny.validFlag==1" :class="{'on': params.tid==tiny.tinyTypeID}" :href="'/product/list.html?category='+big.bigTypeID+'-'+small.smallTypeID+'-'+tiny.tinyTypeID" v-text="tiny.name"></a>-->
+    <!--                            </template>-->
+    <!--                        </div>-->
+    <!--                    </div>-->
+    <!--                </div>-->
+    <!--            </div>-->
+    <!--        </div>-->
+    <!--    </template>-->
     <!--loading-->
     <div v-if="listLoading" class="loading">
         <img src="/img/base/loading.gif">
@@ -78,9 +78,59 @@
         </div>
     </div>
     <template v-else>
+        <!--品牌选择-->
+        <template v-if="isPC">
+            <div class="product-brand clear">
+                <div class="product-brand-name" :class="isShowAllBrands ? 'show' : ''">
+                    <p class="title">品牌</p>
+                    <p v-if="!isPC" class="num">已选中<span>{{ checkedBrandLength }}</span>个品牌</p>
+                </div>
+                <div class="product-brand-list" :class="isShowAllBrands ? 'show' : ''">
+                    <div class="brand-list" @click="choiceBrandHref(brand, index)" v-for="(brand,index) in brandLists"
+                         :key="index" :class="brand.isChecked ? 'checked' : ''">
+                        <a href="javascript:void(0)" :title="brand.name" v-html="brand.name"></a>
+                    </div>
+                </div>
+                <div class="product-brand-more" v-if="defaultBrandLists.length>8" :class="isShowAllBrands ? 'show' : ''"
+                     @click="showMoreItem">{{
+                    isShowAllBrands ? '收起' : '更多' }} <i class="icon mIcon"></i></div>
+            </div>
+        </template>
+        <template v-else>
+            <div class="product-brand-fiexd" v-if="isProductScreen">
+                <div class="product-brand clear">
+                    <div class="product-screen">
+                        <div class="sortBox-new" @click="hanldCheckedActivi">
+                            <span>促销商品</span>
+                            <span class="coll-checked" :class="[isActiviChecked ? 'checked': '']"></span>
+                        </div>
+                        <div class="sortBox-new" @click="hanldCheckedNews">
+                            <span>新品</span>
+                            <span class="coll-checked" :class="[isNewsChecked ? 'checked': '']"></span>
+                        </div>
+                    </div>
+                    <div class="product-brand-name" :class="isShowAllBrands ? 'show' : ''">
+                        <p class="title">品牌</p>
+                        <p v-if="!isPC" class="num">已选中<span>{{ checkedBrandLength }}</span>个品牌</p>
+                    </div>
+                    <div class="product-brand-list" :class="isShowAllBrands ? 'show' : ''">
+                        <div class="brand-list" v-for="(brand,index) in brandLists" :key="index"
+                             @click="choiceBrand(brand, index)" :class="brand.isChecked ? 'checked' : ''">
+                            <a href="javascript:void(0)" :title="brand.name" v-html="brand.name"></a>
+                        </div>
+                    </div>
+                    <div class="product-brand-more" v-if="defaultBrandLists.length>8" :class="isShowAllBrands ? 'show' : ''" @click="showMoreItem">{{
+                        isShowAllBrands ? '收起' : '查看全部' }} <i
+                                class="icon mIcon"></i></div>
+                    <div class="product-screen-btn" @click="handleConfirmScreen">
+                        <div class="sub-button">确定</div>
+                    </div>
+                </div>
+            </div>
+        </template>
         <!--排序-->
         <div class="sortBox">
-            <ul class="mfc">
+            <ul class="mfc clear">
                 <li :class="{'on':params.sortField == ''}" @click="toSortList('',1)">综合</li>
                 <template>
                     <li v-if="params.sortField == 'sales' && params.sortType == 1" class="down"
@@ -103,7 +153,23 @@
                         @click="toSortList('price',1)"><span>价格</span></li>
                     <li v-else @click="toSortList('price',0)"><span>价格</span></li>
                 </template>
+                <template v-if="!isPC">
+                    <li class="screen" @click="showIsProductScreen">
+                        <span>筛选</span>
+                        <i class="mIcon"></i>
+                    </li>
+                </template>
             </ul>
+            <div class="sortBox-checked" v-if="isPC">
+                <div class="sortBox-new" @click="hanldCheckedActiviHref">
+                    <span class="coll-checked" :class="[isActiviChecked ? 'checked': '']"></span>
+                    <span>促销商品</span>
+                </div>
+                <div class="sortBox-new" @click="hanldCheckedNewsHref">
+                    <span class="coll-checked" :class="[isNewsChecked ? 'checked': '']"></span>
+                    <span>新品</span>
+                </div>
+            </div>
         </div>
         <!--商品列表-->
         <ul class="productList clear mfw">
@@ -136,16 +202,21 @@
                             <!--0公开价格 1不公开价格 2仅对会员机构公开-->
                             <div class="main_price_unde" v-if="p.priceFlag==1">¥价格未公开</div>
                             <!-- 资质机构 || (价格全部机构可见 && 普通机构) || (供应商 && 商品为供应商下的商品) || 超级会员用户 -->
-                            <template v-else-if="GLOBAL_USER_IDENTITY === 2 || (p.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && p.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                            <template
+                                    v-else-if="GLOBAL_USER_IDENTITY === 2 || (p.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && p.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
                                 <div class="main_price_show"
-                                    :class="{none: PromotionsFormat(p.promotions) || (p.svipProductFlag === 1 && showVipPriceTag(p))}">
-                                    ¥{{ (PromotionsFormat(p.promotions) || showVipPriceTag(p) ? p.originalPrice : p.price ) | NumFormat }}
+                                     :class="{none: PromotionsFormat(p.promotions) || (p.svipProductFlag === 1 && showVipPriceTag(p))}">
+                                    ¥{{ (PromotionsFormat(p.promotions) || showVipPriceTag(p) ? p.originalPrice :
+                                    p.price ) | NumFormat }}
                                 </div>
                             </template>
                             <!--机构价仅会员可见 && 用户是普通机构-->
-                            <div class="main_price_unde" v-else-if="p.priceFlag==2 && GLOBAL_USER_IDENTITY === 4">¥会员可见</div>
+                            <div class="main_price_unde" v-else-if="p.priceFlag==2 && GLOBAL_USER_IDENTITY === 4">
+                                ¥会员可见
+                            </div>
                             <!--供应商除自己的商品外,也显示价格等级-->
-                            <div class="price_grade" v-else><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
+                            <div class="price_grade" v-else><span class="bold">¥</span><i
+                                    :class="'icon mIcon i'+p.priceGrade"></i></div>
                         </template>
                         <template v-else>
                             <div class="price_text_tag">
@@ -159,7 +230,8 @@
                                     <p class="listTag" v-if="p.actStatus==1">{{p.promotions.name}}</p>
                                 </template>
                             </div>
-                            <div class="price_grade"><span class="bold">¥</span><i :class="'icon mIcon i'+p.priceGrade"></i></div>
+                            <div class="price_grade"><span class="bold">¥</span><i
+                                    :class="'icon mIcon i'+p.priceGrade"></i></div>
                         </template>
                     </div>
                 </a>
@@ -171,10 +243,12 @@
     <div v-if="isPC && pageTotal>1" class="pageWrap clear">
         <a v-if="params.num>1" class="prev" @click="toPagination(params.num*1-1)" href="javascript:void(0);"></a>
         <template v-for="n in showPageBtn">
-            <a v-if="n" :class="{'on':(n==params.num)}" @click="toPagination(n)" href="javascript:void(0);" v-text="n"></a>
+            <a v-if="n" :class="{'on':(n==params.num)}" @click="toPagination(n)" href="javascript:void(0);"
+               v-text="n"></a>
             <span v-else>···</span>
         </template>
-        <a v-if="params.num<pageTotal" class="next" @click="toPagination(params.num*1+1)" href="javascript:void(0);"></a>
+        <a v-if="params.num<pageTotal" class="next" @click="toPagination(params.num*1+1)"
+           href="javascript:void(0);"></a>
         <span>共<b v-text="pageTotal>1?pageTotal:1"></b>页</span>
         <span>跳至</span>
         <input v-model="pageInput" @blur="checkNum()"/>
@@ -185,7 +259,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/common/serviceapi/product.service.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/product/list.js(v=${version})}"></script>
 </body>
 </html>

+ 132 - 0
src/main/resources/templates/product/product-supporting.html

@@ -0,0 +1,132 @@
+<!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/product/product-supporting.h5.css(v=${version})}" rel="stylesheet" type="text/css">
+    <template th:replace="components/analysis"></template>
+</head>
+<body>
+<!-- 引用头部 -->
+<template th:replace="components/header"></template>
+
+<!-- 购物车列表 -->
+<div id="supporting">
+    <div v-if="listLoading" class="loading">
+        <img src="/img/base/loading.gif">
+    </div>
+    <!--列表-->
+    <template v-else>
+        <div class="supporting-title">
+            <div class="title">配套商品</div>
+            <div class="coll-span all" @click="isCheckedAll">
+                <span class="coll-checked" :class="[isAllChecked ? 'checked': '']"></span>
+                <span>全选</span>
+            </div>
+        </div>
+        <div class="supporting-content">
+            <div class="supporting-list" v-for="(pros,index) in supportingList" :key="index">
+                <div class="list-checked"  @click="checkedSoperv(pros)">
+                    <span v-if="disabledChecked(pros)" class="coll-checked none"></span>
+                    <span v-else class="coll-checked" :class="[pros.isChecked ? 'checked': '']"></span>
+                </div>
+                <div class="list-image">
+                    <a :href="'/product-'+pros.productId+'.html'">
+                        <img :src="pros.image" :alt="pros.name">
+                    </a>
+                </div>
+                <div class="list-info">
+                    <div class="list-name"><a :href="'/product-'+pros.productId+'.html'">{{ pros.name }}</a></div>
+                    <div class="list-unit">规格:{{ pros.unit }}</div>
+                    <div class="list-price">
+                        <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
+                            <div class="price-box">
+                                <!--0公开价格 1不公开价格 2仅对会员机构公开-->
+                                <div class="main_price_unde" v-if="pros.priceFlag==1">¥价格未公开</div>
+                                <!-- 资质机构 || (价格全部机构可见 && 普通机构) || (供应商 && 商品为供应商下的商品) || 超级会员用户 -->
+                                <template
+                                        v-else-if="GLOBAL_USER_IDENTITY === 2 || (pros.priceFlag === 0 && GLOBAL_USER_IDENTITY === 4) || (GLOBAL_USER_IDENTITY === 3 && pros.shopId === GLOBAL_SHOP_ID) || GLOBAL_VIP_FLAG === 1">
+                                    <div class="main_price_show"
+                                         :class="{none: PromotionsFormat(pros.promotions) || (pros.svipProductFlag === 1 && showVipPriceTag(pros))}">
+                                        ¥{{ (PromotionsFormat(pros.promotions) || showVipPriceTag(pros) ? pros.originalPrice :
+                                        pros.price ) | NumFormat }}
+                                    </div>
+                                </template>
+                                <!--机构价仅会员可见 && 用户是普通机构-->
+                                <div class="main_price_unde" v-else-if="pros.priceFlag==2 && GLOBAL_USER_IDENTITY === 4">
+                                    ¥会员可见
+                                </div>
+                                <!--供应商除自己的商品外,也显示价格等级-->
+                                <div class="price_grade" v-else><span class="bold">¥</span><i :class="'icon mIcon i'+pros.priceGrade"></i></div>
+                            </div>
+                            <div class="price-number" v-if="!disabledChecked(pros)">
+                            <span class="number">
+                                <em class="sub" @click="supportingNumberSub(pros)">-</em>
+                                <input type="number" :value="pros.number" v-model="pros.number" @change="supportingNumberChange(pros)">
+                                <em class="add" @click="supportingNumberAdd(pros)">+</em>
+                            </span>
+                            </div>
+                        </template>
+                        <template v-else>
+                            <div class="price_grade">
+                                <span class="bold">¥</span><i :class="'icon mIcon i'+pros.priceGrade"></i>
+                            </div>
+                        </template>
+                    </div>
+                    <div class="list-tags">
+                        <template v-if="GLOBAL_USER_ID && GLOBAL_USER_ID>0">
+                            <div class="price_text_tag clear">
+                                <p class="couponTag" v-if="pros.couponsLogo">优惠券</p>
+                                <template v-if="pros.svipProductFlag === 1">
+                                    <div class="svip-tag">
+                                        <div class="svip-icon">SVIP</div>
+                                        <template v-if="showVipPriceTag(pros)">
+                                            <div class="svip-price">
+                                                <span v-html="pros.svipPriceTag"></span>
+                                            </div>
+                                        </template>
+                                    </div>
+                                </template>
+                                <template v-else>
+                                    <p class="listTag" v-if="pros.actStatus==1">{{pros.promotions.name}}
+                                        <span v-if="pros.priceFlag != 1 && PromotionsFormat(pros.promotions)">:¥{{pros.price | NumFormat}}</span>
+                                    </p>
+                                </template>
+                            </div>
+                        </template>
+                        <template v-else>
+                            <div class="price_text_tag">
+                                <p class="couponTag" v-if="pros.couponsLogo">优惠券</p>
+                                <template v-if="pros.svipProductFlag === 1">
+                                    <div class="svip-tag">
+                                        <div class="svip-icon">SVIP</div>
+                                    </div>
+                                </template>
+                                <template v-else>
+                                    <p class="listTag" v-if="pros.actStatus==1">{{p.promotions.name}}</p>
+                                </template>
+                            </div>
+                        </template>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="supporting-submit">
+            <div class="supporting-submit-total">
+                <p>共<span class="ore">{{ totalNumber }}</span>件商品</p>
+                <p>合计<span class="red">¥{{ totalPrice | NumFormat }}元</span></p>
+            </div>
+            <div class="supporting-submit-button">
+                <div class="btn add" @click="handleSupportingSubmit('add')">加入购物车</div>
+                <div class="btn buy" @click="handleSupportingSubmit('buy')">立即购买</div>
+            </div>
+        </div>
+    </template>
+</div>
+<!-- 引入底部 -->
+<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/product/product-supporting.js(v=${version})}"></script>
+</body>
+</html>

+ 0 - 1
src/main/resources/templates/product/qualityauthorize.html

@@ -7,7 +7,6 @@
     <template th:replace="components/analysis"></template>
 </head>
 <body>
-<input type="hidden" th:value="${spiServer}" id="spiServer">
 <input type="hidden" th:value="${agent}" id="userAgent">
 <div class="container" id="qualityAuthorize">
     <!-- 顶部logo区域 -->

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است