Browse Source

标签库/后台跳转

zhijiezhao 2 years ago
parent
commit
007d54af95
28 changed files with 1409 additions and 727 deletions
  1. 5 0
      pom.xml
  2. 9 0
      src/main/java/com/caimei/modules/archive/entity/CmProductArchive.java
  3. 46 53
      src/main/java/com/caimei/modules/archive/web/CmProductArchiveController.java
  4. 1 1
      src/main/java/com/caimei/modules/basesetting/dao/KeywordDao.java
  5. 5 10
      src/main/java/com/caimei/modules/info/service/InfoService.java
  6. 1 5
      src/main/java/com/caimei/modules/info/web/InfoController.java
  7. 24 0
      src/main/java/com/caimei/modules/product/entity/Product.java
  8. 2 0
      src/main/java/com/caimei/modules/product/entity/SearchFrequencyVo.java
  9. 15 0
      src/main/java/com/caimei/modules/product/service/ProductService.java
  10. 16 0
      src/main/java/com/thinkgem/jeesite/modules/sys/constant/ConstantKey.java
  11. 3 0
      src/main/java/com/thinkgem/jeesite/modules/sys/dao/UserDao.java
  12. 40 0
      src/main/java/com/thinkgem/jeesite/modules/sys/service/LoginService.java
  13. 12 1
      src/main/java/com/thinkgem/jeesite/modules/sys/web/LoginController.java
  14. 3 3
      src/main/resources/config/dev/caimei.properties
  15. 8 4
      src/main/resources/mappings/modules/archive/CmProductArchiveMapper.xml
  16. 2 2
      src/main/resources/mappings/modules/basesetting/KeyWordMapper.xml
  17. 11 3
      src/main/resources/mappings/modules/info/InfoMapper.xml
  18. 8 3
      src/main/resources/mappings/modules/product/ProductMapper.xml
  19. 2 1
      src/main/resources/mappings/modules/product/ProductNewMapper.xml
  20. 1 1
      src/main/resources/mappings/modules/product/SearchFrequencyMapper.xml
  21. 14 1
      src/main/resources/mappings/modules/sys/UserDao.xml
  22. 366 320
      src/main/webapp/WEB-INF/views/modules/archive/cmProductArchiveForm.jsp
  23. 3 16
      src/main/webapp/WEB-INF/views/modules/info/infoForm.jsp
  24. 28 0
      src/main/webapp/WEB-INF/views/modules/product-new/productEdit.jsp
  25. 321 303
      src/main/webapp/WEB-INF/views/modules/product/keywordFrequency.jsp
  26. 458 0
      src/main/webapp/static/bootstrap-select/css/bootstrap-select.css
  27. 0 0
      src/main/webapp/static/bootstrap-select/css/bootstrap-select.css.map
  28. 5 0
      src/main/webapp/static/bootstrap-select/css/bootstrap-select.min.css

+ 5 - 0
pom.xml

@@ -232,6 +232,11 @@
 			<scope>runtime</scope>
 			<scope>runtime</scope>
 		</dependency>
 		</dependency>
 
 
+		<dependency>
+			<groupId>io.jsonwebtoken</groupId>
+			<artifactId>jjwt</artifactId>
+			<version>0.9.1</version>
+		</dependency>
 		<!-- PERSISTENCE end -->
 		<!-- PERSISTENCE end -->
 
 
 		<!-- WEB begin -->
 		<!-- WEB begin -->

+ 9 - 0
src/main/java/com/caimei/modules/archive/entity/CmProductArchive.java

