Преглед изворни кода

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

zhijiezhao пре 3 година
родитељ
комит
8122b02c4f
25 измењених фајлова са 784 додато и 86 уклоњено
  1. 10 0
      src/main/java/com/caimei/modules/bulkpurchase/entity/CmClub.java
  2. 9 0
      src/main/java/com/caimei/modules/order/entity/OrderUserInfo.java
  3. 5 0
      src/main/java/com/caimei/modules/svip/dao/CmSvipProductDao.java
  4. 43 0
      src/main/java/com/caimei/modules/svip/entity/CmSvipProductAdsImage.java
  5. 11 0
      src/main/java/com/caimei/modules/svip/service/CmSvipProductService.java
  6. 28 0
      src/main/java/com/caimei/modules/svip/web/CmSvipProductController.java
  7. 4 2
      src/main/resources/mappings/modules/bulkpurchase/CmClubMapper.xml
  8. 2 1
      src/main/resources/mappings/modules/order/OrderUserInfoMapper.xml
  9. 14 1
      src/main/resources/mappings/modules/svip/CmSvipProductMapper.xml
  10. 1 1
      src/main/webapp/WEB-INF/views/include/head.jsp
  11. 1 1
      src/main/webapp/WEB-INF/views/modules/bulkpurchase/cmClubListBox.jsp
  12. 2 2
      src/main/webapp/WEB-INF/views/modules/order/orderDetail.jsp
  13. 1 1
      src/main/webapp/WEB-INF/views/modules/order/orderForm.jsp
  14. 195 0
      src/main/webapp/WEB-INF/views/modules/svip/cmSvipProductAdsImageForm.jsp
  15. 11 2
      src/main/webapp/WEB-INF/views/modules/svip/cmSvipProductForm.jsp
  16. 1 1
      src/main/webapp/WEB-INF/views/modules/svip/cmSvipProductList.jsp
  17. 212 70
      src/main/webapp/WEB-INF/views/modules/sys/sysLogin.jsp
  18. 1 1
      src/main/webapp/static/jerichotab/index.html
  19. 1 1
      src/main/webapp/static/jqGrid/4.6/demo/jqgrid.html
  20. 1 1
      src/main/webapp/static/jquery-select2/3.4/index.html
  21. 1 0
      src/main/webapp/static/jquery/jquery-3.4.1.min.js
  22. 0 0
      src/main/webapp/static/jquery/jquery-3.5.0.js
  23. 0 1
      src/main/webapp/static/jquery/jquery-3.5.0.min.js
  24. 1 0
      src/main/webapp/static/modules/bulkpurchase/orderForm.js
  25. 229 0
      src/main/webapp/static/slideVerify/slideVerify.js

+ 10 - 0
src/main/java/com/caimei/modules/bulkpurchase/entity/CmClub.java

