Browse Source

用户行为优化

huangzhiguo 2 years ago
parent
commit
229c5f6125
37 changed files with 5630 additions and 963 deletions
  1. 23 4
      src/main/java/com/caimei/modules/baike/dao/CmBaikeProductDao.java
  2. 57 0
      src/main/java/com/caimei/modules/baike/entity/CmBaikeProduct.java
  3. 27 1
      src/main/java/com/caimei/modules/baike/entity/CmBaikeType.java
  4. 5 5
      src/main/java/com/caimei/modules/baike/service/CmBaikeHotSearchService.java
  5. 126 63
      src/main/java/com/caimei/modules/baike/service/CmBaikeProductService.java
  6. 230 8
      src/main/java/com/caimei/modules/baike/web/CmBaikeProductController.java
  7. 9 0
      src/main/java/com/caimei/modules/baike/web/CmBaikeTypeController.java
  8. 22 1
      src/main/java/com/caimei/modules/coupon/dao/CmCouponDao.java
  9. 10 1
      src/main/java/com/caimei/modules/coupon/entity/CmCoupon.java
  10. 9 0
      src/main/java/com/caimei/modules/coupon/entity/CmVipCoupon.java
  11. 9 0
      src/main/java/com/caimei/modules/coupon/entity/SvipCouponForm.java
  12. 288 2
      src/main/java/com/caimei/modules/coupon/service/CmVipCouponService.java
  13. 40 0
      src/main/java/com/caimei/modules/coupon/web/CmVipCouponController.java
  14. 3 3
      src/main/java/com/caimei/modules/supers/service/CmSvipPackageService.java
  15. 10 1
      src/main/java/com/caimei/modules/user/entity/ClubTemporary.java
  16. 1 1
      src/main/java/com/caimei/modules/user/entity/CmUser.java
  17. 4 0
      src/main/java/com/caimei/modules/user/service/ClubTemporaryService.java
  18. 15 13
      src/main/java/com/caimei/modules/user/service/CmBehaviorRecordService.java
  19. 10 4
      src/main/java/com/caimei/modules/user/web/newUser/AgencyController.java
  20. 2 1
      src/main/resources/mappings/modules/baike/CmBaikeHotSearchMapper.xml
  21. 56 5
      src/main/resources/mappings/modules/baike/CmBaikeProductMapper.xml
  22. 21 7
      src/main/resources/mappings/modules/baike/CmBaikeTypeMapper.xml
  23. 96 4
      src/main/resources/mappings/modules/coupon/CmCouponMapper.xml
  24. 24 20
      src/main/resources/mappings/modules/user/ClubTemporaryMapper.xml
  25. 1492 402
      src/main/webapp/WEB-INF/views/modules/baikePage/auditBaikeProductPage.jsp
  26. 1913 191
      src/main/webapp/WEB-INF/views/modules/baikePage/checkBaikePage.jsp
  27. 12 12
      src/main/webapp/WEB-INF/views/modules/baikePage/cmBaikeHotSearchForm.jsp
  28. 863 146
      src/main/webapp/WEB-INF/views/modules/baikePage/cmBaikeProductForm.jsp
  29. 41 41
      src/main/webapp/WEB-INF/views/modules/baikePage/cmBaikeProductList.jsp
  30. 166 0
      src/main/webapp/WEB-INF/views/modules/baikePage/cmBaikeTypeForm.jsp
  31. 3 3
      src/main/webapp/WEB-INF/views/modules/baikePage/cmBaikeTypeList.jsp
  32. 8 8
      src/main/webapp/WEB-INF/views/modules/baikePage/shopBaikeProductList.jsp
  33. 8 8
      src/main/webapp/WEB-INF/views/modules/super/cmSvipPackageForm.jsp
  34. 9 2
      src/main/webapp/WEB-INF/views/modules/svip/cmSvipCouponForm.jsp
  35. 4 3
      src/main/webapp/WEB-INF/views/modules/svip/cmSvipCouponList.jsp
  36. 8 1
      src/main/webapp/WEB-INF/views/modules/user/clubTemporaryForm.jsp
  37. 6 2
      src/main/webapp/WEB-INF/views/modules/userNew/recordLinkageForm.jsp

+ 23 - 4
src/main/java/com/caimei/modules/baike/dao/CmBaikeProductDao.java

@@ -1,12 +1,9 @@
 package com.caimei.modules.baike.dao;
 
-import com.caimei.modules.baike.entity.CmBaikeProductFile;
-import com.caimei.modules.baike.entity.CmBaikeProductParam;
-import com.caimei.modules.baike.entity.CmBaikeProductQuestion;
+import com.caimei.modules.baike.entity.*;
 import com.caimei.modules.user.entity.NewCmShop;
 import com.thinkgem.jeesite.common.persistence.CrudDao;
 import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
