Pārlūkot izejas kodu

产品仪器保存

Aslee 3 gadi atpakaļ
vecāks
revīzija
119e00a0ff

+ 36 - 1
src/main/java/com/caimei/modules/baike/dao/CmBaikeProductDao.java

@@ -1,8 +1,13 @@
 package com.caimei.modules.baike.dao;
 
+import com.caimei.modules.baike.entity.CmBaikeProductParam;
+import com.caimei.modules.baike.entity.CmBaikeProductQuestion;
 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.List;
 
 /**
  * 采美百科产品/仪器DAO接口
@@ -11,5 +16,35 @@ import com.caimei.modules.baike.entity.CmBaikeProduct;
  */
 @MyBatisDao
 public interface CmBaikeProductDao extends CrudDao<CmBaikeProduct> {
-	
+
+    void updateStatus(@Param("status") Integer status, @Param("productId") Integer productId);
+
+    void updateTopPosition(CmBaikeProduct cmBaikeProduct);
+
+    List<CmBaikeProductParam> findParamList(String id);
+
+    /**
+     * 查询图片列表
+     *
+     * @param productId
+     * @param imageType 图片类型:1产品/仪器认证,2效果展示
+     * @return
+     */
+    List<String> findImageList(@Param("productId") String productId,@Param("imageType") int imageType);
+
+    List<CmBaikeProductQuestion> findQuestionList(String id);
+
+    void deleteParamsByProductId(String id);
+
+    void deleteImagesByProductId(String id);
+
+    void deleteQuestionsByProductId(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);
+
+    void insertProductQuestion(@Param("question") String question,@Param("answer") String answer,@Param("productId") String productId);
+
+    Integer findTopLength(Integer commodityType);
 }

+ 63 - 6
src/main/java/com/caimei/modules/baike/entity/CmBaikeProduct.java

@@ -2,6 +2,8 @@ package com.caimei.modules.baike.entity;
 
 import org.hibernate.validator.constraints.Length;
 import java.util.Date;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 
 import com.thinkgem.jeesite.common.persistence.DataEntity;