@@ -99,6 +99,8 @@ public class CmClub extends DataEntity<CmClub> {
 	private String city; // 市
 	private String province; //省
 
+	private Integer svipFlag;	//超级会员标识:1是,2不是
+
 
 	public CmClub() {
 		super();
@@ -745,4 +747,12 @@ public class CmClub extends DataEntity<CmClub> {
 	public void setAbleUserMoney(Double ableUserMoney) {
 		this.ableUserMoney = ableUserMoney;
 	}
+
+	public Integer getSvipFlag() {
+		return svipFlag;
+	}
+
+	public void setSvipFlag(Integer svipFlag) {
+		this.svipFlag = svipFlag;
+	}
 }

+ 9 - 0
src/main/java/com/caimei/modules/order/entity/OrderUserInfo.java

@@ -27,6 +27,7 @@ public class OrderUserInfo extends DataEntity<OrderUserInfo> {
 	private String address;		// 收货地址
 	private Double userMoney;	//账户余额
 	private Double ableUserMoney;	//可用余额
+	private Integer svipFlag;	//超级会员标识:1是,2不是
 
 	public OrderUserInfo() {
 		super();
@@ -158,4 +159,12 @@ public class OrderUserInfo extends DataEntity<OrderUserInfo> {
 	public void setAbleUserMoney(Double ableUserMoney) {
 		this.ableUserMoney = ableUserMoney;
 	}
+
+	public Integer getSvipFlag() {
+		return svipFlag;
+	}
+
+	public void setSvipFlag(Integer svipFlag) {
+		this.svipFlag = svipFlag;
+	}
 }

+ 5 - 0
src/main/java/com/caimei/modules/svip/dao/CmSvipProductDao.java

@@ -1,6 +1,7 @@
 package com.caimei.modules.svip.dao;
 
 import com.caimei.modules.product.entity.Product;
+import com.caimei.modules.svip.entity.CmSvipProductAdsImage;
 import com.thinkgem.jeesite.common.persistence.CrudDao;
 import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
 import com.caimei.modules.svip.entity.CmSvipProduct;
@@ -21,4 +22,8 @@ public interface CmSvipProductDao extends CrudDao<CmSvipProduct> {
     List<Product> findAllProduct(Product product);
 
     void saveSort(@Param("sort") String sort, @Param("id") String id);
+
+    CmSvipProductAdsImage getAdsImage();
+
+    void saveAdsImage(CmSvipProductAdsImage adsImage);
 }

+ 43 - 0
src/main/java/com/caimei/modules/svip/entity/CmSvipProductAdsImage.java

@@ -0,0 +1,43 @@
+package com.caimei.modules.svip.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.thinkgem.jeesite.common.persistence.DataEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 超级会员优惠商品Entity
+ * @author Aslee
+ * @version 2021-09-23
+ */
+public class CmSvipProductAdsImage extends DataEntity<CmSvipProductAdsImage> {
+
+	private static final long serialVersionUID = 1L;
+	private String pcImage;
+	private String appletsImage;
+
+	public CmSvipProductAdsImage() {
+		super();
+	}
+
+	public CmSvipProductAdsImage(String id){
+		super(id);
+	}
+
+	public String getPcImage() {
+		return pcImage;
+	}
+
+	public void setPcImage(String pcImage) {
+		this.pcImage = pcImage;
+	}
+
+	public String getAppletsImage() {
+		return appletsImage;
+	}
+
+	public void setAppletsImage(String appletsImage) {
+		this.appletsImage = appletsImage;
+	}
+}

+ 11 - 0
src/main/java/com/caimei/modules/svip/service/CmSvipProductService.java

@@ -1,8 +1,10 @@
 package com.caimei.modules.svip.service;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 import com.caimei.modules.product.entity.Product;
+import com.caimei.modules.svip.entity.CmSvipProductAdsImage;
 import com.caimei.utils.AppUtils;
 import com.caimei.utils.StringUtil;
 import com.thinkgem.jeesite.common.config.Global;
@@ -86,4 +88,13 @@ public class CmSvipProductService extends CrudService<CmSvipProductDao, CmSvipPr
 	public void saveSort(String sort, String id) {
 		cmSvipProductDao.saveSort(sort, id);
 	}
+
+	public CmSvipProductAdsImage getAdsImage() {
+		return cmSvipProductDao.getAdsImage();
+	}
+
+	@Transactional(readOnly = false)
+	public void saveAdsImage(CmSvipProductAdsImage adsImage) {
+		cmSvipProductDao.saveAdsImage(adsImage);
+	}
 }

+ 28 - 0
src/main/java/com/caimei/modules/svip/web/CmSvipProductController.java

@@ -3,7 +3,10 @@ package com.caimei.modules.svip.web;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.caimei.modules.live.entity.NewPageLiveAdvertisingImage;
 import com.caimei.modules.product.entity.Product;
+import com.caimei.modules.svip.entity.CmSvipProductAdsImage;
+import com.caimei.utils.MathUtil;
 import com.google.common.collect.Maps;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -61,6 +64,10 @@ public class CmSvipProductController extends BaseController {
 	@RequestMapping(value = "form")
 	public String form(CmSvipProduct cmSvipProduct, Model model) {
 		model.addAttribute("cmSvipProduct", cmSvipProduct);
+		if ("2".equals(cmSvipProduct.getCostCheckFlag())) {
+			BigDecimal mul = MathUtil.mul(cmSvipProduct.getPrice(), new BigDecimal(cmSvipProduct.getCostProportional()));
+			cmSvipProduct.setCostPrice(MathUtil.mul(mul, new BigDecimal(0.01d)).toString());
+		}
 		return "modules/svip/cmSvipProductForm";
 	}
 
@@ -131,4 +138,25 @@ public class CmSvipProductController extends BaseController {
 			return map;
 		}
 	}
+
+	@RequestMapping(value = "adsImageForm")
+	public String adsImageForm(Model model){
+		CmSvipProductAdsImage cmSvipProductAdsImage = cmSvipProductService.getAdsImage();
+		model.addAttribute("adsImage", cmSvipProductAdsImage);
+		return "modules/svip/cmSvipProductAdsImageForm";
+	}
+
+	@RequestMapping(value = "saveAdsImage")
+	public String saveAdsImage(CmSvipProductAdsImage adsImage, Model model, RedirectAttributes redirectAttributes) {
+		if (StringUtils.isEmpty(adsImage.getPcImage())) {
+			model.addAttribute("errorMsg", "请上传PC端宣传图");
+			return adsImageForm(model);
+		} else if (StringUtils.isEmpty(adsImage.getAppletsImage())) {
+			model.addAttribute("errorMsg", "请上传小程序端宣传图");
+			return adsImageForm(model);
+		}
+		cmSvipProductService.saveAdsImage(adsImage);
+		addMessage(redirectAttributes, "保存成功");
+		return "redirect:"+Global.getAdminPath()+"/svip/cmSvipProduct/?repage";
+	}
 }

+ 4 - 2
src/main/resources/mappings/modules/bulkpurchase/CmClubMapper.xml

@@ -128,13 +128,15 @@
 
     <select id="findList" resultType="CmClub">
 		SELECT
-		 <include refid="cmClubColumns"/>
-		,d.name province,c.name city,b.name town,f.userMoney userMoney,f.ableUserMoney ableUserMoney
+		<include refid="cmClubColumns"/>
+		,d.name province,c.name city,b.name town,f.userMoney userMoney,f.ableUserMoney ableUserMoney,
+		if(csu.id is not null,1,0) as svipFlag
 		FROM club a
 		LEFT JOIN town b ON b.townID=a.townID
 		LEFT JOIN city c ON c.cityID=b.cityID
 		LEFT JOIN province d ON d.provinceID=c.provinceID
 		LEFT JOIN user f on a.userID = f.userID
+		LEFT JOIN cm_svip_user csu on a.userID = csu.userId and now() <![CDATA[ < ]]> csu.endTime and csu.delFlag = '0'
 		<where>
 
             <if test="id != null and id != ''">

+ 2 - 1
src/main/resources/mappings/modules/order/OrderUserInfoMapper.xml

@@ -21,10 +21,11 @@
 
     <select id="findByOrderID" resultType="OrderUserInfo">
         SELECT <include refid="columns"/>,
-			c.userMoney as userMoney,c.ableUserMoney as ableUserMoney
+			c.userMoney as userMoney,c.ableUserMoney as ableUserMoney,if(csu.id is not null,1,0) as svipFlag
         FROM bp_order_userinfo a
 		LEFT JOIN cm_order b on a.orderId = b.orderID
 		LEFT JOIN user c on b.userID = c.userID
+		LEFT JOIN cm_svip_user csu on a.userID = csu.userId and now() <![CDATA[ < ]]> csu.endTime and csu.delFlag = '0'
 		WHERE a.orderId = #{orderID}
     </select>
 

+ 14 - 1
src/main/resources/mappings/modules/svip/CmSvipProductMapper.xml

@@ -88,6 +88,10 @@
         FROM product a
         LEFT JOIN shop s on s.shopID = a.shopID
         <where>
+            a.validFlag = '2' and a.productID not in (
+            select productId from cm_promotions_product cpp left join
+            cm_promotions cp on cpp.promotionsId = cp.id where cp.delFlag != '2')
+            and a.ladderPriceFlag = '0' and price1TextFlag != '1'
             <if test="productID != null">
                 AND a.productID = #{productID}
             </if>
@@ -113,6 +117,9 @@
             </otherwise>
         </choose>
     </select>
+    <select id="getAdsImage" resultType="com.caimei.modules.svip.entity.CmSvipProductAdsImage">
+        select id,pcImage,appletsImage from cm_svip_product_adsimage limit 1
+    </select>
 
     <insert id="insert" parameterType="CmSvipProduct" keyProperty="id" useGeneratedKeys="true">
         INSERT INTO cm_svip_product(productId,
@@ -142,8 +149,14 @@
 			sort = #{sort}
 		WHERE id = #{id}
 	</update>
+    <update id="saveAdsImage">
+        update cm_svip_product_adsimage
+        set pcImage      = #{pcImage},
+            appletsImage = #{appletsImage}
+        where id = 1
+    </update>
 
-	<delete id="delete">
+    <delete id="delete">
         DELETE
         FROM cm_svip_product
         WHERE id = #{id}

+ 1 - 1
src/main/webapp/WEB-INF/views/include/head.jsp

@@ -1,7 +1,7 @@
 <%@ page contentType="text/html;charset=UTF-8" %><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><meta name="author" content="http://jeesite.com/"/>
 <meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=8,IE=9,IE=10" />
 <meta http-equiv="Expires" content="0"><meta http-equiv="Cache-Control" content="no-cache"><meta http-equiv="Cache-Control" content="no-store">
-<script src="${ctxStatic}/jquery/jquery-1.8.3.min.js" type="text/javascript"></script>
+<script src="${ctxStatic}/jquery/jquery-3.5.0.min.js" type="text/javascript"></script>
 <link href="${ctxStatic}/bootstrap/2.3.1/css_${not empty cookie.theme.value ? cookie.theme.value : 'cerulean'}/bootstrap.min.css" type="text/css" rel="stylesheet" />
 <script src="${ctxStatic}/bootstrap/2.3.1/js/bootstrap.min.js" type="text/javascript"></script>
 <script src="${ctxStatic}/bootstrap/2.3.1/js/bootstrap-typeahead.js" type="text/javascript" charset="utf-8"></script>

+ 1 - 1
src/main/webapp/WEB-INF/views/modules/bulkpurchase/cmClubListBox.jsp

@@ -67,7 +67,7 @@
 					${cmClub.id}
 				</td>
 				<td>
-					${cmClub.name}
+					${cmClub.name}<font color="red" style="margin-left: 10px">${cmClub.svipFlag eq 1?'(超级会员)':''}</font>
 				</td>
 					<td style="display: none"> ${cmClub.defaultAddress.postalCode}</td>
 				<td style="display: none">${cmClub.defaultAddress.address}</td>

+ 2 - 2
src/main/webapp/WEB-INF/views/modules/order/orderDetail.jsp

@@ -187,8 +187,8 @@
                 </c:if>
             </td>
         </c:if>
-        <td>机构:${order.buyer}<c:if test="${order.organizeID >= 3}"><label style="margin-left: 20px">门店:${order.organizeStoreName}</label> </c:if></td>
-
+        <td>机构:${order.buyer}<font id="svipFlagLabel" style="margin-left:10px" color="red">${order.bpOrderUserinfo.svipFlag eq 1?'(超级会员)':''}</font>
+            <c:if test="${order.organizeID >= 3}"><label style="margin-left: 20px">门店:${order.organizeStoreName}</label> </c:if></td>
         <td>收货人: ${order.bpOrderUserinfo.shouHuoRen}</td>
     </tr>
     <tr>

+ 1 - 1
src/main/webapp/WEB-INF/views/modules/order/orderForm.jsp

@@ -76,7 +76,7 @@
       <tr>
         <td>买家</td>
         <td>
-          <form:input path="bpOrderUserinfo.name" readonly="true" cssClass="input-xlarge" />
+          <form:input path="bpOrderUserinfo.name" readonly="true" cssClass="input-xlarge" /><font id="svipFlagLabel" style="margin-left:10px" color="red">${newOrder.bpOrderUserinfo.svipFlag eq 1?'(超级会员)':''}</font>
         </td>
         <td>收货人
           <span class="help-inline">

+ 195 - 0
src/main/webapp/WEB-INF/views/modules/svip/cmSvipProductAdsImageForm.jsp

@@ -0,0 +1,195 @@
+<%@ 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>
+		.iconBox{
+			font-size: 0;
+		}
+		.controls .conList{
+			display: inline-block;
+			margin-right: 15px;
+		}
+		.conList .btn:nth-of-type(1){
+			margin-left: 25px;
+		}
+		.select2-choice{
+			width: 100px;
+		}
+		.upload-content {
+			margin-top: -70px;
+		}
+		.upload-content .conList .btn:nth-of-type(1) {
+            width: 90px;
+            height: 100px;
+            border: 2px solid #eee;
+            background: #fff;
+            position: relative;
+        }
+		.upload-content .conList .btn:nth-of-type(1)>div {
+			position: absolute;
+			top: 50%;
+			left: 50%;
+			transform: translate(-50%, -50%);
+			color: #666;
+		}
+		.upload-content .conList .btn:nth-of-type(1) span {
+			font-size: 35px;
+		}
+		.upload-content .conList .btn:nth-of-type(1) h5 {
+			color: #666;
+		}
+		.cancel-upload {
+			background: transparent;
+			border: none;
+			box-shadow: none;
+			position: relative;
+			top: -38px;
+			left: -25px;
+			cursor: pointer;
+			z-index: 100;
+		}
+		 .upload-content .conList ol li {
+            width: 114px;
+            min-height: 80px;
+            text-align: center;
+            background: #fff;
+            position: relative;
+            top: 120px;
+            margin-left: 2px;
+        }
+		.hide-pic {
+			display: none !important;
+		}
+	</style>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			$("#inputForm").validate({
+				submitHandler: function(form){
+					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);
+					}
+				}
+			});
+		});
+
+
+		//错误提示
+		var errorMsg  = "${errorMsg}";
+		if(errorMsg){
+			alertx(errorMsg);
+		}
+	</script>
+</head>
+<body>
+	<ul class="nav nav-tabs">
+		<li><a href="${ctx}/svip/cmSvipProduct/">商品列表</a></li>
+		<li class="active"><a href="${ctx}/svip/cmSvipProduct/adsImageForm">宣传图</a></li>
+	</ul><br/>
+	<form:form id="inputForm" modelAttribute="adsImage" action="${ctx}/svip/cmSvipProduct/saveAdsImage" method="post" class="form-horizontal">
+<%--		<form:hidden path="id"/>--%>
+		<sys:message content="${message}"/>
+		<div class="control-group iconBox">
+			<label class="control-label"><font color="red">*</font>PC端宣传图:</label>
+			<div class="controls upload-content" id="pcImageBox">
+				<div class="conList">
+					<form:hidden id="pcImage" path="pcImage" htmlEscape="false" maxlength="255" class="input-xlarge required"/>
+					<sys:ckfinder input="pcImage" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+					<br>
+					<label style="margin-left: 150px">建议图片分辨率750px*750px</label>
+				</div>
+			</div>
+		</div>
+		<div class="control-group iconBox">
+			<label class="control-label"><font color="red">*</font>小程序端宣传图:</label>
+			<div class="controls upload-content" id="appletsImageBox">
+				<div class="conList">
+					<form:hidden id="appletsImage" path="appletsImage" htmlEscape="false" maxlength="255" class="input-xlarge required"/>
+					<sys:ckfinder input="appletsImage" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+					<br>
+					<label style="margin-left: 150px">建议图片分辨率750px*750px</label>
+				</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>
+		$(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 observeEle = document.getElementsByClassName('upload-content')[0];
+			var observeEle1 = document.getElementsByClassName('upload-content')[1];
+			var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
+			var MutationObserverConfig = {
+				childList: true,
+				subtree: true,
+				characterData: true
+			};
+			var observer = new MutationObserver(function (mutations) {
+				$.each(mutations, function (index, item) {
+					if (item.type === 'childList') {
+						// 在创建新的 element 时调用
+						var target = $(item.target),
+								thisWrapper = target.closest('.conList'),
+								nextEle = thisWrapper.next();
+						thisWrapper.find('li').css('z-index', 99);
+						thisWrapper.find('.cancel-upload').show();
+						if (nextEle.hasClass('hide-pic')) {
+							nextEle.removeClass('hide-pic');
+						}
+					}
+				})
+			});
+			observer.observe(observeEle, MutationObserverConfig);
+			observer.observe(observeEle1, MutationObserverConfig);
+
+			$('body').on('click', '.cancel-upload', function () {
+				var wrapper = $(this).closest('.conList');
+				wrapper.find('li').css('z-index', '-1');
+				wrapper.find('input').val('');
+				$(this).hide();
+				wrapper.removeClass("hide-pic");
+				wrapper.parent().append(wrapper.clone());
+				wrapper.remove();
+				$(".conList").each(function (i, ele) {
+					if ($(ele).find("input.input-xlarge").val()) {
+						$(ele).next().removeClass("hide-pic")
+					}
+				})
+			});
+			$(window).on("load", function () {
+				setTimeout(function () {
+					$("#pcImageBox").find("input.input-xlarge").each(function (i, ele) {
+						if ($(ele).val()) {
+							$(ele).next().find("li").css("z-index", "99");
+							$(ele).parents(".conList").find(".cancel-upload").show();
+							$(ele).parents(".conList").next().removeClass("hide-pic")
+						}
+					})
+					$("#appletsImageBox").find("input.input-xlarge").each(function (i, ele) {
+						if ($(ele).val()) {
+							$(ele).next().find("li").css("z-index", "99");
+							$(ele).parents(".conList").find(".cancel-upload").show();
+							$(ele).parents(".conList").next().removeClass("hide-pic")
+						}
+					})
+				}, 200);
+			});
+		});
+	</script>
+</body>
+</html>