-import com.caimei.modules.baike.entity.CmBaikeProduct;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;
@@ -43,6 +40,12 @@ public interface CmBaikeProductDao extends CrudDao<CmBaikeProduct> {
 
     void deleteQuestionsByProductId(String id);
 
+    void delMaterialinfoBYProductId(String id);
+
+    void delTextListByEntryId(String id);
+
+
+
     void insertProductImage(@Param("authImage") String authImage, @Param("produtId") String productId, @Param("imageType") int imageType);
 
     void insertProductParam(@Param("name") String name,@Param("content") String content,@Param("productId") String productId);
@@ -73,4 +76,20 @@ public interface CmBaikeProductDao extends CrudDao<CmBaikeProduct> {
 
     void updateRecommendType(@Param("productId") String productId, @Param("recommendType") Integer recommendType);
 
+    List<CmBaikeTextInfo> getTextInfo(@Param("productId") String productId);
+
+    void saveMaterialinfo(CmBaikeReferenceInfo cmBaikeReferenceInfo);
+
+    void upMaterialinfo(CmBaikeReferenceInfo cmBaikeReferenceInfo);
+
+    void insertText(CmBaikeTextInfo cmBaikeTextInfo);
+
+
+    List<CmBaikeReferenceInfo> getMaterialInfo(@Param("productId") Integer productId);
+
+    void delMaterialinfo(CmBaikeReferenceInfo cmBaikeReferenceInfo);
+
+    CmBaikeReferenceInfo getMaterialinfo(CmBaikeReferenceInfo cmBaikeReferenceInfo);
+
+
 }

+ 57 - 0
src/main/java/com/caimei/modules/baike/entity/CmBaikeProduct.java

@@ -52,10 +52,58 @@ public class CmBaikeProduct extends DataEntity<CmBaikeProduct> {
 	private Integer emptyNum;	//空数据条数
 	private Date addTime;		// 添加时间
 
+	private String  referenceImgUrl;
+
+	public String getReferenceImgUrl() {
+		return referenceImgUrl;
+	}
+
+	public void setReferenceImgUrl(String referenceImgUrl) {
+		this.referenceImgUrl = referenceImgUrl;
+	}
+
+	private String  referenceList;
+
+	public String getReferenceList() {
+		return referenceList;
+	}
+
+	public void setReferenceList(String referenceList) {
+		this.referenceList = referenceList;
+	}
+	private List<CmBaikeReferenceInfo> materialInfo;
+
+	public List<CmBaikeReferenceInfo> getMaterialInfo() {
+		return materialInfo;
+	}
+
+	public void setMaterialInfo(List<CmBaikeReferenceInfo> materialInfo) {
+		this.materialInfo = materialInfo;
+	}
 
 	private Integer topFlag;	//是否置顶标识:0否,1是
 	private String typeName;	//分类名称
 	private List<CmBaikeProductParam> paramList;	// 参数列表
+	private List<CmBaikeTextInfo> textInfolist;
+
+	public List<CmBaikeTextInfo> getTextInfolist() {
+		return textInfolist;
+	}
+
+	public void setTextInfolist(List<CmBaikeTextInfo> textInfolist) {
+		this.textInfolist = textInfolist;
+	}
+
+	private String textInfolistStr;//正文列表
+
+	public String getTextInfolistStr() {
+		return textInfolistStr;
+	}
+
+	public void setTextInfolistStr(String textInfolistStr) {
+		this.textInfolistStr = textInfolistStr;
+	}
+
 	private List<String> authImageList;			// 产品认证图片列表
 	private List<String> displayImageList;		// 效果展示图片列表
 	private List<CmBaikeProductQuestion> questionList;		//问题列表
@@ -72,6 +120,15 @@ public class CmBaikeProduct extends DataEntity<CmBaikeProduct> {
 	private String fileIds;			// 文件id,以,隔开
 	private String productIds;		// 产品/仪器id,以,隔开
 	private String[] recommendParams;	// 相关推荐产品/仪器json数据
+    private String entryId;//词条id
+
+	public String getEntryId() {
+		return entryId;
+	}
+
+	public void setEntryId(String entryId) {
+		this.entryId = entryId;
+	}
 
 	public CmBaikeProduct() {
 		super();

+ 27 - 1
src/main/java/com/caimei/modules/baike/entity/CmBaikeType.java

@@ -20,7 +20,9 @@ public class CmBaikeType extends DataEntity<CmBaikeType> {
 	private Integer status;		// 状态:0停用,1启用
 	private Date addTime;		// 添加时间
 	private Integer addBy;		// 添加人
-
+    private String pcBanner;	//pc端banner
+	private String appBanner;	//移动端banner
+	private String bannerLink;	//banner跳转链接
 	private String addUserName;		//添加人名称
 	
 	public CmBaikeType() {
@@ -88,4 +90,28 @@ public class CmBaikeType extends DataEntity<CmBaikeType> {
 	public void setAddUserName(String addUserName) {
 		this.addUserName = addUserName;
 	}
+
+	public void setPcBanner(String pcBanner) {
+		this.pcBanner = pcBanner;
+	}
+
+	public void setAppBanner(String appBanner) {
+		this.appBanner = appBanner;
+	}
+
+	public void setBannerLink(String bannerLink) {
+		this.bannerLink = bannerLink;
+	}
+
+	public String getPcBanner() {
+		return pcBanner;
+	}
+
+	public String getAppBanner() {
+		return appBanner;
+	}
+
+	public String getBannerLink() {
+		return bannerLink;
+	}
 }

+ 5 - 5
src/main/java/com/caimei/modules/baike/service/CmBaikeHotSearchService.java

@@ -58,13 +58,13 @@ public class CmBaikeHotSearchService extends CrudService<CmBaikeHotSearchDao, Cm
 
 	@Transactional(readOnly = false)
 	public void saveBanner(CmBaikeBanner cmBaikeBanner) {
-        if (1 == cmBaikeBanner.getBannerType()) {
+//        if (1 == cmBaikeBanner.getBannerType()) {
             cmBaikeBanner.setProductPcBanner(UploadPicUtils.saveImageToServer(cmBaikeBanner.getProductPcBanner()));
             cmBaikeBanner.setProductAppBanner(UploadPicUtils.saveImageToServer(cmBaikeBanner.getProductAppBanner()));
-        } else {
-            cmBaikeBanner.setInstrumentPcBanner(UploadPicUtils.saveImageToServer(cmBaikeBanner.getInstrumentPcBanner()));
-            cmBaikeBanner.setInstrumentAppBanner(UploadPicUtils.saveImageToServer(cmBaikeBanner.getInstrumentAppBanner()));
-        }
+//        } else {
+//            cmBaikeBanner.setInstrumentPcBanner(UploadPicUtils.saveImageToServer(cmBaikeBanner.getInstrumentPcBanner()));
+//            cmBaikeBanner.setInstrumentAppBanner(UploadPicUtils.saveImageToServer(cmBaikeBanner.getInstrumentAppBanner()));
+//        }
 		cmBaikeHotSearchDao.saveBanner(cmBaikeBanner);
 	}
 }

+ 126 - 63
src/main/java/com/caimei/modules/baike/service/CmBaikeProductService.java

@@ -39,43 +39,43 @@ public class CmBaikeProductService extends CrudService<CmBaikeProductDao, CmBaik
 
 	public CmBaikeProduct get(String id) {
 		CmBaikeProduct cmBaikeProduct = super.get(id);
-		String marketTime = cmBaikeProduct.getMarketTime();
-		if (StringUtils.isNotEmpty(marketTime)) {
-			String[] split = marketTime.split("-");
-			int length = split.length;
-			if (length > 0) {
-				cmBaikeProduct.setMarketYear(Integer.parseInt(split[0]));
-				if (length > 1) {
-					String splitMonth = split[1];
-					Integer marketMonth = Integer.parseInt(splitMonth.startsWith("0") ? splitMonth.replace("0", "") : splitMonth);
-					cmBaikeProduct.setMarketMonth(marketMonth);
-					if (length > 2) {
-						String splitDay = split[2];
-						Integer marketDay = Integer.parseInt(splitDay.startsWith("0") ? splitDay.replace("0", "") : splitDay);
-						cmBaikeProduct.setMarketDay(marketDay);
-					}
-				}
-			}
-		}
-		String nmpaTime = cmBaikeProduct.getNmpaTime();
-		if (StringUtils.isNotEmpty(nmpaTime)) {
-			String[] split = nmpaTime.split("-");
-			int length = split.length;
-			if (length > 0) {
-				cmBaikeProduct.setNmpaYear(Integer.parseInt(split[0]));
-				if (length > 1) {
-					String splitMonth = split[1];
-					Integer nmpaMonth = Integer.parseInt(splitMonth.startsWith("0") ? splitMonth.replace("0", "") : splitMonth);
-					cmBaikeProduct.setNmpaMonth(nmpaMonth);
-					if (length > 2) {
-						String splitDay = split[2];
-						Integer nmpaDay = Integer.parseInt(splitDay.startsWith("0") ? splitDay.replace("0", "") : splitDay);
-						cmBaikeProduct.setNmpaDay(nmpaDay);
-					}
-				}
-			}
-
-		}
+//		String marketTime = cmBaikeProduct.getMarketTime();
+//		if (StringUtils.isNotEmpty(marketTime)) {
+//			String[] split = marketTime.split("-");
+//			int length = split.length;
+//			if (length > 0) {
+//				cmBaikeProduct.setMarketYear(Integer.parseInt(split[0]));
+//				if (length > 1) {
+//					String splitMonth = split[1];
+//					Integer marketMonth = Integer.parseInt(splitMonth.startsWith("0") ? splitMonth.replace("0", "") : splitMonth);
+//					cmBaikeProduct.setMarketMonth(marketMonth);
+//					if (length > 2) {
+//						String splitDay = split[2];
+//						Integer marketDay = Integer.parseInt(splitDay.startsWith("0") ? splitDay.replace("0", "") : splitDay);
+//						cmBaikeProduct.setMarketDay(marketDay);
+//					}
+//				}
+//			}
+//		}
+//		String nmpaTime = cmBaikeProduct.getNmpaTime();
+//		if (StringUtils.isNotEmpty(nmpaTime)) {
+//			String[] split = nmpaTime.split("-");
+//			int length = split.length;
+//			if (length > 0) {
+//				cmBaikeProduct.setNmpaYear(Integer.parseInt(split[0]));
+//				if (length > 1) {
+//					String splitMonth = split[1];
+//					Integer nmpaMonth = Integer.parseInt(splitMonth.startsWith("0") ? splitMonth.replace("0", "") : splitMonth);
+//					cmBaikeProduct.setNmpaMonth(nmpaMonth);
+//					if (length > 2) {
+//						String splitDay = split[2];
+//						Integer nmpaDay = Integer.parseInt(splitDay.startsWith("0") ? splitDay.replace("0", "") : splitDay);
+//						cmBaikeProduct.setNmpaDay(nmpaDay);
+//					}
+//				}
+//			}
+//
+//		}
 		return cmBaikeProduct;
 	}
 	
@@ -86,7 +86,29 @@ public class CmBaikeProductService extends CrudService<CmBaikeProductDao, CmBaik
 	public Page<CmBaikeProduct> findPage(Page<CmBaikeProduct> page, CmBaikeProduct cmBaikeProduct) {
 		return super.findPage(page, cmBaikeProduct);
 	}
-	
+	@Transactional(readOnly = false)
+	public void saveMaterialinfo(CmBaikeReferenceInfo cmBaikeReferenceInfo) {
+		cmBaikeProductDao.saveMaterialinfo(cmBaikeReferenceInfo);
+
+	}
+	@Transactional(readOnly = false)
+	public void upMaterialinfo(CmBaikeReferenceInfo cmBaikeReferenceInfo) {
+		cmBaikeProductDao.upMaterialinfo(cmBaikeReferenceInfo);
+
+	}
+
+	@Transactional(readOnly = false)
+	public void delMaterialinfo(CmBaikeReferenceInfo cmBaikeReferenceInfo) {
+		cmBaikeProductDao.delMaterialinfo(cmBaikeReferenceInfo);
+
+	}
+	@Transactional(readOnly = false)
+	public CmBaikeReferenceInfo getMaterialinfo(CmBaikeReferenceInfo cmBaikeReferenceInfo) {
+		return cmBaikeProductDao.getMaterialinfo(cmBaikeReferenceInfo);
+
+	}
+
+
 	@Transactional(readOnly = false)
 	public void save(CmBaikeProduct cmBaikeProduct) {
 		// 保存商品图片
@@ -95,18 +117,20 @@ public class CmBaikeProductService extends CrudService<CmBaikeProductDao, CmBaik
 			cmBaikeProduct.setImage(UploadPicUtils.saveImageToServer(mainImage));
 		}
 		// 保存正品认证二维码
-		String authQrCode = cmBaikeProduct.getAuthQrCode();
-		if (StringUtils.isNotEmpty(authQrCode) && !authQrCode.startsWith("http:")) {
-			cmBaikeProduct.setAuthQrCode(UploadPicUtils.saveImageToServer(authQrCode));
-		}
+//		String authQrCode = cmBaikeProduct.getAuthQrCode();
+//		if (StringUtils.isNotEmpty(authQrCode) && !authQrCode.startsWith("http:")) {
+//			cmBaikeProduct.setAuthQrCode(UploadPicUtils.saveImageToServer(authQrCode));
+//		}
 		// 删除原先的图片/参数/问题数据
 		if (!cmBaikeProduct.getIsNewRecord()) {
 			cmBaikeProductDao.deleteParamsByProductId(cmBaikeProduct.getId());
 			cmBaikeProductDao.deleteImagesByProductId(cmBaikeProduct.getId());
-			cmBaikeProductDao.deleteQuestionsByProductId(cmBaikeProduct.getId());
+			cmBaikeProductDao.delMaterialinfoBYProductId(cmBaikeProduct.getId());
+			cmBaikeProductDao.delTextListByEntryId(cmBaikeProduct.getId());//正文
+
 		}
 		// 保存上市时间和nmpa时间
-		saveTime(cmBaikeProduct);
+//		saveTime(cmBaikeProduct);
 
 		// 管理员审核百科
 		if (null != cmBaikeProduct.getAuditFlag() && 1 == cmBaikeProduct.getAuditFlag()) {
@@ -131,16 +155,16 @@ public class CmBaikeProductService extends CrudService<CmBaikeProductDao, CmBaik
 			cmBaikeProductDao.updateEmptyNum(cmBaikeProduct.getId(), emptyNum);
 		}
 		String productId = cmBaikeProduct.getId();
-		// 保存产品认证图片
-		List<String> authImageList = cmBaikeProduct.getAuthImageList();
-		authImageList.forEach(authImage->{
-			if (StringUtils.isNotEmpty(authImage)) {
-				if (!authImage.startsWith("http:")) {
-					authImage = UploadPicUtils.saveImageToServer(authImage);
-				}
-				cmBaikeProductDao.insertProductImage(authImage, productId, 1);
-			}
-		});
+//		// 保存产品认证图片
+//		List<String> authImageList = cmBaikeProduct.getAuthImageList();
+//		authImageList.forEach(authImage->{
+//			if (StringUtils.isNotEmpty(authImage)) {
+//				if (!authImage.startsWith("http:")) {
+//					authImage = UploadPicUtils.saveImageToServer(authImage);
+//				}
+//				cmBaikeProductDao.insertProductImage(authImage, productId, 1);
+//			}
+//		});
 		// 保存效果展示图片
 		List<String> displayImageList = cmBaikeProduct.getDisplayImageList();
 		displayImageList.forEach(displayImage->{
@@ -153,18 +177,56 @@ public class CmBaikeProductService extends CrudService<CmBaikeProductDao, CmBaik
 		});
 		// 保存参数
 		List<CmBaikeProductParam> paramList = cmBaikeProduct.getParamList();
-		paramList.forEach(param->{
-			if (StringUtils.isNotEmpty(param.getName()) && StringUtils.isNotEmpty(param.getContent())) {
-				cmBaikeProductDao.insertProductParam(param.getName(), param.getContent(), productId);
+		if(null!=paramList&&paramList.size()>0){
+			paramList.forEach(param->{
+				if (StringUtils.isNotEmpty(param.getName()) && StringUtils.isNotEmpty(param.getContent())) {
+					cmBaikeProductDao.insertProductParam(param.getName(), param.getContent(), productId);
+				}
+			});
+		}
+		//保存资料
+		List<CmBaikeReferenceInfo> cmBaikeReferenceInfo = cmBaikeProduct.getMaterialInfo();
+		if(null!=cmBaikeReferenceInfo&&cmBaikeReferenceInfo.size()>0){
+		cmBaikeReferenceInfo.forEach(param->{
+			if(null!=param){
+				if(null==param.getPublicationYear()||" ".equals(param.getPublicationYear())){
+					param.setPublicationYear(null);
+				}
+				if(org.apache.commons.lang.StringUtils.isEmpty(param.getPublicationYearStr())||" ".equals(param.getPublicationYearStr())){
+					param.setPublicationYearStr(null);
+				}
+				if(null==param.getPublishTime()){
+					param.setPublishTime(null);
+				}
+				if(org.apache.commons.lang.StringUtils.isEmpty(param.getPublishTimeStr())||" ".equals(param.getPublishTimeStr())){
+					param.setPublishTimeStr(null);
+				}
+				if(null==param.getAcitationTime()){
+					param.setAcitationTime(null);
+				}
+				if(org.apache.commons.lang.StringUtils.isEmpty(param.getAcitationTimeStr())||" ".equals(param.getAcitationTimeStr())){
+					param.setAcitationTimeStr(null);
+				}
 			}
+				param.setProductId(Integer.valueOf(productId));
+				cmBaikeProductDao.saveMaterialinfo(param);
 		});
+		}
+		//保存正文
+		List<CmBaikeTextInfo> textInfolist = cmBaikeProduct.getTextInfolist();
+		if(null!=textInfolist&&textInfolist.size()>0){
+			textInfolist.forEach(param->{
+				param.setProductId(productId);
+				cmBaikeProductDao.insertText(param);
+			});
+		}
 		// 保存问题
-		List<CmBaikeProductQuestion> questionList = cmBaikeProduct.getQuestionList();
-		questionList.forEach(question->{
-			if (StringUtils.isNotEmpty(question.getQuestion()) && StringUtils.isNotEmpty(question.getAnswer())) {
-				cmBaikeProductDao.insertProductQuestion(question.getQuestion(), question.getAnswer(), productId);
-			}
-		});
+//		List<CmBaikeProductQuestion> questionList = cmBaikeProduct.getQuestionList();
+//		questionList.forEach(question->{
+//			if (StringUtils.isNotEmpty(question.getQuestion()) && StringUtils.isNotEmpty(question.getAnswer())) {
+//				cmBaikeProductDao.insertProductQuestion(question.getQuestion(), question.getAnswer(), productId);
+//			}
+//		});
 	}
 
 	private void saveTime(CmBaikeProduct cmBaikeProduct) {
@@ -344,6 +406,7 @@ public class CmBaikeProductService extends CrudService<CmBaikeProductDao, CmBaik
 			productFile.setFileTitle(fileTitle);
 			productFile.setFileName(fileName);
 			productFile.setOssName(filePath);
+			productFile.setOssUrl(url);
 			cmBaikeProductDao.insertProductFile(productFile);
 			productFile.setOssUrl(url);
 			map.put("success", true);

+ 230 - 8
src/main/java/com/caimei/modules/baike/web/CmBaikeProductController.java

@@ -5,6 +5,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.caimei.modules.baike.dao.CmBaikeProductDao;
 import com.caimei.modules.baike.dao.CmBaikeProductRecommendDao;
 import com.caimei.modules.baike.dao.CmBaikeTypeDao;
@@ -21,14 +22,12 @@ import com.caimei.modules.user.entity.NewCmShop;
 import com.caimei.redis.RedisService;
 import com.caimei.utils.AppUtils;
 import com.google.common.collect.Maps;
+import com.google.gson.Gson;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.ModelAttribute;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
@@ -38,6 +37,7 @@ import com.thinkgem.jeesite.common.web.BaseController;
 import com.thinkgem.jeesite.common.utils.StringUtils;
 import com.caimei.modules.baike.service.CmBaikeProductService;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -112,10 +112,11 @@ public class CmBaikeProductController extends BaseController {
 	public String form(CmBaikeProduct cmBaikeProduct, Model model) {
 		CmBaikeType cmBaikeType = new CmBaikeType();
 		cmBaikeType.setTypeSort(cmBaikeProduct.getCommodityType());
+		cmBaikeType.setStatus(1);
 		// 分类列表
 		List<CmBaikeType> typeList = cmBaikeTypeService.findList(cmBaikeType);
 		// 商品类型
-		String commodityType = cmBaikeProduct.getCommodityType() == 1 ? "产品" : "仪器";
+		String commodityType = "产品";
 		// 参数列表
 		List<CmBaikeProductParam> paramList = cmBaikeProductDao.findParamList(cmBaikeProduct.getId());
 		cmBaikeProduct.setParamList(paramList);
@@ -142,6 +143,49 @@ public class CmBaikeProductController extends BaseController {
 		cmBaikeProduct.setShopList(shopList);
 		// 敏感词
 		String sensitiveWords = infoDao.getSensitiveWords(4);
+		//正文
+		List<CmBaikeTextInfo> textInfo = cmBaikeProductDao.getTextInfo(cmBaikeProduct.getId());
+		cmBaikeProduct.setTextInfolist(textInfo);
+		//参考资料
+		if(StringUtils.isNotEmpty(cmBaikeProduct.getId())){
+			List<CmBaikeReferenceInfo> materialInfo = cmBaikeProductDao.getMaterialInfo(Integer.valueOf(cmBaikeProduct.getId()));
+			if(null!=materialInfo&&materialInfo.size()>0){
+				materialInfo.forEach(material->{
+					SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+					//时间格式转换(引文时间)
+					if(null!=material.getAcitationTime()){
+						String acitationTimeStr=simpleDateFormat.format(material.getAcitationTime());
+						material.setAcitationTimeStr(acitationTimeStr);
+						material.setAcitationTime(null);
+					}else{
+						material.setAcitationTimeStr(" ");
+						material.setAcitationTime(null);
+					}
+					//时间格式转换(发表时间)
+					if(null!=material.getPublishTime()){
+						String publishTimeStr=simpleDateFormat.format(material.getPublishTime());
+						material.setPublishTimeStr(publishTimeStr);
+						material.setPublishTime(null);
+					}else{
+						material.setPublishTimeStr(" ");
+						material.setPublishTime(null);
+					}
+					//时间格式转换(出版年)
+					if(null!=material.getPublicationYear()){
+						String publicationYearStr=simpleDateFormat.format(material.getPublicationYear());
+						material.setPublicationYearStr(publicationYearStr);
+						material.setPublicationYear(null);
+					}else{
+						material.setPublicationYearStr(" ");
+						material.setPublicationYear(null);
+					}
+				});
+				cmBaikeProduct.setMaterialInfo(materialInfo);
+				Gson g=new Gson();
+				String refrence=g.toJson(materialInfo);
+				cmBaikeProduct.setReferenceList(refrence);
+			}
+		}
 		//先从reids中获取keyword值,不存在时在查询数据库
 		List<SearchFrequencyVo> searchFrequencyVos=new ArrayList<>();
 		if(redisService.getExpireTime("keyword")>0){
@@ -154,17 +198,102 @@ public class CmBaikeProductController extends BaseController {
 		model.addAttribute("commodityType", commodityType);
 		model.addAttribute("sensitiveWords", sensitiveWords);
 		model.addAttribute("SearchFrequencyVo",searchFrequencyVos);
+		model.addAttribute("textInfo",textInfo);
+//		model.addAttribute("materialInfo",materialInfo);
 		return "modules/baikePage/cmBaikeProductForm";
 	}
 
+	@RequestMapping(value = "entry")
+	public String entryGuidance(){
+		return "modules/baikePage/entryGuidance";
+   }
+	/**
+	 *添加资料
+	 * @return
+	 */
+	@RequestMapping(value = "saveMaterialinfo")
+	@ResponseBody
+	public String saveMaterialinfo(CmBaikeReferenceInfo cmBaikeReferenceInfo){
+		if(null!=cmBaikeReferenceInfo){
+			if(cmBaikeReferenceInfo.getReferenceType()==1){
+				cmBaikeReferenceInfo.setPublicationYear(null);
+				cmBaikeReferenceInfo.setPublicationYearStr(null);
+			}else if(cmBaikeReferenceInfo.getReferenceType()==3){
+				cmBaikeReferenceInfo.setPublicationYear(null);
+				cmBaikeReferenceInfo.setPublicationYearStr(null);
+				cmBaikeReferenceInfo.setAcitationTime(null);
+				cmBaikeReferenceInfo.setAcitationTimeStr(null);
+				cmBaikeReferenceInfo.setPublishTime(null);
+				cmBaikeReferenceInfo.setPublishTimeStr(null);
+			} else{
+				cmBaikeReferenceInfo.setAcitationTime(null);
+				cmBaikeReferenceInfo.setAcitationTimeStr(null);
+				cmBaikeReferenceInfo.setPublishTime(null);
+				cmBaikeReferenceInfo.setPublishTimeStr(null);
+			}
+		}
+		if(StringUtils.isNotEmpty(cmBaikeReferenceInfo.getZlId())){
+			cmBaikeReferenceInfo.setId(Integer.valueOf(cmBaikeReferenceInfo.getZlId()));
+		}
+		if("2".equals(cmBaikeReferenceInfo.getFlagId())){
+			cmBaikeProductService.upMaterialinfo(cmBaikeReferenceInfo);
+
+		}else{
+			cmBaikeProductService.saveMaterialinfo(cmBaikeReferenceInfo);
+		}
+		return "modules/baikePage/entryGuidance";
+	}
+
+	/**
+	 * 删除资料
+	 * @return
+	 */
+	@RequestMapping(value = "delMaterialinfo")
+	@ResponseBody
+	public String delMaterialinfo(Integer mid){
+		CmBaikeReferenceInfo cmBaikeReferenceInfo=new CmBaikeReferenceInfo();
+		cmBaikeReferenceInfo.setId(mid);
+		cmBaikeProductService.delMaterialinfo(cmBaikeReferenceInfo);
+		return "modules/baikePage/entryGuidance";
+	}
+	@RequestMapping(value = "getMaterialinfo")
+	@ResponseBody
+	public CmBaikeReferenceInfo getMaterialinfo(Integer mid, Model model){
+		CmBaikeReferenceInfo cmBaikeReferenceInfo=new CmBaikeReferenceInfo();
+		cmBaikeReferenceInfo.setId(mid);
+		CmBaikeReferenceInfo material= cmBaikeProductService.getMaterialinfo(cmBaikeReferenceInfo);
+		SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		//时间格式转换(引文时间)
+		if(null!=material.getAcitationTime()){
+			String acitationTimeStr=simpleDateFormat.format(material.getAcitationTime());
+			material.setAcitationTimeStr(acitationTimeStr);
+		}
+		//时间格式转换(发表时间)
+		if(null!=material.getPublishTime()){
+			String publishTimeStr=simpleDateFormat.format(material.getPublishTime());
+			material.setPublishTimeStr(publishTimeStr);
+		}
+		//时间格式转换(出版年)
+		if(null!=material.getPublicationYear()){
+			String publicationYearStr=simpleDateFormat.format(material.getPublicationYear());
+			material.setPublicationYearStr(publicationYearStr);
+		}
+		return material;
+	}
 	@RequestMapping(value = "save")
 	public String save(CmBaikeProduct cmBaikeProduct, Model model, RedirectAttributes redirectAttributes) {
 		if (!beanValidator(model, cmBaikeProduct)){
 			return form(cmBaikeProduct, model);
 		}
+		//资料格式转换  string --->集合
+		if(null!=cmBaikeProduct&&StringUtils.isNotEmpty(cmBaikeProduct.getReferenceList())){
+			String referenceListStr =cmBaikeProduct.getReferenceList();
+			List<CmBaikeReferenceInfo> referenceList = JSONArray.parseArray(referenceListStr, CmBaikeReferenceInfo.class);
+			cmBaikeProduct.setMaterialInfo(referenceList);
+		}
 		cmBaikeProductService.save(cmBaikeProduct);
-        String commodityType = cmBaikeProduct.getCommodityType() == 1 ? "产品" : "仪器";
-        addMessage(redirectAttributes, "保存" + commodityType + "成功");
+//        String commodityType = cmBaikeProduct.getCommodityType() == 1 ? "产品" : "仪器";
+        addMessage(redirectAttributes, "保存成功");
 		cleanRedisCache();
 		cmBaikeProduct.setPublishSource(null == cmBaikeProduct.getPublishSource() ? 1 : cmBaikeProduct.getPublishSource());
 		return "redirect:" + Global.getAdminPath() + "/baike/cmBaikeProduct/?repage&commodityType=" + cmBaikeProduct.getCommodityType() + "&publishSource="+cmBaikeProduct.getPublishSource();
@@ -269,7 +398,51 @@ public class CmBaikeProductController extends BaseController {
 		videoList.forEach(video->{
 			video.setOssUrl(OSSUtils.getOssUrl(video.getOssName()));
 		});
+		//正文
+		List<CmBaikeTextInfo> textInfo = cmBaikeProductDao.getTextInfo(cmBaikeProduct.getId());
+		cmBaikeProduct.setTextInfolist(textInfo);
+		//参考资料
+		if(StringUtils.isNotEmpty(cmBaikeProduct.getId())){
+			List<CmBaikeReferenceInfo> materialInfo = cmBaikeProductDao.getMaterialInfo(Integer.valueOf(cmBaikeProduct.getId()));
+			if(null!=materialInfo&&materialInfo.size()>0){
+				materialInfo.forEach(material->{
+					SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+					//时间格式转换(引文时间)
+					if(null!=material.getAcitationTime()){
+						String acitationTimeStr=simpleDateFormat.format(material.getAcitationTime());
+						material.setAcitationTimeStr(acitationTimeStr);
+						material.setAcitationTime(null);
+					}else{
+						material.setAcitationTimeStr(" ");
+						material.setAcitationTime(null);
+					}
+					//时间格式转换(发表时间)
+					if(null!=material.getPublishTime()){
+						String publishTimeStr=simpleDateFormat.format(material.getPublishTime());
+						material.setPublishTimeStr(publishTimeStr);
+						material.setPublishTime(null);
+					}else{
+						material.setPublishTimeStr(" ");
+						material.setPublishTime(null);
+					}
+					//时间格式转换(出版年)
+					if(null!=material.getPublicationYear()){
+						String publicationYearStr=simpleDateFormat.format(material.getPublicationYear());
+						material.setPublicationYearStr(publicationYearStr);
+						material.setPublicationYear(null);
+					}else{
+						material.setPublicationYearStr(" ");
+						material.setPublicationYear(null);
+					}
+				});
+				cmBaikeProduct.setMaterialInfo(materialInfo);
+				Gson g=new Gson();
+				String refrence=g.toJson(materialInfo);
+				cmBaikeProduct.setReferenceList(refrence);
+			}
+		}
 		cmBaikeProduct.setVideoList(videoList);
+//		model.addAttribute("materialInfo", materialInfo);
 		model.addAttribute("commodityType", commodityType);
 		return "modules/baikePage/checkBaikePage";
 	}
@@ -327,8 +500,57 @@ public class CmBaikeProductController extends BaseController {
 		model.addAttribute("typeList", typeList);
 		// 敏感词
 		String sensitiveWords = infoDao.getSensitiveWords(4);
+		//正文
+		List<CmBaikeTextInfo> textInfo = cmBaikeProductDao.getTextInfo(cmBaikeProduct.getId());
+//		Gson g=new Gson();
+//		String textInfoStr=g.toJson(textInfo);
+//		cmBaikeProduct.setTextInfolistStr(textInfoStr);
+		cmBaikeProduct.setTextInfolist(textInfo);
+		//参考资料
+		if(StringUtils.isNotEmpty(cmBaikeProduct.getId())){
+			List<CmBaikeReferenceInfo> materialInfo = cmBaikeProductDao.getMaterialInfo(Integer.valueOf(cmBaikeProduct.getId()));
+			if(null!=materialInfo&&materialInfo.size()>0){
+				materialInfo.forEach(material->{
+					SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+					//时间格式转换(引文时间)
+					if(null!=material.getAcitationTime()){
+						String acitationTimeStr=simpleDateFormat.format(material.getAcitationTime());
+						material.setAcitationTimeStr(acitationTimeStr);
+						material.setAcitationTime(null);
+					}else{
+						material.setAcitationTimeStr(" ");
+						material.setAcitationTime(null);
+					}
+					//时间格式转换(发表时间)
+					if(null!=material.getPublishTime()){
+						String publishTimeStr=simpleDateFormat.format(material.getPublishTime());
+						material.setPublishTimeStr(publishTimeStr);
+						material.setPublishTime(null);
+					}else{
+						material.setPublishTimeStr(" ");
+						material.setPublishTime(null);
+					}
+					//时间格式转换(出版年)
+					if(null!=material.getPublicationYear()){
+						String publicationYearStr=simpleDateFormat.format(material.getPublicationYear());
+						material.setPublicationYearStr(publicationYearStr);
+						material.setPublicationYear(null);
+					}else{
+						material.setPublicationYearStr(" ");
+						material.setPublicationYear(null);
+					}
+				});
+				cmBaikeProduct.setMaterialInfo(materialInfo);
+				Gson g=new Gson();
+				String refrence=g.toJson(materialInfo);
+				cmBaikeProduct.setReferenceList(refrence);
+			}
+		}
 		model.addAttribute("sensitiveWords", sensitiveWords);
-        return "modules/baikePage/auditBaikeProductPage";
+//		model.addAttribute("materialInfo", materialInfo);
+//		model.addAttribute("materialInfo", materialInfo);
+
+		return "modules/baikePage/auditBaikeProductPage";
 	}
 
 	@RequestMapping(value = "auditBaike")

+ 9 - 0
src/main/java/com/caimei/modules/baike/web/CmBaikeTypeController.java

@@ -5,6 +5,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import com.caimei.modules.baike.dao.CmBaikeTypeDao;
+import com.caimei.modules.miniprogram.utils.UploadPicUtils;
 import com.caimei.modules.opensearch.GenerateUtils;
 import com.google.common.collect.Maps;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -77,6 +78,14 @@ public class CmBaikeTypeController extends BaseController {
 		if (!beanValidator(model, cmBaikeType)){
 			return form(cmBaikeType, model);
 		}
+		String pcimg=cmBaikeType.getPcBanner();
+		if (StringUtils.isNotEmpty(pcimg) && !pcimg.startsWith("http:")) {
+			cmBaikeType.setPcBanner(UploadPicUtils.saveImageToServer(pcimg));
+		}
+		String appimg=cmBaikeType.getAppBanner();
+		if (StringUtils.isNotEmpty(appimg) && !appimg.startsWith("http:")) {
+			cmBaikeType.setAppBanner(UploadPicUtils.saveImageToServer(appimg));
+		}
 		cmBaikeTypeService.save(cmBaikeType);
 		addMessage(redirectAttributes, "保存分类成功");
 		cleanRedisCache();

+ 22 - 1
src/main/java/com/caimei/modules/coupon/dao/CmCouponDao.java

@@ -88,4 +88,25 @@ public interface CmCouponDao extends CrudDao<CmCoupon> {
     void updateClubCoupon(@Param("clubCouponId") Integer clubCouponId, @Param("orderId") Integer orderId);
 
     List<CmCoupon> findCouponList(@Param("userId")Integer userId,@Param("moneyCouponFlag")Integer moneyCouponFlag);
-}
+
+    List<CmCoupon> selconfigure();
+
+    Integer selCouponId(@Param("couponId") String couponId);
+    /**
+     * 专属优惠券配置插入
+     * @param cmCoupon
+     */
+    /*void insertConfigure(CmCoupon cmCoupon);
+
+    *//**
+     * 专属优惠券配置修改
+     * @param cmCoupon
+     *//*
+    void updateConfigure(CmCoupon cmCoupon);
+
+    List<Integer> configureCouponId(String couponId);
+
+    void insertCouponConfigure(CmCouponAssociate associate);
+
+    void updateCouponConfigure(CmCouponAssociate a);*/
+}

+ 10 - 1
src/main/java/com/caimei/modules/coupon/entity/CmCoupon.java

@@ -57,6 +57,7 @@ public class CmCoupon extends DataEntity<CmCoupon> {
     private Integer useTimeFlag; // 使用期限同上下架时间
     private Date receiveDate;   // 领取时间
     private Date useEndDate;    // 使用截止时间
+    private Integer configure;  // 专属优惠券配置  1是、0否
 
     public CmCoupon() {
         super();
@@ -386,4 +387,12 @@ public class CmCoupon extends DataEntity<CmCoupon> {
     public void setUseEndDate(Date useEndDate) {
         this.useEndDate = useEndDate;
     }
-}
+
+    public Integer getConfigure() {
+        return configure;
+    }
+
+    public void setConfigure(Integer configure) {
+        this.configure = configure;
+    }
+}

+ 9 - 0
src/main/java/com/caimei/modules/coupon/entity/CmVipCoupon.java

@@ -16,6 +16,7 @@ public class CmVipCoupon extends DataEntity<CmVipCoupon> {
     private String id;
     /** 生效月份 */
     private String useTime;
+    private String endTime;
     /**
      * 0未生效 1已生效 2已关闭 3已失效
      */
@@ -61,6 +62,14 @@ public class CmVipCoupon extends DataEntity<CmVipCoupon> {
         this.useTime = useTime;
     }
 
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
     public String getStatus() {
         return status;
     }

+ 9 - 0
src/main/java/com/caimei/modules/coupon/entity/SvipCouponForm.java

@@ -19,6 +19,7 @@ public class SvipCouponForm extends DataEntity<SvipCouponForm> {
      * 月份
      */
     private String month;
+    private String endMonth;
 
     private String status;
 
@@ -356,6 +357,14 @@ public class SvipCouponForm extends DataEntity<SvipCouponForm> {
         this.month = month;
     }
 
+    public String getEndMonth() {
+        return endMonth;
+    }
+
+    public void setEndMonth(String endMonth) {
+        this.endMonth = endMonth;
+    }
+
     public String getCouponType1() {
         return couponType1;
     }

+ 288 - 2
src/main/java/com/caimei/modules/coupon/service/CmVipCouponService.java

@@ -1,5 +1,6 @@
 package com.caimei.modules.coupon.service;
 
+import com.alibaba.fastjson.JSON;
 import com.caimei.modules.coupon.dao.CmCouponDao;
 import com.caimei.modules.coupon.dao.CmCouponVipDao;
 import com.caimei.modules.coupon.entity.*;
@@ -15,6 +16,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
@@ -37,6 +39,17 @@ public class CmVipCouponService extends CrudService<CmCouponVipDao, CmVipCoupon>
     public CmVipCoupon get(String id) {
         CmVipCoupon vipCoupon = super.get(id);
         if (null != vipCoupon) {
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
+            try {
+                Date parse = simpleDateFormat.parse(vipCoupon.getUseTime());
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTime(parse);
+                calendar.add(Calendar.MONTH,2);
+                Date time = calendar.getTime();
+                vipCoupon.setEndTime(simpleDateFormat.format(time));
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
             setVipCouponStatus(vipCoupon);
             List<CmCoupon> couponList = new ArrayList<>();
             List<String> bindCoupons = cmCouponVipDao.getBindCoupons(id);
@@ -51,9 +64,21 @@ public class CmVipCouponService extends CrudService<CmCouponVipDao, CmVipCoupon>
 
     @Override
     public Page<CmVipCoupon> findPage(Page<CmVipCoupon> page, CmVipCoupon cmVipCoupon) {
-        Page<CmVipCoupon> vipPage = super.findPage(page, cmVipCoupon);
+        CmVipCoupon couponEnt = quarter(cmVipCoupon);
+        Page<CmVipCoupon> vipPage = super.findPage(page, couponEnt);
         List<CmVipCoupon> cmVipCouponList = vipPage.getList();
         cmVipCouponList.forEach(vipCoupon -> {
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
+            try {
+                Date parse = simpleDateFormat.parse(vipCoupon.getUseTime());
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTime(parse);
+                calendar.add(Calendar.MONTH,2);
+                Date time = calendar.getTime();
+                vipCoupon.setEndTime(simpleDateFormat.format(time));
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
             setVipCouponStatus(vipCoupon);
             List<String> bindCoupons = cmCouponVipDao.getBindCoupons(vipCoupon.getId());
             List<CmCoupon> couponList = cmCouponVipDao.getCouponListByIds(bindCoupons, cmVipCoupon.getCouponType(), cmVipCoupon.getStatus());
@@ -75,11 +100,23 @@ public class CmVipCouponService extends CrudService<CmCouponVipDao, CmVipCoupon>
                 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM");
                 String current = df.format(new Date());
                 String useTime = vipCoupon.getUseTime();
+                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
+                try {
+                    Date parse = simpleDateFormat.parse(vipCoupon.getUseTime());
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(parse);
+                    calendar.add(Calendar.MONTH,2);
+                    Date time = calendar.getTime();
+                    vipCoupon.setEndTime(simpleDateFormat.format(time));
+                } catch (ParseException e) {
+                    e.printStackTrace();
+                }
+                String endTime = vipCoupon.getEndTime();
                 // 0未生效 1已生效 2已关闭 3已失效
                 if (df.parse(useTime).after(df.parse(current))) {
                     // 未生效
                     vipCoupon.setStatus("0");
-                } else if (df.parse(useTime).before(df.parse(current))) {
+                } else if (df.parse(endTime).before(df.parse(current))) {
                     // 已失效
                     vipCoupon.setStatus("3");
                 } else {
@@ -98,6 +135,7 @@ public class CmVipCouponService extends CrudService<CmCouponVipDao, CmVipCoupon>
     public SvipCouponForm setSvipcouponForms(CmVipCoupon cmVipCoupon){
         SvipCouponForm svipcouponForm = new SvipCouponForm();
         svipcouponForm.setMonth(cmVipCoupon.getUseTime());
+        svipcouponForm.setEndMonth(cmVipCoupon.getEndTime());
         if (null != cmVipCoupon.getCouponList()){
             List<CmCoupon> couponList = cmVipCoupon.getCouponList();
             for (int i = 0; i < couponList.size(); i++) {
@@ -370,6 +408,205 @@ public class CmVipCouponService extends CrudService<CmCouponVipDao, CmVipCoupon>
             cmCouponVipDao.updateVipCouponRelation(relation4);
         }
     }
+    /**
+     * 设置优惠券配置4张券的表单数据
+     */
+    public SvipCouponForm setSvipcouponConfigure(){
+        SvipCouponForm svipcouponForm = new SvipCouponForm();
+        List<CmCoupon> couponList = cmCouponDao.selconfigure();
+        if (0 != couponList.size()){
+
+            for (int i = 0; i < couponList.size(); i++) {
+                setSvipcouponForm(svipcouponForm, i, couponList.get(i));
+            }
+        }
+        return svipcouponForm;
+    }
+
+    @Transactional(readOnly = false)
+    public void saveConfigure(SvipCouponForm svipcouponForm) {
+        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM");
+        String current = df.format(new Date());
+        svipcouponForm.setMonth(current);
+        Integer integer = cmCouponDao.selCouponId(svipcouponForm.getCouponId1());
+        String id = "";
+        if (integer == null) {
+            id = null;
+        } else {
+            id = String.valueOf(integer);
+        }
+        CmVipCoupon cmVipCoupon = new CmVipCoupon();
+        cmVipCoupon.setId(id);
+        cmVipCoupon.setUseTime(svipcouponForm.getMonth());
+        cmVipCoupon.setUpdateTime(new Date());
+        cmVipCoupon.setStatus("1");
+        cmVipCoupon.setDelFlag("1");
+        setVipCouponStatus(cmVipCoupon);
+        // 解析 svipcouponForm -> 组装 CmCoupon 列表 保存
+        CmCoupon coupon1 = new CmCoupon();
+        CmCoupon coupon2 = new CmCoupon();
+        CmCoupon coupon3 = new CmCoupon();
+        CmCoupon coupon4 = new CmCoupon();
+        boolean flag = false;
+        if(StringUtils.isNotBlank(cmVipCoupon.getId())){
+            // 修改
+            coupon1.setId(svipcouponForm.getCouponId1());
+            coupon2.setId(svipcouponForm.getCouponId2());
+            coupon3.setId(svipcouponForm.getCouponId3());
+            coupon4.setId(svipcouponForm.getCouponId4());
+            cmCouponVipDao.updateVipCouponMonth(cmVipCoupon);
+        } else {
+            // 新增
+            flag = true;
+            cmCouponVipDao.insertVipCouponMonth(cmVipCoupon);
+        }
+        Date beginTime = DateUtil.getMinDay(svipcouponForm.getMonth());
+        Date endTime = DateUtil.getMaxDay(svipcouponForm.getMonth());
+        /*
+         * 第1张券
+         */
+        coupon1.setName("超级会员优惠券"+svipcouponForm.getMonth());
+        coupon1.setStartDate(beginTime);
+        coupon1.setEndDate(endTime);
+        coupon1.setCouponAmount(svipcouponForm.getCouponAmount1());
+        coupon1.setTouchPrice(svipcouponForm.getTouchPrice1());
+        coupon1.setStatus("1");
+        coupon1.setVipFlag(1);
+        coupon1.setConfigure(1);
+        // 0活动券 1品类券 3店铺券
+        if ("0".equals(svipcouponForm.getCouponType1())){
+            coupon1.setCouponType(0);
+            coupon1.setProductType(svipcouponForm.getProductType1());
+            if ("2".equals(svipcouponForm.getProductType1())){
+                // 指定商品
+                coupon1.setProductInfo(svipcouponForm.getProductInfo1());
+            }
+        } else if ("1".equals(svipcouponForm.getCouponType1())) {
+            coupon1.setCategoryType(svipcouponForm.getCategoryType1());
+            coupon1.setCouponType(1);
+        } else if ("3".equals(svipcouponForm.getCouponType1())) {
+            coupon1.setShopId(svipcouponForm.getShopId1());
+            coupon1.setCouponType(3);
+        }
+        cmCouponService.save(coupon1);
+        /*
+         * 第2张券
+         */
+        coupon2.setName("超级会员优惠券"+svipcouponForm.getMonth());
+        coupon2.setStartDate(beginTime);
+        coupon2.setEndDate(endTime);
+        coupon2.setCouponAmount(svipcouponForm.getCouponAmount2());
+        coupon2.setTouchPrice(svipcouponForm.getTouchPrice2());
+        coupon2.setStatus("1");
+        coupon2.setVipFlag(1);
+        coupon2.setConfigure(1);
+        // 0活动券 1品类券 3店铺券
+        if ("0".equals(svipcouponForm.getCouponType2())){
+            coupon2.setCouponType(0);
+            coupon2.setProductType(svipcouponForm.getProductType2());
+            if ("2".equals(svipcouponForm.getProductType2())){
+                // 指定商品
+                coupon2.setProductInfo(svipcouponForm.getProductInfo2());
+            }
+        } else if ("1".equals(svipcouponForm.getCouponType2())) {
+            coupon2.setCategoryType(svipcouponForm.getCategoryType2());
+            coupon2.setCouponType(1);
+        } else if ("3".equals(svipcouponForm.getCouponType2())) {
+            coupon2.setShopId(svipcouponForm.getShopId2());
+            coupon2.setCouponType(3);
+        }
+        cmCouponService.save(coupon2);
+        /*
+         * 第3张券
+         */
+        coupon3.setName("超级会员优惠券"+svipcouponForm.getMonth());
+        coupon3.setStartDate(beginTime);
+        coupon3.setEndDate(endTime);
+        coupon3.setCouponAmount(svipcouponForm.getCouponAmount3());
+        coupon3.setTouchPrice(svipcouponForm.getTouchPrice3());
+        coupon3.setStatus("1");
+        coupon3.setVipFlag(1);
+        coupon3.setConfigure(1);
+        // 0活动券 1品类券 3店铺券
+        if ("0".equals(svipcouponForm.getCouponType3())){
+            coupon3.setCouponType(0);
+            coupon3.setProductType(svipcouponForm.getProductType3());
+            if ("2".equals(svipcouponForm.getProductType3())){
+                // 指定商品
+                coupon3.setProductInfo(svipcouponForm.getProductInfo3());
+            }
+        } else if ("1".equals(svipcouponForm.getCouponType3())) {
+            coupon3.setCategoryType(svipcouponForm.getCategoryType3());
+            coupon3.setCouponType(1);
+        } else if ("3".equals(svipcouponForm.getCouponType3())) {
+            coupon3.setShopId(svipcouponForm.getShopId3());
+            coupon3.setCouponType(3);
+        }
+        cmCouponService.save(coupon3);
+        /*
+         * 第4张券
+         */
+        coupon4.setName("超级会员优惠券"+svipcouponForm.getMonth());
+        coupon4.setStartDate(beginTime);
+        coupon4.setEndDate(endTime);
+        coupon4.setCouponAmount(svipcouponForm.getCouponAmount4());
+        coupon4.setTouchPrice(svipcouponForm.getTouchPrice4());
+        coupon4.setStatus("1");
+        coupon4.setVipFlag(1);
+        coupon4.setConfigure(1);
+        // 0活动券 1品类券 3店铺券
+        if ("0".equals(svipcouponForm.getCouponType4())){
+            coupon4.setCouponType(0);
+            coupon4.setProductType(svipcouponForm.getProductType4());
+            if ("2".equals(svipcouponForm.getProductType4())){
+                // 指定商品
+                coupon4.setProductInfo(svipcouponForm.getProductInfo4());
+            }
+        } else if ("1".equals(svipcouponForm.getCouponType4())) {
+            coupon4.setCategoryType(svipcouponForm.getCategoryType4());
+            coupon4.setCouponType(1);
+        } else if ("3".equals(svipcouponForm.getCouponType4())) {
+            coupon4.setShopId(svipcouponForm.getShopId4());
+            coupon4.setCouponType(3);
+        }
+        cmCouponService.save(coupon4);
+        /*
+         * vip优惠券月份关系
+         */
+        CmVipCouponRelation relation1 = new CmVipCouponRelation();
+        CmVipCouponRelation relation2 = new CmVipCouponRelation();
+        CmVipCouponRelation relation3 = new CmVipCouponRelation();
+        CmVipCouponRelation relation4 = new CmVipCouponRelation();
+        relation1.setMontId(cmVipCoupon.getId());
+        relation2.setMontId(cmVipCoupon.getId());
+        relation3.setMontId(cmVipCoupon.getId());
+        relation4.setMontId(cmVipCoupon.getId());
+        relation1.setCouponId(coupon1.getId());
+        relation2.setCouponId(coupon2.getId());
+        relation3.setCouponId(coupon3.getId());
+        relation4.setCouponId(coupon4.getId());
+        relation1.setUpdateTime(new Date());
+        relation2.setUpdateTime(new Date());
+        relation3.setUpdateTime(new Date());
+        relation4.setUpdateTime(new Date());
+        relation1.setDelFlag("0");
+        relation2.setDelFlag("0");
+        relation3.setDelFlag("0");
+        relation4.setDelFlag("0");
+        if (flag) {
+            // 新增
+            cmCouponVipDao.insertVipCouponRelation(relation1);
+            cmCouponVipDao.insertVipCouponRelation(relation2);
+            cmCouponVipDao.insertVipCouponRelation(relation3);
+            cmCouponVipDao.insertVipCouponRelation(relation4);
+        } else {
+            // 修改
+            cmCouponVipDao.updateVipCouponRelation(relation1);
+            cmCouponVipDao.updateVipCouponRelation(relation2);
+            cmCouponVipDao.updateVipCouponRelation(relation3);
+            cmCouponVipDao.updateVipCouponRelation(relation4);
+        }
+    }
 
     @Override
     @Transactional(readOnly = false)
@@ -412,4 +649,53 @@ public class CmVipCouponService extends CrudService<CmCouponVipDao, CmVipCoupon>
     public List<String> getAllUseDateList(){
         return cmCouponVipDao.getAllUseDateList();
     };
+
+    /**
+     * 查询条件 优惠月份季度调整
+     * @param cmVipCoupon
+     * @return
+     */
+    public CmVipCoupon quarter(CmVipCoupon cmVipCoupon) {
+        String startDate  = "";
+        String endDate  = "";
+        String year = "";
+        String month = "";
+        if (com.thinkgem.jeesite.common.utils.StringUtils.isNotEmpty(cmVipCoupon.getStartDate())) {
+            year = cmVipCoupon.getStartDate().substring(0,cmVipCoupon.getStartDate().length() - 2);
+            month = cmVipCoupon.getStartDate().substring(cmVipCoupon.getStartDate().length() - 2);
+            if (month.equals("01") || month.equals("02") || month.equals("03")) {
+                month = "01";
+            }
+            if (month.equals("04") || month.equals("05") || month.equals("06")) {
+                month = "04";
+            }
+            if (month.equals("07") || month.equals("08") || month.equals("09")) {
+                month = "07";
+            }
+            if (month.equals("10") || month.equals("11") || month.equals("12")) {
+                month = "10";
+            }
+            startDate = year + month;
+        }
+        if (com.thinkgem.jeesite.common.utils.StringUtils.isNotEmpty(cmVipCoupon.getEndDate())) {
+            year = cmVipCoupon.getEndDate().substring(0,cmVipCoupon.getEndDate().length() - 2);
+            month = cmVipCoupon.getEndDate().substring(cmVipCoupon.getEndDate().length() - 2);
+            if (month.equals("01") || month.equals("02") || month.equals("03")) {
+                month = "03";
+            }
+            if (month.equals("04") || month.equals("05") || month.equals("06")) {
+                month = "06";
+            }
+            if (month.equals("07") || month.equals("08") || month.equals("09")) {
+                month = "09";
+            }
+            if (month.equals("10") || month.equals("11") || month.equals("12")) {
+                month = "12";
+            }
+            endDate = year + month;
+        }
+        cmVipCoupon.setStartDate(startDate);
+        cmVipCoupon.setEndDate(endDate);
+        return cmVipCoupon;
+    }
 }

+ 40 - 0
src/main/java/com/caimei/modules/coupon/web/CmVipCouponController.java

@@ -18,6 +18,8 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -45,13 +47,18 @@ public class CmVipCouponController extends BaseController {
 
     @RequestMapping(value = {"list", ""})
     public String list(CmVipCoupon cmVipCoupon, HttpServletRequest request, HttpServletResponse response, Model model) {
+        String startDate = cmVipCoupon.getStartDate();
+        String endDate = cmVipCoupon.getEndDate();
         Page<CmVipCoupon> page = cmVipCouponService.findPage(new Page<CmVipCoupon>(request, response), cmVipCoupon);
+        cmVipCoupon.setStartDate(startDate);
+        cmVipCoupon.setEndDate(endDate);
         model.addAttribute("page", page);
         return "modules/svip/cmSvipCouponList";
     }
 
     @RequestMapping(value = "form")
     public String form(CmVipCoupon cmVipCoupon, Model model) {
+//        cmVipCoupon.setEndTime(cmVipCoupon.getEndTime());
         model.addAttribute("cmVipCoupon", cmVipCoupon);
         // 设置4张券的表单
         SvipCouponForm svipcouponForm = cmVipCouponService.setSvipcouponForms(cmVipCoupon);
@@ -61,6 +68,17 @@ public class CmVipCouponController extends BaseController {
         return "modules/svip/cmSvipCouponForm";
     }
 
+    /**
+     * 专属优惠券配置
+     * @return
+     */
+    @RequestMapping(value = "configuration")
+    public String configuration(Model model) {
+        SvipCouponForm svipcouponForm = cmVipCouponService.setSvipcouponConfigure();
+
+        model.addAttribute("svipcouponForm",svipcouponForm);
+        return "modules/svip/cmSvipCouponConfiguration";
+    }
     /**
      * 保存
      *
@@ -86,6 +104,28 @@ public class CmVipCouponController extends BaseController {
         return "redirect:" + Global.getAdminPath() + "/vip/cmCoupon/?repage";
     }
 
+    /**
+     * 专属优惠券保存
+     * @param svipcouponForm
+     * @param model
+     * @param redirectAttributes
+     * @return
+     * @throws ParseException
+     */
+    @RequestMapping(value = "saveConfigure")
+    public String configureSave(SvipCouponForm svipcouponForm, Model model, RedirectAttributes redirectAttributes) throws ParseException {
+        if (StringUtils.isNotBlank(svipcouponForm.getCouponId1())) {
+            // 修改
+            cmVipCouponService.saveConfigure(svipcouponForm);
+            addMessage(redirectAttributes, "超级会员专属优惠券配置修改成功");
+        } else {
+            // 新增
+            cmVipCouponService.saveConfigure(svipcouponForm);
+            addMessage(redirectAttributes, "超级会员专属优惠券配置新增成功");
+        }
+        return "redirect:" + Global.getAdminPath() + "/vip/cmCoupon/?repage";
+    }
+
     @RequestMapping(value = "close")
     public String close(CmVipCoupon cmVipCoupon, RedirectAttributes redirectAttributes) {
         cmVipCouponService.close(cmVipCoupon);

+ 3 - 3
src/main/java/com/caimei/modules/supers/service/CmSvipPackageService.java

@@ -81,12 +81,12 @@ public class CmSvipPackageService extends CrudService<CmSvipPackageDao, CmSvipPa
         //1套餐12,2套餐3月,3套餐1月
         Double price1 = Double.valueOf(cmSvipPackage.getPrice1());
         Double price2 = Double.valueOf(cmSvipPackage.getPrice2());
-        Double price3 = Double.valueOf(cmSvipPackage.getPrice3());
+//        Double price3 = Double.valueOf(cmSvipPackage.getPrice3());
         String p = cmSvipPackage.getProportion();
         Integer proportion = Integer.valueOf(p);
         dao.updatePrice(price1, 12, proportion);
         dao.updatePrice(price2, 3, proportion);
-        dao.updatePrice(price3, 1, proportion);
+//        dao.updatePrice(price3, 1, proportion);
     }
 
     @Transactional(readOnly = false)
@@ -94,4 +94,4 @@ public class CmSvipPackageService extends CrudService<CmSvipPackageDao, CmSvipPa
         super.delete(cmSvipPackage);
     }
 
-}
+}

+ 10 - 1
src/main/java/com/caimei/modules/user/entity/ClubTemporary.java

@@ -22,6 +22,7 @@ public class ClubTemporary extends DataEntity<ClubTemporary> {
     private String bindMobile;        // 企业绑定手机号
     private String contractEmail;        // 联系邮箱
     private String linkMan;        // 联系人
+    private String linkManIdentity;        // 联系人
     private Integer provinceId;        // 省id
     private Integer cityId;        // 市id
     private Integer townId;        // 地址Id
@@ -124,6 +125,14 @@ public class ClubTemporary extends DataEntity<ClubTemporary> {
         this.linkMan = linkMan;
     }
 
+    public String getLinkManIdentity() {
+        return linkManIdentity;
+    }
+
+    public void setLinkManIdentity(String linkManIdentity) {
+        this.linkManIdentity = linkManIdentity;
+    }
+
     public Integer getProvinceId() {
         return provinceId;
     }
@@ -299,4 +308,4 @@ public class ClubTemporary extends DataEntity<ClubTemporary> {
     public void setImages(String[] images) {
         this.images = images;
     }
-}
+}

+ 1 - 1
src/main/java/com/caimei/modules/user/entity/CmUser.java

@@ -861,4 +861,4 @@ public class CmUser extends DataEntity<CmUser> {
     public void setStoreStatus(boolean storeStatus) {
         this.storeStatus = storeStatus;
     }
-}
+}

+ 4 - 0
src/main/java/com/caimei/modules/user/service/ClubTemporaryService.java

@@ -129,6 +129,10 @@ public class ClubTemporaryService extends CrudService<ClubTemporaryDao, ClubTemp
             club.setContractMobile(clubTemporary.getBindMobile());
             // 联系人
             club.setLinkMan(clubTemporary.getLinkMan());
+            // 联系人身份
+            if (StringUtils.isNotBlank(clubTemporary.getLinkManIdentity())) {
+                club.setLinkManIdentity(Integer.parseInt(clubTemporary.getLinkManIdentity()));
+            }
             // 用户Id
             club.setUserID(user.getUserID());
             // 设置协销ID

+ 15 - 13
src/main/java/com/caimei/modules/user/service/CmBehaviorRecordService.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.caimei.modules.user.dao.CmBehaviorRecordDao;
 import com.caimei.modules.user.entity.CmBehaviorRecord;
 import com.caimei.utils.AppUtils;
+import com.caimei.utils.StringUtils;
 import com.thinkgem.jeesite.common.persistence.Page;
 import com.thinkgem.jeesite.common.service.CrudService;
 import okhttp3.OkHttpClient;
@@ -170,22 +171,23 @@ public class CmBehaviorRecordService extends CrudService<CmBehaviorRecordDao, Cm
         cmBehaviorRecord.setPage(page);
 
         // 机构用户行为详情
-        List<CmBehaviorRecord> behaviorAgencyList = cmBehaviorRecordDao.behaviorAgency(cmBehaviorRecord);
+        if (StringUtils.isNotBlank(cmBehaviorRecord.getIP())) {
+            List<CmBehaviorRecord> behaviorAgencyList = cmBehaviorRecordDao.behaviorAgency(cmBehaviorRecord);
 
-        for (CmBehaviorRecord record: behaviorAgencyList) {
-            record.setProductImage(AppUtils.getImageURL("product", record.getProductImage(), 0, ""));
-            String time = calculationTime(record.getAccessDuration());
-            record.setAccessDuration(time);
-            String decode = null;
-            try {
-                decode = URLDecoder.decode(record.getPagePath(),"UTF-8");
-            } catch (UnsupportedEncodingException e) {
-                e.printStackTrace();
+            for (CmBehaviorRecord record : behaviorAgencyList) {
+                record.setProductImage(AppUtils.getImageURL("product", record.getProductImage(), 0, ""));
+                String time = calculationTime(record.getAccessDuration());
+                record.setAccessDuration(time);
+                String decode = null;
+                try {
+                    decode = URLDecoder.decode(record.getPagePath(), "UTF-8");
+                } catch (UnsupportedEncodingException e) {
+                    e.printStackTrace();
+                }
+                record.setPagePath(decode);
             }
-            record.setPagePath(decode);
+            page.setList(behaviorAgencyList);
         }
-
-        page.setList(behaviorAgencyList);
         return page;
     }
 

+ 10 - 4
src/main/java/com/caimei/modules/user/web/newUser/AgencyController.java

@@ -1245,23 +1245,25 @@ private VisitRemarkDao visitRemarkDao;
             }
         }
         Page<CmBehaviorRecord> page = cmBehaviorRecordService.behaviorAgencyPage(new Page<>(request, response), record);
+        String masBehavior = "";
         List<CmBehaviorRecord> list = page.getList();
         for (int i = 0; i <= list.size()-1; i++) {
-            describe += list.get(i).getPageLabel();
+            masBehavior += list.get(i).getPageLabel();
             if (list.size()-1 != i) {
-                describe += ",";
+                masBehavior += ",";
             }
         }
         model.addAttribute("page",page);
         model.addAttribute("link",link);
         model.addAttribute("linkage",linkage);
         model.addAttribute("describe",describe);
+        model.addAttribute("masBehavior",masBehavior);
         model.addAttribute("clubId", clubId);
         return "modules/userNew/recordLinkageForm";
     }
 
     @RequestMapping("recordLinkageSave")
-    public String RecordLinkageSave(String describe,String link,Integer clubId,HttpServletRequest request, HttpServletResponse response, Model model,RedirectAttributes redirectAttributes) {
+    public String RecordLinkageSave(String describe,String masBehavior,String link,Integer clubId,HttpServletRequest request, HttpServletResponse response, Model model,RedirectAttributes redirectAttributes) {
         model.addAttribute("clubId", clubId);
 
         if(domain.contains("-b")){
@@ -1272,7 +1274,11 @@ private VisitRemarkDao visitRemarkDao;
             link="http://localhost:8081/clubinfo.html?clubId="+clubId;
         }
 //        StringSelection stsel = new StringSelection(link);
-        newCmClubDao.addRecordLinkage(describe,link,clubId);
+        String replace = describe;
+        if (describe.contains(masBehavior)) {
+            replace = describe.replace(masBehavior, "");
+        }
+        newCmClubDao.addRecordLinkage(replace,link,clubId);
         logger.info(">>>>>>>>>>>生成记录链接");
         addMessage(redirectAttributes, "链接已生成并自动复制,可直接粘贴");
 //        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stsel, stsel);

+ 2 - 1
src/main/resources/mappings/modules/baike/CmBaikeHotSearchMapper.xml

@@ -52,7 +52,8 @@
 				ORDER BY ${page.orderBy}
 			</when>
 			<otherwise>
-				order by -sort desc, a.addTime desc
+-- 				-sort desc,
+				order by  a.addTime desc
 			</otherwise>
 		</choose>
 	</select>

+ 56 - 5
src/main/resources/mappings/modules/baike/CmBaikeProductMapper.xml

@@ -89,9 +89,9 @@
 			<if test="status != null">
 				AND a.status = #{status}
 			</if>
-			<if test="commodityType != null">
-				and a.commodityType = #{commodityType}
-			</if>
+<!--			<if test="commodityType != null">-->
+<!--				and a.commodityType = #{commodityType}-->
+<!--			</if>-->
 			<if test="publishSource != null">
 				and a.publishSource = #{publishSource}
 			</if>
@@ -261,8 +261,8 @@
 	</insert>
 
 	<insert id="insertProductFile" keyColumn="id" keyProperty="id" useGeneratedKeys="true">
-		insert into cm_baike_product_file(fileTitle, fileName, ossName)
-		values (#{fileTitle}, #{fileName}, #{ossName})
+		insert into cm_baike_product_file(fileTitle, fileName, ossName,ossUrl)
+		values (#{fileTitle}, #{fileName}, #{ossName},#{ossUrl})
 	</insert>
 
 	<update id="update">
@@ -350,8 +350,59 @@
 	<delete id="deleteQuestionsByProductId">
 		delete from cm_baike_product_question where productId = #{id}
 	</delete>
+	<delete id="delMaterialinfoBYProductId">
+		delete from cm_baike_reference_info where productId=#{id}
+	</delete>
+	<delete id="delTextListByEntryId">
+		delete from cm_baike_text_info where productId=#{id}
+	</delete>
 	<delete id="deleteProductFile">
 		delete from cm_baike_product_file where id = #{fileId}
 	</delete>
+	<select id="getTextInfo" resultType="com.caimei.modules.baike.entity.CmBaikeTextInfo">
+		select * from cm_baike_text_info where productId=#{productId}
+	</select>
+
+	<insert id="saveMaterialinfo">
+		insert into
+		    cm_baike_reference_info(referenceType, website, articleName,websiteName,publishTime,acitationTime,author,workName,publicationPlace,press,publicationYear,acitationWeb,referenceDescription,imageDescription,imageUrl,productId,productType,ctrlId)
+		values (#{referenceType}, #{website}, #{articleName},#{websiteName},#{publishTimeStr},#{acitationTimeStr},#{author},#{workName},#{publicationPlace},#{press},#{publicationYearStr},#{acitationWeb},#{referenceDescription},#{imageDescription},#{imageUrl},#{productId},#{productType},#{ctrlId})
+	</insert>
+	<update id="upMaterialinfo">
+		update cm_baike_reference_info
+		set
+			referenceType=#{referenceType},
+			website=#{website},
+			articleName=#{articleName},
+			websiteName=#{websiteName},
+			publishTime=#{publishTimeStr},
+			acitationTime=#{acitationTimeStr},
+			author=#{author},
+			workName=#{workName},
+			publicationPlace=#{publicationPlace},
+			press=#{press},
+			publicationYear=#{publicationYearStr},
+			acitationWeb=#{acitationWeb},
+			referenceDescription=#{referenceDescription},
+			imageDescription=#{imageDescription},
+			imageUrl=#{imageUrl}
+			where id=#{id}
+	</update>
 
+	<insert id="insertText">
+		insert into cm_baike_text_info(textType,productId,dictionaryContent,referenceId,parentId,dictionaryType)
+		values(#{textType},#{productId},#{dictionaryContent},#{referenceId},#{parentId},#{dictionaryType})
+	</insert>
+	<select id="getMaterialInfo" resultType="com.caimei.modules.baike.entity.CmBaikeReferenceInfo">
+		select * from cm_baike_reference_info where productId=#{productId}
+	</select>
+
+	<delete id="delMaterialinfo">
+		delete from cm_baike_reference_info where id=#{id}
+	</delete>
+	<select id="getMaterialinfo" resultType="com.caimei.modules.baike.entity.CmBaikeReferenceInfo">
+		select * from cm_baike_reference_info
+
+		where id=#{id}
+	</select>
 </mapper>

+ 21 - 7
src/main/resources/mappings/modules/baike/CmBaikeTypeMapper.xml

@@ -10,6 +10,9 @@
 		a.status AS "status",
 		a.addTime AS "addTime",
 		a.addBy AS "addBy",
+        a.pcBanner As pcBanner,
+		a.appBanner As appBanner,
+		a.bannerLink As bannerLink,
 		su.name as "addUserName"
 	</sql>
 	
@@ -31,7 +34,9 @@
 		FROM cm_baike_type a
 		<include refid="cmBaikeTypeJoins"/>
 		<where>
-			
+			<if test="status != null ">
+				 a.status = #{status}
+			</if>
 			<if test="id != null and id != ''">
 				AND a.id = #{id}
 			</if>
@@ -44,16 +49,16 @@
 			<if test="status != null">
 				AND a.status = #{status}
 			</if>
-			<if test="typeSort != null">
-				and a.typeSort = #{typeSort}
-			</if>
+<!--			<if test="typeSort != null">-->
+<!--				and a.typeSort = #{typeSort}-->
+<!--			</if>-->
 		</where>
 		<choose>
 			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
 				ORDER BY ${page.orderBy}
 			</when>
 			<otherwise>
-				order by -sort desc,a.addTime desc
+				order by a.addTime desc
 			</otherwise>
 		</choose>
 	</select>
@@ -82,14 +87,20 @@
 			sort,
 			status,
 			addTime,
-			addBy
+			addBy,
+			pcBanner,
+			appBanner,
+			bannerLink
 		) VALUES (
 			#{typeSort},
 			#{name},
 			#{sort},
 			#{status},
 			NOW(),
-			#{createBy.id}
+			#{createBy.id},
+			#{pcBanner},
+			#{appBanner},
+			#{bannerLink}
 		)
 	</insert>
 	
@@ -97,6 +108,9 @@
 		UPDATE cm_baike_type SET 	
 			name = #{name},
 			sort = #{sort},
+			pcBanner=#{pcBanner},
+			appBanner=#{appBanner},
+			bannerLink=#{bannerLink},
 			status = #{status}
 		WHERE id = #{id}
 	</update>

+ 96 - 4
src/main/resources/mappings/modules/coupon/CmCouponMapper.xml

@@ -168,7 +168,8 @@
 			moneyCouponPrice,
 			moneyCouponFlag,
 			moneyCouponType,
-			delFlag
+			delFlag,
+			configure
 		) VALUES (
 			#{name},
 		    #{couponPayWay},
@@ -194,7 +195,8 @@
 		    #{moneyCouponPrice},
 		    #{moneyCouponFlag},
 			#{moneyCouponType},
-			#{delFlag}
+			#{delFlag},
+		    #{configure}
 		)
 	</insert>
 
@@ -221,7 +223,8 @@
 			categoryType = #{categoryType},
 			couponsMode = #{couponsMode},
 			moneyCouponPrice = #{moneyCouponPrice},
-			moneyCouponType = #{moneyCouponType}
+			moneyCouponType = #{moneyCouponType},
+			configure = #{configure}
 		WHERE id = #{id}
 	</update>
 
@@ -569,4 +572,93 @@
 		  id = #{clubCouponId}
 	</update>
 
-</mapper>
+	<select id="selconfigure" resultType="com.caimei.modules.coupon.entity.CmCoupon">
+		SELECT <include refid="cmCouponColumns"/> FROM cm_coupon a WHERE configure = 1
+	</select>
+	<select id="selCouponId" resultType="integer">
+		SELECT cscm.id as id FROM cm_svip_coupon_month cscm LEFT JOIN cm_svip_coupon csc ON csc.montId = cscm.id WHERE csc.couponId = #{couponId}
+	</select>
+	<!--<insert id="insertConfigure">
+		INSERT INTO cm_coupon_configure(
+			name,
+			couponPayWay,
+			couponAmount,
+			touchPrice,
+			startDate,
+			endDate,
+			receivePeriod,
+			receiveFlag,
+			useTimeFlag,
+			usePeriod,
+			status,
+			couponType,
+			vipFlag,
+			userId,
+			shopId,
+			productType,
+			pcBanner,
+			appletsBanner,
+			categoryType,
+			couponsMode,
+			createDate,
+			moneyCouponPrice,
+			moneyCouponFlag,
+			moneyCouponType,
+			delFlag
+		) VALUES (
+			 #{name},
+			 #{couponPayWay},
+			 #{couponAmount},
+			 #{touchPrice},
+			 #{startDate},
+			 #{endDate},
+			 #{receivePeriod},
+			 #{receiveFlag},
+			 #{useTimeFlag},
+			 #{usePeriod},
+			 #{status},
+			 #{couponType},
+			 #{vipFlag},
+			 #{userId},
+			 #{shopId},
+			 #{productType},
+			 #{pcBanner},
+			 #{appletsBanner},
+			 #{categoryType},
+			 #{couponsMode},
+			 #{createDate},
+			 #{moneyCouponPrice},
+			 #{moneyCouponFlag},
+			 #{moneyCouponType},
+			 #{delFlag}
+		 )
+	</insert>
+	<update id="updateConfigure">
+		UPDATE cm_coupon_configure SET
+		 name = #{name},
+		 couponPayWay = #{couponPayWay},
+		 couponAmount = #{couponAmount},
+		 touchPrice = #{touchPrice},
+		 startDate = #{startDate},
+		 endDate = #{endDate},
+		 receivePeriod = #{receivePeriod},
+		 receiveFlag = #{receiveFlag},
+		 useTimeFlag = #{useTimeFlag},
+		 usePeriod = #{usePeriod},
+		 status = #{status},
+		 couponType = #{couponType},
+		 vipFlag = #{vipFlag},
+		 userId = #{userId},
+		 shopId = #{shopId},
+		 productType = #{productType},
+		 pcBanner = #{pcBanner},
+		 appletsBanner = #{appletsBanner},
+		 categoryType = #{categoryType},
+		 couponsMode = #{couponsMode},
+		 moneyCouponPrice = #{moneyCouponPrice},
+		 moneyCouponType = #{moneyCouponType}
+		WHERE id = #{id}
+	</update>-->
+
+
+</mapper>

+ 24 - 20
src/main/resources/mappings/modules/user/ClubTemporaryMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.caimei.modules.user.dao.ClubTemporaryDao">
-    
+
 	<sql id="clubTemporaryColumns">
 		a.id AS "id",
 		a.userId AS "userId",
@@ -11,6 +11,7 @@
 		a.bindMobile AS "bindMobile",
 		a.contractEmail AS "contractEmail",
 		a.linkMan AS "linkMan",
+		a.linkManIdentity AS "linkManIdentity",
 		a.provinceId AS "provinceId",
 		a.cityId AS "cityId",
 		a.townId AS "townId",
@@ -28,14 +29,14 @@
 		IFNULL(s.name,s.linkMan) AS "spName",
         if(csu.delFlag = '0' and now() <![CDATA[ < ]]> csu.endTime,1,0) as svipUserFlag
 	</sql>
-	
+
 	<sql id="clubTemporaryJoins">
 		LEFT JOIN serviceprovider s ON s.userID = a.userId
         LEFT JOIN cm_svip_user csu ON csu.userId = a.userId
 	</sql>
-    
+
 	<select id="get" resultType="ClubTemporary">
-		SELECT 
+		SELECT
 			<include refid="clubTemporaryColumns"/>,
 		d.name AS "province",
 		c.name AS "city",
@@ -47,33 +48,33 @@
 		LEFT JOIN province d ON d.provinceID=c.provinceID
 		WHERE a.id = #{id}
 	</select>
-	
+
 	<select id="findList" resultType="ClubTemporary">
-		SELECT 
+		SELECT
 			<include refid="clubTemporaryColumns"/>
 		FROM club_temporary a
 		<include refid="clubTemporaryJoins"/>
 		<where>
 			<if test="name != null and name != ''">
-				AND a.name LIKE 
+				AND a.name LIKE
 					<if test="dbName == 'oracle'">'%'||#{name}||'%'</if>
 					<if test="dbName == 'mssql'">'%'+#{name}+'%'</if>
 					<if test="dbName == 'mysql'">concat('%',#{name},'%')</if>
 			</if>
 			<if test="bindMobile != null and bindMobile != ''">
-				AND a.bindMobile LIKE 
+				AND a.bindMobile LIKE
 					<if test="dbName == 'oracle'">'%'||#{bindMobile}||'%'</if>
 					<if test="dbName == 'mssql'">'%'+#{bindMobile}+'%'</if>
 					<if test="dbName == 'mysql'">concat('%',#{bindMobile},'%')</if>
 			</if>
 			<if test="contractEmail != null and contractEmail != ''">
-				AND a.contractEmail LIKE 
+				AND a.contractEmail LIKE
 					<if test="dbName == 'oracle'">'%'||#{contractEmail}||'%'</if>
 					<if test="dbName == 'mssql'">'%'+#{contractEmail}+'%'</if>
 					<if test="dbName == 'mysql'">concat('%',#{contractEmail},'%')</if>
 			</if>
 			<if test="linkMan != null and linkMan != ''">
-				AND a.linkMan LIKE 
+				AND a.linkMan LIKE
 					<if test="dbName == 'oracle'">'%'||#{linkMan}||'%'</if>
 					<if test="dbName == 'mssql'">'%'+#{linkMan}+'%'</if>
 					<if test="dbName == 'mysql'">concat('%',#{linkMan},'%')</if>
@@ -94,15 +95,15 @@
 			</otherwise>
 		</choose>
 	</select>
-	
+
 	<select id="findAllList" resultType="ClubTemporary">
-		SELECT 
+		SELECT
 			<include refid="clubTemporaryColumns"/>
 		FROM club_temporary a
 		<include refid="clubTemporaryJoins"/>
 		<where>
-			
-		</where>		
+
+		</where>
 		<choose>
 			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
 				ORDER BY ${page.orderBy}
@@ -111,7 +112,7 @@
 			</otherwise>
 		</choose>
 	</select>
-	
+
 	<insert id="insert" parameterType="ClubTemporary"  keyProperty="id" useGeneratedKeys="true">
 		INSERT INTO club_temporary(
 			id,
@@ -121,6 +122,7 @@
 			bindMobile,
 			contractEmail,
 			linkMan,
+			linkManIdentity,
 			provinceId,
 			cityId,
 			townId,
@@ -143,6 +145,7 @@
 			#{bindMobile},
 			#{contractEmail},
 			#{linkMan},
+			#{linkManIdentity},
 			#{provinceId},
 			#{cityId},
 			#{townId},
@@ -159,9 +162,9 @@
 			#{addTime}
 		)
 	</insert>
-	
+
 	<update id="update">
-		UPDATE club_temporary SET 	
+		UPDATE club_temporary SET
 			userId = #{userId},
 			confirmUserId = #{confirmUserId},
 			name = #{name},
@@ -169,6 +172,7 @@
 			bindMobile = #{bindMobile},
 			contractEmail = #{contractEmail},
 			linkMan = #{linkMan},
+			linkManIdentity = #{linkManIdentity},
 			provinceId = #{provinceId},
 			cityId = #{cityId},
 			townId = #{townId},
@@ -185,7 +189,7 @@
 			addTime = #{addTime}
 		WHERE id = #{id}
 	</update>
-	
+
 	<delete id="delete">
 		DELETE FROM club_temporary
 		WHERE id = #{id}
@@ -232,5 +236,5 @@
 		<include refid="clubTemporaryJoins"/>
 		WHERE a.confirmUserId = #{userId}
 	</select>
-	
-</mapper>
+
+</mapper>

File diff suppressed because it is too large
+ 1492 - 402
src/main/webapp/WEB-INF/views/modules/baikePage/auditBaikeProductPage.jsp


+ 1913 - 191
src/main/webapp/WEB-INF/views/modules/baikePage/checkBaikePage.jsp

@@ -3,32 +3,170 @@
 <%@ include file="/WEB-INF/views/include/taglib.jsp"%>
 <html>
 <head>
-	<title>产品管理</title>
+	<title>采美词条</title>
 	<meta name="decorator" content="default"/>
 	<style>
-		.titleClass{
-			font-weight: bolder;
-			margin-left: -40px;
+		.applicationsan{
+			user-select: none;
+			cursor: pointer;
 		}
-		.keyClass{
-			font-weight: bolder;
+		.controls{
+			width: 520px;
 		}
-		.paramRow {
-			margin-top: 10px;
+		.controls.not-overflow{
+			overflow: initial !important;
 		}
-	</style>
-	<style>
-		.clearfix::after{
-			content: "";
+		.content-edit{
+			position: relative;
+			width: 100%;
+			z-index: 999;
+		}
+		.content-edit .bk-input{
+			padding: 4px 6px;
+			font-size: 14px;
+			line-height: 20px;
+			color: #555;
+			border-radius: 4px;
+			background-color: #fff;
+			border: 1px solid #ccc
+		}
+		.content-edit .bk-input img.scapegoat{
+			width: 16px;
+			height: 16px;
+			vertical-align: -3px;
+		}
+		.content-edit .bk-toolbar{
+			position: absolute;
+			padding: 6px 12px;
+			border: 1px solid #f1f1f1;
+			left: 0;
+			top: 0;
+			transform: translateY(-100%);
+			font-size: 14px;
+			text-align: center;
+			background: #fff;
+			color: #999;
+			cursor: pointer;
+			display: none;
+		}
+		.content-edit .bk-bubble{
+			font-size: 14px;
+			padding: 0 4px;
+			line-height: 18px;
+			border-radius: 12px;
+			position: absolute;
+			right: 0;
+			top: 0;
+			transform: translate(50%, -50%);
+			background: #ddd;
+			color: #fff;
+			box-sizing: border-box;
+			min-width: 18px;
+			text-align: center;
+			display: none;
+			cursor: pointer;
+		}
+		.content-edit .bk-literature{
+			position: absolute;
+			bottom: 0;
+			left: 0;
+			transform: translateY(100%);
+			background: #fff;
+			border: 1px solid #ddd;
+			padding: 0;
+			margin: 0;
+			width: 100%;
+			box-sizing: border-box;
+			display: none;
+		}
+		.content-edit .bk-literature li{
+			list-style-type: none;
+			padding: 8px 16px;
+			display: flex;
+			justify-content: space-between;
+			z-index: 200;
+		}
+		.content-edit .bk-literature li .controls{
+			margin-left: initial;
+			width: inherit;
+		}
+		.content-edit .bk-literature .bk-control{
+			max-width: 80%;
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+		}
+		.content-edit .bk-literature .bk-control span{
+			cursor: pointer;
+		}
+		.content-edit .bk-literature .bk-control span:hover{
+			text-decoration: underline;
+		}
+		.content-edit .bk-literature .bk-literature-control span{
+			margin-left: 12px;
+			cursor: pointer;
+			color: #2fa4e7;
+		}
+		.bk-textInfo-item{
+			position: relative;
+			display: flex;
+			align-items: center;
+			margin-bottom: 16px;
+		}
+		.bk-textInfo-item input{
 			display: block;
-			clear: both;
+			width: 100%;
+		}
+		.bk-textInfo-item .bk-textInfo-control{
+			flex: 1;
+			display: flex;
+			flex-wrap: nowrap;
+			column-gap: 8px;
+			margin-left: 16px;
+			position: absolute;
+			right: 0;
+			top: 5px;
+			transform: translateX(105%);
+		}
+		.bk-textInfo-item .bk-textInfo-control span{
+			font-size: 12px;
+			text-decoration: underline;
+			white-space: nowrap;
+			cursor: pointer;
+			color:#2fa4e7;
+		}
+		.paramList{
+			position: relative;
+		}
+		.paramList .param-item{
+			display: flex;
+			align-items: center;
+			column-gap: 16px;
+			position: relative;
+			margin-bottom: 16px;
+		}
+		.paramList .param-name input{
+			display: block;
+			width: initial;
+		}
+		.paramList  .param-name{
+			width: 30%;
+		}
+		.paramList  .param-content{
+			flex: 1;
+		}
+		.paramList  a{
+			position: absolute;
+			right: 0;
+			top: 10%;
+			transform: translateX(130%);
+		}
+		.paramList .control-group{
+			position: relative;
+		}
+		.paramList .add-button{
+			margin-bottom: 16px;
 		}
-		.iconBox{
-			font-size: 0;
-		}/*
-		.controls{
-			margin-left: 0 !important;
-		}*/
 		.controls .conList{
 			display: inline-block;
 			margin-right: 15px;
@@ -95,8 +233,6 @@
 			width: 660px;
 			float: left;
 		}
-	</style>
-	<style>
 		.iconBox{
 			font-size: 0;
 		}
@@ -145,225 +281,1811 @@
 			cursor: pointer;
 			z-index: 100;
 		}
+
+		.display-image-list .cancel-upload{
+			top: -106px;
+			left: 114px;
+		}
+		.display-image-list .conList{
+			position: relative;
+		}
 		.hide-pic {
 			display: none !important;
 		}
+		.select2-choice{
+			width: 200px
+		}
+
+		.red {
+			color: red;
+		}
+		.upload {
+			position: relative;
+			display: inline-block;
+			background: #D0EEFF;
+			border: 1px solid #99D3F5;
+			border-radius: 4px;
+			padding: 4px 12px;
+			color: #1E88C7;
+			text-decoration: none;
+			text-indent: 0;
+			line-height: 20px;
+			margin-left: 20px;
+			cursor: pointer;
+			width: 52px;
+			height: 20px;
+		}
+
+		.upload input {
+			position: absolute;
+			width: 170px;
+			font-size: 20px;
+			right: 0;
+			top: 0;
+			opacity: 0;
+			cursor: pointer;
+		}
+
+		.upload:hover {
+			background: #AADFFD;
+			border-color: #78C3F3;
+			color: #004974;
+			text-decoration: none;
+		}
+
+		.add-submit {
+			position: relative;
+			display: inline;
+			background: #D0EEFF;
+			border: 1px solid #99D3F5;
+			border-radius: 4px;
+			padding: 4px 12px;
+			color: #1E88C7;
+			text-decoration: none;
+			text-indent: 0;
+			line-height: 20px;
+			margin-left: 20px;
+			cursor: pointer;
+			width: 52px;
+			height: 30px;
+		}
+
+		.add-submit input {
+			position: absolute;
+			width: 50px;
+			font-size: 20px;
+			right: 0;
+			top: 0;
+			opacity: 0;
+			cursor: pointer;
+		}
+
+		.add-submit:hover {
+			background: #AADFFD;
+			border-color: #78C3F3;
+			color: #004974;
+			text-decoration: none;
+		}
+
+		.upload-loading{
+			display: none;
+			width: 32px;
+			height: 32px;
+			margin-left: 10px;
+		}
+		.upload-loading img{
+			width: 16px;
+			height: 16px;
+			margin: 0 auto 0;
+		}
+
+		#file-list-display {
+			width: 600px;
+			height: auto;
+			float: left;
+			margin-left: 20px;
+		}
+
+		#file-list-display p {
+			line-height: 30px;
+			font-size: 14px;
+			color: #333333;
+			margin: 0;
+		}
+
+		#file-list-display p .del {
+			color: #2fa4e7;
+			font-size: 12px;
+			cursor: pointer;
+			margin-left: 20px;
+		}
+
+		.Main-content{
+			height: 100px;
+		}
+		.dialogmask {
+			position: fixed;
+			top: 0px;
+			height: 100%;
+			width: 100%;
+			z-index: 1000;
+			display: none;
+
+		}
+
+		.opacity { /*遮罩浑浊处理*/
+			opacity: 0.3;
+			filter: alpha(opacity=30);
+			background-color: #000;
+		}
+
+		.box {
+			overflow: hidden;
+			position: fixed;
+			width: 55%;
+			height: 60%;
+			z-index: 1005; /*值越大,和其他层层叠时越在上面*/
+			left: 20%;
+			top: 15%;
+			background-color: #fff;
+			border: 1px solid rgb(0, 153, 153);
+		}
+		.ckzl {
+			overflow: hidden;
+			position: fixed;
+			width: 600px;
+			max-height: 600px;
+			z-index: 1000; /*值越大,和其他层层叠时越在上面*/
+			left: 50%;
+			top: 50%;
+			background-color: #fff;
+			transform: translate(-50%, -50%);
+			padding: 32px;
+			border: 1px solid #ddd;
+		}
+
+		.ckzl .digcontent .dig-tab{
+			display: flex;
+			align-items: center;
+			padding-bottom: 24px;
+		}
+
+		.ckzl .digcontent .dig-tab a{
+			margin-right: 16px;
+		}
+
+		.ckzl .digcontent .control-group{
+			margin-left: 0 !important;
+			margin-top: 12px;
+		}
+
+		.ckzl .form-actions{
+			display: flex;
+			align-items: center;
+			background: transparent;
+			padding: 0;
+			padding-top: 20px;
+			background-color: transparent;
+			margin-bottom: 0;
+			border-top: 1px solid #e5e5e5
+		}
+
+		.ckzl .form-actions button{
+			margin-left: 16px;
+		}
+
+		.ckzl .auth-qrCode-list{
+			margin-top: -60px;
+			margin-left: 30px;
+		}
+
+		.ckzl .bk-upload-tip{
+			margin-left: 24px;
+			margin-top: 16px;
+			font-size: 12px;
+			color: #999;
+		}
+
+		.ckzl .bk-input-tip{
+			margin-left: 100px;
+			font-size: 12px;
+			color: #999;
+		}
+
+		.dialogtitle {
+			width: 100%;
+			height: 30px;
+			line-height: 30px;
+			position: absolute;
+			font-size: 18px;
+			top: 0px;
+			background-color: lightgrey;
+		}
+
+		.dialogcontent {
+			padding-top: 20px;
+			OVERFLOW: scroll;
+			height: calc(100% - 20px);
+			height: -webkit-calc(100% - 20px);
+			margin-left: 30px;
+		}
+
+		.logcontent {
+			padding: 10px;
+		}
+		.pla::-webkit-input-placeholder{
+			color: green;
+		}
+
+		#mainIgeBox{
+			margin-top: -174px;
+			margin-left:  0 !important;
+		}
+
+		#mainIgeBox label{
+			margin-left: 27px !important;
+			margin-top: 14px;
+		}
 	</style>
 	<script type="text/javascript">
+		//显示弹框,并且根据结果是true或false来更改标题部分的颜色
+		function showlog_result(result, info) {//展示具体弹框内容,以及根据结果是否正确变更title的颜色
+			$("#dialog").css({display: "block"});//通过Jquery的css()更改样式
+			$("#dialogmask").css({display: "block"});
+			// var s=document.getElementById("logcontent").innerHTML;
+			// $("#logcontent").html(s);
+		}
+		//关闭弹窗
+		function dialog(){
+			document.getElementById("dialog").style.display='none';
+			document.getElementById("dialogmask").style.display='none';
+		}
+		//显示资料弹窗
+		function digCk(type){
+			document.getElementById("dig").style.display='block';
+			document.getElementById("dig").title=type;
+		}
+		//隐藏资料弹窗
+		function cantral(){
+			document.getElementById("dig").style.display='none';
+		}
+		//添加资料
+		function addZl(){
+			document.getElementById("zl").style.display='block';
+			document.getElementById("yyzl").style.display='none';
+			document.getElementById("confimRefrence").style.display='block';
+		}
+		function removeZl(){
+			document.getElementById("zl").style.display='none';
+			document.getElementById("yyzl").style.display='block';
+			document.getElementById("confimRefrence").style.display='none';
+		}
+		//不同资料显示不同的内容
+		function ckzl_change(){
+			var content=$("#info").val();
+			if(2 == content){
+				document.getElementById("wlzl").style.display='none';
+				document.getElementById("zzzl").style.display='block';
+				document.getElementById("qtzl").style.display='none';
+			}else if(3 == content){
+				document.getElementById("wlzl").style.display='none';
+				document.getElementById("zzzl").style.display='none';
+				document.getElementById("qtzl").style.display='block';
+			}else{
+				document.getElementById("wlzl").style.display='block';
+				document.getElementById("zzzl").style.display='none';
+				document.getElementById("qtzl").style.display='none';
+			}
+		}
+		//信息栏只读设置
+		function readflag(index){
+			var info=document.getElementById("name["+index+"]").value;
+			//标题为空则内容只读
+			if(undefined != info && null!=info && '' !=info){
+				document.getElementById("content["+index+"]").readOnly=false;
+			}else{
+				document.getElementById("content["+index+"]").readOnly=true;
+			}
+		}
+		$(document).ready(function() {
+			var flag=document.getElementById("createEntryGuidance").innerHTML;
+			if('添加'==flag){
+				showlog_result(null,null);
+			}
+			$("#inputForm").validate({
+				submitHandler: function(form){
+					// $('.xxl-name').each(function (index, item) {
+					// 	$(item).attr('name', 'paramList['+ index +'].name')
+					// })
+					var status = $("input[name='status']:checked").val();
+					// 计算空数据条数
+					debugger
+					var propertyArr = [];
+					var name = $("#name").val();
+					// var alias = $("#alias").val();
+					// var discription = $("#discription").val();
+					var shopId = $("#shopId").val();
+					// var param0 = $('input[name="paramList[0].name"]').val();
+					var seoKeyword = $("#seoKeyword").val();
+					var publishTime = $('input[name="publishTime"]').val();
+					var basePv = $("#basePv").val();
+					var typeId = $("#typeId").val();
+
+					propertyArr[0] = name;
+					// propertyArr[1] = discription;
+					// propertyArr[1] = param0;
+					propertyArr[1] = seoKeyword;
+					propertyArr[2] = shopId;
+					propertyArr[3] = publishTime;
+					propertyArr[4] = basePv;
+					propertyArr[5] = typeId;
+					// propertyArr[8] = alias;
+					// propertyArr[9] = image;
+					// alert("1111111111111111");
+					var emptyNum = 0;
+					for (var i = 0; i < propertyArr.length; i++) {
+						var property = propertyArr[i].trim();
+						if ("" === property) {
+							emptyNum++;
+						}
+					}
+					$("#emptyNum").val(emptyNum);
+
+					// 检测敏感词
+					var propertyMap = new Map();
+					propertyMap.set("name", name);
+					// propertyMap.set("alias", alias);
+					// propertyMap.set("discription", discription);
+					// propertyMap.set("productLink", productLink);
+					for (var i = 0; i <= 9; i++) {
+						var paramName = "\"paramList[" + i + "].name\"";
+						var contentName = "\"paramList[" + i + "].content\"";
+						var param = $('input[name=' + paramName + ']').val();
+						var content = $('input[name=' + contentName + ']').val();
+						if ( param === undefined || param === '') {
+							break;
+						} else {
+							propertyMap.set("param" + i, param);
+							propertyMap.set("content" + i, content);
+						}
+					}
+					// propertyMap.set("advantage", advantage);
+					// propertyMap.set("disadvantage", disadvantage);
+					// propertyMap.set("principle", principle);
+					propertyMap.set("seoKeyword", seoKeyword);
+					// propertyMap.set("brand", brand);
+					// propertyMap.set("producePlace", producePlace);
+					// propertyMap.set("company", company);
+					// propertyMap.set("adaptiveMan", adaptiveMan);
+					// propertyMap.set("unAdaptiveMan", unAdaptiveMan);
+					// propertyMap.set("aroundOperation", aroundOperation);
+					// if (2 == commodityType) {
+					//     propertyMap.set("authLink", authLink);
+					// }
+					<%--for (var i = 0; i <= 20; i++) {--%>
+					<%--	var questionName = "\"questionList[" + i + "].question\"";--%>
+					<%--	var answerName = "\"questionList[" + i + "].answer\"";--%>
+					<%--	var question = $('input[name=' + questionName + ']').val();--%>
+					<%--	var answer = $('input[name=' + answerName + ']').val();--%>
+					<%--	if (question === undefined || question === '') {--%>
+					<%--		break;--%>
+					<%--	} else {--%>
+					<%--		propertyMap.set("question" + i, question);--%>
+					<%--		propertyMap.set("answer" + i, answer);--%>
+					<%--	}--%>
+					<%--}--%>
+					var sensitiveWords = '${sensitiveWords}';
+					const mint = new MintFilter(sensitiveWords.split('|'));
+					var filterSync = '';
+					var touchWords = '';
+					var touchNum = 0;
+					<%--debugger--%>
+					propertyMap.forEach(function (value,key,map) {
+						filterSync = mint.filterSync(value);
+						filterSync.words.forEach(word=>{
+							touchWords += touchWords === '' ? word : "," + word;
+						})
+						if (touchWords !== '') {
+							// 增加敏感词触发数量
+							touchNum++;
+							// 设置敏感词提示
+							$("#" + key + "SensitiveWords").text("敏感词:" + touchWords);
+							touchWords = '';
+						}
+					});
+					if (1 == status && emptyNum > 0) {
+						var msg = "您还剩余" + emptyNum + "项未完善,将会导致用户对您产品/仪器的认识度不够,确认是否提交?";
+						top.$.jBox.confirm(msg, '系统提示', function (v, h, f) {
+							if (v == 'ok') {
+								if (touchNum > 0) {
+									var msg = 1 == status?"当前发布内容存在敏感词,已为您标记在输入框下方," +
+											"请修改后,再进行保存发布,强行保存发布将会导致审核不通过!":
+											"当前内容存在敏感词,已为您标记在输入框下方,建议修改后再进行保存!否则," +
+											"将会影响发布时审核不通过!";
+									top.$.jBox.confirm(msg, '系统提示', function (v, h, f) {
+										if (v == 'ok') {
+											loading('正在提交,请稍等...');
+											form.submit();
+										}
+									}, {buttonsFocus: 1, persistent: true});
+								} else{
+									loading('正在提交,请稍等...');
+									form.submit();
+								}
+							}
+						}, {buttonsFocus: 1, persistent: true});
+					} else {
+						if (touchNum > 0) {
+							var msg = 1 == status?"当前发布内容存在敏感词,已为您标记在输入框下方," +
+									"请修改后,再进行保存发布,强行保存发布将会导致审核不通过!":
+									"当前内容存在敏感词,已为您标记在输入框下方,建议修改后再进行保存!否则," +
+									"将会影响发布时审核不通过!";
+							top.$.jBox.confirm(msg, '系统提示', function (v, h, f) {
+								if (v == 'ok') {
+									loading('正在提交,请稍等...');
+									form.submit();
+								}
+							}, {buttonsFocus: 1, persistent: true});
+						} else{
+							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);
+					}
+				}
+			});
+		});
+		function saveInfo(){
+			var content=$("#info").val();//参考资料类型
+			var website=$("#website").val();//网址
+			var articleName=$("#articleName").val();//文章名字
+			var websiteName=$("#websiteName").val();//网站名称
+			var publishTimeStr=$("#publishTimeStr").val();//发布日期
+			var acitationTimeStr=$("#acitationTimeStr").val();//引文日期
+			var productId="";
+			<c:if test="${cmBaikeProduct.entryId eq 2}">
+			productId=${cmBaikeProduct.id}
+			</c:if>
+			var zlid=document.getElementById("dig").lang;
+			var params={}
+			if(content==1){
+				params={
+					//网络资料
+					"referenceType":content,
+					"website":website,
+					"articleName":articleName,
+					"websiteName":websiteName,
+					"publishTimeStr":publishTimeStr,
+					"acitationTimeStr":acitationTimeStr,
+					//公共
+					"productId":productId,//词条id
+					"productType":document.getElementById("dig").title,//词条内容
+					"flagId":document.getElementById("dig").tabIndex,//添加修改标识  1添加 2修改
+					"zlId":zlid//资料id 用于修改
+				}
+			}else if(content=2){
+				params={
+					"referenceType":content,
+					"author":$("#author").val(),//作者
+					"workName":$("#workName").val(),//著作名
+					"publicationPlace":$("#publicationPlace").val(),//出版地
+					"press":$("#press").val(),//出版社
+					"publicationYearStr":$("#publicationYearStr").val(),//出版年
+					"acitationWeb":$("#acitationWeb").val(),//引文页码
+					//公共
+					"productId":productId,//词条id
+					"productType":document.getElementById("dig").title,//词条内容
+					"flagId":document.getElementById("dig").tabIndex,//添加修改标识  1添加 2修改
+					"zlId":zlid//资料id 用于修改
+				}
+			}else if(content=3){
+				params={
+					//其他资料
+					"referenceDescription":$("#referenceDescription").val(),//参考资料说明
+					"imageDescription":$("#imageDescription").val(),//图片描述
+					"imageUrl":$("#image").val(),//图片地址
+					//公共
+					"productId":productId,//词条id
+					"productType":document.getElementById("dig").title,//词条内容
+					"flagId":document.getElementById("dig").tabIndex,//添加修改标识  1添加 2修改
+					"zlId":zlid//资料id 用于修改
+				}
+			}
+			// alert(content+"---"+website+"---"+articleName+"---"+websiteName+"---"+publishTime+"---"+acitationTime);
+			// var params={
+			// 	//网络资料
+			// 	"referenceType":content,
+			// 	"website":website,
+			// 	"articleName":articleName,
+			// 	"websiteName":websiteName,
+			// 	"publishTimeStr":publishTimeStr,
+			// 	"acitationTimeStr":acitationTimeStr,
+			// 	//著作资料
+			// 	"author":$("#author").val(),//作者
+			// 	"workName":$("#workName").val(),//著作名
+			// 	"publicationPlace":$("#publicationPlace").val(),//出版地
+			// 	"press":$("#press").val(),//出版社
+			// 	"publicationYearStr":$("#publicationYearStr").val(),//出版年
+			// 	"acitationWeb":$("#acitationWeb").val(),//引文页码
+			// 	//其他资料
+			// 	"referenceDescription":$("#referenceDescription").val(),//参考资料说明
+			// 	"imageDescription":$("#imageDescription").val(),//图片描述
+			// 	"imageUrl":$("#image").val(),//图片地址
+			//     //公共
+			// 	"productId":productId,//词条id
+			//     "productType":document.getElementById("dig").title,//词条内容
+			// 	"flagId":document.getElementById("dig").tabIndex,//添加修改标识  1添加 2修改
+			// 	"zlId":zlid//资料id 用于修改
+			// }
+			$.ajax({
+				url : "${ctx}/baike/cmBaikeProduct/saveMaterialinfo",
+				data : params,
+				type : 'post',
+				success : function(data){
+					document.getElementById("dig").style.display='none';
+					alert("保存资料成功");
+					$("#dig").load(location.href+" #dig>*","");
+					<%--window.location.href = "${ctx}/baike/cmBaikeProduct/form?commodityType=1";--%>
+
+				},
+				error : function(){
+					alert(222);
+				}
+			})
+		}
+		function saveMataInfo(){
+
+		}
+
+		function imgSizeChange(){
+			// if($("#img"+size).width==){
+			//
+			// }
+			// alert();
+			// document.getElementById("imgaa").style.width=100px;
+			parent.location.href = "https://zp.caimei365.com/12/ross/activity/challenge";
+		}
+		//删除资料
+		function delMaterial(mid){
+			var msg='确定删除该资料?';
+			top.$.jBox.confirm(msg,'系统提示',function(v,h,f){
+				if(v=='ok'){
+					$.ajax({
+						url : "${ctx}/baike/cmBaikeProduct/delMaterialinfo",
+						data : {"mid":mid},
+						type : 'post',
+						success : function(data){
+							top.$.jBox.tip('删除资料成功', 'success');
+							$("#mata").load(location.href+" #mata>*","");
+							<%--window.location.href = "${ctx}/baike/cmBaikeProduct/form?commodityType=1";--%>
+						},
+						error : function(){
+							alert(222);
+						}
+					})
+				}
+				// top.$.jBox.tip('删除成功', 'success');
+				// window.location.reload();
+				return;
+			},{buttonsFocus:1,persistent: true});
+		}
+		//编辑资料
+		function upMaterial(mid){
+			$.ajax({
+				url : "${ctx}/baike/cmBaikeProduct/getMaterialinfo",
+				data : {"mid":mid},
+				type : 'post',
+				success : function(data){
+					$("#info").val(data.referenceType);
+					var content=$("#info").val();
+					// $("#info option[value='3']").prop("selected",true);
+					if(2 == content){
+						document.getElementById("wlzl").style.display='none';
+						document.getElementById("zzzl").style.display='block';
+						document.getElementById("qtzl").style.display='none';
+					}else if(3 == content){
+						document.getElementById("wlzl").style.display='none';
+						document.getElementById("zzzl").style.display='none';
+						document.getElementById("qtzl").style.display='block';
+					}else{
+						document.getElementById("wlzl").style.display='block';
+						document.getElementById("zzzl").style.display='none';
+						document.getElementById("qtzl").style.display='none';
+					}
+					//判断是编辑还是添加 1添加 2编辑
+					if(data.referenceType==1){
+						$("#website").val(data.website);
+						$("#articleName").val(data.articleName);
+						$("#websiteName").val(data.websiteName);
+						$("#publishTimeStr").val(data.publishTimeStr);
+						$("#acitationTimeStr").val(data.acitationTimeStr);
+						document.getElementById("dig").style.display='block';
+					}
+					if(data.referenceType==2){
+						$("#author").val(data.author);
+						$("#workName").val(data.workName);
+						$("#publicationPlace").val(data.publicationPlace);
+						$("#press").val(data.press);
+						$("#publicationYearStr").val(data.publicationYearStr);
+						$("#acitationWeb").val(data.acitationWeb);
+						document.getElementById("dig").style.display='block';
+					}
+					document.getElementById("dig").tabIndex=2;
+					document.getElementById("dig").lang=mid;
+				},
+				error : function(){
+					alert(222);
+				}
+			})
+		}
 	</script>
 </head>
 <body>
-	<ul class="nav nav-tabs">
-		<li><a href="${ctx}/baike/cmBaikeProduct/?commodityType=${cmBaikeProduct.commodityType}&publishSource=${cmBaikeProduct.publishSource}">${commodityType}</a></li>
-		<li class="active"><a href="${ctx}/baike/cmBaikeProduct/check?id=${cmBaikeProduct.id}">查看</a></li>
-	</ul><br/>
-	<form:form id="inputForm" modelAttribute="cmBaikeProduct" action="${ctx}/baike/cmBaikeProduct/save" method="post" class="form-horizontal">
-		<div class="control-group">
-			<label class="control-label titleClass">${commodityType}简述</label>
-		</div>
-		<div class="control-group">
-			<label class="control-label">${commodityType}名称:</label>
-			<div class="controls">
-				${cmBaikeProduct.name}
-			</div>
-		</div>
-		<div class="control-group">
-			<label class="control-label">${commodityType}别名:</label>
-			<div class="controls">
-				${cmBaikeProduct.alias}
-			</div>
-		</div>
-		<div class="control-group">
-			<label class="control-label">${commodityType}概述:</label>
-			<div class="controls" style="width:812px">
-				${cmBaikeProduct.discription}
-            </div>
+<ul class="nav nav-tabs">
+	<li><a href="${ctx}/baike/cmBaikeProduct/?commodityType=${cmBaikeProduct.commodityType}">采美词条</a></li>
+	<li class="active"><a id="createEntryGuidance"  href="${ctx}/baike/cmBaikeProduct/form?id=${cmBaikeProduct.id}&commodityType=${cmBaikeProduct.commodityType}">${not empty cmBaikeProduct.id?'编辑':'添加'}</a></li>
+</ul><br/>
+<%--	<div>--%>
+<%--		<button onclick="showlog_result(true,'展示正确内容的弹框')">展示正确弹框</button>--%>
+<%--	</div>--%>
+<div id="dialogmask" class="dialogmask opacity"></div>
+<div id="dig" class="ckzl" style="display: none"> 
+	<div id="dig_content" class="digcontent">
+		<div class="dig-tab">
+			<a class="btn btn-primary" onclick="addZl()">添加参考资料</a>
+			<a class="btn btn-primary" onclick="removeZl()">引用已有资料</a>
 		</div>
-		<div class="control-group">
-			<label class="control-label">${commodityType}概述:</label>
-			<div class="controls">
-				${cmBaikeProduct.productLink}
-            </div>
-		</div>
-		<div class="control-group">
-			<label class="control-label">${commodityType}图片:</label>
-			<div class="controls">
-				<a href="${cmBaikeProduct.image}" style="cursor: pointer;margin-left: 20px" target="_blank"><img src="${cmBaikeProduct.image}" style="width: 120px"></a>
+		<%--已有资料--%>
+		<div class="control-group" id="yyzl" style="display: none">
+			<div class="check-reference-list">
+				<c:forEach items="${cmBaikeProduct.materialInfo}" var="videoFile" varStatus="statusIndex">
+					<c:if test="${videoFile.referenceType eq '1'}">
+						<div class="controls applicationsan">
+							<span class="del">[${statusIndex.index}]</span>
+							<span class="del"><a href="${videoFile.website}" target="_blank">${videoFile.articleName}.</a></span>
+							<span class="del">${videoFile.websiteName}).</span>
+							<span class="del">${videoFile.publishTime}.</span>
+							<span class="del">${videoFile.acitationTime}.</span>
+							<a onclick="saveMataInfo(${videoFile.id})"></a>
+						</div>
+					</c:if>
+					<c:if test="${videoFile.referenceType eq '2'}">
+						<div class="controls applicationsan">
+							<span class="del">[${statusIndex.index}]</span>
+							<span class="del">${videoFile.author}.</span>
+							<span class="del">${videoFile.workName}.</span>
+							<span class="del">${videoFile.publicationPlace}.</span>
+							<span class="del">${videoFile.press}.</span>
+							<span class="del">${videoFile.publicationYear}.</span>
+							<span class="del">${videoFile.acitationWeb}.</span>
+							<a onclick="saveMataInfo(${videoFile.id})"></a>
+
+						</div>
+					</c:if>
+					<c:if test="${videoFile.referenceType eq '3'}">
+						<div class="controls applicationsan">
+							<span class="del">[${statusIndex.index}]</span>
+							<span class="del">${videoFile.referenceDescription}.</span>
+							<span class="del">${videoFile.imageDescription}.</span>
+								<%--
+								<div class="conList">
+									<img id="imgaa"  src="${videoFile.imageUrl}" height="50px" width="50px" >(图片)</input>
+								</div>
+								--%>
+							<a onclick="saveMataInfo(${videoFile.id})">引用资料</a>
+						</div>
+					</c:if>
+				</c:forEach>
 			</div>
 		</div>
-        <div style="${cmBaikeProduct.commodityType eq 2?'':'display:none'}" >
-            <div class="control-group">
-                <label class="control-label titleClass">正品识别</label>
-            </div>
-            <div class="control-group">
-                <label class="control-label">认证链接:</label>
-                <div class="controls">
-					${cmBaikeProduct.authLink}
-                </div>
-            </div>
+		<%--添加参考资料--%>
+		<div id="zl">
 			<div class="control-group">
-				<label class="control-label">认证二维码:</label>
-				<div class="controls">
-					<a href="${cmBaikeProduct.authQrCode}" style="cursor: pointer;margin-left: 20px" target="_blank"><img src="${cmBaikeProduct.authQrCode}" style="width: 120px"></a>
+				<label class="red">*</label>
+				<label class="control-label">参考资料类型:</label>
+				<select id="info" onchange="ckzl_change()">
+					<option id="zllx1" value="1">网络资料</option>
+					<option id="zllx2" value="2">著作资料</option>
+					<option id="zllx3" value="3">其他资料</option>
+				</select>
+			</div>
+			<%--网络资料--%>
+			<div class="wlzl" style="display: block" id="wlzl">
+				<div class="control-group">
+					<label class="red">*</label>
+					<label class="control-label keyClass">输入网址:</label>
+					<input type="text" id="website" required="true"  htmlEscape="false" class="input-xlarge " placeholder="请以http(s)开头"/>
+				</div>
+				<div class="control-group">
+					<label class="red">*</label>
+					<label class="control-label keyClass">文章名字:</label>
+					<input type="text" id="articleName" required="true" htmlEscape="false" class="input-xlarge " placeholder="请输入文章名字"/>
+				</div>
+				<div class="control-group">
+					<label class="red">*</label>
+					<label class="control-label keyClass">网站名称:</label>
+					<input  type="text" id="websiteName"  htmlEscape="false" class="input-xlarge " placeholder="请输入网站名称 如:新华网"/>
+				</div>
+				<div class="control-group">
+					<label class="control-label keyClass">发表日期:</label>
+					<input type="text" id="publishTimeStr" name="publishTimeStr" type="text" readonly="readonly" maxlength="20" class="input-medium Wdate "
+						   onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+				</div>
+				<div class="control-group">
+					<label class="control-label keyClass">引文日期:</label>
+					<input type="text" id="acitationTimeStr" name="publishTimeStr" type="text" readonly="readonly" maxlength="20" class="input-medium Wdate "
+						   onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
 				</div>
 			</div>
-        </div>
-		<div class="paramList">
-			<div class="control-group">
-				<label class="control-label titleClass">${commodityType}参数</label>
+			<%--著作资料--%>
+			<div class="zzzl" style="display: none" id="zzzl">
+				<div class="control-group" >
+					<label class="red">*</label>
+					<label class="control-label keyClass">作者:</label>
+					<input type="text" id="author" htmlEscape="false" class="input-xlarge " placeholder="请输入作者名称 多个作者使用英文都好隔开"/>
+				</div>
+				<div class="control-group">
+					<label class="red">*</label>
+					<label class="control-label keyClass">著作名:</label>
+					<input type="text" id="workName"  htmlEscape="false" class="input-xlarge " placeholder="请输入著作名"/>
+				</div>
+				<div class="control-group">
+					<label class="control-label keyClass">出版地:</label>
+					<input type="text" id="publicationPlace" htmlEscape="false" class="input-xlarge " placeholder="请输入出版地信息"/>
+				</div>
+				<div class="control-group">
+					<label class="red">*</label>
+					<label class="control-label keyClass">出版社:</label>
+					<input type="text" id="press" htmlEscape="false" class="input-xlarge " placeholder="请输入出版社名称"/>
+				</div>
+				<div class="control-group">
+					<label class="control-label keyClass">出版年:</label>
+					<input type="text" id="publicationYearStr" name="publicationYearStr"  type="text" readonly="readonly" maxlength="20" class="input-medium Wdate "
+						   onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+				</div>
+				<div class="control-group">
+					<label class="control-label keyClass">引文编码:</label>
+					<input type="text" id="acitationWeb"  htmlEscape="false" class="input-xlarge " placeholder="请输入引用著作的页码 如 100 121"/>
+				</div>
 			</div>
-			<c:forEach items="${cmBaikeProduct.paramList}" var="productParam" varStatus="index">
+			<%--其他资料--%>
+			<div class="qtzl" id="qtzl" style="display: none" >
+				<div class="control-group">
+					<label class="red">*</label>
+					<label class="control-label keyClass">参考资料说明:</label>
+					<textarea id="referenceDescription" type="text"  style="position: relative;height: 100px; width: 450px;" maxlength="50" ></textarea>
+					<label class="bk-input-tip">其他类型参考资料,填写格式请参阅<a href="">《信息与文献 参考文献著录规则 GB/T 7714-2015》</a></label>
+				</div>
+				<div class="control-group" >
+					<label class="control-label keyClass">图片描述:</label>
+					<input type="text" id="imageDescription" htmlEscape="false" class="input-xlarge " placeholder="请输入其他参考资料的具体描述"/>
+				</div>
 				<div class="control-group">
-					<label class="control-label">${productParam.name}:</label>
-					<div class="controls">
-						${productParam.content}
+					<label class="control-label">图片上传:</label>
+					<div class="auth-qrCode-list clearfix">
+						<div class="controls upload-content iconBox mainImageBox" id="mainImageBox">
+							<div class="conList">
+								<hidden id="referenceImgUrl" path="referenceImgUrl" htmlEscape="false" maxlength="255" class="input-xlarge "/>
+								<sys:ckfinder input="referenceImgUrl" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+								<label class="bk-upload-tip">请上传引用的图片资源,需同时上传资料的封面、以及含有对应具体内容的图片;注意:图片需要保证完整、不可遮挡且清晰</label>
+							</div>
+						</div>
 					</div>
 				</div>
-			</c:forEach>
-		</div>
-		<div class="control-group">
-			<label class="control-label keyClass">${commodityType}优点:</label>
-			<div class="controls" style="width:812px">
-				${cmBaikeProduct.advantage}
-			</div>
-		</div>
-		<div class="control-group">
-			<label class="control-label keyClass">${commodityType}缺点:</label>
-			<div class="controls" style="width:812px">
-				${cmBaikeProduct.disadvantage}
 			</div>
+
 		</div>
-		<div class="control-group">
-			<label class="control-label keyClass">${commodityType}原理:</label>
-			<div class="controls" style="width:812px">
-				${cmBaikeProduct.principle}
-			</div>
+	</div>
+	<div class="form-actions">
+		<button class="cancel btn btn-primary">取 消</button>
+	</div>
+</div>
+<%--	<div id="dialogmask" class="dialogmask opacity"></div>--%>
+<div id="dialog" class="box" style="display: none"> 
+	<div id="dialog_content" class="dialogcontent">
+		<%--			<div id="logcontent" class="logcontent"><a herf="https://www.baidu.com">三生三世</a></div>--%>
+		<%--			<a herf="https://www.baidu.com">十里桃花</a>--%>
+		<div><h4>创建词条引导</h4></div>
+		<br>
+		<div>欢迎进入创建词条引导,为便于您更好的通过审核,请务必确保您已知晓百科词条的<a href="${ctx}/baike/cmBaikeProduct/entry" target="_blank">编辑须知</a>,如有疑问,您可以<a>点此</a>求助采美工作人员。</div>
+		<br>
+		<div><h5>声明</h5></div>
+		<br>
+		<div>在正式创建词条前,首先请你承诺:</div>
+
+		<div>1.不在百科添加广告性质的内容, 如联系方式,官方网站链接等;</div>
+
+		<div>2.不在百科编写涉及反动,违法犯罪,色情,暴力的内容;</div>
+
+		<div>3.不在百科编写虚假的、捏造的、恶搞的、缺乏根据的内容;</div>
+
+		<div>4.不侵犯他人合理权益;</div>
+
+		<div>5.接受违反以上规则时,百科账号会被封禁的结果。</div>
+		<br>
+		<div><h5>词条名</h5></div>
+		<br>
+		<div>成功创建词条的首要条件是了解一些基础知识!</div>
+		<br>
+		<div><h5>■什么是词条?</h5></div>
+		<br>
+		<div>词条指的是对于单一事物内容的介绍,例如技术,成分等。每个词条都有属于自己的名称,你可以通过搜索词条的名称来找到它们。</div>
+		<div>已有词条重名?创建多义词!</div>
+		<div>与已有词条意义相同?反馈同义词!</div>
+		<br>
+		<div><h5>■什么是规范的词条名?</h5></div>	<br>
+
+		<div>采美百科规范的词条名是一个专有名词,请使用正式的全称或最广为人知的常见名。</div>
+		<div>例如:皮秒激光美容、光子嫩肤、线粒体、葡聚糖等</div>
+		<br>
+		<div><h5>主题</h5></div>	<br>
+		<div>恭喜你已经完成了创建词条的第一步!现在想一想你要创建的词条属于什么类型?</div>
+		<div>选择正确的类型,精确定位你的创建难点所在!</div>
+
+
+		<br>
+		<div><h5>产品成分类词条</h5></div>	<br>
+		<div>如玻尿酸钠、葡聚糖、虎杖等</div>
+
+
+		<br>
+		<div><h5>产品技术词条</h5></div>	<br>
+		<div>如射频、皮秒、808半导体激光技术、透热疗法、448KHz、LDM水滴提升等</div>
+		<br>
+		<div><h5>词条创建要求</h5></div>	<br>
+		<div><h6>1.描述客观</h6></div>
+		<div>描述事物时以事实为依
+			据不加入感情色彩,不掺杂个人的好恶。百科词条
+			是客观内容的集合,只站在第三方立场,以事实说话。例如,
+			某篮球运动员某一场的投篮命中率较差,一般的表述是命中率低,
+			甚至使用“打铁”之类的贬义词。而这样的表述模糊不清,多少算低,多
+			少算高各有标准;同时也会造成支持者和反对者的口水战。所以直接把赛事数据
+			列出,是高是低各自评说即可。另外在筛选内容时,也要保证公正客观,尤其对于争
+			议性内容,保留多方观点并附以可靠的参考资料,是处理争议内容较为可取的做法。</div>
+		<br>
+		<div><h6>2.修饰适当</h6></div>	<br>
+		<div>百科词条提倡用语“客观”,在一般性的叙述中(区别于引用原文的引述)尽量少的使用形容词和程度副词(最XXXX、十分XXX……)。</div>
+		<br>
+		<div><h6>3.参考资料要有效</h6></div>	<br>
+
+
+		<div>参考资料是正文内容客观的另一种表现形式。词条某条内容,光靠“说”自己客观是不够的,应以可信有效的参考资料作为佐证来源,才能证明该内容是否已获得公众知晓或认可。
+			特色词条应该保证一半以上的信息点都是有可靠来源的(由科学百科权威认证的特色词条,应确保词条正文中(含概述)每个目录模块中都有至少一条权威参考资料)。
+			这里的有来源不是要求一字一句的复制粘贴,而是“内容虽经必要提炼、整理,但却不失原意”。例如前述的两个姜文词条中的文段,整理后的内容要素和观点依然来自参考资料,并没有增减其原意。
 		</div>
-		<div class="control-group">
-			<label class="control-label">SEO关键词:</label>
-			<div class="controls">
-					${cmBaikeProduct.seoKeyword}
-			</div>
+
+		<br>
+		<div>可靠的来源一般包括文献、书籍等出版物、主流媒体发布的消息、政府或公众机构官网发布的内容等。关于可靠的来源的具体定义,请参阅百度百科:参考资料。</div>
+		<br>
+
+
+		<div>如,“<a>牛顿第一运动定律</a>”词条中,定律内容、发现者、适用范围等都是必不可少的重要内容,这些部分的缺失会导致读者对词条内容的错误认识。</div>
+		<div align="center"><input class="btn btn-primary" type="button" onclick="dialog()" value="我已阅读并知晓"></div>  
+	</div>
+</div>
+
+<form:form id="inputForm" modelAttribute="cmBaikeProduct" action="${ctx}/baike/cmBaikeProduct/save" enctype="application/json" method="post" class="form-horizontal">
+	<form:hidden path="id"/>
+	<form:hidden path="fileIds"/>
+	<form:hidden path="commodityType"/>
+	<form:hidden path="emptyNum"/>
+	<form:hidden path="referenceList"/>
+	<sys:message content="${message}"/>
+	<%--词条名称--%>
+	<div class="control-group">
+		<label class="control-label">词条名称:</label>
+		<div class="controls">
+			<form:input path="name" htmlEscape="false" class="input-xlarge "/>
+			<label id="nameSensitiveWords" class="red"></label>
 		</div>
-		<div class="control-group">
-			<label class="control-label titleClass">${commodityType}档案</label>
+	</div>
+	<%--义项名--%>
+	<div class="control-group">
+		<label class="control-label">义项名:</label>
+		<div class="controls not-overflow">
+			<div class="content-edit" id="bk-name" name="alias"></div>
 		</div>
-		<div class="control-group">
-			<label class="control-label">品牌:</label>
-			<div class="controls">
-				${cmBaikeProduct.brand}
-			</div>
+	</div>
+	<%--词条概述--%>
+	<div class="control-group">
+		<label class="control-label">词条概述:</label>
+		<div class="controls not-overflow">
+			<div class="content-edit" id="discription" name="discription"></div>
+			<label id="discriptionSensitiveWords" class="red"></label>
 		</div>
-		<div class="control-group">
-			<label class="control-label">产地:</label>
-			<div class="controls">
-				${cmBaikeProduct.producePlace}
-			</div>
+	</div>
+	<%--概述图册--%>
+	<div class="control-group" style="width: 1000px">
+		<label class="control-label keyClass">概述图册:</label>
+		<div class="display-image-list" style="display: flex;flex-wrap: nowrap; margin-top: -36px">
+			<c:forEach items="${cmBaikeProduct.displayImageList}" var="displayImage" varStatus="index">
+				<div class="controls upload-content iconBox" id="displayImageBox${index.index}" style="width: 170px">
+					<div class="conList">
+						<form:hidden id="displayImage${index.index}" path="displayImageList[${index.index}]" htmlEscape="false"
+									 maxlength="255"
+									 class="input-xlarge "/>
+						<sys:ckfinder input="displayImage${index.index}" type="images" uploadPath="/photo"
+									  selectMultiple="false"
+									  maxWidth="100" maxHeight="100"/><br>
+					</div>
+				</div>
+			</c:forEach>
+			<c:set var="size" value="${empty cmBaikeProduct.displayImageList?0:cmBaikeProduct.displayImageList.size()}"/>
+			<c:forEach var="emptyIndex" begin="${size}" end="${5}">
+				<div class="controls upload-content iconBox conList ${emptyIndex eq 0?'':'hide-pic'}" id="displayImageBox${emptyIndex}" style="width: 170px">
+					<div class="conList">
+						<form:hidden id="displayImage${emptyIndex}" path="displayImageList[${emptyIndex}]" htmlEscape="false"
+									 maxlength="255"
+									 class="input-xlarge "/>
+						<sys:ckfinder input="displayImage${emptyIndex}" type="images" uploadPath="/photo"
+									  selectMultiple="false"
+									  maxWidth="100" maxHeight="100"/><br>
+					</div>
+				</div>
+			</c:forEach>
 		</div>
+	</div>
+	<div class="control-group">
 		<div class="control-group">
-			<label class="control-label">上市时间:</label>
-			<div class="controls">
-				${cmBaikeProduct.marketTime}
-			</div>
+			<label class="control-label keyClass">相关视频(各视频大小不超过50M,最多上传6个)</label>
 		</div>
 		<div class="control-group">
-			<label class="control-label">供应商:</label>
+			<label class="control-label">标题:</label>
 			<div class="controls">
-				${cmBaikeProduct.company}
-			</div>
-		</div>
-		<div class="control-group" style="position: relative">
-			<label class="control-label">NMPA认证时间:</label>
-			<div class="controls">
-				${cmBaikeProduct.nmpaTime}
-			</div>
-		</div>
-		<div class="control-group" style="width: 1000px">
-			<label class="control-label keyClass">${commodityType}认证:</label>
-			<div class="controls">
-				<c:forEach items="${cmBaikeProduct.authImageList}" var="authImage" varStatus="index">
-					<a href="${authImage}" style="cursor: pointer;margin-left: 20px" target="_blank"><img src="${authImage}" style="width: 120px"></a>
-				</c:forEach>
+				<input id="fileTitle" htmlEscape="false" type="text">
 			</div>
-		</div>
-		<div class="control-group">
-			<label class="control-label keyClass">适应症:</label>
-			<div class="controls" style="width:812px">
-				${cmBaikeProduct.adaptiveMan}
+			<label class="control-label" style="margin-top:10px">视频路径:</label>
+			<div class="controls" style="margin-top:10px;width: 600px;">
+				<input id="uploadFileName" type="text" style="display: inline;" placeholder="支持mp4" disabled="true" class="input-xlarge required" />
+				<div class="upload">
+					<input type="file" name="file" id="productFile" accept=".mp4" >选择文件
+				</div>
+				<div class="add-submit">
+					<input id="addSubmit" type="button" value="上传"/>上传&nbsp;
+				</div>
+				<div class="upload-loading">
+					<img alt="gif" src="/static/images/upload.gif" width="32px" border="none">
+				</div>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label keyClass">不适应人群:</label>
-			<div class="controls" style="width:812px">
-				${cmBaikeProduct.unAdaptiveMan}
+			<div id='file-list-display' style="margin-left:180px">
+				<c:if test="${not empty cmBaikeProduct.videoList}">
+					<c:forEach items="${cmBaikeProduct.videoList}" var="videoFile" varStatus="statusIndex">
+						<p>${videoFile.fileTitle}
+							<span class="del"><a onclick="previewVideo('${videoFile.ossUrl}')">预览</a></span>
+							<span class="del" onclick="dataDelete(this,'${videoFile.id}')">删除</span>
+						</p>
+					</c:forEach>
+				</c:if>
 			</div>
 		</div>
-		<div class="control-group">
-			<label class="control-label keyClass">注意事项:</label>
-			<div class="controls" style="width:812px">
-				${cmBaikeProduct.aroundOperation}
-			</div>
+	</div>
+	<%--信息栏--%>
+	<div class="control-group paramList" id="paramList">
+		<label class="control-label titleClass">信息栏:(注:未填写的信息将不会显示在词条页上)</label>
+		<div class="controls add-button"><button class="btn btn-primary" type="button">增加信息项</button></div>
+		<div class="controls param-controls not-overflow"></div>
+	</div>
+	<%--正文--%>
+	<div class="control-group" id="textInfolist">
+		<label class="control-label titleClass">正文:</label>
+		<div class="controls not-overflow">
+				<%-- <div class="bk-textInfo-item">
+                     <div class="content-edit" id="textInfo-0" name="textInfolist[0].content"></div>
+                     <div class="bk-textInfo-control"><span>一级目录</span><span>二级目录</span><span>内容</span></div>
+                 </div>
+                 --%>
 		</div>
-		<div class="control-group" style="width: 1000px">
-			<label class="control-label keyClass">效果展示:</label>
-			<div class="controls">
-				<c:forEach items="${cmBaikeProduct.displayImageList}" var="displayImage" varStatus="index">
-					<a href="${displayImage}" style="cursor: pointer;margin-left: 20px" target="_blank"><img src="${displayImage}" style="width: 120px"></a>
-				</c:forEach>
-			</div>
-		</div>
-        <div class="questionList">
-            <div class="control-group">
-                <label class="control-label keyClass">常见问题:</label>
-            </div>
-			<c:forEach items="${cmBaikeProduct.questionList}" var="question" varStatus="index">
-				<div class="control-group">
-					<label class="control-label">问题${index.index+1}:</label>
-					<div class="controls">
-						${question.question}
+	</div>
+	<%--参考资料--%>
+	<div class="control-group" id="mata">
+		<label class="control-label titleClass">参考资料</label>
+		<div class="bk-reference-list">
+			<c:forEach items="${cmBaikeProduct.materialInfo}" var="videoFile" varStatus="statusIndex">
+				<c:if test="${videoFile.referenceType eq '1'}">
+					<div class="controls applicationsan" style="margin-top: 5px">
+						<span class="del">[${statusIndex.index+1}]</span>
+						<span class="del"><a href="${videoFile.website}" target="_blank">${videoFile.articleName}</a></span>
+						<span class="del">${videoFile.websiteName}.</span>
+						<span class="del">${videoFile.publishTime}.</span>
+						<span class="del">${videoFile.acitationTime}.</span>
+						<a class="del" style="margin-left: 12px" onclick="upMaterial(${videoFile.id})">编辑</a>
+						<a onclick="delMaterial(${videoFile.id})">删除</a>
 					</div>
-				</div>
-				<div class="control-group">
-					<label class="control-label">答:</label>
-					<div class="controls">
-						${question.answer}
+				</c:if>
+				<c:if test="${videoFile.referenceType eq '2'}">
+					<div class="controls applicationsan" style="margin-top: 5px">
+						<span class="del">[${statusIndex.index+1}]</span>
+						<span class="del">${videoFile.author}.</span>
+						<span class="del">${videoFile.workName}.</span>
+						<span class="del">${videoFile.publicationPlace}.</span>
+						<span class="del">${videoFile.press}.</span>
+						<span class="del">${videoFile.publicationYear}.</span>
+						<span class="del">${videoFile.acitationWeb}.</span>
+						<a class="del" style="margin-left: 12px" onclick="upMaterial(${videoFile.id})">编辑</a>
+						<a onclick="delMaterial(${videoFile.id})">删除</a>
 					</div>
-				</div>
+				</c:if>
+				<c:if test="${videoFile.referenceType eq '3'}">
+					<div class="controls applicationsan" style="margin-top: 5px">
+						<span class="del">[${statusIndex.index+1}]</span>
+						<span class="del">${videoFile.referenceDescription}.</span>
+						<span class="del">${videoFile.imageDescription}.</span>
+							<%--
+							<div class="conList">
+								<img id="imgaa"  src="${videoFile.imageUrl}" height="50px" width="50px" ></input>
+							</div>
+							--%>
+						<a class="del" style="margin-left: 12px" onclick="upMaterial(${videoFile.id})">编辑</a>
+						<a onclick="delMaterial(${videoFile.id})">删除</a>
+					</div>
+				</c:if>
 			</c:forEach>
-        </div>
-
-		<div class="control-group">
-			<label class="control-label keyClass">发布时间:</label>
-			<div class="controls">
-				<fmt:formatDate value="${cmBaikeProduct.publishTime}" pattern="yyyy-MM-dd HH:mm"/>
-			</div>
 		</div>
-		<div class="control-group">
-			<label class="control-label keyClass">基础浏览量:</label>
-			<div class="controls">
-				${cmBaikeProduct.basePv}
+	</div>
+	<%--头图--%>
+	<div class="control-group" style="margin-top: 100px">
+		<label class="control-label">头图:</label>
+		<div class="main-image-list" style="display: flex;flex-wrap: wrap">
+			<div class="controls upload-content iconBox mainIgeBox" id="mainIgeBox">
+				<div class="conList">
+					<form:hidden id="image" path="image" htmlEscape="false" maxlength="255" class="input-xlarge "/>
+					<sys:ckfinder input="image" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100"
+								  maxHeight="100"/>
+					<br>
+					<label style="margin-left: 150px">建议图片尺寸210px*210px,并上传白底图片</label>
+				</div>
 			</div>
 		</div>
-		<div class="control-group">
-			<label class="control-label keyClass">产品类别:</label>
-			<div class="controls">
-				${cmBaikeProduct.typeName}
-			</div>
+	</div>
+	<%--分类--%>
+	<div class="control-group">
+		<label class="control-label keyClass">分类:</label>
+		<div class="controls">
+			<form:select path="typeId" class="input-xlarge ">
+				<form:options items="${typeList}" itemLabel="name" itemValue="id" htmlEscape="false"/>
+			</form:select>
 		</div>
-		<div class="control-group">
-			<label class="control-label keyClass">供应商名称:</label>
-			<div class="controls">
-				${cmBaikeProduct.shopName}
-			</div>
+	</div>
+	<%--SEO关键词--%>
+	<div class="control-group">
+		<label class="control-label">SEO关键词:</label>
+		<div class="auto-input">
+			<form:input cssStyle="margin-left: 20px" path="seoKeyword" htmlEscape="false" style="position: relative" class="input-xlarge"/>
+		</div>
+	</div>
+	<%--关联供应商--%>
+	<div class="control-group">
+		<label class="control-label">关联供应商:</label>
+		<div class="controls">
+			<form:select path="shopId" class="input-xlarge ">
+				<form:option value="" label="请选择供应商"/>
+				<form:options items="${cmBaikeProduct.shopList}" class="input-xlarge" itemLabel="name" itemValue="shopID" htmlEscape="false"/>
+			</form:select>
 		</div>
-		<div class="form-actions">
-			<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+	</div>
+	<%--发布时间--%>
+	<div class="control-group">
+		<label class="control-label keyClass">发布时间:</label>
+		<div class="controls">
+			<input name="publishTime" type="text" readonly="readonly" maxlength="20" class="input-medium Wdate "
+				   value="<fmt:formatDate value="${cmBaikeProduct.publishTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+				   onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm',isShowClear:false});"/>
 		</div>
-	</form:form>
+	</div>
+	<%--基础浏览量--%>
+	<div class="control-group">
+		<label class="control-label keyClass">基础浏览量:</label>
+		<div class="controls">
+			<form:input path="basePv" htmlEscape="false" onkeyup="onlynum(this)" class="input-xlarge  digits "/>
+		</div>
+	</div>
+	<%--状态--%>
+	<div class="control-group">
+		<label class="control-label keyClass">状态:</label>
+		<div class="controls">
+			<form:radiobutton path="status" label="发布" value="1" checked="${empty cmBaikeProduct.status?'checked':''}"/>
+			<form:radiobutton path="status" label="保存草稿箱" value="0"/>
+		</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>
 
 <% request.setAttribute("caimeiCore", Global.getConfig("caimei.core"));%>
 <script type="text/javascript" src="${ctxStatic}/ckeditor5-new/ckeditor.js"></script>
+<script type="text/javascript" src="${ctxStatic}/sensitiveWords/mint-filter.umd.js"></script>
+<script type="text/javascript" src="${ctxStatic}/auto-input.js"></script>
+<script type="text/javascript" src="${ctxStatic}/content-edit.js"></script>
 <script>
+	// 内容编辑器列表
+	var contentEditMap = new Map()
+	// 当前选中的编辑器
+	var currentContentEdit = null
+	// 当前选中的编辑器元素
+	var currentContentEditEl = null
+	// 添加资料数据
+	var referenceData = {}
+	// 资料编辑类型
+	var referenceEditTyp = 'add'
+	// 引用资料列表
+	var referenceList = []
+	// 资料标记数量
+	var markCount = referenceList.length || 1
+	// 正文列表
+	var textInfoList = [{}]
+	var textInfoItemIndex = 0
+	// 信息栏列表
+	var paramList = [{}]
+	var paramItemIndex = 0
+	// 创建内容编辑器
+	function createContentEdit(el, value) {
+		const contentEdit = new ContentEditInput({
+			el: el,
+			initValue: value,
+			toolbarClick(edit) {
+				// 添加
+				referenceEditTyp = 'add'
+				currentContentEdit = edit
+				console.log(currentContentEdit)
+				createReferenceList()
+				$('#dialogmask').fadeIn()
+				$('#dig').fadeIn()
+			},
+			referenceEdit(ctrid) {
+				// 编辑
+				referenceEditTyp = 'edit'
+				referenceData = referenceList.find(function(item){
+					return item.ctrlId == ctrid
+				})
+				if(!referenceData) return
+				initRefrenceFormData(referenceData)
+				$('#dialogmask').fadeIn()
+				$('#dig').fadeIn()
+			},
+		})
+		contentEditMap.set(el, contentEdit)
+	}
+	// 从表单获取资料数据
+	function setRefrenceData(data){
+		const referenceData = {}
+		referenceData.id = data.id || '' // 资料id
+		referenceData.ctrlId = data.ctrlId || '' // 关联id
+		/* (网络资料) */
+		referenceData.referenceType= $("#info").val() // '参考类型资料(1.网络;2.著作;3.其他)'
+		referenceData.website = $("#website").val()
+		referenceData.articleName = $("#articleName").val()
+		referenceData.websiteName = $("#websiteName").val()
+		referenceData.publishTimeStr = $("#publishTimeStr").val()
+		referenceData.acitationTimeStr = $("#acitationTimeStr").val()
+		/* 著作资料)*/
+		referenceData.author= $("#author").val()
+		referenceData.workName= $("#workName").val()
+		referenceData.publicationPlace= $("#publicationPlace").val()
+		referenceData.press= $("#press").val()
+		referenceData.publicationYearStr= $("#publicationYearStr").val()
+		referenceData.acitationWeb= $("#acitationWeb").val()
+		/* (其他资料) */
+		referenceData.referenceDescription= $("#referenceDescription").val()
+		referenceData.imageDescription= $("#imageDescription").val()
+		referenceData.imageUrl = $("#referenceImgUrl").val()
+		referenceData.entryId = data.entryId || '' // 词条id
+		referenceData.entryType = data.entryType || ''
+		return referenceData
+	}
+	// 设置资料表单数据
+	function initRefrenceFormData(data){
+		$("#info").val(data.referenceType)
+		$("#website").val(data.website)
+		$("#articleName").val(data.articleName)
+		$("#websiteName").val(data.websiteName)
+		$("#publishTimeStr").val(data.publishTimeStr)
+		$("#acitationTimeStr").val(data.acitationTimeStr)
+		$("#author").val(data.author)
+		$("#workName").val(data.workName)
+		$("#publicationPlace").val(data.publicationPlace)
+		$("#press").val(data.press)
+		$("#publicationYearStr").val(data.publicationYearStr)
+		$("#acitationWeb").val(data.acitationWeb)
+		$("#referenceDescription").val(data.referenceDescription)
+		$("#imageDescription").val(data.imageDescription)
+		$("#referenceImgUrl").val(data.imageUrl)
+	}
+	// 创建信息栏item
+	function createParamItem(index){
+		var paramItem = $('<div class="param-item"></div>')
+		var paramName = $('<div class="param-name"></div>')
+		var paramNameInput = $('<input type="text" placeholder="例如:型号">')
+		paramNameInput.attr('name', 'paramList['+ index +'].name')
+		paramNameInput.attr('class','xxl-name')
+		paramNameInput.attr('id','paramName-'+index)
+		var paramContent = $('<div class="param-content"></div>')
+		var paramContentInput = $('<div class="content-edit"></div>')
+		paramContentInput.attr('id', 'param-' + index)
+		paramContentInput.attr('name', 'paramList['+index+'].content')
+		var deleteBtn = $('<a style="cursor: pointer">删除</a>')
+		paramName.append(paramNameInput)
+		paramContent.append(paramContentInput)
+		paramItem.append([paramName,paramContent,deleteBtn ])
+		deleteBtn.on('click', function(){
+			$(this).parents('.param-item').remove()
+		})
+		return paramItem
+	}
+	// 初始化信息栏
+	function initParamList(){
+		<c:forEach items="${cmBaikeProduct.paramList}" var="videoFile" varStatus="statusIndex">
+		var index=${statusIndex.index}
+				paramItemIndex = index
+		var paramItem = createParamItem(index)
+		$('#paramList .param-controls').append(paramItem)
+		createContentEdit('#param-' + index,'${videoFile.content}')
+		console.log('${videoFile.name}')
+		$('#paramName-'+index).val('${videoFile.name}')
+		</c:forEach>
+		// paramList.forEach(function(item, index){
+		// 	paramItemIndex = index
+		// 	var paramItem = createParamItem(index)
+		// 	$('#paramList .param-controls').append(paramItem)
+		// 	createContentEdit('#param-' + index)
+		// })
+	}
+	// 创建正文item
+	function createTextInfoItem(index, type){
+		var inputId = 'textInfo-' + index
+		var textInfoItem = $('<div class="bk-textInfo-item"><div>')
+		var input = null
+		var inputType=null
+		if(type == 3){
+			input = $('<div class="content-edit"></div>')
+			input.attr('id', inputId)
+			input.attr('name', 'textInfolist[' + index + '].dictionaryContent')
+			inputType=$('<input type="text" />')
+			inputType.attr('name','textInfolist[' + index + '].dictionaryType')
+			inputType.attr('value',type)
+			inputType.attr('style','display: none')
+
+		}else{
+			input = $('<input type="text" />')
+			input.attr('id', inputId)
+			input.attr('name', 'textInfolist[' + index + '].dictionaryContent')
+			var placeholder = type == 1 ? '一级目录' : '二级目录'
+			input.attr('placeholder', placeholder)
+			inputType=$('<input type="text" />')
+			inputType.attr('name','textInfolist[' + index + '].dictionaryType')
+			inputType.attr('value',type)
+			inputType.attr('style','display: none')
+		}
+		var control = $('<div class="bk-textInfo-control"></div>')
+		var first = $('<span>一级目录</span>')
+		var second = $('<span>二级目录</span>')
+		var content = $('<span>内容</span>')
+		var deleteBtn = $('<span>删除</span>')
+		control.append([first, second, content, deleteBtn])
+		textInfoItem.append([input,inputType,control])
+		first.on('click', function(){
+			$(this).parents('.bk-textInfo-item').after(createTextInfoItem(++textInfoItemIndex, 1))
+		})
+		second.on('click', function(){
+			var index = $(this).parents('.controls').find('.bk-textInfo-item').length +1
+			$(this).parents('.bk-textInfo-item').after(createTextInfoItem(++textInfoItemIndex, 2))
+		})
+		content.on('click', function(){
+			var index = $(this).parents('.controls').find('.bk-textInfo-item').length +1
+			$(this).parents('.bk-textInfo-item').after(createTextInfoItem(++textInfoItemIndex, 3))
+			var inputId = 'textInfo-' + textInfoItemIndex
+			createContentEdit('#' + inputId)
+		})
+		deleteBtn.on('click', function(){
+			$(this).parents('.bk-textInfo-item').remove()
+		})
+		return textInfoItem
+	}
+	// 初始化正文内容
+	function initTextInfoList(){
+		var te='${cmBaikeProduct.textInfolist}'
+		if(''==te ||null==te ||te=='[]'){
+			var textInfoList = [{type:1},{type:2},{type:3}]
+			textInfoList.forEach(function(item,index){
+				textInfoItemIndex = index
+				var inputId = 'textInfo-' + index
+				const textInfoIem = createTextInfoItem(index, item.type)
+				$('#textInfolist .controls').append(textInfoIem)
+				if(item.type == 3){
+					createContentEdit('#' + inputId)
+				}
+			})
+		}else{
+			<c:forEach items="${cmBaikeProduct.textInfolist}" var="videoFile" varStatus="statusIndex">
+			var index=${statusIndex.index}
+					textInfoItemIndex = index
+			var inputId = 'textInfo-' + index
+			var textInfoIem = createTextInfoItem(index,  ${videoFile.dictionaryType})
+			$('#textInfolist .controls').append(textInfoIem)
+			console.log('${videoFile.dictionaryContent}')
+			if('${videoFile.dictionaryType}'=='3'){
+				createContentEdit('#' + inputId,'${videoFile.dictionaryContent}')
+			}else{
+				$('#textInfo-' + index).val('${videoFile.dictionaryContent}')
+			}
+			</c:forEach>
+		}
+		// $('#textInfolist .controls')
+	}
+
+	function createReferenceItem(referenceData){
+		var text=null
+		if(referenceData.publishTimeStr=='undefined'){
+			referenceData.publishTimeStr='111'
+		}
+		if(referenceData.referenceType == 1){
+			text = `
+				<div class="controls applicationsan">
+						<span class="del">
+							<a>\${referenceData.articleName}.</a>
+						</span>
+						<span class="del">\${referenceData.websiteName}.</span>
+						<span class="del">\${referenceData.publishTimeStr}.</span>
+						<span class="del">\${referenceData.acitationTimeStr}.</span>
+					</div>
+			`
+		}
+		if(referenceData.referenceType == 2){
+			text=	`
+				<div class="controls applicationsan">
+					<span class="del">\${referenceData.author}.</span>
+					<span class="del">\${referenceData.workName}.</span>
+					<span class="del">\${referenceData.publicationPlace}.</span>
+					<span class="del">\${referenceData.press}.</span>
+					<span class="del">\${referenceData.publicationYearStr}.</span>
+					<span class="del">\${referenceData.acitationWeb}</span>
+				</div>
+			`
+		}
+		if(referenceData.referenceType == 3){
+			text= `
+				<div class="controls applicationsan">
+					<span class="del">\${referenceData.referenceDescription}.</span>
+					<span class="del">\${referenceData.imageDescription}.</span>
+				</div>
+			`
+		}
+		return text
+	}
+
+	function createAllReferenceItem(referenceData){
+		var text=null
+		if(referenceData.referenceType == 1){
+			text = `
+					<div class="controls applicationsan">
+						<span class="del">[\${referenceList.length}]</span>
+						<span class="del"><a>\${referenceData.articleName}.</a></span>
+						<span class="del">\${referenceData.websiteName}.</span>
+						<span class="del">\${referenceData.publishTimeStr}.</span>
+						<span class="del">\${referenceData.acitationTimeStr}.</span>
+						<a class="del" style="margin-left: 12px" onclick="upMaterial(\${referenceData.id})">编辑</a>
+						<a onclick="delMaterial(\${referenceData.id})">删除</a>
+					</div>
+			`
+		}
+		if(referenceData.referenceType == 2){
+			text=	`
+				<div class="controls applicationsan">
+					<span class="del">[\${referenceList.length}]</span>
+					<span class="del">\${referenceData.author}.</span>
+					<span class="del">\${referenceData.workName}.</span>
+					<span class="del">\${referenceData.publicationPlace}.</span>
+					<span class="del">\${referenceData.press}.</span>
+					<span class="del">\${referenceData.publicationYearStr}.</span>
+					<span class="del">\${referenceData.acitationWeb}.</span>
+					<a class="del" style="margin-left: 12px" onclick="upMaterial(\${referenceData.id})">编辑</a>
+					<a onclick="delMaterial(\${referenceData.id})">删除</a>
+				</div>
+			`
+		}
+		if(referenceData.referenceType == 3){
+			text= `
+				<div class="controls applicationsan">
+					<span class="del">[\${referenceList.length}]</span>
+					<span class="del">\${referenceData.referenceDescription}.</span>
+					<span class="del">\${referenceData.imageDescription}.</span>
+					<a class="del" style="margin-left: 12px" onclick="upMaterial(\${referenceData.id})">编辑</a>
+					<a onclick="delMaterial(\${referenceData.id})">删除</a>
+				</div>
+			`
+		}
+		return text
+	}
+
+	// 只要referenceList数据有更新就执行一次
+	function createReferenceList(){
+		$('.check-reference-list').html('')
+		referenceList.forEach(function(refData, index){
+			console.log(refData)
+			var item = createReferenceItem(refData)
+			$('.check-reference-list').append(item)
+		})
+		$('.check-reference-list').find('.controls').on('click', function(){
+			var index = $(this).index() + 1
+			var result = referenceList[$(this).index()]
+			console.log(result)
+			if(!result) return
+			var con= createReferenceItem(result)
+			result.ctrlId = currentContentEdit.confirm(con, result.ctrlId, index)
+			$('#dialogmask').fadeOut()
+			$('#dig').fadeOut()
+		})
+	}
+
+	$(function(){
+		var refren='${cmBaikeProduct.referenceList}'
+		if(''==refren|| null==refren){
+		}else{
+			referenceList=JSON.parse(refren)
+			markCount=referenceList.length
+			console.log(markCount)
+		}
+		//初始化 义项名,词条概述
+		createContentEdit('#bk-name','${cmBaikeProduct.alias}')
+		createContentEdit('#discription','${cmBaikeProduct.discription}')
+		initParamList()
+		initTextInfoList()
+		$('#paramList .btn').on('click', function(){
+			var paramItem = createParamItem(++paramItemIndex)
+			$('#paramList .param-controls').append(paramItem)
+			createContentEdit('#param-' + paramItemIndex)
+		})
+		$('#dig .confirm').on('click', function(){
+			if(referenceEditTyp === 'add'){
+				markCount++
+				var result = setRefrenceData({})
+				var con=createReferenceItem(result)
+				result.ctrlId = currentContentEdit.confirm(con)
+				referenceList.push(result)
+				$(this).parents('#dig').siblings('#dialogmask').fadeOut()
+				$(this).parents('#dig').fadeOut()
+				initRefrenceFormData({})
+				var item = createAllReferenceItem(result)
+				$('.bk-reference-list').append(item)
+			}else{
+				var result = setRefrenceData(referenceData)
+				const index = referenceList.findIndex(function(item){
+					return item.ctrlId == referenceData.ctrlId
+				})
+				referenceList.splice(index, 1, result)
+				$(this).parents('#dig').siblings('#dialogmask').fadeOut()
+				$(this).parents('#dig').fadeOut()
+				initRefrenceFormData({})
+			}
+			var referen=JSON.stringify(referenceList)
+			$('#referenceList').val(referen);
+		})
+		$('#dig .cancel').on('click', function(){
+			$(this).parents('#dig').fadeOut()
+			$(this).parents('#dig').siblings('#dialogmask').fadeOut()
+			initRefrenceFormData({})
+		})
+		<%-- referenceList = [{ctrlId: 'FDIEKABKKNJEEJAN'}] // referenceList[0].reyt = 1 // referenceList:'[{"type": 1}]'--%>
+		<%--console.log('${cmBaikeProduct.materialInfo}')--%>
+		// 初始化编辑框引用资料列表
+		contentEditMap.forEach(function(item){
+			item.edit.ctridList.forEach(function(ctrlId){
+				var data = referenceList.find(function(ref){
+					return ref.ctrlId == ctrlId
+				})
+				if(!data) return
+				<%--				<c:forEach items="${cmBaikeProduct.materialInfo}" var="videoFile" varStatus="statusIndex">--%>
+				<%--				</c:forEach>--%>
+				var text = createReferenceItem(data)
+				item.addLiteratureItem(ctrlId, text)
+			})
+		})
+	})
+</script>
+
+<script>
+	var paramIndex = 1;
+	var questionIndex = 2;
+	//给涉及到参考资料的标签赋值
+	$(function () {
+		$('.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();
+		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.parents('.controls').next();
+					thisWrapper.find('li').css('z-index', 99);
+					thisWrapper.find('.cancel-upload').show();
+					if (nextEle.hasClass('hide-pic')) {
+						nextEle.removeClass('hide-pic');
+					}
+				}
+			})
+		});
+		var observeEle1 = document.getElementsByClassName('main-image-list')[0];
+		var observeEle2 = document.getElementsByClassName('auth-qrCode-list')[0];
+		// var observeEle3 = document.getElementsByClassName('auth-image-list')[0];
+		var observeEle4 = document.getElementsByClassName('display-image-list')[0];
+		observer.observe(observeEle1, MutationObserverConfig);
+		observer.observe(observeEle2, MutationObserverConfig);
+		// observer.observe(observeEle3, MutationObserverConfig);
+		observer.observe(observeEle4, MutationObserverConfig);
+
+		$('body').on('click', '.cancel-upload',function() {
+			var wrapper = $(this).closest('.controls');
+			var controlsId = wrapper.attr('id');
+			wrapper.find('li').css('z-index','-1');
+			wrapper.find('input').val('');
+			$(this).hide();
+			if (controlsId == 'mainImageBox' || controlsId == 'authQrCodeBox' || controlsId=='mainIgeBox') {
+				wrapper.removeClass("hide-pic");
+			}
+					// else if (controlsId.indexOf('authImageBox') != -1) {
+					// 	if ($('.auth-image-list .cancel-upload:visible').length < 8) {
+					// 		wrapper.addClass("hide-pic");
+					// 	}else{
+					// 		wrapper.removeClass("hide-pic");
+					// 	}
+			// }
+			else if (controlsId.indexOf('displayImageBox') != -1) {
+				if ($('.display-image-list .cancel-upload:visible').length < 6) {
+					wrapper.addClass("hide-pic");
+				}else{
+					wrapper.removeClass("hide-pic");
+				}
+			}
+			wrapper.parent().append(wrapper.clone());
+			wrapper.remove();
+			$(".controls").each(function(i,ele){
+				if($(ele).find("input.input-xlarge").val()){
+					$(ele).next().removeClass("hide-pic")
+				}
+			})
+		});
+
+		$('body').on('click','.upload-content li',function() {
+			var index = $(this).closest('.conList').index() + 1,
+					str = 'image'+index+'FinderOpen';
+			eval(str+'()');
+		});
+
+		$(window).on("load", function () {
+			setTimeout(function () {
+				$("#authQrCodeBox").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).parent().parents(".controls").next().removeClass("hide-pic")
+					}
+				})
+				$("#mainImageBox").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).parent().parents(".controls").next().removeClass("hide-pic")
+					}
+				})
+				$("#mainIgeBox").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).parent().parents(".controls").next().removeClass("hide-pic")
+					}
+				})
+				for (var i = 0; i < 8; i++) {
+					$("#authImageBox"+i).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).parent().parents(".controls").next().removeClass("hide-pic")
+						}
+					})
+				}
+				for (var i = 0; i < 6; i++) {
+					$("#displayImageBox"+i).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).parent().parents(".controls").next().removeClass("hide-pic")
+						}
+					})
+				}
+			}, 200);
+		});
+
+
+		var fileIds = $("#fileIds").val();
+		//点击上传按钮后上传文件
+		$('#addSubmit').click(function () {
+			var fileIdArr = fileIds.split(',');
+			if (fileIdArr.length >= 7) {
+				alertx('最多上传6个视频');
+				return;
+			}
+			var filesById = document.getElementById('productFile');
+			var files = $('#productFile');
+			var fileList = files.prop('files');
+			var fileTitle = $('#fileTitle').val();
+			var fileName = $('#uploadFileName').val();
+			if (fileTitle == '') {
+				alertx('请输入视频标题')
+				return;
+			}
+			if (files === '' || files.length == 0 || fileName == '') {
+				alertx('请选择上传文件');
+				return;
+			}
+			$("#fileTitle").val("");
+			$("#uploadFileName").val("");
+			var data = new FormData();
+			var productId = $("#id").val();
+			data.append('file', fileList[0]);
+			data.append('fileTitle', fileTitle);
+			data.append('fileName', fileName);
+			data.append('productId', productId);
+			data.append('fileIds', fileIds);
+			$('.upload-loading').css("display", "inline");
+			$.ajax({
+				url: "${ctx}/baike/cmBaikeProduct/upload",
+				data: data,
+				type: "POST",
+				processData: false,
+				contentType: false,
+				dataType: "json",
+				success: function (res) {
+					if (res.success) {
+						filesById.value = '';
+						renderFileList(res.productFile);
+						$('.upload-loading').hide();
+					} else {
+						$.jBox.tip(res.msg, 'error');
+						$("#uploadFileName").val(fileName);
+						$('.upload-loading').hide();
+					}
+				},
+				error: function (json) {
+				}
+			});
+		})
+
+		var fileList = [];
+		var files = document.getElementById("productFile"), renderFileList;
+		//选择上传文件后显示文件名称
+		files.addEventListener("change", function (event) {
+			var name = event.target.files[0].name;
+			console.log(name)
+			$('#uploadFileName').val(name);
+		});
+		var fileListDisplay = document.getElementById('file-list-display');
+		renderFileList = function (data) {
+			fileIds += data.id + ',';
+			console.log(fileIds);
+			$('#fileIds').val(fileIds);
+			fileList.push({fileTitle: data.fileTitle, id: data.id, ossUrl: data.ossUrl});
+			fileList.forEach(function (file, index) {
+				var fileDisplayEl = document.createElement("p");
+				var deleteFile = document.createElement("span");
+				var viewFile = document.createElement("span");
+				var viewFileUrl = document.createElement("a");
+				//预览链接
+				viewFileUrl.innerHTML = '预览';
+				viewFileUrl.setAttribute("onclick", "previewVideo('" + file.ossUrl + "')");
+				viewFileUrl.setAttribute("target", "_blank");
+				//预览按钮
+				viewFile.className = 'viewFile';
+				console.log(viewFile);
+				viewFile.setAttribute("class","del");
+				viewFile.appendChild(viewFileUrl);
+				//删除按钮
+				deleteFile.innerHTML = '删除';
+				deleteFile.className = 'deleteFile';
+				console.log(deleteFile);
+				deleteFile.setAttribute("class","del");
+				deleteFile.setAttribute("onclick", "dataDelete(this, " + file.id + ")");
+
+				fileDisplayEl.setAttribute("id", file.id);
+				fileDisplayEl.innerHTML = file.fileTitle;
+				fileDisplayEl.appendChild(viewFile);
+				fileDisplayEl.appendChild(deleteFile);
+				fileListDisplay.appendChild(fileDisplayEl);
+			});
+			fileList.splice(0, fileList.length);
+		};
+	})
+
+	//删除参数
+	function deleteParam(index) {
+		$("#paramRow" + index).remove();
+	}
+	var content=10;
+
+	//添加正文
+	var d=1;
+	addDiction =function(dicname,diny,dicTyp){//输入框类型  输入框个数  按钮类型
+		$("."+dicname+diny).append("<div class=\"controls "+dicname+d+"\" style=\"margin-left: 0px;margin-top: 5px \">" +
+				"<input  name=\"textInfo[0].textType\" value =\"1\" type=\"hidden\"/>"+
+				"<input  htmlEscape=\"false\" class=\"input-xlarge \" placeholder=\"(请输入"+dicTyp+")\"/>" +
+				"<button class=\"btn btn-primary\" id=\"1\" type=\"button\" name=\"一级目录\"  style=\"margin-left: 15px\" onclick=\"addDiction('"+dicname+"',"+d+",'一级目录'"+")\">一级目录</button>"+
+				"<button class=\"btn btn-primary\" id=\"1\"  type=\"button\" name=\"二级目录\"  style=\"margin-left: 10px\" onclick=\"addDiction('"+dicname+"',"+d+",'二级目录'"+")\">二级目录</button>"+
+				"<button class=\"btn btn-primary\" id=\"1\"  type=\"button\" name=\"内容\" style=\"margin-left: 10px\" onclick=\"addDiction('"+dicname+"',"+d+",'内容'"+")\">内容</button>"+
+				"</div>")
+		d=d+1;
+	}
+
+	/**
+	 * @param obj
+	 * jquery控制input只能输入数字
+	 */
+	function onlynum(obj) {
+		obj.value = obj.value.replace(/[^\d]/g, ""); //清除"数字"以外的字符
+	}
+
+	//删除文件
+	function dataDelete(that, id) {
+		console.log($(that).text());
+		$(that).parent().remove();
+		var fileIds = $("#fileIds").val();
+		if (fileIds.indexOf(id)) {
+			fileIds = fileIds.replace(id + ',', '');
+			$("#fileIds").val(fileIds);
+		}
+		$.ajax({
+			url: "${ctx}/baike/cmBaikeProduct/deleteFile",
+			data: {"fileId": id},
+			async: false,
+			type: "POST"
+		});
+	}
+
+	function previewVideo(url) {
+		var url = "${ctx}/archive/cmProductArchiveContent/preview?url=" + encodeURIComponent(url);
+		var title = "视频播放";
+		top.$.jBox("iframe:" + url, {
+			iframeScrolling: 'yes',
+			width: 1000,
+			height: 750,
+			persistent: true,
+			title: title,
+			buttons: {"关闭": '-1'}
+		});
+	}
+	//关键词联动
+	function autocomplete(text) {
+		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
+	});
 </script>
 </body>
 </html>

+ 12 - 12
src/main/webapp/WEB-INF/views/modules/baikePage/cmBaikeHotSearchForm.jsp

@@ -52,18 +52,18 @@
 			<label class="control-label"><span class="help-inline"><font color="red">*</font> </span>跳转方式:</label>
 			<div class="controls">
 				<form:radiobutton path="jumpType"  name="jumpType" value="1" label="仅搜索" checked="true" onclick="changeJumpType()"/>
-				<br> <br>
-				<form:radiobutton path="jumpType" name="jumpType" value="2" label="产品" onclick="changeJumpType()"/>
-				<form:select path="productId" class="input-xlarge productList">
-					<form:option value="" label="请选择"/>
-					<form:options items="${productList}" itemLabel="name" itemValue="id" htmlEscape="false"/>
-				</form:select>
-				<br> <br>
-				<form:radiobutton path="jumpType" name="jumpType" value="3" label="仪器" onclick="changeJumpType()"/>
-				<form:select path="instrumentId" class="input-xlarge productList">
-					<form:option value="" label="请选择"/>
-					<form:options items="${instrumentList}" itemLabel="name" itemValue="id" htmlEscape="false"/>
-				</form:select>
+<%--				<br> <br>--%>
+<%--				<form:radiobutton path="jumpType" name="jumpType" value="2" label="产品" onclick="changeJumpType()"/>--%>
+<%--				<form:select path="productId" class="input-xlarge productList">--%>
+<%--					<form:option value="" label="请选择"/>--%>
+<%--					<form:options items="${productList}" itemLabel="name" itemValue="id" htmlEscape="false"/>--%>
+<%--				</form:select>--%>
+<%--				<br> <br>--%>
+<%--				<form:radiobutton path="jumpType" name="jumpType" value="3" label="仪器" onclick="changeJumpType()"/>--%>
+<%--				<form:select path="instrumentId" class="input-xlarge productList">--%>
+<%--					<form:option value="" label="请选择"/>--%>
+<%--					<form:options items="${instrumentList}" itemLabel="name" itemValue="id" htmlEscape="false"/>--%>
+<%--				</form:select>--%>
 				<br> <br>
 				<form:radiobutton path="jumpType" name="jumpType" value="4" label="链接" onclick="changeJumpType()"/>
 				<form:input path="jumpLink" htmlEscape="false" class="input-xlarge jumpType"/>

File diff suppressed because it is too large
+ 863 - 146
src/main/webapp/WEB-INF/views/modules/baikePage/cmBaikeProductForm.jsp


+ 41 - 41
src/main/webapp/WEB-INF/views/modules/baikePage/cmBaikeProductList.jsp

@@ -2,7 +2,7 @@
 <%@ include file="/WEB-INF/views/include/taglib.jsp"%>
 <html>
 <head>
-	<title>产品管理</title>
+	<title>采美词条</title>
 	<meta name="decorator" content="default"/>
 	<style type="text/css">
 		.table th{text-align: center;}
@@ -28,8 +28,8 @@
 </head>
 <body>
 	<ul class="nav nav-tabs">
-		<li class=${cmBaikeProduct.commodityType eq 1?"active":""}><a href="${ctx}/baike/cmBaikeProduct/?commodityType=1&publishSource=1">产品</a></li>
-		<li class=${cmBaikeProduct.commodityType eq 2?"active":""}><a href="${ctx}/baike/cmBaikeProduct/?commodityType=2&publishSource=1">仪器</a></li>
+		<li class=${cmBaikeProduct.commodityType eq 1?"active":""}><a href="${ctx}/baike/cmBaikeProduct/?commodityType=1&publishSource=1">采美词条</a></li>
+<%--		<li class=${cmBaikeProduct.commodityType eq 2?"active":""}><a href="${ctx}/baike/cmBaikeProduct/?commodityType=2&publishSource=1">仪器</a></li>--%>
 	</ul>
 	<form:form id="searchForm" modelAttribute="cmBaikeProduct" action="${ctx}/baike/cmBaikeProduct/" method="post" class="breadcrumb form-search">
 		<form:hidden path="commodityType"/>
@@ -38,16 +38,16 @@
 		<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
 		<div class="ul-form">
 			 <label>ID:</label>
-				<form:input path="id" htmlEscape="false" class="input-medium"/>
-			 <label>${commodityType}名称:</label>
+				<form:input path="id" maxlength="11" htmlEscape="false" class="input-medium"/>
+			 <label>词条名称:</label>
 				<form:input path="name" htmlEscape="false" maxlength="50" class="input-medium"/>
-			 <label>首页置顶:</label>
-			 <form:select path="topFlag" class="input-medium">
-				<form:option value="" label="全部"/>
-				<form:option value="1" label="是"/>
-				<form:option value="0" label="否"/>
-			 </form:select>
-			 <label>${commodityType}分类:</label>
+<%--			 <label>首页置顶:</label>--%>
+<%--			 <form:select path="topFlag" class="input-medium">--%>
+<%--				<form:option value="" label="全部"/>--%>
+<%--				<form:option value="1" label="是"/>--%>
+<%--				<form:option value="0" label="否"/>--%>
+<%--			 </form:select>--%>
+			 <label>分类:</label>
 				<form:select path="typeId" class="input-medium">
 					<form:option value="" label="全部"/>
 					<form:options items="${typeList}" itemLabel="name" itemValue="id" htmlEscape="false"/>
@@ -59,7 +59,7 @@
 					<form:option value="0" label="停用"/>
 				</form:select>
 			&nbsp;&nbsp;<input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>
-			&nbsp;&nbsp;<a class="btn btn-primary" style="width: 50px" href="${ctx}/baike/cmBaikeProduct/form?commodityType=${cmBaikeProduct.commodityType}">添加</a>
+			&nbsp;&nbsp;<a class="btn btn-primary" style="width: 50px" href="${ctx}/baike/cmBaikeProduct/form?commodityType=${cmBaikeProduct.commodityType}&entryId=1">添加</a>
 			<div class="clearfix"></div>
 		</div>
 	</form:form>
@@ -68,11 +68,11 @@
 		<thead>
 			<tr>
 				<th>ID</th>
-				<th>${commodityType}名称</th>
-				<th>${commodityType}分类</th>
+				<th>词条名称</th>
+				<th>分类</th>
 				<th>基础浏览量</th>
 				<th>实际浏览量</th>
-				<th>首页置顶位</th>
+<%--				<th>首页置顶位</th>--%>
 				<th>发布时间</th>
 				<th>添加时间</th>
 				<th>状态</th>
@@ -97,9 +97,9 @@
 				<td>
 					${cmBaikeProduct.actualPv}
 				</td>
-				<td>
-					${cmBaikeProduct.topPosition eq 1?'第一位':cmBaikeProduct.topPosition eq 2?'第二位':cmBaikeProduct.topPosition eq 3?'第三位':''}
-				</td>
+<%--				<td>--%>
+<%--					${cmBaikeProduct.topPosition eq 1?'第一位':cmBaikeProduct.topPosition eq 2?'第二位':cmBaikeProduct.topPosition eq 3?'第三位':''}--%>
+<%--				</td>--%>
 				<td>
 					<fmt:formatDate value="${cmBaikeProduct.publishTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
 				</td>
@@ -121,29 +121,29 @@
 					</c:if>
 				</td>
 				<td>
-					<a target="_blank" href="${fns:getConfig('wwwServer')}encyclopedia/${cmBaikeProduct.commodityType eq 1?'product':'instrument'}-${cmBaikeProduct.id}.html">查看</a>
-    				<a href="${ctx}/baike/cmBaikeProduct/form?id=${cmBaikeProduct.id}">编辑</a>
+					<a target="_blank" href="${fns:getConfig('wwwServer')}encyclopedia/detail-${cmBaikeProduct.id}.html">查看</a>
+    				<a href="${ctx}/baike/cmBaikeProduct/form?id=${cmBaikeProduct.id}&entryId=2">编辑</a>
 					<a href="${ctx}/baike/cmBaikeProduct/delete?id=${cmBaikeProduct.id}" onclick="return confirmx('确认要删除该产品吗?', this.href)">删除</a>
-					<a onclick="showTopSelect(${index.index},'open')" href="javascript:void(0)">首页置顶</a>
-					<c:if test="${cmBaikeProduct.topPosition ne null}">
-						<a onclick="updateTopPosition('','${cmBaikeProduct.id}','clearTopPosition')" href="javascript:void(0)">清除置顶</a>
-					</c:if>
-					<div style="display: none" class="topSelect" id="topSelect${index.index}" onmouseleave="showTopSelect(${index.index},'close')">
-						<table style="border: 2px solid #000000;" cellpadding="0" cellspacing="0">
-							<tbody>
-							<tr>
-								<td><a onclick="updateTopPosition('1',${cmBaikeProduct.id},'setTopPosition')" href="javascript:void(0)">置顶第一位</a></td>
-							</tr>
-							<tr>
-								<td><a onclick="updateTopPosition('2',${cmBaikeProduct.id},'setTopPosition')" href="javascript:void(0)">置顶第二位</a></td>
-							</tr>
-							<tr>
-								<td><a onclick="updateTopPosition('3',${cmBaikeProduct.id},'setTopPosition')" href="javascript:void(0)">置顶第三位</a></td>
-							</tr>
-							</tbody>
-						</table>
-					</div>
-					<a href="${ctx}/baike/cmBaikeProduct/recommend/form?id=${cmBaikeProduct.id}">相关推荐</a>
+<%--					<a onclick="showTopSelect(${index.index},'open')" href="javascript:void(0)">首页置顶</a>--%>
+<%--					<c:if test="${cmBaikeProduct.topPosition ne null}">--%>
+<%--						<a onclick="updateTopPosition('','${cmBaikeProduct.id}','clearTopPosition')" href="javascript:void(0)">清除置顶</a>--%>
+<%--					</c:if>--%>
+<%--					<div style="display: none" class="topSelect" id="topSelect${index.index}" onmouseleave="showTopSelect(${index.index},'close')">--%>
+<%--						<table style="border: 2px solid #000000;" cellpadding="0" cellspacing="0">--%>
+<%--							<tbody>--%>
+<%--							<tr>--%>
+<%--								<td><a onclick="updateTopPosition('1',${cmBaikeProduct.id},'setTopPosition')" href="javascript:void(0)">置顶第一位</a></td>--%>
+<%--							</tr>--%>
+<%--							<tr>--%>
+<%--								<td><a onclick="updateTopPosition('2',${cmBaikeProduct.id},'setTopPosition')" href="javascript:void(0)">置顶第二位</a></td>--%>
+<%--							</tr>--%>
+<%--							<tr>--%>
+<%--								<td><a onclick="updateTopPosition('3',${cmBaikeProduct.id},'setTopPosition')" href="javascript:void(0)">置顶第三位</a></td>--%>
+<%--							</tr>--%>
+<%--							</tbody>--%>
+<%--						</table>--%>
+<%--					</div>--%>
+<%--					<a href="${ctx}/baike/cmBaikeProduct/recommend/form?id=${cmBaikeProduct.id}">相关推荐</a>--%>
 				</td>
 			</tr>
 		</c:forEach>

+ 166 - 0
src/main/webapp/WEB-INF/views/modules/baikePage/cmBaikeTypeForm.jsp

@@ -23,7 +23,141 @@
 				}
 			});
 		});
