Procházet zdrojové kódy

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

huangzhiguo před 2 roky
rodič
revize
5b60650bad

+ 47 - 0
src/main/java/com/caimei/modules/archive/utils/keyTask.java

@@ -0,0 +1,47 @@
+//package com.caimei.modules.archive.utils;
+//
+//import com.alibaba.fastjson.JSONObject;
+//import com.caimei.modules.product.dao.KeywordFrequencyDao;
+//import com.caimei.modules.product.entity.SearchFrequency;
+//import com.caimei.modules.product.entity.SearchFrequencyVo;
+//import com.caimei.modules.product.service.RedisServiceCom;
+//import lombok.AllArgsConstructor;
+//import lombok.NoArgsConstructor;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.scheduling.annotation.EnableScheduling;
+//import org.springframework.scheduling.annotation.Scheduled;
+//
+//import java.util.List;
+//
+//@Slf4j
+//@Configuration
+//@EnableScheduling
+//@NoArgsConstructor
+//@AllArgsConstructor
+///**
+// * 获取已加入关键词库的关键词进行缓存
+// */
+//public class keyTask {
+//    @Autowired
+//    private KeywordFrequencyDao keywordFrequencyDao;
+//
+//    @Autowired
+//    private RedisServiceCom redisService;
+//    @Scheduled(cron = "0 0 2 0/15 * ? ")
+//    public void keyCache(){
+//        //查询已加入关键词库的关键词
+//        List<SearchFrequencyVo> keywordList=keywordFrequencyDao.getKeywordList();
+//        for (SearchFrequencyVo searchFrequency:keywordList) {
+//            String str=searchFrequency.getKeyword();
+//            String key="";
+//            for(int i=0;i<str.length();i++){
+//                key+=str.charAt(i);
+//                List<SearchFrequencyVo> searchFrequencyVos = keywordFrequencyDao.getvalueList(key);
+//                String keyword = JSONObject.toJSONString(searchFrequencyVos);//有值的字段才转
+//                redisService.set(key,keyword,60L * 60 * 24 * 30);
+//            }
+//        }
+//    }
+//}

+ 108 - 0
src/main/java/com/caimei/modules/baike/entity/CmBaikeReferenceInfo.java

@@ -0,0 +1,108 @@
+package com.caimei.modules.baike.entity;
+
+import lombok.Data;
+
+import java.sql.Timestamp;
+
+@Data
+public class CmBaikeReferenceInfo {
+    private Integer id;
+    /**
+     * 参考类型资料(1.网络;2.著作;3.其他)
+     */
+    private Integer referenceType;
+    /**
+     * 网址
+     */
+    private String website;
+    /**
+     * 文章名字
+     */
+    private String articleName;
+    /**
+     * 网址名称
+     */
+    private String websiteName;
+    /**
+     * 发表时间
+     */
+    private Timestamp publishTime;
+
+    /**
+     * 发表时间
+     */
+    private String publishTimeStr;
+
+    /**
+     * 引文时间
+     */
+    private Timestamp acitationTime;
+
+    /**
+     * 引文时间
+     */
+    private String acitationTimeStr;
+    /**
+    /**
+     * 作者
+     */
+    private String author;
+    /**
+     * 著作名
+     */
+    private String workName;
+    /**
+     * 出版地
+     */
+    private String publicationPlace;
+    /**
+     * 出版社
+     */
+    private String press;
+    /**
+     * 出版年
+     */
+    private Timestamp publicationYear;
+
+    /**
+     * 出版年
+     */
+    private String publicationYearStr;
+    /**
+     * 引文页码
+     */
+    private String acitationWeb;
+    /**
+     * 参考资料说明
+     */
+    private String referenceDescription;
+    /**
+     * 图片描述
+     */
+    private String imageDescription;
+    /**
+     * 图片地址
+     */
+    private String imageUrl;
+    /**
+     * 词条id
+     */
+    private Integer productId;
+    /**
+     * 词条内容(1:义项名;2:词条概述;3:信息栏;4:正文)
+     */
+    private String productType;
+    /**
+     * 1:添加;2编辑
+     */
+    private String flagId;
+    /**
+     * 资料id用于前端传值修改
+     */
+    private String  zlId;
+
+    /**
+     * 关联id
+     */
+    private String ctrlId;
+}

+ 32 - 0
src/main/java/com/caimei/modules/baike/entity/CmBaikeTextInfo.java

@@ -0,0 +1,32 @@
+package com.caimei.modules.baike.entity;
+
+import lombok.Data;
+
+@Data
+public class CmBaikeTextInfo {
+    private Integer id;
+    /**
+     * 信息类型(1:定义;2:原理;3:特点;4:应用)
+     */
+    private Integer textType;
+    /**
+     * 目录内容
+     */
+    private String dictionaryContent;
+    /**
+     * 词条id
+     */
+    private String productId;
+    /**
+     * 参考资料id
+     */
+    private Integer referenceId;
+    /**
+     * 父级id
+     */
+    private Integer parentId;
+    /**
+     * 目录类型(1:一级目录;2:二级目录;3:内容
+     */
+    private Integer dictionaryType;
+}

+ 2361 - 0
src/main/webapp/WEB-INF/views/modules/baikePage/cmBaikeProductForm.old.jsp

