瀏覽代碼

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

# Conflicts:
#	src/main/resources/templates/components/head-link.html
#	src/main/resources/templates/index.html
#	src/main/resources/templates/supplier-center/article/article-list.html
#	src/main/resources/templates/supplier_login/index.html
#	src/main/resources/templates/supplier_login/text_info.html
zhengjinyi 1 年之前
父節點
當前提交
f5b3301877
共有 76 個文件被更改,包括 3899 次插入285 次删除
  1. 99 8
      src/main/java/com/caimei/www/controller/unlimited/ArticleController.java
  2. 13 0
      src/main/java/com/caimei/www/controller/unlimited/ProductController.java
  3. 25 1
      src/main/java/com/caimei/www/mapper/ArticleDao.java
  4. 116 0
      src/main/java/com/caimei/www/mapper/CmBrandLandingMapper.java
  5. 2 0
      src/main/java/com/caimei/www/mapper/ProductDao.java
  6. 74 0
      src/main/java/com/caimei/www/pojo/link/CmBrandLandingVO.java
  7. 4 0
      src/main/java/com/caimei/www/pojo/page/Article.java
  8. 6 0
      src/main/java/com/caimei/www/pojo/page/BaseLink.java
  9. 91 0
      src/main/java/com/caimei/www/pojo/page/CmBrandLanding.java
  10. 62 0
      src/main/java/com/caimei/www/pojo/page/CmProductArchiveFile.java
  11. 16 0
      src/main/java/com/caimei/www/service/page/ArticleService.java
  12. 111 0
      src/main/java/com/caimei/www/service/page/CmBrandLandingService.java
  13. 8 0
      src/main/java/com/caimei/www/service/page/ProductService.java
  14. 47 1
      src/main/java/com/caimei/www/service/page/impl/ArticleServiceImpl.java
  15. 181 0
      src/main/java/com/caimei/www/service/page/impl/CmBrandLandingServiceImpl.java
  16. 12 0
      src/main/java/com/caimei/www/service/page/impl/ProductServiceImpl.java
  17. 113 0
      src/main/java/com/caimei/www/utils/PaginationVo.java
  18. 65 2
      src/main/resources/mapper/ArticleMapper.xml
  19. 540 0
      src/main/resources/mapper/CmBrandLandingMapper.xml
  20. 11 0
      src/main/resources/mapper/ProductMapper.xml
  21. 5 5
      src/main/resources/static/css/activity/activityTopic.css
  22. 232 45
      src/main/resources/static/css/article/article.css
  23. 116 0
      src/main/resources/static/css/article/drawer-footer.css
  24. 4 3
      src/main/resources/static/css/article/error.css
  25. 511 0
      src/main/resources/static/css/article/recommendation.css
  26. 3 2
      src/main/resources/static/css/base/base.h5.css
  27. 6 0
      src/main/resources/static/css/index/index_new.pc.css
  28. 49 0
      src/main/resources/static/css/product/filePreview.css
  29. 30 2
      src/main/resources/static/css/supplier-center/article/article-edit.css
  30. 12 2
      src/main/resources/static/css/supplier-center/article/article-list.css
  31. 9 0
      src/main/resources/static/css/supplier-login/login-h5.css
  32. 21 0
      src/main/resources/static/css/supplier-login/login.css
  33. 3 0
      src/main/resources/static/css/supplier-login/text_info.css
  34. 二進制
      src/main/resources/static/img/article/H5.png
  35. 二進制
      src/main/resources/static/img/article/PC--pdf.png
  36. 二進制
      src/main/resources/static/img/article/PC.png
  37. 二進制
      src/main/resources/static/img/article/h5-logo.png
  38. 二進制
      src/main/resources/static/img/article/pc-logo.png
  39. 二進制
      src/main/resources/static/img/supplier-login/arrow-down.png
  40. 59 0
      src/main/resources/static/js/article/common.js
  41. 8 7
      src/main/resources/static/js/article/detail.js
  42. 47 0
      src/main/resources/static/js/article/drawer-footer.js
  43. 7 7
      src/main/resources/static/js/article/error.js
  44. 181 14
      src/main/resources/static/js/article/list.js
  45. 202 0
      src/main/resources/static/js/article/recommendation.js
  46. 1 1
      src/main/resources/static/js/base.js
  47. 11 0
      src/main/resources/static/js/common/serviceapi/beautyArchive.service.js
  48. 11 1
      src/main/resources/static/js/common/serviceapi/utils.service.js
  49. 29 60
      src/main/resources/static/js/document/beautyArchiveDetailMixin.js
  50. 10 0
      src/main/resources/static/js/product/detail.js
  51. 17 0
      src/main/resources/static/js/product/filePreview.js
  52. 42 7
      src/main/resources/static/js/supplier-center/article/article-edit.js
  53. 35 3
      src/main/resources/static/js/supplier-center/article/article-list.js
  54. 0 0
      src/main/resources/static/lib/element-ui/element-index.css
  55. 0 0
      src/main/resources/static/lib/element-ui/element-ui-min.css
  56. 0 0
      src/main/resources/static/lib/element-ui/index.css
  57. 0 0
      src/main/resources/static/lib/element-ui/vant.min.js
  58. 84 0
      src/main/resources/templates/article/components/article-drawer.html
  59. 3 0
      src/main/resources/templates/article/components/article-footer.html
  60. 77 15
      src/main/resources/templates/article/components/article-header.html
  61. 3 0
      src/main/resources/templates/article/components/article-link.html
  62. 51 17
      src/main/resources/templates/article/components/article-sidebar.html
  63. 23 5
      src/main/resources/templates/article/detail.html
  64. 13 4
      src/main/resources/templates/article/error.html
  65. 113 8
      src/main/resources/templates/article/list.html
  66. 153 0
      src/main/resources/templates/article/recommendation.html
  67. 3 2
      src/main/resources/templates/components/footer.html
  68. 6 1
      src/main/resources/templates/error/404.html
  69. 0 1
      src/main/resources/templates/index.html
  70. 5 4
      src/main/resources/templates/product/detail.html
  71. 33 0
      src/main/resources/templates/product/filePreview.html
  72. 17 8
      src/main/resources/templates/supplier-center/article/article-edit.html
  73. 21 12
      src/main/resources/templates/supplier-center/article/article-list.html
  74. 16 16
      src/main/resources/templates/supplier-center/encyclopedia/preview.html
  75. 20 19
      src/main/resources/templates/supplier_login/index.html
  76. 1 2
      src/main/resources/templates/supplier_login/text_info.html

+ 99 - 8
src/main/java/com/caimei/www/controller/unlimited/ArticleController.java

@@ -1,11 +1,15 @@
 package com.caimei.www.controller.unlimited;
 
+import com.alibaba.fastjson.JSON;
 import com.caimei.www.controller.BaseController;
 import com.caimei.www.pojo.JsonModel;
-import com.caimei.www.pojo.page.Article;
-import com.caimei.www.pojo.page.BaseLink;
-import com.caimei.www.pojo.page.ImageLink;
+import com.caimei.www.pojo.link.CmBrandLandingVO;
+import com.caimei.www.pojo.page.*;
 import com.caimei.www.service.page.ArticleService;