@@ -22,8 +22,17 @@ public class CmProductArchive extends DataEntity<CmProductArchive> {
 	private Integer productType;		// 商品属性:1产品,2仪器
 	private Integer productType;		// 商品属性:1产品,2仪器
 	private Integer productClassify;		// 商品分类:1生美,2医美
 	private Integer productClassify;		// 商品分类:1生美,2医美
 	private Date addTime;		// 添加时间
 	private Date addTime;		// 添加时间
+	private String labelIds;
     private String seoKeyword;  //关键词
     private String seoKeyword;  //关键词
 
 
+	public String getLabelIds() {
+		return labelIds;
+	}
+
+	public void setLabelIds(String labelIds) {
+		this.labelIds = labelIds;
+	}
+
 	public void setSeoKeyword(String seoKeyword) {
 	public void setSeoKeyword(String seoKeyword) {
 		this.seoKeyword = seoKeyword;
 		this.seoKeyword = seoKeyword;
 	}
 	}

+ 46 - 53
src/main/java/com/caimei/modules/archive/web/CmProductArchiveController.java

@@ -29,6 +29,7 @@ import java.util.List;
 
 
 /**
 /**
  * 商品资料Controller
  * 商品资料Controller
+ *
  * @author Aslee
  * @author Aslee
  * @version 2021-09-03
  * @version 2021-09-03
  */
  */
@@ -36,65 +37,57 @@ import java.util.List;
 @RequestMapping(value = "${adminPath}/archive/cmProductArchive")
 @RequestMapping(value = "${adminPath}/archive/cmProductArchive")
 public class CmProductArchiveController extends BaseController {
 public class CmProductArchiveController extends BaseController {
 
 
-	@Autowired
-	private CmProductArchiveService cmProductArchiveService;
+    @Autowired
+    private CmProductArchiveService cmProductArchiveService;
 
 
-	@Autowired
-	private RedisService redisService;
+    @Autowired
+    private KeywordFrequencyDao keywordFrequencyDao;
 
 
-	@Autowired
-	private KeywordFrequencyDao keywordFrequencyDao;
+    @ModelAttribute
+    public CmProductArchive get(@RequestParam(required = false) String id) {
+        CmProductArchive entity = null;
+        if (StringUtils.isNotBlank(id)) {
+            entity = cmProductArchiveService.get(id);
+        }
+        if (entity == null) {
+            entity = new CmProductArchive();
+        }
+        return entity;
+    }
 
 
-	@ModelAttribute
-	public CmProductArchive get(@RequestParam(required=false) String id) {
-		CmProductArchive entity = null;
-		if (StringUtils.isNotBlank(id)){
-			entity = cmProductArchiveService.get(id);
-		}
-		if (entity == null){
-			entity = new CmProductArchive();
-		}
-		return entity;
-	}
-	
-	@RequestMapping(value = {"list", ""})
-	public String list(CmProductArchive cmProductArchive, HttpServletRequest request, HttpServletResponse response, Model model) {
-		Page<CmProductArchive> page = cmProductArchiveService.findPage(new Page<CmProductArchive>(request, response), cmProductArchive); 
-		model.addAttribute("page", page);
-		return "modules/archive/cmProductArchiveList";
-	}
+    @RequestMapping(value = {"list", ""})
+    public String list(CmProductArchive cmProductArchive, HttpServletRequest request, HttpServletResponse response, Model model) {
+        Page<CmProductArchive> page = cmProductArchiveService.findPage(new Page<CmProductArchive>(request, response), cmProductArchive);
+        model.addAttribute("page", page);
+        return "modules/archive/cmProductArchiveList";
+    }
 
 
-	@RequestMapping(value = "form")
-	public String form(CmProductArchive cmProductArchive, Model model) {
-		//先从reids中获取keyword值,不存在时在查询数据库
-		List<SearchFrequencyVo> searchFrequencyVos=new ArrayList<>();
-		if(redisService.getExpireTime("keyword")>0){
-			searchFrequencyVos= JSONArray.parseArray(redisService.get("keyword").toString(),SearchFrequencyVo.class);
-		}else{
-			searchFrequencyVos = keywordFrequencyDao.getKeywordList();
-		}
-		model.addAttribute("cmProductArchive", cmProductArchive);
-		model.addAttribute("SearchFrequencyVo",searchFrequencyVos);
+    @RequestMapping(value = "form")
+    public String form(CmProductArchive cmProductArchive, Model model) {
+        //先从reids中获取keyword值,不存在时在查询数据库
+        List<SearchFrequencyVo> searchFrequencyVos = new ArrayList<>();
+        searchFrequencyVos = keywordFrequencyDao.getKeywordList();
+        model.addAttribute("cmProductArchive", cmProductArchive);
+        model.addAttribute("SearchFrequencyVo", searchFrequencyVos);
+        return "modules/archive/cmProductArchiveForm";
+    }
 
 
-		return "modules/archive/cmProductArchiveForm";
-	}
+    @RequestMapping(value = "save")
+    public String save(CmProductArchive cmProductArchive, Model model, RedirectAttributes redirectAttributes) {
+        if (!beanValidator(model, cmProductArchive)) {
+            return form(cmProductArchive, model);
+        }
+        cmProductArchiveService.save(cmProductArchive);
+        addMessage(redirectAttributes, "保存商品资料成功");
+        return "redirect:" + Global.getAdminPath() + "/archive/cmProductArchive/?repage";
+    }
 
 
-	@RequestMapping(value = "save")
-	public String save(CmProductArchive cmProductArchive, Model model, RedirectAttributes redirectAttributes) {
-		if (!beanValidator(model, cmProductArchive)){
-			return form(cmProductArchive, model);
-		}
-		cmProductArchiveService.save(cmProductArchive);
-		addMessage(redirectAttributes, "保存商品资料成功");
-		return "redirect:"+Global.getAdminPath()+"/archive/cmProductArchive/?repage";
-	}
-	
-	@RequestMapping(value = "delete")
-	public String delete(CmProductArchive cmProductArchive, RedirectAttributes redirectAttributes) {
-		cmProductArchiveService.delete(cmProductArchive);
-		addMessage(redirectAttributes, "删除商品资料成功");
-		return "redirect:"+Global.getAdminPath()+"/archive/cmProductArchive/?repage";
-	}
+    @RequestMapping(value = "delete")
+    public String delete(CmProductArchive cmProductArchive, RedirectAttributes redirectAttributes) {
+        cmProductArchiveService.delete(cmProductArchive);
+        addMessage(redirectAttributes, "删除商品资料成功");
+        return "redirect:" + Global.getAdminPath() + "/archive/cmProductArchive/?repage";
+    }
 
 
     @RequestMapping(value = "findProductPage")
     @RequestMapping(value = "findProductPage")
     public String findProductPage(Product product, Model model, HttpServletRequest request, HttpServletResponse response) {
     public String findProductPage(Product product, Model model, HttpServletRequest request, HttpServletResponse response) {

+ 1 - 1
src/main/java/com/caimei/modules/basesetting/dao/KeywordDao.java

@@ -30,5 +30,5 @@ public interface KeywordDao extends CrudDao<Keyword> {
 
 
     void deleteKeyWord(Integer id);
     void deleteKeyWord(Integer id);
 
 
-    String findKeyWordId(String label);
+    String findKeyWordId(String id);
 }
 }

+ 5 - 10
src/main/java/com/caimei/modules/info/service/InfoService.java

@@ -101,23 +101,18 @@ public class InfoService extends CrudService<InfoDao, Info> {
         }
         }
         String photoServer = Global.getConfig("photoServer");//获取文件服务器地址
         String photoServer = Global.getConfig("photoServer");//获取文件服务器地址
         // 标签
         // 标签
-        String[] labels = StringUtils.split(info.getRelatedLabels(), ",");
+        String[] labelIds = StringUtils.split(info.getLabelIds(), ",");
         String labelStr = "";
         String labelStr = "";
-        String labelIds = "";
-        if (null != labels && labels.length > 0) {
-            for (int i = 0; i < labels.length; i++) {
-                labelStr += labels[i];
-                labelIds = keywordDao.findKeyWordId(labels[i]);
+        if (null != labelIds && labelIds.length > 0) {
+            for (int i = 0; i < labelIds.length; i++) {
+                labelStr += keywordDao.findKeyWordId(labelIds[i]);
                 if (i != 5) {
                 if (i != 5) {
                     labelStr += "##";
                     labelStr += "##";
                 }
                 }
-                if (i != labels.length - 1) {
-                    labelIds += ",";
-                }
             }
             }
         }
         }
         info.setRelatedLabels(labelStr);
         info.setRelatedLabels(labelStr);
-        info.setLabelIds(labelIds);
+        info.setLabelIds(info.getLabelIds());
         /**
         /**
          * 富文本内容处理+内置图片上传
          * 富文本内容处理+内置图片上传
          */
          */

+ 1 - 5
src/main/java/com/caimei/modules/info/web/InfoController.java

@@ -146,11 +146,7 @@ public class InfoController extends BaseController {
         List<InfoType> typeList = infoTypeService.findList(infoType);
         List<InfoType> typeList = infoTypeService.findList(infoType);
         //先从reids中获取keyword值,不存在时在查询数据库
         //先从reids中获取keyword值,不存在时在查询数据库
         List<SearchFrequencyVo> searchFrequencyVos = new ArrayList<>();
         List<SearchFrequencyVo> searchFrequencyVos = new ArrayList<>();
-        if (redisService.getExpireTime("keyword") > 0) {
-            searchFrequencyVos = JSONArray.parseArray(redisService.get("keyword").toString(), SearchFrequencyVo.class);
-        } else {
-            searchFrequencyVos = keywordFrequencyDao.getKeywordList();
-        }
+        searchFrequencyVos = keywordFrequencyDao.getKeywordList();
         // 敏感词
         // 敏感词
         String sensitiveWords = infoDao.getSensitiveWords(3);
         String sensitiveWords = infoDao.getSensitiveWords(3);
         model.addAttribute("typeList", typeList);
         model.addAttribute("typeList", typeList);

+ 24 - 0
src/main/java/com/caimei/modules/product/entity/Product.java

@@ -274,6 +274,14 @@ public class Product extends DataEntity<Product> {
      * 证书有效链接
      * 证书有效链接
      */
      */
     public String qualificationLink;
     public String qualificationLink;
+    /**
+     * 关联标签库Ids
+     */
+    private String labelIds;
+    /**
+     * 关联标签库字符串
+     */
+    private String relatedLabels;
 
 
     //子订单ID
     //子订单ID
     private Integer shopOrderID;
     private Integer shopOrderID;
@@ -282,6 +290,22 @@ public class Product extends DataEntity<Product> {
     //税率
     //税率
     private Double taxRate;
     private Double taxRate;
 
 
+    public String getLabelIds() {
+        return labelIds;
+    }
+
+    public void setLabelIds(String labelIds) {
+        this.labelIds = labelIds;
+    }
+
+    public String getRelatedLabels() {
+        return relatedLabels;
+    }
+
+    public void setRelatedLabels(String relatedLabels) {
+        this.relatedLabels = relatedLabels;
+    }
+
     public Integer getSkuId() {
     public Integer getSkuId() {
         return skuId;
         return skuId;
     }
     }

+ 2 - 0
src/main/java/com/caimei/modules/product/entity/SearchFrequencyVo.java

@@ -20,6 +20,8 @@ public class SearchFrequencyVo{
 //     * 接口路径
 //     * 接口路径
 //     */
 //     */
 //    private String  path;
 //    private String  path;
+
+    private Integer id;
     /**
     /**
      * 关键词
      * 关键词
      */
      */

+ 15 - 0
src/main/java/com/caimei/modules/product/service/ProductService.java

@@ -1,6 +1,7 @@
 package com.caimei.modules.product.service;
 package com.caimei.modules.product.service;
 
 
 import com.caimei.dfs.image.beens.ImageUploadInfo;
 import com.caimei.dfs.image.beens.ImageUploadInfo;
+import com.caimei.modules.basesetting.dao.KeywordDao;
 import com.caimei.modules.brand.dao.CmBrandDao;
 import com.caimei.modules.brand.dao.CmBrandDao;
 import com.caimei.modules.brand.entity.CmBrand;
 import com.caimei.modules.brand.entity.CmBrand;
 import com.caimei.modules.common.utils.UploadUtils;
 import com.caimei.modules.common.utils.UploadUtils;
@@ -48,6 +49,8 @@ public class ProductService extends CrudService<ProductDao, Product> {
     private ProductNewDao productNewDao;
     private ProductNewDao productNewDao;
     @Autowired
     @Autowired
     private NewPageFloorDao newPageFloorDao;
     private NewPageFloorDao newPageFloorDao;
+    @Autowired
+    private KeywordDao keywordDao;
 
 
     @Override
     @Override
     public Product get(String id) {
     public Product get(String id) {
@@ -390,6 +393,18 @@ public class ProductService extends CrudService<ProductDao, Product> {
                 logger.error("图片上传错误:" + e.toString(), e);
                 logger.error("图片上传错误:" + e.toString(), e);
             }
             }
         }
         }
+        // 标签
+        String[] labelIds = StringUtils.split(product.getLabelIds(), ",");
+        String labelStr = "";
+        if (null != labelIds && labelIds.length > 0) {
+            for (int i = 0; i < labelIds.length; i++) {
+                labelStr += keywordDao.findKeyWordId(labelIds[i]);
+                if (i != 5) {
+                    labelStr += "##";
+                }
+            }
+        }
+        product.setRelatedLabels(labelStr);
         product.setQualificationImg(res);
         product.setQualificationImg(res);
         if (product.getNewProductType() == 1) {
         if (product.getNewProductType() == 1) {
             product.setShowFlag(1);
             product.setShowFlag(1);

+ 16 - 0
src/main/java/com/thinkgem/jeesite/modules/sys/constant/ConstantKey.java

@@ -0,0 +1,16 @@
+package com.thinkgem.jeesite.modules.sys.constant;
+
+public class ConstantKey {
+    /**
+     * 签名key
+     */
+    public static final String SIGNING_KEY = "Charles@Jwt!&Secret^#";
+    /**
+     * Token存入header的键名
+     */
+    public static final String TOKEN_NAME = "X-Token";
+    /**
+     * Token过期时间(分钟)
+     */
+    public static final Integer TOKEN_EXPIRE = 120;
+}

+ 3 - 0
src/main/java/com/thinkgem/jeesite/modules/sys/dao/UserDao.java

@@ -72,4 +72,7 @@ public interface UserDao extends CrudDao<User> {
 	 */
 	 */
 	public int updateUserInfo(User user);
 	public int updateUserInfo(User user);
 
 
+	User getNewUserId(String id);
+
+	List<String> getNewRoles(String userId);
 }
 }

+ 40 - 0
src/main/java/com/thinkgem/jeesite/modules/sys/service/LoginService.java

@@ -0,0 +1,40 @@
+package com.thinkgem.jeesite.modules.sys.service;
+
+import com.caimei.redis.RedisService;
+import com.caimei.utils.HttpUtils;
+import com.thinkgem.jeesite.common.config.Global;
+import com.thinkgem.jeesite.modules.sys.dao.UserDao;
+import com.thinkgem.jeesite.modules.sys.entity.User;
+import com.thinkgem.jeesite.modules.sys.utils.UserUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.Resource;
+import java.util.Calendar;
+
+import java.util.List;
+
+/**
+ * @author zzj
+ */
+@Service
+@Slf4j
+public class LoginService {
+
+    @Resource
+    private RedisService redisService;
+
+    public String getJumpLink() throws InterruptedException {
+
+        String id = UserUtils.getUser().getId();
+        //拿token
+        String coreServer = Global.getConfig("caimei.core");
+        RestTemplate restTemplate = new RestTemplate();
+        String uri = coreServer + "/tools/new/token?id=" + id;
+        String forObject = restTemplate.getForObject(uri, String.class);
+        log.info("看看---------------------------" + forObject);
+        return forObject;
+    }
+}

+ 12 - 1
src/main/java/com/thinkgem/jeesite/modules/sys/web/LoginController.java

@@ -12,6 +12,7 @@ import javax.servlet.http.HttpSession;
 
 
 import com.caimei.modules.user.dao.MessageCenterDao;
 import com.caimei.modules.user.dao.MessageCenterDao;
 import com.caimei.redis.RedisService;
 import com.caimei.redis.RedisService;
+import com.thinkgem.jeesite.modules.sys.service.LoginService;
 import org.apache.shiro.authz.UnauthorizedException;
 import org.apache.shiro.authz.UnauthorizedException;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.apache.shiro.web.util.WebUtils;
 import org.apache.shiro.web.util.WebUtils;
@@ -34,6 +35,7 @@ import com.thinkgem.jeesite.common.web.BaseController;
 import com.thinkgem.jeesite.modules.sys.security.FormAuthenticationFilter;
 import com.thinkgem.jeesite.modules.sys.security.FormAuthenticationFilter;
 import com.thinkgem.jeesite.modules.sys.security.SystemAuthorizingRealm.Principal;
 import com.thinkgem.jeesite.modules.sys.security.SystemAuthorizingRealm.Principal;
 import com.thinkgem.jeesite.modules.sys.utils.UserUtils;
 import com.thinkgem.jeesite.modules.sys.utils.UserUtils;
+import org.springframework.web.bind.annotation.ResponseBody;
 
 
 /**
 /**
  * 登录Controller
  * 登录Controller
@@ -48,7 +50,16 @@ public class LoginController extends BaseController{
 	@Autowired
 	@Autowired
 	private SessionDAO sessionDAO;
 	private SessionDAO sessionDAO;
 	@Autowired
 	@Autowired
-	MessageCenterDao messageCenterDao;
+	private MessageCenterDao messageCenterDao;
+	@Autowired
+	private LoginService loginService;
+
+	@ResponseBody
+	@RequestMapping(value = "${adminPath}/jump/link")
+	public String getJumpLink() throws InterruptedException {
+		return loginService.getJumpLink();
+	}
+
 	/**
 	/**
 	 * 管理登录
 	 * 管理登录
 	 */
 	 */

+ 3 - 3
src/main/resources/config/dev/caimei.properties

@@ -41,10 +41,10 @@ jdbc.pool.maxActive=20
 jdbc.testSql=SELECT 'x' FROM DUAL
 jdbc.testSql=SELECT 'x' FROM DUAL
 
 
 #redis settings
 #redis settings
-redis.keyPrefix=caimei-manager
-redis.host=192.168.2.100
+#redis.keyPrefix=caimei
+redis.host=47.119.112.46
 redis.port=6379
 redis.port=6379
-redis.pass=123456
+redis.pass=6#xsI%b4o@5c3RoE
 redis.timeout=100000
 redis.timeout=100000
 #\u6700\u5927\u8FDE\u63A5\u6570
 #\u6700\u5927\u8FDE\u63A5\u6570
 redis.pool.maxActive=300
 redis.pool.maxActive=300

+ 8 - 4
src/main/resources/mappings/modules/archive/CmProductArchiveMapper.xml

@@ -12,7 +12,8 @@
 		if(a.productId is not null,ifnull(p.commodityType,a.productType),a.productType) AS "productType",
 		if(a.productId is not null,ifnull(p.commodityType,a.productType),a.productType) AS "productType",
 		a.productClassify AS "productClassify",
 		a.productClassify AS "productClassify",
 		if(a.productId is not null and p.commodityType is null,0,1) AS "existProductType",
 		if(a.productId is not null and p.commodityType is null,0,1) AS "existProductType",
-		a.addTime AS "addTime"
+		a.addTime AS "addTime",
+		a.labelIds
 	</sql>
 	</sql>
 	
 	
 	<sql id="cmProductArchiveJoins">
 	<sql id="cmProductArchiveJoins">
@@ -131,7 +132,8 @@
 			productType,
 			productType,
 			productClassify,
 			productClassify,
 			addTime,
 			addTime,
-			seoKeyword
+			seoKeyword,
+		    labelIds
 		) VALUES (
 		) VALUES (
 			#{productId},
 			#{productId},
 			#{productName},
 			#{productName},
@@ -141,7 +143,8 @@
 			#{productType},
 			#{productType},
 			#{productClassify},
 			#{productClassify},
 			#{addTime},
 			#{addTime},
-		    #{seoKeyword}
+		    #{seoKeyword},
+			#{labelIds}
 		)
 		)
 	</insert>
 	</insert>
 	
 	
@@ -154,7 +157,8 @@
 			archiveLevel = #{archiveLevel},
 			archiveLevel = #{archiveLevel},
 			productType = #{productType},
 			productType = #{productType},
 			productClassify = #{productClassify},
 			productClassify = #{productClassify},
-			seoKeyword= #{seoKeyword}
+			seoKeyword= #{seoKeyword},
+		    labelIds = #{labelIds}
 		WHERE id = #{id}
 		WHERE id = #{id}
 	</update>
 	</update>
 	
 	

+ 2 - 2
src/main/resources/mappings/modules/basesetting/KeyWordMapper.xml

@@ -45,7 +45,7 @@
         FROM keyword
         FROM keyword
     </select>
     </select>
     <select id="findKeyWordId" resultType="java.lang.String">
     <select id="findKeyWordId" resultType="java.lang.String">
-        select id from cm_user_search_frequency
-        where keyword = #{label}
+        select keyword from cm_user_search_frequency
+        where id = #{id}
     </select>
     </select>
 </mapper>
 </mapper>

+ 11 - 3
src/main/resources/mappings/modules/info/InfoMapper.xml

@@ -32,7 +32,9 @@
 		a.updateBy AS "updateBy.id",
 		a.updateBy AS "updateBy.id",
 		a.updateDate AS "updateDate",
 		a.updateDate AS "updateDate",
 		a.topPosition AS "topPosition",
 		a.topPosition AS "topPosition",
-		b.name AS "infoType.name"
+		b.name AS "infoType.name",
+		a.labelIds as "labelIds",
+		a.relatedLabels as "relatedLabels"
 	</sql>
 	</sql>
 
 
 	<sql id="infoJoins">
 	<sql id="infoJoins">
@@ -182,7 +184,9 @@
 			createDate,
 			createDate,
 			updateBy,
 			updateBy,
 			updateDate,
 			updateDate,
-			topPosition
+			topPosition,
+            relatedLabels,
+            labelIds
 		) VALUES (
 		) VALUES (
 			#{infoType.id},
 			#{infoType.id},
 			#{title},
 			#{title},
@@ -203,7 +207,9 @@
 			#{createDate},
 			#{createDate},
 			#{updateBy.id},
 			#{updateBy.id},
 			#{updateDate},
 			#{updateDate},
-			#{topPosition}
+			#{topPosition},
+		    #{relatedLabels},
+		    #{labelIds}
 		)
 		)
 	</insert>
 	</insert>
 
 
@@ -226,6 +232,8 @@
 			basePv = #{basePv},
 			basePv = #{basePv},
 			updateBy = #{updateBy.id},
 			updateBy = #{updateBy.id},
 			updateDate = #{updateDate},
 			updateDate = #{updateDate},
+		    labelIds=#{labelIds},
+		    relatedLabels=#{relatedLabels},
 		    <if test="auditFlag != null and auditFlag == 1">
 		    <if test="auditFlag != null and auditFlag == 1">
 				<if test="auditStatus != null">
 				<if test="auditStatus != null">
 					auditStatus = #{auditStatus},
 					auditStatus = #{auditStatus},

+ 8 - 3
src/main/resources/mappings/modules/product/ProductMapper.xml

@@ -87,8 +87,8 @@
 		a.qualificationNo,
 		a.qualificationNo,
 		a.productName,
 		a.productName,
 		a.qualificationTime,
 		a.qualificationTime,
-		a.qualificationLink
-
+		a.qualificationLink,
+        a.labelIds
     </sql>
     </sql>
 
 
     <sql id="productJoins">
     <sql id="productJoins">
@@ -1714,7 +1714,12 @@
             <if test="qualificationLink !=null and qualificationLink!=''">
             <if test="qualificationLink !=null and qualificationLink!=''">
                 qualificationLink=#{qualificationLink},
                 qualificationLink=#{qualificationLink},
             </if>
             </if>
-
+            <if test="labelIds !=null and labelIds != ''">
+                labelIds=#{labelIds},
+            </if>
+            <if test="relatedLabels!=null and relatedLabels !=''">
+                relatedLabels=#{relatedLabels},
+            </if>
             newProductType=#{newProductType},
             newProductType=#{newProductType},
             showFlag=#{showFlag},
             showFlag=#{showFlag},
             announType=#{announType},
             announType=#{announType},

+ 2 - 1
src/main/resources/mappings/modules/product/ProductNewMapper.xml

@@ -103,7 +103,8 @@
         a.productName,
         a.productName,
         a.qualificationTime,
         a.qualificationTime,
         a.qualificationLink,
         a.qualificationLink,
-        a.returnGoodsStutas
+        a.returnGoodsStutas,
+        a.labelIds
     </sql>
     </sql>
 
 
     <sql id="productJoins">
     <sql id="productJoins">

+ 1 - 1
src/main/resources/mappings/modules/product/SearchFrequencyMapper.xml

@@ -120,7 +120,7 @@
 
 
     <select id="getKeywordList" resultType="com.caimei.modules.product.entity.SearchFrequencyVo">
     <select id="getKeywordList" resultType="com.caimei.modules.product.entity.SearchFrequencyVo">
         select
         select
-            keyword
+            keyword,id
         from cm_user_search_frequency
         from cm_user_search_frequency
         where trueStatus=1
         where trueStatus=1
           and   delStatus=1
           and   delStatus=1

+ 14 - 1
src/main/resources/mappings/modules/sys/UserDao.xml

@@ -222,7 +222,20 @@
 		FROM sys_user a
 		FROM sys_user a
 		WHERE a.del_flag = #{DEL_FLAG_NORMAL}
 		WHERE a.del_flag = #{DEL_FLAG_NORMAL}
 	</select>
 	</select>
-	
+
+	<select id="getNewUserId" resultType="com.thinkgem.jeesite.modules.sys.entity.User">
+		select ssr.systemId as id,su.username as name
+		from sys_system_role ssr
+		left join system_user su on ssr.systemId=su.id
+		where ssr.sysId=#{id}
+	</select>
+
+	<select id="getNewRoles" resultType="java.lang.String">
+		SELECT DISTINCT r.role_name FROM system_role r
+		LEFT JOIN system_role_user ru ON r.id = ru.role_id
+		WHERE ru.user_id = #{userId}
+	</select>
+
 	<!-- 插入用户 -->
 	<!-- 插入用户 -->
 	<insert id="insert" parameterType="user"  keyProperty="id" useGeneratedKeys="true">
 	<insert id="insert" parameterType="user"  keyProperty="id" useGeneratedKeys="true">
 		INSERT INTO sys_user(
 		INSERT INTO sys_user(

+ 366 - 320
src/main/webapp/WEB-INF/views/modules/archive/cmProductArchiveForm.jsp

@@ -1,333 +1,379 @@
 <%@ page contentType="text/html;charset=UTF-8" %>
 <%@ page contentType="text/html;charset=UTF-8" %>
-<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
 <html>
 <html>
 <head>
 <head>
-	<title>商品资料管理</title>
-	<meta name="decorator" content="default"/>
-	<style>
-		.iconBox{
-			font-size: 0;
-		}
-		.controls .conList{
-			display: inline-block;
-			margin-right: 15px;
-		}
-		.conList .btn:nth-of-type(1){
-			margin-left: 25px;
-		}
-		.select2-choice{
-			width: 100px;
-		}
-		.upload-content {
-			margin-top: -70px;
-		}
-		.upload-content .conList .btn:nth-of-type(1) {
-			width: 90px;
-			height: 100px;
-			border: 2px solid #eee;
-			background: #fff;
-			position: relative;
-		}
-		.upload-content .conList .btn:nth-of-type(1)>div {
-			position: absolute;
-			top: 50%;
-			left: 50%;
-			transform: translate(-50%, -50%);
-			color: #666;
-		}
-		.upload-content .conList .btn:nth-of-type(1) span {
-			font-size: 35px;
-		}
-		.upload-content .conList .btn:nth-of-type(1) h5 {
-			color: #666;
-		}
-		.cancel-upload {
-			background: transparent;
-			border: none;
-			box-shadow: none;
-			position: relative;
-			top: -38px;
-			left: -25px;
-			cursor: pointer;
-			z-index: 100;
-		}
-		.upload-content .conList ol li {
-			width: 114px;
-			min-height: 80px;
-			text-align: center;
-			background: #fff;
-			position: relative;
-			top: 120px;
-			margin-left: 2px;
-		}
-		.hide-pic {
-			display: none !important;
-		}
-	</style>
-	<script type="text/javascript">
-		$(document).ready(function() {
-			//$("#name").focus();
-			$("#inputForm").validate({
-				submitHandler: function(form){
-					var infoType = $("input[name='infoType']:checked").val();
-					if (infoType == 2) {
-						$("#productId").val('');
-					}else if ($("#productId").val() == '') {
-						alertx("请先选择商品");
-						return
-					}
-					loading('正在提交,请稍等...');
-					form.submit();
-				},
-				errorContainer: "#messageBox",
-				errorPlacement: function(error, element) {
-					$("#messageBox").text("输入有误,请先更正。");
-					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
-						error.appendTo(element.parent().parent());
-					} else {
-						error.insertAfter(element);
-					}
-				}
-			});
-		});
-	</script>
+    <title>商品资料管理</title>
+    <meta name="decorator" content="default"/>
+    <link type="text/css" rel="stylesheet" href="${ctxStatic}/bootstrap-select/css/bootstrap-select.css"></link>
+    <style>
+        .iconBox {
+            font-size: 0;
+        }
+
+        .controls .conList {
+            display: inline-block;
+            margin-right: 15px;
+        }
+
+        .conList .btn:nth-of-type(1) {
+            margin-left: 25px;
+        }
+
+        .select2-choice {
+            width: 100px;
+        }
+
+        .upload-content {
+            margin-top: -70px;
+        }
+
+        .upload-content .conList .btn:nth-of-type(1) {
+            width: 90px;
+            height: 100px;
+            border: 2px solid #eee;
+            background: #fff;
+            position: relative;
+        }
+
+        .upload-content .conList .btn:nth-of-type(1) > div {
+            position: absolute;
+            top: 50%;
+            left: 50%;
+            transform: translate(-50%, -50%);
+            color: #666;
+        }
+
+        .upload-content .conList .btn:nth-of-type(1) span {
+            font-size: 35px;
+        }
+
+        .upload-content .conList .btn:nth-of-type(1) h5 {
+            color: #666;
+        }
+
+        .cancel-upload {
+            background: transparent;
+            border: none;
+            box-shadow: none;
+            position: relative;
+            top: -38px;
+            left: -25px;
+            cursor: pointer;
+            z-index: 100;
+        }
+
+        .upload-content .conList ol li {
+            width: 114px;
+            min-height: 80px;
+            text-align: center;
+            background: #fff;
+            position: relative;
+            top: 120px;
+            margin-left: 2px;
+        }
+
+        .hide-pic {
+            display: none !important;
+        }
+    </style>
+    <script type="text/javascript">
+        $(document).ready(function () {
+            //$("#name").focus();
+            $("#inputForm").validate({
+                submitHandler: function (form) {
+                    var infoType = $("input[name='infoType']:checked").val();
+                    if (infoType == 2) {
+                        $("#productId").val('');
+                    } else if ($("#productId").val() == '') {
+                        alertx("请先选择商品");
+                        return
+                    }
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function (error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox") || element.is(":radio") || element.parent().is(".input-append")) {
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+        });
+    </script>
 </head>
 </head>
 <body>
 <body>
-	<ul class="nav nav-tabs">
-		<li><a href="${ctx}/archive/cmProductArchive/">商品资料列表</a></li>
-		<li class="active"><a href="${ctx}/archive/cmProductArchive/form?id=${cmProductArchive.id}">商品资料${not empty cmProductArchive.id?'编辑':'添加'}</a></li>
-	</ul><br/>
-	<form:form id="inputForm" modelAttribute="cmProductArchive" action="${ctx}/archive/cmProductArchive/save" method="post" class="form-horizontal">
-		<form:hidden path="id"/>
-		<form:hidden path="existProductType" />
-		<sys:message content="${message}"/>
-		<div class="control-group">
-			<label class="control-label">商品信息:</label>
-			<div class="controls">
-				<input type="radio" name="infoType" value="1" ${empty cmProductArchive.id ? "checked" :(not empty cmProductArchive.productId ? "checked" : "")} />商品库获取
-				<input type="radio" name="infoType" value="2" ${(not empty cmProductArchive.id && empty cmProductArchive.productId) ? "checked" : ""} />自定义
-			</div>
-		</div>
-		<div class="control-group auto">
-			<div class="controls">
-				<img id="mainImage" src="${cmProductArchive.productImage}" border="none" width="60" height="60"
-					 style="${empty cmProductArchive.productImage ? 'display:none':''}" class="productInfo">
-				<font id="productName" class="productInfo">${cmProductArchive.productName}</font>
-				<a href="JavaScript:;" onclick="showSelect()">选择商品</a>
-				<input type="hidden" name="productId" id="productId" value="${cmProductArchive.productId}">
-			</div>
-		</div>
-		<div class="control-group custom">
-			<label class="control-label"><font color="red">*</font>商品名称:</label>
-			<div class="controls">
-				<form:input path="productName" htmlEscape="false" maxlength="50" class="input-xlarge required" placeholder="输入或选择商品" style="position:relative"/>
-			</div>
-		</div>
-		<div class="control-group custom">
-			<label class="control-label">商品图片:</label>
-			<div class="controls upload-content iconBox" id="productImageBox">
-				<div class="conList">
-					<form:hidden id="pImage" path="productImage" htmlEscape="false"
-								 maxlength="255"
-								 class="input-xlarge required"/>
-					<sys:ckfinder input="pImage" type="images" uploadPath="/photo"
-								  selectMultiple="false"
-								  maxWidth="100" maxHeight="100"/><br>
-				</div>
-			</div>
-		</div>
-		<div class="control-group custom">
-			<label class="control-label"><font color="red">*</font>供应商名称:</label>
-			<div class="controls">
-				<form:input path="shopName" htmlEscape="false" maxlength="50" class="input-xlarge required"/>
-			</div>
-		</div>
-		<div class="control-group">
-			<label class="control-label">资料等级:</label>
-			<div class="controls">
-				<form:select path="archiveLevel" class="input-medium ">
-					<form:option value="1" label="一类资料"/>
-					<form:option value="2" label="二类资料"/>
-					<form:option value="3" label="三类资料"/>
-				</form:select>
-			</div>
-		</div>
-		<div class="control-group custom productType">
-			<label class="control-label">商品属性:</label>
-			<div class="controls">
-				<form:select path="productType" class="input-medium ">
-					<form:option value="1" label="产品"/>
-					<form:option value="2" label="仪器"/>
-				</form:select>
-			</div>
-		</div>
-		<div class="control-group">
-			<label class="control-label">商品分类:</label>
-			<div class="controls">
-				<form:select path="productClassify" class="input-medium ">
-					<form:option value="2" label="生美"/>
-					<form:option value="1" label="医美"/>
-				</form:select>
-			</div>
-		</div>
-		<div class="control-group">
-			<label class="control-label">SEO关键词:</label>
-			<div class="auto-input">
-				<form:input path="seoKeyword" htmlEscape="false" style="position: relative" class="input-xlarge"/>
-				<label id="seoKeywordSensitiveWords" class="red"></label>
-			</div>
-		</div>
-		<div class="form-actions">
-			<input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
-			<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
-		</div>
-	</form:form>
-	<script type="text/javascript" src="${ctxStatic}/auto-input.js"></script>
-	<script>
-		//关键词联动
-		function autocomplete(text) {
-			// return ['三全鲜食(北新泾店)', 'Hot honey 首尔炸鸡(仙霞路)', '新旺角茶餐厅', '泷千家(天山西路店)', '胖仙女纸杯蛋糕(上海凌空店)', '贡茶', '豪大大香鸡排超级奶爸', '茶芝兰(奶茶,手抓饼)', '十二泷町', '星移浓缩咖啡', '阿姨奶茶/豪大大', '新麦甜四季甜品炸鸡', 'Monica摩托主题咖啡店', '浮生若茶(凌空soho店)', 'NONO JUICE  鲜榨果汁', 'CoCo都可(北新泾店)', '快乐柠檬(神州智慧店)', 'Merci Paul cafe', '猫山王(西郊百联店)', '枪会山', '纵食', '钱记', '壹杯加', '唦哇嘀咖', '爱茜茜里(西郊百联)', '爱茜茜里(近铁广场)', '鲜果榨汁(金沙江路和美广店)', '开心丽果(缤谷店)', '超级鸡车(丰庄路店)', '妙生活果园(北新泾店)', '香宜度麻辣香锅', '凡仔汉堡(老真北路店)', '港式小铺', '蜀香源麻辣香锅(剑河路店)', '北京饺子馆', '饭典*新简餐(凌空SOHO店)', '焦耳·川式快餐(金钟路店)', '动力鸡车', '浏阳蒸菜', '四海游龙(天山西路店)', '樱花食堂(凌空店)', '壹分米客家传统调制米粉(天山店)', '福荣祥烧腊(平溪路店)', '速记黄焖鸡米饭', '红辣椒麻辣烫', '(小杨生煎)西郊百联餐厅', '阳阳麻辣烫', '南拳妈妈龙虾盖浇饭'].filter(function (item) {
-			//     return text && item.indexOf(text) > -1;
-			// });
-			var keywordlist=new Array();
-			<c:forEach items="${SearchFrequencyVo}" var="search">
-			keywordlist.push("${search.keyword}")
-			</c:forEach>
-			return keywordlist.filter(function (item) {
-				return text && item.indexOf(text) > -1;
-			});
-		}
+<ul class="nav nav-tabs">
+    <li><a href="${ctx}/archive/cmProductArchive/">商品资料列表</a></li>
+    <li class="active"><a
+            href="${ctx}/archive/cmProductArchive/form?id=${cmProductArchive.id}">商品资料${not empty cmProductArchive.id?'编辑':'添加'}</a>
+    </li>
+</ul>
+<br/>
+<form:form id="inputForm" modelAttribute="cmProductArchive" action="${ctx}/archive/cmProductArchive/save" method="post"
+           class="form-horizontal">
+    <form:hidden path="id"/>
+    <form:hidden path="existProductType"/>
+    <sys:message content="${message}"/>
+    <div class="control-group">
+        <label class="control-label">商品信息:</label>
+        <div class="controls">
+            <input type="radio" name="infoType"
+                   value="1" ${empty cmProductArchive.id ? "checked" :(not empty cmProductArchive.productId ? "checked" : "")} />商品库获取
+            <input type="radio" name="infoType"
+                   value="2" ${(not empty cmProductArchive.id && empty cmProductArchive.productId) ? "checked" : ""} />自定义
+        </div>
+    </div>
+    <div class="control-group auto">
+        <div class="controls">
+            <img id="mainImage" src="${cmProductArchive.productImage}" border="none" width="60" height="60"
+                 style="${empty cmProductArchive.productImage ? 'display:none':''}" class="productInfo">
+            <font id="productName" class="productInfo">${cmProductArchive.productName}</font>
+            <a href="JavaScript:;" onclick="showSelect()">选择商品</a>
+            <input type="hidden" name="productId" id="productId" value="${cmProductArchive.productId}">
+        </div>
+    </div>
+    <div class="control-group custom">
+        <label class="control-label"><font color="red">*</font>商品名称:</label>
+        <div class="controls">
+            <form:input path="productName" htmlEscape="false" maxlength="50" class="input-xlarge required"
+                        placeholder="输入或选择商品" style="position:relative"/>
+        </div>
+    </div>
+    <div class="control-group custom">
+        <label class="control-label">商品图片:</label>
+        <div class="controls upload-content iconBox" id="productImageBox">
+            <div class="conList">
+                <form:hidden id="pImage" path="productImage" htmlEscape="false"
+                             maxlength="255"
+                             class="input-xlarge required"/>
+                <sys:ckfinder input="pImage" type="images" uploadPath="/photo"
+                              selectMultiple="false"
+                              maxWidth="100" maxHeight="100"/><br>
+            </div>
+        </div>
+    </div>
+    <div class="control-group custom">
+        <label class="control-label"><font color="red">*</font>供应商名称:</label>
+        <div class="controls">
+            <form:input path="shopName" htmlEscape="false" maxlength="50" class="input-xlarge required"/>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label">资料等级:</label>
+        <div class="controls">
+            <form:select path="archiveLevel" class="input-medium ">
+                <form:option value="1" label="一类资料"/>
+                <form:option value="2" label="二类资料"/>
+                <form:option value="3" label="三类资料"/>
+            </form:select>
+        </div>
+    </div>
+    <div class="control-group custom productType">
+        <label class="control-label">商品属性:</label>
+        <div class="controls">
+            <form:select path="productType" class="input-medium ">
+                <form:option value="1" label="产品"/>
+                <form:option value="2" label="仪器"/>
+            </form:select>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label">商品分类:</label>
+        <div class="controls">
+            <form:select path="productClassify" class="input-medium ">
+                <form:option value="2" label="生美"/>
+                <form:option value="1" label="医美"/>
+            </form:select>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label">SEO关键词:</label>
+        <div class="auto-input">
+            <form:input path="seoKeyword" htmlEscape="false" style="position: relative" class="input-xlarge"/>
+            <label id="seoKeywordSensitiveWords" class="red"></label>
+        </div>
+    </div>
+    <div class="control-group">
+        <label class="control-label">关联标签库:</label>
+        <select class="selectpicker" multiple id="labelSelectBox" style="width: 240px" name="labelIds">
+            <c:forEach items="${SearchFrequencyVo}" var="sea">
+                <option value="${sea.id}">${sea.keyword}</option>
+            </c:forEach>
+        </select>
+    </div>
+    <div class="form-actions">
+        <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
+        <input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+    </div>
+</form:form>
+<script type="text/javascript" src="${ctxStatic}/auto-input.js"></script>
+<script type="text/javascript" src="${ctxStatic}/bootstrap-select/js/bootstrap-select.js"></script>
+<script>
+    //关键词联动
+    function autocomplete(text) {
+        // return ['三全鲜食(北新泾店)', 'Hot honey 首尔炸鸡(仙霞路)', '新旺角茶餐厅', '泷千家(天山西路店)', '胖仙女纸杯蛋糕(上海凌空店)', '贡茶', '豪大大香鸡排超级奶爸', '茶芝兰(奶茶,手抓饼)', '十二泷町', '星移浓缩咖啡', '阿姨奶茶/豪大大', '新麦甜四季甜品炸鸡', 'Monica摩托主题咖啡店', '浮生若茶(凌空soho店)', 'NONO JUICE  鲜榨果汁', 'CoCo都可(北新泾店)', '快乐柠檬(神州智慧店)', 'Merci Paul cafe', '猫山王(西郊百联店)', '枪会山', '纵食', '钱记', '壹杯加', '唦哇嘀咖', '爱茜茜里(西郊百联)', '爱茜茜里(近铁广场)', '鲜果榨汁(金沙江路和美广店)', '开心丽果(缤谷店)', '超级鸡车(丰庄路店)', '妙生活果园(北新泾店)', '香宜度麻辣香锅', '凡仔汉堡(老真北路店)', '港式小铺', '蜀香源麻辣香锅(剑河路店)', '北京饺子馆', '饭典*新简餐(凌空SOHO店)', '焦耳·川式快餐(金钟路店)', '动力鸡车', '浏阳蒸菜', '四海游龙(天山西路店)', '樱花食堂(凌空店)', '壹分米客家传统调制米粉(天山店)', '福荣祥烧腊(平溪路店)', '速记黄焖鸡米饭', '红辣椒麻辣烫', '(小杨生煎)西郊百联餐厅', '阳阳麻辣烫', '南拳妈妈龙虾盖浇饭'].filter(function (item) {
+        //     return text && item.indexOf(text) > -1;
+        // });
+        var keywordlist = new Array();
+        <c:forEach items="${SearchFrequencyVo}" var="search">
+        keywordlist.push("${search.keyword}")
+        </c:forEach>
+        return keywordlist.filter(function (item) {
+            return text && item.indexOf(text) > -1;
+        });
+    }
+
+    new AutoComplete({
+        el: '.auto-input',
+        callback: autocomplete,
+        offsetLeft: -25
+    });
+
+
+
+    $(function () {
+        showInfo();
+        initLabelSelects();
+        $('.upload-content .conList .btn:nth-of-type(1)').html('<div><span>+</span><h5>选择图片</h5></div>');
+        $('.upload-content .conList .btn:nth-of-type(2)').after('<img class="cancel-upload" src="/static/images/close-btn1.png">').remove();
+        $('.upload-content .conList').find('.cancel-upload').hide();
+        var observeEle = document.getElementsByClassName('upload-content')[0];
+        var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
+        var MutationObserverConfig = {
+            childList: true,
+            subtree: true,
+            characterData: true
+        };
+        var observer = new MutationObserver(function (mutations) {
+            $.each(mutations, function (index, item) {
+                if (item.type === 'childList') {
+                    // 在创建新的 element 时调用
+                    var target = $(item.target),
+                        thisWrapper = target.closest('.conList'),
+                        nextEle = thisWrapper.next();
+                    thisWrapper.find('li').css('z-index', 99);
+                    thisWrapper.find('.cancel-upload').show();
+                    if (nextEle.hasClass('hide-pic')) {
+                        nextEle.removeClass('hide-pic');
+                    }
+                }
+            })
+        });
+        observer.observe(observeEle, MutationObserverConfig);
 
 
-		new AutoComplete({
-			el: '.auto-input',
-			callback: autocomplete,
-			offsetLeft: -25
-		});
-	$(function () {
-		showInfo();
-		$('.upload-content .conList .btn:nth-of-type(1)').html('<div><span>+</span><h5>选择图片</h5></div>');
-		$('.upload-content .conList .btn:nth-of-type(2)').after('<img class="cancel-upload" src="/static/images/close-btn1.png">').remove();
-		$('.upload-content .conList').find('.cancel-upload').hide();
-		var observeEle = document.getElementsByClassName('upload-content')[0];
-		var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
-		var MutationObserverConfig = {
-			childList: true,
-			subtree: true,
-			characterData: true
-		};
-		var observer = new MutationObserver(function (mutations) {
-			$.each(mutations, function (index, item) {
-				if (item.type === 'childList') {
-					// 在创建新的 element 时调用
-					var target = $(item.target),
-							thisWrapper = target.closest('.conList'),
-							nextEle = thisWrapper.next();
-					thisWrapper.find('li').css('z-index', 99);
-					thisWrapper.find('.cancel-upload').show();
-					if (nextEle.hasClass('hide-pic')) {
-						nextEle.removeClass('hide-pic');
-					}
-				}
-			})
-		});
-		observer.observe(observeEle, MutationObserverConfig);
+        $('body').on('click', '.cancel-upload', function () {
+            var wrapper = $(this).closest('.conList');
+            wrapper.find('li').css('z-index', '-1');
+            wrapper.find('input').val('');
+            $(this).hide();
+            wrapper.removeClass("hide-pic");
+            wrapper.parent().append(wrapper.clone());
+            wrapper.remove();
+            $(".conList").each(function (i, ele) {
+                if ($(ele).find("input.input-xlarge").val()) {
+                    $(ele).next().removeClass("hide-pic")
+                }
+            })
+        });
+        $(window).on("load", function () {
+            setTimeout(function () {
+                $("#productImageBox").find("input.input-xlarge").each(function (i, ele) {
+                    if ($(ele).val()) {
+                        $(ele).next().find("li").css("z-index", "99");
+                        $(ele).parents(".conList").find(".cancel-upload").show();
+                        $(ele).parents(".conList").next().removeClass("hide-pic")
+                    }
+                })
+            }, 200);
+        });
+    });
 
 
-		$('body').on('click', '.cancel-upload', function () {
-			var wrapper = $(this).closest('.conList');
-			wrapper.find('li').css('z-index', '-1');
-			wrapper.find('input').val('');
-			$(this).hide();
-			wrapper.removeClass("hide-pic");
-			wrapper.parent().append(wrapper.clone());
-			wrapper.remove();
-			$(".conList").each(function (i, ele) {
-				if ($(ele).find("input.input-xlarge").val()) {
-					$(ele).next().removeClass("hide-pic")
-				}
-			})
-		});
-		$(window).on("load", function () {
-			setTimeout(function () {
-				$("#productImageBox").find("input.input-xlarge").each(function (i, ele) {
-					if ($(ele).val()) {
-						$(ele).next().find("li").css("z-index", "99");
-						$(ele).parents(".conList").find(".cancel-upload").show();
-						$(ele).parents(".conList").next().removeClass("hide-pic")
-					}
-				})
-			}, 200);
-		});
-	});
+    $("input[name='infoType']").change(function () {
+        showInfo();
+    })
 
 
-	$("input[name='infoType']").change(function () {
-		showInfo();
-	})
+    function initLabelSelects(){
+        var labelSelectBox = $('#labelSelectBox');
+        labelSelectBox.selectpicker({
+            noneSelectedText: '请选择标签库',
+            maxOptions: 6,
+            maxOptionsText: '最多选取6个标签库'
+        });
+        // 回显操作
+        var str = '${cmProductArchive.labelIds}';
+        var arr = str.split(',');
+        console.log(arr)
+        labelSelectBox.selectpicker('val', arr);
+    }
 
 
-	// 展示表单信息
-	function showInfo() {
-		var infoType = $("input[name='infoType']:checked").val();
-		if (infoType == 2) {
-			$(".auto").hide();
-			$(".custom").show();
-			$(".productInfo").show();
-		} else {
-			$(".auto").show();
-			$(".custom").hide();
-			if ($("#productId").val() == '') {
-				$(".productInfo").hide();
-			}
-			if ($("#existProductType").val() == 0) {
-				$(".productType").show();
-			} else {
-				$(".productType").hide();
-			}
-		}
-	}
+    // 展示表单信息
+    function showInfo() {
+        var infoType = $("input[name='infoType']:checked").val();
+        if (infoType == 2) {
+            $(".auto").hide();
+            $(".custom").show();
+            $(".productInfo").show();
+        } else {
+            $(".auto").show();
+            $(".custom").hide();
+            if ($("#productId").val() == '') {
+                $(".productInfo").hide();
+            }
+            if ($("#existProductType").val() == 0) {
+                $(".productType").show();
+            } else {
+                $(".productType").hide();
+            }
+        }
+    }
 
 
-	//选择添加商品
-	function showSelect() {
-		var url = '';
-		var title = '';
-		url = "${ctx}/archive/cmProductArchive/findProductPage";
-		title = "选择商品";
-		top.$.jBox("iframe:" + url, {
-			iframeScrolling: 'yes',
-			width: $(top.document).width() - 600,
-			height: $(top.document).height() - 160,
-			persistent: true,
-			title: title,
-			buttons: {"确定": '1', "关闭": '-1'},
-			submit: function (v, h, f) {
-				//确定
-				var $jboxFrame = top.$('#jbox-iframe');
-				var $mainFrame = top.$('#mainFrame');
-				if ('1' == v && 1 == $jboxFrame.size() && 1 == $mainFrame.size()) {
-					var items = $jboxFrame[0].contentWindow.getCheckedItems(0);
-					if (items.length > 0) {
-						console.log(items)
-						var productId = items[0].productId;
-						var mainImage = items[0].mainImage;
-						var productName = items[0].productName;
-						var productType = items[0].commodityType;
-						$("#mainImage").attr("src", mainImage).show();
-						$("#productName").text(productName);
-						$("#productId").val(productId);
-						$("#name").val(productName);
-						$(".productInfo").show();
-						if ('' == productType ) {
-							$(".productType").show();
-						}else {
-							$(".productType").hide();
-						}
-					} else {
-						top.$.jBox.tip("请先勾选商品...");
-						return false;
-					}
-				}
-				return true;
-			}
-		});
-	}
+    //选择添加商品
+    function showSelect() {
+        var url = '';
+        var title = '';
+        url = "${ctx}/archive/cmProductArchive/findProductPage";
+        title = "选择商品";
+        top.$.jBox("iframe:" + url, {
+            iframeScrolling: 'yes',
+            width: $(top.document).width() - 600,
+            height: $(top.document).height() - 160,
+            persistent: true,
+            title: title,
+            buttons: {"确定": '1', "关闭": '-1'},
+            submit: function (v, h, f) {
+                //确定
+                var $jboxFrame = top.$('#jbox-iframe');
+                var $mainFrame = top.$('#mainFrame');
+                if ('1' == v && 1 == $jboxFrame.size() && 1 == $mainFrame.size()) {
+                    var items = $jboxFrame[0].contentWindow.getCheckedItems(0);
+                    if (items.length > 0) {
+                        console.log(items)
+                        var productId = items[0].productId;
+                        var mainImage = items[0].mainImage;
+                        var productName = items[0].productName;
+                        var productType = items[0].commodityType;
+                        $("#mainImage").attr("src", mainImage).show();
+                        $("#productName").text(productName);
+                        $("#productId").val(productId);
+                        $("#name").val(productName);
+                        $(".productInfo").show();
+                        if ('' == productType) {
+                            $(".productType").show();
+                        } else {
+                            $(".productType").hide();
+                        }
+                    } else {
+                        top.$.jBox.tip("请先勾选商品...");
+                        return false;
+                    }
+                }
+                return true;
+            }
+        });
+    }
 </script>
 </script>
 </body>
 </body>
 </html>
 </html>

+ 3 - 16
src/main/webapp/WEB-INF/views/modules/info/infoForm.jsp

@@ -83,9 +83,9 @@
         <tr>
         <tr>
             <th>关联标签库:</th>
             <th>关联标签库:</th>
             <td colspan="3">
             <td colspan="3">
-                <select class="selectpicker" multiple id="labelSelectBox" style="width: 240px">
+                <select class="selectpicker" multiple id="labelSelectBox" style="width: 240px" name="labelIds">
                     <c:forEach items="${SearchFrequencyVo}" var="sea">
                     <c:forEach items="${SearchFrequencyVo}" var="sea">
-                        <option value="${sea.keyword}">${sea.keyword}</option>
+                        <option value="${sea.id}">${sea.keyword}</option>
                     </c:forEach>
                     </c:forEach>
                 </select>
                 </select>
             </td>
             </td>
@@ -374,7 +374,6 @@
                 setLabel(label);
                 setLabel(label);
             }
             }
         });
         });
-
         var labelSelectBox = $('#labelSelectBox');
         var labelSelectBox = $('#labelSelectBox');
         labelSelectBox.selectpicker({
         labelSelectBox.selectpicker({
             noneSelectedText: '请选择标签库',
             noneSelectedText: '请选择标签库',
@@ -382,7 +381,7 @@
             maxOptionsText: '最多选取6个标签库'
             maxOptionsText: '最多选取6个标签库'
         });
         });
         // 回显操作
         // 回显操作
-        var str = '${info.relatedLabels}';
+        var str = '${info.labelIds}';
         var arr = str.split(',');
         var arr = str.split(',');
         console.log(arr)
         console.log(arr)
         labelSelectBox.selectpicker('val', arr);
         labelSelectBox.selectpicker('val', arr);
@@ -414,19 +413,7 @@
 
 
     function LabelInit() {
     function LabelInit() {
         var items = "${fns:getDictValue('label','sys_config','')}" + ",";
         var items = "${fns:getDictValue('label','sys_config','')}" + ",";
-        /* var _labels="
-
-
-
-
-
-
 
 
-        ${info.label}";
-			var _label=_labels.split(",");
-			for (var i = 0; i < _label.length; i++) {
-				items=items.replace(_label[i]+",","");
-			} */
         /* var items="美白,祛斑,祛痘,补水,瘦脸,去皱,缩毛孔,减肥瘦身,提拉紧致,嫩肤,去眼袋,去法令纹,脱毛,纹眉,去黑眼圈,美白嫩肤,面部提升,祛斑祛痣,除皱,去红血丝,祛疤,祛妊娠纹,纹身,纤体塑性,纹眉"; */
         /* var items="美白,祛斑,祛痘,补水,瘦脸,去皱,缩毛孔,减肥瘦身,提拉紧致,嫩肤,去眼袋,去法令纹,脱毛,纹眉,去黑眼圈,美白嫩肤,面部提升,祛斑祛痣,除皱,去红血丝,祛疤,祛妊娠纹,纹身,纤体塑性,纹眉"; */
         var info = items.split(",");
         var info = items.split(",");
         var html = '';
         var html = '';

+ 28 - 0
src/main/webapp/WEB-INF/views/modules/product-new/productEdit.jsp

@@ -6,6 +6,7 @@
 <head>
 <head>
     <title>编辑商品</title>
     <title>编辑商品</title>
     <meta name="decorator" content="default"/>
     <meta name="decorator" content="default"/>
+    <link type="text/css" rel="stylesheet" href="${ctxStatic}/bootstrap-select/css/bootstrap-select.css"></link>
     <style>
     <style>
         .sku {
         .sku {
             display: flex;
             display: flex;
@@ -346,6 +347,16 @@
                 <p>请务必准确定义关键词,关键词会影响商品的搜索结果,建议从品牌,商品学名,商品别名,商品大类别和商品小类别5个方面考虑,每个关键词不超过16个汉字。</p>
                 <p>请务必准确定义关键词,关键词会影响商品的搜索结果,建议从品牌,商品学名,商品别名,商品大类别和商品小类别5个方面考虑,每个关键词不超过16个汉字。</p>
             </td>
             </td>
         </tr>
         </tr>
+        <tr>
+            <th>关联标签库:</th>
+            <td colspan="3">
+                <select class="selectpicker" multiple id="labelSelectBox" style="width: 240px" name="labelIds">
+                    <c:forEach items="${SearchFrequencyVo}" var="sea">
+                        <option value="${sea.id}">${sea.keyword}</option>
+                    </c:forEach>
+                </select>
+            </td>
+        </tr>
         <tr>
         <tr>
             <th>相关参数:</th>
             <th>相关参数:</th>
             <td colspan="3" class="params">
             <td colspan="3" class="params">
@@ -909,6 +920,7 @@
 <% request.setAttribute("caimeiCore", Global.getConfig("caimei.core"));%>
 <% request.setAttribute("caimeiCore", Global.getConfig("caimei.core"));%>
 <script type="text/javascript" src="${ctxStatic}/ckeditor5-new/ckeditor.js"></script>
 <script type="text/javascript" src="${ctxStatic}/ckeditor5-new/ckeditor.js"></script>
 <script type="text/javascript" src="${ctxStatic}/auto-input.js"></script>
 <script type="text/javascript" src="${ctxStatic}/auto-input.js"></script>
+<script type="text/javascript" src="${ctxStatic}/bootstrap-select/js/bootstrap-select.js"></script>
 
 
 <script type="text/javascript">
 <script type="text/javascript">
 
 
@@ -1095,7 +1107,23 @@
 
 
         // 初始化sku
         // 初始化sku
         insertDefaultSkuRow();
         insertDefaultSkuRow();
+        // 初始化关联标签库
+        initLabelSelects();
     });
     });
+
+    function initLabelSelects(){
+        var labelSelectBox = $('#labelSelectBox');
+        labelSelectBox.selectpicker({
+            noneSelectedText: '请选择标签库',
+            maxOptions: 6,
+            maxOptionsText: '最多选取6个标签库'
+        });
+        // 回显操作
+        var str = '${product.labelIds}';
+        var arr = str.split(',');
+        console.log(arr)
+        labelSelectBox.selectpicker('val', arr);
+    }
     <%--// 商品可见度--%>
     <%--// 商品可见度--%>
     <%--/*$(function() {--%>
     <%--/*$(function() {--%>
     <%--    var initValue = ${(product.visibility <= 0) ? 3 : ((product.visibility >= 3) ? 3 : product.visibility)}--%>
     <%--    var initValue = ${(product.visibility <= 0) ? 3 : ((product.visibility >= 3) ? 3 : product.visibility)}--%>

+ 321 - 303
src/main/webapp/WEB-INF/views/modules/product/keywordFrequency.jsp

@@ -7,148 +7,184 @@
 --%>
 --%>
 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 <%@ page contentType="text/html;charset=UTF-8" %>
 <%@ page contentType="text/html;charset=UTF-8" %>
-<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
 <html>
 <html>
 <head>
 <head>
     <title>关键词列表</title>
     <title>关键词列表</title>
     <meta name="decorator" content="default"/>
     <meta name="decorator" content="default"/>
+    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
     <style type="text/css">
     <style type="text/css">
-        .table th{text-align: center;}
-        .table td{text-align: center;}
-    </style>
-    <script type="text/javascript">
-        // $(document).ready(function() {
-        //
-        // });
-        function page(n,s){
-            $("#pageNo").val(n);
-            $("#pageSize").val(s);
-            $("#searchForm").submit();
-            return false;
-        }
-        window.onload = function () {
-            <%--$.ajax({--%>
-            <%--    //几个参数需要注意一下--%>
-            <%--    type: "get",//方法类型--%>
-            <%--    dataType:"json",--%>
-            <%--    url: "${ctx}/product/keywordFrequency/getSeacherFrom?trueStatus=1" ,//url--%>
-            <%--    success: function (data) {--%>
-            <%--        $('#search').get(0).options.length = 0;--%>
-            <%--        $('#search').append('<option value="" aria-selected="true">请选择</option>');--%>
-            <%--        $.each(data, function(i, obj) {--%>
-            <%--            var option = $('<option />');--%>
-            <%--            option.val(obj);--%>
-            <%--            if(obj==1){--%>
-            <%--                option.text("首页搜索");--%>
-            <%--            }else if(obj==2){--%>
-            <%--                option.text("信息中心搜索");--%>
-            <%--            }else if(obj==3){--%>
-            <%--                option.text("美业资料搜索");--%>
-            <%--            }else if(obj==4){--%>
-            <%--                option.text("采美百科搜索");--%>
-            <%--            }else if(obj==6){--%>
-            <%--                option.text("管理员添加");--%>
-            <%--            }--%>
-            <%--            $('#search').append(option);--%>
-            <%--        });--%>
-            <%--    },--%>
-            <%--    error : function() {--%>
-            <%--        alert("服务异常!");--%>
-            <%--    }--%>
-            <%--});--%>
+        .table th {
+            text-align: center;
         }
         }
-        //选中所有
-        function allCkbfun(ckb){
-            var isChecked = ckb.checked;
-            $(".check-item").attr('checked', isChecked);
-            if(true==isChecked){
-                $(".check-item").parents(".item-info").addClass("row-selected");
-            }else{
-                $(".check-item").parents(".item-info").removeClass("row-selected");
-            }
-        }
-        //复选框选单击事件
-        function checkfun(ckb){
-            var isChecked = ckb.checked;
-            if(true==isChecked){
-                $(ckb).parents(".item-info").addClass("row-selected");
-            }else{
-                $(ckb).parents(".item-info").removeClass("row-selected");
-            }
-        }
-        //加入关键词库
-        async function updateEnabledStatus(ids,keys){
-            var msg='确定加入关键词库?';
-            // if('0'==status){
-            //     msg='确定停用?';
-            // }
-            const result = await verifications(keys)
-            if(result !== 'ok'){
-                return confirm('选中的关键词中部分在关键键词词库已存在!')
-            }else{
-            top.$.jBox.confirm(msg,'系统提示',function(v){
-                if(v=='ok'){
-                    $.post("${ctx}/product/keywordFrequency/addKeyWordList",{'ids':ids}, function(data) {
-                        $("#searchForm").submit();
-                    },"JSON");//这里返回的类型有:json,html,xml,text
-                }
-                top.$.jBox.tip('加入关键词库成功', 'success');
-                // window.location.reload();
-                <%--window.location.href = "${ctx}/product/keywordFrequency/getKeyInfo";--%>
-                window.location.href = '${ctx}/product/keywordFrequency/getKeyInfo/' ;
 
 
-                return;
-            });
-            }
+        .table td {
+            text-align: center;
         }
         }
-        //删除关键词
-        function delEnabledStatus(ids){
-            var msg='确定删除关键词?';
-            // if('0'==status){
-            //     msg='确定停用?';
-            // }
-            top.$.jBox.confirm(msg,'系统提示',function(v,h,f){
-                if(v=='ok'){
-                    $.post("${ctx}/product/keywordFrequency/delKeyWordById",{'id':ids}, function(data) {
-                        $("#searchForm").submit();
-                    },"JSON");//这里返回的类型有:json,html,xml,text
-                }
-                // top.$.jBox.tip('删除成功', 'success');
-                // window.location.reload();
-                return;
-            },{buttonsFocus:1,persistent: true});
-        }
-        function updateStatus(){
-            var items = new Array();
-            $items=$('.check-item:checked');
-            var keyitems = new Array();
-            if(0==$items.length){
-                top.$.jBox.tip('请选择需要加入关键词库的数据', 'error');
-                return;
-            }
-            $items.each(function(i){
-                items.push($(this).parents(".item-info").attr("id"));
-                keyitems.push($(this).parents(".item-info").attr("name"));
-            });
-            console.log(keyitems);
-            updateEnabledStatus(items.toString(),keyitems.toString());
-        }
-        function getSelectKeywords(){
-            var items = new Array();
-            $items=$('.check-item:checked');
-            if(0==$items.length){
-                top.$.jBox.tip('请选择需要导出的关键词', 'error');
-                return;
-            }
-            $items.each(function(i){
-                items.push($(this).parents(".item-info").attr("id"));
+    </style>
+    <script type="text/javascript">
+        function getNewManager() {
+            var link = "";
+            $.get("${ctx}/jump/link", function (data) {
+                link = "https://manager-b.caimei365.com/#/library/keyword/list?token=" + data;
+                location.href = link;
             });
             });
-            exportKeyword(items.toString());
         }
         }
-        //导出关键词
-           function exportKeyword(ids){
-                window.location.href = "${ctx}/product/keywordFrequency/export?ids=" + ids;
-           }
+
+        <%--// $(document).ready(function() {--%>
+        <%--//--%>
+        <%--// });--%>
+        <%--function page(n,s){--%>
+        <%--    $("#pageNo").val(n);--%>
+        <%--    $("#pageSize").val(s);--%>
+        <%--    $("#searchForm").submit();--%>
+        <%--    return false;--%>
+        <%--}--%>
+        <%--window.onload = function () {--%>
+        <%--    &lt;%&ndash;$.ajax({&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;    //几个参数需要注意一下&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;    type: "get",//方法类型&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;    dataType:"json",&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;    url: "${ctx}/product/keywordFrequency/getSeacherFrom?trueStatus=1" ,//url&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;    success: function (data) {&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;        $('#search').get(0).options.length = 0;&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;        $('#search').append('<option value="" aria-selected="true">请选择</option>');&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;        $.each(data, function(i, obj) {&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;            var option = $('<option />');&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;            option.val(obj);&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;            if(obj==1){&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;                option.text("首页搜索");&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;            }else if(obj==2){&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;                option.text("信息中心搜索");&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;            }else if(obj==3){&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;                option.text("美业资料搜索");&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;            }else if(obj==4){&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;                option.text("采美百科搜索");&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;            }else if(obj==6){&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;                option.text("管理员添加");&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;            }&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;            $('#search').append(option);&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;        });&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;    },&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;    error : function() {&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;        alert("服务异常!");&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;    }&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;});&ndash;%&gt;--%>
+        <%--}--%>
+        <%--//选中所有--%>
+        <%--function allCkbfun(ckb){--%>
+        <%--    var isChecked = ckb.checked;--%>
+        <%--    $(".check-item").attr('checked', isChecked);--%>
+        <%--    if(true==isChecked){--%>
+        <%--        $(".check-item").parents(".item-info").addClass("row-selected");--%>
+        <%--    }else{--%>
+        <%--        $(".check-item").parents(".item-info").removeClass("row-selected");--%>
+        <%--    }--%>
+        <%--}--%>
+        <%--//复选框选单击事件--%>
+        <%--function checkfun(ckb){--%>
+        <%--    var isChecked = ckb.checked;--%>
+        <%--    if(true==isChecked){--%>
+        <%--        $(ckb).parents(".item-info").addClass("row-selected");--%>
+        <%--    }else{--%>
+        <%--        $(ckb).parents(".item-info").removeClass("row-selected");--%>
+        <%--    }--%>
+        <%--}--%>
+        <%--//加入关键词库--%>
+        <%--async function updateEnabledStatus(ids,keys){--%>
+        <%--    var msg='确定加入关键词库?';--%>
+        <%--    // if('0'==status){--%>
+        <%--    //     msg='确定停用?';--%>
+        <%--    // }--%>
+        <%--    const result = await verifications(keys)--%>
+        <%--    if(result !== 'ok'){--%>
+        <%--        return confirm('选中的关键词中部分在关键键词词库已存在!')--%>
+        <%--    }else{--%>
+        <%--    top.$.jBox.confirm(msg,'系统提示',function(v){--%>
+        <%--        if(v=='ok'){--%>
+        <%--            $.post("${ctx}/product/keywordFrequency/addKeyWordList",{'ids':ids}, function(data) {--%>
+        <%--                $("#searchForm").submit();--%>
+        <%--            },"JSON");//这里返回的类型有:json,html,xml,text--%>
+        <%--        }--%>
+        <%--        top.$.jBox.tip('加入关键词库成功', 'success');--%>
+        <%--        // window.location.reload();--%>
+        <%--        &lt;%&ndash;window.location.href = "${ctx}/product/keywordFrequency/getKeyInfo";&ndash;%&gt;--%>
+        <%--        window.location.href = '${ctx}/product/keywordFrequency/getKeyInfo/' ;--%>
+
+        <%--        return;--%>
+        <%--    });--%>
+        <%--    }--%>
+        <%--}--%>
+        <%--//删除关键词--%>
+        <%--function delEnabledStatus(ids){--%>
+        <%--    var msg='确定删除关键词?';--%>
+        <%--    // if('0'==status){--%>
+        <%--    //     msg='确定停用?';--%>
+        <%--    // }--%>
+        <%--    top.$.jBox.confirm(msg,'系统提示',function(v,h,f){--%>
+        <%--        if(v=='ok'){--%>
+        <%--            $.post("${ctx}/product/keywordFrequency/delKeyWordById",{'id':ids}, function(data) {--%>
+        <%--                $("#searchForm").submit();--%>
+        <%--            },"JSON");//这里返回的类型有:json,html,xml,text--%>
+        <%--        }--%>
+        <%--        // top.$.jBox.tip('删除成功', 'success');--%>
+        <%--        // window.location.reload();--%>
+        <%--        return;--%>
+        <%--    },{buttonsFocus:1,persistent: true});--%>
+        <%--}--%>
+        <%--function updateStatus(){--%>
+        <%--    var items = new Array();--%>
+        <%--    $items=$('.check-item:checked');--%>
+        <%--    var keyitems = new Array();--%>
+        <%--    if(0==$items.length){--%>
+        <%--        top.$.jBox.tip('请选择需要加入关键词库的数据', 'error');--%>
+        <%--        return;--%>
+        <%--    }--%>
+        <%--    $items.each(function(i){--%>
+        <%--        items.push($(this).parents(".item-info").attr("id"));--%>
+        <%--        keyitems.push($(this).parents(".item-info").attr("name"));--%>
+        <%--    });--%>
+        <%--    console.log(keyitems);--%>
+        <%--    updateEnabledStatus(items.toString(),keyitems.toString());--%>
+        <%--}--%>
+        <%--function getSelectKeywords(){--%>
+        <%--    var items = new Array();--%>
+        <%--    $items=$('.check-item:checked');--%>
+        <%--    if(0==$items.length){--%>
+        <%--        top.$.jBox.tip('请选择需要导出的关键词', 'error');--%>
+        <%--        return;--%>
+        <%--    }--%>
+        <%--    $items.each(function(i){--%>
+        <%--        items.push($(this).parents(".item-info").attr("id"));--%>
+        <%--    });--%>
+        <%--    exportKeyword(items.toString());--%>
+        <%--}--%>
+        <%--//导出关键词--%>
+        <%--   function exportKeyword(ids){--%>
+        <%--        window.location.href = "${ctx}/product/keywordFrequency/export?ids=" + ids;--%>
+        <%--   }--%>
+
+        <%--&lt;%&ndash;function verification(key){&ndash;%&gt;--%>
+        <%--&lt;%&ndash;    return new Promise(function(resolve, reject){&ndash;%&gt;--%>
+        <%--&lt;%&ndash;        $.ajax({&ndash;%&gt;--%>
+        <%--&lt;%&ndash;            //几个参数需要注意一下&ndash;%&gt;--%>
+        <%--&lt;%&ndash;            type: "get",//方法类型&ndash;%&gt;--%>
+        <%--&lt;%&ndash;            dataType:"json",&ndash;%&gt;--%>
+        <%--&lt;%&ndash;            url: "${ctx}/product/keywordFrequency/verificationKeword?keyword="+key ,//url&ndash;%&gt;--%>
+        <%--&lt;%&ndash;            success: function (data) {&ndash;%&gt;--%>
+        <%--&lt;%&ndash;                resolve('ok')&ndash;%&gt;--%>
+        <%--&lt;%&ndash;                if(data=="-1"){&ndash;%&gt;--%>
+        <%--&lt;%&ndash;                    reject('关键词已存在')&ndash;%&gt;--%>
+        <%--&lt;%&ndash;                }else{&ndash;%&gt;--%>
+        <%--&lt;%&ndash;                    resolve()&ndash;%&gt;--%>
+        <%--&lt;%&ndash;                }&ndash;%&gt;--%>
+        <%--&lt;%&ndash;            },&ndash;%&gt;--%>
+        <%--&lt;%&ndash;            error : function() {&ndash;%&gt;--%>
+        <%--&lt;%&ndash;                alert("服务异常!");&ndash;%&gt;--%>
+        <%--&lt;%&ndash;            }&ndash;%&gt;--%>
+        <%--&lt;%&ndash;        });&ndash;%&gt;--%>
+        <%--&lt;%&ndash;    })&ndash;%&gt;--%>
+        <%--&lt;%&ndash;}&ndash;%&gt;--%>
 
 
         <%--function verification(key){--%>
         <%--function verification(key){--%>
         <%--    return new Promise(function(resolve, reject){--%>
         <%--    return new Promise(function(resolve, reject){--%>
@@ -158,194 +194,176 @@
         <%--            dataType:"json",--%>
         <%--            dataType:"json",--%>
         <%--            url: "${ctx}/product/keywordFrequency/verificationKeword?keyword="+key ,//url--%>
         <%--            url: "${ctx}/product/keywordFrequency/verificationKeword?keyword="+key ,//url--%>
         <%--            success: function (data) {--%>
         <%--            success: function (data) {--%>
-        <%--                resolve('ok')--%>
+        <%--                console.log('verification', data)--%>
         <%--                if(data=="-1"){--%>
         <%--                if(data=="-1"){--%>
-        <%--                    reject('关键词已存在')--%>
+        <%--                    resolve('faild')--%>
         <%--                }else{--%>
         <%--                }else{--%>
-        <%--                    resolve()--%>
+        <%--                    resolve('ok')--%>
         <%--                }--%>
         <%--                }--%>
         <%--            },--%>
         <%--            },--%>
         <%--            error : function() {--%>
         <%--            error : function() {--%>
-        <%--                alert("服务异常!");--%>
+        <%--                reject('服务器异常')--%>
         <%--            }--%>
         <%--            }--%>
         <%--        });--%>
         <%--        });--%>
         <%--    })--%>
         <%--    })--%>
         <%--}--%>
         <%--}--%>
+        <%--function verifications(key){--%>
+        <%--    return new Promise(function(resolve, reject){--%>
+        <%--        $.ajax({--%>
+        <%--            //几个参数需要注意一下--%>
+        <%--            type: "get",//方法类型--%>
+        <%--            dataType:"json",--%>
+        <%--            url: "${ctx}/product/keywordFrequency/verificationKewords?keywords="+key ,//url--%>
+        <%--            success: function (data) {--%>
+        <%--                console.log('verification', data)--%>
+        <%--                if(data=="-1"){--%>
+        <%--                    resolve('faild')--%>
+        <%--                }else{--%>
+        <%--                    resolve('ok')--%>
+        <%--                }--%>
+        <%--            },--%>
+        <%--            error : function() {--%>
+        <%--                reject('服务器异常')--%>
+        <%--            }--%>
+        <%--        });--%>
+        <%--    })--%>
+        <%--}--%>
+        <%--function joinKeywordLibrary(keyId){--%>
+        <%--    &lt;%&ndash;return new Promise(function(resolve, reject){&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;    $.ajax({&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;        //几个参数需要注意一下&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;        type: "get",//方法类型&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;        dataType:"json",&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;        url: "${ctx}/product/keywordFrequency/addKeyWordList?ids=" + keyId ,//url&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;        success: function (data) {&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;            console.log('joinKeywordLibrary', data)&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;            resolve()&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;        },&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;        error : function() {&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;            reject('加入关键词库失败')&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;        }&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;    });&ndash;%&gt;--%>
+        <%--    &lt;%&ndash;})&ndash;%&gt;--%>
 
 
-        function verification(key){
-            return new Promise(function(resolve, reject){
-                $.ajax({
-                    //几个参数需要注意一下
-                    type: "get",//方法类型
-                    dataType:"json",
-                    url: "${ctx}/product/keywordFrequency/verificationKeword?keyword="+key ,//url
-                    success: function (data) {
-                        console.log('verification', data)
-                        if(data=="-1"){
-                            resolve('faild')
-                        }else{
-                            resolve('ok')
-                        }
-                    },
-                    error : function() {
-                        reject('服务器异常')
-                    }
-                });
-            })
-        }
-        function verifications(key){
-            return new Promise(function(resolve, reject){
-                $.ajax({
-                    //几个参数需要注意一下
-                    type: "get",//方法类型
-                    dataType:"json",
-                    url: "${ctx}/product/keywordFrequency/verificationKewords?keywords="+key ,//url
-                    success: function (data) {
-                        console.log('verification', data)
-                        if(data=="-1"){
-                            resolve('faild')
-                        }else{
-                            resolve('ok')
-                        }
-                    },
-                    error : function() {
-                        reject('服务器异常')
-                    }
-                });
-            })
-        }
-        function joinKeywordLibrary(keyId){
-            <%--return new Promise(function(resolve, reject){--%>
-            <%--    $.ajax({--%>
-            <%--        //几个参数需要注意一下--%>
-            <%--        type: "get",//方法类型--%>
-            <%--        dataType:"json",--%>
-            <%--        url: "${ctx}/product/keywordFrequency/addKeyWordList?ids=" + keyId ,//url--%>
-            <%--        success: function (data) {--%>
-            <%--            console.log('joinKeywordLibrary', data)--%>
-            <%--            resolve()--%>
-            <%--        },--%>
-            <%--        error : function() {--%>
-            <%--            reject('加入关键词库失败')--%>
-            <%--        }--%>
-            <%--    });--%>
-            <%--})--%>
-
-        }
+        <%--}--%>
 
 
-        async  function onJoinKeywordLibrary(keyId, key){
-            try{
-                const result = await verification(key)
-                if(result !== 'ok'){
-                    return confirm('该关键词在关键键词词库已存在!')
-                }
-                const confirmRes = confirm('确认将关键词加入关键词库吗?')
-                console.log('confirmRes', confirmRes)
-                if(!confirmRes){
-                    return
-                }
-                // await joinKeywordLibrary(keyId)
-                await fetch("${ctx}/product/keywordFrequency/addKeyWordList?ids=" + keyId)
-                top.$.jBox.tip('添加成功', 'success');
-                window.location.href = '${ctx}/product/keywordFrequency/getKeyInfo/' ;
-            }catch (e){
-                alert(e)
-            }
-        }
+        <%--async  function onJoinKeywordLibrary(keyId, key){--%>
+        <%--    try{--%>
+        <%--        const result = await verification(key)--%>
+        <%--        if(result !== 'ok'){--%>
+        <%--            return confirm('该关键词在关键键词词库已存在!')--%>
+        <%--        }--%>
+        <%--        const confirmRes = confirm('确认将关键词加入关键词库吗?')--%>
+        <%--        console.log('confirmRes', confirmRes)--%>
+        <%--        if(!confirmRes){--%>
+        <%--            return--%>
+        <%--        }--%>
+        <%--        // await joinKeywordLibrary(keyId)--%>
+        <%--        await fetch("${ctx}/product/keywordFrequency/addKeyWordList?ids=" + keyId)--%>
+        <%--        top.$.jBox.tip('添加成功', 'success');--%>
+        <%--        window.location.href = '${ctx}/product/keywordFrequency/getKeyInfo/' ;--%>
+        <%--    }catch (e){--%>
+        <%--        alert(e)--%>
+        <%--    }--%>
+        <%--}--%>
     </script>
     </script>
 </head>
 </head>
 <body>
 <body>
-<ul class="nav nav-tabs">
-    <li class="active">用户关键词统计</li>
-<%--    <shiro:hasPermission name="user:newCmClub:edit"><li><a href="${ctx}/new/user/cmSp/cmSpForm">添加协销人员</a></li></shiro:hasPermission>--%>
-<%--    <li><a href="${ctx}/serviceteam/cmServiceteamRole/">协销小组</a></li>--%>
-<%--    <li><a href="${ctx}/new/user/cmSp/leader/">协销总管理员</a></li>--%>
-</ul>
-<form:form id="searchForm" modelAttribute="searchFrequency" action="${ctx}/product/keywordFrequency/getKeyInfo/" method="post" class="breadcrumb form-search">
-    <sys:message content="${message}"/>
-    <input id="pageNo" name="pageNo" type="hidden" value="${pageNo}"/>
-    <input id="pageSize" name="pageSize" type="hidden" value="${pageSize}"/>
-    <div class="ul-form">
-        <label>关键词:</label>
-        <form:input path="keyword" htmlEscape="false" maxlength="20" class="input-medium"/>
-        <label>来源:</label>
-        <form:select path="fromSearch" class="input-medium" id="search">
-            <form:option value="" label="请选择"/>
-            <form:option value="1" label="首页搜索"/>
-            <form:option value="2" label="信息中心搜索"/>
-            <form:option value="3" label="美业资料搜索"/>
-            <form:option value="4" label="采美百科"/>
-            <form:option value="6" label="管理员添加"/>
-            <%--            <form:options items="${seacherFrom}" itemLabel="fromSearch" itemValue="id"--%>
-<%--                          htmlEscape="false"/>--%>
-        </form:select>
-        &nbsp;&nbsp;<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>
-        &nbsp;&nbsp;<input id="addKeyWord" class="btn btn-primary" type="button" value="加入关键词库" onclick="updateStatus()"/>
-        &nbsp;&nbsp;<input id="export" class="btn btn-primary" type="button" value="导出" onclick="getSelectKeywords()"/>
-    </div>
-</form:form>
-<table id="contentTable" class="table table-striped table-bordered table-condensed">
-    <thead>
-    <tr>
-        <th style="width:20px;"><input class="check-all" type="checkbox" onclick="allCkbfun(this);"/></th>
-        <th>序号</th>
-        <th>关键词</th>
-        <th>搜索来源</th>
-        <th>搜索次数</th>
-        <shiro:hasPermission name="user:newCmClub:edit"><th>操作</th></shiro:hasPermission>
-    </tr>
-    </thead>
-    <tbody>
-    <c:forEach items="${keyInfo.list}" var="newCmSp" varStatus="status">
-        <tr class="item-info" id="${newCmSp.keyId}" name="${newCmSp.keyword}">
-            <td><input class="check-item" type="checkbox" id="checkbox" value="" onclick="checkfun(this)"/></td>
-            <td>${status.index+1}</td>
-                <%--<td>${newCmSp.name}</td>--%>
-            <td>${newCmSp.keyword}</td>
-            <td>
-                <c:if test="${newCmSp.fromSearch eq 1}">
-                    首页搜索
-                </c:if>
-                <c:if test="${newCmSp.fromSearch eq 2}">
-                    信息中心搜索
-                </c:if>
-                <c:if test="${newCmSp.fromSearch eq 3}">
-                    美业资料搜索
-                </c:if>
-                <c:if test="${newCmSp.fromSearch eq 4}">
-                    采美百科搜索
-                </c:if>
-                <c:if test="${newCmSp.fromSearch eq 6}">
-                    管理员添加
-                </c:if>
-            </td>
-                <%--<td>${newCmSp.spIdentity}</td>--%>
-            <td>${newCmSp.frequency}</td>
-            <shiro:hasPermission name="user:newCmClub:edit">
-                <td>
-<%--                    <c:if test="${newCmSp.status eq 90 || newCmSp.status eq 91}">--%>
-<%--                        onclick="updatePwd(${newCmSp.serviceProviderID})"--%>
-<%--                        <a onclick="updateEnabledStatus('${newCmSp.keyId}')">加入关键词库</a>--%>
-<%--                        <a href="${ctx}/product/keywordFrequency/addKeyWordList?ids=${newCmSp.keyId}" onclick="return confirmx('确认将关键词加入关键词库吗?', this.href)">加入关键词库</a>--%>
-                            <a href="javascript:void(0);" onclick="onJoinKeywordLibrary(${newCmSp.keyId},'${newCmSp.keyword}')">加入关键词库</a>
-<%--                         <a href="${ctx}/product/keywordFrequency/addKeyWordList?ids=${newCmSp.keyId}" onclick="verification('${newCmSp.keyword}')">加入关键词库</a>--%>
+<%--<ul class="nav nav-tabs">--%>
+<%--    <li class="active">用户关键词统计</li>--%>
+<%--&lt;%&ndash;    <shiro:hasPermission name="user:newCmClub:edit"><li><a href="${ctx}/new/user/cmSp/cmSpForm">添加协销人员</a></li></shiro:hasPermission>&ndash;%&gt;--%>
+<%--&lt;%&ndash;    <li><a href="${ctx}/serviceteam/cmServiceteamRole/">协销小组</a></li>&ndash;%&gt;--%>
+<%--&lt;%&ndash;    <li><a href="${ctx}/new/user/cmSp/leader/">协销总管理员</a></li>&ndash;%&gt;--%>
+<%--</ul>--%>
+<%--<form:form id="searchForm" modelAttribute="searchFrequency" action="${ctx}/product/keywordFrequency/getKeyInfo/" method="post" class="breadcrumb form-search">--%>
+<%--    <sys:message content="${message}"/>--%>
+<%--    <input id="pageNo" name="pageNo" type="hidden" value="${pageNo}"/>--%>
+<%--    <input id="pageSize" name="pageSize" type="hidden" value="${pageSize}"/>--%>
+<%--    <div class="ul-form">--%>
+<%--        <label>关键词:</label>--%>
+<%--        <form:input path="keyword" htmlEscape="false" maxlength="20" class="input-medium"/>--%>
+<%--        <label>来源:</label>--%>
+<%--        <form:select path="fromSearch" class="input-medium" id="search">--%>
+<%--            <form:option value="" label="请选择"/>--%>
+<%--            <form:option value="1" label="首页搜索"/>--%>
+<%--            <form:option value="2" label="信息中心搜索"/>--%>
+<%--            <form:option value="3" label="美业资料搜索"/>--%>
+<%--            <form:option value="4" label="采美百科"/>--%>
+<%--            <form:option value="6" label="管理员添加"/>--%>
+<%--            &lt;%&ndash;            <form:options items="${seacherFrom}" itemLabel="fromSearch" itemValue="id"&ndash;%&gt;--%>
+<%--&lt;%&ndash;                          htmlEscape="false"/>&ndash;%&gt;--%>
+<%--        </form:select>--%>
+<%--        &nbsp;&nbsp;<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>--%>
+<%--        &nbsp;&nbsp;<input id="addKeyWord" class="btn btn-primary" type="button" value="加入关键词库" onclick="updateStatus()"/>--%>
+<%--        &nbsp;&nbsp;<input id="export" class="btn btn-primary" type="button" value="导出" onclick="getSelectKeywords()"/>--%>
+<%--    </div>--%>
+<%--</form:form>--%>
+<%--<table id="contentTable" class="table table-striped table-bordered table-condensed">--%>
+<%--    <thead>--%>
+<%--    <tr>--%>
+<%--        <th style="width:20px;"><input class="check-all" type="checkbox" onclick="allCkbfun(this);"/></th>--%>
+<%--        <th>序号</th>--%>
+<%--        <th>关键词</th>--%>
+<%--        <th>搜索来源</th>--%>
+<%--        <th>搜索次数</th>--%>
+<%--        <shiro:hasPermission name="user:newCmClub:edit"><th>操作</th></shiro:hasPermission>--%>
+<%--    </tr>--%>
+<%--    </thead>--%>
+<%--    <tbody>--%>
+<%--    <c:forEach items="${keyInfo.list}" var="newCmSp" varStatus="status">--%>
+<%--        <tr class="item-info" id="${newCmSp.keyId}" name="${newCmSp.keyword}">--%>
+<%--            <td><input class="check-item" type="checkbox" id="checkbox" value="" onclick="checkfun(this)"/></td>--%>
+<%--            <td>${status.index+1}</td>--%>
+<%--                &lt;%&ndash;<td>${newCmSp.name}</td>&ndash;%&gt;--%>
+<%--            <td>${newCmSp.keyword}</td>--%>
+<%--            <td>--%>
+<%--                <c:if test="${newCmSp.fromSearch eq 1}">--%>
+<%--                    首页搜索--%>
+<%--                </c:if>--%>
+<%--                <c:if test="${newCmSp.fromSearch eq 2}">--%>
+<%--                    信息中心搜索--%>
+<%--                </c:if>--%>
+<%--                <c:if test="${newCmSp.fromSearch eq 3}">--%>
+<%--                    美业资料搜索--%>
+<%--                </c:if>--%>
+<%--                <c:if test="${newCmSp.fromSearch eq 4}">--%>
+<%--                    采美百科搜索--%>
+<%--                </c:if>--%>
+<%--                <c:if test="${newCmSp.fromSearch eq 6}">--%>
+<%--                    管理员添加--%>
+<%--                </c:if>--%>
+<%--            </td>--%>
+<%--                &lt;%&ndash;<td>${newCmSp.spIdentity}</td>&ndash;%&gt;--%>
+<%--            <td>${newCmSp.frequency}</td>--%>
+<%--            <shiro:hasPermission name="user:newCmClub:edit">--%>
+<%--                <td>--%>
+<%--&lt;%&ndash;                    <c:if test="${newCmSp.status eq 90 || newCmSp.status eq 91}">&ndash;%&gt;--%>
+<%--&lt;%&ndash;                        onclick="updatePwd(${newCmSp.serviceProviderID})"&ndash;%&gt;--%>
+<%--&lt;%&ndash;                        <a onclick="updateEnabledStatus('${newCmSp.keyId}')">加入关键词库</a>&ndash;%&gt;--%>
+<%--&lt;%&ndash;                        <a href="${ctx}/product/keywordFrequency/addKeyWordList?ids=${newCmSp.keyId}" onclick="return confirmx('确认将关键词加入关键词库吗?', this.href)">加入关键词库</a>&ndash;%&gt;--%>
+<%--                            <a href="javascript:void(0);" onclick="onJoinKeywordLibrary(${newCmSp.keyId},'${newCmSp.keyword}')">加入关键词库</a>--%>
+<%--&lt;%&ndash;                         <a href="${ctx}/product/keywordFrequency/addKeyWordList?ids=${newCmSp.keyId}" onclick="verification('${newCmSp.keyword}')">加入关键词库</a>&ndash;%&gt;--%>
 
 
-<%--                        href="${ctx}/new/user/cmSp/cmSpEdit?id=${newCmSp.serviceProviderID}"--%>
-                        <a href="${ctx}/product/keywordFrequency/form?keyId=${newCmSp.keyId}&status=1&keyword=${newCmSp.keyword}">编辑</a>
+<%--&lt;%&ndash;                        href="${ctx}/new/user/cmSp/cmSpEdit?id=${newCmSp.serviceProviderID}"&ndash;%&gt;--%>
+<%--                        <a href="${ctx}/product/keywordFrequency/form?keyId=${newCmSp.keyId}&status=1&keyword=${newCmSp.keyword}">编辑</a>--%>
 
 
-<%--                        onclick="sendMsg(${newCmSp.serviceProviderID})"--%>
-                            <a href="${ctx}/product/keywordFrequency/delKeyWordById?id=${newCmSp.keyId}&status=1" onclick="return confirmx('确认要删除该关键词吗?', this.href)">删除</a>
-<%--                        <a href="javascript:void(0);" onclick="delEnabledStatus('${newCmSp.keyId}')">删除</a>--%>
-<%--                        <a href="${ctx}/product/keywordFrequency/delKeyWordById?id=${newCmSp.keyId}">删除2</a>--%>
+<%--&lt;%&ndash;                        onclick="sendMsg(${newCmSp.serviceProviderID})"&ndash;%&gt;--%>
+<%--                            <a href="${ctx}/product/keywordFrequency/delKeyWordById?id=${newCmSp.keyId}&status=1" onclick="return confirmx('确认要删除该关键词吗?', this.href)">删除</a>--%>
+<%--&lt;%&ndash;                        <a href="javascript:void(0);" onclick="delEnabledStatus('${newCmSp.keyId}')">删除</a>&ndash;%&gt;--%>
+<%--&lt;%&ndash;                        <a href="${ctx}/product/keywordFrequency/delKeyWordById?id=${newCmSp.keyId}">删除2</a>&ndash;%&gt;--%>
 
 
-<%--                    </c:if>--%>
-                </td>
-            </shiro:hasPermission>
-        </tr>
-    </c:forEach>
-    </tbody>
-</table>
-<div class="pagination">${keyInfo}</div>
+<%--&lt;%&ndash;                    </c:if>&ndash;%&gt;--%>
+<%--                </td>--%>
+<%--            </shiro:hasPermission>--%>
+<%--        </tr>--%>
+<%--    </c:forEach>--%>
+<%--    </tbody>--%>
+<%--</table>--%>
+<%--<div class="pagination">${keyInfo}</div>--%>
+<h1>
+    <input type="button" onclick="getNewManager()" value="点此前往新后台"></input>
+</h1>
 </body>
 </body>
 </html>
 </html>
 
 
+

+ 458 - 0
src/main/webapp/static/bootstrap-select/css/bootstrap-select.css

@@ -0,0 +1,458 @@
+/*!
+ * Bootstrap-select v1.13.14 (https://developer.snapappointments.com/bootstrap-select)
+ *
+ * Copyright 2012-2020 SnapAppointments, LLC
+ * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
+ */
+
+@-webkit-keyframes bs-notify-fadeOut {
+  0% {
+    opacity: 0.9;
+  }
+  100% {
+    opacity: 0;
+  }
+}
+@-o-keyframes bs-notify-fadeOut {
+  0% {
+    opacity: 0.9;
+  }
+  100% {
+    opacity: 0;
+  }
+}
+@keyframes bs-notify-fadeOut {
+  0% {
+    opacity: 0.9;
+  }
+  100% {
+    opacity: 0;
+  }
+}
+select.bs-select-hidden,
+.bootstrap-select > select.bs-select-hidden,
+select.selectpicker {
+  display: none !important;
+}
+.bootstrap-select {
+  width: 220px \0;
+  /*IE9 and below*/
+  vertical-align: middle;
+}
+.bootstrap-select > .dropdown-toggle {
+  position: relative;
+  width: 100%;
+  text-align: right;
+  white-space: nowrap;
+  display: -webkit-inline-box;
+  display: -webkit-inline-flex;
+  display: -ms-inline-flexbox;
+  display: inline-flex;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  -webkit-box-pack: justify;
+  -webkit-justify-content: space-between;
+      -ms-flex-pack: justify;
+          justify-content: space-between;
+}
+.bootstrap-select > .dropdown-toggle:after {
+  margin-top: -1px;
+}
+.bootstrap-select > .dropdown-toggle.bs-placeholder,
+.bootstrap-select > .dropdown-toggle.bs-placeholder:hover,
+.bootstrap-select > .dropdown-toggle.bs-placeholder:focus,
+.bootstrap-select > .dropdown-toggle.bs-placeholder:active {
+  color: #999;
+}
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:hover,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:hover,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:hover,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:hover,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:hover,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:hover,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:focus,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:focus,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:focus,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:focus,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:focus,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:focus,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:active,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:active,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:active,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:active,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:active,
+.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:active {
+  color: rgba(255, 255, 255, 0.5);
+}
+.bootstrap-select > select {
+  position: absolute !important;
+  bottom: 0;
+  left: 50%;
+  display: block !important;
+  width: 0.5px !important;
+  height: 100% !important;
+  padding: 0 !important;
+  opacity: 0 !important;
+  border: none;
+  z-index: 0 !important;
+}
+.bootstrap-select > select.mobile-device {
+  top: 0;
+  left: 0;
+  display: block !important;
+  width: 100% !important;
+  z-index: 2 !important;
+}
+.has-error .bootstrap-select .dropdown-toggle,
+.error .bootstrap-select .dropdown-toggle,
+.bootstrap-select.is-invalid .dropdown-toggle,
+.was-validated .bootstrap-select select:invalid + .dropdown-toggle {
+  border-color: #b94a48;
+}
+.bootstrap-select.is-valid .dropdown-toggle,
+.was-validated .bootstrap-select select:valid + .dropdown-toggle {
+  border-color: #28a745;
+}
+.bootstrap-select.fit-width {
+  width: auto !important;
+}
+.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
+  width: 220px;
+}
+.bootstrap-select > select.mobile-device:focus + .dropdown-toggle,
+.bootstrap-select .dropdown-toggle:focus {
+  outline: thin dotted #333333 !important;
+  outline: 5px auto -webkit-focus-ring-color !important;
+  outline-offset: -2px;
+}
+.bootstrap-select.form-control {
+  margin-bottom: 0;
+  padding: 0;
+  border: none;
+  height: auto;
+}
+:not(.input-group) > .bootstrap-select.form-control:not([class*="col-"]) {
+  width: 100%;
+}
+.bootstrap-select.form-control.input-group-btn {
+  float: none;
+  z-index: auto;
+}
+.form-inline .bootstrap-select,
+.form-inline .bootstrap-select.form-control:not([class*="col-"]) {
+  width: auto;
+}
+.bootstrap-select:not(.input-group-btn),
+.bootstrap-select[class*="col-"] {
+  float: none;
+  display: inline-block;
+  margin-left: 0;
+}
+.bootstrap-select.dropdown-menu-right,
+.bootstrap-select[class*="col-"].dropdown-menu-right,
+.row .bootstrap-select[class*="col-"].dropdown-menu-right {
+  float: right;
+}
+.form-inline .bootstrap-select,
+.form-horizontal .bootstrap-select,
+.form-group .bootstrap-select {
+  margin-bottom: 0;
+}
+.form-group-lg .bootstrap-select.form-control,
+.form-group-sm .bootstrap-select.form-control {
+  padding: 0;
+}
+.form-group-lg .bootstrap-select.form-control .dropdown-toggle,
+.form-group-sm .bootstrap-select.form-control .dropdown-toggle {
+  height: 100%;
+  font-size: inherit;
+  line-height: inherit;
+  border-radius: inherit;
+}
+.bootstrap-select.form-control-sm .dropdown-toggle,
+.bootstrap-select.form-control-lg .dropdown-toggle {
+  font-size: inherit;
+  line-height: inherit;
+  border-radius: inherit;
+}
+.bootstrap-select.form-control-sm .dropdown-toggle {
+  padding: 0.25rem 0.5rem;
+}
+.bootstrap-select.form-control-lg .dropdown-toggle {
+  padding: 0.5rem 1rem;
+}
+.form-inline .bootstrap-select .form-control {
+  width: 100%;
+}
+.bootstrap-select.disabled,
+.bootstrap-select > .disabled {
+  cursor: not-allowed;
+}
+.bootstrap-select.disabled:focus,
+.bootstrap-select > .disabled:focus {
+  outline: none !important;
+}
+.bootstrap-select.bs-container {
+  position: absolute;
+  top: 0;
+  left: 0;
+  height: 0 !important;
+  padding: 0 !important;
+}
+.bootstrap-select.bs-container .dropdown-menu {
+  z-index: 1060;
+}
+.bootstrap-select .dropdown-toggle .filter-option {
+  position: static;
+  top: 0;
+  left: 0;
+  float: left;
+  height: 100%;
+  width: 100%;
+  text-align: left;
+  overflow: hidden;
+  -webkit-box-flex: 0;
+  -webkit-flex: 0 1 auto;
+      -ms-flex: 0 1 auto;
+          flex: 0 1 auto;
+}
+.bs3.bootstrap-select .dropdown-toggle .filter-option {
+  padding-right: inherit;
+}
+.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option {
+  position: absolute;
+  padding-top: inherit;
+  padding-bottom: inherit;
+  padding-left: inherit;
+  float: none;
+}
+.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option .filter-option-inner {
+  padding-right: inherit;
+}
+.bootstrap-select .dropdown-toggle .filter-option-inner-inner {
+  overflow: hidden;
+}
+.bootstrap-select .dropdown-toggle .filter-expand {
+  width: 0 !important;
+  float: left;
+  opacity: 0 !important;
+  overflow: hidden;
+}
+.bootstrap-select .dropdown-toggle .caret {
+  position: absolute;
+  top: 50%;
+  right: 12px;
+  margin-top: -2px;
+  vertical-align: middle;
+}
+.input-group .bootstrap-select.form-control .dropdown-toggle {
+  border-radius: inherit;
+}
+.bootstrap-select[class*="col-"] .dropdown-toggle {
+  width: 100%;
+}
+.bootstrap-select .dropdown-menu {
+  min-width: 100%;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.bootstrap-select .dropdown-menu > .inner:focus {
+  outline: none !important;
+}
+.bootstrap-select .dropdown-menu.inner {
+  position: static;
+  float: none;
+  border: 0;
+  padding: 0;
+  margin: 0;
+  border-radius: 0;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.bootstrap-select .dropdown-menu li {
+  position: relative;
+}
+.bootstrap-select .dropdown-menu li.active small {
+  color: rgba(255, 255, 255, 0.5) !important;
+}
+.bootstrap-select .dropdown-menu li.disabled a {
+  cursor: not-allowed;
+}
+.bootstrap-select .dropdown-menu li a {
+  cursor: pointer;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+}
+.bootstrap-select .dropdown-menu li a.opt {
+  position: relative;
+  padding-left: 2.25em;
+}
+.bootstrap-select .dropdown-menu li a span.check-mark {
+  display: none;
+}
+.bootstrap-select .dropdown-menu li a span.text {
+  display: inline-block;
+}
+.bootstrap-select .dropdown-menu li small {
+  padding-left: 0.5em;
+}
+.bootstrap-select .dropdown-menu .notify {
+  position: absolute;
+  bottom: 5px;
+  width: 96%;
+  margin: 0 2%;
+  min-height: 26px;
+  padding: 3px 5px;
+  background: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+  pointer-events: none;
+  opacity: 0.9;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.bootstrap-select .dropdown-menu .notify.fadeOut {
+  -webkit-animation: 300ms linear 750ms forwards bs-notify-fadeOut;
+       -o-animation: 300ms linear 750ms forwards bs-notify-fadeOut;
+          animation: 300ms linear 750ms forwards bs-notify-fadeOut;
+}
+.bootstrap-select .no-results {
+  padding: 3px;
+  background: #f5f5f5;
+  margin: 0 5px;
+  white-space: nowrap;
+}
+.bootstrap-select.fit-width .dropdown-toggle .filter-option {
+  position: static;
+  display: inline;
+  padding: 0;
+}
+.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner,
+.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner-inner {
+  display: inline;
+}
+.bootstrap-select.fit-width .dropdown-toggle .bs-caret:before {
+  content: '\00a0';
+}
+.bootstrap-select.fit-width .dropdown-toggle .caret {
+  position: static;
+  top: auto;
+  margin-top: -1px;
+}
+.bootstrap-select.show-tick .dropdown-menu .selected span.check-mark {
+  position: absolute;
+  display: inline-block;
+  right: 15px;
+  top: 5px;
+}
+.bootstrap-select.show-tick .dropdown-menu li a span.text {
+  margin-right: 34px;
+}
+.bootstrap-select .bs-ok-default:after {
+  content: '';
+  display: block;
+  width: 0.5em;
+  height: 1em;
+  border-style: solid;
+  border-width: 0 0.26em 0.26em 0;
+  -webkit-transform: rotate(45deg);
+      -ms-transform: rotate(45deg);
+       -o-transform: rotate(45deg);
+          transform: rotate(45deg);
+}
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle,
+.bootstrap-select.show-menu-arrow.show > .dropdown-toggle {
+  z-index: 1061;
+}
+.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:before {
+  content: '';
+  border-left: 7px solid transparent;
+  border-right: 7px solid transparent;
+  border-bottom: 7px solid rgba(204, 204, 204, 0.2);
+  position: absolute;
+  bottom: -4px;
+  left: 9px;
+  display: none;
+}
+.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:after {
+  content: '';
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid white;
+  position: absolute;
+  bottom: -4px;
+  left: 10px;
+  display: none;
+}
+.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:before {
+  bottom: auto;
+  top: -4px;
+  border-top: 7px solid rgba(204, 204, 204, 0.2);
+  border-bottom: 0;
+}
+.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:after {
+  bottom: auto;
+  top: -4px;
+  border-top: 6px solid white;
+  border-bottom: 0;
+}
+.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:before {
+  right: 12px;
+  left: auto;
+}
+.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:after {
+  right: 13px;
+  left: auto;
+}
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:before,
+.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:before,
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:after,
+.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:after {
+  display: block;
+}
+.bs-searchbox,
+.bs-actionsbox,
+.bs-donebutton {
+  padding: 4px 8px;
+}
+.bs-actionsbox {
+  width: 100%;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.bs-actionsbox .btn-group button {
+  width: 50%;
+}
+.bs-donebutton {
+  float: left;
+  width: 100%;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.bs-donebutton .btn-group button {
+  width: 100%;
+}
+.bs-searchbox + .bs-actionsbox {
+  padding: 0 8px 4px;
+}
+.bs-searchbox .form-control {
+  margin-bottom: 0;
+  width: 100%;
+  float: none;
+}
+/*# sourceMappingURL=bootstrap-select.css.map */

File diff suppressed because it is too large
+ 0 - 0
src/main/webapp/static/bootstrap-select/css/bootstrap-select.css.map


File diff suppressed because it is too large
+ 5 - 0
src/main/webapp/static/bootstrap-select/css/bootstrap-select.min.css


Some files were not shown because too many files changed in this diff