+ 11 - 2
src/main/webapp/WEB-INF/views/modules/svip/cmSvipProductForm.jsp

@@ -33,7 +33,7 @@
 <body>
 	<ul class="nav nav-tabs">
 		<li><a href="${ctx}/svip/cmSvipProduct/">商品列表</a></li>
-		<li class="active"><a href="${ctx}/svip/cmSvipProduct/form?id=${cmSvipProduct.id}">商品<shiro:hasPermission name="svip:cmSvipProduct:edit">${not empty cmSvipProduct.id?'编辑':'添加'}</shiro:hasPermission><shiro:lacksPermission name="svip:cmSvipProduct:edit">查看</shiro:lacksPermission></a></li>
+		<li class="active"><a href="${ctx}/svip/cmSvipProduct/form?id=${cmSvipProduct.id}">商品${not empty cmSvipProduct.id?'编辑':'添加'}</a></li>
 	</ul><br/>
 	<form:form id="inputForm" modelAttribute="cmSvipProduct" action="${ctx}/svip/cmSvipProduct/save" method="post" class="form-horizontal">
 		<form:hidden path="id"/>
@@ -88,10 +88,19 @@
             </div>
 		</div>
 		<div class="control-group" style="display: ${cmSvipProduct.costCheckFlag eq '1'?'none':''}">