+import com.caimei.www.service.page.CmBrandLandingService;
+import com.caimei.www.service.page.ProductService;
+import com.caimei.www.utils.PaginationVo;
+import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +23,7 @@ import org.springframework.web.server.ServerWebExchange;
 import org.thymeleaf.util.StringUtils;
 
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -38,7 +43,12 @@ public class ArticleController extends BaseController {
     private static final String ERROR_PATH = "article/error";
     private static final String ARTICLE_LIST_PATH = "article/list";
     private static final String ARTICLE_DETAIL_PATH = "article/detail";
+    private static final String ARTICLE_RECOMMENDATION = "article/recommendation";
     private ArticleService articleService;
+    @Autowired
+    private CmBrandLandingService cmBrandLandingService;
+    @Autowired
+    private ProductService productService;
 
     @Autowired
     public void setArticleService(ArticleService articleService) {
@@ -51,14 +61,25 @@ public class ArticleController extends BaseController {
     @GetMapping("/info/center-{id}-{pageNum}.html")
     public String toArticleList(@PathVariable("id") Integer id, @PathVariable("pageNum") Integer pageNum, final Model model) {
         List<BaseLink> typeList = articleService.getArticleTypes();
+        List<CmBrandLandingVO> cmBrandLandingList = cmBrandLandingService.getCmBrandLandingList(new CmBrandLanding()
+                .setType("4").setAuthorId(id.toString()));
+        List<Article> infoSelected = articleService.getArticleSelected(0, 5);
+        List<CmProductArchiveFile> archiveFiles = articleService.findArchiveFileAddTime(0, 3);
+        List<ProductList> productSellNumbers = productService.getProductSellNumbers();
         List<BaseLink> data = articleService.getArticleLabels().getData();
         List<ImageLink> Ads = articleService.getLastestInfoAds().getData();
         model.addAttribute("ads", Ads);
         model.addAttribute("labels", data);
-        model.addAttribute("articleType", typeList);
+        model.addAttribute("articleType", typeList);//导航栏
+        model.addAttribute("articleImages", cmBrandLandingList);//导航栏图片
+        model.addAttribute("infoSelected", infoSelected);//精选文章
+        model.addAttribute("productSellNumbers", productSellNumbers);//销量前三商品
+        model.addAttribute("archiveFiles", archiveFiles);//最新美业资料top3
         model.addAttribute("typeId", id);
         model.addAttribute("labelId", 0);
         model.addAttribute("pageNum", pageNum);
+        model.addAttribute("isSearch", true);
+        model.addAttribute("isSelectInfo", true);
         //model.addAttribute("pagePath", String.format("/info/center-%s-1.html", id));
         return ARTICLE_LIST_PATH;
     }
@@ -71,30 +92,81 @@ public class ArticleController extends BaseController {
         List<BaseLink> typeList = articleService.getArticleTypes();
         List<BaseLink> data = articleService.getArticleLabels().getData();
         List<ImageLink> Ads = articleService.getLastestInfoAds().getData();
+        List<CmProductArchiveFile> archiveFiles = articleService.findArchiveFileAddTime(0, 3);
+        List<ProductList> productSellNumbers = productService.getProductSellNumbers();
+        model.addAttribute("productSellNumbers", productSellNumbers);//销量前三商品
+        model.addAttribute("archiveFiles", archiveFiles);//最新美业资料top3
         model.addAttribute("ads", Ads);
         model.addAttribute("labels", data);
         model.addAttribute("articleType", typeList);
         model.addAttribute("typeId", 0);
         model.addAttribute("labelId", id);
         model.addAttribute("pageNum", pageNum);
+        model.addAttribute("isSearch", false);
+        model.addAttribute("isSelectInfo", true);
         //model.addAttribute("pagePath", String.format("/info/label-%s-1.html", id));
         return ARTICLE_LIST_PATH;
     }
 
     /**
-     * 文章搜索结果
+     * 精选文章和美业资料列表
+     */
+    @GetMapping("/info/articlerecommendation-{id}-{pageNum}.html")
+    public String selectedList(@PathVariable("id") Integer id, @PathVariable("pageNum") Integer pageNum, final Model model) {
+        List<BaseLink> typeList = articleService.getArticleTypes();
+        if (id == 1) {//精选文章
+            List<CmProductArchiveFile> archiveFiles = articleService.findArchiveFileAddTime(0, 3);
+            List<ProductList> productSellNumbers = productService.getProductSellNumbers();
+            model.addAttribute("productSellNumbers", productSellNumbers);//销量前三商品
+            model.addAttribute("archiveFiles", archiveFiles);//最新美业资料top3
+        }
+        List<BaseLink> data = articleService.getArticleLabels().getData();
+        List<ImageLink> Ads = articleService.getLastestInfoAds().getData();
+        model.addAttribute("ads", Ads);
+        model.addAttribute("labels", data);
+        model.addAttribute("articleType", typeList);//导航栏
+        model.addAttribute("labelId", 0);
+        model.addAttribute("pageNum", pageNum);
+        model.addAttribute("isSearch", true);
+        model.addAttribute("isSelectInfo", id == 1);
+        return ARTICLE_RECOMMENDATION;
+    }
+
+    /**
+     * 精选文章和美业资料列表数据
      */
+    @ResponseBody
+    @GetMapping("/info/articlerecommendation/{id}/{pageNum}")
+    public JsonModel<PaginationVo> toPagination(@PathVariable("id") Integer id,@PathVariable("pageNum") Integer pageNum) {
+        PageHelper.startPage(pageNum, 10);
+        PaginationVo pageData = null;
+        if (id == 1) {//精选文章
+            List<Article> infoSelected = articleService.getArticleSelected(null, null);
+            pageData = new PaginationVo<Article>(infoSelected);
+        } else {//美业资料
+            List<CmProductArchiveFile> archiveFiles = articleService.findArchiveFileAddTime(null, null);
+            pageData = new PaginationVo<CmProductArchiveFile>(archiveFiles);
+        }
+        return JsonModel.success(pageData);
+    }
+
     @GetMapping("/info/search-{pageNum}.html")
     public String toArticleSearch(@PathVariable("pageNum") Integer pageNum, final Model model) {
         List<BaseLink> typeList = articleService.getArticleTypes();
         List<BaseLink> data = articleService.getArticleLabels().getData();
         List<ImageLink> Ads = articleService.getLastestInfoAds().getData();
+        List<CmProductArchiveFile> archiveFiles = articleService.findArchiveFileAddTime(0, 3);
+        List<ProductList> productSellNumbers = productService.getProductSellNumbers();
+        model.addAttribute("productSellNumbers", productSellNumbers);//销量前三商品
+        model.addAttribute("archiveFiles", archiveFiles);//最新美业资料top3
         model.addAttribute("ads", Ads);
         model.addAttribute("labels", data);
         model.addAttribute("articleType", typeList);
         model.addAttribute("typeId", 0);
         model.addAttribute("labelId", 0);
         model.addAttribute("pageNum", pageNum);
+        model.addAttribute("isSearch", false);
+        model.addAttribute("isSelectInfo", true);
         //model.addAttribute("pagePath", "/info/search.html");
         return ARTICLE_LIST_PATH;
     }
@@ -138,9 +210,20 @@ public class ArticleController extends BaseController {
         log.info("文章详情访问来源记录完成========》" + source);
         List<BaseLink> data = articleService.getArticleLabels().getData();
         List<ImageLink> Ads = articleService.getLastestInfoAds().getData();
-        List<Article> articles = articleService.getInfoById(id);
+        List<Article> articles = new ArrayList<>();
+        if (null != article && article.getAutoStatus() == 0) {
+            articles = articleService.getInfoById(id);
+        } else {
+            articles = articleService.getArticleRelatedId(id.toString());
+        }
         String relatedLabels = articleService.relatedLabel(id);
-        model.addAttribute("articles", articles);
+        List<Article> infoSelected = articleService.getArticleSelected(0, 5);
+        List<CmProductArchiveFile> archiveFiles = articleService.findArchiveFileAddTime(0, 3);
+        List<ProductList> productSellNumbers = productService.getProductSellNumbers();
+        model.addAttribute("infoSelected", infoSelected);//精选文章
+        model.addAttribute("productSellNumbers", productSellNumbers);//销量前三商品
+        model.addAttribute("archiveFiles", archiveFiles);//最新美业资料top3
+        model.addAttribute("articles", articles);//相关文章
         model.addAttribute("ads", Ads);
         model.addAttribute("labels", data);
         model.addAttribute("article", article);
@@ -149,6 +232,7 @@ public class ArticleController extends BaseController {
         model.addAttribute("relatedLabels", relatedLabels);
         model.addAttribute("typeId", (article != null ? article.getTypeId() : 0));
         model.addAttribute("labelId", 0);
+        model.addAttribute("isSelectInfo", true);
         return ARTICLE_DETAIL_PATH;
     }
 
@@ -159,10 +243,17 @@ public class ArticleController extends BaseController {
     public String errorPage(final Model model) {
         model.addAttribute("msg", "404页面");
         model.addAttribute("type", "article");
+        List<BaseLink> typeList = articleService.getArticleTypes();
+        List<BaseLink> data = articleService.getArticleLabels().getData();
+        List<ImageLink> Ads = articleService.getLastestInfoAds().getData();
+        model.addAttribute("ads", Ads);
+        model.addAttribute("labels", data);
+        model.addAttribute("articleType", typeList);
+        model.addAttribute("typeId", 0);
+        model.addAttribute("labelId", 0);
         return ERROR_PATH;
     }
 
-
     /**
      * 获取文章热门标签
      */

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

@@ -60,6 +60,11 @@ public class ProductController extends BaseController {
      */
     private static final String QUICK_OPERATION = "quickOperation/index";
 
+    /**
+     * 商品详情文件预览
+     */
+    private static final String PRODUCT_FILE_PREVIEW = "product/filePreview";
+
     private ProductService productService;
 
     private SinglePageService singlePageService;
@@ -136,6 +141,14 @@ public class ProductController extends BaseController {
         return PRODUCT_DETAIL_PATH;
     }
 
+    /**
+     * 商品详情资料预览
+     */
+    @GetMapping("/product/filePreview.html")
+    public String productFilePreview() {
+        return PRODUCT_FILE_PREVIEW;
+    };
+
     /**
      * 仪器页
      */

+ 25 - 1
src/main/java/com/caimei/www/mapper/ArticleDao.java

@@ -3,6 +3,7 @@ package com.caimei.www.mapper;
 import com.caimei.www.pojo.JsonModel;
 import com.caimei.www.pojo.page.Article;
 import com.caimei.www.pojo.page.BaseLink;
+import com.caimei.www.pojo.page.CmProductArchiveFile;
 import com.caimei.www.pojo.page.ImageLink;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -22,7 +23,7 @@ public interface ArticleDao {
      *
      * @return
      */
-    List<BaseLink> getArticleTypes();
+    List<BaseLink> getArticleTypes(String parentId);
 
     /**
      * 获取最高点击量
@@ -46,6 +47,29 @@ public interface ArticleDao {
      */
     List<ImageLink> getArticleRecommended(@Param("typeId") Integer typeId);
 
+    /**
+     * 获取精选文章推荐
+     *
+     * @param
+     * @return
+     */
+    List<Article> getArticleSelected(@Param("pageNum") Integer pageNum,@Param("pageSize")  Integer pageSize);
+
+    /**
+     * 获取精选文章推荐
+     *
+     * @param
+     * @return
+     */
+    List<Article> getArticleRelatedId(String authorId);
+    /**
+     * 获取美业资料
+     *
+     * @param
+     * @return
+     */
+    List<CmProductArchiveFile> findArchiveFileAddTime(@Param("pageNum") Integer pageNum,@Param("pageSize")  Integer pageSize);
+
     /**
      * 获取文章广告
      *

+ 116 - 0
src/main/java/com/caimei/www/mapper/CmBrandLandingMapper.java

@@ -0,0 +1,116 @@
+package com.caimei.www.mapper;
+
+import java.util.List;
+
+import com.caimei.www.pojo.link.CmBrandLandingVO;
+import com.caimei.www.pojo.page.CmBrandLanding;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import com.caimei.www.pojo.link.CmBrandLandingVO;
+
+
+/**
+ * 供应商落地页资源Mapper接口
+ *
+ * @author Kaick
+ * @date 2023-08-08
+ */
+@Mapper
+public interface CmBrandLandingMapper
+{
+    /**
+     * 通过对象查询供应商落地页资源列表
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 供应商落地页资源集合
+     */
+    public List<CmBrandLandingVO> getCmBrandLandingList(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 通过Id查询供应商落地页资源对象
+     *
+     * @param id 供应商落地页资源主键
+     * @return 供应商落地页资源
+     */
+    public CmBrandLanding getCmBrandLandingById(String id);
+
+    /**
+     * 通过对象查询供应商落地页资源对象
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 供应商落地页资源
+     */
+    public CmBrandLanding getByCmBrandLanding(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 通过对象查询供应商落地页资源Id
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return String
+     */
+    public String getById(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 通过对象查询供应商落地页资源Ids
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return List<String>
+     */
+    public List<String> getByIds(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 通过对象查询供应商落地页资源记录总数
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 供应商落地页资源Integer
+     */
+    public int getCmBrandLandingCount(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 新增供应商落地页资源
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 结果
+     */
+    public int addCmBrandLanding(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 修改供应商落地页资源
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 结果
+     */
+    public int updateCmBrandLanding(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 删除供应商落地页资源
+     *
+     * @param id 供应商落地页资源主键
+     * @return 结果
+     */
+    public int delCmBrandLandingById(String id);
+
+    /**
+     * 批量删除供应商落地页资源
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int delCmBrandLanding(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 批量删除供应商落地页资源
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int delCmBrandLandingByIds(@Param("ids") String[] ids);
+
+    /**
+     * 修改批量删除供应商落地页资源
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int updateDelCmBrandLandingByIds(@Param("ids") String[] ids,@Param("delFlag") Integer delFlag);
+}

+ 2 - 0
src/main/java/com/caimei/www/mapper/ProductDao.java

@@ -38,6 +38,8 @@ public interface ProductDao {
 
     List<ProductList> getAutoProductRecommends(Integer productId);
 
+    List<ProductList> getProductSellNumbers();
+
     /**
      * 详情-相关参数
      *

+ 74 - 0
src/main/java/com/caimei/www/pojo/link/CmBrandLandingVO.java

@@ -0,0 +1,74 @@
+package com.caimei.www.pojo.link;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.apache.ibatis.type.Alias;
+
+import java.io.Serializable;
+
+/**
+ * 供应商落地页资源对象 cm_brand_landing VO对象
+ *
+ * @author Kaick
+ * @date 2023-08-08
+ */
+@Accessors(chain  = true )
+@Data
+@Alias("CmBrandLandingVO")
+public class CmBrandLandingVO implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private String id;
+
+    /** 分类:1成功案例,2增长社区-视频列表,3增长社区-文章列表, 4信息中心导航栏(info_type) */
+    private String type;
+
+    /** 供应商id */
+    private Integer authUserId;
+
+    /** 子级分类: 信息中心导航栏(info_type):{1 大图,2小图} */
+    private String levelType;
+
+    /** 归属者Id(type字段表Id) */
+    private String authorId;
+
+    /** pc端picture */
+    private String headPcBanner;
+
+    /** 移动端picture */
+    private String headAppBanner;
+
+    /** picture跳转方式状态:0无,1图片,2链接 */
+    private Integer jumpStatus;
+
+    /** pc端picture跳转图片 */
+    private String jumpPcPicture;
+
+    /** 移动端picture跳转图片 */
+    private String jumpAppPicture;
+
+    /** picture跳转链接 */
+    private String jumpLink;
+
+    /** 标题
+     */
+    private String title;
+
+    /** 内容
+     */
+    private String content;
+
+    /** 视频文件 cm_brand_files表id */
+    private String video;
+
+    /** 排序 */
+    private Integer sort;
+
+    /** pc端status 1启用,0停用 */
+    private Integer pcStatus;
+
+    /** 移动端status 1启用,0停用 */
+    private Integer appStatus;
+}

+ 4 - 0
src/main/java/com/caimei/www/pojo/page/Article.java

@@ -56,6 +56,10 @@ public class Article implements Serializable {
      * 标签
      */
     private String label;
+    /**
+     * 推荐方式
+     */
+    private Integer autoStatus;
     /**
      * 标签 id数组
      */

+ 6 - 0
src/main/java/com/caimei/www/pojo/page/BaseLink.java

@@ -1,5 +1,6 @@
 package com.caimei.www.pojo.page;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -18,6 +19,11 @@ public class BaseLink implements Serializable {
 	private String name;
 	private String link;
 	private Double sort;
+	/** 分类: 1 信息中心导航栏 */
+	private String type;
+	/** 父级编号 */
+	private String parentId;
+
 	private List<BaseLink> linkList;
 
     private static final long serialVersionUID = 1L;

+ 91 - 0
src/main/java/com/caimei/www/pojo/page/CmBrandLanding.java

@@ -0,0 +1,91 @@
+package com.caimei.www.pojo.page;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.apache.ibatis.type.Alias;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 供应商落地页资源对象 cm_brand_landing
+ *
+ * @author Kaick
+ * @date 2023-08-08
+ */
+@Accessors(chain  = true )
+@Data
+@Alias("CmBrandLanding")
+public class CmBrandLanding implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private String id;
+
+    /** 分类:1成功案例,2增长社区-视频列表,3增长社区-文章列表, 4信息中心导航栏(info_type) */
+    private String type;
+
+    /** 供应商id */
+    private Integer authUserId;
+
+    /** 子级分类: 信息中心导航栏(info_type):{1 大图,2小图} */
+    private String levelType;
+
+    /** 归属者Id(type字段表Id) */
+    private String authorId;
+
+    /** pc端picture */
+    private String headPcBanner;
+
+    /** 移动端picture */
+    private String headAppBanner;
+
+    /** picture跳转方式状态:0无,1图片,2链接 */
+    private Integer jumpStatus;
+
+    /** pc端picture跳转图片 */
+    private String jumpPcPicture;
+
+    /** 移动端picture跳转图片 */
+    private String jumpAppPicture;
+
+    /** picture跳转链接 */
+    private String jumpLink;
+
+    /** 标题
+ */
+    private String title;
+
+    /** 内容
+ */
+    private String content;
+
+    /** 视频文件 cm_brand_files表id */
+    private String video;
+
+    /** 排序 */
+    private Integer sort;
+
+    /** pc端status 1启用,0停用 */
+    private Integer pcStatus;
+
+    /** 移动端status 1启用,0停用 */
+    private Integer appStatus;
+
+    /** 删除状态 0正常,其他删除 */
+    private Integer delFlag;
+
+    /** 修改时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /** 添加时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date addTime;
+
+}

+ 62 - 0
src/main/java/com/caimei/www/pojo/page/CmProductArchiveFile.java

@@ -0,0 +1,62 @@
+package com.caimei.www.pojo.page;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.apache.ibatis.type.Alias;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 商品资料文件对象 cm_product_archive_file
+ *
+ * @author Kaick
+ * @date 2023-08-08
+ */
+@Accessors(chain  = true )
+@Data
+@Alias("CmProductArchiveFile")
+public class CmProductArchiveFile implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private String id;
+
+    /** 商品资料库id */
+    private Integer productArchiveId;
+
+    /** 商品id */
+    private Integer productId;
+
+    /** 资料库内容id */
+    private Integer archiveContentId;
+
+    /** 文件名 */
+    private String fileName;
+
+    /** oss名称 */
+    private String ossName;
+
+    /** 水印oss名称 */
+    private String waterOssName;
+
+    /** oss链接 */
+    private String ossUrl;
+
+    /** 水印oss链接 */
+    private String waterOssUrl;
+
+    /** html链接\n */
+    private String htmlUrl;
+
+    /** 上传时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date uploadTime;
+
+}
+

+ 16 - 0
src/main/java/com/caimei/www/service/page/ArticleService.java

@@ -3,6 +3,7 @@ package com.caimei.www.service.page;
 import com.caimei.www.pojo.JsonModel;
 import com.caimei.www.pojo.page.Article;
 import com.caimei.www.pojo.page.BaseLink;
+import com.caimei.www.pojo.page.CmProductArchiveFile;
 import com.caimei.www.pojo.page.ImageLink;
 import com.github.pagehelper.PageInfo;
 import org.springframework.web.server.ServerWebExchange;
@@ -31,6 +32,21 @@ public interface ArticleService {
      */
     JsonModel<PageInfo<ImageLink>> getArticleRecommended(Integer typeId, int pageNum, int pageSize);
 
+    /**
+     * 获取文章推荐
+     */
+    List<Article> getArticleSelected(Integer pageNum,   Integer pageSize);
+    /**
+     * 获取相关文章
+     */
+    List<Article> getArticleRelatedId(String relatedId);
+    /**
+     * 获取最新美业资料top3
+     *
+     * @param
+     * @return
+     */
+    List<CmProductArchiveFile> findArchiveFileAddTime(Integer pageNum,   Integer pageSize);
     /**
      * 获取相关文章
      */

+ 111 - 0
src/main/java/com/caimei/www/service/page/CmBrandLandingService.java

@@ -0,0 +1,111 @@
+package com.caimei.www.service.page;
+
+import com.caimei.www.pojo.link.CmBrandLandingVO;
+import com.caimei.www.pojo.page.CmBrandLanding;
+
+import java.util.List;
+
+/**
+ * 供应商落地页资源Service接口
+ *
+ * @author Kaick
+ * @date 2023-08-08
+ */
+public interface CmBrandLandingService
+{
+    /**
+     * 通过对象查询供应商落地页资源列表
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 供应商落地页资源集合
+     */
+    public List<CmBrandLandingVO> getCmBrandLandingList(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 通过Id查询供应商落地页资源
+     *
+     * @param id 供应商落地页资源主键
+     * @return 供应商落地页资源
+     */
+    public CmBrandLanding getCmBrandLandingById(String id);
+
+    /**
+     * 通过对象查询供应商落地页资源
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 供应商落地页资源
+     */
+    public CmBrandLanding getByCmBrandLanding(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 通过对象查询供应商落地页资源Id
+     *
+     * @param cmBrandLanding 供应商落地页资源主键
+     * @return String
+     */
+    public String getById(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 通过对象查询供应商落地页资源Ids
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return List<String>
+     */
+    public List<String> getByIds(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 通过对象查询供应商落地页资源记录总数
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 供应商落地页资源Integer
+     */
+    public int getCmBrandLandingCount(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 新增供应商落地页资源
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 结果
+     */
+    public int addCmBrandLanding(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 修改供应商落地页资源
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 结果
+     */
+    public int updateCmBrandLanding(CmBrandLanding cmBrandLanding);
+
+    /**
+     * 删除供应商落地页资源信息
+     *
+     * @param id 供应商落地页资源主键
+     * @return 结果
+     */
+    public int delCmBrandLandingById(String id);
+
+    /**
+     * 批量删除供应商落地页资源
+     *
+     * @param ids 需要删除的供应商落地页资源主键集合
+     * @return 结果
+     */
+    public int delCmBrandLandingByIds(String[] ids);
+
+    /**
+     * 批量新增供应商落地页资源
+     *
+     * @param cmBrandLandingList 供应商落地页资源列表
+     * @return 结果
+     */
+    public void batchAddCmBrandLanding(List<CmBrandLanding> cmBrandLandingList);
+
+    /**
+     * 批量修改供应商落地页资源
+     *
+     * @param cmBrandLandingList 供应商落地页资源列表
+     * @return 结果
+     */
+    public void batchUpdateCmBrandLanding(List<CmBrandLanding> cmBrandLandingList);
+}

+ 8 - 0
src/main/java/com/caimei/www/service/page/ProductService.java

@@ -19,6 +19,14 @@ import java.util.Map;
  * @date : 2020/7/8
  */
 public interface ProductService {
+    /**
+     * 功能描述: 销量前三商品
+     * @auther: Kaick
+     * @date: 2023/8/8 13:53
+     * @param
+     * @return []
+     */
+    List<ProductList> getProductSellNumbers();
     /**
      * 根据商品Id获取详情
      * @param productId

+ 47 - 1
src/main/java/com/caimei/www/service/page/impl/ArticleServiceImpl.java

@@ -4,6 +4,7 @@ import com.caimei.www.mapper.ArticleDao;
 import com.caimei.www.pojo.JsonModel;
 import com.caimei.www.pojo.page.Article;
 import com.caimei.www.pojo.page.BaseLink;
+import com.caimei.www.pojo.page.CmProductArchiveFile;
 import com.caimei.www.pojo.page.ImageLink;
 import com.caimei.www.service.page.ArticleService;
 import com.caimei.www.service.redis.RedisService;
@@ -12,6 +13,7 @@ import com.caimei.www.utils.PriceUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.util.StringUtil;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.stereotype.Service;
@@ -43,7 +45,18 @@ public class ArticleServiceImpl implements ArticleService {
      */
     @Override
     public List<BaseLink> getArticleTypes() {
-        return articleDao.getArticleTypes();
+        List<BaseLink> articleTypes = articleDao.getArticleTypes("0");
+        infoTypes(articleTypes);
+        return articleTypes;
+    }
+    public void infoTypes(List<BaseLink> articleTypes ) {
+        articleTypes.forEach(type->{
+            List<BaseLink> articleTypes1 = articleDao.getArticleTypes(type.getId().toString());
+            if(articleTypes1.size()>0){
+                type.setLinkList(articleTypes1);
+                infoTypes(articleTypes1);
+            }
+        });
     }
 
     /**
@@ -79,6 +92,39 @@ public class ArticleServiceImpl implements ArticleService {
         PageInfo<ImageLink> pageInfo = new PageInfo(recommended);
         return JsonModel.success(pageInfo);
     }
+    /**
+     * 获取精选文章推荐
+     *
+     */
+    @Override
+    public List<Article> getArticleSelected(Integer pageNum,   Integer pageSize) {
+        List<Article> selected = articleDao.getArticleSelected( pageNum,    pageSize);
+        selected.forEach(item -> {
+            item.setImage(ImageUtil.getImageURL("", item.getImage(), 0, domain));
+        });
+        return selected;
+    }
+    /**
+     * 获取精选文章推荐
+     *
+     */
+    @Override
+    public List<Article> getArticleRelatedId(String authorId){
+        List<Article> infoRelated = articleDao.getArticleRelatedId(authorId);
+        infoRelated.forEach(item -> {
+            item.setImage(ImageUtil.getImageURL("", item.getImage(), 0, domain));
+        });
+        return infoRelated;
+    }
+    /**
+     * 获取精选文章推荐
+     *
+     */
+    @Override
+    public List<CmProductArchiveFile> findArchiveFileAddTime(Integer pageNum,   Integer pageSize) {
+        List<CmProductArchiveFile> selected = articleDao.findArchiveFileAddTime(pageNum,pageSize);
+        return selected;
+    }
 
     /**
      * 获取相关文章

+ 181 - 0
src/main/java/com/caimei/www/service/page/impl/CmBrandLandingServiceImpl.java

@@ -0,0 +1,181 @@
+package com.caimei.www.service.page.impl;
+
+import java.util.Date;
+import java.util.List;
+
+import com.caimei.www.pojo.link.CmBrandLandingVO;
+import com.caimei.www.pojo.page.CmBrandLanding;
+import com.caimei.www.service.page.CmBrandLandingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.caimei.www.mapper.CmBrandLandingMapper;
+import com.caimei.www.pojo.link.CmBrandLandingVO;
+
+/**
+ * 供应商落地页资源Service业务层处理
+ *
+ * @author Kaick
+ * @date 2023-08-08
+ */
+@Service
+public class CmBrandLandingServiceImpl implements CmBrandLandingService
+{
+    @Autowired
+    private CmBrandLandingMapper cmBrandLandingMapper;
+
+    /**
+     * 通过对象查询供应商落地页资源列表
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 供应商落地页资源
+     */
+    @Override
+    public List<CmBrandLandingVO> getCmBrandLandingList(CmBrandLanding cmBrandLanding)
+    {
+        return cmBrandLandingMapper.getCmBrandLandingList(cmBrandLanding);
+    }
+
+    /**
+     * 通过Id查询供应商落地页资源
+     *
+     * @param id 供应商落地页资源主键
+     * @return 供应商落地页资源
+     */
+    @Override
+    public CmBrandLanding getCmBrandLandingById(String id)
+    {
+        return cmBrandLandingMapper.getCmBrandLandingById(id);
+    }
+
+    /**
+     * 通过对象查询供应商落地页资源
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 供应商落地页资源
+     */
+    @Override
+    public CmBrandLanding getByCmBrandLanding(CmBrandLanding cmBrandLanding)
+    {
+        return cmBrandLandingMapper.getByCmBrandLanding(cmBrandLanding);
+    }
+
+    /**
+     * 通过对象查询供应商落地页资源Id
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return String
+     */
+    @Override
+    public String getById(CmBrandLanding cmBrandLanding)
+    {
+        return cmBrandLandingMapper.getById(cmBrandLanding);
+    }
+
+    /**
+     * 通过对象查询供应商落地页资源Ids
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return List<String>
+     */
+    @Override
+    public List<String> getByIds(CmBrandLanding cmBrandLanding)
+    {
+        return cmBrandLandingMapper.getByIds(cmBrandLanding);
+    }
+
+    /**
+     * 通过对象查询供应商落地页资源记录总数
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return int
+     */
+    @Override
+    public int getCmBrandLandingCount(CmBrandLanding cmBrandLanding)
+    {
+        return cmBrandLandingMapper.getCmBrandLandingCount(cmBrandLanding);
+    }
+
+    /**
+     * 新增供应商落地页资源
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 结果
+     */
+    @Override
+    public int addCmBrandLanding(CmBrandLanding cmBrandLanding)
+    {
+        cmBrandLanding.setAddTime(new Date());
+        return cmBrandLandingMapper.addCmBrandLanding(cmBrandLanding);
+    }
+
+    /**
+     * 修改供应商落地页资源
+     *
+     * @param cmBrandLanding 供应商落地页资源
+     * @return 结果
+     */
+    @Override
+    public int updateCmBrandLanding(CmBrandLanding cmBrandLanding)
+    {
+        cmBrandLanding.setUpdateTime(new Date());
+        return cmBrandLandingMapper.updateCmBrandLanding(cmBrandLanding);
+    }
+
+
+
+    /**
+     * 删除供应商落地页资源信息
+     *
+     * @param id 供应商落地页资源主键
+     * @return 结果
+     */
+    @Override
+    public int delCmBrandLandingById(String id)
+    {
+        return cmBrandLandingMapper.updateCmBrandLanding(new CmBrandLanding().setId(id).setDelFlag(1));
+        //return cmBrandLandingMapper.delCmBrandLandingById(id);
+    }
+
+    /**
+     * 批量删除供应商落地页资源
+     *
+     * @param ids 需要删除的供应商落地页资源主键
+     * @return 结果
+     */
+            @Override
+    public int delCmBrandLandingByIds(String[] ids)
+    {
+        return cmBrandLandingMapper.updateDelCmBrandLandingByIds(ids,1);
+        //return cmBrandLandingMapper.delCmBrandLandingByIds(ids);
+    }
+
+    /**
+     * 批量新增供应商落地页资源
+     *
+     * @param cmBrandLandingList 供应商落地页资源列表
+     * @return 结果
+     */
+    @Override
+    public void batchAddCmBrandLanding(List<CmBrandLanding> cmBrandLandingList)
+    {
+        for (CmBrandLanding cmBrandLanding : cmBrandLandingList)
+        {
+                cmBrandLandingMapper.addCmBrandLanding(cmBrandLanding);
+        }
+    }
+
+    /**
+     * 批量修改供应商落地页资源
+     *
+     * @param cmBrandLandingList 供应商落地页资源列表
+     * @return 结果
+     */
+    @Override
+    public void batchUpdateCmBrandLanding(List<CmBrandLanding> cmBrandLandingList)
+    {
+        for (CmBrandLanding cmBrandLanding : cmBrandLandingList)
+        {
+               cmBrandLandingMapper.updateCmBrandLanding(cmBrandLanding);
+        }
+    }
+}

+ 12 - 0
src/main/java/com/caimei/www/service/page/impl/ProductServiceImpl.java

@@ -99,6 +99,18 @@ public class ProductServiceImpl implements ProductService {
         }
     }
 
+    @Override
+    public List<ProductList> getProductSellNumbers() {
+        List<ProductList> productSellNumbers = productDao.getProductSellNumbers();
+        if (null != productSellNumbers && productSellNumbers.size() > 0) {
+            productSellNumbers.forEach(product -> {
+                // 设置 图片路径
+                product.setImage(ImageUtil.getImageURL("product", product.getImage(), 0, domain));
+            });
+        }
+        return productSellNumbers;
+    }
+
     /**
      * 产品仪器楼层数据
      *

+ 113 - 0
src/main/java/com/caimei/www/utils/PaginationVo.java

@@ -0,0 +1,113 @@
+package com.caimei.www.utils;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/7
+ */
+@Data
+public class PaginationVo<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 PaginationVo(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 PaginationVo(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 PaginationVo(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 PaginationVo() {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;
+}
+

+ 65 - 2
src/main/resources/mapper/ArticleMapper.xml

@@ -4,9 +4,11 @@
     <select id="getArticleTypes" resultType="com.caimei.www.pojo.page.BaseLink">
 		select  a.id,
 				a.name,
-				a.sort
+				a.sort,
+				a.parentId,
+				a.parentIds
 		from info_type a
-		where a.enabledStatus = 1
+		where  a.delFlag = 0 and a.type = 1 and a.enabledStatus = 1 and a.parentId=#{parentId}
 		order by a.sort desc
 	</select>
 
@@ -41,6 +43,66 @@
 		order by a.pubdate desc
 	</select>
 
+    <select id="getArticleSelected" resultType="com.caimei.www.pojo.page.Article">
+		select
+		a.id as id,
+		a.title as title,
+		a.guidanceImage as image,
+		a.publisher as publisher,
+		a.pubdate as publishDate,
+		a.recommendContent as intro,
+		a.infoContent as content,
+		(IFNULL(c.pv, 0) + IFNULL(a.basePv, 0) + IFNULL((c.num + a.basePraise), 0)) as pv,
+		a.label as label,
+		a.typeId as typeId,
+		a.relatedLabels
+		from cm_related cr
+		left join info a on a.id=cr.relatedId
+		left join info_praise c on a.id = c.infoId
+		where cr.type=2
+		and a.enabledStatus = 1
+		and a.auditStatus = 2
+		and NOW() >= a.pubdate
+		order by cr.sort asc, a.pubdate desc
+		<if test="pageNum != null">
+			limit #{pageNum},#{pageSize}
+		</if>
+	</select>
+
+    <select id="getArticleRelatedId" resultType="com.caimei.www.pojo.page.Article" parameterType="string">
+		select  a.id as id,
+				a.title as title,
+				a.guidanceImage as image,
+				a.publisher as publisher,
+				a.pubdate as publishDate,
+				a.recommendContent as intro,
+				a.infoContent as content,
+				(IFNULL(c.pv, 0) + IFNULL(a.basePv, 0) + IFNULL((c.num + a.basePraise), 0)) as pv,
+				a.label as label,
+				a.typeId as typeId,
+				a.relatedLabels
+		from cm_related cr
+				 left join info a on a.id=cr.relatedId
+				 left join info_praise c on a.id = c.infoId
+		where cr.type=1
+		and a.enabledStatus = 1
+		and a.auditStatus = 2
+		and cr.authorId = #{authorId}
+		and NOW() >= a.pubdate
+		order by cr.sort asc, a.pubdate desc
+	</select>
+
+	<select id="findArchiveFileAddTime" resultType="com.caimei.www.pojo.page.CmProductArchiveFile">
+		select cf.id,cc.productArchiveId,cf.archiveContentId,fileName,pa.productId
+		from cm_product_archive_file cf
+		left join cm_product_archive_content cc on cf.archiveContentId = cc.id
+		left join cm_product_archive  pa on cc.productArchiveId = pa.id
+		where cc.type = 3
+		order by cc.addTime desc
+		<if test="pageNum != null">
+			limit #{pageNum},#{pageSize}
+		</if>
+	</select>
     <select id="getArticleRelated" resultType="com.caimei.www.pojo.page.Article">
         select
 			a.id as id,
@@ -124,6 +186,7 @@
 		  a.label AS label,
 		  a.typeId AS typeId,
 		  a.keyword AS keyword,
+		  a.autoStatus AS autoStatus,
 		  a.recommendContent AS recommendContent,
 		  a.source AS source,
 		  IFNULL((c.num + a.basePraise), 0) AS likes

+ 540 - 0
src/main/resources/mapper/CmBrandLandingMapper.xml

@@ -0,0 +1,540 @@
+<?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.CmBrandLandingMapper">
+
+	<resultMap type="com.caimei.www.pojo.page.CmBrandLanding" id="CmBrandLandingResult">
+		<result property="id"    column="id"    />
+		<result property="type"    column="type"    />
+		<result property="authUserId"    column="authUserId"    />
+		<result property="authorId"    column="authorId"    />
+		<result property="headPcBanner"    column="headPcBanner"    />
+		<result property="headAppBanner"    column="headAppBanner"    />
+		<result property="jumpStatus"    column="jumpStatus"    />
+		<result property="jumpPcPicture"    column="jumpPcPicture"    />
+		<result property="jumpAppPicture"    column="jumpAppPicture"    />
+		<result property="jumpLink"    column="jumpLink"    />
+		<result property="title"    column="title"    />
+		<result property="content"    column="content"    />
+		<result property="video"    column="video"    />
+		<result property="sort"    column="sort"    />
+		<result property="pcStatus"    column="pcStatus"    />
+		<result property="appStatus"    column="appStatus"    />
+		<result property="levelType"    column="levelType"    />
+		<result property="delFlag"    column="delFlag"    />
+		<result property="updateTime"    column="updateTime"    />
+		<result property="addTime"    column="addTime"    />
+	</resultMap>
+
+	<sql id="selectCmBrandLandingVo">
+		select
+			cm_brand_landing.id,
+			cm_brand_landing.type,
+			cm_brand_landing.authUserId,
+			cm_brand_landing.authorId,
+			cm_brand_landing.headPcBanner,
+			cm_brand_landing.headAppBanner,
+			cm_brand_landing.jumpStatus,
+			cm_brand_landing.jumpPcPicture,
+			cm_brand_landing.jumpAppPicture,
+			cm_brand_landing.jumpLink,
+			cm_brand_landing.title,
+			cm_brand_landing.content,
+			cm_brand_landing.video,
+			cm_brand_landing.sort,
+			cm_brand_landing.pcStatus,
+			cm_brand_landing.appStatus,
+			cm_brand_landing.levelType,
+			cm_brand_landing.delFlag,
+			cm_brand_landing.updateTime,
+			cm_brand_landing.addTime
+	</sql>
+
+	<select id="getByCmBrandLanding" parameterType="com.caimei.www.pojo.page.CmBrandLanding" resultMap="CmBrandLandingResult">
+		<include refid="selectCmBrandLandingVo"/>
+		from cm_brand_landing AS cm_brand_landing
+		<where>  cm_brand_landing.delFlag = 0
+			<if test="id != null  and id != ''">
+				and cm_brand_landing.id
+				<if test="id.toUpperCase().indexOf('=')==-1">
+					= #{id}
+				</if>
+				<if test="id.toUpperCase().indexOf('=')!=-1">
+					<if test="id.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="id.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="idIn" collection="id.substring(id.toUpperCase().indexOf('=')+1,id.length()).trim().split(',')" open="(" separator="," close=")">
+						#{idIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="type != null  and type != ''">
+				and cm_brand_landing.type
+				<if test="type.toUpperCase().indexOf('=')==-1">
+					= #{type}
+				</if>
+				<if test="type.toUpperCase().indexOf('=')!=-1">
+					<if test="type.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="type.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="typeIn" collection="type.substring(type.toUpperCase().indexOf('=')+1,type.length()).trim().split(',')" open="(" separator="," close=")">
+						#{typeIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="authUserId != null "> and cm_brand_landing.authUserId = #{authUserId}</if>
+			<if test="authorId != null  and authorId != ''"> and cm_brand_landing.authorId = #{authorId}</if>
+			<if test="headPcBanner != null  and headPcBanner != ''"> and cm_brand_landing.headPcBanner = #{headPcBanner}</if>
+			<if test="headAppBanner != null  and headAppBanner != ''"> and cm_brand_landing.headAppBanner = #{headAppBanner}</if>
+			<if test="jumpStatus != null "> and cm_brand_landing.jumpStatus = #{jumpStatus}</if>
+			<if test="jumpPcPicture != null  and jumpPcPicture != ''"> and cm_brand_landing.jumpPcPicture = #{jumpPcPicture}</if>
+			<if test="jumpAppPicture != null  and jumpAppPicture != ''"> and cm_brand_landing.jumpAppPicture = #{jumpAppPicture}</if>
+			<if test="jumpLink != null  and jumpLink != ''"> and cm_brand_landing.jumpLink = #{jumpLink}</if>
+			<if test="title != null  and title != ''"> and cm_brand_landing.title = #{title}</if>
+			<if test="content != null  and content != ''"> and cm_brand_landing.content = #{content}</if>
+			<if test="video != null  and video != ''"> and cm_brand_landing.video = #{video}</if>
+			<if test="sort != null "> and cm_brand_landing.sort = #{sort}</if>
+			<if test="pcStatus != null "> and cm_brand_landing.pcStatus = #{pcStatus}</if>
+			<if test="appStatus != null "> and cm_brand_landing.appStatus = #{appStatus}</if>
+			<if test="levelType != null  and levelType != ''">
+				and cm_brand_landing.levelType
+				<if test="levelType.toUpperCase().indexOf('=')==-1">
+					= #{levelType}
+				</if>
+				<if test="levelType.toUpperCase().indexOf('=')!=-1">
+					<if test="levelType.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="levelType.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="typeIn" collection="levelType.substring(levelType.toUpperCase().indexOf('=')+1,levelType.length()).trim().split(',')" open="(" separator="," close=")">
+						#{typeIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="delFlag != null "> and cm_brand_landing.delFlag = #{delFlag}</if>
+			<if test="updateTime != null "> and cm_brand_landing.updateTime = #{updateTime}</if>
+			<if test="addTime != null "> and cm_brand_landing.addTime = #{addTime}</if>
+		</where>
+		group by cm_brand_landing.id
+		order by cm_brand_landing.addTime desc
+		limit 0,1
+	</select>
+
+	<select id="getCmBrandLandingList" parameterType="com.caimei.www.pojo.link.CmBrandLandingVO" resultMap="CmBrandLandingResult">
+		<include refid="selectCmBrandLandingVo"/>
+		from cm_brand_landing AS cm_brand_landing
+		<where>  cm_brand_landing.delFlag = 0
+			<if test="id != null  and id != ''">
+				and cm_brand_landing.id
+				<if test="id.toUpperCase().indexOf('=')==-1">
+					= #{id}
+				</if>
+				<if test="id.toUpperCase().indexOf('=')!=-1">
+					<if test="id.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="id.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="idIn" collection="id.substring(id.toUpperCase().indexOf('=')+1,id.length()).trim().split(',')" open="(" separator="," close=")">
+						#{idIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="type != null  and type != ''">
+				and cm_brand_landing.type
+				<if test="type.toUpperCase().indexOf('=')==-1">
+					= #{type}
+				</if>
+				<if test="type.toUpperCase().indexOf('=')!=-1">
+					<if test="type.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="type.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="typeIn" collection="type.substring(type.toUpperCase().indexOf('=')+1,type.length()).trim().split(',')" open="(" separator="," close=")">
+						#{typeIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="authUserId != null "> and cm_brand_landing.authUserId = #{authUserId}</if>
+			<if test="authorId != null  and authorId != ''"> and cm_brand_landing.authorId = #{authorId}</if>
+			<if test="headPcBanner != null  and headPcBanner != ''"> and cm_brand_landing.headPcBanner = #{headPcBanner}</if>
+			<if test="headAppBanner != null  and headAppBanner != ''"> and cm_brand_landing.headAppBanner = #{headAppBanner}</if>
+			<if test="jumpStatus != null "> and cm_brand_landing.jumpStatus = #{jumpStatus}</if>
+			<if test="jumpPcPicture != null  and jumpPcPicture != ''"> and cm_brand_landing.jumpPcPicture = #{jumpPcPicture}</if>
+			<if test="jumpAppPicture != null  and jumpAppPicture != ''"> and cm_brand_landing.jumpAppPicture = #{jumpAppPicture}</if>
+			<if test="jumpLink != null  and jumpLink != ''"> and cm_brand_landing.jumpLink = #{jumpLink}</if>
+			<if test="title != null  and title != ''"> and cm_brand_landing.title = #{title}</if>
+			<if test="content != null  and content != ''"> and cm_brand_landing.content = #{content}</if>
+			<if test="video != null  and video != ''"> and cm_brand_landing.video = #{video}</if>
+			<if test="sort != null "> and cm_brand_landing.sort = #{sort}</if>
+			<if test="pcStatus != null "> and cm_brand_landing.pcStatus = #{pcStatus}</if>
+			<if test="appStatus != null "> and cm_brand_landing.appStatus = #{appStatus}</if>
+			<if test="levelType != null  and levelType != ''">
+				and cm_brand_landing.levelType
+				<if test="levelType.toUpperCase().indexOf('=')==-1">
+					= #{levelType}
+				</if>
+				<if test="levelType.toUpperCase().indexOf('=')!=-1">
+					<if test="levelType.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="levelType.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="typeIn" collection="levelType.substring(levelType.toUpperCase().indexOf('=')+1,levelType.length()).trim().split(',')" open="(" separator="," close=")">
+						#{typeIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="delFlag != null "> and cm_brand_landing.delFlag = #{delFlag}</if>
+			<if test="updateTime != null "> and cm_brand_landing.updateTime = #{updateTime}</if>
+			<if test="addTime != null "> and cm_brand_landing.addTime = #{addTime}</if>
+		</where>
+		group by cm_brand_landing.id
+		order by cm_brand_landing.addTime desc
+	</select>
+
+	<select id="getCmBrandLandingCount" parameterType="com.caimei.www.pojo.page.CmBrandLanding" resultType="String">
+		select count(1)
+		from cm_brand_landing AS cm_brand_landing
+		<where>  cm_brand_landing.delFlag = 0
+			<if test="id != null  and  id != ''">
+				and cm_brand_landing.id
+				<if test="id.toUpperCase().indexOf('=')==-1">
+					= #{id}
+				</if>
+				<if test="id.toUpperCase().indexOf('=')!=-1">
+					<if test="id.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="id.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="idIn" collection="id.substring(id.toUpperCase().indexOf('=')+1,id.length()).trim().split(',')" open="(" separator="," close=")">
+						#{idIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="type != null  and type != ''">
+				and cm_brand_landing.type
+				<if test="type.toUpperCase().indexOf('=')==-1">
+					= #{type}
+				</if>
+				<if test="type.toUpperCase().indexOf('=')!=-1">
+					<if test="type.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="type.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="typeIn" collection="type.substring(type.toUpperCase().indexOf('=')+1,type.length()).trim().split(',')" open="(" separator="," close=")">
+						#{typeIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="authUserId != null "> and cm_brand_landing.authUserId = #{authUserId}</if>
+			<if test="authorId != null  and authorId != ''"> and cm_brand_landing.authorId = #{authorId}</if>
+			<if test="headPcBanner != null  and headPcBanner != ''"> and cm_brand_landing.headPcBanner = #{headPcBanner}</if>
+			<if test="headAppBanner != null  and headAppBanner != ''"> and cm_brand_landing.headAppBanner = #{headAppBanner}</if>
+			<if test="jumpStatus != null "> and cm_brand_landing.jumpStatus = #{jumpStatus}</if>
+			<if test="jumpPcPicture != null  and jumpPcPicture != ''"> and cm_brand_landing.jumpPcPicture = #{jumpPcPicture}</if>
+			<if test="jumpAppPicture != null  and jumpAppPicture != ''"> and cm_brand_landing.jumpAppPicture = #{jumpAppPicture}</if>
+			<if test="jumpLink != null  and jumpLink != ''"> and cm_brand_landing.jumpLink = #{jumpLink}</if>
+			<if test="title != null  and title != ''"> and cm_brand_landing.title = #{title}</if>
+			<if test="content != null  and content != ''"> and cm_brand_landing.content = #{content}</if>
+			<if test="video != null  and video != ''"> and cm_brand_landing.video = #{video}</if>
+			<if test="sort != null "> and cm_brand_landing.sort = #{sort}</if>
+			<if test="pcStatus != null "> and cm_brand_landing.pcStatus = #{pcStatus}</if>
+			<if test="appStatus != null "> and cm_brand_landing.appStatus = #{appStatus}</if>
+			<if test="levelType != null  and levelType != ''">
+				and cm_brand_landing.levelType
+				<if test="levelType.toUpperCase().indexOf('=')==-1">
+					= #{levelType}
+				</if>
+				<if test="levelType.toUpperCase().indexOf('=')!=-1">
+					<if test="levelType.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="levelType.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="typeIn" collection="levelType.substring(levelType.toUpperCase().indexOf('=')+1,levelType.length()).trim().split(',')" open="(" separator="," close=")">
+						#{typeIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="delFlag != null "> and cm_brand_landing.delFlag = #{delFlag}</if>
+			<if test="updateTime != null "> and cm_brand_landing.updateTime = #{updateTime}</if>
+			<if test="addTime != null "> and cm_brand_landing.addTime = #{addTime}</if>
+		</where>
+		group by cm_brand_landing.id
+	</select>
+
+	<select id="getCmBrandLandingById" parameterType="String" resultMap="CmBrandLandingResult">
+		<include refid="selectCmBrandLandingVo"/>
+		from cm_brand_landing AS cm_brand_landing
+		where  cm_brand_landing.delFlag = 0 and cm_brand_landing.id = #{id}
+	</select>
+
+	<select id="getByIds" parameterType="com.caimei.www.pojo.page.CmBrandLanding" resultType="String">
+		select id
+		from cm_brand_landing AS cm_brand_landing
+		<where>  cm_brand_landing.delFlag = 0
+			<if test="id != null  and id != ''">
+				and cm_brand_landing.id
+				<if test="id.toUpperCase().indexOf('=')==-1">
+					= #{id}
+				</if>
+				<if test="id.toUpperCase().indexOf('=')!=-1">
+					<if test="id.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="id.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="idIn" collection="id.substring(id.toUpperCase().indexOf('=')+1,id.length()).trim().split(',')" open="(" separator="," close=")">
+						#{idIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="type != null  and type != ''">
+				and cm_brand_landing.type
+				<if test="type.toUpperCase().indexOf('=')==-1">
+					= #{type}
+				</if>
+				<if test="type.toUpperCase().indexOf('=')!=-1">
+					<if test="type.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="type.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="typeIn" collection="type.substring(type.toUpperCase().indexOf('=')+1,type.length()).trim().split(',')" open="(" separator="," close=")">
+						#{typeIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="authUserId != null "> and cm_brand_landing.authUserId = #{authUserId}</if>
+			<if test="authorId != null  and authorId != ''"> and cm_brand_landing.authorId = #{authorId}</if>
+			<if test="headPcBanner != null  and headPcBanner != ''"> and cm_brand_landing.headPcBanner = #{headPcBanner}</if>
+			<if test="headAppBanner != null  and headAppBanner != ''"> and cm_brand_landing.headAppBanner = #{headAppBanner}</if>
+			<if test="jumpStatus != null "> and cm_brand_landing.jumpStatus = #{jumpStatus}</if>
+			<if test="jumpPcPicture != null  and jumpPcPicture != ''"> and cm_brand_landing.jumpPcPicture = #{jumpPcPicture}</if>
+			<if test="jumpAppPicture != null  and jumpAppPicture != ''"> and cm_brand_landing.jumpAppPicture = #{jumpAppPicture}</if>
+			<if test="jumpLink != null  and jumpLink != ''"> and cm_brand_landing.jumpLink = #{jumpLink}</if>
+			<if test="title != null  and title != ''"> and cm_brand_landing.title = #{title}</if>
+			<if test="content != null  and content != ''"> and cm_brand_landing.content = #{content}</if>
+			<if test="video != null  and video != ''"> and cm_brand_landing.video = #{video}</if>
+			<if test="sort != null "> and cm_brand_landing.sort = #{sort}</if>
+			<if test="pcStatus != null "> and cm_brand_landing.pcStatus = #{pcStatus}</if>
+			<if test="appStatus != null "> and cm_brand_landing.appStatus = #{appStatus}</if>
+			<if test="levelType != null  and levelType != ''">
+				and cm_brand_landing.levelType
+				<if test="levelType.toUpperCase().indexOf('=')==-1">
+					= #{levelType}
+				</if>
+				<if test="levelType.toUpperCase().indexOf('=')!=-1">
+					<if test="levelType.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="levelType.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="typeIn" collection="levelType.substring(levelType.toUpperCase().indexOf('=')+1,levelType.length()).trim().split(',')" open="(" separator="," close=")">
+						#{typeIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="delFlag != null "> and cm_brand_landing.delFlag = #{delFlag}</if>
+			<if test="updateTime != null "> and cm_brand_landing.updateTime = #{updateTime}</if>
+			<if test="addTime != null "> and cm_brand_landing.addTime = #{addTime}</if>
+		</where>
+		group by cm_brand_landing.id
+	</select>
+
+	<select id="getById" parameterType="com.caimei.www.pojo.page.CmBrandLanding" resultType="String">
+		select id
+		from cm_brand_landing AS cm_brand_landing
+		<where>  cm_brand_landing.delFlag = 0
+			<if test="id != null  and id != ''">
+				and cm_brand_landing.id
+				<if test="id.toString().toUpperCase().indexOf('=')==-1">
+					= #{id}
+				</if>
+				<if test="id.toString().toUpperCase().indexOf('=')!=-1">
+					<if test="id.toString().toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="id.toString().toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="idIn" collection="id.toString().substring(id.toString().toUpperCase().indexOf('=')+1,id.toString().length()).trim().split(',')" open="(" separator="," close=")">
+						#{idIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="type != null  and type != ''">
+				and cm_brand_landing.type
+				<if test="type.toUpperCase().indexOf('=')==-1">
+					= #{type}
+				</if>
+				<if test="type.toUpperCase().indexOf('=')!=-1">
+					<if test="type.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="type.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="typeIn" collection="type.substring(type.toUpperCase().indexOf('=')+1,type.length()).trim().split(',')" open="(" separator="," close=")">
+						#{typeIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="authUserId != null "> and cm_brand_landing.authUserId = #{authUserId}</if>
+			<if test="authorId != null  and authorId != ''"> and cm_brand_landing.authorId = #{authorId}</if>
+			<if test="headPcBanner != null  and headPcBanner != ''"> and cm_brand_landing.headPcBanner = #{headPcBanner}</if>
+			<if test="headAppBanner != null  and headAppBanner != ''"> and cm_brand_landing.headAppBanner = #{headAppBanner}</if>
+			<if test="jumpStatus != null "> and cm_brand_landing.jumpStatus = #{jumpStatus}</if>
+			<if test="jumpPcPicture != null  and jumpPcPicture != ''"> and cm_brand_landing.jumpPcPicture = #{jumpPcPicture}</if>
+			<if test="jumpAppPicture != null  and jumpAppPicture != ''"> and cm_brand_landing.jumpAppPicture = #{jumpAppPicture}</if>
+			<if test="jumpLink != null  and jumpLink != ''"> and cm_brand_landing.jumpLink = #{jumpLink}</if>
+			<if test="title != null  and title != ''"> and cm_brand_landing.title = #{title}</if>
+			<if test="content != null  and content != ''"> and cm_brand_landing.content = #{content}</if>
+			<if test="video != null  and video != ''"> and cm_brand_landing.video = #{video}</if>
+			<if test="sort != null "> and cm_brand_landing.sort = #{sort}</if>
+			<if test="pcStatus != null "> and cm_brand_landing.pcStatus = #{pcStatus}</if>
+			<if test="appStatus != null "> and cm_brand_landing.appStatus = #{appStatus}</if>
+			<if test="levelType != null  and levelType != ''">
+				and cm_brand_landing.levelType
+				<if test="levelType.toUpperCase().indexOf('=')==-1">
+					= #{levelType}
+				</if>
+				<if test="levelType.toUpperCase().indexOf('=')!=-1">
+					<if test="levelType.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="levelType.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="typeIn" collection="levelType.substring(levelType.toUpperCase().indexOf('=')+1,levelType.length()).trim().split(',')" open="(" separator="," close=")">
+						#{typeIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="delFlag != null "> and cm_brand_landing.delFlag = #{delFlag}</if>
+			<if test="updateTime != null "> and cm_brand_landing.updateTime = #{updateTime}</if>
+			<if test="addTime != null "> and cm_brand_landing.addTime = #{addTime}</if>
+		</where>
+		group by cm_brand_landing.id
+		limit 0,1
+	</select>
+
+	<insert id="addCmBrandLanding" parameterType="com.caimei.www.pojo.page.CmBrandLanding" useGeneratedKeys="true" keyProperty="id">
+		insert into cm_brand_landing
+		<trim prefix="(" suffix=")" suffixOverrides=",">
+			<if test="id != null and id != ''">id,</if>
+			<if test="type != null and type != ''">type,</if>
+			<if test="authUserId != null">authUserId,</if>
+			<if test="authorId != null and authorId != ''">authorId,</if>
+			<if test="headPcBanner != null and headPcBanner != ''">headPcBanner,</if>
+			<if test="headAppBanner != null and headAppBanner != ''">headAppBanner,</if>
+			<if test="jumpStatus != null">jumpStatus,</if>
+			<if test="jumpPcPicture != null and jumpPcPicture != ''">jumpPcPicture,</if>
+			<if test="jumpAppPicture != null and jumpAppPicture != ''">jumpAppPicture,</if>
+			<if test="jumpLink != null and jumpLink != ''">jumpLink,</if>
+			<if test="title != null and title != ''">title,</if>
+			<if test="content != null and content != ''">content,</if>
+			<if test="video != null and video != ''">video,</if>
+			<if test="sort != null">sort,</if>
+			<if test="pcStatus != null">pcStatus,</if>
+			<if test="appStatus != null">appStatus,</if>
+			<if test="levelType != null and levelType != ''">levelType,</if>
+			<if test="delFlag != null">delFlag,</if>
+			<if test="updateTime != null">updateTime,</if>
+			<if test="addTime != null">addTime,</if>
+		</trim>
+		<trim prefix="values (" suffix=")" suffixOverrides=",">
+			<if test="id != null and id != ''">#{id},</if>
+			<if test="type != null and type != ''">#{type},</if>
+			<if test="authUserId != null">#{authUserId},</if>
+			<if test="authorId != null and authorId != ''">#{authorId},</if>
+			<if test="headPcBanner != null and headPcBanner != ''">#{headPcBanner},</if>
+			<if test="headAppBanner != null and headAppBanner != ''">#{headAppBanner},</if>
+			<if test="jumpStatus != null">#{jumpStatus},</if>
+			<if test="jumpPcPicture != null and jumpPcPicture != ''">#{jumpPcPicture},</if>
+			<if test="jumpAppPicture != null and jumpAppPicture != ''">#{jumpAppPicture},</if>
+			<if test="jumpLink != null and jumpLink != ''">#{jumpLink},</if>
+			<if test="title != null and title != ''">#{title},</if>
+			<if test="content != null and content != ''">#{content},</if>
+			<if test="video != null and video != ''">#{video},</if>
+			<if test="sort != null">#{sort},</if>
+			<if test="pcStatus != null">#{pcStatus},</if>
+			<if test="appStatus != null">#{appStatus},</if>
+			<if test="levelType != null and levelType != ''">#{levelType},</if>
+			<if test="delFlag != null">#{delFlag},</if>
+			<if test="updateTime != null">#{updateTime},</if>
+			<if test="addTime != null">#{addTime},</if>
+		</trim>
+	</insert>
+
+	<update id="updateCmBrandLanding" parameterType="com.caimei.www.pojo.page.CmBrandLanding">
+		update cm_brand_landing
+		<trim prefix="SET" suffixOverrides=",">
+			<if test="type != null and type != ''">type = #{type},</if>
+			<if test="authUserId != null">authUserId = #{authUserId},</if>
+			<if test="authorId != null and authorId != ''">authorId = #{authorId},</if>
+			<if test="headPcBanner != null and headPcBanner != ''">headPcBanner = #{headPcBanner},</if>
+			<if test="headAppBanner != null and headAppBanner != ''">headAppBanner = #{headAppBanner},</if>
+			<if test="jumpStatus != null">jumpStatus = #{jumpStatus},</if>
+			<if test="jumpPcPicture != null and jumpPcPicture != ''">jumpPcPicture = #{jumpPcPicture},</if>
+			<if test="jumpAppPicture != null and jumpAppPicture != ''">jumpAppPicture = #{jumpAppPicture},</if>
+			<if test="jumpLink != null and jumpLink != ''">jumpLink = #{jumpLink},</if>
+			<if test="title != null and title != ''">title = #{title},</if>
+			<if test="content != null and content != ''">content = #{content},</if>
+			<if test="video != null and video != ''">video = #{video},</if>
+			<if test="sort != null">sort = #{sort},</if>
+			<if test="pcStatus != null">pcStatus = #{pcStatus},</if>
+			<if test="appStatus != null">appStatus = #{appStatus},</if>
+			<if test="levelType != null and levelType != ''">levelType = #{levelType},</if>
+			<if test="delFlag != null">delFlag = #{delFlag},</if>
+			<if test="updateTime != null">updateTime = #{updateTime},</if>
+			<if test="addTime != null">addTime = #{addTime},</if>
+		</trim>
+		where id = #{id}
+	</update>
+
+	<update id="updateDelCmBrandLandingByIds" parameterType="String">
+		update cm_brand_landing set delFlag=#{delFlag} where id in
+		<foreach item="id" collection="ids" open="(" separator="," close=")">
+			#{id}
+		</foreach>
+	</update>
+
+	<delete id="delCmBrandLandingById" parameterType="String">
+		delete
+		from cm_brand_landing where id = #{id}
+	</delete>
+
+	<delete id="delCmBrandLanding" parameterType="com.caimei.www.pojo.page.CmBrandLanding">
+		delete
+		from cm_brand_landing AS cm_brand_landing
+		<where>
+			<if test="id != null  and id != ''">
+				and cm_brand_landing.id
+				<if test="id.toUpperCase().indexOf('=')==-1">
+					= #{id}
+				</if>
+				<if test="id.toUpperCase().indexOf('=')!=-1">
+					<if test="id.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="id.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="idIn" collection="id.substring(id.toUpperCase().indexOf('=')+1,id.length()).trim().split(',')" open="(" separator="," close=")">
+						#{idIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="type != null  and type != ''">
+				and cm_brand_landing.type
+				<if test="type.toUpperCase().indexOf('=')==-1">
+					= #{type}
+				</if>
+				<if test="type.toUpperCase().indexOf('=')!=-1">
+					<if test="type.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="type.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="typeIn" collection="type.substring(type.toUpperCase().indexOf('=')+1,type.length()).trim().split(',')" open="(" separator="," close=")">
+						#{typeIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="authUserId != null "> and cm_brand_landing.authUserId = #{authUserId}</if>
+			<if test="authorId != null  and authorId != ''"> and cm_brand_landing.authorId = #{authorId}</if>
+			<if test="headPcBanner != null  and headPcBanner != ''"> and cm_brand_landing.headPcBanner = #{headPcBanner}</if>
+			<if test="headAppBanner != null  and headAppBanner != ''"> and cm_brand_landing.headAppBanner = #{headAppBanner}</if>
+			<if test="jumpStatus != null "> and cm_brand_landing.jumpStatus = #{jumpStatus}</if>
+			<if test="jumpPcPicture != null  and jumpPcPicture != ''"> and cm_brand_landing.jumpPcPicture = #{jumpPcPicture}</if>
+			<if test="jumpAppPicture != null  and jumpAppPicture != ''"> and cm_brand_landing.jumpAppPicture = #{jumpAppPicture}</if>
+			<if test="jumpLink != null  and jumpLink != ''"> and cm_brand_landing.jumpLink = #{jumpLink}</if>
+			<if test="title != null  and title != ''"> and cm_brand_landing.title = #{title}</if>
+			<if test="content != null  and content != ''"> and cm_brand_landing.content = #{content}</if>
+			<if test="video != null  and video != ''"> and cm_brand_landing.video = #{video}</if>
+			<if test="sort != null "> and cm_brand_landing.sort = #{sort}</if>
+			<if test="pcStatus != null "> and cm_brand_landing.pcStatus = #{pcStatus}</if>
+			<if test="appStatus != null "> and cm_brand_landing.appStatus = #{appStatus}</if>
+			<if test="levelType != null  and levelType != ''">
+				and cm_brand_landing.levelType
+				<if test="levelType.toUpperCase().indexOf('=')==-1">
+					= #{levelType}
+				</if>
+				<if test="levelType.toUpperCase().indexOf('=')!=-1">
+					<if test="levelType.toUpperCase().indexOf('NOT')!=-1"> not </if>
+					<if test="levelType.toUpperCase().indexOf('IN')!=-1"> in </if>
+					<foreach item="typeIn" collection="levelType.substring(levelType.toUpperCase().indexOf('=')+1,levelType.length()).trim().split(',')" open="(" separator="," close=")">
+						#{typeIn}
+					</foreach>
+				</if>
+			</if>
+			<if test="delFlag != null "> and cm_brand_landing.delFlag = #{delFlag}</if>
+			<if test="updateTime != null "> and cm_brand_landing.updateTime = #{updateTime}</if>
+			<if test="addTime != null "> and cm_brand_landing.addTime = #{addTime}</if>
+		</where>
+	</delete>
+
+	<delete id="delCmBrandLandingByIds" parameterType="String">
+		delete from cm_brand_landing where id in
+		<foreach item="id" collection="ids" open="(" separator="," close=")">
+			#{id}
+		</foreach>
+	</delete>
+
+</mapper>

+ 11 - 0
src/main/resources/mapper/ProductMapper.xml

@@ -106,6 +106,17 @@
 		where productID = #{productId}
 		order by mainFlag desc ,sortIndex is null,sortIndex
 	</select>
+	<select id="getProductSellNumbers" resultType="com.caimei.www.pojo.page.ProductList">
+		select
+			p.productID as id,
+			p.`name` as `name`,
+			p.mainImage as image
+		from product as p
+		left join cm_organize_product_info copi on copi.productId = p.productId
+		where copi.validFlag  = 2
+		  and copi.organizeId = 0
+		order by sellNumber desc limit 0,3
+	</select>
     <select id="getPriceItemById" resultType="com.caimei.www.pojo.order.CartItem">
 		select
 			p.productID as productId,

+ 5 - 5
src/main/resources/static/css/activity/activityTopic.css

@@ -18,11 +18,11 @@ a:hover{color:#333}
 .max{height:auto !important}
 .p-icon{display:inline-block;width:66px;height:22px;vertical-align:middle}
 .p-icon::before{content:'';display:inline-block;width:66px;height:22px;background:url(/img/base/icon.png) no-repeat;margin-left:-5px}
-.p-icon.i1::before{background-position:0px -714px}
-.p-icon.i2::before{background-position:0px -744px}
-.p-icon.i3::before{background-position:0px -774px}
-.p-icon.i4::before{background-position:0px -804px}
-.p-icon.i5::before{background-position:0px -834px}
+.p-icon.i1::before{background-position:0px -706px}
+.p-icon.i2::before{background-position:0px -734px}
+.p-icon.i3::before{background-position:0px -764px}
+.p-icon.i4::before{background-position:0px -790px}
+.p-icon.i5::before{background-position:0px -819px}
 .swiper-container{padding-bottom:10px}
 .swiper-container .swiper-pagination{position:relative;padding-top:20px}
 .swiper-container .swiper-pagination .cm-bullet{display:inline-block;margin:0 2px;width:12px;height:4px;border-radius:2px;background:#FF5B00;opacity:0.2;cursor:pointer}

+ 232 - 45
src/main/resources/static/css/article/article.css

@@ -40,7 +40,13 @@ dl,dd,dt{zoom:1}
 
 
 @media screen and (min-width:768px){.header .h5-head{display:none}
+	#drawer-footer {display: none;}
+	.advertisement {display: none;}
 	.icon:before{content:'';display:inline-block;background:url(/img/base/icon.png) no-repeat;font-size:0}
+	.header .van-overlay {display: none;}
+	.header .van-popup {display: none;}
+	.AppBanner {display: none !important;}
+	/* 阴影*/
 	/* 分享,回到顶部 */
 	#scrollTop{display:none;position:fixed;right:50%;margin-right:-700px;width:88px;z-index:9999;bottom:120px;}
 	#scrollTop .item{width:100%;background-color:#fff;box-sizing:border-box;text-align:center;box-shadow:0 2px 4px rgb(254,246,243);border-radius:2px;margin-bottom:10px;font-size:12px;position:relative}
@@ -55,7 +61,7 @@ dl,dd,dt{zoom:1}
 	#scrollTop .item .wechatHover span{color:#93979F;margin-top:10px}
 	#scrollTop .item .wechatHover a:hover{text-decoration:underline}
 	#scrollTop .item:hover .wechatHover{display:block}
-	.pageWrap{width:100%;text-align:center;padding:20px 0 36px}
+	.pageWrap{width:100%;text-align:center;padding:20px 0 36px;background: #fff;}
 	.pageWrap a{box-sizing:border-box;display:inline-block;width:40px;height:40px;line-height:40px;border:1px solid #EBECEF;font-size:16px;margin:0 5px;color:#2D3036;background:#fff;border-radius:2px}
 	.pageWrap a.on{background:#FF5B00;color:#fff;border:1px solid #FF5B00}
 	.pageWrap a:hover{color:#FF5B00}
@@ -66,45 +72,130 @@ dl,dd,dt{zoom:1}
 	.pageWrap span{display:inline-block;height:40px;line-height:40px;margin:0 5px;color:#93979F}
 	.pageWrap b{color:#2D3036;font-weight:normal}
 	.pageWrap input{box-sizing:border-box;width:80px;height:40px;line-height:40px;font-size:16px;border:1px solid #EBECEF;outline:none;border-radius:2px;text-align:center}
+	/*侧边弹窗*/
+	.info-h5-notice {display: none;}
+	.side-pop-up {width: 300px;height: 200px;background: #FFFF;position: fixed;top: calc(50% - 150px);right: 12px;border: 1px solid;z-index: 999;}
+	.eject {animation: eject ease-in-out forwards .5s;cursor: pointer;}
+	.retract {animation: retract ease-in-out forwards .5s;cursor: pointer;}
+	@keyframes eject {0% {transform: scale(0.5);width: 100px;height: 100px;border-radius: 50%;} 100% {transform: scale(1);right: calc(50% - 100px);}}
+	@keyframes retract {0% {transform: scale(1);right: calc(50% - 100px);} 100% {transform: scale(0.5);right: 0;width: 100px;height: 100px;border-radius: 50%;}}
+
 	.loading{box-sizing:border-box;padding:200px 0;text-align:center}
 	.hasTop{position:fixed;left:0;bottom:0}
-	.header{position:sticky;width:100%;background:#FF5B00;top:0;left:0;z-index:9999}
-	.header .nav{display:table;width:1185px;margin:0 auto}
-	.nav .logo{display:table-cell;vertical-align:top;height:48px;padding:11px 0;margin-right: 16px;}
-	.nav .logo img{width:168px;height:56px}
-	.nav .type{display:table-cell;vertical-align:top;height:70px}
-	.nav .type a{padding:0 16px;height:78px;line-height:78px;margin-right:1px;font-size:16px;color:#fff;text-align:center;display:table-cell;vertical-align:top;white-space:nowrap; box-sizing: border-box;}
+	.header{position:sticky;width:100%;top:0;left:0;z-index:9999;background: white;}
+	/*返回首页*/
+	.H5-info-logo, .H5-info-menu {display: none;}
+	.head-back {width: 100%;height: 40px;background: #F7F7F7;cursor: pointer;}
+	.head-back .head {width: 1185px; height: 100%; margin: 0 auto;display: flex;align-items: center;}
+	.head-back .head .head-logo {width: 20px;height: 18px;box-sizing: border-box;margin-right: 5px;background: url(/img/article/PC.png) -180px -747px;}
+	.head-back .head .text {font-size: 14px; color: #909090;}
+
+	/* 信息中心更新搜索头 */
+	.header .search-top{display:flex;width:1185px;margin:0 auto; height: 100px;align-items: center;}
+	.search-top .info-logo-content {width: 168px;height: 76px;background: url(/img/article/h5-logo.png);background-size: contain;cursor: pointer;}
+	.search-top .search{position:relative;display:flex;width:685px;margin-left:134px;flex-direction: column;}
+	.search-top .search .search-info {width: 100%;height: 44px;border:1px solid #FF5B00;box-sizing: border-box;border-radius:2px;overflow: hidden;}
+	.search-top .search .keyword{width:100%;height:100%;border: none;color:#B2B2B2;font-size:14px; padding: 0 80px 0 16px;}
+	.search-top .search .search-info .label-keyword {height: 100%;width: 604px;padding: 0 10px; border: none;color:#B2B2B2;}
+	.search-top .search .keywords {display: flex;flex-wrap: wrap;}
+	.search-top .search .keywords .label-active {color: #FF5B00;}
+	.search-top .search .keywords span {margin-right: 4px;}
+
+	.header .nav{display:table;width:100%;background:#FF5B00;}
+	/*.nav .logo{display:table-cell;vertical-align:top;height:48px;padding:11px 0;margin-right: 16px;}*/
+	/*.nav .logo img{width:168px;height:56px}*/
+	.nav .type{display:table-cell;vertical-align:top;height:64px}
+	.nav .type .type-content {width: 1185px; margin: 0 auto;display: flex;height: 64px;}
+	.header .nav .type-content .type-item {cursor: pointer;display: flex;justify-content: space-around;align-items: center;position: relative;padding: 0 16px;}
+	.header .nav .type-content .type-item .type-item-link {box-sizing: border-box;background: url(/img/article/PC.png);width: 24px; height: 24px;background-position: -76px -742px;}
+	.header .nav .type-content .type-item:hover .type-item-link {background-position: -110px -742px;}
+	.header .nav .type-content .type-item:hover {background: rgba(0,0,0,0.2);}
+	.header .nav .type-content .type-item a:hover {background: none;}
+	.header .nav .type-content .type-item .nav-menu {flex-direction: column;position: absolute;bottom: unset;left: 0;top: -50%;width: 100%;background: #fff;z-index:-1;display: flex;padding: 70px 0 6px 0;transition: .2s;transform: rotateX(90deg);}
+	.header .nav .type-content .type-item:hover .nav-menu {box-shadow: 0 0 10px #ccc;transform: rotateX(0deg);top: 0;}
+	.header .nav .type-content .type-item .nav-menu a {width: 100%;height: 40px;color: #4A4F58;display: flex;align-items: center;font-size: 14px;padding-left: 10px;}
+	.header .nav .type-content .type-item .nav-menu a:hover {background: #FFF4EE;color: #FF5B00;}
+
+	.nav .type .type-content .moreLink {padding: 0 16px;}
+	.nav .type .type-content .moreLink:hover {background: rgba(0,0,0,0.2);}
+	.nav .type a{height:64px;line-height:64px;font-size:16px;color:#fff;text-align:center;display:table-cell;vertical-align:top;white-space:nowrap; box-sizing: border-box;}
 	.type a:hover{background-color:#e96c1c;border-bottom-color: #fec19a}
-	.type a.current{background-color:rgba(0,0,0,0.2);}
-	.nav .search{position:relative;display:table-cell;vertical-align:top;width:200px;height:32px;margin-left:39px}
-	.nav .search .keyword{width:200px;height:32px;line-height:32px;margin:22px 0 16px 0;padding:0 32px 0 16px;border:none;border-radius:16px;background:#eb7941;color:#fff;font-size:14px}
+	.header .nav .type-content .current{background-color:rgba(0,0,0,0.2);padding-right: 16px;}
+	.header .nav .type-content .type-item:hover .current{background:none !important;}
+	/*.nav .search{position:relative;display:table-cell;vertical-align:top;width:200px;height:32px;margin-left:39px}*/
+	/*.nav .search .keyword{width:200px;height:32px;line-height:32px;margin:22px 0 16px 0;padding:0 32px 0 16px;border:none;border-radius:16px;background:#eb7941;color:#fff;font-size:14px}*/
 	.search .keyword:focus{border:none;outline:medium}
-	.search .searchBtn{position:absolute;top:22px;right:-1px;display:block;width:32px;height:32px;background:url(/img/info/search.png) no-repeat left 8px}
-	.search .keyword::-webkit-input-placeholder{color:#fff}
-	.search .keyword:-moz-placeholder{color:#fff}
-	.search .keyword::-moz-placeholder{color:#fff}
-	.search .keyword:-ms-input-placeholder{color:#fff}
+	.search .searchBtn{position:absolute;display: block;top: 0; right: 0;width: 80px;height: 44px;background: #FF5B00;color:#fff;line-height:44px;text-align: center;}
+	.search .keyword::-webkit-input-placeholder,
+	.search .keyword:-moz-placeholder,
+	.search .keyword::-moz-placeholder,
+	.search .keyword:-ms-input-placeholder{color:#B2B2B2}
 	/* .content.sea-top{margin-top:110px} */
-	.foot{width:100%;height:130px;background:#262626;margin-top:100px}
-	.footer{width:1185px;margin:0 auto;text-align:center;height: 130px;box-sizing: border-box;padding: 39px 0;}
+	.foot{width:100%;height:174px;background:#262626;}
+	.footer{width:1185px;margin:0 auto;text-align:center;height: 174px;box-sizing: border-box;padding: 39px 0;}
 	.footer p{line-height: 30px;color: #FFFFFF;}
+
+	/*友情链接*/
+	.footer .back-link {display: flex;justify-content: center;align-items: center;margin-bottom: 25px;font-size: 14px;}
+	.footer .back-link a {color: #FFF;}
+	.footer .back-link a:hover{color: #E15621;}
+
 	.footer p span{margin:0 5px}
 	.footer p span a{color: #FFFFFF;}
 	.footer p span a:hover{color: #E15621;}
 	.footer p span img.icp{width: 18px;height: 18px;display: inline-block;}
-	.tip-bar{padding: 16px 0;}
+	.tip-bar{padding-top: 16px;}
 	.bar,.tip{width:1185px;margin:0 auto;padding-bottom:5px}
 	.tip{color: #777;}
 	.bar a{color:#777;font-size:14px}
 	.classify.biaoqian{border-bottom:solid 1px #ededed}
+	/*精选文章*/
+	.featured-Articles {width:100%;position:relative;height: 298px;box-sizing: border-box;padding: 24px 16px;margin-bottom: 16px;background: #fff;}
+	.featured-Articles .featured-title {display: flex;justify-content: space-between;border-bottom: 1px solid #F0F0F0;margin-bottom: 24px;}
+	.featured-Articles .featured-title div:nth-child(1) {color: #333333;font-size: 18px;font-weight: bold;border-bottom: 2px solid #FF5B00;height: 40px;}
+	.featured-Articles .featured-content {display: flex;}
+	.featured-Articles .featured-content .item-content {margin-right:16px;display: flex;flex-direction: column; width: 202px;height: 190px;box-sizing: border-box;}
+	.featured-Articles .featured-content .item-content .item-img {width: 100%;height: 120px;}
+	.featured-Articles .featured-content .item-content .item-title {margin-top: 10px;width: 100%;font-size: 16px;color: #333333;line-height: 28px; -webkit-line-clamp: 2;text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-box-orient: vertical;}
+	.featured-Articles .featured-content .item-content a {display: block;height: calc(100% - 130px);}
+	.featured-Articles .featured-content .item-content .item-img .img-a {width: 100%;height: 100%;}
+	.featured-Articles .featured-content .item-content img {width: 100%;height: 100%;}
+	.featured-Articles .featured-content .item-content .item-img .img-a:hover {border: 2px solid #FF5B00;}
+	.featured-Articles .featured-content .item-content .text-a:hover .item-title {color: #FF5B00;}
+
 	.content{width:1185px;margin:0 auto;position:relative;}
 	.content .mainData{float:left;width: 884px;background:#f5f5f5;min-height: 900px; }
-	.content .new-list{width:100%;background:#ffffff;}
+	.content .new-list{width:100%;}
+	.content .new-list .dataRousce {background: #fff;}
+	.dataRousce .handleMore {display: none;}
+	.listData-select-title {background: #fff;}
+	.search-select {display: flex;width: 800px;margin: 0 30px;padding: 20px 16px 0 16px; border-bottom: 1px solid #F0F0F0;background: #fff;height: 60px;}
+	.search-select div {cursor: pointer; font-size: 18px;color: #666666;}
+	.search-select .select-earliest {margin-left: 40px;}
+	.search-select .select-earliest {}
+	.now-search-select {font-weight: Bold;color: #333333;border-bottom: 2px solid #FF5B00;}
+
 	.content .row:nth-last-child(1){border-bottom:0}
+	/*信息平台banner*/
+	.info-banner {width: fit-content;box-sizing: border-box;display: flex;justify-content: space-between;}
+	.info-banner .banner {width: 514px;margin-right: 10px;height: 384px;margin-bottom: 16px;}
+	.info-banner .sider-banner {width: 360px;display: flex;flex-direction: column;}
+	.info-banner .sider-banner div {height: 186px;}
+	.info-banner .sider-banner div:nth-child(2) {margin-top: 10px;}
+	.info-Notice {width: 284px;background: #fff;float: right;height: 384px;margin-bottom: 16px;}
+	.info-Notice .notice-title {display: flex;justify-content: space-between;box-sizing: border-box;height: 48px;padding: 14px 16px;}
+	.info-Notice .notice-title div:nth-child(1) {font-size: 16px;font-weight: bold;color: #333333;}
+	.info-Notice .notice-content {height: calc(100% - 48px);padding: 0 20px;box-sizing: border-box;overflow: hidden;}
+	.info-Notice .notice-content .notice-content-list {border-top: 1px solid #F0F0F0;}
+	.info-Notice .notice-content .notice-content-li {padding: 14px 0 14px 18px;border-top: 1px solid #F0F0F0;list-style: disc;cursor: pointer;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;font-size: 16px;color: #333333;position: relative;}
+	.info-Notice .notice-content .notice-content-li:before {content: "";width: 6px;height: 6px;background: #ccc;position: absolute;left: 0;border-radius: 50%;top: calc(50% - 4px);}
+	.info-Notice .notice-content .notice-content-li:hover {color: #FF5B00;}
+	.info-Notice .notice-content .notice-content-li:hover:before {background: #FF5B00;}
+
 	.new-list .row{position:relative;display:table;width:800px;height:150px;margin:0 30px;padding:24px 0;border-bottom:solid 1px #ededed}
-	.row .new-img{position:absolute;width:210px;height:150px;margin-right:20px;background:#FFF url(/img/base/placeholder.png) no-repeat center center;}
+	.row .new-img{position:absolute;width:210px;height:150px;margin-right:20px;}
 	.row .campaign{position:absolute;top:35px;left:5px;width:56px;height:24px;line-height:24px;font-size:16px;color:#fff;text-align:center;border-radius:2px;background-color:#FF5B00;opacity:.7;z-index:99}
-	.row .new-img img{width:100%;height:100%;background-color:#FFF;background-size:80%}
+	.row .new-img img{width:100%;height:100%;background-size:80%}
 	.row .new-img img:hover{border:solid 2px #FF5B00;opacity:0.8}
 	.row .new-img img.none:hover{border:none;opacity:1;cursor:default}
 	.row .new-blurb{padding-left:230px;min-height:150px;margin-top:-5px;overflow:hidden}
@@ -130,25 +221,32 @@ dl,dd,dt{zoom:1}
 	.article .date{margin-right:30px}
 	.article .write{margin-left:5px;margin-right:30px}
 	.row .new-blurb .introduction{margin-top: 10px; color:#777;font-size:14px;line-height:26px;min-height:52px;overflow :hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
-	.content .other{width:284px;float:right}
-	.content .classify{height:50px;line-height:50px;border-left:solid 4px #FF5B00;font-size:20px;color:#333;padding-left:15px;padding-right:5px;background:#fff}
-	.content .classify .pre,.content .classify .next{display:inline-block;width:16px;height:16px;line-height:16px;color:#fff;text-align:center;float:right;margin-right:10px;margin-top:20px;cursor:pointer;background:#ccc;font-size:12px;font-weight:normal}
-	.content .classify .pre:before{content:"\276E"}
-	.content .classify .next:before{content:"\276F"}
-	.content .classify .pre:hover,.content .classify .next:hover{background:#FF5B00}
+	.other{width:284px;float:right}
+	.classify{height:50px;line-height:50px;border-left:solid 4px #FF5B00;font-size: 16px;font-weight: bold;color: #333333;;padding-left:15px;padding-right:5px;background:#fff; display: flex;justify-content: space-between;}
+
+
+	.classify .pre,.content .classify .next{display:inline-block;width:16px;height:16px;line-height:16px;color:#fff;text-align:center;float:right;margin-right:10px;margin-top:20px;cursor:pointer;background:#ccc;font-size:12px;font-weight:normal}
+	.classify .pre:before{content:"\276E"}
+	.classify .next:before{content:"\276F"}
+	.classify .pre:hover,.content .classify .next:hover{background:#FF5B00}
 	.tags{background:#fff}
 	.tag{max-height:437px;overflow:hidden;padding:18px 7px 2px 19px;border-top:solid 1px #ededed;margin-bottom:20px}
 	.tag a{float:left;font-size:14px;color:#fff;height:32px;line-height:32px;padding:0 12px;background:#FF5B00;text-align:center;border-radius:4px;margin:2px 12px 18px 0;cursor:pointer}
 	.tag a:hover{padding:0 13px;height:35px;line-height:35px;margin:0px 10px 17px 0}
 	.other .recommend{background:#fff;margin-bottom:20px}
+
+	/*感兴趣的商品*/
+	.other .recommend .classify .more-product {display: inline-flex;align-items: center;}
+	.other .recommend .classify .more-product a {cursor: pointer; font-size: 12px;}
+
 	.other .recommend .row{padding:15px;border-top:solid 1px #ededed;border-bottom:none;padding-bottom:21px}
 	.row .new-img.xiao{width:100px;height:70px}
-	.row .new-img.xiao img{width:98px;height:68px}
+	.row .new-img.xiao img{width:98px;height:68px;object-fit: contain;}
 	.row .new-img.xiao img:hover{border:solid 1px #FF5B00}
 	.row .new-blurb.xiao{padding-left:110px;min-height:70px !important}
 	.row .new-blurb .shuoming{font-size:14px;line-height:25px;max-height:78px;overflow :hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}
-	.tui .tui-img{display:block;position: relative; width:284px;max-height:434px;margin-bottom:20px;overflow:hidden;background:#FFF url(/img/base/placeholder.png) no-repeat center center;background-size:80%}
-	.tui .tui-img img{width:100%;max-height:432px}
+	.tui .tui-img{display:block;position: relative; width:284px;height: 222px;margin-bottom:20px;overflow:hidden;background:#FFF url(/img/base/placeholder.png) no-repeat center center;background-size:80%}
+	.tui .tui-img img{width:100%;height: 100%;object-fit: contain;}
 	.tui .tui-img::after{content: "";opacity: 0;width: 100%;height: 100%; position: absolute; left: 0;top: 0;box-sizing: border-box;border: 1px solid #FF5B00; transition: all 0.2s;}
 	.tui .tui-img:hover::after{opacity: 1;}
 	/*.tui .tui-img img:hover{opacity:0.8;border:solid 1px #FF5B00} */
@@ -212,14 +310,15 @@ dl,dd,dt{zoom:1}
 	.search-filter .search__content .search__sort .search__sort_select li:hover{ background-color: #FEF6F3; color: #FF5B00; }
 	.search-filter .search__content .search__sort .search__sort_select li.selected::after{ background-image: url("/img/article/pc-icon-search-selected.png") }
 
-	.no-result{width:884px;height:500px;text-align:center;padding-top:100px}
+	.no-result{width:884px;height:500px;text-align:center;padding-top:100px;background: #fff;}
 	.no-result .nofound{color:#333;font-size:18px;margin-top:20px}
 	.no-result .nofound span{color:#FF5B00}
 	.no-result .change{font-size:14px;color:#666;margin-top:8px}
 	.emliu{display:inline-block;min-width:100px}
 	.middle{text-align:center;font-size:16px;padding:200px 0}
 	.middle img{width:200px}
-	.content .new-list.article{padding:24px;margin-bottom:20px}
+	#articleRelated {background: #fff;}
+	.content .new-list.article{padding:24px;margin-bottom:20px;background: #fff;}
 	.article .title{line-height:40px;font-size:28px;color:#333}
 	.article .xinxi{margin-top:5px;padding-bottom:14px;border-bottom:solid 1px #ededed}
 	.article .new-mian{margin:23px 0;width:760px}
@@ -257,6 +356,68 @@ dl,dd,dt{zoom:1}
 }
 @media screen and (max-width:768px){
 	body{height: 100vh;overflow-y: scroll;position: relative;}
+	/*信息平台H5修改*/
+	.head-back {display: none;}
+	.auto-input {display: none;}
+	.nav {display: none;}
+	.tip-bar {display: none;}
+	.search-top .info-logo-content {display: none;}
+	.PcBanner {display: none !important;}
+	.search-top {position: sticky;display: flex;justify-content: space-between;box-sizing: border-box;height: 13.6vw;background: #fff;padding: 0 4vw;align-items: center;}
+	.search-top .H5-info-logo {width: 28vw; height: 12vw;background: url(/img/article/h5-logo.png) center;background-size: cover;}
+	.search-top .H5-info-menu {width: 29vw; height: 100%;box-sizing: border-box;display: flex;align-items: center;justify-content: space-between; font-size: 3.2vw;}
+	.search-top .H5-info-menu div {width: 7.2vw; height: 7.2vw;display: flex;justify-content: center;align-items: center;color: #FF5B00;}
+	.search-top .H5-info-menu div:nth-child(1) {background: url(/img/article/H5.png);background-size: 119vw 158vw;background-position: -27vw 37vw;}
+	.search-top .H5-info-menu .right_drawer_close {background: url(/img/article/H5.png);background-size: 119vw 158vw;background-position: -10vw 36vw;}
+	.search-top .H5-info-menu .right_drawer_open {background: url(/img/article/H5.png);background-size: 119vw 158vw;background-position: 0vw 36vw;}
+	.header .van-overlay {z-index: -1 !important;}
+	.header .searchPopup {z-index: -1 !important;padding: 22.6vw 4.333vw 5.6vw 4.333vw;}
+	/* 阴影*/
+	.search-top-shadow {box-shadow: 0 4vw 9vw #ccc;}
+	/*搜索头弹窗*/
+	.header .searchPopup .search-title{display: flex;justify-content: space-between;}
+	.header .searchPopup .search-title div:nth-child(1) {color: #333333;font-size: 4.7vw;font-weight: bold;}
+	.header .searchPopup .search-title div:nth-child(2) {width: 3.867vw;height: 3.867vw;position: relative;}
+	.header .searchPopup .search-title div:nth-child(2):after {content: "×";position: absolute;transform: translate(-50%,-50%) scale(1.5);color: #B2B2B2;font-size: 3.867vw;top: 50%;}
+	.searchPopup .search-info {margin: 5.7vw 0 5.2vw 0;}
+	.searchPopup .search-info .keyword {background: #F7F7F7;height: 10.8vw;width: 74vw;border: none;box-sizing: border-box;padding: 2vw;}
+	.searchPopup .search-info .searchBtn {background: #FF5B00;width: 17vw; height: 10.8vw;color: #fff;text-align: center;display: inline-block;line-height: 10.8vw;float: right;}
+	.searchPopup .keywords {display: flex;flex-wrap: wrap;}
+	.searchPopup .keywords div {margin: 0 2.4vw 2.4vw 0;height: 6.4vw;padding: 1.4vw 3.2vw;background: #F7F7F7;color: #999999;font-size: 2.8vw;}
+
+	/*侧边弹窗*/
+	.van-popup--right {width: 70vw;height: 100%;z-index: -1 !important;}
+	.navPopup {padding: 22.6vw 0 0 6.4vw;}
+	.navPopup .nav-popup-item {height: 14vw;box-sizing: border-box;border-bottom: 1px solid #D8D8D8;color: #333333;font-size: 3.6vw;display: flex;align-items: center;justify-content: space-between;transition: all 1s;}
+	.navPopup .nav-popup-item .nav-popup-link {color: #333333;position: relative;height: 14vw;line-height: 14vw;}
+	.navPopup .nav-popup-child {height: 0;display: none;overflow: hidden;transition: height .3s ease-in-out;will-change: height;}
+	.navPopup .nav-popup-item .select-nav {width: 12.4vw;height:6.4vw;}
+	.navPopup .nav-popup-item .select-nav:after{content: "\276F";position: absolute;right: 5vw;transform: rotate(90deg);transition: .3s;}
+	.navPopup .nav-popup-item:hover .select-nav:after {transform: rotate(270deg);}
+	.navPopup .van-cell {height: 14vw;padding: 0 5vw 0 0;font-size: 3.6vw;line-height: 14vw;border-bottom: 1px solid #D8D8D8;}
+	.navPopup .van-cell__right-icon {height: 14vw;line-height: 14vw;}
+	.van-collapse-item__content {padding: 0 !important;}
+	.van-collapse-item__content .van-collapse-nav {padding: 3vw 0 0 3vw;display: block;font-size: 3.2vw;}
+	.van-collapse .van-document {height: 14vw;padding: 0 5vw 0 0;font-size: 3.6vw;line-height: 14vw;border-bottom: 1px solid #D8D8D8;display: block;color: #323233;}
+
+	.info-Notice {display: none;}
+	.info-banner {margin: 3.2vw auto;width: 94.4vw;display: flex;justify-content: space-between;align-items: center;}
+	.info-banner .banner {width: 55vw;height: 40vw;box-sizing: border-box;}
+	.info-banner .sider-banner {width: 37.8vw;box-sizing: border-box;display: flex;flex-direction: column;}
+	.info-banner .sider-banner div {width: 100%;height: 19vw;}
+	.info-banner .sider-banner div:nth-child(2) {margin-top: 2vw;}
+	.info-h5-notice {height: 10vw;box-sizing: border-box;margin: 1.6vw auto 3.2vw auto;width: 93.6vw;background: #fff;display: flex;justify-content: space-between;padding: 2.7vw 3.2vw;}
+	.info-h5-notice .h5-notice {font-weight: bold;font-size: 3.6vw;color: #333333;}
+	.info-h5-notice .h5-notice-title ul > li {list-style: disc;white-space: nowrap;text-overflow: ellipsis;width: 60vw;overflow: hidden;font-size: 3.2vw;}
+	.featured-Articles {height: 53.1vw;padding: 4vw 3.2vw;box-sizing: border-box;background: #fff;width: 94.4vw;margin: 0 auto 4vw auto;}
+	.featured-Articles .featured-title {display: flex;justify-content: space-between;margin-bottom: 10px;border-bottom: 1px solid #CCCCCC;height: 8.8vw;}
+	.featured-Articles .featured-title div:nth-child(1) {color: #333333;font-size: 3.6vw;font-weight: bold;border-bottom: 2px solid #FF5B00;}
+	.featured-Articles .featured-content {height: 34vw;overflow-x: scroll;width: 100%;white-space: nowrap;}
+	.featured-Articles .featured-content .item-content {margin-right:1.6vw;flex-direction: column;width: 33.6vw; box-sizing: border-box;height: 100%;display: inline-block;vertical-align: top;}
+	.featured-Articles .featured-content .item-content .item-img {width: 100%;height: 20vw;margin-bottom: 2.4vw;box-sizing: border-box;}
+	.featured-Articles .featured-content .item-content img {width: 100%;height:100%;}
+	.featured-Articles .featured-content .item-content .item-title {color: #333333;font-size: 2.8vw;width:100%;overflow: hidden;white-space: normal;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;}
+
 	.header .logo,.header .home{display:none}
 	.mIcon:before{content:'';display:inline-block;font-size:0;background:url(/img/base/icon_m.png) no-repeat;background-size:100vw auto;transition:all .5s}
 	#scrollTop{display:none;position:fixed;right:0;;z-index:9999;bottom:4vw;}
@@ -297,7 +458,6 @@ dl,dd,dt{zoom:1}
 	/*	-webkit-filter: invert(54%) sepia(57%) saturate(5587%) hue-rotate(352deg) brightness(90%) contrast(96%);filter: invert(54%) sepia(57%) saturate(5587%) hue-rotate(352deg) brightness(90%) contrast(96%);*/
 	/*}*/
 	.mainData{min-height:68vh}
-	.new-list{background:#FFF;padding-top: 3.2vw;}
 	.new-list .search-tip { display: flex; align-items: center; margin: 0 2.4vw 2.4vw; padding: 2.8vw 2.4vw; font-size: 3vw; color: #4A4F58; background: #FEF6F3; }
 	.new-list .search-tip .content div { display: inline }
 	.new-list .search-tip span { color:#FF5B00; font-weight:bold; }
@@ -317,9 +477,9 @@ dl,dd,dt{zoom:1}
 	.new-list .filter-sort .filter__item_list .filter__item.date.active::after { background-image: url("/img/base/h5-icon-sort-date-active.png"); }
 
 	/* 文章搜索信息 */
-	.search-section { width: 100%; background: #F5F5F5; padding-bottom: 2vw; }
-	.search-section .search__product_list{ background: #fff; transition: all 0.4s; box-sizing: border-box;}
-	.search-section .search__product_list .search__tip{ margin: 4.4vw 0 3.2vw; font-size: 3.4vw; color: #4A4F58; padding: 0 3.2vw;}
+	.search-section { background: #F5F5F5; padding-bottom: 2vw; width: 94.4vw; margin: 0 auto;}
+	.search-section .search__product_list{ background: #fff; transition: all 0.4s; box-sizing: border-box;margin-top: 3.2vw;}
+	.search-section .search__product_list .search__tip{ margin: 0 3.2vw 0 3.2vw; font-size: 3.4vw; color: #4A4F58; padding: 3.2vw 0;}
 	.search-section .search__product_list .search__tip span{ color: #FF5B00; font-weight: bold; }
 	.search-section .search__product_list .search__content {display: flex; overflow-y: scroll; padding-bottom: 3.5vw;}
 	.search-section .search__product_list .search__product{flex-shrink: 0; display: block; width: 26vw; margin-left: 2.4vw;}
@@ -333,7 +493,7 @@ dl,dd,dt{zoom:1}
 	.search-section .search__more .search__more_link{ display: block; width: 24.8vw; height: 7.2vw; line-height: 7.2vw; text-align: center; color: #fff; font-size: 3vw; background: #FF5B00; }
 	/* 文章搜索排序 */
 	.search-filter{background: #f5f5f5;padding-bottom: 2vw;}
-	.search-filter .search__content{height: 13.2vw; background: #fff; display: flex;align-items: center;justify-content: space-between; padding: 0 3.2vw; }
+	.search-filter .search__content{height: 13.2vw; background: #fff; display: flex;align-items: center;justify-content: space-between; padding: 0 3.2vw; width: 94.4vw;margin: 3.2vw auto 0 auto;}
 	.search-filter .search__content .search__tip{font-size: 3.4vw; color: #4A4F58;background: #fff; flex: 1;}
 	.search-filter .search__content .search__tip span{color: #FF5B00; font-weight: bold;}
 	.search-filter .search__content .search__sort { position: relative; z-index: 9; cursor: pointer; user-select: none; width: 24.8vw; height: 8vw; border: 0.2vw solid #eee; box-sizing: border-box;padding-right: 6.8vw;padding-left: 3vw; }
@@ -348,16 +508,22 @@ dl,dd,dt{zoom:1}
 	.search-filter .search__content .search__sort .search__sort_select li.selected { background-color: #FEF6F3; color: #FF5B00; }
 	.search-filter .search__content .search__sort .search__sort_select li.selected::after{ background-image: url("/img/article/h5-icon-search-selected.png") }
 
-	.dataRousce{width:100%;background:#FFF;overflow:hidden}
+	.dataRousce{width:94.4vw;background:#FFF;overflow:hidden;margin: 3.2vw auto 0 auto;}
 	.dataRousce .row{width:100%;height:34.8vw;border-top:1px solid #F5F5F5;background:#FFF;overflow:hidden;box-sizing:border-box;padding:2vw 3.3vw 2vw 37vw;position:relative;color:#93979F;line-height:3.5vw;font-size:2.6vw}
 	.dataRousce .row:first-child{border-top: 0;}
 	.dataRousce .row img{position:absolute;left:3.3vw;top:2.3vw;width:30.4vw;height:30.4vw}
-	.dataRousce .row .title{margin-bottom:2vw;color:#2D3036;font-size:3.4vw;max-height:9.6vw;line-height:4.8vw;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
-	.dataRousce .row .xinxi{margin-bottom:2vw;color:#93979f;max-height:8.4vw;line-height:4.2vw;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
-	.dataRousce .row .xinxi em{margin-right:2vw}
+	.dataRousce .row .title{margin-bottom:1vw;color:#2D3036;font-size:3.4vw;max-height:9.6vw;line-height:4.8vw;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
+	.dataRousce .row .xinxi{margin-bottom:1vw;color:#93979f;max-height:8.4vw;line-height:4.2vw;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
+	.dataRousce .row .xinxi em{margin-right:1vw}
 	.dataRousce .row .hotspot a{color:#93979f}
 	.dataRousce .row .introduction{height:7vw;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
-	.footer{width:100%;padding:4vw 0;background:#262626;margin-top:4vw;text-align:center}
+	/*查看更多*/
+	.dataRousce .handleMore {width: 100%;border-top: 1px solid #CCCCCC;margin: 0 auto;display: flex;}
+	.dataRousce .handleMore .more {margin: 7.3vw auto 5.3vw auto;}
+
+	.footer{width:100%;padding:4vw 0;background:#262626;text-align:center;padding: 5vw;line-height: 6.4vw;}
+	.footer .back-link {margin-bottom: 4vw;font-size: 3.4vw;}
+	.footer .back-link a {color: #fff;}
 	.footer .logo img{width:9.2vw;height:8vw;vertical-align:middle}
 	.footer .dizhi{display:inline-table;color:#ccc;font-size:3.1vw;line-height:4.8vw;vertical-align:super}
 	.xinxi .write:before{width:4vw;height:4vw;vertical-align:top;background-position:-22.5vw -17.5vw;margin-right:1vw}
@@ -389,14 +555,21 @@ dl,dd,dt{zoom:1}
 	/*.article .like:before{height:10vw;width:10vw;background-position:-75.3vw -38.6vw;vertical-align:middle;margin-right:1vw}*/
 	.classify{height:10vw;line-height:10vw;border-left:solid 4px #FF5B00;font-size:3.7vw;color:#333;padding:0 3vw;background:#fff}
 	.article .like{color: #FF5B00;cursor: pointer;display: block;height: 18.4vw;width: 18.4vw;line-height: 27.4vw;margin: 5vw auto;border-radius: 50%;background: #fef6f3;text-align: center;position: relative}
-	.article .like:before{ width: 8vw;height: 8vw;background-position: -14vw -78.4vw;vertical-align: middle;border-radius: 50%;position: absolute;top: 3.2vw}
-	.no-result{text-align: center;padding: 3.2vw 0;}
+	.article .like:before{left: 50%;transform: translateX(-50%);width: 8vw;height: 8vw;background-position: -14vw -78.4vw;vertical-align: middle;border-radius: 50%;position: absolute;top: 3.2vw}
+	.no-result{text-align: center;padding: 3.2vw 0;background: #fff;width: 94.4vw;margin: 3.2vw auto 0 auto;}
 	/*ross 广告图*/
-	.article-right-ross{width:100%;height:26vw;float: left; border-radius: 2px;float: left;margin-bottom: 3vw;box-sizing: border-box;padding: 0 3vw;}
+	.article-right-ross{width:94.4vw;margin: 0 auto 3.2vw auto;border-radius: 2px;box-sizing: border-box;}
 	.article-right-ross.none{display: none;}
 	.article-right-ross.show{display: block;}
 	.article-right-ross>a{width: 100%;height: 100%;display: block;border-radius: 2px;}
 	.article-right-ross>a img{width: 100%;height: 100%;display: block;border-radius: 2px;}
+	/*文章列表头*/
+	.listData-select-title {background: #fff;width: 94.4vw;padding: 3.6vw 3.2vw;margin: 3vw auto 0 auto;}
+	.listData-select-title .search-select {display: flex;border-bottom: 1px solid #CCCCCC;}
+	.listData-select-title .search-select div {font-size: 3.6vw;color: #666666;height: 8vw;}
+	.listData-select-title .search-select .now-search-select {color: #333333;font-weight: bold;border-bottom: 2px solid #FF5B00;}
+	.listData-select-title .search-select .select-new {margin-right: 9vw;}
+
 	/*ross宣传弹窗*/
 	.ross-banner-fiexd{width: 100%;height: 113.8vw;position: fixed;z-index: 999;background: url("/img/ross/ross-bg@2x.png");left: 0;right: 0;bottom: -113.8vw;box-sizing: border-box;padding: 40vw 0 4vw 0;background-size: cover;animation: all 1s;}
 	.ross-banner-fiexd.active{animation: rundbottom 0.5s backwards;bottom: 0;opacity: 1;}
@@ -422,3 +595,17 @@ dl,dd,dt{zoom:1}
 		100%{bottom:0;opacity: 1;}
 	}
 }
+@media screen and (min-width: 768px) {
+	.auto-input ul.auto-select-list{margin: 0;position:absolute;left:0;top:50px;width:50%;padding:8px 0;background:#fff; z-index: 999;box-shadow: 0px 6px 12px 1px rgba(0,0,0,0.1);max-height: 420px;overflow-y:auto;}
+	.auto-input ul.auto-select-list::-webkit-scrollbar { width: 8px; background-color: #fff;}
+	.auto-input ul.auto-select-list::-webkit-scrollbar-thumb { border-radius: 4px; background-color: #e2e2e2;}
+	.auto-input ul.auto-select-list li{padding:0 16px;font-size:14px;line-height:36px;height:36px;color:#2c3e50;user-select: none;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
+	.auto-input ul.auto-select-list li:hover{background:#FEF6F3;}
+}
+@media screen and (max-width: 768px) {
+	.auto-input ul.auto-select-list{margin: 0;position:absolute;left:0;top:5vw;width:50%;padding:2.4vw 0;background:#fff; z-index: 999;box-shadow: 0px 0.6vw 1.2vw 0.1vw rgba(0,0,0,0.1);max-height:82vw;overflow-y:auto;}
+	.auto-input ul.auto-select-list::-webkit-scrollbar { width: 1.6vw; background-color: #fff;}
+	.auto-input ul.auto-select-list::-webkit-scrollbar-thumb { border-radius: 0.8vw; background-color: #e2e2e2;}
+	.auto-input ul.auto-select-list li{padding:0 3.2vw;font-size:3.4vw;line-height:8vw;height:8vw;color:#2c3e50;user-select: none;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
+	.auto-input ul.auto-select-list li:hover{background:#ecf0f1;}
+}

+ 116 - 0
src/main/resources/static/css/article/drawer-footer.css

@@ -0,0 +1,116 @@
+#drawer-footer {
+    width: 94.4vw;
+    margin: 0 auto 4vw auto;
+    height: 76.9vw;
+    white-space: nowrap;
+    overflow-x: scroll;
+}
+
+.hot-recommend {
+    display: inline-block;
+    width: 62vw;
+    height: 100%;
+    background: #fff;
+    vertical-align: top;
+    margin-right: 1.6vw;
+    box-sizing: border-box;
+    padding: 3.2vw;
+}
+
+.hot-recommend .hot-recommend-title {
+    width: 100%;
+    display: flex;
+    justify-content: space-between;
+    height: 8vw;
+}
+.hot-recommend .hot-recommend-title div:nth-child(1) {
+    font-size: 3.6vw;
+    font-weight: bold;
+    color: #333333;
+}
+.hot-recommend .hot-recommend-title div:nth-child(2) {
+    height: 4.8vw;
+    color: #fff;
+    text-align: center;
+    position: relative;
+}
+/*.hot-recommend .hot-recommend-title div:nth-child(2):after {*/
+/*    content: '\276F';*/
+/*    font-weight: normal;*/
+/*    position: absolute;*/
+/*    right: 0;*/
+/*    top: 50%;*/
+/*    left: 50%;*/
+/*    transform: translate(-50%, -50%);*/
+/*    font-size: 3.6vw;*/
+/*}*/
+
+.hot-recommend .hot-recommend-content {
+    height: calc(100% - 8vw);
+}
+
+.hot-recommend .hot-recommend-content .hot-recommend-content-item {
+    border-top: 1px solid #CCCCCC;
+    box-sizing: border-box;
+    padding: 3.3vw 0;
+    height: 21.4vw;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    overflow: hidden;
+}
+
+.hot-recommend .hot-recommend-content .hot-recommend-content-item div:nth-child(1) {
+    width: 21.4vw;
+    height: 14.8vw;
+}
+
+.hot-recommend .hot-recommend-content .hot-recommend-content-item div:nth-child(1) img {
+    width: 100%;
+    height: 100%;
+    object-fit: contain;
+}
+
+.hot-recommend .hot-recommend-content .hot-recommend-content-item div:nth-child(2) {
+    width: 31.9vw;
+    text-overflow:ellipsis;
+    display:-webkit-box;
+    -webkit-line-clamp:3;
+    -webkit-box-orient:vertical;
+    font-size: 2.9vw;
+    color: #333333;
+    white-space: pre-wrap;
+    overflow: hidden;
+}
+
+.advertisement {
+    position: sticky;
+    height: 35.6vw;
+    width: 94.4vw;
+    bottom: -36vw;
+    margin: 0 auto 18vw auto;
+    overflow-x: scroll;
+    white-space: nowrap;
+    animation: AdvsFrames .5s linear forwards;
+}
+.advertisement .advertisement-link {
+    display: inline-block;
+    vertical-align: top;
+    width: 45.6vw;
+    height: 100%;
+    margin-right: 2.4vw;
+    background: #fff;
+}
+.advertisement .advertisement-link img {
+    width: 100%;
+    height: 100%;
+    object-fit: contain;
+}
+@keyframes AdvsFrames {
+    0% {
+        bottom: -36vw;
+    }
+    100% {
+        bottom: 0;
+    }
+}

+ 4 - 3
src/main/resources/static/css/article/error.css

@@ -2,10 +2,11 @@ body{background:#f6f6f6;position:relative}
 
 @media screen and (min-width:768px){
 body{min-width:1184px}
-    #errorContent{width:1200px !important;min-height:380px !important;height:auto !important;overflow:hidden;border:none;margin:auto;padding:100px 0 0;}
+    #errorContent{width:1200px !important;min-height:380px !important;height:auto !important;overflow:hidden;border:none;margin:auto;padding:100px 0 0;display: flex;flex-direction: column;justify-content: center;align-items: center;}
     #errorContent p{color:#666666;font-size:20px;padding:30px 0}
     #errorContent p span{color: #FF5B00;}
     #errorContent a{width:190px;height:44px;text-align:center;background:#FF5B00;color:#fff;display:inline-block;line-height:44px;border-radius:2px}
+    #errorContent img {width: 380px;height:160px;}
     .recommend{ position: relative; width:1200px; margin: 0 auto; padding: 20px 0 66px;}
     .recommend .title{font-size: 16px; color: #4A4F58; text-align: left; margin-bottom: 24px; font-weight: bold;}
     .recommend .list{display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap;}
@@ -21,7 +22,7 @@ body{min-width:1184px}
     .recommend .page span:hover{background-color: #FF5B00; }
 }
 @media screen and (max-width:768px){
-    #errorContent{width:100% !important;overflow:hidden;border:none;padding-top:23.7vw}
+    #errorContent{width:100% !important;overflow:hidden;border:none;padding-top:23.7vw;display: flex;align-items: center;flex-direction: column;justify-content: space-between;}
     #errorContent img{width:53.7vw;height:23.2vw}
     #errorContent p{font-size:3.4vw;color:#666666;padding:7.8vw 7.8vw 5vw}
     #errorContent p span{color: #FF5B00;}
@@ -39,4 +40,4 @@ body{min-width:1184px}
     .recommend .page span::after{ content: ""; display: block; width: 3.2vw; height: 3.2vw; position: absolute; left: 0.8vw; top: 0.8vw; background: url("/img/article/h5-icon-prev.png") no-repeat center; background-size: 3.2vw;}
     .recommend .page span.next::after{background-image: url("/img/article/h5-icon-next.png")}
     .recommend .page span:hover{background-color: #FF5B00; }
-}
+}

+ 511 - 0
src/main/resources/static/css/article/recommendation.css

@@ -0,0 +1,511 @@
+@media screen and (min-width:768px) {
+
+    .header {
+        position: fixed !important;
+    }
+
+    .mainContent {
+        width: 1185px;
+        margin: 220px auto 0 auto;
+        padding-top: 16px;
+    }
+
+    #Recommendation {
+        float: left;
+    }
+
+    .classify .pre, .classify .next {
+        display: inline-block;
+        width: 16px;
+        height: 16px;
+        line-height: 16px;
+        color: #fff;
+        text-align: center;
+        float: right;
+        margin-right: 10px;
+        margin-top: 20px;
+        cursor: pointer;
+        background: #ccc;
+        font-size: 12px;
+        font-weight: normal;
+    }
+
+    .foot {
+        float: left;
+    }
+
+    .content {
+        width: auto !important;
+        margin: 0 auto;
+        position: relative;
+    }
+
+    .content .mainData {
+        float: left;
+        width: 884px;
+        background: #f5f5f5;
+        min-height: 900px;
+    }
+
+    .content .mainData .selectList {
+        padding: 24px 16px;
+        background: #fff;
+    }
+
+
+    .content .mainData .selectList .select-title {
+        font-size: 18px;
+        color: #333;
+        font-weight: bold;
+        border-bottom: 1px solid #F0F0F0;
+        height: 36px;
+    }
+
+    .content .mainData .selectList .select-title div:nth-child(1) {
+        height: 100%;
+        border-bottom: 2px solid #FF5B00;
+    }
+
+    .content .mainData .selectList .select-content .select-content-item{
+        display: flex;
+        align-items: center;
+        padding: 24px 0;
+        border-bottom: 1px solid #F0F0F0;
+    }
+    .content .mainData .selectList .select-content .select-content-item .img-left {
+        height: 168px;
+        width: 260px;
+        margin-right: 16px;
+        cursor: pointer;
+    }
+    .select-content .select-content-item .img-left:hover {
+        border: 2px solid #FF5B00;
+    }
+    .content .mainData .selectList .select-content .select-content-item .item-content {
+        display: flex;
+        justify-content: space-between;
+        flex-direction: column;
+        height: 168px;
+        width: 574px;
+    }
+    .select-content-item .item-content .item-1 {
+        font-size: 18px;
+        color: #333;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        margin-bottom: 13px;
+        cursor: pointer;
+    }
+    .select-content-item .item-content .item-1:hover {
+        color: #FF5B00;
+    }
+    .select-content-item .item-content .item-2 {
+        color: #888888;
+        font-size: 14px;
+        line-height: 24px;
+        margin-bottom: 16px;
+        height: 43px;
+        -webkit-line-clamp: 2;
+        text-overflow: ellipsis;
+        overflow: hidden;
+        display: -webkit-box;
+        -webkit-box-orient: vertical;
+    }
+    .select-content-item .item-content .item-3 {
+        font-size: 14px;
+        color: #333;
+    }
+    .select-content-item .item-content .icon {
+        width: 18px;
+        height: 20px;
+        background: url(/img/article/PC.png);
+        margin-right: 8px;
+    }
+    .select-content-item .item-content .item-3 .label-icon {
+        float: left;
+        background-position: -78px -777px;
+    }
+    .select-content-item .item-content .item-3 .split {
+        margin: 0 5px;
+    }
+    .select-content-item .item-content .item-4 {
+        font-size: 14px;
+        color: #B2B2B2;
+        display: flex;
+        align-items: center;
+    }
+    .select-content-item .item-content .item-4 .group {
+        display: flex;
+        align-items: center;
+    }
+    .select-content-item .item-content .item-4 .label-text {
+        margin-right: 24px;
+    }
+    .select-content-item .item-content .item-4 .label-icon-1 {
+        background-position: -107px -777px;
+    }
+    .select-content-item .item-content .item-4 .label-icon-2 {
+        background-position: -137px -777px;
+    }
+    .select-content-item .item-content .item-4 .label-icon-3 {
+        background-position: -166px -777px;
+    }
+
+    /*公告和文件*/
+    .infomationlist {
+        width: 1185px;
+        margin: 0 auto 16px auto;
+        background: #fff;
+        padding: 22px 24px;
+    }
+
+    .infomationlist .title {
+        width: 100%;
+        color: #333;
+        font-size: 18px;
+        height: 34px;
+        border-bottom: 1px solid #F0F0F0;
+        margin-bottom: 28px;
+        font-weight: bold;
+    }
+
+    .infomationlist .list-mainData ul .item {
+        zoom: 1;
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        width: 100%;
+        padding: 21px 0 21px 10px;
+        color: #333333;
+        font-size: 16px;
+        border-bottom: 1px solid #F0F0F0;
+        position: relative;
+        cursor: pointer;
+    }
+    .infomationlist .list-mainData ul .item:before {
+        content: "";
+        position: absolute;
+        left: -10px;
+        font-size: 40px;
+        color: #CCCCCC;
+        width: 6px;
+        height: 6px;
+        background: #CCCCCC;
+        border-radius: 50%;
+    }
+
+    .infomationlist .list-mainData ul .item:hover {
+        color: #FF5B00;
+        background: #FFF8F5;
+    }
+    .infomationlist .list-mainData ul .item:hover:before {
+        background: #FF5B00;
+    }
+    .infomationlist .list-mainData ul .item:hover div {
+        color: #FF5B00 !important;
+    }
+
+    .infomationlist .list-mainData ul .item div:nth-child(2) {
+        color: #CCCCCC;
+    }
+
+    .infomationlist .list-mainData ul .info-item {
+        display: flex;
+        align-items: center;
+        border-bottom: 1px solid #F0F0F0;
+        height: 112px;
+        color: #333333;
+        font-size: 18px;
+        cursor: pointer;
+    }
+
+    .infomationlist .list-mainData ul .info-item div:nth-child(1) {
+        width: 54px;
+        height: 60px;
+    }
+
+    .infomationlist .list-mainData ul .info-item div:nth-child(1) img {
+        width: 100%;
+        height: 100%;
+        object-fit: contain;
+    }
+
+    .infomationlist .list-mainData ul .info-item div:nth-child(2) {
+        margin-left: 16px;
+    }
+
+    .pageWrap {
+        width: 100%;
+        text-align: center;
+        padding: 20px 0 36px;
+        background: #fff;
+    }
+
+    .pageWrap a {
+        box-sizing: border-box;
+        display: inline-block;
+        width: 40px;
+        height: 40px;
+        line-height: 40px;
+        border: 1px solid #EBECEF;
+        font-size: 16px;
+        margin: 0 5px;
+        color: #2D3036;
+        background: #fff;
+        border-radius: 2px
+    }
+
+    .pageWrap a.on {
+        background: #FF5B00;
+        color: #fff;
+        border: 1px solid #FF5B00
+    }
+
+    .pageWrap a:hover {
+        color: #FF5B00
+    }
+
+    .pageWrap a.on:hover {
+        color: #fff;
+        opacity: .8;
+    }
+
+    .pageWrap a.btn {
+        width: auto;
+        color: #FF5B00;
+        background: none;
+        border: none
+    }
+
+    .pageWrap .prev:before {
+        content: '\276E'
+    }
+
+    .pageWrap .next:before {
+        content: '\276F'
+    }
+
+    .pageWrap span {
+        display: inline-block;
+        height: 40px;
+        line-height: 40px;
+        margin: 0 5px;
+        color: #93979F
+    }
+
+    .pageWrap b {
+        color: #2D3036;
+        font-weight: normal
+    }
+
+    .pageWrap input {
+        box-sizing: border-box;
+        width: 80px;
+        height: 40px;
+        line-height: 40px;
+        font-size: 16px;
+        border: 1px solid #EBECEF;
+        outline: none;
+        border-radius: 2px;
+        text-align: center
+    }
+}
+
+@media screen and (max-width:768px) {
+    /*#drawer-footer, .advertisement {*/
+    /*    display: none;*/
+    /*}*/
+    /*精品推荐*/
+    .mainData {
+        padding: 3.2vw;
+    }
+    .mainData .selectList {
+        background: #fff;
+        padding: 4vw 3.2vw;
+    }
+    .mainData .more {
+        margin: 7.3vw auto 0 auto;
+        width: 26vw;
+        height: 7.2vw;
+        font-size: 3.2vw;
+        color: #909090;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        border: 1px solid #CCCCCC;
+    }
+    .selectList .select-title {
+        height: 7.5vw;
+        font-size: 3.6vw;
+        color: #333333;
+        font-weight: bold;
+        border-bottom: 1px solid #ccc;
+        display: flex;
+    }
+    .selectList .select-title div {
+        height: 100%;
+        border-bottom: 2px solid #FF5B00;
+    }
+    .select-content .select-content-item {
+        min-height: 34.2vw;
+        border-bottom: 1px solid #CCCCCC;
+        display: flex;
+        align-items: center;
+    }
+    .select-content .select-content-item .img-left {
+        width: 38.8vw;
+        height: 25.2vw;
+        margin-right: 2.4vw;
+        box-sizing: border-box;
+    }
+    .select-content .select-content-item .item-content {
+        width: 46.1vw;
+        min-height: 29.2vw;
+        overflow: hidden;
+        display: flex;
+        flex-direction: column;
+        justify-content: space-between;
+        padding: 2vw 0;
+    }
+    .select-content .select-content-item .item-content .icon {
+        width: 4vw;
+        height: 4vw;
+        background: url(/img/base/icon_m.png) no-repeat;
+        background-size: 100vw auto;
+        margin-right: 1vw;
+    }
+    .select-content .select-content-item .item-content .item-1 {
+        white-space: nowrap;
+        text-overflow: ellipsis;
+        overflow: hidden;
+        font-size: 3.4vw;
+        color: #333;
+    }
+    .select-content .select-content-item .item-content .item-2 {
+        -webkit-line-clamp: 2;
+        text-overflow: ellipsis;
+        overflow: hidden;
+        display: -webkit-box;
+        -webkit-box-orient: vertical;
+        font-size: 2.6vw;
+        color: #888888;
+    }
+    .select-content .select-content-item .item-content .item-3 {
+        font-size: 2.4vw;
+        color: #333;
+        margin: 1vw 0;
+    }
+    .select-content .select-content-item .item-content .item-3 .label-icon {
+        float: left;
+        background-position: -15vw -17.5vw;
+    }
+    .select-content .select-content-item .item-content .item-3 .split {
+        margin: 0 1vw;
+    }
+    .select-content .select-content-item .item-content .item-4 {
+        color: #B2B2B2;
+        font-size: 2.2vw;
+        display: flex;
+        align-items: center;
+        flex-wrap: wrap;
+        justify-content: space-between;
+    }
+    .select-content .select-content-item .item-content .item-4 .group {
+        display: flex;
+        align-items: center;
+    }
+    .select-content .select-content-item .item-content .item-4 .label-icon-1 {
+        background-position: -30vw -17.5vw;
+    }
+    .select-content .select-content-item .item-content .item-4 .label-icon-2 {
+        background-position: -22.5vw -17.5vw;
+    }
+    .select-content .select-content-item .item-content .item-4 .label-icon-3 {
+        background-position: -37.5vw -17.5vw;
+    }
+
+    /*美业资料*/
+    .infomationlist {
+        margin: 1.6vw 0 12.4vw 0;
+        background: #fff;
+        padding: 4.8vw 4vw;
+    }
+    .infomationlist .title {
+        color: #333333;
+        font-size: 3.6vw;
+        font-weight: bold;
+        height: 7.2vw;
+        border-bottom: 1px solid #CCCCCC;
+        display: flex;
+        margin-bottom: 6.9vw;
+    }
+    .infomationlist .title div{
+        height: 100%;
+        border-bottom: 3px solid #FF5B00;
+    }
+    .infomationlist ul .item {
+        height: 12vw;
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        position: relative;
+        border-bottom: 1px solid #CCCCCC;
+    }
+    .infomationlist ul .item:before {
+        content: " ";
+        position: absolute;
+        width: 1.2vw;
+        height: 1.2vw;
+        border-radius: 50%;
+        background: #CCCCCC;
+    }
+
+    .infomationlist ul .item div:nth-child(1) {
+        color: #333333;
+        font-size: 3.2vw;
+        margin-left: 3vw;
+        overflow: hidden;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+        width: 66%;
+    }
+    .infomationlist ul .item div:nth-child(2) {
+        color: #999999;
+        font-size: 2.8vw;
+    }
+
+    .infomationlist ul .info-item {
+        height: 20.5vw;
+        border-bottom: 1px solid #ccc;
+        display: flex;
+        align-items: center;
+    }
+
+    .infomationlist ul .info-item div:nth-child(1) {
+        width: 11.125vw;
+        height: 12.136vw;
+    }
+
+    .infomationlist ul .info-item div:nth-child(2) {
+        margin-left: 4.2vw;
+    }
+
+    .infomationlist .list-mainData .more {
+        width: 26vw;
+        height: 7.2vw;
+        border: 1px solid #CCCCCC;
+        color: #909090;
+        position: relative;
+        font-size: 3.2vw;
+        margin: 3vw auto 0 auto;
+        line-height: 7.2vw;
+        text-align: center;
+    }
+    .infomationlist .list-mainData .more:after {
+        content: '\276F';
+        transform: rotate(90deg);
+        position: absolute;
+        right: 10%;
+    }
+}

+ 3 - 2
src/main/resources/static/css/base/base.h5.css

@@ -212,8 +212,9 @@
 .loginAlert:before{content:'';display:block;width:26.7vw;height:26.7vw;background:url(/img/account/to_login_m.png) no-repeat left top;background-size:100% 100%;margin:0 auto}
 .jconfirm .jconfirm-box .jconfirm-buttons button{font-size:3.4vw!important;}
 /*供应商入口栏*/
-#supplierLogin {width: 15vw;position:fixed;right:3.2vw;z-index:99;bottom:88.5vw;display: flex;justify-content: center;align-items: center;font-size: 3vw;box-sizing: border-box;flex-direction: column;overflow: hidden;}
-#supplierLogin .logo {}
+#supplierLogin {width: 18vw;position:fixed;right:3.2vw;z-index:99;bottom:88.5vw;display: flex;justify-content: flex-end;align-items: flex-end;box-sizing: border-box;;height: 20vw;}
+#supplierLogin .logo {width: 17vw;height: 17vw;}
+#supplierLogin .close {width: 4vw;height: 4vw;position: absolute;top: 0;right: 0;}
 /* 咨询,回到顶部 */
 #scrollTop{display:none;position:fixed;right:3.2vw;z-index:99;bottom:4vw;}
 #scrollTop .item{width:15vw;background-color:rgba(190,194,201,.3);box-sizing:border-box;text-align:center;margin-bottom:2.5vw;font-size:3vw;position:relative;border-radius: 0.2vw;}

+ 6 - 0
src/main/resources/static/css/index/index_new.pc.css

@@ -52,6 +52,12 @@ li{list-style:none;}
     opacity: 0.2;
     font-size: 24px;
 }
+.quickOperation .el-icon-arrow-left:before {
+    content: "\276C";
+}
+.quickOperation .el-icon-arrow-right:before {
+    content: "\276D";
+}
 .quickOperation .el-carousel__container {
     height: 150px !important;
 }

+ 49 - 0
src/main/resources/static/css/product/filePreview.css

@@ -0,0 +1,49 @@
+@media screen and (min-width: 776px) {
+    #file {
+        margin: 2vh auto;
+        width: 1185px;
+        min-height: 600px;
+        background: #fff;
+        position: relative;
+    }
+    #file .more {
+        position: absolute;
+        z-index: 1;
+        bottom: 0;
+        left: 50%;
+        font-size: 20px;
+        color: red;
+        transform: translateX(-50%);
+        cursor: pointer;
+        width: 100%;
+        text-align: center;
+        background: rgba(255,255,255,0.8);
+        box-shadow: 0 -8px 26px #fff;
+    }
+}
+
+
+@media screen and (max-width: 776px) {
+    #supplierLogin { display: none; }
+    #file {
+        margin: 2vh auto;
+        width: 90vw;
+        min-height: 600px;
+        background: #fff;
+        position: relative;
+    }
+    #file .more {
+        position: absolute;
+        z-index: 1;
+        bottom: 0;
+        left: 50%;
+        font-size: 5.2vw;
+        color: red;
+        transform: translateX(-50%);
+        cursor: pointer;
+        width: 100%;
+        text-align: center;
+        background: rgba(255,255,255,0.8);
+        box-shadow: 0 -8px 26px #fff;
+    }
+}

+ 30 - 2
src/main/resources/static/css/supplier-center/article/article-edit.css

@@ -1,5 +1,13 @@
-.max-width {
-    width: 100% !important
+/*修复element-ui字体样式问题*/
+.el-icon-arrow-up:before {
+    content: "\276F" !important;
+}
+.el-select__caret {
+    transform: rotate(90deg) !important;
+}
+.el-icon-plus:before {
+    content: "+";
+    font-size: 30px;
 }
 
 .hide-upload .el-upload {
@@ -19,6 +27,20 @@
     width: auto !important;
 }
 
+.text-tab {
+    display: flex;
+    align-items: flex-end;
+}
+.text-tab .el-form-item {
+    width: 45% !important;
+}
+.text-tab .el-form-item .el-select {
+    width: 100% !important;
+}
+.text-tab .el-form-item:nth-child(2) {
+    margin-left: 1% !important;
+}
+
 @media screen and (min-width: 768px) {
     .article-edit .top-tip {
         display: -webkit-box;
@@ -128,6 +150,9 @@
         box-sizing: border-box;
         cursor: pointer
     }
+    .mint-filter .tab-width {
+        width: 100% !important;
+    }
     /* 表单区域 */
     .valide-form {
         width: 720px;
@@ -258,6 +283,9 @@
         color: #fff;
         cursor: pointer
     }
+    .mint-filter .tab-width {
+        width: 100% !important;
+    }
     /* 添加标签 */
     .article-edit .label-add {
         display: -webkit-box;

+ 12 - 2
src/main/resources/static/css/supplier-center/article/article-list.css

@@ -1,4 +1,14 @@
 @charset "UTF-8";
+/*修复element-ui字体样式问题*/
+.el-icon-arrow-up:before {
+    content: "\276F" !important;
+}
+.el-select__caret {
+    transform: rotate(90deg) !important;
+}
+.el-icon-circle-close:before {
+    content: "\2716" !important;
+}
 @media screen and (min-width: 768px){
 .top-row{width:968px;padding:12px 0 12px 236px;margin:0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}
 .top-row .crumbs{width:auto;padding:0;margin:0}
@@ -23,7 +33,7 @@
 .article-list .row{width:100%;padding:18px 20px 0;margin-bottom:16px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-box-shadow:0px 3px 6px rgba(0,0,0,0.07);box-shadow:0px 3px 6px rgba(0,0,0,0.07)}
 .article-list .table,.table tr,.table th,.table td{border:0}
 .article-list .table{width:100%}
-.article-list .table th{font-size:14px;color:#627386;padding-bottom:16px;border-bottom:1px solid #E2E7EF}
+.article-list .table th{font-size:14px;color:#627386;padding-bottom:16px;border-bottom:1px solid #E2E7EF;font-weight: 500;}
 .article-list .table td{font-size:12px;color:#22272E;text-align:center}
 .article-list .table td{padding:16px 0}
 .article-list .table .title,.article-list .table .time,.article-list .table .option{width:100px}
@@ -64,7 +74,7 @@
 .article-list .row{overflow-y: auto; width:100%;padding:4vw 3.4vw 0;margin-bottom:3.8vw;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-box-shadow:0px 3px 6px rgba(0,0,0,0.07);box-shadow:0px 3px 6px rgba(0,0,0,0.07)}
 .article-list .table,.table tr,.table th,.table td{border:0}
 .article-list .table{width:250vw;}
-.article-list .table th{font-size:3.4vw;color:#627386;padding-bottom:3.8vw;border-bottom:1px solid #E2E7EF}
+.article-list .table th{font-size:3.4vw;color:#627386;padding-bottom:3.8vw;border-bottom:1px solid #E2E7EF;font-weight: 500;}
 .article-list .table td{font-size:2.8vw;color:#22272E;text-align:center}
 .article-list .table td{padding:3.8vw 0}
 .article-list .table .title,.article-list .table .time,.article-list .table .option{width:100px}

+ 9 - 0
src/main/resources/static/css/supplier-login/login-h5.css

@@ -1000,6 +1000,9 @@ video {
     padding: 5.600vw 7.467vw 1.667vw 7.467vw;
     background: url("https://static.caimei365.com/app/img/icon/supplier-h5.png") no-repeat;
 }
+.solutionDiag .el-icon-arrow-up:before {
+    content: url(/img/supplier-login/arrow-down.png);
+}
 .solutionDiag .solutioncontent .title_1 {
     color: #272727;
     font-size: 3.600vw;
@@ -1057,6 +1060,9 @@ video {
     background-size: contain;
     border: none;
 }
+.el-select-dropdown.is-multiple .el-select-dropdown__item.selected {
+    color: #FF5B00;
+}
 .el-select-dropdown__item {
     height: auto !important;
     white-space: normal !important;
@@ -1078,3 +1084,6 @@ video {
     background: #FF5B00;
     color: white;
 }
+.solutionDiag .el-dialog__close::before {
+    content: "\2716";
+}

+ 21 - 0
src/main/resources/static/css/supplier-login/login.css

@@ -55,6 +55,9 @@ body{
 .username:hover::after{
     transform: rotate(270deg);
 }
+.username .el-popover__reference-wrapper .el-button--text {
+    color: #FF5B00;
+}
 .el-popover {
     padding: 5px !important;
     min-width: 90px !important;
@@ -65,6 +68,9 @@ body{
     justify-content: space-around;
     align-items: center;
 }
+.el-popover .cShow .a_cm {
+    color: #333;
+}
 .el-popover__reference{
     font-size: 0.8vw;
 }
@@ -366,6 +372,12 @@ body{
 #zeroPage .el-carousel__container {
     height: 26.562vw;
 }
+#zeroPage .el-carousel__container .el-icon-arrow-right::before {
+    content: "\276D";
+}
+#zeroPage .el-carousel__container .el-icon-arrow-left::before {
+    content: "\276C";
+}
 .el-carousel__item:nth-child(1) {
     display: flex;
     justify-content: center;
@@ -1634,6 +1646,12 @@ body{
 .solutionDiag .el-dialog__body {
     padding: 0 !important;
 }
+.solutionDiag .el-dialog__close::before {
+    content: "\2716";
+}
+.solutionDiag .el-icon-arrow-up:before {
+    content: url(/img/supplier-login/arrow-down.png);
+}
 .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after {
     display: none !important;
 }
@@ -1660,6 +1678,9 @@ body{
     background-size: contain;
     border: none;
 }
+.el-select-dropdown.is-multiple .el-select-dropdown__item.selected {
+    color: #FF5B00;
+}
 .el-select-dropdown__item {
     height: auto !important;
     white-space: normal !important;

+ 3 - 0
src/main/resources/static/css/supplier-login/text_info.css

@@ -55,6 +55,9 @@ body{
 .username:hover::after{
     transform: rotate(270deg);
 }
+.username .el-popover__reference-wrapper .el-button--text {
+    color: #FF5B00;
+}
 .el-popover {
     padding: 5px !important;
     min-width: 90px !important;

二進制
src/main/resources/static/img/article/H5.png


二進制
src/main/resources/static/img/article/PC--pdf.png


二進制
src/main/resources/static/img/article/PC.png


二進制
src/main/resources/static/img/article/h5-logo.png


二進制
src/main/resources/static/img/article/pc-logo.png


二進制
src/main/resources/static/img/supplier-login/arrow-down.png


+ 59 - 0
src/main/resources/static/js/article/common.js

@@ -1,4 +1,16 @@
 /*var articleTypeNav = new Swiper('#articleTypeNav');*/
+const handleFileUrl = (id) => {
+    window.location.href = `/product-${id}.html?tabsIndex=4`
+    // const fileUrl = url.split('?')[0]
+    // let index = fileUrl.lastIndexOf('.');
+    // let suffix = fileUrl.substring(index);
+    // if (suffix === '.doc' || suffix === '.ppt' || suffix === '.pptx' || suffix === '.docx') {
+    //     window.open('https://view.officeapps.live.com/op/view.aspx?src=' + encodeURIComponent(url), '_black') // 下载
+    // } else {
+    //     window.open(fileUrl, '_blank')
+    // }
+}
+
 var articleSide = new Vue({
     el: '#articleSide',
     data: {
@@ -25,6 +37,7 @@ var articleSide = new Vue({
         //     });
         // },
         getRecommend: function(typeId, pageNum){
+            console.log(typeId, pageNum);
             var _self = this;
             $.getJSON("/article/recommend",{
                 typeId: typeId,
@@ -76,3 +89,49 @@ var articleSide = new Vue({
 
     }
 });
+
+var drawerFooter = new Vue({
+    el: "#drawer-footer",
+    data: {
+        recommend: [],
+        typeId: 0,
+        labelId: 0,
+    },
+    mounted() {
+        this.typeId = $("#typeId").val()*1;
+        this.labelId = $("#labelId").val()*1;
+        this.getRecommend(this.typeId, 1);
+        //换一批15秒请求一次
+        setInterval(() => {
+            if (this.recommend.hasNextPage) {
+                this.getRecommend(this.typeId, this.recommend.nextPage);
+            } else {
+                this.getRecommend(this.typeId, 1);
+            }
+        },15000);
+        if (this.labelId>0) {
+            // 添加一个标签点击量
+            $.get("/article/label/click", {id: this.labelId}, function(res){
+                console.log(res);
+            });
+        }
+    },
+    methods: {
+        //    链接跳转
+        handlerTramp($event) {
+            window.location.href = "/info/articlerecommendation.html"
+        },
+        getRecommend: function(typeId, pageNum){
+            console.log(typeId, pageNum);
+            var _self = this;
+            $.getJSON("/article/recommend",{
+                typeId: typeId,
+                pageNum: pageNum
+            }, function (r) {
+                if (r.code === 0 && r.data) {
+                    _self.recommend= r.data;
+                }
+            });
+        },
+    }
+})

+ 8 - 7
src/main/resources/static/js/article/detail.js

@@ -61,21 +61,22 @@ var articleRelated = new Vue({
     mounted: function () {
         var _self = this;
         var thisUri = window.location.href;
-        $('#qrcode').qrcode({
-            "render": "canvas",
-            "width": '120',
-            "height": '120',
-            "color": "#3a3",
-            "text": thisUri
-        });
         // 文章浏览量+1
         $.get("/article/pv", {id: this.infoId}, function(res){
             if(res.code === 0){
+                console.log('浏览量+1')
                 // 更新文章索引
                 $.post(coreServer + "/commodity/search/index/update/article", {articleId: _self.infoId}, function(res){
                     console.log(res.msg);
                 });
             }
         });
+        $('#qrcode').qrcode({
+            "render": "canvas",
+            "width": '120',
+            "height": '120',
+            "color": "#3a3",
+            "text": thisUri
+        });
     }
 });

+ 47 - 0
src/main/resources/static/js/article/drawer-footer.js

@@ -0,0 +1,47 @@
+
+var drawerFooter = new Vue({
+    el: "#drawer-footer",
+    data: {
+        recommend: [],
+        typeId: 0,
+        labelId: 0,
+    },
+    mounted() {
+        this.typeId = $("#typeId").val()*1;
+        this.labelId = $("#labelId").val()*1;
+        this.getRecommend(this.typeId, 1);
+        //换一批15秒请求一次
+        setInterval(function(){
+            if (this.recommend.hasNextPage) {
+                this.getRecommend(this.typeId, this.recommend.nextPage);
+            } else {
+                this.getRecommend(this.typeId, 1);
+            }
+        },15000);
+        if (this.labelId>0) {
+            // 添加一个标签点击量
+            $.get("/article/label/click", {id: this.labelId}, function(res){
+                console.log(res);
+            });
+        }
+    },
+    methods: {
+    //    链接跳转
+        handlerTramp($event) {
+            window.location.href = "/info/articlerecommendation.html"
+        },
+        getRecommend: function(typeId, pageNum){
+            console.log(typeId, pageNum);
+            var _self = this;
+            $.getJSON("/article/recommend",{
+                typeId: typeId,
+                pageNum: pageNum
+            }, function (r) {
+                if (r.code === 0 && r.data) {
+                    _self.recommend= r.data;
+                }
+            });
+        },
+    }
+})
+

+ 7 - 7
src/main/resources/static/js/article/error.js

@@ -1,15 +1,15 @@
-$(function () {
-    var coreServer = $('#coreServer').val()
-    if (!coreServer && coreServer.length > 0) {
-        window.location.href = '/info/404.html';
-    }
-})
+// $(function () {
+//     var coreServer = $('#coreServer').val()
+//     if (!coreServer && coreServer.length > 0) {
+//         window.location.href = '/info/404.html';
+//     }
+// })
 
 var errorPage = new Vue({
     el: '#errorPage',
     data: {
         recommend: [],
-        countdown: 2,
+        countdown: 3,
         timer: null
     },
     mounted: function () {

+ 181 - 14
src/main/resources/static/js/article/list.js

@@ -27,7 +27,8 @@ var articleList = new Vue({
             startDate: '',
             endDate: '',
             productFlag: 1, // 是否统计关键词 1 统计 0 不统计
-            linkageFlag: 0 // 关键词来源是否为用户搜索 0 是 1 不是
+            linkageFlag: 0, // 关键词来源是否为用户搜索 0 是 1 不是
+            sortType: 1 // 最新 最早
         },
         listData: [],
         listRecord: 0,
@@ -36,6 +37,10 @@ var articleList = new Vue({
         pageInput: '1',
         keyword: '',
         requestType: '', // 请求链接类型keyword | labelId | typeId
+        featuredList: [], // 精选推荐列表
+        dialogVisible: true, // 弹窗
+        searchKeys: "", // 搜索词
+        newsList: []
     },
     computed: {
         pageTotal: function () {
@@ -57,6 +62,8 @@ var articleList = new Vue({
             return [1, 0, index - 2, index - 1, index, index + 1, index + 2, 0, total];
         }
     },
+    watch: {
+    },
     created: function () {
         // 判断登录状态
         var self = this;
@@ -70,6 +77,7 @@ var articleList = new Vue({
             self.initBase();
         });
         self.initAuthInputComplete();
+        this.getNewList()
     },
 
     methods: {
@@ -142,7 +150,8 @@ var articleList = new Vue({
             var params = {
                 id: this.params.typeId,
                 pageSize: this.params.size,
-                pageNum: this.params.num
+                pageNum: this.params.num,
+                sortType: this.params.sortType
             }
             this.getArticleList(requestUrlConfig['typeId'], params);
         },
@@ -170,13 +179,20 @@ var articleList = new Vue({
             this.getArticleList(requestUrlConfig['keyword'], params);
         },
 
+        // 弹窗缩放
+        handlerPopup() {
+            if (!this.dialogVisible) {
+                this.dialogVisible = !this.dialogVisible;
+            }
+        },
+
         // 高亮关键词
         highlightKeyword: function (str) {
             return str.replace(new RegExp(this.keyword, 'g'), '<span style="color: #FF5B00">' + this.keyword + '</span>')
         },
 
         // 获取文章列表
-        getArticleList: function (url, params) {
+        getArticleList: function (url, params, isSelect) {
             var self = this;
             $.getJSON(url, params, function (r) {
                 if (r.code === 0 && r.data) {
@@ -207,6 +223,10 @@ var articleList = new Vue({
                     if (isPC) {
                         self.listData = resultData
                     } else {
+                        if (isSelect) {
+                            self.listData = resultData
+                            return
+                        }
                         self.listData = self.listData.concat(resultData);
                     }
                 }
@@ -321,19 +341,31 @@ var articleList = new Vue({
             } else {
                 $('#scrollTop').hide();
             }
-            if (scrollTop + windowHeight + 100 > documentHeight) {
-                //此处是滚动条到底部时候触发的事件,在这里写要加载的数据,或者是拉动滚动条的操作
-                if (this.params.num < this.pageTotal) { // 获取列表数据
-                    if (this.requestFlag) {
-                        this.params.num = this.params.num + 1;
-                        this.requestAction(this.requestType);
-                    }
-                } else { //到底了
-                    this.noMore = true;
-                    $('footer').removeClass("noneImportant");
+            // if (scrollTop + windowHeight + 100 > documentHeight) {
+            //     此处是滚动条到底部时候触发的事件,在这里写要加载的数据,或者是拉动滚动条的操作
+            //     if (this.params.num < this.pageTotal) { // 获取列表数据
+            //         if (this.requestFlag) {
+            //             this.params.num = this.params.num + 1;
+            //             this.requestAction(this.requestType);
+            //         }
+            //     } else { //到底了
+            //         this.noMore = true;
+            //         $('footer').removeClass("noneImportant");
+            //     }
+            // }
+        }),
+        //获取更多数据
+        handleMore () {
+            if (this.params.num < this.pageTotal) { // 获取列表数据
+                if (this.requestFlag) {
+                    this.params.num = this.params.num + 1;
+                    this.requestAction(this.requestType);
                 }
+            } else { //到底了
+                this.noMore = true;
+                $('footer').removeClass("noneImportant");
             }
-        }),
+        },
 
         // 页面样式初始化
         initPageReset: function () {
@@ -343,9 +375,144 @@ var articleList = new Vue({
                 $('body').on('scroll', this.onPageScroll);
             }
         },
+
+        // 文章列表切换 最新 最早
+        selectListNew(e) {
+            this.params.sortType = e
+            this.params.size = 8
+            this.params.num = 1
+            let params = {
+                id: this.params.typeId,
+                pageSize: 8,
+                pageNum: 1,
+                sortType: this.params.sortType
+            }
+            this.getArticleList(requestUrlConfig['typeId'], params, true)
+        },
+
+        hanldDetails(id) {
+            window.open('/news/details.html?id='+id);
+        },
+        getNewList() {
+            PublicApi.GetHomeInit({ source: 1 },({ data }) => {
+                if (isPC) {
+                    this.newsList = data.annlist
+                } else {
+                    this.newsList = data.annlist.slice(0,1)
+                }
+            });
+        }
     }
 });
 
+let infoNotice = new Vue({
+    el: "#infoNotice",
+    data: {
+        newsList: [],
+    },
+    mounted() {
+        this.getNewList()
+    },
+    methods: {
+        hanldDetails(id) {
+            window.open('/news/details.html?id='+id);
+        },
+        getNewList() {
+            PublicApi.GetHomeInit({ source: 1 },({ data }) => {
+                if (isPC) {
+                    this.newsList = data.annlist
+                } else {
+                    this.newsList = data.annlist.slice(0,1)
+                }
+            });
+        }
+    }
+})
+
+let searchTop = new Vue({
+    el: "#info-header",
+    data: {
+        show: false,
+        searchKeys: "",
+        right_drawer: false,
+        activeNames: '', // active names
+        keywords: '',
+        keywordsList: [],
+        selectUlKeys: null,
+    },
+    mounted() {
+    },
+    watch: {
+    //    关键词搜索
+        keywords(val) {
+            if (val) {
+                setTimeout(() => {
+                    this.getKeywordsList(val)
+                }, 500)
+            }
+        },
+    },
+    methods: {
+        async getKeywordsList(key) {
+            const {data} = await PublicApi.fetchQueryKeywordList({keyword: key})
+            this.keywordsList = data
+            this.selectUlKeys = document.getElementsByClassName('auto-select-list')[0]
+            if (data.length > 0) {
+                this.renderList()
+                this.selectUlKeys.style.display = 'block'
+            } else {
+                this.selectUlKeys.style.display = 'none'
+            }
+        },
+        renderList() {
+            this.selectUlKeys.innerHTML = ''
+            this.keywordsList.forEach((text) => {
+                const li = document.createElement('li');
+                li.innerHTML = text.keyword.replace(new RegExp(this.keywords, 'ig'), (match)=> '<span style="color: #FF5B00;">' + match + '</span>');
+                li.addEventListener('click', () => this.listItemClick(text));
+                this.selectUlKeys.appendChild(li);
+            })
+        },
+        listItemClick(text) {
+            this.keywords = text.keyword
+            this.selectUlKeys.innerHTML = ''
+            this.selectUlKeys.style.display = 'none'
+            this.itemClick(text.keyword)
+        },
+        itemClick: function (keyword) {
+            window.location.href = '/info/search-1.html?keyword='+keyword + '&linkageFlag=1';
+        },
+        // h5弹窗搜索
+        handlerH5Search() {
+            let tip = this.searchKeys === '' ? '请输入文章关键字!' : this.searchKeys.length < 2 ? '请至少输入两个关键字!' : true;
+            if(!tip) {
+                $.confirm({
+                    useBootstrap: false,
+                    boxWidth: (isPC ? '300px' : '70%'),
+                    title: '提示',
+                    content: tip,
+                    closeIcon: true,
+                    animation: 'opacity',
+                    closeAnimation: 'opacity',
+                    animateFromElement: false,
+                    buttons: {
+                        close: {
+                            text: '确定',
+                            btnClass: 'btn-confirm'
+                        }
+                    }
+                });
+            } else {
+                this.show = !this.show;
+                window.location.href = '/info/search-1.html?keyword=' + this.searchKeys
+            }
+        },
+        handleOpenLink() {
+            window.location.href = '/info/center-3-1.html'
+        }
+    }
+})
+
 function initFilterSort(option = {}) {
     var sortControl = $(option.el);
     var sortItem = sortControl.find('.search__sort_select li');

+ 202 - 0
src/main/resources/static/js/article/recommendation.js

@@ -0,0 +1,202 @@
+var recommendation = new Vue({
+    el: "#Recommendation",
+    mixins: [cmSysVitaMixins],
+    data: {
+        status: {
+            'isDocument': 0, // 文件
+            'isSelected': 1, // 精选
+            'isNotice': 2, // 公告
+        },
+        state: null,
+        params: {
+            size: 20,
+            num: 1,
+            typeId: '',
+            labelId: '',
+            keyword: '',
+            status: 1,
+            startDate: '',
+            endDate: '',
+            productFlag: 1, // 是否统计关键词 1 统计 0 不统计
+            linkageFlag: 0, // 关键词来源是否为用户搜索 0 是 1 不是
+            selectDataRoutes: 1 // 最新 最早
+        },
+        listData: [],
+        articlerecommendationData: [],
+        listRecord: 0,
+        productRecord: 0,
+        productList: [],
+        pageInput: '1',
+        keyword: '',
+        isRossShow: false,
+        stateObj: {},
+        noMore: true,
+    },
+    computed: {
+        pageTotal: function () {
+            let total = Math.ceil(this.listRecord / this.params.size);
+            return total > 0 ? total : 1;
+        },
+        showPageBtn: function () {
+            let total = Math.ceil(this.listRecord / this.params.size);
+            total = total > 0 ? total : 1;
+            let index = this.params.num, arr = [];
+            if (total <= 6) {
+                for (let i = 1; i <= total; i++) {
+                    arr.push(i);
+                }
+                return arr;
+            }
+            if (index <= 3) return [1, 2, 3, 4, 5, 0, total];
+            if (index >= total - 2) return [1, 0, total - 4, total - 3, total - 2, total - 1, total];
+            return [1, 0, index - 2, index - 1, index, index + 1, index + 2, 0, total];
+        }
+    },
+    watch: {
+        'window.location.pathname': {
+            handler() {
+                const query = window.location.search.split('?')[1]
+                this.state = this.status[query]
+            },
+            deep: true,
+            immediate: true
+        }
+    },
+    filters: {
+        filterDate(str) {
+            return str.substring(0, 11)
+        },
+    },
+    mounted() {
+        this.initData()
+    },
+    methods: {
+        initData() {
+            if (this.state === 2) {
+                this.getNewList()
+            } else {
+                this.getArticlerecommendation(this.state)
+            }
+        },
+        getArticlerecommendation: function (id, num) {
+            var _self = this;
+            if (isPC) {
+                let paramsArr = window.location.pathname.split(".")[0].split("-");
+                this.params.num = paramsArr[2]
+                $.getJSON("/info/articlerecommendation/" + id + "/" + this.params.num, {}, function (r) {
+                    console.log(r.data)
+                    if (r.code === 0 && r.data) {
+                        _self.stateObj = r.data
+                        _self.articlerecommendationData = r.data.results;
+                        _self.listRecord = r.data.totalRecord
+                    }
+                });
+            } else {
+                this.params.num = num || '1'
+                $.getJSON("/info/articlerecommendation/" + id + "/" + this.params.num, {}, function (r) {
+                    console.log(r.data)
+                    if (r.code === 0 && r.data) {
+                        _self.stateObj = r.data
+                        _self.articlerecommendationData = [..._self.articlerecommendationData, ...r.data.results];
+                        _self.listRecord = r.data.totalRecord
+                    }
+                });
+            }
+        },
+        getNewList(num) {
+            if (isPC) {
+                let paramsArr = window.location.pathname.split(".")[0].split("-");
+                this.params.num = paramsArr[2]
+                const params = {
+                    pageSize: this.params.size,
+                    pageNum: this.params.num
+                }
+                PublicApi.GetNewsList(params, ({data}) => {
+                    this.listRecord = data.totalRecord
+                    this.listData = data.results
+                })
+            } else {
+                this.params.num = num || '1'
+                const params = {
+                    pageSize: this.params.size,
+                    pageNum: this.params.num
+                }
+                PublicApi.GetNewsList(params, ({data}) => {
+                    this.listRecord = data.totalRecord
+                    this.listData = [...this.listData, ...data.results]
+                })
+            }
+        },
+        //获取更多数据
+        handleMore (num) {
+            if (this.state===2) {
+                if (this.params.num < this.pageTotal) { // 获取列表数据
+                    this.params.num = num
+                    this.getNewList(num);
+                } else { //到底了
+                    this.noMore = false;
+                }
+            } else {
+                this.params.num = num;
+                this.getArticlerecommendation(this.state, num)
+                if (num === this.stateObj.totalPage) {
+                    this.noMore = false;
+                }
+            }
+        },
+        // 页码链接处理
+        paginationUrl (pageNum) {
+            let path = window.location.href;
+            const query = window.location.search
+            let paramsArr = window.location.pathname.split(".")[0].split("-");
+            let pageId = paramsArr.length >= 1 ? paramsArr[1] : '';
+            path = '/info/articlerecommendation-' + pageId + '-' + pageNum + '.html';
+            return path + query;
+        },
+        // 页面修改
+        checkNum: function () {
+            if (this.pageInput > this.pageTotal) {
+                this.pageInput = this.pageTotal;
+            } else if (this.pageInput < 1) {
+                this.pageInput = 1;
+            }
+        },
+        //页面跳转
+        changeLink() {
+            console.log(this.pageInput)
+            if (this.state === 1) {
+                window.location.href = '/info/articlerecommendation-1-' + this.pageInput + '.html?isSelected'
+            } else {
+                window.location.href = '/info/articlerecommendation-0-' + this.pageInput + '.html?isDocument'
+            }
+        },
+        // 过滤标签
+        filterTab(str) {
+            return str.replace(/<[^>]+>/g, '')
+        },
+        // 数组
+        filterArr(str) {
+            return str.split(',')
+        },
+        // 链接跳转
+        handleTramp(id) {
+            if (this.state === 2) {
+                window.location.href = '/news/details.html?id=' + id
+            } else {
+                window.location.href = '/info/detail-' + id + '-1.html'
+            }
+        },
+        // 文件链接跳转
+        handleFileUrl(id) {
+            window.location.href = `/product-${id}.html?tabsIndex=4`
+            // const fileUrl = url.split('?')[0]
+            // let index = fileUrl.lastIndexOf('.');
+            // let suffix = fileUrl.substring(index);
+            // if (suffix === '.doc' || suffix === '.ppt' || suffix === '.pptx' || suffix === '.docx') {
+            //     window.open('https://view.officeapps.live.com/op/view.aspx?src=' + encodeURIComponent(url), '_black') // 下载
+            // } else {
+            //     window.open(fileUrl, '_blank')
+            // }
+        }
+    }
+})

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

@@ -363,7 +363,7 @@ var globalHead = new Vue({
 var globalFot = new Vue({
     el: '#globalFot',
     data: {
-
+        isShowIcon: true,
     },
     computed:{
         copyrightYear(){

+ 11 - 0
src/main/resources/static/js/common/serviceapi/beautyArchive.service.js

@@ -32,5 +32,16 @@ var BeautyArchiveApi = {
         }).then(function (res) {
             callback(res);
         });
+    },
+    //用户浏览资料记录
+    GetStatisticsAddPv: function (params, callback) {
+        Http.AjaxService({
+            url: '/commodity/statistics/addPv',
+            type: 'GET',
+            data: params,
+            json: false,
+        }).then(function (res) {
+            callback(res);
+        });
     }
 };

+ 11 - 1
src/main/resources/static/js/common/serviceapi/utils.service.js

@@ -637,7 +637,17 @@ var PublicApi = {
                 callback(res);
             });
         },
-
+        getArticleRecommendation(params, callback) { // 精选文章和美业资料列表数据
+            Http.AjaxService({
+                url: '/info/articlerecommendation',
+                type:'get',
+                data:params,
+                json:false,
+                isHost:true
+            }).then((res) => {
+                callback(res);
+            });
+        }
 };
 
 

+ 29 - 60
src/main/resources/static/js/document/beautyArchiveDetailMixin.js

@@ -47,14 +47,20 @@ var beautyArchiveDetailMixin = {
         }
     },
     methods: {
+        // 文件浏览记录
+        GetStatisticsAddPv(type, authorId) {
+            BeautyArchiveApi.GetStatisticsAddPv({type, authorId}, () => {
+                console.log("浏览记录成功")
+            })
+        },
         // 图片点击事件
-        handleShowImage: function (i, imageList) {
-            // this.initPreviewImage()
-            console.log(this.permission, )
+        handleShowImage: function (i, imageList, info) {
+            if (info) {
+                this.GetStatisticsAddPv(1, info.archiveContentId)
+            }
             if (this.permission === 2 || this.permission === 4 || this.permission === 1) {
                 if (imageList && imageList.length >= 5) {
                     if (i < 2) {
-                        console.log(111)
                         this.initPreviewImage()
                     } else {
                         if (this.checkPermission() !== 0) return;
@@ -65,37 +71,6 @@ var beautyArchiveDetailMixin = {
             } else {
                 if (this.checkPermission() !== 0) return;
             }
-                        // CAIMEI.Popup({
-                        //     content: this.TipStatus.text,
-                        //     confitmBtnText: this.TipStatus.btn,
-                        //     cancelBtnText: '取消',
-                        //     closeIcon:true
-                        // }, function () {
-                        //     // 确认 执行 下一步  链接跳转 支付支付采美豆
-                        //     this.handleClickToPage(this.TipStatus.redirect);
-                        // }, function () {
-                        // });
-                    //     this.initPreviewImage()
-                    // } else {
-                    //     CAIMEI.Popup({
-                    //         content: this.TipStatus.text,
-                    //         confitmBtnText: this.TipStatus.btn,
-                    //         cancelBtnText: '取消',
-                    //         closeIcon:true
-                    //     }, function () {
-                    //         // 确认 执行 下一步  链接跳转 支付支付采美豆
-                    //         this.handleClickToPage(this.TipStatus.redirect);
-                    //     }, function () {
-                    //     });
-                    //     if (this.checkPermission() !== 0) return;
-                    // }
-            //     }else {
-            //         if (this.checkPermission() !== 0) return;
-            //     }
-            // } else {
-            //     if (this.checkPermission() !== 0) return;
-            // }
-            // if (this.checkPermission() !== 0) return;
         },
         //初始化预览图片配置
         initPreviewImage: function () {
@@ -108,22 +83,18 @@ var beautyArchiveDetailMixin = {
             this.imageGroup = imageGroup;
         },
         //显示视频播放窗口
-        handleShowPlayer: function (url, dom) {
+        handleShowPlayer: function (url, dom, info) {
+            if (info) {
+                this.GetStatisticsAddPv(1, info.archiveContentId)
+            }
             if (this.permission === 2 || this.permission === 4 || this.permission === 1) {
                 let _self = this;
-
                 //暂停上一个正在播放的播放器
                 this.currentVideoUrl = url;
                 this.isPlayer = true;
                 this.showVideoDialog = true;
-                console.log(url)
                 setTimeout(function(){
-                    // var video = this.$refs.videoRef;
                     _self.currentVideo = document.querySelector('#realPlayer');
-                    // _self.currentVideo.oncanplay = function () {
-                    //     console.log(parseInt((_self.currentVideo.duration % 3600)/60))
-                    // }
-                    // console.log(_self.duration)
                     if(_self.permission === 2 || _self.permission === 4 || _self.permission === 1) {
                         _self.currentVideo.oncanplay = function () {
                             console.log(_self.currentVideo.duration)
@@ -148,22 +119,6 @@ var beautyArchiveDetailMixin = {
                         }
 
                     }
-                        // _self.currentVideo.addEventListener('pause', function () {
-                        //     _self.isPlayer = false;
-                        //     console.log('暂停播放');
-                        // });
-                        // _self.currentVideo.addEventListener('ended', function () {
-                        //     _self.isPlayer = false;
-                        //     console.log('播放结束');
-                        // });
-                        // _self.currentVideo.addEventListener('error', function () {
-                        //     _self.isPlayer = false;
-                        //     console.log('播放错误');
-                        // });
-                        // _self.currentVideo.addEventListener('play', function () {
-                        //     _self.isPlayer = true;
-                        //     console.log('开始播放');
-                        // })
                 })
             } else {
                 let _self = this;
@@ -172,7 +127,6 @@ var beautyArchiveDetailMixin = {
                 this.currentVideoUrl = url;
                 this.isPlayer = true;
                 this.showVideoDialog = true;
-                console.log(url)
                 setTimeout(function(){
                     _self.currentVideo = document.querySelector('#realPlayer');
                     _self.currentVideo.addEventListener('pause', function () {
@@ -208,6 +162,9 @@ var beautyArchiveDetailMixin = {
         },
         //预览office文件 word ppt pdf
         handlePreviewOffice: function (file) {
+            if (file) {
+                this.GetStatisticsAddPv(1, file.archiveContentId)
+            }
             if (this.checkPermission() !== 0) return;
             var index = file.fileName.lastIndexOf('.');
             var suffix = file.fileName.substring(index);
@@ -230,6 +187,18 @@ var beautyArchiveDetailMixin = {
                 });
             }
         },
+        //文件预览跳转页面
+        fileContentPreview(str) {
+            if (str) {
+                this.GetStatisticsAddPv(1, str.archiveContentId)
+            }
+            if (window.localStorage.getItem('filePreviewInfo')) {
+                window.localStorage.removeItem('filePreviewInfo')
+            }
+            window.localStorage.setItem('filePreviewInfo', JSON.stringify(str))
+            window.location.href = "/product/filePreview.html"
+        },
+
         openFile: function(url){
             var a = document.createElement('a');
             a.href = url + '&random=' + Math.random();

+ 10 - 0
src/main/resources/static/js/product/detail.js

@@ -737,6 +737,16 @@ var productDetail = new Vue({
         this.queryProductDetilsCoupons();
         this.getCommodityCombinationList();
         console.log('GLOBAL_CLUB_TYPE',GLOBAL_CLUB_TYPE)
+        const tabsIndex = window.location.search.split('=')[1]
+        if (tabsIndex) {
+            this.tabsIndex = tabsIndex
+        }
+        setTimeout(() => {
+            const cate_import = document.getElementById('category-import')
+            if (cate_import) {
+                cate_import.scrollIntoView({ behavior: "smooth" })
+            }
+        }, 500)
         // $('.productInfo').slide({
         //     mainCell:".tabCon"
         //     ,titCell:".tabTit span"

+ 17 - 0
src/main/resources/static/js/product/filePreview.js

@@ -0,0 +1,17 @@
+var FilePreview = new Vue({
+    el: "#file",
+    mixins: [beautyArchiveDetailMixin],
+    data: {
+        fileInfo: {}
+    },
+    mounted() {
+        this.fileInfo = JSON.parse(window.localStorage.getItem('filePreviewInfo'));
+        document.title = this.fileInfo.fileName
+    },
+    methods: {
+    //    查看更多
+        readMore() {
+            this.checkPermission()
+        },
+    },
+})

+ 42 - 7
src/main/resources/static/js/supplier-center/article/article-edit.js

@@ -37,8 +37,11 @@ var articleEdit = new Vue({
             // 状态
             status: 0,
             // 文章分类
-            typeId: ''
+            typeId: '',
+            // 文章二级分类
+            childId: null,
         },
+        hasSecondary: false, // 是否有二级分类
         // 图片列表
         articleImageList: [],
         // 文章标签列表
@@ -47,6 +50,8 @@ var articleEdit = new Vue({
         chooseLabels: [],
         // 文章分类列表
         articleTypeList: [],
+        // 文章二级分类列表
+        articleChildren: [],
         // 待添加标签名
         addLabelName: '',
         /* 表单验证规则 */
@@ -84,7 +89,10 @@ var articleEdit = new Vue({
             // 文章分类
             typeId: [
                 {required: true, message: '请选择文章所属分类', trigger: 'change'}
-            ]
+            ],
+            // childId: [
+            //     {required: true, message: '请选择文章所属二级分类', trigger: 'change'}
+            // ]
         },
         formValidate: {},
         variable: '',
@@ -120,13 +128,11 @@ var articleEdit = new Vue({
     methods: {
         onFocused() {
             this.validTime = null
-            console.log(111)
             clearTimeout(this.validTime)
         },
         onBlured() {
             this.isFocus = true
             this.validFormRule()
-            console.log(222)
         },
         // 页面初始化
         init: function init() {
@@ -170,7 +176,13 @@ var articleEdit = new Vue({
                 }
             })
         },
-        handlerTypeId() {
+        handlerTypeId($event) {
+            this.onFocused()
+            this.onBlured()
+            this.articleChildren = this.articleTypeList.filter(i => i.typeId === $event)[0].articleTypes || []
+            this.formData.childId = null
+        },
+        handlerChildId() {
             this.onFocused()
             this.onBlured()
         },
@@ -183,6 +195,7 @@ var articleEdit = new Vue({
         },
         // 设置表单初始数据
         setFormData: function setFormData(shopArticle) {
+            const isParent = this.articleTypeList.filter(i => i.typeId === shopArticle.typeId).length > 0
             for (var key in this.formData) {
                 if(key === 'labelIds' && shopArticle[key]){
                     this.formData[key] = shopArticle[key].split(',').map(v => parseInt(v));
@@ -190,6 +203,19 @@ var articleEdit = new Vue({
                     this.formData[key] = shopArticle[key];
                 }
             }
+            if (!isParent) {
+                this.articleTypeList.forEach(i => {
+                    if (i.articleTypes) {
+                        i.articleTypes.forEach(e => {
+                            if (e.typeId === shopArticle.typeId) {
+                                this.articleChildren = i.articleTypes
+                                this.formData.typeId = i.typeId
+                                this.formData.childId = e.typeId
+                            }
+                        })
+                    }
+                })
+            }
             // 初始化引导图
             if (this.formData.guidanceImage) {
                 this.articleImageList = [{url: this.formData.guidanceImage}]
@@ -370,10 +396,17 @@ var articleEdit = new Vue({
         onReallySave_new(params) {
             let _this = this;
             this.formData.shopId = this.shopId;
-            SupplierApi.ArticleSubmitSave(this.formData, function (res) {
+            const form = JSON.parse(JSON.stringify(_this.formData))
+            form.typeId = form.childId || form.typeId;
+            SupplierApi.ArticleSubmitSave(form, function (res) {
                 if (res.code === 0) {
                     CAIMEI.dialog('自动保存成功');
                     _this.onFocused()
+                    setTimeout(function () {
+                        if (_this.formData.articleId === 0) {
+                            _this.handleBack()
+                        }
+                    }, 2000);
                 } else {
                     CAIMEI.Alert(res.msg, '确定', false);
                 }
@@ -384,7 +417,9 @@ var articleEdit = new Vue({
         onReallySave: function onReallySave() {
             var _this = this;
             this.formData.shopId = this.shopId;
-            SupplierApi.ArticleSubmitSave(this.formData, function (res) {
+            const form = JSON.parse(JSON.stringify(_this.formData))
+            form.typeId = form.childId || form.typeId;
+            SupplierApi.ArticleSubmitSave(form, function (res) {
                 if (res.code === 0) {
                     CAIMEI.dialog('保存成功');
                     setTimeout(function () {

+ 35 - 3
src/main/resources/static/js/supplier-center/article/article-list.js

@@ -18,13 +18,15 @@ var articleList = new Vue({
             status: '',
             onlineStatus: '',
             typeId: '',
+            childId: null,// 二级标题id
             pageNum: 1,
             pageSize: 10
         },
         pageInput: 1,
         pageTotal: 0,
         articleList: [],
-        articleTypeList: []
+        articleTypeList: [],
+        articleTypeChildren: [], // 二级菜单列表
     },
     computed: {
         pageTotal: function pageTotal() {
@@ -68,11 +70,41 @@ var articleList = new Vue({
         $('.navLayout').find('.navList').eq(2).addClass("on").find('.con').show().find('a').eq(0).addClass("on");
     },
     methods: {
+        // 查找父级菜单Parents
+        findParent(id) {
+            return this.articleTypeList.filter(i => i.typeId.toString() === id)[0]?.typeName
+        },
         // 获取文章列表
-        getArticleList: function getArticleList() {
+        getArticleList: function getArticleList($event, isTypeSelect) {
             var that = this;
+            if (isTypeSelect) { // 判断文章分类
+                this.articleTypeChildren = this.articleTypeList.filter(i => i.typeId === $event)[0]?.articleTypes || [];
+                this.listQuery.childId = '';
+            }
             this.listQuery.shopId = this.shopId;
-            SupplierApi.GetArticleList(this.listQuery, function (res) {
+            const listQuery = JSON.parse(JSON.stringify(this.listQuery))
+            listQuery.typeId = listQuery.childId || listQuery.typeId
+            SupplierApi.GetArticleList(listQuery, function (res) {
+                // console.log(res);
+                if (res.code === 0) {
+                    that.listRecord = res.data.total;
+                    that.articleList = res.data.list;
+                    that.pageTotal = res.data.pages;
+                } else {
+                    CAIMEI.Alert(res.msg, '确定', false);
+                }
+            });
+        },
+        // 二级列表获取文章
+        getArticleChildren($event) {
+            this.listQuery.pageNum = 1
+            this.listQuery.pageSize = 10
+            const that = this
+            const listQuery = JSON.parse(JSON.stringify(this.listQuery))
+            if ($event) {
+                listQuery.typeId = listQuery.childId
+            }
+            SupplierApi.GetArticleList(listQuery, function (res) {
                 // console.log(res);
                 if (res.code === 0) {
                     that.listRecord = res.data.total;

文件差異過大導致無法顯示
+ 0 - 0
src/main/resources/static/lib/element-ui/element-index.css


文件差異過大導致無法顯示
+ 0 - 0
src/main/resources/static/lib/element-ui/element-ui-min.css


文件差異過大導致無法顯示
+ 0 - 0
src/main/resources/static/lib/element-ui/index.css


文件差異過大導致無法顯示
+ 0 - 0
src/main/resources/static/lib/element-ui/vant.min.js


+ 84 - 0
src/main/resources/templates/article/components/article-drawer.html

@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
+<head>
+  <meta charset="UTF-8">
+  <link th:href="@{/css/article/drawer-footer.css(v=${version})}" rel="stylesheet" type="text/css" />
+</head>
+<body>
+
+<input type="hidden" th:value="${coreServer}" id="coreServer">
+<input type="hidden" th:value="${agent}" id="userAgent">
+  <div id="drawer-footer" th:if="${isSelectInfo}">
+    <div class="hot-recommend" v-if="recommend.list.length > 0">
+      <div class="hot-recommend-title">
+        <div>热门推荐</div>
+        <div>
+          <a></a>
+        </div>
+      </div>
+      <div class="hot-recommend-content">
+        <div class="hot-recommend-content-item" v-for="item in recommend.list">
+          <div>
+            <a :href="'/info/detail-'+item.id+'-1.html'" target="_blank">
+              <img :src="item.image"/>
+            </a>
+          </div>
+          <div>
+            <a :href="'/info/detail-'+item.id+'-1.html'" target="_blank">
+              <p class="shuoming" v-html="item.title"></p>
+            </a>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="hot-recommend" th:if="${#arrays.length(productSellNumbers)} > 0">
+      <div class="hot-recommend-title">
+        <div>你可能感兴趣的商品</div>
+        <div>
+          <a href="/product/list.html">更多 ></a>
+        </div>
+      </div>
+      <div class="hot-recommend-content">
+        <div class="hot-recommend-content-item" th:each="product: ${productSellNumbers}">
+          <div>
+            <a th:href="'/product-'+${product.id}+'.html'" target="_blank">
+              <img th:src="${product.image}" style="width: 100%;height: 100%;object-fit: contain;" />
+            </a>
+          </div>
+          <div>
+            <a th:text="${product.name}" th:href="'/product-'+${product.id}+'.html'" target="_blank"></a>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="hot-recommend" th:if="${#arrays.length(archiveFiles)} > 0">
+      <div class="hot-recommend-title">
+        <div>您可能感兴趣的美业资料</div>
+        <div>
+          <a href="/info/articlerecommendation-0-1.html?isDocument">更多 ></a>
+        </div>
+      </div>
+      <div class="hot-recommend-content">
+        <div class="hot-recommend-content-item" th:each="file: ${archiveFiles}">
+          <div>
+            <a href="javascript:void(0)" target="_blank" th:onclick="handleFileUrl([[${file.productId}]])">
+              <img src="/img/article/PC--pdf.png" th:if="${#strings.containsIgnoreCase(file.fileName, 'pdf')}">
+              <img src="/img/info/PC-doc.png" th:if="${#strings.containsIgnoreCase(file.fileName, 'doc')}">
+              <img src="/img/info/PC-ppt.png" th:if="${#strings.containsIgnoreCase(file.fileName, 'ppt')}">
+            </a>
+          </div>
+          <div>
+            <a th:text="${file.fileName}" target="_blank" href="javascript:void(0)" th:onclick="handleFileUrl([[${file.productId}]])"></a>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+<!--    广告-->
+<div class="advertisement" th:if="${#arrays.length(ads)} > 0 and ${isSelectInfo}">
+  <a class="advertisement-link" th:each="ad : ${ads}" th:href="${ad.link}">
+    <img th:src="${ad.image}" th:alt="${ad.title}" class="advertisement-img"/>
+  </a>
+</div>
+</body>
+</html>

+ 3 - 0
src/main/resources/templates/article/components/article-footer.html

@@ -1,6 +1,9 @@
 <!--底部内容-->
 <div class="foot">
     <div class="footer">
+        <div class="back-link">
+            <a href="/index.html">友情链接:采美商城</a>
+        </div>
         <p>
            <span>
                 <img class="icp" src="/img/base/icon-icp@2x.png" alt="粤B1-20160129 备案号 ">

+ 77 - 15
src/main/resources/templates/article/components/article-header.html

@@ -1,26 +1,88 @@
-<header class="header" xmlns:th="http://www.w3.org/1999/xhtml">
-    <!--导航栏-->
-    <div class="nav">
-        <div class="h5-head">
-            <a class="index" href="/"><img src="/img/info/mall.png"></a>
-<!--            <a class="hotWord" href="javascript:void(0);">热搜词</a>-->
+<header class="header" id="info-header" xmlns:th="http://www.w3isRossShow.org/1999/xhtml">
+    <div class="head-back">
+        <div class="head">
+            <div class="head-logo"></div>
+            <div class="text">
+                <a href="/index.html">采美商城首页</a>
+            </div>
         </div>
-        <div class="logo">
-            <a href="/" target="_blank"><img src="/img/base/logo_article@2x.png"/></a>
+    </div>
+<!--    搜索头-->
+    <div class="search-top" :class="(show || right_drawer) ? 'search-top-shadow' : '' ">
+        <div class="info-logo-content" @click="handleOpenLink"></div>
+        <div class="search auto-input" id="topSearch">
+            <div class="search-info">
+                <label>
+                    <input class="keyword label-keyword" v-model="keywords" type="text" placeholder="搜索文章" autocomplete="off" />
+                </label>
+                <a class="searchBtn icon" href="javascript:void(0);">搜索</a>
+            </div>
+            <div class="keywords">
+                <div th:each="label,count : ${labels}" th:if="${count.index} le 7">
+                    <a th:labelId="${label.id}" th:href="'/info/label-' + ${label.id} + '-1.html'" th:text="${label.name}" th:class="${labelId==label.id}?'label-active':''"></a>
+                    <span th:if="${count.index} le 6"> / </span>
+                </div>
+            </div>
         </div>
+        <div class="H5-info-logo" @click="handleOpenLink"></div>
+        <div class="H5-info-menu">
+            <div @click="(right_drawer = false), (show = !show)"></div>
+            <div>菜单</div>
+            <div :class="right_drawer ? 'right_drawer_close' : 'right_drawer_open'" @click="(right_drawer = !right_drawer), (show = false)"></div>
+        </div>
+    </div>
+
+<!--    搜索头弹窗-->
+    <van-popup class="searchPopup" v-model="show" position="top" v-cloak>
+        <div class="search-title">
+            <div>搜索</div>
+            <div @click.stop="show = !show"></div>
+        </div>
+        <div class="search-info">
+            <label>
+                <input class="keyword" type="search" placeholder="搜索文章" autocomplete="off" v-model="searchKeys" />
+            </label>
+            <a class="searchBtn icon" href="javascript:void(0);" @click="handlerH5Search">搜索</a>
+        </div>
+        <div class="keywords">
+            <div th:each="label,count : ${labels}" @click.stop="show = !show" th:if="${count.index} le 7">
+                <a th:href="'/info/label-' + ${label.id} + '-1.html'" th:text="${label.name}"></a>
+            </div>
+        </div>
+    </van-popup>
+
+<!--   导航栏弹窗-->
+    <van-popup class="navPopup" v-model="right_drawer" position="right" v-cloak>
+        <van-collapse accordion v-model="activeNames">
+            <van-collapse-item th:title="${type.name}" th:name="${type.id}" th:each="type,status: *{articleType}" th:typeId="${type.id}" th:if="${status.index} < 10">
+                <a th:href="'/info/center-'+${type.id}+'-1.html'" th:text="${type.name}" class="van-collapse-nav"></a>
+                <a class="van-collapse-nav" th:each="link: *{type.linkList}" th:text="${link.name}" th:href="'/info/center-'+${link.id}+'-1.html'"></a>
+            </van-collapse-item>
+            <a class="van-document" @click="(right_drawer = false)" href="/document/beauty-archive.html">美业资料</a>
+        </van-collapse>
+    </van-popup>
+
+    <!--导航栏-->
+    <div class="nav">
         <div class="type">
-            <div>
+            <div class="type-content" th:if="${articleType}">
                 <!-- <a class="home" href="/" target="_blank">商城</a> -->
-                <a th:each="type: *{articleType}" th:text="${type.name}" th:href="'/info/center-'+${type.id}+'-1.html'" th:class="${typeId==type.id}?'typeBtn current':'typeBtn'" th:typeId="${type.id}"></a>
-                <a class="typeBtn" href="/document/beauty-archive.html" target="_blank">美业资料</a>
+                <div class="type-item" th:each="type,status: *{articleType}" th:typeId="${type.id}" th:class="${typeId==type.id}?'type-item current':'type-item'" th:if="${status.index} < 10">
+                    <a class="typeBtn" th:text="${type.name}" th:href="'/info/center-'+${type.id}+'-1.html'"></a>
+                    <div class="type-item-link" th:if="${type.linkList}"></div>
+                    <div class="nav-menu" th:if="${type.linkList}">
+                        <a th:each="link: *{type.linkList}" th:href="'/info/center-'+${link.id}+'-1.html'" th:text="${link.name}"></a>
+                    </div>
+                </div>
+                <a class="typeBtn moreLink" href="/document/beauty-archive.html" target="_blank">美业资料</a>
                 <!-- <a class="typeBtn" href="/encyclopedia/product.html" target="_blank">采美百科</a> -->
             </div>
         </div>
         <!--搜索-->
-        <div class="search auto-input" id="topSearch">
-            <input class="keyword" type="text" placeholder="请输入关键词" autocomplete="off" />
-            <a class="searchBtn icon" href="javascript:void(0);"></a>
-        </div>
+<!--        <div class="search auto-input" id="topSearch">-->
+<!--            <input class="keyword" type="text" placeholder="请输入关键词" autocomplete="off" />-->
+<!--            <a class="searchBtn icon" href="javascript:void(0);"></a>-->
+<!--        </div>-->
     </div>
     <input type="hidden" th:value="${labelId}" id="labelId">
     <input type="hidden" th:value="${typeId}" id="typeId">

+ 3 - 0
src/main/resources/templates/article/components/article-link.html

@@ -7,6 +7,7 @@
     <meta http-equiv="expires" content="0">
     <meta http-equiv="X-UA-Compatible" content="IE=Edge">
     <meta http-equiv="Cache-Control" content="no-transform " />
+    <link rel="stylesheet" th:href="@{/lib/element-ui/element-ui-min.css}" />
     <link rel="shortcut icon" th:href="@{/favicon.png}" type="image/x-icon"/>
     <link rel="bookmark" th:href="@{/favicon.png}" type="image/x-icon"/>
     <link href="/lib/swiper.min.css" media="screen and (max-width:768px)" rel="stylesheet" type="text/css">
@@ -14,3 +15,5 @@
     <link href="/lib/datapicker/daterangepicker.css" rel="stylesheet">
     <link th:href="@{/css/base/init.css(v=${version})}" rel="stylesheet" type="text/css">
     <link th:href="@{/css/article/article.css(v=${version})}" rel="stylesheet" type="text/css">
+    <link rel="stylesheet" href="/lib/element-ui/index.css" />
+

+ 51 - 17
src/main/resources/templates/article/components/article-sidebar.html

@@ -1,24 +1,12 @@
-<html xmlns:th="http://www.w3.org/1999/xhtml">
-<div class="other" id="articleSide" v-cloak>
+<html xmlns:th="http://www.w3.org/1999/xhtml" >
+<div class="other" id="articleSide" v-cloak th:if="${isSelectInfo}">
 <!--    &lt;!&ndash;侧边栏Ross广告图&ndash;&gt;-->
 <!--    <div v-if="isPC && isRossShow" class="article-right-ross" :class="isRossShow ? 'show' : 'none'">-->
 <!--        <a href="/supplier-1378.html" v-if="isPC"><img src="/img/ross/ross-image@1x.jpg" alt="深圳艾斯佰丽生物科技有限公司"></a>-->
 <!--    </div>-->
-    <div id="mHotWord">
-        <div class="tags clearfix">
-            <p class="classify">
-                热搜词
-            </p>
-            <div class="tag">
-<!--                    <a v-for="label in labelList"  :href="'/info/label-' + label.id + '-1.html'" :style="'opacity:'+label.sort" v-text="label.name"></a>-->
-                <a th:each="label : ${labels}" th:href="'/info/label-' + ${label.id} + '-1.html'" th:text="${label.name}"></a>
-            </div>
-        </div>
-        <a href="javascript:void(0);" class="close"></a>
-    </div>
-    <div v-if="isPC" class="recommend">
+    <div v-if="isPC && recommend.list.length > 0" class="recommend">
         <p class="classify readerSify">
-            推荐阅读
+            热门推荐
             <span class="nextPreBtn">
                 <span v-if="recommend.nextPage" class="next" @click="getRecommend(typeId, recommend.nextPage)"></span>
                 <span v-if="recommend.prePage" class="pre" @click="getRecommend(typeId, recommend.prePage)"></span>
@@ -37,12 +25,58 @@
             </div>
         </div>
     </div>
+    <div v-if="isPC" class="recommend" th:if="${#arrays.length(productSellNumbers)} > 0">
+        <p class="classify readerSify">
+            你可能感兴趣的商品
+            <span class="more-product">
+<!--                <span v-if="recommend.nextPage" class="next" @click="getRecommend(typeId, recommend.nextPage)"></span>-->
+<!--                <span v-if="recommend.prePage" class="pre" @click="getRecommend(typeId, recommend.prePage)"></span>-->
+                <a href="/product/list.html">更多 ></a>
+            </span>
+        </p>
+        <div class="row" th:each="product: ${productSellNumbers}" >
+            <div class="new-img xiao">
+                <a th:href="'/product-'+${product.id}+'.html'" target="_blank">
+                    <img th:src="${product.image}"/>
+                </a>
+            </div>
+            <div class="new-blurb xiao">
+                <a th:href="'/product-'+${product.id}+'.html'" target="_blank">
+                    <p class="shuoming" th:text="${product.name}"></p>
+                </a>
+            </div>
+        </div>
+    </div>
+    <div v-if="isPC" class="recommend" th:if="${#arrays.length(archiveFiles)} > 0">
+        <p class="classify readerSify">
+            您可能感兴趣的美业资料
+            <span class="more-product">
+<!--                <span v-if="recommend.nextPage" class="next" @click="getRecommend(typeId, recommend.nextPage)"></span>-->
+<!--                <span v-if="recommend.prePage" class="pre" @click="getRecommend(typeId, recommend.prePage)"></span>-->
+                <a href="/info/articlerecommendation-0-1.html?isDocument">更多 ></a>
+            </span>
+        </p>
+        <div class="row" th:each="file: ${archiveFiles}">
+            <div class="new-img xiao">
+                <a href="javascript:void(0);" th:onclick="handleFileUrl([[${file.productId}]])" target="_blank">
+                    <img src="/img/article/PC--pdf.png" th:if="${#strings.containsIgnoreCase(file.fileName, 'pdf')}">
+                    <img src="/img/info/PC-doc.png" th:if="${#strings.containsIgnoreCase(file.fileName, 'doc')}">
+                    <img src="/img/info/PC-ppt.png" th:if="${#strings.containsIgnoreCase(file.fileName, 'ppt')}">
+                </a>
+            </div>
+            <div class="new-blurb xiao">
+                <a target="_blank" href="javascript:void(0);" th:onclick="handleFileUrl([[${file.productId}]])">
+                    <p class="shuoming" th:text="${file.fileName}"></p>
+                </a>
+            </div>
+        </div>
+    </div>
     <div v-if="isPC" class="tui">
 <!--        <a v-for="ad in adList" href="javascript:void(0);" class="tui-img" @click="clickAD(ad.id,ad.link)">-->
 <!--            <img :src="ad.image" alt="ad.title"/>-->
 <!--        </a>-->
         <a th:each="ad : ${ads}" class="tui-img" th:href="${ad.link}" @click="clickAD(ad.id,ad.link)">
-            <img th:src="${ad.image}" th:alt="${ad.title}"></img>
+            <img th:src="${ad.image}" th:alt="${ad.title}" />
         </a>
     </div>
 </div>

+ 23 - 5
src/main/resources/templates/article/detail.html

@@ -18,8 +18,16 @@
 <div class="tip-bar">
     <!--<div class="tip">提示:产品详情请到采美商城搜索</div>-->
     <!--面包屑-->
-    <div class="bar">
-        <a href="/" target="_blank">首页</a> &gt; <a  th:each="type: *{articleType}" th:if="${typeId}==${type.id}" th:text="${type.name}" href="javascript:void(0);" class="title newTitle"></a>&gt; 正文
+    <div th:if="${typeId}>0" class="bar">
+        <a th:each="type: ${articleType}" th:if="${typeId}==${type.id}" th:text="${type.name}" th:href="'/info/center-' + ${type.id} + '-1.html'" class="title newTitle"></a>
+        <a th:each="type: ${articleType}" th:if="${typeId}==${type.id}">> 正文</a>
+        <span th:each="type: ${articleType}">
+            <span th:each="childLink: ${type.linkList}" th:if="${typeId}==${childLink.id}">
+                <a th:text="${type.name}" th:href="'/info/center-' + ${type.id} + '-1.html'" class="title newTitle"></a>
+                <a th:if="${typeId}==${childLink.id}" th:href="'/info/center-' + ${childLink.id} + '-1.html'" class="title newTitle" th:text="'>' + ${childLink.name}"></a>
+                <a>> 正文</a>
+            </span>
+        </span>
     </div>
 </div>
 <!--主体内容-->
@@ -62,13 +70,14 @@
                     <a th:href="'/info/detail-'+${item.id}+'-1.html'" target="_blank">
                         <p class="title" th:utext="${item.title}"></p>
                     </a>
+                    <p class="introduction" th:utext="${item.intro}"></p>
                     <p class="xinxi">
                         <em v-if="!isPC" class="pv icon mIcon" th:utext="${item.pv}"></em>
                         <em class="write icon mIcon" th:text="${item.publisher}"></em>
                         <em th:if="${item.publishDate}" class="time icon mIcon" th:text="${item.publishDate}"></em>
+                        <em class="pv icon mIcon" th:text="${item.pv}"></em>
                     </p>
-                    <p class="introduction" th:utext="${item.intro}"></p>
-                    <p v-if="isPC" class="P_img"><em class="pv icon mIcon" th:text="${item.pv}"></em></p>
+<!--                    <p v-if="isPC" class="P_img"></p>-->
                 </div>
             </div>
             <div id="scrollTop">
@@ -96,10 +105,19 @@
     <template th:replace="article/components/article-sidebar"></template>
 
 </div>
+
+<template th:replace="article/components/article-drawer"></template>
 <template th:replace="article/components/article-footer"></template>
 <template th:replace="components/foot-link"></template>
-<script charset="utf-8" type="text/javascript" src="/lib/jquery.qrcode.min.js"></script>
+<script charset="utf-8" type="text/javascript" src="/lib/datapicker/moment-2.29.min.js"></script>
+<script charset="utf-8" type="text/javascript" src="/lib/datapicker/jquery.daterangepicker.js"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/lib/element-ui/element-ui.min.js}"></script>
+<script type="text/javascript" src="/lib/element-ui/element-ui.min.js"></script>
+<script type="text/javascript" src="/lib/element-ui/vant.min.js"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/ajax.service.js}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/product.service.js}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/article/common.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/article/list.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/article/detail.js(v=${version})}"></script>
 </body>
 </html>

+ 13 - 4
src/main/resources/templates/article/error.html

@@ -3,12 +3,13 @@
       xsi:schemaLocation="https://www.thymeleaf.org ">
 <head>
   <title>采美365网</title>
-  <template th:replace="components/head-link"></template>
+  <template th:replace="article/components/article-link"></template>
+  <template th:replace="components/analysis"></template>
   <link th:href="@{/css/article/error.css(v=${version})}" rel="stylesheet" type="text/css">
 </head>
 <body>
-<!-- 引用头部 -->
-<template th:replace="components/header"></template>
+<!--导航栏-->
+<template th:replace="article/components/article-header"></template>
 <input type="hidden" th:value="${labelId}" id="labelId">
 <input type="hidden" th:value="${typeId}" id="typeId">
 <input type="hidden" th:value="${pageNum}" id="pageNum">
@@ -41,8 +42,16 @@
   </div>
 </div>
 <!-- 引入底部 -->
-<template th:replace="components/footer"></template>
+<template th:replace="article/components/article-footer"></template>
 <template th:replace="components/foot-link"></template>
+<script charset="utf-8" type="text/javascript" src="/lib/datapicker/moment-2.29.min.js"></script>
+<script charset="utf-8" type="text/javascript" src="/lib/datapicker/jquery.daterangepicker.js"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/lib/element-ui/element-ui.min.js}"></script>
+<script type="text/javascript" src="/lib/element-ui/vant.min.js"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/ajax.service.js}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/product.service.js}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/article/common.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/article/list.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/article/error.js(v=${version})}"></script>
 </body>
 </html>

+ 113 - 8
src/main/resources/templates/article/list.html

@@ -2,7 +2,7 @@
 <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>
+    <title>信息平台</title>
     <template th:replace="article/components/article-link"></template>
     <template th:replace="components/analysis"></template>
 </head>
@@ -11,10 +11,32 @@
 <!--导航栏-->
 <template th:replace="article/components/article-header"></template>
 <div class="tip-bar">
-    <!--<div class="tip">提示:产品详情请到采美商城搜索</div> -->
-    <!--面包屑-->
+    <!--    <div class="tip">提示:产品详情请到采美商城搜索</div> -->
+    <!--    面包屑-->
     <div th:if="${typeId}>0" class="bar">
-        <a href="/" target="_blank">首页</a>&gt; <a  th:each="type: ${articleType}" th:if="${typeId}==${type.id}" th:text="${type.name}" href="javascript:void(0);" class="title newTitle"></a>
+        <a th:each="type: ${articleType}" th:if="${typeId}==${type.id}" th:text="${type.name}" th:href="'/info/center-' + ${type.id} + '-1.html'" class="title newTitle"></a>
+        <span th:each="type: ${articleType}">
+            <span th:each="childLink: ${type.linkList}" th:if="${typeId}==${childLink.id}">
+                <a th:text="${type.name}" th:href="'/info/center-' + ${type.id} + '-1.html'" class="title newTitle"></a>
+                <a th:if="${typeId}==${childLink.id}" th:href="'/info/center-' + ${childLink.id} + '-1.html'" class="title newTitle" th:text="'>' + ${childLink.name}"></a>
+            </span>
+        </span>
+    </div>
+</div>
+<div class="info-banner AppBanner" th:if="${isSearch} and ${articleImages}">
+    <div class="banner" th:each="type: ${articleImages}" th:if="${type.levelType} == 1 and ${type.headAppBanner}" >
+        <a th:href="${type.jumpLink}" th:if="${type.jumpStatus} == 2">
+            <img th:src="${type.headAppBanner}" style="width: 100%;height: 100%;" />
+        </a>
+        <img th:src="${type.headAppBanner}" style="width: 100%;height: 100%;" th:if="${type.jumpStatus} == 0"/>
+    </div>
+    <div class="sider-banner">
+        <div th:each="type: ${articleImages}" th:if="${type.levelType} == 2 and ${type.headAppBanner}" >
+            <a th:href="${type.jumpLink}" th:if="${type.jumpStatus} == 2">
+                <img th:src="${type.headAppBanner}" style="width: 100%;height: 100%;" />
+            </a>
+            <img th:src="${type.headAppBanner}" style="width: 100%;height: 100%;" th:if="${type.jumpStatus} == 0"/>
+        </div>
     </div>
 </div>
 <!--主体内容-->
@@ -22,6 +44,53 @@
     <!--侧边栏Ross广告图-->
     <div class="mainData">
         <div class="new-list" id="articleList" v-cloak>
+            <!-- h5 公告-->
+            <div class="info-h5-notice" th:if="${isSearch}">
+                <div class="h5-notice">公告:</div>
+                <div class="h5-notice-title">
+                    <ul>
+                        <li @click="hanldDetails(newsList[0].id)" v-if="newsList[0].title">{{ newsList[0].title }}</li>
+                    </ul>
+                </div>
+                <div class="h5-notice-more"><a href="/info/articlerecommendation-3-1.html?isNotice">更多 ></a></div>
+            </div>
+            <div class="info-banner PcBanner" th:if="${isSearch} and ${articleImages}">
+                <div class="banner" th:each="type: ${articleImages}" th:if="${type.levelType} == 1 and ${type.headPcBanner}" >
+                    <a th:href="${type.jumpLink}" th:if="${type.jumpStatus} == 2">
+                        <img th:src="${type.headPcBanner}" style="width: 100%;height: 100%;" />
+                    </a>
+                    <img th:src="${type.headPcBanner}" style="width: 100%;height: 100%;" th:if="${type.jumpStatus} == 0"/>
+                </div>
+                <div class="sider-banner">
+                    <div th:each="type: ${articleImages}" th:if="${type.levelType} == 2 and ${type.headPcBanner}">
+                        <a th:href="${type.jumpLink}" th:if="${type.jumpStatus} == 2">
+                            <img th:src="${type.headPcBanner}" style="width: 100%;height: 100%;" />
+                        </a>
+                        <img th:src="${type.headPcBanner}" style="width: 100%;height: 100%;" th:if="${type.jumpStatus} == 0"/>
+                    </div>
+                </div>
+            </div>
+            <!--    精选文章推荐-->
+            <div class="featured-Articles" id="featured-Articles" th:if="${isSearch} and ${#arrays.length(infoSelected)} > 0">
+                <div class="featured-title">
+                    <div>精选推荐</div>
+                    <div>
+                        <a href="/info/articlerecommendation-1-1.html?isSelected">更多 ></a>
+                    </div>
+                </div>
+                <div class="featured-content">
+                    <div class="item-content" th:each="featured: ${infoSelected}">
+                        <div class="item-img">
+                            <a th:href="'/info/detail-' + ${featured.id} + '-1.html'" class="img-a">
+                                <img th:src="${featured.image}"/>
+                            </a>
+                        </div>
+                        <a th:href="'/info/detail-' + ${featured.id} + '-1.html'" class="text-a">
+                            <div class="item-title" th:text="${featured.title}"></div>
+                        </a>
+                    </div>
+                </div>
+            </div>
             <div v-if="!isPC && isRossShow" class="article-right-ross" :class="isRossShow ? 'show' : 'none'"><a href="/supplier-1378.html" ><img src="/img/ross/ross-image@2x.jpg" alt="深圳艾斯佰丽生物科技有限公司"></a></div>
             <!-- 产品搜索结果 -->
             <div class="search-section" v-show="params.keyword && productRecord > 0">
@@ -67,6 +136,12 @@
                 </div>
             </div>
             <!-- 文章列表 -->
+            <div class="listData-select-title" th:if="${isSearch}">
+                <div class="search-select">
+                    <div class="select-new" :class="params.sortType === 1 ? 'now-search-select' : '' " @click="selectListNew(1)">最新</div>
+                    <div class="select-earliest" :class="params.sortType === 2 ? 'now-search-select' : '' " @click="selectListNew(2)">最早</div>
+                </div>
+            </div>
             <div v-if="listData.length>0" class="dataRousce">
                 <div class="row" v-for="item in listData">
                     <div class="new-img">
@@ -79,17 +154,24 @@
                             <p class="title" v-html="item.title"></p>
                         </a>
                         <p class="introduction" v-html="item.intro"></p>
+                        <p class="xinxi"><em v-if="item.labels.length>0&&item.labels[0]" class="hotspot icon mIcon">
+                            <template v-for="(id,i) in item.labelIds">{{i>0?' | ':''}}<a v-if="item.labels[i]" v-text="item.labels[i]" :href="'/info/label-' +id+ '-1.html'"></a></template>
+                        </em></p>
                         <p class="xinxi">
                             <em v-if="!isPC" class="pv icon mIcon" v-text="item.pv"></em>
                             <em class="write icon mIcon" v-text="item.publisher"></em>
                             <em v-if="item.publishDate" class="time icon mIcon" v-text="item.publishDate.substr(0,10)"></em>
-                            <em v-if="item.labels.length>0&&item.labels[0]" class="hotspot icon mIcon">
-                                <template v-for="(id,i) in item.labelIds">{{i>0?',':''}}<a v-if="item.labels[i]" v-text="item.labels[i]" :href="'/info/label-' +id+ '-1.html'"></a></template>
-                            </em>
+                            <em v-if="isPC" class="pv icon mIcon" v-text="item.pv"></em>
+<!--                            <em v-if="item.labels.length>0&&item.labels[0]" class="hotspot icon mIcon">-->
+<!--                                <template v-for="(id,i) in item.labelIds">{{i>0?',':''}}<a v-if="item.labels[i]" v-text="item.labels[i]" :href="'/info/label-' +id+ '-1.html'"></a></template>-->
+<!--                            </em>-->
                         </p>
-                        <p v-if="isPC" class="P_img"><em class="pv icon mIcon" v-text="item.pv"></em></p>
+<!--                        <p v-if="isPC" class="P_img"><em class="pv icon mIcon" v-text="item.pv"></em></p>-->
                     </div>
                 </div>
+                <div class="handleMore" v-if="!noMore">
+                    <el-button class="more" @click="handleMore">查看更多</el-button>
+                </div>
             </div>
             <div v-if="listLoading" class="loading">
                 <img src="/img/base/loading.gif">
@@ -115,6 +197,25 @@
                 <span>页</span>&nbsp;
                 <a class="btn" :href="paginationUrl(pageInput)">点击跳转</a>
             </div>
+<!--            <div class="side-pop-up" :class="dialogVisible ? 'eject' : 'retract'" @click="handlerPopup">-->
+<!--                <div v-if="dialogVisible">侧边弹窗13-->
+<!--                    <el-button @click.stop="dialogVisible = false"></el-button></div>-->
+<!--            </div>-->
+        </div>
+    </div>
+    <div class="info-Notice" id="infoNotice" th:if="${isSearch}" v-cloak>
+        <div class="notice-title">
+            <div>公告</div>
+            <div>
+                <a href="/info/articlerecommendation-3-1.html?isNotice">更多 ></a>
+            </div>
+        </div>
+        <div class="notice-content" v-cloak>
+            <ul class="notice-content-list">
+                <li class="notice-content-li" v-for="(list ,index) in newsList" :key="index" @click="hanldDetails(list.id)">
+                    {{ list.title }}
+                </li>
+            </ul>
         </div>
     </div>
     <!--侧边栏Ross广告图-->
@@ -130,10 +231,14 @@
     </div>
 </div>
 
+<template th:replace="article/components/article-drawer"></template>
 <template th:replace="article/components/article-footer"></template>
 <template th:replace="components/foot-link"></template>
 <script charset="utf-8" type="text/javascript" src="/lib/datapicker/moment-2.29.min.js"></script>
 <script charset="utf-8" type="text/javascript" src="/lib/datapicker/jquery.daterangepicker.js"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/lib/element-ui/element-ui.min.js}"></script>
+<script type="text/javascript" src="/lib/element-ui/element-ui.min.js"></script>
+<script type="text/javascript" src="/lib/element-ui/vant.min.js"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/ajax.service.js}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/product.service.js}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/article/common.js(v=${version})}"></script>

+ 153 - 0
src/main/resources/templates/article/recommendation.html

@@ -0,0 +1,153 @@
+<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>信息平台</title>
+    <link th:href="@{/css/article/recommendation.css(v=${version})}" rel="stylesheet" type="text/css">
+    <template th:replace="article/components/article-link"></template>
+    <template th:replace="components/analysis"></template>
+</head>
+
+<body>
+    <!--导航栏-->
+    <template th:replace="article/components/article-header"></template>
+
+    <div class="mainContent">
+        <div id="Recommendation" v-cloak>
+            <div class="content clearfix" v-if="state == 1">
+                <div class="mainData">
+                    <div class="selectList">
+                        <div class="select-title">
+                            <div>精选推荐</div>
+                        </div>
+                        <div class="select-content">
+                            <div class="select-content-item" v-for="item in articlerecommendationData">
+                                <div class="img-left" @click="handleTramp(item.id)">
+                                    <img style="width: 100%;height: 100%;" :src="item.image" />
+                                </div>
+                                <div class="item-content">
+                                    <div>
+                                        <div class="item-1" v-html="item.title" @click="handleTramp(item.id)"></div>
+                                        <div class="item-2" v-text="filterTab(item.content)"></div>
+                                        <div class="item-3">
+                                            <div class="label-icon icon"></div>
+                                            <template v-for="(i, o) in filterArr(item.label)">
+                                                <span class="split" v-if="o !== 0">|</span>
+                                                <span>{{i}}</span>
+                                            </template>
+                                        </div>
+                                    </div>
+                                    <div class="item-4">
+                                        <div class="group">
+                                            <div class="label-icon-1 icon"></div>
+                                            <div class="label-text">{{ item.pv }}</div>
+                                        </div>
+                                        <div class="group">
+                                            <div class="label-icon-2 icon"></div>
+                                            <div class="label-text">{{ item.publisher }}</div>
+                                        </div>
+                                        <div class="group">
+                                            <div class="label-icon-3 icon"></div>
+                                            <div class="label-text">{{ item.publishDate | filterDate }}</div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                        <div v-if="!isPC && noMore && stateObj.hasNextPage" class="more" @click="handleMore(params.num*1+1)">
+                            <div>查看更多</div>
+                            <img src="">
+                        </div>
+                    </div>
+
+                    <div class="pageWrap clear" v-if="isPC && stateObj.totalRecord > 0">
+                        <a class="prev" :href="'/info/articlerecommendation-1-' + (stateObj.pageNum - 1) + '.html?isSelected'" v-if="stateObj.hasPreviousPage"></a>
+                        <template v-for="item in stateObj.totalPage">
+                            <a :href="'/info/articlerecommendation-1-' + item + '.html?isSelected'" v-text="item"></a>
+                        </template>
+                        <a class="next" v-if="stateObj.hasNextPage" :href="'/info/articlerecommendation-1-' + (stateObj.pageNum + 1) + '.html?isSelected'"></a>
+                        <span>共<b v-text="stateObj.totalPage"></b>页</span>
+                        <span>跳至</span>
+                        <input v-model="pageInput" />
+                        <span>页</span>&nbsp;
+                        <a class="btn" href="javascript:void(0)" @click="changeLink">点击跳转</a>
+                    </div>
+                </div>
+                <!--侧边栏Ross广告图-->
+<!--                <div v-if="isPC && isRossShow" class="article-right-ross" :class="isRossShow ? 'show' : 'none'">-->
+<!--                    <a href="/supplier-1378.html" v-if="isPC"><img src="/img/ross/ross-image@1x.jpg" alt="深圳艾斯佰丽生物科技有限公司"></a>-->
+<!--                </div>-->
+            </div>
+            <div class="infomationlist" v-else>
+                <div class="title" v-if="state == 2">
+                    <div>所有公告</div>
+                </div>
+                <div class="list-mainData">
+                    <ul v-if="state == 2">
+                        <li class="item" v-for="item in listData" :key="item.id" @click="handleTramp(item.id)">
+                            <div>{{item.title}}</div>
+                            <div>{{item.creationtime}}</div>
+                        </li>
+                    </ul>
+                    <ul v-else>
+                        <li v-for="item in articlerecommendationData">
+                            <a class="info-item" @click="handleFileUrl(item.productId)">
+                                <div>
+                                    <img src="/img/article/PC--pdf.png" v-if="/\.pdf/.test(item.fileName)">
+                                    <img src="/img/info/PC-doc.png" v-else-if="/\.doc/.test(item.fileName)">
+                                    <img src="/img/info/PC-ppt.png" v-else>
+                                </div>
+                                <div v-html="item.fileName"></div>
+                            </a>
+                        </li>
+                    </ul>
+                    <div class="pageWrap clear" v-if="isPC && state !== 2">
+                        <a class="prev" :href="'/info/articlerecommendation-0-' + (stateObj.pageNum - 1) + '.html?isDocument'" v-if="stateObj.hasPreviousPage"></a>
+                        <template v-for="n in stateObj.totalPage">
+                            <a v-if="n" :class="{'on':(n==params.num)}" :href="'/info/articlerecommendation-0-' + n + '.html?isDocument'" v-text="n"></a>
+                            <span v-else>···</span>
+                        </template>
+                        <a v-if="stateObj.hasNextPage" class="next" :href="'/info/articlerecommendation-0-' + (stateObj.pageNum + 1) + '.html?isDocument'"></a>
+                        <span>共<b v-text="stateObj.pageNum"></b>页</span>
+                        <span>跳至</span>
+                        <input v-model="pageInput" />
+                        <span>页</span>&nbsp;
+                        <a class="btn" href="javascript:void(0)" @click="changeLink">点击跳转</a>
+                    </div>
+                    <div v-if="isPC && pageTotal>1 && state == 2" class="pageWrap clear">
+                        <a v-if="params.num>1" class="prev" :href="paginationUrl(params.num*1-1)"></a>
+                        <template v-for="n in showPageBtn">
+                            <a v-if="n" :class="{'on':(n==params.num)}" :href="paginationUrl(n)" v-text="n"></a>
+                            <span v-else>···</span>
+                        </template>
+                        <a v-if="params.num<pageTotal" class="next" :href="paginationUrl(params.num*1+1)"></a>
+                        <span>共<b v-text="pageTotal>1?pageTotal:1"></b>页</span>
+                        <span>跳至</span>
+                        <input v-model="pageInput" @blur="checkNum()" />
+                        <span>页</span>&nbsp;
+                        <a class="btn" :href="paginationUrl(pageInput)">点击跳转</a>
+                    </div>
+                    <div v-if="!isPC && noMore" class="more" @click="handleMore(params.num*1+1)">查看更多</div>
+                </div>
+            </div>
+        </div>
+
+        <!--侧边栏-->
+        <template th:replace="article/components/article-sidebar"></template>
+    </div>
+
+    <template th:replace="article/components/article-drawer"></template>
+    <template th:replace="article/components/article-footer"></template>
+    <template th:replace="components/foot-link"></template>
+    <script charset="utf-8" type="text/javascript" src="/lib/datapicker/moment-2.29.min.js"></script>
+    <script charset="utf-8" type="text/javascript" src="/lib/datapicker/jquery.daterangepicker.js"></script>
+    <script charset="utf-8" type="text/javascript" th:src="@{/lib/element-ui/element-ui.min.js}"></script>
+    <script type="text/javascript" src="/lib/element-ui/vant.min.js"></script>
+    <script charset="utf-8" type="text/javascript" th:src="@{/js/common/ajax.service.js}"></script>
+    <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/product.service.js}"></script>
+    <script charset="utf-8" type="text/javascript" th:src="@{/js/article/common.js(v=${version})}"></script>
+    <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/utils.service.js}"></script>
+    <script charset="utf-8" type="text/javascript" th:src="@{/js/article/list.js(v=${version})}"></script>
+    <script charset="utf-8" type="text/javascript" th:src="@{/js/article/recommendation.js(v=${version})}"></script>
+</body>
+
+</html>

+ 3 - 2
src/main/resources/templates/components/footer.html

@@ -89,8 +89,9 @@
             </div>
         </div>
     </div>
-    <div id="supplierLogin" @click="goSupplierLink">
-        <img src="https://static.caimei365.com/app/img/icon/supplier_logo.png" class="logo"/>
+    <div id="supplierLogin" v-if="isShowIcon">
+        <img src="https://static.caimei365.com/app/img/icon/supplier_logo.png" class="logo" @click="goSupplierLink"/>
+            <img class="close" @click="isShowIcon = false" src="https://static.caimei365.com/app/img/supplier-login/close_icon.png">
     </div>
     <div id="scrollTop">
         <div class="item">

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

@@ -89,8 +89,13 @@
 <template th:replace="components/footer"></template>
 <template th:replace="components/foot-link"></template>
 <script type="text/javascript">
+    const matchInfo = window.location.pathname.indexOf("info") !== -1
     if(!($('#coreServer').val() && $('#coreServer').val().length>0)){
-        window.location.href = '/404.html';
+        if (matchInfo) {
+            window.location.href = '/info/404.html'
+        } else {
+            window.location.href = '/404.html';
+        }
     }
 </script>
 </body>

+ 0 - 1
src/main/resources/templates/index.html

@@ -12,7 +12,6 @@
     <link th:href="@{/css/index/index_new.h5.css(v=${version})}" media="screen and (max-width:768px)" rel="stylesheet" type="text/css">
     <link th:href="@{/css/index/index_new.pc.css(v=${version})}" media="screen and (min-width:768px)" rel="stylesheet" type="text/css">
     <link th:href="@{/lib/css/swiper-bundle.css(v=${version})}" media="screen and (min-width:768px)" rel="stylesheet" type="text/css">
-    <link rel="stylesheet" href="https://unpkg.com/vant@2.12/lib/index.css" />
     <link rel="stylesheet" href="https://unpkg.zhimg.com/element-ui@2.15.13/lib/theme-chalk/index.css" />
     <link rel="stylesheet" href="/lib/element-ui/element-ui-min.css" />
     <template th:replace="components/analysis"></template>

+ 5 - 4
src/main/resources/templates/product/detail.html

@@ -657,7 +657,7 @@
                                     <div class="cm-detail  clear cm-images" :class="{'cm-one':item.imageNum === 1,'cm-two':item.imageNum === 2,'cm-list':item.imageNum>2   }">
                                         <!--可查看图片列表-->
                                         <template v-if="item.imageList">
-                                            <div class="cm-img-box" @click="handleShowImage(i, item.imageList)" v-for="(image, i) in formatImage(item.imageList)" :key="i">
+                                            <div class="cm-img-box" @click="handleShowImage(i, item.imageList, item)" v-for="(image, i) in formatImage(item.imageList)" :key="i">
                                                 <img :src="image.imageUrl"/>
                                             </div>
                                         </template>
@@ -674,7 +674,7 @@
                     </div>
                     <!-- 视频区域 -->
                     <div class="cm-category">
-                        <div class="cm-category-title">视频资料</div>
+                        <div class="cm-category-title" id="category-import">视频资料</div>
                         <div class="cm-content">
                             <div class="cm-none" v-if="videoArchiveList.length<=0">暂无相关资料</div>
                             <template v-else>
@@ -683,7 +683,7 @@
                                     <div class="cm-time">{{ item.addTime | formatTime }}</div>
                                     <div class="cm-detail clear">
                                         <div class="cm-video-box">
-                                            <span class="cm-player-btn" @click="handleShowPlayer(item.fileUrl, 'video'+index)"></span>
+                                            <span class="cm-player-btn" @click="handleShowPlayer(item.fileUrl, 'video'+index, item)"></span>
                                             <video :src="item.fileUrl && item.fileUrl" :class="'video'+index" :poster="item.fileUrl ? '' : videoCover ">
                                                 您的浏览器不支持Video标签。
                                             </video>
@@ -717,7 +717,8 @@
                                         <div class="cm-title" v-html="item.title"></div>
                                         <div class="cm-row clear">
                                             <span class="cm-time">{{ item.addTime | formatTime }}</span>
-                                            <span class="cm-view" @click="handlePreviewOffice(item)">预览文件</span>
+                                            <span class="cm-view" v-if="permission === 0" @click="handlePreviewOffice(item)">预览文件</span>
+                                            <span class="cm-view" v-else  @click="fileContentPreview(item)">预览文件</span>
                                         </div>
                                     </div>
                                 </div>

+ 33 - 0
src/main/resources/templates/product/filePreview.html

@@ -0,0 +1,33 @@
+<!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>
+  <meta charset="UTF-8">
+  <meta name="referrer" content="no-referrer">
+  <title>文件预览</title>
+  <template th:replace="components/head-link"></template>
+  <template th:replace="components/analysis"></template>
+  <link th:href="@{/css/product/filePreview.css(v=${version})}" rel="stylesheet" type="text/css">
+</head>
+<body>
+<!-- 引用头部 -->
+<template th:replace="components/header"></template>
+<div id="file" v-cloak class="afterHidden">
+  <div v-html="fileInfo.content || '无文件资源'">
+    文件预览
+  </div>
+  <span class="more" @click="readMore">
+    查看更多~
+  </span>
+</div>
+
+<!-- 引入底部 -->
+<template th:replace="components/footer"></template>
+<template th:replace="components/foot-link"></template>
+<script src="/lib/datapicker/moment-2.29.min.js"></script>
+<script charset="utf-8" type="text/javascript" src="/lib/magnifier.js"></script>
+<script charset="utf-8" type="text/javascript" src="/lib/viewer.min.js"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/document/beautyArchiveDetailMixin.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/product/filePreview.js(v=${version})}"></script>
+</body>
+</html>

+ 17 - 8
src/main/resources/templates/supplier-center/article/article-edit.html

@@ -73,7 +73,7 @@
                                         v-model="formData.labelIds"
                                         multiple
                                         placeholder="请选择标签"
-                                        class="max-width"
+                                        class="tab-width"
                                         :multiple-limit="6"
                                         clearable
                                         filterable
@@ -108,13 +108,22 @@
                                 <div class="mint-message" v-if="formValidate.articleContent">{{formValidate.articleContent}}</div>
                             </el-form-item>
                             <!-- 文章分类 -->
-                            <el-form-item label="文章分类" prop="typeId">
-                                <el-select v-model="formData.typeId" class="max-width" @change="handlerTypeId" @click.native="onFocused">
-                                    <template v-for="(typeInfo, index) in articleTypeList">
-                                        <el-option :label="typeInfo.typeName" :value="typeInfo.typeId" :key="typeInfo.typeId"></el-option>
-                                    </template>
-                                </el-select>
-                            </el-form-item>
+                            <div class="text-tab">
+                                <el-form-item label="文章分类" prop="typeId">
+                                    <el-select v-model="formData.typeId" class="max-width" @change="handlerTypeId" @click.native="onFocused">
+                                        <template v-for="(typeInfo, index) in articleTypeList">
+                                            <el-option :label="typeInfo.typeName" :value="typeInfo.typeId" :key="typeInfo.typeId"></el-option>
+                                        </template>
+                                    </el-select>
+                                </el-form-item>
+                                <el-form-item label="" prop="childId" class="tab-change" v-if="articleChildren.length > 0">
+                                    <el-select v-model="formData.childId" class="max-width" @change="handlerChildId" @click.native="onFocused">
+                                        <template v-for="(typeInfo, index) in articleChildren">
+                                            <el-option :label="typeInfo.typeName" :value="typeInfo.typeId" :key="typeInfo.typeId"></el-option>
+                                        </template>
+                                    </el-select>
+                                </el-form-item>
+                            </div>
                             <!-- 引导图 -->
                             <el-form-item label="引导图" prop="guidanceImage">
                                 <el-input v-model="formData.guidanceImage" placeholder="引导图" v-show="false"></el-input>

+ 21 - 12
src/main/resources/templates/supplier-center/article/article-list.html

@@ -47,20 +47,29 @@
                             <el-input class="control" v-model="listQuery.title" placeholder="请输入文章标题" clearable></el-input>
                         </div>
                         <!--发布人-->
-                        <div class="filter-control">
-                            <span class="label">发布人:</span>
-                            <el-input class="control" v-model="listQuery.publisher" placeholder="请输入文章发布人" clearable></el-input>
-                        </div>
+<!--                        <div class="filter-control">-->
+<!--                            <span class="label">发布人:</span>-->
+<!--                            <el-input class="control" v-model="listQuery.publisher" placeholder="请输入文章发布人" clearable></el-input>-->
+<!--                        </div>-->
                         <!--文章分类-->
                         <div class="filter-control">
                             <span class="label">文章分类:</span>
-                            <el-select v-model="listQuery.typeId" @change="getArticleList" clearable>
+                            <el-select v-model="listQuery.typeId" @change="getArticleList($event, true)" clearable>
                                 <el-option label="全部" value=""></el-option>
                                 <template v-for="(typeInfo, index) in articleTypeList">
                                     <el-option :key="index" :label="typeInfo.typeName" :value="typeInfo.typeId"></el-option>
                                 </template>
                             </el-select>
                         </div>
+                        <div class="filter-control" v-if="articleTypeChildren.length > 0">
+                            <span class="label">二级分类:</span>
+                            <el-select v-model="listQuery.childId" @change="getArticleChildren" clearable>
+                                <el-option label="全部" value=""></el-option>
+                                <template v-for="(typeInfo, index) in articleTypeChildren">
+                                    <el-option :key="index" :label="typeInfo.typeName" :value="typeInfo.typeId"></el-option>
+                                </template>
+                            </el-select>
+                        </div>
                         <!--审核状态-->
                         <div class="filter-control">
                             <span class="label">审核状态:</span>
@@ -110,15 +119,15 @@
                             <th>审核状态</th>
                             <th>上线状态</th>
                             <th>发布时间</th>
-                            <th>发布人</th>
-                            <th>添加时间</th>
+<!--                            <th>发布人</th>-->
                             <th>状态</th>
                             <th>操作</th>
                         </tr>
                         <template v-for="(articleInfo, index) in articleList"  >
                             <tr :key="index" class="tr-row">
                                 <td v-text="articleInfo.articleId"></td>
-                                <td v-text="articleInfo.typeName"></td>
+                                <td v-if="articleInfo.parentId === '0'">{{ articleInfo.typeName }}</td>
+                                <td v-else>{{ findParent(articleInfo.parentId) + `/${articleInfo.typeName}` }}</td>
                                 <td>
                                     <img class="cover" :src="articleInfo.guidanceImage" :alt="articleInfo.title"/></td>
                                 <td class="title">
@@ -140,10 +149,10 @@
                                 <td class="time">
                                     <div class="time">{{ articleInfo.publishDate | formatDate }}</div>
                                 </td>
-                                <td v-html="articleInfo.publisher"></td>
-                                <td class="time" v-if="articleInfo.createDate">
-                                    <div class="time">{{ articleInfo.createDate | formatDate}}</div>
-                                </td>
+<!--                                <td v-html="articleInfo.publisher"></td>-->
+<!--                                <td class="time" v-if="articleInfo.createDate">-->
+<!--                                    <div class="time">{{ articleInfo.createDate | formatDate}}</div>-->
+<!--                                </td>-->
                                 <td>
                                     <span class="state primary" v-if="articleInfo.status === 1">已发布</span>
                                     <span class="state danger" v-else>存草稿</span>

+ 16 - 16
src/main/resources/templates/supplier-center/encyclopedia/preview.html

@@ -91,7 +91,7 @@
           <div class="line"></div>
         </div>
         <ul class="bk-literature-list">
-          <div v-for="item,index in previewFormData.referenceListStr" :key="item.id">
+          <div v-for="(item,index) in previewFormData.referenceListStr" :key="item.id">
             <li v-if="item.referenceType === 1">
               [<em>{{index + 1}}</em>]
               <i></i>
@@ -99,21 +99,21 @@
               <span>{{item.websiteName}}</span>
               <span v-if="item.acitationTimeStr">[引用日期:<span>{{item.acitationTimeStr}}</span>]</span>
             </li>
-<!--            <li v-if="item.referenceType === 2">-->
-<!--              [<em>{{index + 1}}</em>]-->
-<!--              <i></i>-->
-<!--              <span>{{item.author}}</span>-->
-<!--              <span>{{{item.workName}}</span>:-->
-<!--              <span>{{item.press}}</span>,-->
-<!--              <span>{{item.publicationYearStr}}</span>-->
-<!--            </li>-->
-<!--            <li v-if="item.referenceType === 3">-->
-<!--              [<em>{{index + 1}}</em>]-->
-<!--              <i></i>-->
-<!--              <span>{{item.referenceDescription}}</span>-->
-<!--              <span>{{item.imageDescription}}</span>-->
-<!--              <a class="image" :href="item.imageUrl" target="_blank">{{item.articleName}}</a>-->
-<!--            </li>-->
+            <li v-if="item.referenceType === 2">
+              [<em>{{index + 1}}</em>]
+              <i></i>
+              <span>{{item.author}}</span>
+              <span>{{item.workName}}</span>:
+              <span>{{item.press}}</span>,
+              <span>{{item.publicationYearStr}}</span>
+            </li>
+            <li v-if="item.referenceType === 3">
+              [<em>{{index + 1}}</em>]
+              <i></i>
+              <span>{{item.referenceDescription}}</span>
+              <span>{{item.imageDescription}}</span>
+              <a class="image" :href="item.imageUrl" target="_blank">{{item.articleName}}</a>
+            </li>
           </div>
         </ul>
       </div>

+ 20 - 19
src/main/resources/templates/supplier_login/index.html

@@ -9,17 +9,18 @@
     <meta name="format-detection" content="telephone=yes" />
     <title>美业参谋</title>
     <link rel="canonical" href="https://www.caimei365.com/" />
-    <template th:replace="components/head-link"></template>
+<!--    <template th:replace="components/head-link"></template>-->
+    <link th:href="@{/css/base/base.h5.css(v=${version})}" media="screen and (max-width:768px)" rel="stylesheet" type="text/css">
+    <link th:href="@{/css/base/base.pc.css(v=${version})}" media="screen and (min-width:768px)" rel="stylesheet" type="text/css">
+    <link th:href="@{/css/base/init.css(v=${version})}" rel="stylesheet" type="text/css">
+    <!--element ui 样式表-->
+    <link rel="stylesheet" href="/lib/element-ui/index.css" />
+    <link rel="stylesheet" href="/lib/element-ui/element-index.css" />
     <link th:href="@{/css/base/floor.css(v=${version})}" rel="stylesheet" type="text/css">
     <link th:href="@{/css/index/index_new.h5.css(v=${version})}" media="screen and (max-width:768px)" rel="stylesheet" type="text/css">
     <link th:href="@{/css/index/index_new.pc.css(v=${version})}" media="screen and (min-width:768px)" rel="stylesheet" type="text/css">
     <link th:href="@{/css/supplier-login/login.css(v=${version})}" media="screen and (min-width:768px)" rel="stylesheet" type="text/css">
     <link th:href="@{/css/supplier-login/login-h5.css(v=${version})}" media="screen and (max-width:768px)" rel="stylesheet" type="text/css">
-    <!--element ui 样式表-->
-    <link rel="stylesheet" href="https://unpkg.zhimg.com/element-ui@2.15.13/lib/theme-chalk/index.css" />
-    <link rel="stylesheet" href="/lib/element-ui/element-ui-min.css" />
-    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" />
-    <link rel="stylesheet" href="https://unpkg.com/vant@2.12/lib/index.css" />
 </head>
 
 <body>
@@ -377,19 +378,19 @@
                     </el-carousel>
                     <div class="nextChange"  @click="prePageCar">></div>
                 </div>
-                <div class="H5_success" v-else>
-                    <van-swipe :loop="false" :width="successSideWidth">
-                        <van-swipe-item v-for="item in successList" :key="item.id" v-if="item.appStatus == '1'">
-                            <div class="innerSuccess">
-                                <div class="title">{{item.title}}</div>
-                                <div class="content" v-html="item.content"></div>
-                                <img class="success_img" :src="item.headAppBanner" />
-                            </div>
-                        </van-swipe-item>
-                    </van-swipe>
-                </div>
                 <div v-if="isPC" id="positionTab"></div>
             </div>
+            <div class="H5_success" v-else>
+                <van-swipe :loop="false" :width="successSideWidth">
+                    <van-swipe-item v-for="item in successList" :key="item.id" v-if="item.appStatus == '1'">
+                        <div class="innerSuccess">
+                            <div class="title">{{item.title}}</div>
+                            <div class="content" v-html="item.content"></div>
+                            <img class="success_img" :src="item.headAppBanner" />
+                        </div>
+                    </van-swipe-item>
+                </van-swipe>
+            </div>
         </div>
         <div id="fivePage" class="page section">
             <div class="Title" style="color: white">
@@ -575,9 +576,9 @@
 <!-- 底部区域 end -->
 <template th:replace="components/footer"></template>
 <template th:replace="components/foot-link"></template>
-<script src="https://unpkg.com/vant@2.12/lib/vant.min.js"></script>
-<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/supplier.service.js(v=${version})}"></script>
 <script type="text/javascript" src="/lib/element-ui/element-ui.min.js"></script>
+<script type="text/javascript" src="/lib/element-ui/vant.min.js"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/supplier.service.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/supplier-login/login.js(v=${version})}"></script>
 </body>
 </html>

+ 1 - 2
src/main/resources/templates/supplier_login/text_info.html

@@ -85,9 +85,8 @@
 
 
     <script charset="utf-8" type="text/javascript" src="/lib/vue2.6.12.min.js"></script>
-    <script src="https://unpkg.com/vant@2.12/lib/vant.min.js"></script>
-    <!--<script charset="utf-8" type="text/javascript" src="/lib/lazyload.js"></script>-->
     <script type="text/javascript" src="/lib/element-ui/element-ui.min.js"></script>
+    <script type="text/javascript" src="/lib/element-ui/vant.min.js"></script>
     <script charset="utf-8" type="text/javascript" th:src="@{/js/supplier-login/text_info.js(v=${version})}"></script>
 </body>
 

部分文件因文件數量過多而無法顯示