+		$(function () {
+			$('.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 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');
+						}
+					}
+				})
+			});
+			for (var i = 0; i < 2; i++) {
+				var observeEle = document.getElementsByClassName('upload-content')[i];
+				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 () {
+					for (var i = 1;i<=4;i++) {
+						$("#bannerBox" + i).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);
+			});
+		});
 	</script>
+	<style>
+		.jumpType{
+			margin-left: 20px;
+			width: 400px;
+		}
+	</style>
+	<style>
+		.iconBox {
+			font-size: 0;
+		}
+
+		.controls .conList {
+			display: inline-block;
+			margin-right: 15px;
+		}
+
+		.conList .btn:nth-of-type(1) {
+			margin-left: 25px;
+		}
+
+		.upload-content {
+			margin-top: -27px;
+		}
+
+		.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;
+		}
+
+		.paramRow {
+			margin-top: 10px;
+		}
+	</style>
 </head>
 <body>
 	<ul class="nav nav-tabs">
@@ -40,6 +174,38 @@
 				<form:input path="name" htmlEscape="false" maxlength="30" class="input-xlarge required"/>
 			</div>
 		</div>
+		<div class="control-group iconBox">
+			<label class="control-label"><span class="help-inline"><font color="red">*</font> </span>PC端banner:</label>
+			<div class="controls upload-content" id="bannerBox1">
+				<div class="conList">
+					<form:hidden id="pcBanner" path="pcBanner" htmlEscape="false" maxlength="255" class="input-xlarge required"/>
+					<sys:ckfinder input="pcBanner" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100"
+								  maxHeight="500"/>
+					<br>
+					<label style="margin-left: 150px">建议图片分辨率1920px*510px</label>
+				</div>
+			</div>
+		</div>
+		<div class="control-group iconBox">
+			<label class="control-label"><span class="help-inline"><font color="red">*</font> </span>移动端banner:</label>
+			<div class="controls upload-content" id="bannerBox2">
+				<div class="conList">
+					<form:hidden id="appBanner" path="appBanner" htmlEscape="false" maxlength="255"
+								 class="input-xlarge required"/>
+					<sys:ckfinder input="appBanner" type="images" uploadPath="/photo" selectMultiple="false"
+								  maxWidth="100" maxHeight="200"/>
+					<br>
+					<label style="margin-left: 150px">建议图片分辨率750px*366px</label>
+				</div>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">banner跳转链接:</label>
+			<div class="controls">
+				<form:input path="bannerLink" htmlEscape="false" placeholder="输入URL地址"
+							class="input-xlarge"/>
+			</div>
+		</div>
 		<div class="control-group">
 			<label class="control-label"><span class="help-inline"><font color="red">*</font> </span>排序:</label>
 			<div class="controls">