+			<label class="control-label">比例成本百分比:</label>
 			<div class="controls">
                 <label class="showLabel">${cmSvipProduct.costProportional}%</label>
             </div>
 		</div>
+		<div class="control-group">
+			<label class="control-label">成本价:</label>
+			<div class="controls">
+				<label class="showLabel">
+					<fmt:formatNumber value="${cmSvipProduct.costPrice}" type="number" pattern="#0.00"/>
+				</label>
+			</div>
+		</div>
 		<div class="control-group">
 			<label class="control-label"><font color="red">*</font>会员价:</label>
 			<div class="controls">
@@ -112,7 +121,7 @@
 		<div class="control-group">
 			<label class="control-label"><font color="red">*</font>排序值:</label>
 			<div class="controls">
-				<form:input path="sort" htmlEscape="false" class="input-xlarge required"/>
+				<form:input path="sort" htmlEscape="false" placeholder="请填写排序值" class="input-xlarge required"/>
 			</div>
 		</div>
 		<div class="form-actions">

+ 1 - 1
src/main/webapp/WEB-INF/views/modules/svip/cmSvipProductList.jsp

@@ -37,7 +37,7 @@
 <body>
 	<ul class="nav nav-tabs">
 		<li class="active"><a href="${ctx}/svip/cmSvipProduct/">商品列表</a></li>