@@ -0,0 +1,2361 @@
+<%@ 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>
+		.controls.not-overflow{
+			overflow: initial !important;
+		}
+		.content-edit{
+			position: relative;
+			width: 100%;
+			z-index: 10;
+		}
+		.content-edit .bk-input{
+			line-height: 30px;
+			border: 1px solid #ddd;
+			box-sizing: border-box;
+			padding: 0 16px;
+			border-radius: 4px;
+			font-size: 16px;
+		}
+		.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;
+		}
+		.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;
+		}
+		.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;
+		}
+		.content-edit .bk-literature li{
+			list-style-type: none;
+			padding: 8px 16px;
+			display: flex;
+			justify-content: space-between;
+		}
+		.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;
+		}
+	</style>
+	<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;
+		}
+		.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: 80;
+			display: none;
+
+		}
+
+		.opacity { /*遮罩浑浊处理*/
+			opacity: 0.3;
+			filter: alpha(opacity=30);
+			background-color: #000;
+		}
+
+		.box {
+			overflow: hidden;
+			position: absolute;
+			width: 55%;
+			height: 60%;
+			z-index: 100; /*值越大,和其他层层叠时越在上面*/
+			left: 20%;
+			top: 15%;
+			background-color: #fff;
+			border: 1px solid rgb(0, 153, 153);
+		}
+		.ckzl {
+			overflow: hidden;
+			position: absolute;
+			width: 60%;
+			height: 80%;
+			z-index: 100; /*值越大,和其他层层叠时越在上面*/
+			left: 20%;
+			top: 15%;
+			background-color: #fff;
+			border: 1px solid rgb(0, 153, 153);
+		}
+
+		.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);
+		}
+
+		.logcontent {
+			padding: 10px;
+		}
+		.pla::-webkit-input-placeholder{
+			color: green;
+		}
+	</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';
+
+		}
+		function removeZl(){
+			document.getElementById("zl").style.display='none';
+			document.getElementById("yyzl").style.display='block';
+
+		}
+		//不同资料显示不同的内容
+		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() {
+			//添加词条时弹出创建词条须知窗口
+			<%--window.showModalDialog("${ctx}/baike/cmBaikeProduct/entry",'window','dialogWidth:504px;dialogHeight:310px;status:no;help:no;scroll:no;status:0;help:0;scroll:0;');--%>
+            <%--window.open("${ctx}/baike/cmBaikeProduct/entry", "window","height=100, width=400,toolbar=yes,menubar=yes,scrollbars=yes,resizable=yes, location=yes,status=yes");--%>
+			//$("#name").focus();
+			<c:forEach items="${materialInfo}" var="videoFile" varStatus="statusIndex">
+			  var productType=""+${videoFile.productType};
+				if(productType.indexOf("1")>-1){
+					var n=${statusIndex.index}+1;
+                    var h="";
+					if(n==1){
+						h="①";
+					}else if(n==2){
+						h="②";
+
+					}else if(n==3){
+						h="③";
+
+					}else if(n==4){
+						h="④";
+
+					}else if(n==5){
+						h="⑤";
+
+					}else if(n==6){
+						h="⑥";
+
+					}else if(n==7){
+						h="⑦";
+
+					}else if(n==8){
+						h="⑧";
+					}
+					// document.getElementById("yixiandiv").innerHTML=h;
+					// document.getElementById("yixiandiv").style.display='block';
+				}
+			</c:forEach>
+			var flag=document.getElementById("createEntryGuidance").innerHTML;
+            if('添加'==flag){
+					showlog_result(null,null);
+					}
+			$("#inputForm").validate({
+				submitHandler: function(form){
+					var status = $("input[name='status']:checked").val();
+					var commodityType = $("#commodityType").val();
+					// 计算空数据条数
+					var propertyArr = [];
+					var name = $("#name").val();
+					var alias = $("#alias").val();
+					var discription = $("#discription").val();
+					var shopId = $("#shopId").val();
+					// var productLink = $("#productLink").val();
+					var image = $("#image").val();
+					var authLink = $("#authLink").val();
+					var authQrCode = $("#authQrCode").val();
+					var param0 = $('input[name="paramList[0].name"]').val();
+					// var advantage = $("#advantage").val();
+					// var disadvantage = $("#disadvantage").val();
+					// var principle = $("#principle").val();
+					var seoKeyword = $("#seoKeyword").val();
+					// var brand = $("#brand").val();
+					// var producePlace = $("#producePlace").val();
+					// var marketYear = $("#marketYear").val();
+					var company = $("#company").val();
+					// var nmpaYear = $("#nmpaYear").val();
+					// var authImage0 = $("#authImage0").val();
+					// var adaptiveMan = $("#adaptiveMan").val();
+					// var unAdaptiveMan = $("#unAdaptiveMan").val();
+					// var aroundOperation = $("#aroundOperation").val();
+					// var displayImage0 = $("#displayImage0").val();
+					// var question0 = $('input[name="questionList[0].question"]').val();
+					var publishTime = $('input[name="publishTime"]').val();
+					var basePv = $("#basePv").val();
+					var typeId = $("#typeId").val();
+					propertyArr[0] = name;
+					propertyArr[1] = alias;
+					propertyArr[2] = discription;
+					// propertyArr[3] = shopId;
+					// propertyArr[4] = productLink;
+					propertyArr[3] = param0;
+					// propertyArr[6] = advantage;
+					// propertyArr[7] = disadvantage;
+					// propertyArr[8] = principle;
+					propertyArr[4] = seoKeyword;
+					// propertyArr[10] = brand;
+					// propertyArr[11] = producePlace;
+					// propertyArr[12] = marketYear;
+					propertyArr[5] = company;
+					// propertyArr[14] = nmpaYear;
+					// propertyArr[15] = authImage0;
+					// propertyArr[16] = adaptiveMan;
+					// propertyArr[17] = unAdaptiveMan;
+					// propertyArr[18] = aroundOperation;
+					// propertyArr[19] = displayImage0;
+					// propertyArr[6] = question0;
+					propertyArr[6] = publishTime;
+					propertyArr[7] = basePv;
+					propertyArr[8] = typeId;
+					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}">采美词条</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><input type="button" onclick="digCk()" value="参考资料"></div>
+	<div id="dialogmask" class="dialogmask opacity"></div>
+	<div id="dig" class="ckzl" style="display: none"> 
+		<div id="dig_content" class="digcontent">
+			<div>
+				<a onclick="addZl()">添加参考资料</a>
+				<a onclick="removeZl()">引用已有资料</a>
+			</div>
+			<%--已有资料--%>
+			<div class="control-group" id="yyzl" style="display: none">
+				<label class="control-label titleClass">参考资料</label>
+				<c:forEach items="${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}]</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" style="margin-top: 5px">
+							<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" style="margin-top: 5px">
+							<span class="del">[${statusIndex.index}]</span>
+							<span class="del">${videoFile.referenceDescription}(参考资料说明)</span>
+							<span class="del">${videoFile.imageDescription}(图片描述)</span>
+							<div class="conList">
+									<%--							onclick="imgSizeChange()"--%>
+								<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 id="zl" style="margin-top: 10px">
+			<div class="control-group" style="margin-left: 100px">
+				<label id="" class="red">*</label>
+				<label class="control-label">参考资料类型:</label>
+				<select id="info" style="margin-left: 20px" 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" style="margin-left: 100px;margin-top: 30px">
+				<label id="" class="red">*</label>
+				<label class="control-label keyClass">输入网址:</label>
+				<input id="website" style="margin-left: 45px" htmlEscape="false" class="input-xlarge " placeholder="请以http(s)开头"/>
+			</div>
+			<div class="control-group" style="margin-left: 100px;margin-top: 30px">
+				<label id="" class="red">*</label>
+				<label class="control-label keyClass">文章名字:</label>
+				<input id="articleName" style="margin-left: 45px" htmlEscape="false" class="input-xlarge " placeholder="请输入文章名字"/>
+			</div>
+			<div class="control-group" style="margin-left: 100px;margin-top: 30px">
+				<label id="" class="red">*</label>
+				<label class="control-label keyClass">网站名称:</label>
+					<input  id="websiteName" style="margin-left: 45px" htmlEscape="false" class="input-xlarge " placeholder="请输入网站名称 如:新华网"/>
+			</div>
+			<div class="control-group" style="margin-left: 100px;margin-top: 30px">
+				<label class="control-label keyClass">发表日期:</label>
+					<input id="publishTimeStr" name="publishTime" style="margin-left: 55px" 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});"/>
+			</div>
+			<div class="control-group" style="margin-left: 100px;margin-top: 30px">
+				<label class="control-label keyClass">引文日期:</label>
+					<input id="acitationTimeStr" name="publishTime" style="margin-left: 55px" 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});"/>
+			</div>
+			<div class="form-actions" align="center">
+				<%--			onclick="checkInfo()"--%>
+				<input id="" onclick="saveInfo()" class="btn btn-primary" type="submit" value="确 定"/>&nbsp;
+				<input id="" class="btn" type="button" value="取 消" onclick="cantral()"/>
+			</div>
+			</div>
+            <%--著作资料--%>
+			<div class="zzzl" style="display: none" id="zzzl">
+				<div class="control-group" style="margin-left: 100px;margin-top: 30px">
+					<label id="" class="red">*</label>
+					<label class="control-label keyClass">作者:</label>
+					<input id="author" style="margin-left: 70px" htmlEscape="false" class="input-xlarge " placeholder="请输入作者名称 多个作者使用英文都好隔开"/>
+				</div>
+				<div class="control-group" style="margin-left: 100px;margin-top: 30px">
+					<label id="" class="red">*</label>
+					<label class="control-label keyClass">著作名:</label>
+					<input id="workName" style="margin-left: 60px" htmlEscape="false" class="input-xlarge " placeholder="请输入著作名"/>
+				</div>
+				<div class="control-group" style="margin-left: 100px;margin-top: 30px">
+					<label class="control-label keyClass">出版地:</label>
+					<input id="publicationPlace" style="margin-left: 70px" htmlEscape="false" class="input-xlarge " placeholder="请输入出版地信息"/>
+				</div>
+				<div class="control-group" style="margin-left: 100px;margin-top: 30px">
+					<label id="" class="red">*</label>
+					<label class="control-label keyClass">出版社:</label>
+					<input id="press" style="margin-left: 60px" htmlEscape="false" class="input-xlarge " placeholder="请输入出版社名称"/>
+				</div>
+				<div class="control-group" style="margin-left: 100px;margin-top: 30px">
+					<label class="control-label keyClass">出版年:</label>
+					<input id="publicationYearStr" name="publishTime" style="margin-left: 65px" 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});"/>
+				</div>
+				<div class="control-group" style="margin-left: 100px;margin-top: 30px">
+					<label class="control-label keyClass">引文编码:</label>
+					<input id="acitationWeb" style="margin-left: 60px" htmlEscape="false" class="input-xlarge " placeholder="请输入引用著作的页码 如 100 121"/>
+				</div>
+				<div class="form-actions" align="center">
+					<%--			onclick="checkInfo()"--%>
+					<input id="" onclick="saveInfo()" class="btn btn-primary" type="submit" value="确 定"/>&nbsp;
+					<input id="" class="btn" type="button" value="取 消" onclick="cantral()"/>
+				</div>
+			</div>
+			<%--其他资料--%>
+			<div class="qtzl" style="display:none;" id="qtzl">
+				<div class="control-group" style="margin-left: 20px">
+					<label id="" 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 style="margin-left: 150px">其他类型参考资料,填写格式请参阅<a href="">《信息与文献 参考文献著录规则 GB/T 7714-2015》</a></label>
+				</div>
+				<div class="control-group" style="margin-left: 20px">
+					<label class="control-label keyClass">图片描述:</label>
+					<input id="imageDescription" style="margin-left: 45px" htmlEscape="false" class="input-xlarge " placeholder="请输入其他参考资料的具体描述"/>
+				</div>
+				<div class="control-group" style="margin-top: 28px">
+					<label class="control-label">图片上传:</label>
+					<div class="main-image-list" style="display: flex;flex-wrap: wrap">
+						<div class="controls upload-content iconBox mainImageBox" id="mainImageBox">
+							<div class="conList">
+								<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">请上传引用的图片资源,需同时上传资料的封面、以及含有对应具体内容的图片;注意:图片需要保证完整、不可遮挡且清晰</label>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="form-actions" align="center">
+					<%--			onclick="checkInfo()"--%>
+					<input id="" onclick="saveInfo()" class="btn btn-primary" type="submit" value="确 定"/>&nbsp;
+					<input id="" class="btn" type="button" value="取 消" onclick="cantral()"/>
+				</div>
+			</div>
+			</div>
+		</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">编辑须知</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>
+
+	<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" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="fileIds"/>
+		<form:hidden path="commodityType"/>
+		<form:hidden path="emptyNum"/>
+		<sys:message content="${message}"/>
+<%--		<div class="control-group">--%>
+<%--			<label class="control-label titleClass">${commodityType}简述</label>--%>
+<%--		</div>--%>
+		<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>
+		<div class="control-group">
+			<label class="control-label">义项名:</label>
+			<div class="controls not-overflow">
+				<div class="content-edit" id="bk-name">
+					<div class="bk-toolbar">[&nbsp;|&nbsp;]</div>
+					<div class="bk-bubble">1</div>
+					<div class="bk-input" contenteditable="true"></div>
+					<ul class="bk-literature">
+						<li>
+							<div class="bk-content">参考资料1</div>
+							<div class="bk-control">
+								<span class="bk-edit">编辑</span>
+								<span class="bk-delete">删除</span>
+							</div>
+						</li>
+					</ul>
+				</div>
+			</div>
+		</div>
+		<div class="control-group">
+			<label class="control-label">词条概述:</label>
+			<div class="controls" style="width:812px">
+                <textarea type="text" id="discription" name="discription" style="position: relative;height: 100px; width: 450px;" maxlength="50" >${cmBaikeProduct.discription}</textarea>
+                <label id="discriptionSensitiveWords" class="red"></label>
+            </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>--%>
+<%--		<div class="control-group" style="position: relative">--%>
+<%--			<label class="control-label">${commodityType}链接:</label>--%>
+<%--			<div class="controls">--%>
+<%--				<form:input path="productLink" htmlEscape="false" class="input-xxlarge " placeholder="输入采美商城的相关商品详情链接,便于用户精准找到"/>--%>
+<%--                <label id="productLinkSensitiveWords" class="red"></label>--%>
+<%--			</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: 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 "/>
+							<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 "/>
+							<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 keyClass">相关视频(各视频大小不超过50M,最多上传6个)</label>
+			</div>
+			<div class="control-group">
+				<label class="control-label">标题:</label>
+				<div class="controls">
+					<input id="fileTitle" style="width: 457px" htmlEscape="false" >
+				</div>
+				<label class="control-label" style="margin-top:10px">视频路径:</label>
+				<div class="controls" style="margin-top:10px">
+					<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">
+				<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>
+<%--		${cmBaikeProduct.commodityType eq 2?'':}--%>
+        <div style="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">
+                    <form:input path="authLink" htmlEscape="false" class="input-xxlarge " cssStyle="position: relative"/>
+                    <label id="authLinkSensitiveWords" class="red"></label>
+                </div>
+            </div>
+			<div class="control-group">
+				<label class="control-label">认证二维码:</label>
+				<div class="auth-qrCode-list" style="display: flex;flex-wrap: wrap">
+					<div class="controls upload-content iconBox authQrCodeBox" id="authQrCodeBox">
+						<div class="conList">
+							<form:hidden id="authQrCode" path="authQrCode" htmlEscape="false" maxlength="255" class="input-xlarge "/>
+							<sys:ckfinder input="authQrCode" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100"
+										  maxHeight="100"/>
+							<br>
+							<label style="margin-left: 150px">建议图片尺寸210px*210px,并上传白底图片</label>
+						</div>
+					</div>
+				</div>
+			</div>
+        </div>
+		<div class="control-group paramList">
+			<label class="control-label titleClass">信息栏:</label>
+			<label>(注:未填写的信息将不会显示在词条页上)</label>
+			<div class="controls paramRow" id="paramRow0">
+				<input id="name[0]" name="paramList[0].name" htmlEscape="false" class="input-small "
+					   placeholder="例如:型号" onblur="readflag(0)">
+                <label id="param0SensitiveWords" class="red"></label>
+				<input id="content[0]" name="paramList[0].content" htmlEscape="false" class="input-xlarge "
+					   placeholder="请输入内容" readonly>
+                <label id="content0SensitiveWords" class="red"></label>
+			</div>
+			<div class="controls paramRow" id="paramRow1">
+				<input id="name[1]" name="paramList[1].name" htmlEscape="false" class="input-small "
+					   placeholder="例如:性质类型" onblur="readflag(1)">
+                <label id="param1SensitiveWords" class="red"></label>
+				<input id="content[1]" name="paramList[1].content" htmlEscape="false" class="input-xlarge "
+					   placeholder="请输入内容" readonly>
+                <label id="content1SensitiveWords" class="red"></label>
+				<a onclick="deleteParam(1)" style="cursor: pointer">删除</a>
+			</div>
+			<div class="controls paramRow" id="paramRow2">
+				<input id="name[2]" name="paramList[2].name" htmlEscape="false" class="input-small "
+					   placeholder="例如:成分" onblur="readflag(2)">
+                <label id="param2SensitiveWords" class="red"></label>
+				<input id="content[2]" name="paramList[2].content" htmlEscape="false" class="input-xlarge "
+					   placeholder="请输入内容" readonly>
+                <label id="content2SensitiveWords" class="red"></label>
+				<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 "--%>
+<%--					   placeholder="例如:规格">--%>
+<%--                <label id="param3SensitiveWords" class="red"></label>--%>
+<%--				<input name="paramList[3].content" htmlEscape="false" class="input-xlarge "--%>
+<%--					   placeholder="输入参数信息">--%>
+<%--                <label id="content3SensitiveWords" class="red"></label>--%>
+<%--				<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 "--%>
+<%--					   placeholder="例如:性质类型">--%>
+<%--                <label id="param4SensitiveWords" class="red"></label>--%>
+<%--				<input name="paramList[4].content" htmlEscape="false" class="input-xlarge "--%>
+<%--					   placeholder="输入参数信息">--%>
+<%--                <label id="content4SensitiveWords" class="red"></label>--%>
+<%--				<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 "--%>
+<%--					   placeholder="例如:性质类型">--%>
+<%--                <label id="param5SensitiveWords" class="red"></label>--%>
+<%--				<input name="paramList[5].content" htmlEscape="false" class="input-xlarge "--%>
+<%--					   placeholder="输入参数信息">--%>
+<%--                <label id="content5SensitiveWords" class="red"></label>--%>
+<%--				<a onclick="deleteParam(5)" style="cursor: pointer">删除</a>--%>
+<%--			</div>--%>
+		</div>
+		<div class="control-group"><button class="btn btn-primary" type="button" style="margin-left: 500px" onclick="addParam()">增加信息项</button></div>
+		<div class="control-group paramListall">
+			<label class="control-label titleClass">正文:</label><hr>
+			<div class="control-group">
+				<label class="control-label">定义:</label>
+				<div class="controls definitionyi0">
+					<input  name="textInfo[0].textType" value ="1" type="hidden"/>
+					<input  id="dy1" htmlEscape="false" name="textInfo[0].dictionaryContent" class="input-xlarge pla" placeholder="(定义)一级目录"/>
+					<button class="btn btn-primary" id="yidefinitionyi" type="button" style="margin-left: 10px" onclick="addDiction('definitionyi',0,'一级目录')">一级目录</button>
+					<button class="btn btn-primary" id="erdefinitionyi" type="button" style="margin-left: 10px" onclick="addDiction('definitionyi',0,'二级目录')">二级目录</button>
+					<button class="btn btn-primary" id="sandefinitionyi" type="button" style="margin-left: 10px" onclick="addDiction('definitionyi',0,'内容')">内容</button>
+				</div>
+				<div class="controls definitioner0" style="margin-top: 5px">
+					<input  id="dy2"  htmlEscape="false" name="textInfo[1].dictionaryContent" class="input-xlarge pla" placeholder="(定义)二级目录"/>
+					<button class="btn btn-primary" id="yidefinitioner" type="button" style="margin-left: 10px" onclick="addDiction('definitioner',0,'一级目录')">一级目录</button>
+					<button class="btn btn-primary" id="erdefinitioner" type="button" style="margin-left: 10px" onclick="addDiction('definitioner',0,'二级目录')">二级目录</button>
+					<button class="btn btn-primary" id="sandefinitioner" type="button" style="margin-left: 10px" onclick="addDiction('definitioner',0,'内容')">内容</button>
+				</div>
+				<div class="controls definitionsan0" style="margin-top: 5px">
+					<textarea id="dy3"  class="pla" name="textInfo[2].dictionaryContent" placeholder="(定义)内容" type="text" style="position: relative;height: 100px; width: 450px;"  ></textarea>
+					<button class="btn btn-primary" id="yidefinitionsan" type="button" style="margin-left: 10px" onclick="addDiction('definitionsan',0,'一级目录')">一级目录</button>
+					<button class="btn btn-primary" id="erdefinitionsan" type="button" style="margin-left: 10px" onclick="addDiction('definitionsan',0,'二级目录')">二级目录</button>
+					<button class="btn btn-primary" id="sandefinitionsan" type="button" style="margin-left: 10px" onclick="addDiction('definitionsan',0,'内容')">内容</button>
+				</div>
+			</div>
+			<div class="control-group">
+				<label class="control-label">原理:</label>
+				<div class="controls principleyi">
+					<input id="yl1"  htmlEscape="false" name="textInfo[4].dictionaryContent" class="input-xlarge pla" placeholder="(原理)一级目录"/>
+					<button class="btn btn-primary" id="yiprincipleyi" type="button" style="margin-left: 10px" onclick="addDiction(2,'一级目录','principleyi',0,0,this.id)">一级目录</button>
+					<button class="btn btn-primary" id="erprincipleyi" type="button" style="margin-left: 10px" onclick="addDiction(2,'二级目录','principleyi',1,0,this.id)">二级目录</button>
+					<button class="btn btn-primary" id="sanprincipleyi" type="button" style="margin-left: 10px" onclick="addDiction(2,'内容','principleyi',2,0,this.id)">内容</button>
+
+				</div>
+				<div class="controls principleer" style="margin-top: 5px">
+					<input id="yl2"  htmlEscape="false" name="textInfo[5].dictionaryContent"  class="input-xlarge pla" placeholder="(原理)二级目录"/>
+					<button class="btn btn-primary" id="yiprincipleer" type="button" style="margin-left: 10px" onclick="addDiction(2,'一级目录','principleer',0,0,this.id)">一级目录</button>
+					<button class="btn btn-primary" id="erprincipleer" type="button" style="margin-left: 10px" onclick="addDiction(2,'二级目录','principleer',1,0,this.id)">二级目录</button>
+					<button class="btn btn-primary" id="sanprincipleer" type="button" style="margin-left: 10px" onclick="addDiction(2,'内容','principleer',2,0,this.id)">内容</button>
+				</div>
+				<div class="controls principlesan" style="margin-top: 5px">
+					<textarea id="yl3" class="pla" name="textInfo[6].dictionaryContent"  placeholder="(原理)内容" type="text" style="position: relative;height: 100px; width: 450px;"  ></textarea>
+					<button class="btn btn-primary" id="yiprinciplesan" type="button" style="margin-left: 10px" onclick="addDiction(2,'一级目录','principlesan',0,0,this.id)">一级目录</button>
+					<button class="btn btn-primary" id="erprinciplesan" type="button" style="margin-left: 10px" onclick="addDiction(2,'二级目录','principlesan',1,0,this.id)">二级目录</button>
+					<button class="btn btn-primary" id="sanprinciplesan" type="button" style="margin-left: 10px" onclick="addDiction(2,'内容','principlesan',2,0,this.id)">内容</button>
+				</div>
+			</div>
+
+			<div class="control-group">
+				<label class="control-label">特点:</label>
+				<div class="controls characteristicyi">
+					<input id="td1"  htmlEscape="false" name="textInfo[7].dictionaryContent" class="input-xlarge pla" placeholder="(特点)一级目录"/>
+					<button class="btn btn-primary" id="yicharacteristicyi" type="button" style="margin-left: 10px" onclick="addDiction(3,'一级目录','characteristicyi',0,0,this.id)">一级目录</button>
+					<button class="btn btn-primary" id="ercharacteristicyi" type="button" style="margin-left: 10px" onclick="addDiction(3,'二级目录','characteristicyi',1,0,this.id)">二级目录</button>
+					<button class="btn btn-primary" id="sancharacteristicyi" type="button" style="margin-left: 10px" onclick="addDiction(3,'内容','characteristicyi',2,0,this.id)">内容</button>
+
+				</div>
+				<div class="controls characteristicer" style="margin-top: 5px">
+					<input  id="td2"  htmlEscape="false" name="textInfo[8].dictionaryContent" class="input-xlarge pla" placeholder="(特点)二级目录"/>
+					<button class="btn btn-primary" id="yicharacteristicer" type="button" style="margin-left: 10px" onclick="addDiction(3,'一级目录','characteristicer',0,0,this.id)">一级目录</button>
+					<button class="btn btn-primary" id="ercharacteristicer" type="button" style="margin-left: 10px" onclick="addDiction(3,'二级目录','characteristicer',1,0,this.id)">二级目录</button>
+					<button class="btn btn-primary" id="sancharacteristicer" type="button" style="margin-left: 10px" onclick="addDiction(3,'内容','characteristicer',2,0,this.id)">内容</button>
+				</div>
+				<div class="controls characteristicsan" style="margin-top: 5px">
+					<textarea id="td3"   class="pla" name="textInfo[9].dictionaryContent" placeholder="(特点)内容" type="text" style="position: relative;height: 100px; width: 450px;"  ></textarea>
+					<label id="3" class="red"></label>
+					<button class="btn btn-primary" id="yicharacteristicsan" type="button" style="margin-left: 10px" onclick="addDiction(3,'一级目录','characteristicsan',0,0,this.id)">一级目录</button>
+					<button class="btn btn-primary" id="ercharacteristicsan" type="button" style="margin-left: 10px" onclick="addDiction(3,'二级目录','characteristicsan',1,0,this.id)">二级目录</button>
+					<button class="btn btn-primary" id="sancharacteristicsan" type="button" style="margin-left: 10px" onclick="addDiction(3,'内容','characteristicsan',2,0,this.id)">内容</button>
+				</div>
+			</div>
+
+			<div class="control-group">
+				<label class="control-label">应用:</label>
+				<div class="controls applicationyi">
+					<input  id="yy1"  htmlEscape="false" name="textInfo[10].dictionaryContent" class="input-xlarge pla" placeholder="(应用)一级目录"/>
+					<button class="btn btn-primary" id="yiapplicationyi" type="button" style="margin-left: 10px" onclick="addDiction(4,'一级目录','applicationyi',0,0,this.id)">一级目录</button>
+					<button class="btn btn-primary" id="erapplicationyi" type="button" style="margin-left: 10px" onclick="addDiction(4,'二级目录','applicationyi',1,0,this.id)">二级目录</button>
+					<button class="btn btn-primary" id="sanapplicationyi" type="button" style="margin-left: 10px" onclick="addDiction(4,'内容','applicationyi',2,0,this.id)">内容</button>
+
+				</div>
+				<div class="controls applicationer" style="margin-top: 5px">
+					<input  id="yy2"  htmlEscape="false" name="textInfo[11].dictionaryContent" class="input-xlarge pla" placeholder="(应用)二级目录"/>
+					<button class="btn btn-primary" id="yiapplicationer" type="button" style="margin-left: 10px" onclick="addDiction(4,'一级目录','applicationer',0,0,this.id)">一级目录</button>
+					<button class="btn btn-primary" id="erapplicationer" type="button" style="margin-left: 10px" onclick="addDiction(4,'二级目录','applicationer',1,0,this.id)">二级目录</button>
+					<button class="btn btn-primary" id="sanapplicationer" type="button" style="margin-left: 10px" onclick="addDiction(4,'内容','applicationer',2,0,this.id)">内容</button>
+				</div>
+				<div class="controls applicationsan" style="margin-top: 5px">
+					<textarea id="yy3"  class="pla" name="textInfo[12].dictionaryContent" placeholder="(应用)内容" type="text" style="position: relative;height: 100px; width: 450px;"  ></textarea>
+					<button class="btn btn-primary" id="yiapplicationsan" type="button" style="margin-left: 10px" onclick="addDiction(4,'一级目录','applicationsan',0,0,this.id)">一级目录</button>
+					<button class="btn btn-primary" id="erapplicationsan" type="button" style="margin-left: 10px" onclick="addDiction(4,'二级目录','applicationsan',1,0,this.id)">二级目录</button>
+					<button class="btn btn-primary" id="sanapplicationsan" type="button" style="margin-left: 10px" onclick="addDiction(4,'内容','applicationsan',2,0,this.id)">内容</button>
+				</div>
+			</div>
+		</div>
+		<div class="control-group" id="mata">
+			<label class="control-label titleClass">参考资料</label>
+			<c:forEach items="${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: 100px" onclick="upMaterial(${videoFile.id})">编辑</a>
+						<a onclick="delMaterial(${videoFile.id})">删除</a>
+					</div>
+				</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: 100px" onclick="upMaterial(${videoFile.id})">编辑</a>
+<%--						<span class="del" onclick="delMaterial(${videoFile.id})">删除</span>--%>
+						<a onclick="delMaterial(${videoFile.id})">删除</a>
+
+					</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">
+<%--							onclick="imgSizeChange()"--%>
+						<img id="imgaa"  src="${videoFile.imageUrl}" height="50px" width="50px" >(图片)</input>
+						</div>
+						<a class="del" style="margin-left: 100px" onclick="upMaterial(${videoFile.id})">编辑</a>
+<%--						<span class="del" onclick="delMaterial(${videoFile.id})">删除</span>--%>
+						<a onclick="delMaterial(${videoFile.id})">删除</a>
+
+					</div>
+				</c:if>
+			</c:forEach>
+		</div>
+<%--		<div class="control-group">--%>
+<%--			<label class="control-label keyClass">${commodityType}优点:</label>--%>
+<%--			<div class="controls" style="width:812px">--%>
+<%--				<form:textarea path="advantage" htmlEscape="false" class="input-xlarge  hide" />--%>
+<%--				<div id="advantageEditor" class="contentEditor">${cmBaikeProduct.advantage}</div>--%>
+<%--                <label id="advantageSensitiveWords" class="red"></label>--%>
+<%--			</div>--%>
+<%--		</div>--%>
+<%--		<div class="control-group">--%>
+<%--			<label class="control-label keyClass">${commodityType}缺点:</label>--%>
+<%--			<div class="controls" style="width:812px">--%>
+<%--				<form:textarea path="disadvantage" htmlEscape="false" class="input-xlarge  hide" />--%>
+<%--				<div id="disadvantageEditor" class="contentEditor">${cmBaikeProduct.disadvantage}</div>--%>
+<%--                <label id="disadvantageSensitiveWords" class="red"></label>--%>
+<%--			</div>--%>
+<%--		</div>--%>
+<%--		<div class="control-group">--%>
+<%--			<label class="control-label keyClass">${commodityType}原理:</label>--%>
+<%--			<div class="controls" style="width:812px">--%>
+<%--				<form:textarea path="principle" htmlEscape="false" class="input-xlarge  hide" />--%>
+<%--				<div id="principleEditor" class="contentEditor">${cmBaikeProduct.principle}</div>--%>
+<%--                <label id="principleSensitiveWords" class="red"></label>--%>
+<%--			</div>--%>
+<%--		</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 mainImageBox" id="mainImageBox">
+					<div class="conList">
+						<form:hidden id="" path="" 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>
+
+		<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>
+		<div class="control-group">
+			<label class="control-label">SEO关键词:</label>
+			<div class="auto-input">
+				<form:input path="seoKeyword" htmlEscape="false" style="position: relative" class="input-xlarge"/>
+                <label id="seoKeywordSensitiveWords" class="red"></label>
+			</div>
+		</div>
+<%--		<div class="control-group">--%>
+<%--			<label class="control-label titleClass">${commodityType}档案</label>--%>
+<%--		</div>--%>
+<%--		<div class="control-group">--%>
+<%--			<label class="control-label">品牌:</label>--%>
+<%--			<div class="controls">--%>
+<%--				<form:input path="brand" htmlEscape="false" class="input-xlarge "/>--%>
+<%--                <label id="brandSensitiveWords" class="red"></label>--%>
+<%--			</div>--%>
+<%--		</div>--%>
+<%--		<div class="control-group">--%>
+<%--			<label class="control-label">产地:</label>--%>
+<%--			<div class="controls">--%>
+<%--				<form:input path="producePlace" htmlEscape="false" class="input-xlarge "/>--%>
+<%--                <label id="producePlaceSensitiveWords" class="red"></label>--%>
+<%--			</div>--%>
+<%--		</div>--%>
+<%--		<div class="control-group">--%>
+<%--			<label class="control-label">上市时间:</label>--%>
+<%--			<div class="controls">--%>
+<%--				<form:input path="marketYear" htmlEscape="false" placeholder="年" class="input-medium" maxlength="4" onkeyup="onlynum(this)"/>---%>
+<%--				<form:input path="marketMonth" htmlEscape="false" placeholder="月" class="input-medium" maxlength="2" onkeyup="onlynum(this)"/>---%>
+<%--				<form:input path="marketDay" htmlEscape="false" placeholder="日" class="input-medium" maxlength="2" onkeyup="onlynum(this)"/>--%>
+<%--			</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>
+<%--		<div class="control-group" style="position: relative">--%>
+<%--			<label class="control-label">NMPA认证时间:</label>--%>
+<%--			<div class="controls">--%>
+<%--				<form:input path="nmpaYear" htmlEscape="false" placeholder="年" class="input-medium" maxlength="4" onkeyup="onlynum(this)"/>---%>
+<%--				<form:input path="nmpaMonth" htmlEscape="false" placeholder="月" class="input-medium" maxlength="2" onkeyup="onlynum(this)"/>---%>
+<%--				<form:input path="nmpaDay" htmlEscape="false" placeholder="日" class="input-medium" maxlength="2" onkeyup="onlynum(this)"/>--%>
+<%--			</div>--%>
+<%--		</div>--%>
+<%--		<div class="control-group" style="width: 1000px">--%>
+<%--			<label class="control-label keyClass">${commodityType}认证:</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 "/>--%>
+<%--							<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 "/>--%>
+<%--							<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 keyClass">适应症:</label>--%>
+<%--			<div class="controls" style="width:812px">--%>
+<%--				<form:textarea path="adaptiveMan" htmlEscape="false" class="input-xlarge  hide" />--%>
+<%--				<div id="adaptiveManEditor" class="contentEditor">${cmBaikeProduct.adaptiveMan}</div>--%>
+<%--                <label id="adaptiveManSensitiveWords" class="red"></label>--%>
+<%--			</div>--%>
+<%--		</div>--%>
+<%--		<div class="control-group">--%>
+<%--			<label class="control-label keyClass">不适应人群:</label>--%>
+<%--			<div class="controls" style="width:812px">--%>
+<%--				<form:textarea path="unAdaptiveMan" htmlEscape="false" class="input-xlarge  hide" />--%>
+<%--				<div id="unAdaptiveManEditor" class="contentEditor">${cmBaikeProduct.unAdaptiveMan}</div>--%>
+<%--                <label id="unAdaptiveManSensitiveWords" class="red"></label>--%>
+<%--			</div>--%>
+<%--		</div>--%>
+<%--		<div class="control-group">--%>
+<%--			<label class="control-label keyClass">注意事项:</label>--%>
+<%--			<div class="controls" style="width:812px">--%>
+<%--				<form:textarea path="aroundOperation" htmlEscape="false" class="input-xlarge  hide" />--%>
+<%--				<div id="aroundOperationEditor" class="contentEditor">${cmBaikeProduct.aroundOperation}</div>--%>
+<%--                <label id="aroundOperationSensitiveWords" class="red"></label>--%>
+<%--			</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: 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 "/>--%>
+<%--							<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 "/>--%>
+<%--							<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">常见问题:</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">问题1:</label>--%>
+<%--                <div class="controls">--%>
+<%--                    <input name="questionList[0].question" style="width: 550px" htmlEscape="false" class="input-xlarge ">--%>
+<%--                    <label id="question0SensitiveWords" class="red"></label>--%>
+<%--                </div>--%>
+<%--            </div>--%>
+<%--            <div class="control-group" id="answerRow0">--%>
+<%--                <label class="control-label">答:</label>--%>
+<%--                <div class="controls">--%>
+<%--                    <input name="questionList[0].answer" style="width: 550px" htmlEscape="false" class="input-xlarge ">--%>
+<%--                    <label id="answer0SensitiveWords" class="red"></label>--%>
+<%--                </div>--%>
+<%--            </div>--%>
+<%--            <div class="control-group" id="questionRow1">--%>
+<%--                <label class="control-label">问题2:</label>--%>
+<%--                <div class="controls">--%>
+<%--                    <input name="questionList[1].question" style="width: 550px" htmlEscape="false" class="input-xlarge  questionInput">--%>
+<%--                    <label id="question1SensitiveWords" class="red"></label>--%>
+<%--                    <a id="questionDelBtn1" onclick="deleteQuestion(1)" style="cursor: pointer">删除</a>--%>
+<%--                </div>--%>
+<%--            </div>--%>
+<%--            <div class="control-group" id="answerRow1">--%>
+<%--                <label class="control-label">答:</label>--%>
+<%--                <div class="controls">--%>
+<%--                    <input name="questionList[1].answer" style="width: 550px" htmlEscape="false" class="input-xlarge  questionInput">--%>
+<%--                    <label id="answer1SensitiveWords" class="red"></label>--%>
+<%--                </div>--%>
+<%--            </div>--%>
+<%--        </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>
+		</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">
+<%--			onclick="checkInfo()"--%>
+			<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>
+	$(function(){
+		console.log(123)
+	})
+	var contentEditMap = new Map()
+	function createContentEdit(el){
+		contentEditMap.set(el, new ContentEdit({
+			el: el + ' .bk-input',
+			hiddenMark: false,
+			markCountKey: 'markCount',
+			change: (html) => {
+				console.log(html)
+			}
+		}))
+	}
+	createContentEdit('#bk-name')
+	$('.content-edit .bk-input').on('blur', function(){
+		console.log('失去焦点')
+		var self = $(this)
+		setTimeout(function(){
+			self.siblings('.bk-toolbar').hide()
+		},200)
+	})
+	$('.content-edit .bk-input').on('focus', function(){
+		console.log('获取焦点')
+		$(this).siblings('.bk-toolbar').show()
+	})
+	$('.content-edit .bk-toolbar').on('click', function(){
+		console.log('工具栏点击')
+		$('#dig').show()
+	})
+	$('.content-edit .bk-bubble').on('click', function(){
+		console.log('气泡点击')
+	})
+	$('.content-edit .bk-literature .bk-edit').on('click', function(){
+		console.log('编辑资料')
+		$(this).siblings('.bk-toolbar').show()
+	})
+	$('.content-edit .bk-literature .bk-delete').on('click', function(){
+		console.log('删除引用资料')
+	})
+</script>
+
+<script>
+	var paramIndex = 3;
+	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) {
+				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') {
+				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")
+					}
+				})
+				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 > 3) {
+			var index = 3;
+			while (index < paramListSize) {
+				$(".paramList").append("<div class=\"controls paramRow\" id=\"paramRow" + index + "\">\n" +
+						"\t\t\t\t<input id=\"name[" + index + "]\" name=\"paramList[" + index + "].name\" htmlEscape=\"false\" class=\"input-small \" placeholder=\"请输入名称\" onblur=\"readflag(" + index + ")\">\n" +
+						"\t\t\t\t<label id=\"param" + index + "SensitiveWords\" class=\"red\"></label>\n" +
+						"\t\t\t\t<input id=\"content[" + index + "]\" name=\"paramList[" + index + "].content\" htmlEscape=\"false\" class=\"input-xlarge \" placeholder=\"请输入内容\" readonly>\n" +
+						"\t\t\t\t<label id=\"content" + index + "SensitiveWords\" class=\"red\"></label>\n" +
+						"\t\t\t\t<a onclick=\"deleteParam(" + index + ")\" style=\"cursor: pointer\">删除</a>\n" +
+						"            </div>");
+				index = index + 1;
+			}
+		}
+        if (paramListSize > 0 && paramListSize < 3) {
+            for (var i = paramListSize; i < 3; i++) {
+                deleteParam(i);
+            }
+        }
+
+        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]);
+			if(undefined !=contentArray[i]&&null!=contentArray[i]&& '' !=contentArray[i]){
+				$('input[name="' + contentInput + '"]').readOnly=false;
+			}else{
+				$('input[name="' + contentInput + '"]').readOnly=true;
+			}
+		}
+
+		// 初始化问题
+		<%--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\">问题" + (index+1) + ":</label>\n" +--%>
+		<%--				"                <div class=\"controls\">\n" +--%>
+		<%--				"                    <input name=\"questionList[" + index + "].question\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge \">\n" +--%>
+		<%--				"\t\t\t\t<label id=\"question" + index + "SensitiveWords\" class=\"red\"></label>\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\">答:</label>\n" +--%>
+		<%--				"                <div class=\"controls\">\n" +--%>
+		<%--				"                    <input name=\"questionList[" + index + "].answer\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge \">\n" +--%>
+		<%--				"\t\t\t\t<label id=\"answer" + index + "SensitiveWords\" class=\"red\"></label>\n" +--%>
+		<%--				"                </div>\n" +--%>
+		<%--				"            </div>");--%>
+		<%--		index = index + 1;--%>
+		<%--	}--%>
+		<%--}--%>
+
+        // if (questionListSize > 0 && questionListSize < 2) {
+        //     for (var i = questionListSize; i < 2; i++) {
+        //         deleteQuestion(i);
+        //     }
+        // }
+		// 初始化正文
+		<c:forEach items="${cmBaikeProduct.textInfo}" var="tex">
+		//定义
+		<c:if test="${tex.textType eq 1}">
+			<c:if test="${tex.dictionaryType eq 1}">
+			$("#dy1").val('${tex.dictionaryContent}')
+			</c:if>
+			<c:if test="${tex.dictionaryType eq 2}">
+			$("#dy2").val('${tex.dictionaryContent}')
+			</c:if>
+			<c:if test="${tex.dictionaryType eq 3}">
+			$("#dy3").val('${tex.dictionaryContent}')
+			</c:if>
+		</c:if>
+
+		//原理
+		<c:if test="${tex.textType eq 2}">
+			<c:if test="${tex.dictionaryType eq 1}">
+			$("#yl1").val('${tex.dictionaryContent}')
+			</c:if>
+			<c:if test="${tex.dictionaryType eq 2}">
+			$("#yl2").val('${tex.dictionaryContent}')
+			</c:if>
+			<c:if test="${tex.dictionaryType eq 3}">
+			$("#yl3").val('${tex.dictionaryContent}')
+			</c:if>
+		</c:if>
+
+		//特点
+		<c:if test="${tex.textType eq 3}">
+			<c:if test="${tex.dictionaryType eq 1}">
+			$("#td1").val('${tex.dictionaryContent}')
+			</c:if>
+			<c:if test="${tex.dictionaryType eq 2}">
+			$("#td2").val('${tex.dictionaryContent}')
+			</c:if>
+			<c:if test="${tex.dictionaryType eq 3}">
+			$("#td3").val('${tex.dictionaryContent}')
+			</c:if>
+		</c:if>
+
+		//应用
+		<c:if test="${tex.textType eq 4}">
+			<c:if test="${tex.dictionaryType eq 1}">
+			$("#yy1").val('${tex.dictionaryContent}')
+			</c:if>
+			<c:if test="${tex.dictionaryType eq 2}">
+			$("#yy2").val('${tex.dictionaryContent}')
+			</c:if>
+			<c:if test="${tex.dictionaryType eq 3}">
+			$("#yy1").val('${tex.dictionaryContent}')
+			</c:if>
+		</c:if>
+		</c:forEach>
+		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]);
+		}
+
+		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();
+	}
+
+	//添加参数
+	function addParam() {
+		$(".paramList").append("<div class=\"controls paramRow\" id=\"paramRow" + paramIndex + "\">\n" +
+				"\t\t\t\t<input id=\"name[" + paramIndex + "]\" name=\"paramList[" + paramIndex + "].name\" htmlEscape=\"false\" class=\"input-small \" placeholder=\"例如:性质类型\" onblur=\"readflag(" + paramIndex + ")\">\n" +
+				"\t\t\t\t<label id=\"param" + paramIndex + "SensitiveWords\" class=\"red\"></label>\n" +
+				"\t\t\t\t<input id=\"content[" + paramIndex + "]\" name=\"paramList[" + paramIndex + "].content\" htmlEscape=\"false\" class=\"input-xlarge \" placeholder=\"请输入内容\" readonly>\n" +
+				"\t\t\t\t<label id=\"content" + paramIndex + "SensitiveWords\" class=\"red\"></label>\n" +
+				"\t\t\t\t<a onclick=\"deleteParam(" + paramIndex + ")\" style=\"cursor: pointer\">删除</a>\n" +
+				"            </div>")
+		paramIndex = paramIndex + 1;
+	}
+	var content=10;
+	// addDiction =function(dicType,buttType,aa,bb,ff,dicId){// 控制输入框显示名称,控制显示文本域,控制目录显示(一级,二级,内容),参与控制按钮隐藏,控制是否根目录,控制隐藏
+	// 	var dic="";
+	// 	if(dicType ==1){
+	// 		dic="定义";
+	// 	}else if(dicType ==2){
+	// 		dic="原理";
+	// 	}else if(dicType ==3){
+	// 		dic="特点";
+	// 	}else if(dicType ==4){
+	// 		dic="应用";
+	// 	}
+	// 	content=content+5;
+	// 	var yi=content-1;
+	// 	var er=content;
+	// 	var san=content+1;
+	// 	// "+dicType+","+this.name+"
+	// 	var num=bb+1;//111
+	// 	var cc=aa+num;//definitionyi111
+	// 	var dd=cc;
+	// 	if(ff==0){
+	// 		//第一个
+	// 		dd=aa;
+	// 	}else{
+	// 		//新建
+	// 		dd=ff;//definitionyi11
+	// 	}
+	// 	if("内容"==buttType){
+	// 		$("."+dd).append("<div class=\"controls "+cc+"\" style=\"margin-left: 0px;margin-top: 5px \">" +
+	// 				"<textarea type=\"text\" style=\"position: relative;height: 100px; width: 450px;\" placeholder=\"("+dic+") "+buttType+"\"/>" +
+	// 				"<button class=\"btn btn-primary\" id=\"yi"+aa+num+"\" type=\"button\" name=\"一级目录\"  style=\"margin-left: 15px\" onclick=\"addDiction('"+dicType+"','一级目录','"+aa+"','"+yi+"','"+cc+"','yi"+aa+num+"')\">一级目录</button>"+
+	// 				"<button class=\"btn btn-primary\" id=\"er"+aa+num+"\" type=\"button\" name=\"二级目录\"  style=\"margin-left: 10px\" onclick=\"addDiction('"+dicType+"','二级目录','"+aa+"','"+er+"','"+cc+"','er"+aa+num+"')\">二级目录</button>"+
+	// 				"<button class=\"btn btn-primary\" id=\"san"+aa+num+"\" type=\"button\" name=\"内容\" style=\"margin-left: 10px\" onclick=\"addDiction('"+dicType+"','内容','"+aa+"','"+san+"','"+cc+"','san"+aa+num+"')\">内容</button>"+
+	// 				"</div>")
+	//
+	// 	}else{
+	// 		$("."+dd).append("<div class=\"controls "+cc+"\" style=\"margin-left: 0px;margin-top: 5px \">" +
+	// 				"<input  htmlEscape=\"false\" class=\"input-xlarge \" placeholder=\"("+dic+") "+buttType+"\"/>" +
+	// 				"<button class=\"btn btn-primary\" id=\"yi"+aa+num+"\" type=\"button\" name=\"一级目录\"  style=\"margin-left: 15px\" onclick=\"addDiction('"+dicType+"','一级目录','"+aa+"','"+yi+"','"+cc+"','yi"+aa+num+"')\">一级目录</button>"+
+	// 				"<button class=\"btn btn-primary\" id=\"er"+aa+num+"\"  type=\"button\" name=\"二级目录\"  style=\"margin-left: 10px\" onclick=\"addDiction('"+dicType+"','二级目录','"+aa+"','"+er+"','"+cc+"','er"+aa+num+"')\">二级目录</button>"+
+	// 				"<button class=\"btn btn-primary\" id=\"san"+aa+num+"\"  type=\"button\" name=\"内容\" style=\"margin-left: 10px\" onclick=\"addDiction('"+dicType+"','内容','"+aa+"','"+san+"','"+cc+"','san"+aa+num+"')\">内容</button>"+
+	// 				"</div>")
+	// 	}
+	// 	document.getElementById(""+dicId).style.display="none";
+	// }
+	//添加正文
+	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;
+	}
+
+	//删除问题
+	// 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\">问题" + (questionIndex+1) + ":</label>\n" +
+    //         "                <div class=\"controls\">\n" +
+    //         "                    <input name=\"questionList[" + questionIndex + "].question\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge \">\n" +
+	// 			"\t\t\t\t<label id=\"question" + questionIndex + "SensitiveWords\" class=\"red\"></label>\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\">答:</label>\n" +
+    //         "                <div class=\"controls\">\n" +
+    //         "                    <input name=\"questionList[" + questionIndex + "].answer\" style=\"width: 550px\" htmlEscape=\"false\" class=\"input-xlarge \">\n" +
+	// 			"\t\t\t\t<label id=\"answer" + questionIndex + "SensitiveWords\" class=\"red\"></label>\n" +
+    //         "                </div>\n" +
+    //         "            </div>")
+    //     $("#questionDelBtn" + (questionIndex - 1)).attr("style", "display:none;cursor: pointer");
+	// 	questionIndex = questionIndex + 1;
+	// }
+
+	<%--$(document).ready(function () {--%>
+	<%--	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 advantage=advantageEditor.getData();
+	// 	var disadvantage=disadvantageEditor.getData();
+	// 	var principle=principleEditor.getData();
+	// 	var adaptiveMan=adaptiveManEditor.getData();
+	// 	var unAdaptiveMan=unAdaptiveManEditor.getData();
+	// 	var aroundOperation=aroundOperationEditor.getData();
+	// 	$("#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, ""); //清除"数字"以外的字符
+	}
+
+	//删除文件
+	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) {
+		// return ['三全鲜食(北新泾店)', 'Hot honey 首尔炸鸡(仙霞路)', '新旺角茶餐厅', '泷千家(天山西路店)', '胖仙女纸杯蛋糕(上海凌空店)', '贡茶', '豪大大香鸡排超级奶爸', '茶芝兰(奶茶,手抓饼)', '十二泷町', '星移浓缩咖啡', '阿姨奶茶/豪大大', '新麦甜四季甜品炸鸡', 'Monica摩托主题咖啡店', '浮生若茶(凌空soho店)', 'NONO JUICE  鲜榨果汁', 'CoCo都可(北新泾店)', '快乐柠檬(神州智慧店)', 'Merci Paul cafe', '猫山王(西郊百联店)', '枪会山', '纵食', '钱记', '壹杯加', '唦哇嘀咖', '爱茜茜里(西郊百联)', '爱茜茜里(近铁广场)', '鲜果榨汁(金沙江路和美广店)', '开心丽果(缤谷店)', '超级鸡车(丰庄路店)', '妙生活果园(北新泾店)', '香宜度麻辣香锅', '凡仔汉堡(老真北路店)', '港式小铺', '蜀香源麻辣香锅(剑河路店)', '北京饺子馆', '饭典*新简餐(凌空SOHO店)', '焦耳·川式快餐(金钟路店)', '动力鸡车', '浏阳蒸菜', '四海游龙(天山西路店)', '樱花食堂(凌空店)', '壹分米客家传统调制米粉(天山店)', '福荣祥烧腊(平溪路店)', '速记黄焖鸡米饭', '红辣椒麻辣烫', '(小杨生煎)西郊百联餐厅', '阳阳麻辣烫', '南拳妈妈龙虾盖浇饭'].filter(function (item) {
+		//     return text && item.indexOf(text) > -1;
+		// });
+		var keywordlist=new Array();
+		<c:forEach items="${SearchFrequencyVo}" var="search">
+		keywordlist.push("${search.keyword}")
+		</c:forEach>
+		return keywordlist.filter(function (item) {
+			return text && item.indexOf(text) > -1;
+		});
+	}
+
+	new AutoComplete({
+		el: '.auto-input',
+		callback: autocomplete,
+		offsetLeft: -25
+	});
+</script>
+</body>
+</html>