+ 3 - 3
src/main/webapp/WEB-INF/views/modules/baikePage/cmBaikeTypeList.jsp

@@ -22,8 +22,8 @@
 </head>
 <body>
 	<ul class="nav nav-tabs">
-		<li class=${cmBaikeType.typeSort eq 1?"active":""}><a href="${ctx}/baike/cmBaikeType/?typeSort=1">产品分类</a></li>
-		<li class=${cmBaikeType.typeSort eq 2?"active":""}><a href="${ctx}/baike/cmBaikeType/?typeSort=2">仪器分类</a></li>
+		<li class=${cmBaikeType.typeSort eq 1?"active":""}><a href="${ctx}/baike/cmBaikeType/?typeSort=1">分类管理</a></li>
+<%--		<li class=${cmBaikeType.typeSort eq 2?"active":""}><a href="${ctx}/baike/cmBaikeType/?typeSort=2">仪器分类</a></li>--%>
 	</ul>
 	<form:form id="searchForm" modelAttribute="cmBaikeType" action="${ctx}/baike/cmBaikeType/" method="post" class="breadcrumb form-search">
 		<form:hidden path="typeSort" />
@@ -94,7 +94,7 @@
 					${cmBaikeType.addUserName}
 				</td>
 				<td>
-    				<a href="${ctx}/baike/cmBaikeType/form?id=${cmBaikeType.id}">编辑</a>
+    				<a href="${ctx}/baike/cmBaikeType/form?id=${cmBaikeType.id}&&pcBanner=${cmBaikeType.pcBanner}&&appBanner=${cmBaikeType.appBanner}&&bannerLink=${cmBaikeType.bannerLink}">编辑</a>
 					<a href="${ctx}/baike/cmBaikeType/delete?id=${cmBaikeType.id}" onclick="return confirmx('确认要删除该分类吗?', this.href)">删除</a>
 				</td>
 			</tr>