-<%--		<shiro:hasPermission name="svip:cmSvipProduct:edit"><li><a href="${ctx}/svip/cmSvipProduct/form">商品添加</a></li></shiro:hasPermission>--%>
+		<li><a href="${ctx}/svip/cmSvipProduct/adsImageForm">宣传图</a></li>
 	</ul>
 	<form:form id="searchForm" modelAttribute="cmSvipProduct" action="${ctx}/svip/cmSvipProduct/" method="post" class="breadcrumb form-search">
 		<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>

+ 212 - 70
src/main/webapp/WEB-INF/views/modules/sys/sysLogin.jsp

@@ -1,78 +1,220 @@
 <%@ page contentType="text/html;charset=UTF-8" %>
-<%@ page import="org.apache.shiro.web.filter.authc.FormAuthenticationFilter"%>
-<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<%@ page import="org.apache.shiro.web.filter.authc.FormAuthenticationFilter" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
 <html>
 <head>
-	<title>${fns:getConfig('productName')} 登录</title>
-	<meta name="decorator" content="blank"/>
-	<style type="text/css">
-      html,body,table{background-color:#f5f5f5;width:100%;text-align:center;}.form-signin-heading{font-family:Helvetica, Georgia, Arial, sans-serif, 黑体;font-size:36px;margin-bottom:20px;color:#0663a2;}
-      .form-signin{position:relative;text-align:left;width:300px;padding:25px 29px 29px;margin:0 auto 20px;background-color:#fff;border:1px solid #e5e5e5;
-        	-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05);}
-      .form-signin .checkbox{margin-bottom:10px;color:#0663a2;} .form-signin .input-label{font-size:16px;line-height:23px;color:#999;}
-      .form-signin .input-block-level{font-size:16px;height:auto;margin-bottom:15px;padding:7px;*width:283px;*padding-bottom:0;_padding:7px 7px 9px 7px;}
-      .form-signin .btn.btn-large{font-size:16px;} .form-signin #themeSwitch{position:absolute;right:15px;bottom:10px;}
-      .form-signin div.validateCode {padding-bottom:15px;} .mid{vertical-align:middle;}
-      .header{height:80px;padding-top:20px;} .alert{position:relative;width:300px;margin:0 auto;*padding-bottom:0px;}
-      label.error{background:none;width:270px;font-weight:normal;color:inherit;margin:0;}
+    <title>${fns:getConfig('productName')} 登录</title>
+    <meta name="decorator" content="blank"/>
+    <style type="text/css">
+        html, body, table {
+            background-color: #f5f5f5;
+            width: 100%;
+            text-align: center;
+        }
+
+        .form-signin-heading {
+            font-family: Helvetica, Georgia, Arial, sans-serif, 黑体;
+            font-size: 36px;
+            margin-bottom: 20px;
+            color: #0663a2;
+        }
+
+        .form-signin {
+            position: relative;
+            text-align: left;
+            width: 300px;
+            padding: 25px 29px 29px;
+            margin: 0 auto 20px;
+            background-color: #fff;
+            border: 1px solid #e5e5e5;
+            -webkit-border-radius: 5px;
+            -moz-border-radius: 5px;
+            border-radius: 5px;
+            -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+            -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+            box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+        }
+
+        .form-signin .checkbox {
+            margin-bottom: 10px;
+            color: #0663a2;
+        }
+
+        .form-signin .input-label {
+            font-size: 16px;
+            line-height: 23px;
+            color: #999;
+        }
+
+        .form-signin .input-block-level {
+            font-size: 16px;
+            height: auto;
+            margin-bottom: 15px;
+            padding: 7px;
+            *width: 283px;
+            *padding-bottom: 0;
+            _padding: 7px 7px 9px 7px;
+        }
+
+        .form-signin .btn.btn-large {
+            width: 100%;
+            height: 40px;
+            font-size: 14px;
+            margin-bottom: 10px;
+        }
+
+        .form-signin #themeSwitch {
+            position: absolute;
+            right: 15px;
+            bottom: 10px;
+        }
+
+        .form-signin div.validateCode {
+            padding-bottom: 15px;
+        }
+
+        .mid {
+            vertical-align: middle;
+        }
+
+        .header {
+            height: 80px;
+            padding-top: 20px;
+        }
+
+        .alert {
+            position: relative;
+            width: 300px;
+            margin: 0 auto;
+            *padding-bottom: 0px;
+        }
+
+        label.error {
+            background: none;
+            width: 270px;
+            font-weight: normal;
+            color: inherit;
+            margin: 0;
+        }
+
+        .verify-wrap {
+            width: 240px !important;
+            border-radius: 5px;
+            margin-bottom: 15px;
+        }
+
+        .fix-tips {
+            background: -webkit-gradient(linear, left top, right top, color-stop(0, #4d4d4d), color-stop(.4, #4d4d4d), color-stop(.5, #fff), color-stop(.6, #4d4d4d), color-stop(1, #4d4d4d));
+            -webkit-background-clip: text;
+            -webkit-text-fill-color: transparent;
+            -webkit-animation: slidetounlock 3s infinite;
+            color: #787878 !important;
+        }
+
+        @keyframes slidetounlock {
+            0% {
+                background-position: -100px 0;
+            }
+            100% {
+                background-position: 100px 0;
+            }
+        }
+        .verify-wrap .drag-btn{
+            border-radius: 5px;
+            height: 38px;
+            top: 0;
+            left: 0;
+        }
     </style>
-	<script type="text/javascript">
-		$(document).ready(function() {
-			$("#loginForm").validate({
-				rules: {
-					validateCode: {remote: "${pageContext.request.contextPath}/servlet/validateCodeServlet"}
-				},
-				messages: {
-					username: {required: "请填写用户名."},password: {required: "请填写密码."},
-					validateCode: {remote: "验证码不正确.", required: "请填写验证码."}
-				},
-				errorLabelContainer: "#messageBox",
-				errorPlacement: function(error, element) {
-					error.appendTo($("#loginError").parent());
-				} 
-			});
-		});
-		// 如果在框架或在对话框中,则弹出提示并跳转到首页
-		if(self.frameElement && self.frameElement.tagName == "IFRAME" || $('#left').length > 0 || $('.jbox').length > 0){
-			alert('未登录或登录超时。请重新登录,谢谢!');
-			top.location = "${ctx}";
-		}
-	</script>
+    <script type="text/javascript">
+        $(document).ready(function () {
+            var isSlideFinishState = false;
+            $('#submitButton').attr('disabled',"true");
+            var SlideVerifyPlug = window.slideVerifyPlug;
+            var slideVerify = new SlideVerifyPlug('#verify-wrap', {
+                wrapWidth: '350',//设置 容器的宽度 ,不设置的话,会设置成100%,需要自己在外层包层div,设置宽度,这是为了适应方便点;
+                initText: '请向右滑动滑块',  //设置  初始的 显示文字
+                sucessText: '验证通过',//设置 验证通过 显示的文字
+                getSuccessState: function (res) {
+                    //当验证完成的时候 会 返回 res 值 true,只留了这个应该够用了
+                    console.log(res);
+                    if (slideVerify.slideFinishState) {
+                        $('.value').html(slideVerify.slideFinishState)
+                        $('#resetBtn').removeClass('prohibit')
+                        $('#submitButton').removeAttr("disabled");
+                        isSlideFinishState = true;
+                    }
+                }
+            });
+            $("#loginForm").validate({
+                rules: {
+                    validateCode: {remote: "${pageContext.request.contextPath}/servlet/validateCodeServlet"}
+                },
+                messages: {
+                    username: {required: "请填写用户名."}, password: {required: "请填写密码."},
+                    validateCode: {remote: "验证码不正确.", required: "请填写验证码."}
+                },
+                errorLabelContainer: "#messageBox",
+                errorPlacement: function (error, element) {
+                    error.appendTo($("#loginError").parent());
+                }
+            });
+        });
+        // 如果在框架或在对话框中,则弹出提示并跳转到首页
+        if (self.frameElement && self.frameElement.tagName == "IFRAME" || $('#left').length > 0 || $('.jbox').length > 0) {
+            alert('未登录或登录超时。请重新登录,谢谢!');
+            top.location = "${ctx}";
+        }
+    </script>
 </head>
 <body>
-	<!--[if lte IE 6]><br/><div class='alert alert-block' style="text-align:left;padding-bottom:10px;"><a class="close" data-dismiss="alert">x</a><h4>温馨提示:</h4><p>你使用的浏览器版本过低。为了获得更好的浏览体验,我们强烈建议您 <a href="http://browsehappy.com" target="_blank">升级</a> 到最新版本的IE浏览器,或者使用较新版本的 Chrome、Firefox、Safari 等。</p></div><![endif]-->
-	<div class="header">
-		<div id="messageBox" class="alert alert-error ${empty message ? 'hide' : ''}"><button data-dismiss="alert" class="close">×</button>
-			<label id="loginError" class="error">${message}</label>
-		</div>
-	</div>
-	<h1 class="form-signin-heading">${fns:getConfig('productName')}</h1>
-	<form id="loginForm" class="form-signin" action="${ctx}/login" method="post">
-		<label class="input-label" for="username">登录名</label>
-		<input type="text" id="username" name="username" class="input-block-level required" value="${username}">
-		<label class="input-label" for="password">密码</label>
-		<input type="password" id="password" name="password" class="input-block-level required">
-		<c:if test="${isValidateCodeLogin}">
-		<div class="validateCode">
-			<label class="input-label mid" for="validateCode">验证码</label>
-			<sys:validateCode name="validateCode" inputCssStyle="margin-bottom:0;"/>
-		</div>
-		</c:if>
-		<%--
-		<label for="mobile" title="手机登录"><input type="checkbox" id="mobileLogin" name="mobileLogin" ${mobileLogin ? 'checked' : ''}/></label> --%>
-		<input class="btn btn-large btn-primary" type="submit" value="登 录"/>&nbsp;&nbsp;
-		<%--<label for="rememberMe" title="下次不需要再登录"><input type="checkbox" id="rememberMe" name="rememberMe" ${rememberMe ? 'checked' : ''}/> 记住我(公共场所慎用)</label>--%>
-		<div id="themeSwitch" class="dropdown">
-			<a class="dropdown-toggle" data-toggle="dropdown" href="#">${fns:getDictLabel(cookie.theme.value,'theme','默认主题')}<b class="caret"></b></a>
-			<ul class="dropdown-menu">
-			  <c:forEach items="${fns:getDictList('theme')}" var="dict"><li><a href="#" onclick="location='${pageContext.request.contextPath}/theme/${dict.value}?url='+location.href">${dict.label}</a></li></c:forEach>
-			</ul>
-			<!--[if lte IE 6]><script type="text/javascript">$('#themeSwitch').hide();</script><![endif]-->
-		</div>
-	</form>
-	<div class="footer">
-		Copyright &copy; ${fns:getConfig('copyrightYear')} ${fns:getConfig('productName')} ${fns:getConfig('version')}
-	</div>
-	<script src="${ctxStatic}/flash/zoom.min.js" type="text/javascript"></script>
+<!--[if lte IE 6]><br/>
+<div class='alert alert-block' style="text-align:left;padding-bottom:10px;"><a class="close" data-dismiss="alert">x</a>
+    <h4>温馨提示:</h4>
+    <p>你使用的浏览器版本过低。为了获得更好的浏览体验,我们强烈建议您 <a href="http://browsehappy.com" target="_blank">升级</a> 到最新版本的IE浏览器,或者使用较新版本的
+        Chrome、Firefox、Safari 等。</p></div><![endif]-->
+<div class="header">
+    <div id="messageBox" class="alert alert-error ${empty message ? 'hide' : ''}">
+        <button data-dismiss="alert" class="close">×</button>
+        <label id="loginError" class="error">${message}</label>
+    </div>
+</div>
+<h1 class="form-signin-heading">${fns:getConfig('productName')}</h1>
+<form id="loginForm" class="form-signin" action="${ctx}/login" method="post">
+    <label class="input-label" for="username">登录名</label>
+    <input type="text" id="username" name="username" class="input-block-level required" value="${username}">
+    <label class="input-label" for="password">密码</label>
+    <input type="password" id="password" name="password" class="input-block-level required">
+    <!-- 滑动验证 -->
+    <div class="verify-wrap" id="verify-wrap"></div>
+    <c:if test="${isValidateCodeLogin}">
+        <div class="validateCode">
+            <label class="input-label mid" for="validateCode">验证码</label>
+            <sys:validateCode name="validateCode" inputCssStyle="margin-bottom:0;"/>
+        </div>
+    </c:if>
+    <%--
+    <label for="mobile" title="手机登录"><input type="checkbox" id="mobileLogin" name="mobileLogin" ${mobileLogin ? 'checked' : ''}/></label> --%>
+    <button class="btn btn-large btn-primary" type="submit" id="submitButton">登录</button>
+    <%--<label for="rememberMe" title="下次不需要再登录"><input type="checkbox" id="rememberMe" name="rememberMe" ${rememberMe ? 'checked' : ''}/> 记住我(公共场所慎用)</label>--%>
+    <div id="themeSwitch" class="dropdown">
+        <a class="dropdown-toggle" data-toggle="dropdown"
+           href="#">${fns:getDictLabel(cookie.theme.value,'theme','默认主题')}<b class="caret"></b></a>
+        <ul class="dropdown-menu">
+            <c:forEach items="${fns:getDictList('theme')}" var="dict">
+                <li><a href="#"
+                       onclick="location='${pageContext.request.contextPath}/theme/${dict.value}?url='+location.href">${dict.label}</a>
+                </li>
+            </c:forEach>
+        </ul>
+        <!--[if lte IE 6]>
+        <script type="text/javascript">$('#themeSwitch').hide();</script><![endif]-->
+    </div>
+</form>
+<div class="footer">
+    Copyright &copy; ${fns:getConfig('copyrightYear')} ${fns:getConfig('productName')} ${fns:getConfig('version')}
+</div>
+<script src="${ctxStatic}/flash/zoom.min.js" type="text/javascript"></script>
+<script src="${ctxStatic}/slideVerify/slideVerify.js" type="text/javascript"></script>
 </body>
 </html>

+ 1 - 1
src/main/webapp/static/jerichotab/index.html

@@ -11,7 +11,7 @@
 		#divMainLoader{position:absolute;top:15px;right:15px;z-index:100;width:80px;height:20px;line-height:20px;background:#EEF3F7 url(../images/smallloader.gif) no-repeat 8px center;border:1px solid #A5B6C8;padding-left:30px;font-family:10px;display:none;}
     </style>
     <link rel="Stylesheet" href="css/jquery.jerichotab.css" />
-    <script type="text/javascript" src="../jquery/jquery-1.8.3.min.js"></script>
+    <script type="text/javascript" src="../jquery/jquery-3.5.0.min.js"></script>
     <script type="text/javascript" src="js/jquery.jerichotab.js"></script>
     <script type="text/javascript">
         var jericho = {

+ 1 - 1
src/main/webapp/static/jqGrid/4.6/demo/jqgrid.html

@@ -10,7 +10,7 @@
 
 <link href="../../../common/jeesite.css" type="text/css" rel="stylesheet"/>
 
-<script src="../../../jquery/jquery-1.8.3.min.js" type="text/javascript"></script>
+<script src="../../../jquery/jquery-3.5.0.min.js" type="text/javascript"></script>
 <script src="../i18n/grid.locale-cn.js" type="text/javascript"></script>
 <script src="../js/jquery.jqGrid.js" type="text/javascript"></script>
 <script src="../plugins/grid.complexHeaders.js" type="text/javascript"></script>

+ 1 - 1
src/main/webapp/static/jquery-select2/3.4/index.html

@@ -6,7 +6,7 @@ version: 3.4.5
 milestone: 15
 ---
 
-<script src="../../jquery/jquery-1.8.3.min.js"></script>
+<script src="../../jquery/jquery-3.5.0.min.js"></script>
 <link href="select2.css" rel="stylesheet"/>
 <script src="select2.js"></script>
 

Разлика између датотеке није приказан због своје велике величине
+ 1 - 0
src/main/webapp/static/jquery/jquery-3.4.1.min.js


+ 0 - 0
src/main/webapp/static/jquery/jquery-1.8.3.js → src/main/webapp/static/jquery/jquery-3.5.0.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 1
src/main/webapp/static/jquery/jquery-3.5.0.min.js


+ 1 - 0
src/main/webapp/static/modules/bulkpurchase/orderForm.js

@@ -298,6 +298,7 @@ function setSingleSelect(items) {
     $("#inputForm").find("[name*='bpOrderUserinfo.shouHuoRen']").val(info.linkMan1);
     $("#inputForm").find("[name*='bpOrderUserinfo.phonee']").val(info.contractPhone1);
     $("#inputForm").find("[name*='bpOrderUserinfo.mobile']").val(info.contractMobile1);
+    $("#svipFlagLabel").text(1 == info.svipFlag ? '(超级会员)' : '');
     $("#availableBalance").html(info.ableUserMoney);
 
     //设置添加商品可见(会所添加添加运费订单公用此方法但是添加运费订单不需要添加商品)

Разлика између датотеке није приказан због своје велике величине
+ 229 - 0
src/main/webapp/static/slideVerify/slideVerify.js


Неке датотеке нису приказане због велике количине промена