@@ -14,7 +16,7 @@ import com.thinkgem.jeesite.common.persistence.DataEntity;
 public class CmBaikeProduct extends DataEntity<CmBaikeProduct> {
 	
 	private static final long serialVersionUID = 1L;
-	private Integer classify;		// 分类:1产品,2仪器
+	private Integer commodityType;		// 分类:1产品,2仪器
 	private String name;		// 名称
 	private String alias;		// 别名
 	private String discription;		// 描述
@@ -37,6 +39,14 @@ public class CmBaikeProduct extends DataEntity<CmBaikeProduct> {
 	private Integer topPosition;		// 置顶位
 	private Integer status;		// 状态:0停用,1启用
 	private Date addTime;		// 添加时间
+
+
+	private Integer topFlag;	//是否置顶标识:0否,1是
+	private String typeName;	//分类名称
+	private List<CmBaikeProductParam> paramList;	// 参数列表
+	private List<String> authImageList;			// 产品认证图片列表
+	private List<String> displayImageList;		// 效果展示图片列表
+	private List<CmBaikeProductQuestion> questionList;		//问题列表
 	
 	public CmBaikeProduct() {
 		super();
@@ -46,12 +56,12 @@ public class CmBaikeProduct extends DataEntity<CmBaikeProduct> {
 		super(id);
 	}
 
-	public Integer getClassify() {
-		return classify;
+	public Integer getCommodityType() {
+		return commodityType;
 	}
 
-	public void setClassify(Integer classify) {
-		this.classify = classify;
+	public void setCommodityType(Integer commodityType) {
+		this.commodityType = commodityType;
 	}
 	
 	@Length(min=0, max=50, message="名称长度必须介于 0 和 50 之间")
@@ -245,5 +255,52 @@ public class CmBaikeProduct extends DataEntity<CmBaikeProduct> {
 	public void setAddTime(Date addTime) {
 		this.addTime = addTime;
 	}
-	
+
+	public Integer getTopFlag() {
+		return topFlag;
+	}
+
+	public void setTopFlag(Integer topFlag) {
+		this.topFlag = topFlag;
+	}
+
+	public String getTypeName() {
+		return typeName;
+	}
+
+	public void setTypeName(String typeName) {
+		this.typeName = typeName;
+	}
+
+	public List<CmBaikeProductParam> getParamList() {
+		return paramList;
+	}
+
+	public void setParamList(List<CmBaikeProductParam> paramList) {
+		this.paramList = paramList;
+	}
+
+	public List<String> getAuthImageList() {
+		return authImageList;
+	}
+
+	public void setAuthImageList(List<String> authImageList) {
+		this.authImageList = authImageList;
+	}
+
+	public List<String> getDisplayImageList() {
+		return displayImageList;
+	}
+
+	public void setDisplayImageList(List<String> displayImageList) {
+		this.displayImageList = displayImageList;
+	}
+
+	public List<CmBaikeProductQuestion> getQuestionList() {
+		return questionList;
+	}
+
+	public void setQuestionList(List<CmBaikeProductQuestion> questionList) {
+		this.questionList = questionList;
+	}
 }

+ 50 - 0
src/main/java/com/caimei/modules/baike/entity/CmBaikeProductParam.java

@@ -0,0 +1,50 @@
+package com.caimei.modules.baike.entity;
+
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+import org.hibernate.validator.constraints.Length;
+
+/**
+ * 品牌授权商品参数Entity
+ * @author Aslee
+ * @version 2021-11-23
+ */
+public class CmBaikeProductParam extends DataEntity<CmBaikeProductParam> {
+
+	private static final long serialVersionUID = 1L;
+	private Integer productId;		// 采美百科商品Id
+	private String name;		// 参数名称
+	private String content;		// 参数信息
+
+	public CmBaikeProductParam() {
+		super();
+	}
+
+	public CmBaikeProductParam(String id){
+		super(id);
+	}
+
+	public Integer getProductId() {
+		return productId;
+	}
+
+	public void setProductId(Integer productId) {
+		this.productId = productId;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+}

+ 48 - 0
src/main/java/com/caimei/modules/baike/entity/CmBaikeProductQuestion.java

@@ -0,0 +1,48 @@
+package com.caimei.modules.baike.entity;
+
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+
+/**
+ * 品牌授权商品参数Entity
+ * @author Aslee
+ * @version 2021-11-23
+ */
+public class CmBaikeProductQuestion extends DataEntity<CmBaikeProductQuestion> {
+
+	private static final long serialVersionUID = 1L;
+	private Integer productId;		// 采美百科商品Id
+	private String question;		// 问题
+	private String answer;		// 回答
+
+	public CmBaikeProductQuestion() {
+		super();
+	}
+
+	public CmBaikeProductQuestion(String id){
+		super(id);
+	}
+
+	public Integer getProductId() {
+		return productId;
+	}
+
+	public void setProductId(Integer productId) {
+		this.productId = productId;
+	}
+
+	public String getQuestion() {
+		return question;
+	}
+
+	public void setQuestion(String question) {
+		this.question = question;
+	}
+
+	public String getAnswer() {
+		return answer;
+	}
+
+	public void setAnswer(String answer) {
+		this.answer = answer;
+	}
+}

+ 86 - 1
src/main/java/com/caimei/modules/baike/service/CmBaikeProductService.java

@@ -2,6 +2,10 @@ package com.caimei.modules.baike.service;
 
 import java.util.List;
 
+import com.caimei.modules.baike.entity.CmBaikeProductParam;
+import com.caimei.modules.baike.entity.CmBaikeProductQuestion;
+import com.caimei.modules.miniprogram.utils.UploadPicUtils;
+import com.thinkgem.jeesite.common.utils.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -10,6 +14,8 @@ import com.thinkgem.jeesite.common.service.CrudService;
 import com.caimei.modules.baike.entity.CmBaikeProduct;
 import com.caimei.modules.baike.dao.CmBaikeProductDao;
 
+import javax.annotation.Resource;
+
 /**
  * 采美百科产品/仪器Service
  * @author Aslee
@@ -18,6 +24,8 @@ import com.caimei.modules.baike.dao.CmBaikeProductDao;
 @Service
 @Transactional(readOnly = true)
 public class CmBaikeProductService extends CrudService<CmBaikeProductDao, CmBaikeProduct> {
+	@Resource
+	private CmBaikeProductDao cmBaikeProductDao;
 
 	public CmBaikeProduct get(String id) {
 		return super.get(id);
@@ -33,12 +41,89 @@ public class CmBaikeProductService extends CrudService<CmBaikeProductDao, CmBaik
 	
 	@Transactional(readOnly = false)
 	public void save(CmBaikeProduct cmBaikeProduct) {
+		// 保存商品图片
+		String mainImage = cmBaikeProduct.getImage();
+		if (StringUtils.isNotEmpty(mainImage) && !mainImage.startsWith("http:")) {
+			cmBaikeProduct.setImage(UploadPicUtils.saveImageToServer(mainImage));
+		}
+		// 删除原先的图片/参数/问题数据
+		if (!cmBaikeProduct.getIsNewRecord()) {
+			cmBaikeProductDao.deleteParamsByProductId(cmBaikeProduct.getId());
+			cmBaikeProductDao.deleteImagesByProductId(cmBaikeProduct.getId());
+			cmBaikeProductDao.deleteQuestionsByProductId(cmBaikeProduct.getId());
+		}
 		super.save(cmBaikeProduct);
+		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> displayImageList = cmBaikeProduct.getDisplayImageList();
+		displayImageList.forEach(displayImage->{
+			if (StringUtils.isNotEmpty(displayImage)) {
+				if (!displayImage.startsWith("http")) {
+					displayImage = UploadPicUtils.saveImageToServer(displayImage);
+				}
+				cmBaikeProductDao.insertProductImage(displayImage, productId, 2);
+			}
+		});
+		// 保存参数
+		List<CmBaikeProductParam> paramList = cmBaikeProduct.getParamList();
+		paramList.forEach(param->{
+			if (StringUtils.isNotEmpty(param.getName()) && StringUtils.isNotEmpty(param.getContent())) {
+				cmBaikeProductDao.insertProductParam(param.getName(), param.getContent(), 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);
+			}
+		});
 	}
 	
 	@Transactional(readOnly = false)
 	public void delete(CmBaikeProduct cmBaikeProduct) {
 		super.delete(cmBaikeProduct);
 	}
-	
+
+	@Transactional(readOnly = false)
+	public void updateTopPosition(CmBaikeProduct cmBaikeProduct) {
+		cmBaikeProductDao.updateTopPosition(cmBaikeProduct);
+	}
+
+	/**
+	 * 清除置顶,将后面置顶位的数据往前移
+	 * @param cmBaikeProduct
+	 */
+	@Transactional(readOnly = false)
+	public void moveTopList(CmBaikeProduct cmBaikeProduct) {
+		Integer oldPosition = cmBaikeProduct.getTopPosition();
+		List<CmBaikeProduct> topCmBaikeProductList = findTopList();
+		topCmBaikeProductList.forEach(topCmBaikeProduct->{
+			Integer topPosition = topCmBaikeProduct.getTopPosition();
+			if (topCmBaikeProduct.getTopPosition()>oldPosition) {
+				topCmBaikeProduct.setTopPosition(--topPosition);
+				updateTopPosition(cmBaikeProduct);
+			}
+		});
+	}
+
+	/**
+	 * 置顶商品列表
+	 * @return
+	 */
+	public List<CmBaikeProduct> findTopList() {
+		CmBaikeProduct cmBaikeProduct = new CmBaikeProduct();
+		cmBaikeProduct.setTopFlag(1);
+		return cmBaikeProductDao.findList(cmBaikeProduct);
+	}
 }

+ 103 - 4
src/main/java/com/caimei/modules/baike/web/CmBaikeProductController.java

@@ -1,15 +1,23 @@
 package com.caimei.modules.baike.web;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.shiro.authz.annotation.RequiresPermissions;
+import com.caimei.modules.baike.dao.CmBaikeProductDao;
+import com.caimei.modules.baike.entity.CmBaikeProductParam;
+import com.caimei.modules.baike.entity.CmBaikeProductQuestion;
+import com.caimei.modules.baike.entity.CmBaikeType;
+import com.caimei.modules.baike.service.CmBaikeTypeService;
+import com.caimei.modules.info.entity.Info;
+import com.google.common.collect.Maps;
 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.servlet.mvc.support.RedirectAttributes;
 
 import com.thinkgem.jeesite.common.config.Global;
@@ -19,6 +27,10 @@ import com.thinkgem.jeesite.common.utils.StringUtils;
 import com.caimei.modules.baike.entity.CmBaikeProduct;
 import com.caimei.modules.baike.service.CmBaikeProductService;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * 采美百科产品/仪器Controller
  * @author Aslee
@@ -30,6 +42,12 @@ public class CmBaikeProductController extends BaseController {
 
 	@Autowired
 	private CmBaikeProductService cmBaikeProductService;
+
+	@Autowired
+    private CmBaikeTypeService cmBaikeTypeService;
+
+	@Resource
+    private CmBaikeProductDao cmBaikeProductDao;
 	
 	@ModelAttribute
 	public CmBaikeProduct get(@RequestParam(required=false) String id) {
@@ -46,13 +64,42 @@ public class CmBaikeProductController extends BaseController {
 	@RequestMapping(value = {"list", ""})
 	public String list(CmBaikeProduct cmBaikeProduct, HttpServletRequest request, HttpServletResponse response, Model model) {
 		Page<CmBaikeProduct> page = cmBaikeProductService.findPage(new Page<CmBaikeProduct>(request, response), cmBaikeProduct); 
+        CmBaikeType cmBaikeType = new CmBaikeType();
+        cmBaikeType.setTypeSort(cmBaikeProduct.getCommodityType());
+        List<CmBaikeType> typeList = cmBaikeTypeService.findList(cmBaikeType);
+        String commodityType = cmBaikeProduct.getCommodityType() == 1 ? "产品" : "仪器";
+		// 置顶数量
+		Integer topLength = cmBaikeProductDao.findTopLength(cmBaikeProduct.getCommodityType());
 		model.addAttribute("page", page);
-		return "modules/baike/cmBaikeProductList";
+		model.addAttribute("typeList", typeList);
+		model.addAttribute("commodityType", commodityType);
+		model.addAttribute("topLength", null == topLength ? 0 : topLength);
+        return "modules/baike/cmBaikeProductList";
 	}
 
 	@RequestMapping(value = "form")
 	public String form(CmBaikeProduct cmBaikeProduct, Model model) {
+		CmBaikeType cmBaikeType = new CmBaikeType();
+		cmBaikeType.setTypeSort(cmBaikeProduct.getCommodityType());
+		// 分类列表
+		List<CmBaikeType> typeList = cmBaikeTypeService.findList(cmBaikeType);
+		// 商品类型
+		String commodityType = cmBaikeProduct.getCommodityType() == 1 ? "产品" : "仪器";
+		// 参数列表
+		List<CmBaikeProductParam> paramList = cmBaikeProductDao.findParamList(cmBaikeProduct.getId());
+		cmBaikeProduct.setParamList(paramList);
+		// 产品/仪器认证图片列表
+		List<String> authImageList = cmBaikeProductDao.findImageList(cmBaikeProduct.getId(), 1);
+		cmBaikeProduct.setAuthImageList(authImageList);
+		// 效果展示图片列表
+		List<String> displayImageList = cmBaikeProductDao.findImageList(cmBaikeProduct.getId(), 2);
+		cmBaikeProduct.setDisplayImageList(displayImageList);
+		// 问题列表
+		List<CmBaikeProductQuestion> questionList = cmBaikeProductDao.findQuestionList(cmBaikeProduct.getId());
+		cmBaikeProduct.setQuestionList(questionList);
 		model.addAttribute("cmBaikeProduct", cmBaikeProduct);
+		model.addAttribute("typeList", typeList);
+		model.addAttribute("commodityType", commodityType);
 		return "modules/baike/cmBaikeProductForm";
 	}
 
@@ -63,14 +110,66 @@ public class CmBaikeProductController extends BaseController {
 		}
 		cmBaikeProductService.save(cmBaikeProduct);
 		addMessage(redirectAttributes, "保存产品成功");
-		return "redirect:"+Global.getAdminPath()+"/baike/cmBaikeProduct/?repage";
+        return "redirect:" + Global.getAdminPath() + "/baike/cmBaikeProduct/?repage&commodityType=" + cmBaikeProduct.getCommodityType();
 	}
 	
 	@RequestMapping(value = "delete")
 	public String delete(CmBaikeProduct cmBaikeProduct, RedirectAttributes redirectAttributes) {
 		cmBaikeProductService.delete(cmBaikeProduct);
 		addMessage(redirectAttributes, "删除产品成功");
-		return "redirect:"+Global.getAdminPath()+"/baike/cmBaikeProduct/?repage";
+        return "redirect:" + Global.getAdminPath() + "/baike/cmBaikeProduct/?repage&commodityType=" + cmBaikeProduct.getCommodityType();
 	}
 
+    @RequestMapping(value = "updateStatus")
+    @ResponseBody
+    public Map<String,Object> updateStatus(Integer status, Integer productId) {
+        HashMap<String, Object> result = new HashMap<>(2);
+        cmBaikeProductDao.updateStatus(status, productId);
+        result.put("success", true);
+        result.put("msg", (status == 1 ? "启用" : "停用") + "成功");
+        return result;
+    }
+
+	@RequestMapping(value = "updateTopPosition")
+	@ResponseBody
+	public Map<String, Object> updateTopPosition(Integer topPosition,String id,String type){
+		Map<String, Object> map = Maps.newLinkedHashMap();
+		try {
+			CmBaikeProduct cmBaikeProduct = cmBaikeProductService.get(id);
+			boolean topFlag = cmBaikeProduct.getTopPosition() != null;
+			Integer oldTopPosition = cmBaikeProduct.getTopPosition();
+			if (StringUtils.equals("setTopPosition", type)) {
+				//更新被替换掉置顶的文章
+				CmBaikeProduct oldCmBaikeProduct = new CmBaikeProduct();
+				oldCmBaikeProduct.setTopPosition(topPosition);
+				List<CmBaikeProduct> replacedCmBaikeProductList = cmBaikeProductService.findList(oldCmBaikeProduct);
+				replacedCmBaikeProductList.forEach(replacedCmBaikeProduct->{
+					replacedCmBaikeProduct.setTopPosition(null);
+					cmBaikeProductService.updateTopPosition(replacedCmBaikeProduct);
+				});
+				//新的置顶产品/仪器
+				cmBaikeProduct.setTopPosition(topPosition);
+				map.put("msg", "置顶成功");
+			} else if (StringUtils.equals("clearTopPosition", type)) {
+				//清除置顶,将后面置顶位的数据往前移
+				cmBaikeProductService.moveTopList(cmBaikeProduct);
+				//清除置顶位
+				cmBaikeProduct.setTopPosition(null);
+				map.put("msg", "清除成功");
+			}
+			cmBaikeProductService.updateTopPosition(cmBaikeProduct);
+			//如果新直播原本也是置顶直播,需要把新直播后面的直播往前挪(新直播更新后再一起挪)
+			if (StringUtils.equals("setTopPosition", type) && topFlag) {
+				CmBaikeProduct oldCmBaikeProduct = new CmBaikeProduct();
+				oldCmBaikeProduct.setTopPosition(oldTopPosition);
+				cmBaikeProductService.moveTopList(oldCmBaikeProduct);
+			}
+			map.put("success",true);
+		} catch (Exception e) {
+			logger.debug(e.toString(),e);
+			map.put("success",false);
+			map.put("msg", "修改失败");
+		}
+		return map;
+	}
 }

+ 66 - 13
src/main/resources/mappings/modules/baike/CmBaikeProductMapper.xml

@@ -4,7 +4,7 @@
     
 	<sql id="cmBaikeProductColumns">
 		a.id AS "id",
-		a.classify AS "classify",
+		a.commodityType AS "commodityType",
 		a.name AS "name",
 		a.alias AS "alias",
 		a.discription AS "discription",
@@ -26,10 +26,12 @@
 		a.typeId AS "typeId",
 		a.topPosition AS "topPosition",
 		a.status AS "status",
-		a.addTime AS "addTime"
+		a.addTime AS "addTime",
+		cbt.name as "typeName"
 	</sql>
 	
 	<sql id="cmBaikeProductJoins">
+		left join cm_baike_type cbt on a.typeId = cbt.id
 	</sql>
     
 	<select id="get" resultType="CmBaikeProduct">
@@ -59,12 +61,22 @@
 			<if test="typeId != null and typeId != ''">
 				AND a.typeId = #{typeId}
 			</if>
-			<if test="topPosition != null and topPosition != ''">
-				AND a.topPosition = #{topPosition}
+			<if test="topFlag != null">
+				<choose>
+					<when test='topFlag == 1'>
+						and topPosition is not null and topPosition != ''
+					</when>
+					<when test='topFlag == 0'>
+						and (topPosition is null or topPosition = '')
+					</when>
+				</choose>
 			</if>
-			<if test="status != null and status != ''">
+			<if test="status != null">
 				AND a.status = #{status}
 			</if>
+			<if test="commodityType != null">
+				and a.commodityType = #{commodityType}
+			</if>
 		</where>
 		<choose>
 			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
@@ -91,10 +103,24 @@
 			</otherwise>
 		</choose>
 	</select>
-	
+	<select id="findParamList" resultType="com.caimei.modules.baike.entity.CmBaikeProductParam">
+		select productId, name, content from cm_baike_product_param where productId = #{id}
+	</select>
+	<select id="findImageList" resultType="java.lang.String">
+		select image from cm_baike_product_image where productId = #{productId} and type = #{imageType}
+	</select>
+	<select id="findQuestionList" resultType="com.caimei.modules.baike.entity.CmBaikeProductQuestion">
+		select productId, question, answer
+		from cm_baike_product_question
+		where productId = #{id}
+	</select>
+	<select id="findTopLength" resultType="java.lang.Integer">
+		select count(*) from cm_baike_product where commodityType = #{commodityType} and topPosition is not null and topPosition != ''
+	</select>
+
 	<insert id="insert" parameterType="CmBaikeProduct"  keyProperty="id" useGeneratedKeys="true">
 		INSERT INTO cm_baike_product(
-			classify,
+			commodityType,
 			name,
 			alias,
 			discription,
@@ -117,7 +143,7 @@
 			status,
 			addTime
 		) VALUES (
-			#{classify},
+			#{commodityType},
 			#{name},
 			#{alias},
 			#{discription},
@@ -135,13 +161,25 @@
 			#{aroundOperation},
 			#{publishTime},
 			#{basePv},
-			#{actualPv},
+			0,
 			#{typeId},
 			#{status},
-			#{addTime}
+			NOW()
 		)
 	</insert>
-	
+	<insert id="insertProductImage">
+		insert into cm_baike_product_image (productId, type, image)
+		values (#{produtId}, #{imageType}, #{authImage})
+	</insert>
+	<insert id="insertProductParam">
+		insert into cm_baike_product_param (productId, name, content)
+		values (#{productId}, #{name}, #{content})
+	</insert>
+	<insert id="insertProductQuestion">
+		insert into cm_baike_product_question (productId, question, answer)
+		values (#{productId}, #{question}, #{answer})
+	</insert>
+
 	<update id="update">
 		UPDATE cm_baike_product SET 	
 			name = #{name},
@@ -165,10 +203,25 @@
 			status = #{status}
 		WHERE id = #{id}
 	</update>
-	
+	<update id="updateStatus">
+		update cm_baike_product set status = #{status} where id = #{productId}
+	</update>
+	<update id="updateTopPosition">
+		update cm_baike_product set topPosition = #{topPosition} where id = #{id}
+	</update>
+
 	<delete id="delete">
 		DELETE FROM cm_baike_product
 		WHERE id = #{id}
 	</delete>
-	
+    <delete id="deleteParamsByProductId">
+		delete from cm_baike_product_param where productId = #{id}
+	</delete>
+	<delete id="deleteImagesByProductId">
+		delete from cm_baike_product_image where productId = #{id}
+	</delete>
+	<delete id="deleteQuestionsByProductId">
+		delete from cm_baike_product_question where productId = #{id}
+	</delete>
+
 </mapper>

+ 0 - 10
src/main/webapp/WEB-INF/views/modules/archive/cmProductArchiveContentForm.jsp

@@ -210,14 +210,6 @@
 					</div>
 				</c:forEach>
 			</div>
-
-
-<%--			</div>--%>
-
-				<%--</c:if>
-				<c:if test="${empty cmProductArchiveContent.imageList}">
-					111
-				</c:if>--%>
 		</div>
 		<div class="form-actions">
 			<input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
@@ -238,7 +230,6 @@
 		var observer = new MutationObserver(function (mutations) {
 			$.each(mutations, function (index, item) {
 				if (item.type === 'childList') {
-					debugger
 					// 在创建新的 element 时调用
 					var target = $(item.target),
 							thisWrapper = target.closest('.conList'),
@@ -255,7 +246,6 @@
 		observer.observe(observeEle, MutationObserverConfig);
 
 		$('body').on('click', '.cancel-upload',function() {
-			debugger
 			var wrapper = $(this).closest('.controls');
 			wrapper.find('li').css('z-index','-1');
 			wrapper.find('input').val('');

+ 1 - 0
src/main/webapp/WEB-INF/views/modules/baike/cmBaikeBannerForm.jsp

@@ -224,6 +224,7 @@
 		};
 		var observer = new MutationObserver(function (mutations) {
 			$.each(mutations, function (index, item) {
+			    debugger
 				if (item.type === 'childList') {
 					// 在创建新的 element 时调用
 					var target = $(item.target),

+ 694 - 48
src/main/webapp/WEB-INF/views/modules/baike/cmBaikeProductForm.jsp

@@ -1,14 +1,195 @@
+<%@ page import="com.thinkgem.jeesite.common.config.Global" %>
 <%@ page contentType="text/html;charset=UTF-8" %>
 <%@ include file="/WEB-INF/views/include/taglib.jsp"%>
 <html>
 <head>
 	<title>产品管理</title>
 	<meta name="decorator" content="default"/>
+	<style>
+		.titleClass{
+			font-weight: bolder;
+			margin-left: -40px;
+		}
+		.keyClass{
+			font-weight: bolder;
+		}
+		.paramRow {
+			margin-top: 10px;
+		}
+	</style>
+	<style>
+		.clearfix::after{
+			content: "";
+			display: block;
+			clear: both;
+		}
+		.iconBox{
+			font-size: 0;
+		}/*
+		.controls{
+			margin-left: 0 !important;
+		}*/
+		.controls .conList{
+			display: inline-block;
+			margin-right: 15px;
+		}
+		.conList .btn:nth-of-type(1){
+			margin-left: 25px;
+		}
+		.select2-choice{
+			width: 100px;
+		}
+		.upload-content {
+			float: left;
+			margin-top: -100px;
+			margin-right: -40px;
+		}
+		.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;
+			height: 100px;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			box-sizing: border-box;
+		}
+		.hide-pic {
+			display: none !important;
+		}
+		.upload-image-list{
+			width: 660px;
+			float: left;
+		}
+	</style>
+	<style>
+		.iconBox{
+			font-size: 0;
+		}
+		.controls .conList{
+			display: inline-block;
+			margin-right: 15px;
+		}
+		.conList .btn:nth-of-type(1){
+			margin-left: 25px;
+		}
+		.select2-choice{
+			width: 100px;
+		}
+		.upload-content {
+			float: left;
+			margin-top: -70px;
+			margin-left: 20px !important;
+		}
+		.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;
+		}
+		.hide-pic {
+			display: none !important;
+		}
+	</style>
 	<script type="text/javascript">
 		$(document).ready(function() {
 			//$("#name").focus();
 			$("#inputForm").validate({
 				submitHandler: function(form){
+					var commodityType = '${commodityType}';
+					var discription = $("#discription").val().trim();
+					var advantage = $("#advantage").val().trim();
+					var disadvantage = $("#disadvantage").val().trim();
+					var principle = $("#principle").val().trim();
+					var adaptiveMan = $("#adaptiveMan").val().trim();
+					var unAdaptiveMan = $("#unAdaptiveMan").val().trim();
+					var aroundOperation = $("#aroundOperation").val().trim();
+					if (discription === '') {
+						alertx("请输入" + commodityType + "概述");
+						return false;
+					}
+					if (advantage === '') {
+						alertx("请输入" + commodityType + "优点");
+						return false;
+					}
+					if (disadvantage === '') {
+						alertx("请输入" + commodityType + "缺点");
+						return false;
+					}
+					if (principle === '') {
+						alertx("请输入" + commodityType + "原理");
+						return false;
+					}
+					if (adaptiveMan === '') {
+						alertx("请输入适应人群");
+						return false;
+					}
+					if (unAdaptiveMan === '') {
+						alertx("请输入不适应人群");
+						return false;
+					}
+					if (aroundOperation === '') {
+						alertx("请输入术前术后");
+						return false;
+					}
 					loading('正在提交,请稍等...');
 					form.submit();
 				},
@@ -27,142 +208,607 @@
 </head>
 <body>
 	<ul class="nav nav-tabs">
-		<li><a href="${ctx}/baike/cmBaikeProduct/">产品列表</a></li>
-		<li class="active"><a href="${ctx}/baike/cmBaikeProduct/form?id=${cmBaikeProduct.id}">产品${not empty cmBaikeProduct.id?'编辑':'添加'}查看</a></li>
+		<li><a href="${ctx}/baike/cmBaikeProduct/?commodityType=${cmBaikeProduct.commodityType}">${commodityType}</a></li>
+		<li class="active"><a href="${ctx}/baike/cmBaikeProduct/form?id=${cmBaikeProduct.id}&commodityType=${cmBaikeProduct.commodityType}">${commodityType}${not empty cmBaikeProduct.id?'编辑':'添加'}</a></li>
 	</ul><br/>
 	<form:form id="inputForm" modelAttribute="cmBaikeProduct" action="${ctx}/baike/cmBaikeProduct/save" method="post" class="form-horizontal">
 		<form:hidden path="id"/>
-		<sys:message content="${message}"/>		
+		<form:hidden path="commodityType"/>
+		<sys:message content="${message}"/>
+		<div class="control-group">
+			<label class="control-label titleClass"><font color="red">*</font>${commodityType}简述</label>
+		</div>
 		<div class="control-group">
-			<label class="control-label">名称:</label>
+			<label class="control-label"><font color="red">*</font>${commodityType}名称:</label>
 			<div class="controls">
 				<form:input path="name" htmlEscape="false" maxlength="50" class="input-xlarge "/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">别名:</label>
+			<label class="control-label"><font color="red">*</font>${commodityType}别名:</label>
 			<div class="controls">
-				<form:input path="alias" htmlEscape="false" maxlength="50" class="input-xlarge "/>
+				<form:input path="alias" htmlEscape="false" maxlength="50" class="input-xlarge " placeholder="输入英文名或者其他名称"/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">描述:</label>
-			<div class="controls">
-				<form:input path="discription" htmlEscape="false" maxlength="300" class="input-xlarge "/>
+			<label class="control-label"><font color="red">*</font>${commodityType}概述:</label>
+			<div class="controls" style="width:812px">
+				<form:textarea path="discription" htmlEscape="false" class="input-xlarge required hide" />
+				<div id="discriptionEditor" class="contentEditor">${cmBaikeProduct.discription}</div>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">图片:</label>
-			<div class="controls">
-				<form:input path="image" htmlEscape="false" class="input-xlarge "/>
+			<label class="control-label"><font color="red">*</font>${commodityType}图片:</label>
+            <div class="main-image-list" style="display: flex;flex-wrap: wrap">
+                <div class="controls upload-content iconBox mainImageBox" id="mainImageBox">
+                    <div class="conList">
+                        <form:hidden id="image" path="image" htmlEscape="false" maxlength="255" class="input-xlarge required"/>
+                        <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>
+		<div class="control-group paramList">
+			<label class="control-label titleClass"><font color="red">*</font>${commodityType}参数</label>
+			<button class="btn btn-primary" type="button" style="margin-left: 500px" onclick="addParam()">添加参数</button>
+			<div class="controls paramRow" id="paramRow0">
+				<input name="paramList[0].name" htmlEscape="false" class="input-small required" maxlength="15"
+					   placeholder="例如:型号">
+				<input name="paramList[0].content" htmlEscape="false" class="input-xlarge required" maxlength="50"
+					   placeholder="输入参数信息">
+			</div>
+			<div class="controls paramRow" id="paramRow1">
+				<input name="paramList[1].name" htmlEscape="false" class="input-small required" maxlength="15"
+					   placeholder="例如:性质类型">
+				<input name="paramList[1].content" htmlEscape="false" class="input-xlarge required" maxlength="50"
+					   placeholder="输入参数信息">
+				<a onclick="deleteParam(1)" style="cursor: pointer">删除</a>
+			</div>
+			<div class="controls paramRow" id="paramRow2">
+				<input name="paramList[2].name" htmlEscape="false" class="input-small required" maxlength="15"
+					   placeholder="例如:成分">
+				<input name="paramList[2].content" htmlEscape="false" class="input-xlarge required" maxlength="50"
+					   placeholder="输入参数信息">
+				<a onclick="deleteParam(2)" style="cursor: pointer">删除</a>
+			</div>
+			<div class="controls paramRow" id="paramRow3">
+				<input name="paramList[3].name" htmlEscape="false" class="input-small required" maxlength="15"
+					   placeholder="例如:规格">
+				<input name="paramList[3].content" htmlEscape="false" class="input-xlarge required" maxlength="50"
+					   placeholder="输入参数信息">
+				<a onclick="deleteParam(3)" style="cursor: pointer">删除</a>
+			</div>
+			<div class="controls paramRow" id="paramRow4">
+				<input name="paramList[4].name" htmlEscape="false" class="input-small required" maxlength="15"
+					   placeholder="例如:性质类型">
+				<input name="paramList[4].content" htmlEscape="false" class="input-xlarge required" maxlength="50"
+					   placeholder="输入参数信息">
+				<a onclick="deleteParam(4)" style="cursor: pointer">删除</a>
+			</div>
+			<div class="controls paramRow" id="paramRow5">
+				<input name="paramList[5].name" htmlEscape="false" class="input-small required" maxlength="15"
+					   placeholder="例如:性质类型">
+				<input name="paramList[5].content" htmlEscape="false" class="input-xlarge required" maxlength="50"
+					   placeholder="输入参数信息">
+				<a onclick="deleteParam(5)" style="cursor: pointer">删除</a>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">优点:</label>
-			<div class="controls">
-				<form:input path="advantage" htmlEscape="false" maxlength="500" class="input-xlarge "/>
+			<label class="control-label keyClass"><font color="red">*</font>${commodityType}优点:</label>
+			<div class="controls" style="width:812px">
+				<form:textarea path="advantage" htmlEscape="false" class="input-xlarge required hide" />
+				<div id="advantageEditor" class="contentEditor">${cmBaikeProduct.advantage}</div>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">缺点:</label>
-			<div class="controls">
-				<form:input path="disadvantage" htmlEscape="false" maxlength="500" class="input-xlarge "/>
+			<label class="control-label keyClass"><font color="red">*</font>${commodityType}缺点:</label>
+			<div class="controls" style="width:812px">
+				<form:textarea path="disadvantage" htmlEscape="false" class="input-xlarge required hide" />
+				<div id="disadvantageEditor" class="contentEditor">${cmBaikeProduct.disadvantage}</div>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">原理:</label>
-			<div class="controls">
-				<form:input path="principle" htmlEscape="false" maxlength="500" class="input-xlarge "/>
+			<label class="control-label keyClass"><font color="red">*</font>${commodityType}原理:</label>
+			<div class="controls" style="width:812px">
+				<form:textarea path="principle" htmlEscape="false" class="input-xlarge required hide" />
+				<div id="principleEditor" class="contentEditor">${cmBaikeProduct.principle}</div>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">品牌:</label>
+			<label class="control-label titleClass"><font color="red">*</font>${commodityType}档案</label>
+		</div>
+		<div class="control-group">
+			<label class="control-label"><font color="red">*</font>品牌:</label>
 			<div class="controls">
 				<form:input path="brand" htmlEscape="false" maxlength="50" class="input-xlarge "/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">产地:</label>
+			<label class="control-label"><font color="red">*</font>产地:</label>
 			<div class="controls">
 				<form:input path="producePlace" htmlEscape="false" maxlength="50" class="input-xlarge "/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">上市时间:</label>
+			<label class="control-label"><font color="red">*</font>上市时间:</label>
 			<div class="controls">
 				<input name="marketTime" type="text" readonly="readonly" maxlength="20" class="input-medium Wdate "
 					value="<fmt:formatDate value="${cmBaikeProduct.marketTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"
-					onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+					onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">公司/供应商:</label>
+			<label class="control-label"><font color="red">*</font>公司/厂商:</label>
 			<div class="controls">
 				<form:input path="company" htmlEscape="false" maxlength="50" class="input-xlarge "/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">NMPA认证时间:</label>
+			<label class="control-label"><font color="red">*</font>NMPA认证时间:</label>
 			<div class="controls">
 				<input name="nmpaTime" type="text" readonly="readonly" maxlength="20" class="input-medium Wdate "
 					value="<fmt:formatDate value="${cmBaikeProduct.nmpaTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"
-					onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:false});"/>
+					onclick="WdatePicker({dateFmt:'yyyy-MM-dd',isShowClear:false});"/>
+			</div>
+		</div>
+		<div class="control-group" style="width: 1000px">
+			<label class="control-label keyClass"><font color="red">*</font>产品认证:</label>
+			<div class="auth-image-list" style="display: flex;flex-wrap: wrap">
+				<c:forEach items="${cmBaikeProduct.authImageList}" var="authImage" varStatus="index">
+					<div class="controls upload-content iconBox" id="authImageBox${index.index}">
+						<div class="conList">
+							<form:hidden id="authImage${index.index}" path="authImageList[${index.index}]" htmlEscape="false"
+										 maxlength="255"
+										 class="input-xlarge required"/>
+							<sys:ckfinder input="authImage${index.index}" type="images" uploadPath="/photo"
+										  selectMultiple="false"
+										  maxWidth="100" maxHeight="100"/><br>
+						</div>
+					</div>
+				</c:forEach>
+				<c:set var="size" value="${empty cmBaikeProduct.authImageList?0:cmBaikeProduct.authImageList.size()}"/>
+				<c:forEach var="emptyIndex" begin="${size}" end="${7}">
+					<div class="controls upload-content iconBox conList ${emptyIndex eq 0?'':'hide-pic'}" id="authImageBox${emptyIndex}" >
+						<div class="conList">
+							<form:hidden id="authImage${emptyIndex}" path="authImageList[${emptyIndex}]" htmlEscape="false"
+										 maxlength="255"
+										 class="input-xlarge required"/>
+							<sys:ckfinder input="authImage${emptyIndex}" type="images" uploadPath="/photo"
+										  selectMultiple="false"
+										  maxWidth="100" maxHeight="100"/><br>
+						</div>
+					</div>
+				</c:forEach>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">适应人群:</label>
-			<div class="controls">
-				<form:input path="adaptiveMan" htmlEscape="false" maxlength="500" class="input-xlarge "/>
+			<label class="control-label keyClass"><font color="red">*</font>适应人群:</label>
+			<div class="controls" style="width:812px">
+				<form:textarea path="adaptiveMan" htmlEscape="false" class="input-xlarge required hide" />
+				<div id="adaptiveManEditor" class="contentEditor">${cmBaikeProduct.adaptiveMan}</div>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">不适应人群:</label>
-			<div class="controls">
-				<form:input path="unAdaptiveMan" htmlEscape="false" maxlength="500" class="input-xlarge "/>
+			<label class="control-label keyClass"><font color="red">*</font>不适应人群:</label>
+			<div class="controls" style="width:812px">
+				<form:textarea path="unAdaptiveMan" htmlEscape="false" class="input-xlarge required hide" />
+				<div id="unAdaptiveManEditor" class="contentEditor">${cmBaikeProduct.unAdaptiveMan}</div>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">术前术后:</label>
-			<div class="controls">
-				<form:input path="aroundOperation" htmlEscape="false" maxlength="500" class="input-xlarge "/>
+			<label class="control-label keyClass"><font color="red">*</font>术前术后:</label>
+			<div class="controls" style="width:812px">
+				<form:textarea path="aroundOperation" htmlEscape="false" class="input-xlarge required hide" />
+				<div id="aroundOperationEditor" class="contentEditor">${cmBaikeProduct.aroundOperation}</div>
 			</div>
 		</div>
+		<div class="control-group" style="width: 1000px">
+			<label class="control-label keyClass"><font color="red">*</font>效果展示:</label>
+			<div class="display-image-list" style="display: flex;flex-wrap: wrap">
+				<c:forEach items="${cmBaikeProduct.displayImageList}" var="displayImage" varStatus="index">
+					<div class="controls upload-content iconBox" id="displayImageBox${index.index}">
+						<div class="conList">
+							<form:hidden id="displayImage${index.index}" path="displayImageList[${index.index}]" htmlEscape="false"
+										 maxlength="255"
+										 class="input-xlarge required"/>
+							<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}" >
+						<div class="conList">
+							<form:hidden id="displayImage${emptyIndex}" path="displayImageList[${emptyIndex}]" htmlEscape="false"
+										 maxlength="255"
+										 class="input-xlarge required"/>
+							<sys:ckfinder input="displayImage${emptyIndex}" type="images" uploadPath="/photo"
+										  selectMultiple="false"
+										  maxWidth="100" maxHeight="100"/><br>
+						</div>
+					</div>
+				</c:forEach>
+			</div>
+		</div>
+        <div class="questionList">
+            <div class="control-group">
+                <label class="control-label keyClass"><font color="red">*</font>常见问题:</label>
+                <button class="btn btn-primary" type="button" style="margin-left: 500px" onclick="addQuestion()">添加问题</button>
+            </div>
+            <div class="control-group" id="questionRow0">
+                <label class="control-label"><font color="red">*</font>问题1:</label>
+                <div class="controls">
+                    <input name="questionList[0].question" style="width: 550px" htmlEscape="false" class="input-xlarge required" maxlength="150">
+                </div>
+            </div>
+            <div class="control-group" id="answerRow0">
+                <label class="control-label"><font color="red">*</font>答:</label>
+                <div class="controls">
+                    <input name="questionList[0].answer" style="width: 550px" htmlEscape="false" class="input-xlarge required" maxlength="150">
+                </div>
+            </div>
+            <div class="control-group" id="questionRow1">
+                <label class="control-label"><font color="red">*</font>问题2:</label>
+                <div class="controls">
+                    <input name="questionList[1].question" style="width: 550px" htmlEscape="false" class="input-xlarge required questionInput" maxlength="150">
+                    <a id="questionDelBtn1" onclick="deleteQuestion(1)" style="cursor: pointer">删除</a>
+                </div>
+            </div>
+            <div class="control-group" id="answerRow1">
+                <label class="control-label"><font color="red">*</font>答:</label>
+                <div class="controls">
+                    <input name="questionList[1].answer" style="width: 550px" htmlEscape="false" class="input-xlarge required questionInput" maxlength="150">
+                </div>
+            </div>
+        </div>
+
 		<div class="control-group">
-			<label class="control-label">发布时间:</label>
+			<label class="control-label keyClass"><font color="red">*</font>发布时间:</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:ss',isShowClear:false});"/>
+					onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm',isShowClear:false});"/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">基础浏览量:</label>
+			<label class="control-label keyClass"><font color="red">*</font>基础浏览量:</label>
 			<div class="controls">
-				<form:input path="basePv" htmlEscape="false" class="input-xlarge  digits"/>
+				<form:input path="basePv" htmlEscape="false" onkeyup="onlynum(this)" class="input-xlarge  digits"/>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">分类id:</label>
+			<label class="control-label keyClass">产品类别:</label>
 			<div class="controls">
 				<form:select path="typeId" class="input-xlarge ">
-					<form:option value="" label=""/>
-					<form:options items="${fns:getDictList('')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+					<form:options items="${typeList}" itemLabel="name" itemValue="id" htmlEscape="false"/>
 				</form:select>
 			</div>
 		</div>
 		<div class="control-group">
-			<label class="control-label">状态:0停用,1启用:</label>
+			<label class="control-label keyClass">状态:</label>
 			<div class="controls">
 				<form:select path="status" class="input-xlarge ">
-					<form:option value="" label=""/>
-					<form:options items="${fns:getDictList('')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+					<form:option value="1" label="启用"/>
+					<form:option value="0" label="停用"/>
 				</form:select>
 			</div>
 		</div>
 		<div class="form-actions">
-			<input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
+			<input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存" onclick="checkInfo()"/>&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>
+	var paramIndex = 6;
+	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();
+		$('.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) {
+			    debugger
+				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-image-list')[0];
+		var observeEle3 = document.getElementsByClassName('display-image-list')[0];
+		observer.observe(observeEle1, MutationObserverConfig);
+		observer.observe(observeEle2, MutationObserverConfig);
+		observer.observe(observeEle3, 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') {
+				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 () {
+				$("#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")
+					}
+				})
+				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 paramListSize = ${empty cmBaikeProduct.paramList.size() ? 0: cmBaikeProduct.paramList.size()};
+		paramIndex = paramListSize > 0 ? paramListSize : paramIndex;
+		if (paramListSize > 6) {
+			var index = 6;
+			while (index < paramListSize) {
+				$(".paramList").append("<div class=\"controls paramRow\" id=\"paramRow" + index + "\">\n" +
+						"\t\t\t\t<input name=\"paramList[" + index + "].name\" htmlEscape=\"false\" class=\"input-small required\" maxlength=\"15\" placeholder=\"参数名称\">\n" +
+						"\t\t\t\t<input name=\"paramList[" + index + "].content\" htmlEscape=\"false\" class=\"input-xlarge required\" maxlength=\"50\" placeholder=\"输入参数信息\">\n" +
+						"\t\t\t\t<a onclick=\"deleteParam(" + index + ")\" style=\"cursor: pointer\">删除</a>\n" +
+						"            </div>");
+				index = index + 1;
+			}
+		}
+		var nameArray = new Array();
+		var contentArray = new Array();
+		<c:forEach items="${cmBaikeProduct.paramList}" var="item">
+		nameArray.push('${item.name}')
+		contentArray.push('${item.content}')
+		</c:forEach>
+		for (var i = 0; i < nameArray.length; i++) {
+			var nameInput = "paramList[" + i + "].name";
+			var contentInput = "paramList[" + i + "].content";
+			$('input[name="' + nameInput + '"]').val(nameArray[i]);
+			$('input[name="' + contentInput + '"]').val(contentArray[i]);
+		}
+
+		debugger
+		// 初始化问题
+		var questionListSize = ${empty cmBaikeProduct.questionList.size() ? 0: cmBaikeProduct.questionList.size()};
+		questionIndex = questionListSize > 0 ? questionListSize : questionIndex;
+		if (questionListSize > 2) {
+			var index = 2;
+			while (index < questionListSize) {
+				$(".questionList").append("" +
+						"<div class=\"control-group\" id=\"questionRow" + index + "\">\n" +
+						"                <label class=\"control-label\"><font color=\"red\">*</font>问题" + (index+1) + ":</label>\n" +
+						"                <div class=\"controls\">\n" +
+						"                    <input name=\"questionList[" + index + "].question\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge required\" maxlength=\"150\">\n" +
+						"\t\t\t\t<a id=\"questionDelBtn" + index + "\" onclick=\"deleteQuestion(" + index + ")\" style=\"cursor: pointer\">删除</a>\n" +
+						"                </div>\n" +
+						"            </div>\n" +
+						"            <div class=\"control-group\" id=\"answerRow" + index + "\">\n" +
+						"                <label class=\"control-label\"><font color=\"red\">*</font>答:</label>\n" +
+						"                <div class=\"controls\">\n" +
+						"                    <input name=\"questionList[" + index + "].answer\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge required\" maxlength=\"150\">\n" +
+						"                </div>\n" +
+						"            </div>");
+				index = index + 1;
+			}
+		}
+		var questionArray = new Array();
+		var answerArray = new Array();
+		<c:forEach items="${cmBaikeProduct.questionList}" var="item">
+        questionArray.push('${item.question}')
+        answerArray.push('${item.answer}')
+		</c:forEach>
+		for (var i = 0; i < questionArray.length; i++) {
+			var questionInput = "questionList[" + i + "].question";
+			var answerInput = "questionList[" + i + "].answer";
+			$('input[name="' + questionInput + '"]').val(questionArray[i]);
+			$('input[name="' + answerInput + '"]').val(answerArray[i]);
+		}
+	})
+
+	//删除参数
+	function deleteParam(index) {
+		$("#paramRow" + index).remove();
+	}
+
+	//添加参数
+	function addParam() {
+		$(".paramList").append("<div class=\"controls paramRow\" id=\"paramRow" + paramIndex + "\">\n" +
+				"\t\t\t\t<input name=\"paramList[" + paramIndex + "].name\" htmlEscape=\"false\" class=\"input-small required\" maxlength=\"10\" placeholder=\"例如:性质类型\">\n" +
+				"\t\t\t\t<input name=\"paramList[" + paramIndex + "].content\" htmlEscape=\"false\" class=\"input-xlarge required\" maxlength=\"50\" placeholder=\"输入参数信息\">\n" +
+				"\t\t\t\t<a onclick=\"deleteParam(" + paramIndex + ")\" style=\"cursor: pointer\">删除</a>\n" +
+				"            </div>")
+		paramIndex = paramIndex + 1;
+	}
+
+	//删除问题
+	function deleteQuestion(index) {
+		$("#questionRow" + index).remove();
+		$("#answerRow" + index).remove();
+		questionIndex--;
+        $("#questionDelBtn" + (questionIndex - 1)).attr("style", "cursor: pointer");
+    }
+
+	//添加问题
+	function addQuestion() {
+		$(".questionList").append("" +
+            "<div class=\"control-group\" id=\"questionRow" + questionIndex + "\">\n" +
+            "                <label class=\"control-label\"><font color=\"red\">*</font>问题" + (questionIndex+1) + ":</label>\n" +
+            "                <div class=\"controls\">\n" +
+            "                    <input name=\"questionList[" + questionIndex + "].question\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge required\" maxlength=\"150\">\n" +
+            "\t\t\t\t<a id=\"questionDelBtn" + questionIndex + "\" onclick=\"deleteQuestion(" + questionIndex + ")\" style=\"cursor: pointer\">删除</a>\n" +
+            "                </div>\n" +
+            "            </div>\n" +
+            "            <div class=\"control-group\" id=\"answerRow" + questionIndex + "\">\n" +
+            "                <label class=\"control-label\"><font color=\"red\">*</font>答:</label>\n" +
+            "                <div class=\"controls\">\n" +
+            "                    <input name=\"questionList[" + questionIndex + "].answer\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge required\" maxlength=\"150\">\n" +
+            "                </div>\n" +
+            "            </div>")
+        $("#questionDelBtn" + (questionIndex - 1)).attr("style", "display:none;cursor: pointer");
+		questionIndex = questionIndex + 1;
+	}
+
+	$(document).ready(function () {
+		//富文本框
+		ClassicEditor.create(document.querySelector('#discriptionEditor'), {
+			ckfinder: {
+				uploadUrl: '${caimeiCore}/tools/image/upload/ckeditor'
+			}
+		}).then(function (editor) {
+			window.discriptionEditor = editor;
+		}).catch(function (error) {
+			console.log(error);
+		});
+		ClassicEditor.create(document.querySelector('#advantageEditor'), {
+			ckfinder: {
+				uploadUrl: '${caimeiCore}/tools/image/upload/ckeditor'
+			}
+		}).then(function (editor) {
+			window.advantageEditor = editor;
+		}).catch(function (error) {
+			console.log(error);
+		});
+		ClassicEditor.create(document.querySelector('#disadvantageEditor'), {
+			ckfinder: {
+				uploadUrl: '${caimeiCore}/tools/image/upload/ckeditor'
+			}
+		}).then(function (editor) {
+			window.disadvantageEditor = editor;
+		}).catch(function (error) {
+			console.log(error);
+		});
+		ClassicEditor.create(document.querySelector('#principleEditor'), {
+			ckfinder: {
+				uploadUrl: '${caimeiCore}/tools/image/upload/ckeditor'
+			}
+		}).then(function (editor) {
+			window.principleEditor = editor;
+		}).catch(function (error) {
+			console.log(error);
+		});
+		ClassicEditor.create(document.querySelector('#adaptiveManEditor'), {
+			ckfinder: {
+				uploadUrl: '${caimeiCore}/tools/image/upload/ckeditor'
+			}
+		}).then(function (editor) {
+			window.adaptiveManEditor = editor;
+		}).catch(function (error) {
+			console.log(error);
+		});
+		ClassicEditor.create(document.querySelector('#unAdaptiveManEditor'), {
+			ckfinder: {
+				uploadUrl: '${caimeiCore}/tools/image/upload/ckeditor'
+			}
+		}).then(function (editor) {
+			window.unAdaptiveManEditor = editor;
+		}).catch(function (error) {
+			console.log(error);
+		});
+		ClassicEditor.create(document.querySelector('#aroundOperationEditor'), {
+			ckfinder: {
+				uploadUrl: '${caimeiCore}/tools/image/upload/ckeditor'
+			}
+		}).then(function (editor) {
+			window.aroundOperationEditor = editor;
+		}).catch(function (error) {
+			console.log(error);
+		});
+	});
+
+	//富文本框编辑
+	function checkInfo(){
+		var discription=discriptionEditor.getData();
+		var advantage=advantageEditor.getData();
+		var disadvantage=disadvantageEditor.getData();
+		var principle=principleEditor.getData();
+		var adaptiveMan=adaptiveManEditor.getData();
+		var unAdaptiveMan=unAdaptiveManEditor.getData();
+		var aroundOperation=aroundOperationEditor.getData();
+		$("#discription").val(discription);
+		$("#advantage").val(advantage);
+		$("#disadvantage").val(disadvantage);
+		$("#principle").val(principle);
+		$("#adaptiveMan").val(adaptiveMan);
+		$("#unAdaptiveMan").val(unAdaptiveMan);
+		$("#aroundOperation").val(aroundOperation);
+	}
+
+	/**
+	 * @param obj
+	 * jquery控制input只能输入数字
+	 */
+	function onlynum(obj) {
+		obj.value = obj.value.replace(/[^\d]/g, ""); //清除"数字"以外的字符
+	}
+</script>
 </body>
 </html>

+ 141 - 26
src/main/webapp/WEB-INF/views/modules/baike/cmBaikeProductList.jsp

@@ -7,6 +7,12 @@
 	<style type="text/css">
 		.table th{text-align: center;}
 		.table td{text-align: center;}
+		.topSelect{
+			width: 80px;
+			position: absolute;
+			right: 60px;
+			background-color: white;
+		}
 	</style>
 	<script type="text/javascript">
 		$(document).ready(function() {
@@ -22,30 +28,37 @@
 </head>
 <body>
 	<ul class="nav nav-tabs">
-		<li class="active"><a href="${ctx}/baike/cmBaikeProduct/">产品列表</a></li>
-		<li><a href="${ctx}/baike/cmBaikeProduct/form">产品添加</a></li>
+		<li class=${cmBaikeProduct.commodityType eq 1?"active":""}><a href="${ctx}/baike/cmBaikeProduct/?commodityType=1">产品</a></li>
+		<li class=${cmBaikeProduct.commodityType eq 2?"active":""}><a href="${ctx}/baike/cmBaikeProduct/?commodityType=2">仪器</a></li>
 	</ul>
 	<form:form id="searchForm" modelAttribute="cmBaikeProduct" action="${ctx}/baike/cmBaikeProduct/" method="post" class="breadcrumb form-search">
+		<form:hidden path="commodityType"/>
 		<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
 		<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
 		<div class="ul-form">
-			 <label>id:</label>
+			 <label>ID:</label>
 				<form:input path="id" htmlEscape="false" class="input-medium"/>
-			 <label>名称:</label>
+			 <label>${commodityType}名称:</label>
 				<form:input path="name" htmlEscape="false" maxlength="50" class="input-medium"/>
-			 <label>分类id:</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>${commodityType}分类:</label>
 				<form:select path="typeId" class="input-medium">
-					<form:option value="" label=" "/>
-					<form:options items="${fns:getDictList('')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+					<form:option value="" label="全部"/>
+					<form:options items="${typeList}" itemLabel="name" itemValue="id" htmlEscape="false"/>
 				</form:select>
-			 <label>置顶位:</label>
-				<form:input path="topPosition" htmlEscape="false" class="input-medium"/>
-			 <label>状态:0停用,1启用:</label>
+			 <label>状态:</label>
 				<form:select path="status" class="input-medium">
-					<form:option value="" label=" "/>
-					<form:options items="${fns:getDictList('')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+					<form:option value="" label="全部"/>
+					<form:option value="1" label="启用"/>
+					<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>
 			<div class="clearfix"></div>
 		</div>
 	</form:form>
@@ -53,32 +66,29 @@
 	<table id="contentTable" class="table table-striped table-bordered table-condensed">
 		<thead>
 			<tr>
-				<th>id</th>
-				<th>分类:1产品,2仪器</th>
-				<th>名称</th>
-				<th>发布时间</th>
+				<th>ID</th>
+				<th>${commodityType}名称</th>
+				<th>${commodityType}分类</th>
 				<th>基础浏览量</th>
 				<th>实际浏览量</th>
-				<th>置顶位</th>
-				<th>状态:0停用,1启用</th>
+				<th>首页置顶位</th>
+				<th>发布时间</th>
 				<th>添加时间</th>
+				<th>状态</th>
 				<th>操作</th>
 			</tr>
 		</thead>
 		<tbody>
-		<c:forEach items="${page.list}" var="cmBaikeProduct">
+		<c:forEach items="${page.list}" var="cmBaikeProduct" varStatus="index">
 			<tr>
-				<td><a href="${ctx}/baike/cmBaikeProduct/form?id=${cmBaikeProduct.id}">
-					${cmBaikeProduct.id}
-				</a></td>
 				<td>
-					${cmBaikeProduct.classify}
+					${cmBaikeProduct.id}
 				</td>
 				<td>
 					${cmBaikeProduct.name}
 				</td>
 				<td>
-					<fmt:formatDate value="${cmBaikeProduct.publishTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+					${cmBaikeProduct.typeName}
 				</td>
 				<td>
 					${cmBaikeProduct.basePv}
@@ -87,22 +97,127 @@
 					${cmBaikeProduct.actualPv}
 				</td>
 				<td>
-					${cmBaikeProduct.topPosition}
+					${cmBaikeProduct.topPosition eq 1?'第一位':cmBaikeProduct.topPosition eq 2?'第二位':cmBaikeProduct.topPosition eq 3?'第三位':''}
 				</td>
 				<td>
-					${fns:getDictLabel(cmBaikeProduct.status, '', '')}
+					<fmt:formatDate value="${cmBaikeProduct.publishTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
 				</td>
 				<td>
 					<fmt:formatDate value="${cmBaikeProduct.addTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
 				</td>
 				<td>
+					<c:if test="${cmBaikeProduct.status eq 1 }">
+						<font color="green">已启用</font>
+						<a href="javascript:void(0);" onclick="updateStatus(0,${cmBaikeProduct.id});" >
+							停用
+						</a>
+					</c:if>
+					<c:if test="${cmBaikeProduct.status ne 1 }">
+						<font color="red">已停用</font>
+						<a href="javascript:void(0)" onclick="updateStatus(1,${cmBaikeProduct.id});">
+							启用
+						</a>
+					</c:if>
+				</td>
+				<td>
+					<a href="javascript:;">查看</a>
     				<a href="${ctx}/baike/cmBaikeProduct/form?id=${cmBaikeProduct.id}">编辑</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>
 				</td>
 			</tr>
 		</c:forEach>
 		</tbody>
 	</table>
 	<div class="pagination">${page}</div>
+<script type="text/javascript">
+	function updateStatus(status, productId) {
+		var commodityType = ${commodityType}
+		var msg='确定启用该'+commodityType+'吗?';
+		if(0==status) {
+			msg = '确定停用该'+commodityType+'吗?';
+		}
+		top.$.jBox.confirm(msg,'系统提示',function(v,h,f){
+			if(v=='ok'){
+				$.post("${ctx}/baike/cmBaikeProduct/updateStatus",{'status':status,'productId':productId}, function(data) {
+					if(true==data.success){
+						$.jBox.tip(data.msg, 'cmBaikeProduct');
+					} else {
+						$.jBox.tip(data.msg,'error');
+					}
+					setTimeout(function () {
+						$("#searchForm").submit();
+					},1000)
+				},"JSON");//这里返回的类型有:json,html,xml,text
+			}
+			return;
+		},{buttonsFocus:1,persistent: true});
+	}
+
+	//展示置顶选项
+	function showTopSelect(index,status) {
+		debugger
+		if ('open' == status) {
+			document.getElementById("topSelect" + index).style.cssText = "display:block";
+		}else if ('close' == status) {
+			document.getElementById("topSelect" + index).style.cssText = "display:none";
+		}
+	}
+
+	//更新置顶
+	function updateTopPosition(topPosition,id,type) {
+		var msg = '';
+		if ('setTopPosition' == type) {
+			msg = '确认置顶该文章吗?';
+			//已有的置顶文章数量
+			var topLength = ${topLength};
+			if (topPosition - 1 > topLength) {
+				var emptyPosition = topLength == 0 ? '一' : '二' ;
+				msg = '由于当前没有第'+ emptyPosition +'位的置顶文章,将直接把该条文章置顶为第'+emptyPosition+'位';
+				topPosition = topLength == 0 ? 1 : topLength == 1 ? 2 : topLength == 2 ? 3 : topLength == 3 ? 4 : 5;
+			}
+		}
+		if ('clearTopPosition' == type) {
+			msg = '确认清除该条数据的置顶位吗?清除后这条数据将不会在商城首页展示';
+		}
+		top.$.jBox.confirm(msg, '系统提示', function (v, h, f) {
+			if (v == 'ok') {
+				$.post("${ctx}/baike/cmBaikeProduct/updateTopPosition", {
+					'topPosition': topPosition,
+					'id': id,
+					'type':type
+				}, function (data) {
+					if (true == data.success) {
+						$.jBox.tip(data.msg, 'info');
+					} else {
+						$.jBox.tip(data.msg, 'error');
+					}
+					setTimeout(function () {
+						$("#searchForm").submit();
+					},800)
+				}, "JSON");//这里返回的类型有:json,html,xml,text
+			}
+			return;
+		}, {buttonsFocus: 1, persistent: true});
+	}
+</script>
 </body>
 </html>