+ 8 - 8
src/main/webapp/WEB-INF/views/modules/baikePage/shopBaikeProductList.jsp

@@ -2,7 +2,7 @@
 <%@ include file="/WEB-INF/views/include/taglib.jsp"%>
 <html>
 <head>
-	<title>产品管理</title>
+	<title>供应商词条</title>
 	<meta name="decorator" content="default"/>
 	<style type="text/css">
 		.table th{text-align: center;}
@@ -28,8 +28,8 @@
 </head>
 <body>
 	<ul class="nav nav-tabs">
-		<li class=${cmBaikeProduct.commodityType eq 1?"active":""}><a href="${ctx}/baike/cmBaikeProduct/?commodityType=1&publishSource=2">产品</a></li>
-		<li class=${cmBaikeProduct.commodityType eq 2?"active":""}><a href="${ctx}/baike/cmBaikeProduct/?commodityType=2&publishSource=2">仪器</a></li>
+		<li class=${cmBaikeProduct.commodityType eq 1?"active":""}><a href="${ctx}/baike/cmBaikeProduct/?commodityType=1&publishSource=2">供应商词条</a></li>
+<%--		<li class=${cmBaikeProduct.commodityType eq 2?"active":""}><a href="${ctx}/baike/cmBaikeProduct/?commodityType=2&publishSource=2">仪器</a></li>--%>
 	</ul>
 	<form:form id="searchForm" modelAttribute="cmBaikeProduct" action="${ctx}/baike/cmBaikeProduct/" method="post" class="breadcrumb form-search">
 		<form:hidden path="commodityType"/>