+ 16 - 0
src/main/webapp/WEB-INF/views/modules/baikePage/entryGuidance.jsp

@@ -0,0 +1,16 @@
+<%--
+  Created by IntelliJ IDEA.
+  User: Administrator
+  Date: 2022/12/15
+  Time: 10:37
+  To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<html>
+<head>
+    <title>创建词条引导</title>
+</head>
+<body>
+        编辑须知
+</body>
+</html>

+ 980 - 0
src/main/webapp/WEB-INF/views/modules/svip/cmSvipCouponConfiguration.jsp

@@ -0,0 +1,980 @@
+<%@ page import="java.util.Date" %>
+<%@ 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>
+        .coupon-wrap {
+            border: 1px solid #aaa;
+            padding: 20px 20px 0;
+            margin-bottom: 20px;
+        }
+        .couponType {
+            margin-right: 15px;
+        }
+    </style>
+    <script type="text/javascript">
+        $(document).ready(function () {
+            var dateList = [];
+            if (${not empty useDateList}) {
+                <c:forEach items="${useDateList}" var="date" varStatus="index">
+                dateList.push("${date}");
+                </c:forEach>
+            }
+            $("#inputForm").validate({
+                submitHandler: function (form) {
+                    if (imageList1.length > 0) {
+                        var productInfo1 = JSON.stringify(imageList1);
+                        $('#productInfo1').val(productInfo1);
+                    }
+                    if (imageList2.length > 0) {
+                        var productInfo2 = JSON.stringify(imageList2);
+                        $('#productInfo2').val(productInfo2);
+                    }
+                    if (imageList3.length > 0) {
+                        var productInfo3 = JSON.stringify(imageList3);
+                        $('#productInfo3').val(productInfo3);
+                    }
+                    if (imageList4.length > 0) {
+                        var productInfo4 = JSON.stringify(imageList4);
+                        $('#productInfo4').val(productInfo4);
+                    }
+                    var couponType1 = $("#couponType1").val();
+                    var shopId1 = $("#shopId1").val();
+                    if (couponType1 == 3) {
+                        if (shopId1 == "" || shopId1 == null) {
+                            alert("店铺券供应商不能为空 !");
+                            return false;
+                        }
+                    }
+                    /*var month = $("#month").val();
+                    // 判断月份 ...
+                    if (month == null || month == "") {
+                        alert("请选择生效时间! ");
+                        return false;
+                    }
+                    var vipId = $("#id").val();
+                    if (!vipId && dateList.indexOf(month)>=0){
+                        alert("已存在该月优惠券,请修改月份!");
+                        return false;
+                    }*/
+                    var couponAmount1 = $("#couponAmount1").val() * 1;
+                    var touchPrice1 = $("#touchPrice1").val() * 1;
+                    if (couponAmount1 == "") {
+                        alertx("【优惠券1】优惠券金额不能为空");
+                        return false;
+                    }
+                    if (touchPrice1 == "") {
+                        alertx("【优惠券1】优惠条件不能为空");
+                        return false;
+                    }
+                    if (couponAmount1 >= touchPrice1) {
+                        alertx("【优惠券1】优惠券金额必须小于优惠条件金额");
+                        return false;
+                    }
+                    var couponAmount2 = $("#couponAmount2").val() * 1;
+                    var touchPrice2 = $("#touchPrice2").val() * 1;
+                    if (couponAmount2 == "") {
+                        alertx("【优惠券2】优惠券金额不能为空");
+                        return false;
+                    }
+                    if (touchPrice2 == "") {
+                        alertx("【优惠券2】优惠条件不能为空");
+                        return false;
+                    }
+                    if (couponAmount2 >= touchPrice2) {
+                        alertx("【优惠券2】优惠券金额必须小于优惠条件金额");
+                        return false;
+                    }
+                    var couponAmount3 = $("#couponAmount3").val() * 1;
+                    var touchPrice3 = $("#touchPrice3").val() * 1;
+                    if (couponAmount3 == "") {
+                        alertx("【优惠券3】优惠券金额不能为空");
+                        return false;
+                    }
+                    if (touchPrice3 == "") {
+                        alertx("【优惠券3】优惠条件不能为空");
+                        return false;
+                    }
+                    if (couponAmount3 >= touchPrice3) {
+                        alertx("【优惠券3】优惠券金额必须小于优惠条件金额");
+                        return false;
+                    }
+                    var couponAmount4 = $("#couponAmount4").val() * 1;
+                    var touchPrice4 = $("#touchPrice4").val() * 1;
+                    if (couponAmount4 == "") {
+                        alertx("【优惠券4】优惠券金额不能为空");
+                        return false;
+                    }
+                    if (touchPrice4 == "") {
+                        alertx("【优惠券4】优惠条件不能为空");
+                        return false;
+                    }
+                    if (couponAmount4 >= touchPrice4) {
+                        alertx("【优惠券4】优惠券金额必须小于优惠条件金额");
+                        return false;
+                    }
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function (error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox") || element.is(":radio") || element.parent().is(".input-append")) {
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+        });
+    </script>
+</head>
+<body>
+<ul class="nav nav-tabs">
+    <li><a href="${ctx}/vip/cmCoupon/">超级会员专属优惠券</a></li>
+    <li class="active"><a href="${ctx}/vip/cmCoupon/configuration">专属优惠券配置</a></li>
+</ul>
+<form:form id="inputForm" modelAttribute="svipcouponForm" action="${ctx}/vip/cmCoupon/saveConfigure" method="post" class="form-horizontal">
+    <div style="height: 50px; background: #f5f5f5;">
+        <span style="color: red; line-height: 50px; font-size: 15px;">在本页面,对每三个月给超级会员自动发放的优惠券进行配置,配置完成后下一阶段才生效</span>
+    </div>
+    <sys:message content="${message}"/>
+    <form:hidden path="id" value="${cmVipCoupon.id}"/>
+    <div class="coupon-wrap" id="couponWrap1">
+        <div class="control-group">
+            <label class="control-label"><font color="red">*</font><b>优惠券1:</b></label>
+            <div class="controls">
+                <form:radiobutton path="couponType1" class="couponType" label="请选择" value="" checked="true"></form:radiobutton>
+                <form:radiobutton path="couponType1" class="couponType" label="活动券" value="0"></form:radiobutton>
+                <form:radiobutton path="couponType1" class="couponType" label="品类券" value="1" onclick="cType(1)"></form:radiobutton>
+                <form:radiobutton path="couponType1" class="couponType" label="店铺券" value="3" onclick="cType(1)"></form:radiobutton>
+            </div>
+        </div>
+        <form:hidden path="couponId1" id="couponId1"/>
+        <div class="control-group coupon-line l0" ${svipcouponForm.couponType1 ne '3' ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>供应商:</label>
+            <div class="controls">
+                <a href="javascript:void(0);" onclick="showSelectShop(1)" id="chooseShop1">请选择供应商</a>
+                <form:hidden path="shopId1" id="shopId1"/>
+                <table class="contentTableShop table table-striped table-bordered table-condensed" hidden="hidden">
+                    <thead></thead>
+                    <tbody class="hotSearchShop"></tbody>
+                </table>
+            </div>
+        </div>
+        <div class="control-group coupon-line l1" ${empty svipcouponForm.couponId1 ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠券金额:</label>
+            <div class="controls">
+                <form:input path="couponAmount1" htmlEscape="false" maxlength="20" class="input-xlarge required"/>
+            </div>
+        </div>
+        <div class="control-group coupon-line l2" ${empty svipcouponForm.couponId1 ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠条件:</label>
+            <div class="controls"> 订单商品总额满
+                <form:input path="touchPrice1" htmlEscape="false" maxlength="20" class="input-medium required"/>
+            </div>
+        </div>
+        <div class="control-group coupon-line l3" ${svipcouponForm.couponType1 ne '1' ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠品类:</label>
+            <div class="controls">
+                <form:radiobutton path="categoryType1" value="1" label="产品"/>
+                <form:radiobutton path="categoryType1" value="2" label="仪器"/>
+            </div>
+        </div>
+        <div class="control-group coupon-line l4" ${svipcouponForm.couponType1 ne '0' ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠商品:</label>
+            <div class="controls">
+                <form:radiobutton path="productType1" value="1" label="全商城商品" onclick="productShow(value,1)"/>
+                <form:radiobutton path="productType1" value="2" label="指定商品" onclick="productShow(value,1)"/>
+            </div>
+        </div>
+        <div class="productData1" hidden="hidden">
+            <form:hidden path="productInfo1" id="productInfo1"/>
+            <div class="control-group">
+                <input class="btn del" style="width: 50px" onclick="batchDeletion(1)" value="删除"/>
+                <input class="btn btn-primary" style="width: 50px" onclick="showSelectProduct(1)" value="添加"/>
+                <br><br>
+                <table class="contentTableProduct table table-striped table-bordered table-condensed" hidden="hidden">
+                    <thead></thead>
+                    <tbody class="hotSearchProduct"></tbody>
+                </table>
+            </div>
+        </div>
+    </div>
+
+    <div class="coupon-wrap" id="couponWrap2">
+        <div class="control-group">
+            <label class="control-label"><font color="red">*</font><b>优惠券2:</b></label>
+            <div class="controls">
+                <form:radiobutton path="couponType2" class="couponType" label="请选择" value="" checked="true"></form:radiobutton>
+                <form:radiobutton path="couponType2" class="couponType" label="活动券" value="0"></form:radiobutton>
+                <form:radiobutton path="couponType2" class="couponType" label="品类券" value="1" onclick="cType(2)"></form:radiobutton>
+                <form:radiobutton path="couponType2" class="couponType" label="店铺券" value="3" onclick="cType(2)"></form:radiobutton>
+            </div>
+        </div>
+        <form:hidden path="couponId2" id="couponId2"/>
+        <div class="control-group coupon-line l0" ${svipcouponForm.couponType2 ne '3' ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>供应商:</label>
+            <div class="controls">
+                <a href="javascript:void(0);" onclick="showSelectShop(2)" id="chooseShop2">请选择供应商</a>
+                <form:hidden path="shopId2" id="shopId2"/>
+                <table class="contentTableShop table table-striped table-bordered table-condensed" hidden="hidden">
+                    <thead></thead>
+                    <tbody class="hotSearchShop"></tbody>
+                </table>
+            </div>
+        </div>
+        <div class="control-group coupon-line l1"  ${empty svipcouponForm.couponId2 ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠券金额:</label>
+            <div class="controls">
+                <form:input path="couponAmount2" htmlEscape="false" maxlength="20" class="input-xlarge required"/>
+            </div>
+        </div>
+        <div class="control-group coupon-line l2" ${empty svipcouponForm.couponId2 ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠条件:</label>
+            <div class="controls"> 订单商品总额满
+                <form:input path="touchPrice2" htmlEscape="false" maxlength="20" class="input-medium required"/>
+            </div>
+        </div>
+        <div class="control-group coupon-line l3" ${svipcouponForm.couponType2 ne '1' ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠品类:</label>
+            <div class="controls">
+                <form:radiobutton path="categoryType2" value="1" label="产品"/>
+                <form:radiobutton path="categoryType2" value="2" label="仪器"/>
+            </div>
+        </div>
+        <div class="control-group coupon-line l4" ${svipcouponForm.couponType2 ne '0' ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠商品:</label>
+            <div class="controls">
+                <form:radiobutton path="productType2" value="1" label="全商城商品" onclick="productShow(value,2)"/>
+                <form:radiobutton path="productType2" value="2" label="指定商品" onclick="productShow(value,2)"/>
+            </div>
+        </div>
+        <div class="productData2" hidden="hidden">
+            <form:hidden path="productInfo2" id="productInfo2"/>
+            <div class="control-group">
+                <input class="btn del" style="width: 50px" onclick="batchDeletion(2)" value="删除"/>
+                <input class="btn btn-primary" style="width: 50px" onclick="showSelectProduct(2)" value="添加"/>
+                <br><br>
+                <table class="contentTableProduct table table-striped table-bordered table-condensed" hidden="hidden">
+                    <thead></thead>
+                    <tbody class="hotSearchProduct"></tbody>
+                </table>
+            </div>
+        </div>
+    </div>
+
+    <div class="coupon-wrap" id="couponWrap3">
+        <div class="control-group">
+            <label class="control-label"><font color="red">*</font><b>优惠券3:</b></label>
+            <div class="controls">
+                <form:radiobutton path="couponType3" class="couponType" label="请选择" value="" checked="true"></form:radiobutton>
+                <form:radiobutton path="couponType3" class="couponType" label="活动券" value="0"></form:radiobutton>
+                <form:radiobutton path="couponType3" class="couponType" label="品类券" value="1" onclick="cType(3)"></form:radiobutton>
+                <form:radiobutton path="couponType3" class="couponType" label="店铺券" value="3" onclick="cType(3)"></form:radiobutton>
+            </div>
+        </div>
+        <form:hidden path="couponId3" id="couponId3"/>
+        <div class="control-group coupon-line l0" ${svipcouponForm.couponType3 ne '3' ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>供应商:</label>
+            <div class="controls">
+                <a href="javascript:void(0);" onclick="showSelectShop(3)" id="chooseShop3">请选择供应商</a>
+                <form:hidden path="shopId3" id="shopId3"/>
+                <table class="contentTableShop table table-striped table-bordered table-condensed" hidden="hidden">
+                    <thead></thead>
+                    <tbody class="hotSearchShop"></tbody>
+                </table>
+            </div>
+        </div>
+        <div class="control-group coupon-line l1"  ${empty svipcouponForm.couponId3 ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠券金额:</label>
+            <div class="controls">
+                <form:input path="couponAmount3" htmlEscape="false" maxlength="20" class="input-xlarge required"/>
+            </div>
+        </div>
+        <div class="control-group coupon-line l2" ${empty svipcouponForm.couponId3 ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠条件:</label>
+            <div class="controls"> 订单商品总额满
+                <form:input path="touchPrice3" htmlEscape="false" maxlength="20" class="input-medium required"/>
+            </div>
+        </div>
+        <div class="control-group coupon-line l3" ${svipcouponForm.couponType3 ne '1' ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠品类:</label>
+            <div class="controls">
+                <form:radiobutton path="categoryType3" value="1" label="产品"/>
+                <form:radiobutton path="categoryType3" value="2" label="仪器"/>
+            </div>
+        </div>
+        <div class="control-group coupon-line l4" ${svipcouponForm.couponType3 ne '0' ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠商品:</label>
+            <div class="controls">
+                <form:radiobutton path="productType3" value="1" label="全商城商品" onclick="productShow(value,3)"/>
+                <form:radiobutton path="productType3" value="2" label="指定商品" onclick="productShow(value,3)"/>
+            </div>
+        </div>
+        <div class="productData3" hidden="hidden">
+            <form:hidden path="productInfo3" id="productInfo3"/>
+            <div class="control-group">
+                <input class="btn del" style="width: 50px" onclick="batchDeletion(3)" value="删除"/>
+                <input class="btn btn-primary" style="width: 50px" onclick="showSelectProduct(3)" value="添加"/>
+                <br><br>
+                <table class="contentTableProduct table table-striped table-bordered table-condensed" hidden="hidden">
+                    <thead></thead>
+                    <tbody class="hotSearchProduct"></tbody>
+                </table>
+            </div>
+        </div>
+    </div>
+
+    <div class="coupon-wrap" id="couponWrap4">
+        <div class="control-group">
+            <label class="control-label"><font color="red">*</font><b>优惠券4:</b></label>
+            <div class="controls">
+                <form:radiobutton path="couponType4" class="couponType" label="请选择" value="" checked="true"></form:radiobutton>
+                <form:radiobutton path="couponType4" class="couponType" label="活动券" value="0"></form:radiobutton>
+                <form:radiobutton path="couponType4" class="couponType" label="品类券" value="1" onclick="cType(1)"></form:radiobutton>
+                <form:radiobutton path="couponType4" class="couponType" label="店铺券" value="3" onclick="cType(1)"></form:radiobutton>
+            </div>
+        </div>
+        <form:hidden path="couponId4" id="couponId4"/>
+        <div class="control-group coupon-line l0" ${svipcouponForm.couponType4 ne '3' ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>供应商:</label>
+            <div class="controls">
+                <a href="javascript:void(0);" onclick="showSelectShop(4)" id="chooseShop4">请选择供应商</a>
+                <form:hidden path="shopId4" id="shopId4"/>
+                <table class="contentTableShop table table-striped table-bordered table-condensed" hidden="hidden">
+                    <thead></thead>
+                    <tbody class="hotSearchShop"></tbody>
+                </table>
+            </div>
+        </div>
+        <div class="control-group coupon-line l1" ${empty svipcouponForm.couponId4 ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠券金额:</label>
+            <div class="controls">
+                <form:input path="couponAmount4" htmlEscape="false" maxlength="20" class="input-xlarge required"/>
+            </div>
+        </div>
+        <div class="control-group coupon-line l2" ${empty svipcouponForm.couponId4 ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠条件:</label>
+            <div class="controls"> 订单商品总额满
+                <form:input path="touchPrice4" htmlEscape="false" maxlength="20" class="input-medium required"/>
+            </div>
+        </div>
+        <div class="control-group coupon-line l3" ${svipcouponForm.couponType4 ne '1' ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠品类:</label>
+            <div class="controls">
+                <form:radiobutton path="categoryType4" value="1" label="产品"/>
+                <form:radiobutton path="categoryType4" value="2" label="仪器"/>
+            </div>
+        </div>
+        <div class="control-group coupon-line l4" ${svipcouponForm.couponType4 ne '0' ? 'style="display:none"':''}>
+            <label class="control-label"><font color="red">*</font>优惠商品:</label>
+            <div class="controls">
+                <form:radiobutton path="productType4" value="1" label="全商城商品" onclick="productShow(value,4)"/>
+                <form:radiobutton path="productType4" value="2" label="指定商品" onclick="productShow(value,4)"/>
+            </div>
+        </div>
+        <div class="productData4" hidden="hidden">
+            <form:hidden path="productInfo4" id="productInfo4"/>
+            <div class="control-group">
+                <input class="btn del" style="width: 50px" onclick="batchDeletion(4)" value="删除"/>
+                <input class="btn btn-primary" style="width: 50px" onclick="showSelectProduct(4)" value="添加"/>
+                <br><br>
+                <table class="contentTableProduct table table-striped table-bordered table-condensed" hidden="hidden">
+                    <thead></thead>
+                    <tbody class="hotSearchProduct"></tbody>
+                </table>
+            </div>
+        </div>
+    </div>
+    <div class="form-actions">
+        <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>
+        <input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+    </div>
+</form:form>
+<script type="text/javascript">
+    $(".contentTableShop thead").html('<tr><th>供应商名称</th><th>供应商简称</th><th>联系人</th><th>手机号</th><th>操作</th></tr>');
+    $(".contentTableProduct thead").html('<tr><th style="width:20px;"><input class="check-all" type="checkbox" onclick="clickAllSelect(this)"/>全选</th>' +
+        '<th>商品图片</th><th>商品名称</th><th>供应商</th><th>网站状态</th><th>小程序状态</th><th>排序</th><th>添加时间</th><th>操作</th></tr>');
+
+    var productIds1 = '';
+    var productIds2 = '';
+    var productIds3 = '';
+    var productIds4 = '';
+    var imageList1 = [];
+    var imageList2 = [];
+    var imageList3 = [];
+    var imageList4 = [];
+
+    //店铺券供应商回显
+    if (${not empty svipcouponForm.shop1}) {
+        var shop = {
+            "shopId": "${svipcouponForm.shop1.shopID}",
+            "name": "${svipcouponForm.shop1.name}",
+            "sname": "${svipcouponForm.shop1.sname}",
+            "linkMan": "${svipcouponForm.shop1.linkMan}",
+            "contractMobile": "${svipcouponForm.shop1.contractMobile}"
+        }
+        appendShopOrderHead(shop, 1);
+    }
+    if (${not empty svipcouponForm.shop2}) {
+        var shop = {
+            "shopId": "${svipcouponForm.shop2.shopID}",
+            "name": "${svipcouponForm.shop2.name}",
+            "sname": "${svipcouponForm.shop2.sname}",
+            "linkMan": "${svipcouponForm.shop2.linkMan}",
+            "contractMobile": "${svipcouponForm.shop2.contractMobile}"
+        }
+        appendShopOrderHead(shop, 2);
+    }
+    if (${not empty svipcouponForm.shop3}) {
+        var shop = {
+            "shopId": "${svipcouponForm.shop3.shopID}",
+            "name": "${svipcouponForm.shop3.name}",
+            "sname": "${svipcouponForm.shop3.sname}",
+            "linkMan": "${svipcouponForm.shop3.linkMan}",
+            "contractMobile": "${svipcouponForm.shop3.contractMobile}"
+        }
+        appendShopOrderHead(shop, 3);
+    }
+    if (${not empty svipcouponForm.shop4}) {
+        var shop = {
+            "shopId": "${svipcouponForm.shop4.shopID}",
+            "name": "${svipcouponForm.shop4.name}",
+            "sname": "${svipcouponForm.shop4.sname}",
+            "linkMan": "${svipcouponForm.shop4.linkMan}",
+            "contractMobile": "${svipcouponForm.shop4.contractMobile}"
+        }
+        appendShopOrderHead(shop, 4);
+    }
+    //产品回显
+    if (${not empty svipcouponForm.associateList1}) {
+        <c:forEach items="${svipcouponForm.associateList1}" var="associate" varStatus="index">
+        imageList1.push({
+            id: "${associate.id}",
+            productId: "${empty associate.productId ? "":associate.productId}",
+            image: "${associate.image}",
+            productName: "${associate.productName}",
+            shopName: "${associate.shopName}",
+            sort: "${associate.sort}",
+            pcStatus: "${associate.pcStatus}",
+            appletsStatus: "${associate.appletsStatus}",
+            addTime: "<fmt:formatDate value="${associate.addTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+        });
+        </c:forEach>
+        if (imageList1.length > 0) {
+            $('#couponWrap1').find('.contentTableProduct').show();
+            batchSaveSort(1);
+            productShow(2,1);
+        }
+    }
+    if (${not empty svipcouponForm.associateList2}) {
+        <c:forEach items="${svipcouponForm.associateList2}" var="associate" varStatus="index">
+        imageList2.push({
+            id: "${associate.id}",
+            productId: "${empty associate.productId ? "":associate.productId}",
+            image: "${associate.image}",
+            productName: "${associate.productName}",
+            shopName: "${associate.shopName}",
+            sort: "${associate.sort}",
+            pcStatus: "${associate.pcStatus}",
+            appletsStatus: "${associate.appletsStatus}",
+            addTime: "<fmt:formatDate value="${associate.addTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+        });
+        </c:forEach>
+        if (imageList2.length > 0) {
+            $('#couponWrap2').find('.contentTableProduct').show();
+            batchSaveSort(2);
+            productShow(2,2);
+        }
+    }
+    if (${not empty svipcouponForm.associateList3}) {
+        <c:forEach items="${svipcouponForm.associateList3}" var="associate" varStatus="index">
+        imageList3.push({
+            id: "${associate.id}",
+            productId: "${empty associate.productId ? "":associate.productId}",
+            image: "${associate.image}",
+            productName: "${associate.productName}",
+            shopName: "${associate.shopName}",
+            sort: "${associate.sort}",
+            pcStatus: "${associate.pcStatus}",
+            appletsStatus: "${associate.appletsStatus}",
+            addTime: "<fmt:formatDate value="${associate.addTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+        });
+        </c:forEach>
+        if (imageList3.length > 0) {
+            $('#couponWrap3').find('.contentTableProduct').show();
+            batchSaveSort(3);
+            productShow(2,3);
+        }
+    }
+    if (${not empty svipcouponForm.associateList4}) {
+        <c:forEach items="${svipcouponForm.associateList4}" var="associate" varStatus="index">
+        imageList4.push({
+            id: "${associate.id}",
+            productId: "${empty associate.productId ? "":associate.productId}",
+            image: "${associate.image}",
+            productName: "${associate.productName}",
+            shopName: "${associate.shopName}",
+            sort: "${associate.sort}",
+            pcStatus: "${associate.pcStatus}",
+            appletsStatus: "${associate.appletsStatus}",
+            addTime: "<fmt:formatDate value="${associate.addTime}" pattern="yyyy-MM-dd HH:mm:ss"/>"
+        });
+        </c:forEach>
+        if (imageList4.length > 0) {
+            $('#couponWrap4').find('.contentTableProduct').show();
+            batchSaveSort(4);
+            productShow(2,4);
+        }
+    }
+
+    $("body").on("change", ".couponType", function () {
+        var value = $(this).parent().find('input.couponType:checked').val() * 1;
+        $(this).parents(".coupon-wrap").find(".coupon-line").hide();
+        if (0 === value) {
+            $(this).parents(".coupon-wrap").find(".coupon-line.l1").show();
+            $(this).parents(".coupon-wrap").find(".coupon-line.l2").show();
+            $(this).parents(".coupon-wrap").find(".coupon-line.l4").show();
+        } else if (1 === value) {
+            $(this).parents(".coupon-wrap").find(".coupon-line.l1").show();
+            $(this).parents(".coupon-wrap").find(".coupon-line.l2").show();
+            $(this).parents(".coupon-wrap").find(".coupon-line.l3").show();
+        } else if (3 === value) {
+            $(this).parents(".coupon-wrap").find(".coupon-line.l0").show();
+            $(this).parents(".coupon-wrap").find(".coupon-line.l1").show();
+            $(this).parents(".coupon-wrap").find(".coupon-line.l2").show();
+        }
+    });
+
+    function cType(id) {
+        $("#couponWrap" + id).find(".productData" + id).hide();
+    }
+
+    // 点击添加供应商
+    function showSelectShop(id) {
+        var url = "${ctx}/coupon/cmCoupon/toAddShop";
+        var title = '';
+        title = "选择供应商";
+        top.$.jBox("iframe:" + url, {
+            iframeScrolling: 'yes',
+            width: $(top.document).width() - 400,
+            height: $(top.document).height() - 160,
+            persistent: true,
+            title: title,
+            buttons: {"确定": '1', "取消": '-1'},
+            submit: function (v, h, f) {
+                //确定
+                var $jboxFrame = top.$('#jbox-iframe');
+                var $mainFrame = top.$('#mainFrame');
+                if ('1' == v && 1 == $jboxFrame.size() && 1 == $mainFrame.size()) {
+                    var items = $jboxFrame[0].contentWindow.getCheckedItems();
+                    console.log(items);
+                    appendShopOrderHead(items, id);
+                }
+                return true;
+            }
+        });
+    }
+
+    function productShow(value, id) {
+        if (value == 2) {
+            $(".productData" + id).show();
+        } else {
+            $(".productData" + id).hide();
+        }
+    }
+
+    //点击添加
+    function showSelectProduct(id) {
+        var url = "${ctx}/coupon/cmCoupon/toAddProduct?productIds=";
+        if (id * 1 === 1) {
+            url += productIds1;
+        }
+        if (id * 1 === 2) {
+            url += productIds2;
+        }
+        if (id * 1 === 3) {
+            url += productIds3;
+        }
+        if (id * 1 === 4) {
+            url += productIds4;
+        }
+        var title = '';
+        title = "选择商品";
+        top.$.jBox("iframe:" + url, {
+            iframeScrolling: 'yes',
+            width: $(top.document).width() - 400,
+            height: $(top.document).height() - 160,
+            persistent: true,
+            title: title,
+            buttons: {"确定": '1', "取消": '-1'},
+            submit: function (v, h, f) {
+                //确定
+                var $jboxFrame = top.$('#jbox-iframe');
+                var $mainFrame = top.$('#mainFrame');
+                if ('1' == v && 1 == $jboxFrame.size() && 1 == $mainFrame.size()) {
+                    var items = $jboxFrame[0].contentWindow.getCheckedItems();
+                    console.log(items);
+                    console.log(items[0]);
+                    for (var i = 0; i < items.length; i++) {
+                        console.log(items[i]);
+                        if (id * 1 === 1) {
+                            imageList1.push(items[i]);
+                        }
+                        if (id * 1 === 2) {
+                            imageList2.push(items[i]);
+                        }
+                        if (id * 1 === 3) {
+                            imageList3.push(items[i]);
+                        }
+                        if (id * 1 === 4) {
+                            imageList4.push(items[i]);
+                        }
+                        $("#couponWrap" + id).find(".contentTableProduct").show();
+                        $(".del").removeAttr("disabled");
+                        batchSaveSort(id);
+                    }
+                    ;
+                }
+                return true;
+            }
+        });
+    }
+
+    //一键排序
+    function batchSaveSort(id) {
+        if (id * 1 === 1) {
+            imageList1.sort(sort);
+            insertHtmlProduct(imageList1, id);
+        }
+        if (id * 1 === 2) {
+            imageList2.sort(sort);
+            insertHtmlProduct(imageList2, id);
+        }
+        if (id * 1 === 3) {
+            imageList3.sort(sort);
+            insertHtmlProduct(imageList3, id);
+        }
+        if (id * 1 === 4) {
+            imageList4.sort(sort);
+            insertHtmlProduct(imageList4, id);
+        }
+
+    }
+
+    //根据sort值 从小到大排序
+    function sort(a, b) {
+        return a.sort - b.sort;
+    }
+
+    //相关图片列表数据
+    function appendProductOrderHead(data, index, id) {
+        var html = '<tr id ="ai' + index + '">' +
+            '<td>' +
+            '<input class="check-item" type="checkbox" name="info" value="' + index + '"/>' + (index + 1) +
+            '</td>' +
+            '<td>' +
+            '<img src="' + data.image + '" width="60px" border="none" title="启用">' +
+            '</td>' +
+            '<td>' +
+            data.productName +
+            '</td>' +
+            '<td>' +
+            data.shopName +
+            '</td>' +
+            '<td>' +
+            (data.pcStatus == 1 ? (
+                '<font color="green">已启用</font>' +
+                '<a href="javascript:void(0);" onclick="updatePcStatus(0,' + index + ',' + id + ');" >' +
+                '停用</a>'
+            ) : (
+                '<font color="red">已停用</font>' +
+                '<a href="javascript:void(0)" onclick="updatePcStatus(1,' + index + ',' + id + ');">' +
+                '启用</a>'
+            )) +
+            '</td>' +
+            '<td>' +
+            (data.appletsStatus == 1 ? (
+                '<font color="green">已启用</font>' +
+                '<a href="javascript:void(0);" onclick="updateAppletsStatus(0,' + index + ',' + id + ');" >' +
+                '停用</a>'
+            ) : (
+                '<font color="red">已停用</font>' +
+                '<a href="javascript:void(0)" onclick="updateAppletsStatus(1,' + index + ',' + id + ');">' +
+                '启用</a>'
+            )) +
+            '</td>' +
+            '<td>' +
+            '<input name="sort" style="width:50px;" value="' + data.sort + '"  onkeyup="onlynum(this)"  onchange="changeSort(' + index + ',this,' + id + ')"></td>' +
+            '</td>' +
+            '<td>' +
+            (data.addTime == '' ? (
+                '<fmt:formatDate value="<%=new Date()%>" pattern="yyyy-MM-dd HH:mm:ss"/>'
+            ) : (
+                data.addTime
+            )) +
+            '</td>' +
+            '<td>' +
+            '<a href="javascript:;" onclick="delect(' + index + ',' + id + ')">删除</a>' +
+            '</td>' +
+            '</tr>';
+        return html;
+    }
+
+    function insertHtmlProduct(list, id) {
+        var html = '';
+        tempIds = '';
+        if (list && list.length > 0) {
+            list.forEach(function (item, index) {
+                html += appendProductOrderHead(item, index, id);
+                tempIds += "," + item.productId;
+            });
+        }
+        if (id * 1 === 1) {
+            productIds1 = tempIds;
+        }
+        if (id * 1 === 2) {
+            productIds2 = tempIds;
+        }
+        if (id * 1 === 3) {
+            productIds3 = tempIds;
+        }
+        if (id * 1 === 4) {
+            productIds4 = tempIds;
+        }
+        $("#couponWrap" + id).find(".hotSearchProduct").html(html);
+    }
+
+    function changeSort(index, sortThis, id) {
+        var sort = sortThis.value;
+        if (sort > 0) {
+            var image;
+            if (id * 1 === 1) {
+                image = imageList1[index];
+            }
+            if (id * 1 === 2) {
+                image = imageList2[index];
+            }
+            if (id * 1 === 3) {
+                image = imageList3[index];
+            }
+            if (id * 1 === 4) {
+                image = imageList4[index];
+            }
+            if (image) {
+                image.sort = sort;
+            }
+        }
+    }
+
+    function updatePcStatus(status, index, id) {
+        var image;
+        if (id * 1 === 1) {
+            image = imageList1[index];
+        }
+        if (id * 1 === 2) {
+            image = imageList2[index];
+        }
+        if (id * 1 === 3) {
+            image = imageList3[index];
+        }
+        if (id * 1 === 4) {
+            image = imageList4[index];
+        }
+        if (image) {
+            confirmx(status == 0 ? '确定停用吗?' : '确定启用吗?', function () {
+                image.pcStatus = status;
+                batchSaveSort(id);
+            });
+        }
+    }
+
+    function updateAppletsStatus(status, index, id) {
+        var image;
+        if (id * 1 === 1) {
+            image = imageList1[index];
+        }
+        if (id * 1 === 2) {
+            image = imageList2[index];
+        }
+        if (id * 1 === 3) {
+            image = imageList3[index];
+        }
+        if (id * 1 === 4) {
+            image = imageList4[index];
+        }
+        if (image) {
+            confirmx(status == 0 ? '确定停用吗?' : '确定启用吗?', function () {
+                image.appletsStatus = status;
+                batchSaveSort(id);
+            });
+        }
+    }
+
+    /**
+     * 批量删除
+     */
+    function batchDeletion(id) {
+        var index = -1;
+        var i = 1;
+        return confirmx("确定删除吗?", function () {
+            $('input[name="info"]:checked').each(function () {
+                var thisIndex = $(this).val();
+                if (index >= 0 && index < thisIndex) {
+                    thisIndex = thisIndex - i;
+                    i++;
+                } else {
+                    index = thisIndex;
+                }
+                var image, tempList;
+                if (id * 1 === 1) {
+                    image = imageList1[index];
+                    if (image.productId != '') {
+                        productIds1 = productIds1.replace(image.productId, "");
+                    }
+                    imageList1.splice(thisIndex, 1);
+                    tempList = imageList1;
+                }
+                if (id * 1 === 2) {
+                    image = imageList2[index];
+                    if (image.productId != '') {
+                        productIds2 = productIds2.replace(image.productId, "");
+                    }
+                    imageList2.splice(thisIndex, 1);
+                    tempList = imageList2;
+                }
+                if (id * 1 === 3) {
+                    image = imageList3[index];
+                    if (image.productId != '') {
+                        productIds3 = productIds3.replace(image.productId, "");
+                    }
+                    imageList3.splice(thisIndex, 1);
+                    tempList = imageList3;
+                }
+                if (id * 1 === 4) {
+                    image = imageList4[index];
+                    if (image.productId != '') {
+                        productIds4 = productIds4.replace(image.productId, "");
+                    }
+                    imageList4.splice(thisIndex, 1);
+                    tempList = imageList4;
+                }
+                insertHtmlProduct(tempList, id);
+                if (tempList.length == 0) {
+                    $("#couponWrap" + id).find('.contentTableProduct').hide();
+                    $(".del").attr("disabled", "disabled");
+                }
+            });
+        });
+    }
+
+    function appendShopOrderHead(data, id) {
+        var html = '<tr>' +
+            '<td>' +
+            data.name +
+            '</td>' +
+            '<td>' +
+            data.sname +
+            '</td>' +
+            '<td>' +
+            data.linkMan +
+            '</td>' +
+            '<td>' +
+            data.contractMobile +
+            '</td>' +
+            '<td>' +
+            '<a href="javascript:;" onclick="delectShop(' + id + ')">删除</a>' +
+            '</td>' +
+            '</tr>';
+        $("#couponWrap" + id).find(".hotSearchShop").html(html);
+        $("#chooseShop" + id).hide();
+        $("#couponWrap" + id).find(".contentTableShop").show();
+        $("#shopId" + id).val(data.shopId);
+    }
+
+    function delectShop(id) {
+        return confirmx("确定删除吗?", function () {
+            $("#chooseShop" + id).show();
+            $("#couponWrap" + id).find(".contentTableShop").hide();
+            $("#shopId" + id).val("");
+        });
+    }
+
+    /**
+     * 删除操作
+     */
+    function delect(index, id) {
+        return confirmx("确定删除吗?", function () {
+            var image;
+            if (id * 1 === 1) {
+                image = imageList1[index];
+                if (image.productId != '') {
+                    productIds1 = productIds1.replace(image.productId, "");
+                }
+                imageList1.splice(index, 1);
+                insertHtmlProduct(imageList1, id);
+                if (imageList1.length == 0) {
+                    $("#couponWrap" + id).find('#contentTableProduct').hide();
+                    $(".del").attr("disabled", "disabled");
+                }
+            }
+            if (id * 1 === 2) {
+                image = imageList2[index];
+                if (image.productId != '') {
+                    productIds2 = productIds2.replace(image.productId, "");
+                }
+                imageList2.splice(index, 1);
+                insertHtmlProduct(imageList2, id);
+                if (imageList2.length == 0) {
+                    $("#couponWrap" + id).find('#contentTableProduct').hide();
+                    $(".del").attr("disabled", "disabled");
+                }
+            }
+            if (id * 1 === 3) {
+                image = imageList3[index];
+                if (image.productId != '') {
+                    productIds3 = productIds3.replace(image.productId, "");
+                }
+                imageList3.splice(index, 1);
+                insertHtmlProduct(imageList3, id);
+                if (imageList3.length == 0) {
+                    $("#couponWrap" + id).find('#contentTableProduct').hide();
+                    $(".del").attr("disabled", "disabled");
+                }
+            }
+            if (id * 1 === 4) {
+                image = imageList4[index];
+                if (image.productId != '') {
+                    productIds4 = productIds4.replace(image.productId, "");
+                }
+                imageList4.splice(index, 1);
+                insertHtmlProduct(imageList4, id);
+                if (imageList4.length == 0) {
+                    $("#couponWrap" + id).find('#contentTableProduct').hide();
+                    $(".del").attr("disabled", "disabled");
+                }
+            }
+        });
+    }
+
+
+    function clickAllSelect(ckb) {
+        var isChecked = ckb.checked;
+        $(".check-item").attr('checked', isChecked);
+    }
+
+    /**
+     * @param obj
+     * jquery控制input只能输入数字
+     */
+    function onlynum(obj) {
+        obj.value = obj.value.replace(/[^\d]/g, ""); //清除"数字"以外的字符
+    }
+
+</script>
+</body>
+</html>

+ 408 - 0
src/main/webapp/static/content-edit.js

@@ -0,0 +1,408 @@
+/** 生成uuid的方法 */
+function uuid(len = 16, radix = 16) {
+  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
+  const value = []
+  let i = 0
+  radix = radix || chars.length
+  if (len) {
+      for (i = 0; i < len; i++) value[i] = chars[0 | (Math.random() * radix)]
+  } else {
+      let r
+      value[8] = value[13] = value[18] = value[23] = '-'
+      value[14] = '4'
+      for (i = 0; i < 36; i++) {
+          if (!value[i]) {
+              r = 0 | (Math.random() * 16)
+              value[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r]
+          }
+      }
+  }
+  return value.join('')
+}
+
+class ContentEdit {
+  constructor(options) {
+      this.options = {
+          markCountKey: 'markCount',
+          ...options
+      }
+      if(typeof this.options.el === 'string'){
+          this.container = document.querySelector(this.options.el)
+      }else{
+          this.container = this.options.el
+      }
+      this.hiddenMark = options.hiddenMark
+      this.selection = null
+      this.range = null
+      this.ctrid = '' // 当前标记id
+      this.ctridList = []
+      this.registEventListener()
+      this.initCtridList()
+  }
+
+  get innerHTML() {
+      return this.container.innerHTML
+  }
+
+  /** 开始节点 */
+  get startContainer() {
+      return this.isTextNode(this.range.startContainer) ? this.range.startContainer : this.range.endContainer
+  }
+
+  /** 结束节点 */
+  get endContainer() {
+      return this.isTextNode(this.range.endContainer) ? this.range.endContainer : this.range.startContainer
+  }
+
+  /** 选中文本类容 */
+  get selectionText() {
+      return this.selection.toString()
+  }
+
+  /** 开始节点与结束接单公共父节点 */
+  get commonNode() {
+      return this.isTextNode(this.range.commonAncestorContainer)
+          ? this.range.commonAncestorContainer.parentNode
+          : this.range.commonAncestorContainer
+  }
+
+  /** 开始节点的最外层节点 */
+  get startNode() {
+      return this.getTopNode(this.commonNode, this.startContainer)
+  }
+
+  /** 结束节点的最外层节点 */
+  get endNode() {
+      return this.getTopNode(this.commonNode, this.endContainer)
+  }
+
+  /** 开始节点与结束节点之间的节点列表 */
+  get centerNodes() {
+      if (this.startNode === this.endNode) return []
+      if (this.startNode.nextSibling === this.endNode) return []
+      return this.nextUntil(this.startNode, this.endNode)
+  }
+
+  initCtridList(){
+      const nodeList = this.container.querySelectorAll('.scapegoat')
+      nodeList.forEach((node) => {
+          const id = node.getAttribute('data-ctrid')
+          if (!this.ctridList.includes(id)){
+              this.ctridList.push(id)
+          }
+      })
+  }
+
+  /** 文本选中变动 */
+  selectionChange() {
+      this.selection = document.getSelection()
+      if (this.selection.type.toLowerCase() !== 'range') return
+      this.range = this.selection.getRangeAt(0)
+  }
+
+  /** 包裹 */
+  parcel(ctrid, index) {
+      this.ctrid = ctrid ? ctrid : uuid()
+      this.markNum = index
+      this.ctridList.push(this.ctrid)
+      try {
+          this.parcelNode(this.commonNode, this.centerNodes)
+          this.parcelStartNode(this.startContainer)
+          this.parcelEndNode(this.endContainer)
+          this.parcelNodeContent()
+          this.selection.removeAllRanges()
+          this.options.change && this.options.change(this.innerHTML)
+          return this.ctrid
+      } catch (e) {
+          return this.ctrid
+      }
+  }
+
+  /** 包裹元素 */
+  parcelNode(container, nodeList = []) {
+      if (nodeList.length === 0) return
+      const parcel = this.createParcel()
+      container.insertBefore(parcel, nodeList[0])
+      nodeList.forEach((node) => {
+          container.removeChild(node)
+          parcel.appendChild(node)
+      })
+  }
+
+  /** 包裹开始元素 */
+  parcelStartNode(node) {
+      if (node === this.commonNode) return
+      if (node === this.startNode) return
+      this.parcelNode(node.parentNode, this.nextAll(node))
+      this.parcelStartNode(node.parentNode)
+  }
+
+  /** 包裹结束元素 */
+  parcelEndNode(node) {
+      if (node === this.commonNode) return
+      if (node === this.endNode) return
+      this.parcelNode(node.parentNode, this.prevAll(node))
+      this.parcelEndNode(node.parentNode)
+  }
+
+  /** 包裹开始结束节点内容 */
+  parcelNodeContent() {
+      const mark = this.createMark()
+      // 开始节点与结束节点相同
+      if (this.startContainer === this.endContainer) {
+          const prefixText = this.startContainer.nodeValue.substring(0, this.range.startOffset)
+          const centerText = this.startContainer.nodeValue.substring(this.range.startOffset, this.range.endOffset)
+          const suffixText = this.startContainer.nodeValue.substring(this.range.endOffset)
+          const prefix = document.createTextNode(prefixText)
+          const suffix = document.createTextNode(suffixText)
+          const parcel = this.createParcel()
+          parcel.innerText = centerText
+          const fragment = this.createFragment([prefix, parcel, mark, suffix])
+          this.startContainer.parentNode.replaceChild(fragment, this.startContainer)
+      } else {
+          // 开始节点
+          const prefixText = this.startContainer.nodeValue.substring(0, this.range.startOffset)
+          const startText = this.startContainer.nodeValue.substring(this.range.startOffset)
+          const prefix = document.createTextNode(prefixText)
+          const startSpan = this.createParcel()
+          startSpan.innerText = startText
+          const startFragment = this.createFragment([prefix, startSpan])
+          this.startContainer.parentNode.replaceChild(startFragment, this.startContainer)
+          // 结束节点
+          const endText = this.endContainer.nodeValue.substring(0, this.range.endOffset)
+          const suffixText = this.endContainer.nodeValue.substring(this.range.endOffset)
+          const suffix = document.createTextNode(suffixText)
+          const endSpan = this.createParcel()
+          endSpan.innerText = endText
+          const endFragment = this.createFragment([endSpan, mark, suffix])
+          this.endContainer.parentNode.replaceChild(endFragment, this.endContainer)
+      }
+  }
+
+  /** 标记清除 */
+  unParcel(ctrid) {
+      this.ctridList = this.ctridList.filter((item) => item !== ctrid)
+      const nodeList = this.container.querySelectorAll('.scapegoat')
+      nodeList.forEach((node) => {
+          const id = node.getAttribute('data-ctrid')
+          if (id !== ctrid) return
+          const parentNode = node.parentNode
+          if (node.nodeName === 'IMG') {
+              parentNode.removeChild(node)
+          } else if (node.nodeName === 'SPAN') {
+              const fragment = this.createFragment(node.childNodes)
+              parentNode.replaceChild(fragment, node)
+          }
+          // 清除空节点
+          parentNode.normalize()
+      })
+      this.options.change && this.options.change(this.innerHTML)
+      this.ctridList = this.ctridList.filter(item => item !== ctrid)
+  }
+
+  /** 创建标记 */
+  createMark() {
+      if (this.hiddenMark) return document.createDocumentFragment()
+      const img = document.createElement('img')
+      const index = this.markNum || window[this.options.markCountKey]
+      img.classList.add('scapegoat')
+      img.setAttribute('height', 20)
+      img.setAttribute('data-ctrid', this.ctrid)
+      img.setAttribute('src', `https://baikebcs.bdimg.com/cms/wiki-react-editor/ref/${index}.svg`)
+      img.addEventListener('mouseover', (e) => this.markMouseOver(e))
+      img.addEventListener('mouseleave', (e) => this.markMouseLeave(e))
+      // img.addEventListener('click', (e) => this.markMouseClick(e))
+      return img
+  }
+
+  /** 创建片段 */
+  createFragment(chidlren = []) {
+      const fragment = document.createDocumentFragment()
+      chidlren.forEach((node) => {
+          fragment.appendChild(node)
+      })
+      return fragment
+  }
+
+  /** 鼠标放在标记上 */
+  markMouseOver(e) {
+      const ctrid = e.target.getAttribute('data-ctrid')
+      const nodeList = document.querySelectorAll('.scapegoat')
+      nodeList.forEach((node) => {
+          const id = node.getAttribute('data-ctrid')
+          if (id === ctrid) {
+              node.classList.add('hover')
+          }
+      })
+  }
+
+  /** 鼠标从标记上移开 */
+  markMouseLeave(e) {
+      const ctrid = e.target.getAttribute('data-ctrid')
+      const nodeList = document.querySelectorAll('.scapegoat')
+      nodeList.forEach((node) => {
+          const id = node.getAttribute('data-ctrid')
+          if (id === ctrid) {
+              node.classList.remove('hover')
+          }
+      })
+  }
+
+  /* 注册事件监听 */
+  registEventListener() {
+      // 获取文本选中
+      this.container.addEventListener('focus', () => {
+          document.addEventListener('selectionchange', () => this.selectionChange())
+      })
+      this.container.addEventListener('blur', () => {
+          this.options.change && this.options.change(this.innerHTML)
+          document.removeEventListener('selectionchange', () => this.selectionChange())
+      })
+  }
+
+  /** 获取节点元素 */
+  getTopNode(parent, node) {
+      if (parent === node.parentNode) return node
+      return this.getTopNode(parent, node.parentNode)
+  }
+
+  /** 开始节点与结束节点之间的节点列表 */
+  nextUntil(startNode, endNode) {
+      if (startNode.nextSibling === endNode) return []
+      return [startNode.nextSibling, ...this.nextUntil(startNode.nextSibling, endNode)]
+  }
+
+  /** 获取紧接着之后兄弟节点 */
+  nextAll(node) {
+      if (!node.nextSibling) return []
+      return [node.nextSibling, ...this.nextAll(node.nextSibling)]
+  }
+
+  /** 获取紧接着之前的兄弟节点 */
+  prevAll(node) {
+      if (!node.previousSibling) return []
+      return [node.previousSibling, ...this.prevAll(node.previousSibling)]
+  }
+
+  /** 是文本节点 */
+  isTextNode(node) {
+      return node.nodeType === 3
+  }
+
+  /** 创建包裹元素 */
+  createParcel() {
+      const parcel = document.createElement('span')
+      parcel.classList.add('scapegoat')
+      parcel.setAttribute('data-ctrid', this.ctrid)
+      return parcel
+  }
+}
+
+class ContentEditInput {
+    constructor(options) {
+        this.options = {
+            el: '.content-edit',
+            markCountKey: 'markCount',
+            bubbleSize: options.bubbleSize || 0,
+            initValue: options.initValue || '',
+            toolbarClick: () => {},
+            referenceEdit: () => {},
+            ...options,
+        }
+        this.createElement()
+        this.addEventListener()
+        this.edit = new ContentEdit({
+            el: this.input[0],
+            change: (html) => {
+                this.realInput.attr('value', html)
+            },
+        })
+        if(this.edit){
+            this.setBubbleNum(this.edit.ctridList.length)
+        }
+    }
+
+    setBubbleNum(num) {
+        this.options.bubbleSize = num
+        this.options.bubbleSize > 0 ? this.bubble.show() : this.bubble.hide()
+        this.bubble.text(this.options.bubbleSize)
+    }
+
+    createElement() {
+        this.container = $(this.options.el)
+        this.toolbar = $('<div class="bk-toolbar">[&nbsp;|&nbsp;]</div>')
+        this.toolbar.hide()
+        this.bubble = $('<div class="bk-bubble"></div>')
+        this.setBubbleNum(this.options.bubbleSize)
+        this.input = $('<div class="bk-input" contenteditable="plaintext-only"></div>')
+        this.realInput = $('<input type="text"/>')
+        if (this.container.attr('name')) {
+            this.realInput.attr('name', this.container.attr('name'))
+            this.container.attr('name', '')
+        }
+        this.realInput.hide()
+        if (this.options.initValue) {
+            this.input.html(this.options.initValue)
+            this.realInput.attr('value', this.options.initValue)
+        }
+        this.literature = $('<ul class="bk-literature"></ul>')
+        this.literature.hide()
+        this.container.append([this.toolbar, this.bubble, this.input, this.realInput, this.literature])
+    }
+
+    addLiteratureItem(ctrid, text) {
+        const literatureItem = $('<li></li>')
+        const content = $('<div class="bk-literature-content"></div>')
+        content.append(text)
+        const control = $('<div class="bk-literature-control"></div>')
+        const editBtn = $('<span>编辑</span>')
+        editBtn.attr('data-id', ctrid)
+        const deleteBtn = $('<span>删除</span>')
+        deleteBtn.attr('data-id', ctrid)
+        control.append([editBtn, deleteBtn])
+        literatureItem.append([content, control])
+        this.literature.append(literatureItem)
+        editBtn.on('click', () => {
+            this.options.referenceEdit(editBtn.attr('data-id'))
+        })
+        deleteBtn.on('click', () => {
+            this.edit.unParcel(editBtn.attr('data-id'))
+            literatureItem.remove()
+            this.setBubbleNum(this.edit.ctridList.length)
+        })
+    }
+
+    confirm(text, ctrlId, index) {
+        const ctrid = this.edit.parcel(ctrlId, index)
+        this.addLiteratureItem(ctrid, text)
+        this.setBubbleNum(this.edit.ctridList.length)
+        return ctrid
+    }
+
+    addEventListener() {
+        this.toolbar.on('click', this.toolbarClick)
+        this.bubble.on('click', this.bubbleClick)
+        this.input.on('focus', this.inputFocus)
+        this.input.on('blur', this.inputBlur)
+        $(window).on('click', (e) => {
+            if (this.literature[0].contains(e.target) || this.bubble[0].contains(e.target)) return
+            this.literature.hide()
+        })
+    }
+
+    inputFocus = () => {
+        this.toolbar.fadeIn(200)
+    }
+
+    inputBlur = () => {
+        this.toolbar.fadeOut(200)
+    }
+
+    toolbarClick = () => {
+        this.options.toolbarClick(this)
+    }
+
+    bubbleClick = () => {
+        this.literature.toggle()
+    }
+}