@@ -39,7 +39,7 @@
 		<div class="ul-form">
 			 <label>ID:</label>
 				<form:input path="id" htmlEscape="false" class="input-medium"/>
-			 <label>${commodityType}名称:</label>
+			 <label>词条名称:</label>
 				<form:input path="name" htmlEscape="false" maxlength="50" class="input-medium"/>
 			 <label>${commodityType}分类:</label>
 				<form:select path="typeId" class="input-medium">
@@ -71,8 +71,8 @@
 		<thead>
 			<tr>
 				<th>ID</th>
-				<th>${commodityType}名称</th>
-				<th>${commodityType}分类</th>
+				<th>词条名称</th>
+				<th>分类</th>
 				<th>浏览量</th>
 				<th>审核状态</th>
 				<th>上线状态</th>
@@ -118,10 +118,10 @@
 					<fmt:formatDate value="${cmBaikeProduct.addTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
 				</td>
 				<td>
-					<a href="${ctx}/baike/cmBaikeProduct/toAuditPage?id=${cmBaikeProduct.id}&commodityType=${cmBaikeProduct.commodityType}"
+					<a href="${ctx}/baike/cmBaikeProduct/toAuditPage?id=${cmBaikeProduct.id}&commodityType=1&entryId=2"
 					   style="display: ${cmBaikeProduct.auditStatus eq 1 or cmBaikeProduct.auditStatus eq 3?'':'none'}">审核</a>
 					<a href="${ctx}/baike/cmBaikeProduct/check?id=${cmBaikeProduct.id}
-					&commodityType=${cmBaikeProduct.commodityType}&publishSource=2">查看</a>
+					&commodityType=1&publishSource=2&entryId=2">查看</a>
 					<c:if test="${cmBaikeProduct.onlineStatus eq 2}">
 						<a href="javascript:;" onclick="offline(${cmBaikeProduct.id})">下线</a>
 					</c:if>

+ 8 - 8
src/main/webapp/WEB-INF/views/modules/super/cmSvipPackageForm.jsp

@@ -19,11 +19,11 @@
                         alert("套餐2售价应为正整数且不能为0,如100");
                         return false;
                     }
-                    var places3 = $(".input-xlarge3").val();
+                    /*var places3 = $(".input-xlarge3").val();
                     if (!(/(^[1-9]\d*$)/.test(places3))) {
                         alert("套餐3售价应为正整数且不能为0,如100");
                         return false;
-                    }
+                    }*/
                     var places4 = $(".input-xlarge4").val();
                     if (!(/(^[1-9]\d*$)/.test(places4))) {
                         alert("美豆比例应为正整数且不能为0,如100");
@@ -55,11 +55,11 @@
                 alert("套餐2售价应为正整数且不能为0,如100");
                 return false;
             }
-            var places3 = $(".input-xlarge3").val();
+            /*var places3 = $(".input-xlarge3").val();
             if (!(/(^[1-9]\d*$)/.test(places3))) {
                 alert("套餐3售价应为正整数且不能为0,如100");
                 return false;
-            }
+            }*/
             var places4 = $(".input-xlarge4").val();
             if (!(/(^[1-9]\d*$)/.test(places4))) {
                 alert("美豆比例应为正整数且不能为0,如100");
@@ -70,7 +70,7 @@
 </head>
 <body>
 <ul class="nav nav-tabs">
-    <li><a href="${ctx}/super/cmSvipPackage/">超级会员套餐配置</a></li>
+    <li class="active"><a href="${ctx}/super/cmSvipPackage/">超级会员套餐配置</a></li>
 </ul>
 <br/>
 <form:form id="inputForm" modelAttribute="cmSvipPackage" action="${ctx}/super/cmSvipPackage/update" method="post"
@@ -97,12 +97,12 @@
         </div>
     </div>
 
-    <div class="control-group">
+    <%--<div class="control-group">
         <label class="control-label"><span class="help-inline"><font color="red">*</font> </span>套餐3:</label>
         <div class="controls">
             1个月超级会员,售价:<form:input path="price3" htmlEscape="false" class="input-xlarge3" style="width: 60px" onblur="checkNum()"/>
         </div>
-    </div>
+    </div>--%>
     <div class="control-group">
         <label class="control-label"><span class="help-inline"><font color="red">*</font> </span>采美豆兑换套餐:</label>
         <div class="controls">
@@ -114,4 +114,4 @@
     </div>
 </form:form>
 </body>
-</html>
+</html>

+ 9 - 2
src/main/webapp/WEB-INF/views/modules/svip/cmSvipCouponForm.jsp

@@ -55,6 +55,11 @@
                     alert("请选择生效时间! ");
                     return false;
                 }
+                var endMonth = $("#endMonth").val();
+                if (endMonth < month) {
+                    $.jBox.alert('优惠月份设置错误','提示');
+                    return false;
+                }
                 var vipId = $("#id").val();
                 if (!vipId && dateList.indexOf(month)>=0){
                     alert("已存在该月优惠券,请修改月份!");
@@ -135,7 +140,7 @@
 <body>
 <ul class="nav nav-tabs">
     <li><a href="${ctx}/vip/cmCoupon/">超级会员专属优惠券</a></li>
-    <li class="active"><a href="${ctx}/vip/cmCoupon/form?id=${cmVipCoupon.id}">${not empty cmVipCoupon.id?'编辑':'添加'}</a>
+    <li class="active"><a href="${ctx}/vip/cmCoupon/form?id=${cmVipCoupon.id}&endTime=${cmVipCoupon.endTime}">${not empty cmVipCoupon.id?'编辑':'添加'}</a>
     </li>
 </ul><br>
 <form:form id="inputForm" modelAttribute="svipcouponForm" action="${ctx}/vip/cmCoupon/save" method="post" class="form-horizontal">
@@ -145,6 +150,8 @@
         <label class="control-label"><font color="red">*</font>优惠月份:</label>
         <div class="controls">
             <form:input path="month" type="text" maxlength="20" class="input-medium Wdate" value="${useTime}"
+                        onclick="WdatePicker({dateFmt:'yyyy-MM',isShowClear:false});"/>&nbsp;&nbsp; —— &nbsp;&nbsp;
+            <form:input path="endMonth" type="text" maxlength="20" class="input-medium Wdate" value="${endMonth}" disabled="true"
                         onclick="WdatePicker({dateFmt:'yyyy-MM',isShowClear:false});"/>
         </div>
     </div>
@@ -983,4 +990,4 @@
 
 </script>
 </body>
-</html>
+</html>

+ 4 - 3
src/main/webapp/WEB-INF/views/modules/svip/cmSvipCouponList.jsp

@@ -21,6 +21,7 @@
 <body>
 <ul class="nav nav-tabs">
     <li class="active"><a href="${ctx}/vip/cmCoupon/">超级会员专属优惠券</a></li>
+    <li><a href="${ctx}/vip/cmCoupon/configuration">专属优惠券配置</a></li>
 </ul>
 <form:form id="searchForm" modelAttribute="cmVipCoupon" action="${ctx}/vip/cmCoupon" method="post" class="breadcrumb form-search">
     <input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
@@ -57,7 +58,7 @@
             </div>
             <div class="item">
                 <input id="btnSubmit" class="btn btn-primary" type="submit" value="查询" />
-                <input class="btn btn-primary" onclick="window.location='${ctx}/vip/cmCoupon/form'" value="添加优惠券"/>
+<%--                <input class="btn btn-primary" onclick="window.location='${ctx}/vip/cmCoupon/form'" value="添加优惠券"/>--%>
             </div>
         </div>
     </div>
@@ -75,7 +76,7 @@
     <tbody>
     <c:forEach items="${page.list}" var="vip">
         <tr>
-            <td><label>${vip.useTime}</label></td>
+            <td><label>${vip.useTime} &nbsp;&nbsp;--&nbsp;&nbsp; ${vip.endTime}</label></td>
             <td>
                 <c:forEach items="${vip.couponList}" var="cmCoupon" varStatus="index">
                 <p>优惠券${index.index+1}:
@@ -108,7 +109,7 @@
                 </c:if>
             </td>
             <td>
-                <a href="${ctx}/vip/cmCoupon/form?id=${vip.id}">编辑</a>
+                <a href="${ctx}/vip/cmCoupon/form?id=${vip.id}&endTime=${vip.endTime}">编辑</a>
                 <c:if test="${vip.status ne '2'}">
                     <a href="${ctx}/vip/cmCoupon/close?id=${vip.id}"
                        onclick="return confirmx('确定关闭该该月份的优惠券吗?关闭后该月份将不赠送优惠券?', this.href)">关闭</a>

+ 8 - 1
src/main/webapp/WEB-INF/views/modules/user/clubTemporaryForm.jsp

@@ -419,7 +419,14 @@
 				<form:input path="linkMan" htmlEscape="false" maxlength="20" class="input-medium required"/>
 			</td>
 			<th width="12%"><font color="red">*</font> 手机号:</th>
-			<td colspan="3"><form:input path="bindMobile" htmlEscape="false" maxlength="20" class="input-medium required"  onchange="checkMobile()"/></td>
+			<td width="13%"><form:input path="bindMobile" htmlEscape="false" maxlength="20" class="input-medium required"  onchange="checkMobile()"/></td>
+			<th width="12%"><font color="red">*</font> 联系人身份:</th>
+			<td width="13%">
+				<form:radiobutton path="linkManIdentity" name="linkManIdentity" class="required" value="1" label="老板"/>
+				<form:radiobutton path="linkManIdentity" name="linkManIdentity" class="required" value="2" label="采购"/>
+				<form:radiobutton path="linkManIdentity" name="linkManIdentity" class="required" value="3" label="运营"/>
+				<form:radiobutton path="linkManIdentity" name="linkManIdentity" class="required" value="4" label="其他"/>
+			</td>
 		</tr>
 	</table>
 </div>

+ 6 - 2
src/main/webapp/WEB-INF/views/modules/userNew/recordLinkageForm.jsp

@@ -128,14 +128,17 @@
 		<div class="control-group">
 			<label class="control-label"><font color="red">*</font>描述:</label>
             <textarea id='describe' <c:if test="${empty describe}">placeholder="请输入该用户的行为信息,例如查看了什么商品或者文章,以及任何需要销售人员注意的信息"</c:if>
-					  name='describe' rows='5' cols='12' style="width: 700px" maxlength="200"><c:if test="${not empty describe}">${describe}</c:if></textarea>
-		</div>
+					  name='describe' rows='5' cols='12' style="width: 700px" maxlength="200"><c:if test="${not empty describe}">${describe}</c:if><c:if test="${masBehavior ne ''}">,${masBehavior}</c:if></textarea>
+			<textarea hidden id="masBehavior" path="masBehavior"  name="masBehavior" style="width: 700px; visibility: hidden" maxlength="200"><c:if test="${masBehavior ne ''}">,${masBehavior}</c:if></textarea>
+		</div><%--<c:if test="${masBehavior ne ''}">,${masBehavior}</c:if>--%>
+
 	<div class="control-label">链接:</div><span id='link' name='link'>${link}</span>
 		<div class="form-actions">
 			<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
 			<input id="btnSubmit" class="btn btn-primary"  type="submit" value="确定并生成链接"/>
 		</div>
 	</form:form>
+<c:if test="${masBehavior ne ''}">
 <form:form id="searchForm" modelAttribute="cmBehaviorRecord" action="${ctx}/new/user/agency/recordLinkage?clubId=${clubId}" method="post" class="breadcrumb form-search">
 	<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
 	<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
@@ -187,6 +190,7 @@
 	</C:forEach>
 	</tbody>
 </table>
+</c:if>
 <div class="pagination">${page}</div>
 
 	<script type="text/javascript">

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