Browse Source

修改运营投放页面(广告主系统)

ying.rong 9 years ago
parent
commit
603aa43eb4
23 changed files with 1472 additions and 32 deletions
  1. 1 0
      src/main/java/com/cloudcross/ssp/model/mapper/wifi.sql.xml
  2. 0 1
      src/main/java/com/cloudcross/ssp/model/mapper/zone.sql.xml
  3. 56 31
      src/main/java/com/cloudcross/ssp/web/advertiser/main/ad/target/AdGroupAlloperatorController.java
  4. 0 0
      src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/chooseWifi.ftl
  5. 246 0
      src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/create.ftl
  6. 28 0
      src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/operatorPlaceWindow.ftl
  7. 28 0
      src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/operatorWindow.ftl
  8. 28 0
      src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/placeClassWindow.ftl
  9. 28 0
      src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/placeWindow.ftl
  10. 67 0
      src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/wifiWindow.ftl
  11. 6 0
      src/main/webapp/assets/css/common.css
  12. 48 0
      src/main/webapp/assets/css/dialog_adGroup.css
  13. 708 0
      src/main/webapp/assets/js/advertiser/operatoradAllGroup.js
  14. 213 0
      src/main/webapp/assets/js/advertiser/operatoradAllGroup_dialog.js
  15. 1 0
      src/main/webapp/assets/js/layer/extend/layer.ext.js
  16. 1 0
      src/main/webapp/assets/js/layer/layer.js
  17. BIN
      src/main/webapp/assets/js/layer/skin/default/icon-ext.png
  18. BIN
      src/main/webapp/assets/js/layer/skin/default/icon.png
  19. BIN
      src/main/webapp/assets/js/layer/skin/default/loading-0.gif
  20. BIN
      src/main/webapp/assets/js/layer/skin/default/loading-1.gif
  21. BIN
      src/main/webapp/assets/js/layer/skin/default/loading-2.gif
  22. 6 0
      src/main/webapp/assets/js/layer/skin/layer.css
  23. 7 0
      src/main/webapp/assets/js/layer/skin/layer.ext.css

+ 1 - 0
src/main/java/com/cloudcross/ssp/model/mapper/wifi.sql.xml

@@ -503,6 +503,7 @@
 			<if test="cnCity != null and cnCity != ''">
 				and cn_city = #{cnCity}
 			</if>
+			limit #{pager.offset}, #{pager.limit}
 	</select>
 	
 	<select id="queryWifiCount" parameterType="java.util.Map" resultType="java.lang.Integer">

+ 0 - 1
src/main/java/com/cloudcross/ssp/model/mapper/zone.sql.xml

@@ -243,7 +243,6 @@
      	<if test="position != null">
      		 and tz.position in (#{position})
      	</if> 
-     	limit #{pager.offset}, #{pager.limit}
      </select>
      
      <select id="queryZoneCount" parameterType="java.util.Map" resultType="java.lang.Integer">

+ 56 - 31
src/main/java/com/cloudcross/ssp/web/advertiser/main/ad/target/AdGroupAlloperatorController.java

@@ -1,5 +1,6 @@
 package com.cloudcross.ssp.web.advertiser.main.ad.target;
 
+import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
@@ -90,41 +91,19 @@ public class AdGroupAlloperatorController extends SimpleController{
 	 * @return
 	 */
 	@RequestMapping("chooseZone")
-	public String queryZoneByCondition(Model model,String operatorId,String position,@RequestParam(defaultValue = "1") int page){
+	@ResponseBody
+	public List<Zone> queryZoneByCondition(Model model,String operatorId,String position){
 		Map<String,Object> condition = new HashMap<String,Object>();
-		//测试
-		operatorId = "1,2,3,4";
 		//处理operatorID
 		if(operatorId != null && !"".equals(operatorId)){
-			/*List<Long> operatorIdList = new ArrayList<Long>();
-			String []operatorIdStr = operatorId.split(",");
-			for(int i=0;i<operatorIdStr.length;i++){
-				operatorIdList.add(Long.parseLong(operatorIdStr[i].trim()));
-			}*/
 			condition.put("operatorId", operatorId);
 		}
-		//测试
-		position = "1,2";
 		//处理position
 		if(position != null && !"".equals(position)){
-			/*List<Integer> positionList = new ArrayList<Integer>();
-			String[] positionStr = position.split(",");
-			for(int i=0;i<positionStr.length;i++){
-				positionList.add(Integer.parseInt(positionStr[i].trim()));
-			}*/
 			condition.put("position", position);
 		}
-		
-		//查询广告位总记录数
-		Integer count  = this.zoneService.queryZoneCount(condition);
-		Pager pager = new Pager();
-		pager.setPage(page);
-		pager.setTotalRow(count);
-		condition.put("pager", pager);
 		List<Zone> zoneList = this.zoneService.queryZone(condition);
-		model.addAttribute("pager", pager);
-		model.addAttribute("zoneList", zoneList);
-		return OK;
+		return zoneList;
 	}
 	/**
 	 * 到选择媒体弹窗
@@ -133,8 +112,7 @@ public class AdGroupAlloperatorController extends SimpleController{
 	 * @return
 	 */
 	@RequestMapping("chooseOperator")
-	@ResponseBody
-	public List<Operator> chooseOperatorWindow(Model model,@RequestParam(defaultValue = "1") int page){
+	public String chooseOperatorWindow(Model model,@RequestParam(defaultValue = "1") int page){
 		Integer count = this.operatorService.queryAllOperatorCount();
 		Pager pager = new Pager();
 		pager.setPage(page);
@@ -143,8 +121,9 @@ public class AdGroupAlloperatorController extends SimpleController{
 		Map<String,Object> condition = new HashMap<String,Object>();
 		condition.put("pager", pager);
 		List<Operator> list = this.operatorService.queryAllOperator(condition);
-
-		return list;
+		model.addAttribute("operatorList", list);
+		model.addAttribute("pager", pager);
+		return page("operatorWindow");
 	}
 	
 	
@@ -236,15 +215,61 @@ public class AdGroupAlloperatorController extends SimpleController{
 		Pager pager = new Pager();
 		pager.setPage(page);
 		pager.setTotalRow(count);
-		
-		
+		if(cn == null || "".equals(cn)){
+			cn = "省";
+		}
+		if(cnCity == null || "".equals(cnCity)){
+			cnCity = "市";
+		}
 		condition.put("pager", pager);
 		List<Wifi> list = this.wifiService.queryWifi(condition);
 		model.addAttribute("pager", pager);
+		model.addAttribute("cnCity", cnCity);
+		model.addAttribute("cn", cn);
 		model.addAttribute("list", list);
 		return page("wifiWindow");
 	}
 	
+	/**
+	 * 查找所有的省
+	 * @return
+	 */
+	@RequestMapping("/cn")
+	public @ResponseBody
+	Map<String, List<String>> findAllProvince() {
+		List<String> provinceList = locationService.findAllProvince();
+		Map<String, List<String>> map = new HashMap<String, List<String>>();
+		map.put("province", provinceList);
+		return map;
+	}
+	
+	/**
+	 * 查找该省下的所有城市
+	 * @param province
+	 * @return
+	 */
+	@RequestMapping("/city")
+	public @ResponseBody
+	Map<String, List<String>> findCityByProvince(@RequestParam String province) {
+		//这里如果传递过来的参数是空值或者空字符串则返回一个空值
+		if(null == province || "".equals(province)) {
+			System.out.println("传递的参数出错");
+			return null;
+		}
+		
+		try {
+			province = new String(province.getBytes("ISO-8859-1"),"UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		List<String> cityList = locationService.findCityByProvince(province);
+		Map<String, List<String>> map = new HashMap<String, List<String>>();
+		map.put("city", cityList);
+		return map;
+	}
+	
 	/**
 	 * 保存方法
 	 * @param request

+ 0 - 0
src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/chooseWifi.ftl


+ 246 - 0
src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/create.ftl

@@ -0,0 +1,246 @@
+<@override name="head">	
+<title>运营投放</title>
+<link rel="stylesheet" href="${ctx}/assets/css/daterangepicker.css"/>
+<link rel="stylesheet" href="${ctx}/assets/css/time_adGroup.css"/>
+<link rel="stylesheet" href="${ctx}/assets/css/wifi.css"/>
+<link rel="stylesheet" href="${ctx}/assets/css/style.css">
+<link rel="stylesheet" href="${ctx}/assets/css/geo.css">
+<script type="text/javascript" src="${ctx}/assets/js/lib/bootstrap.min.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/lib/bootbox.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/lib/moment.min.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/lib/jquery.daterangepicker.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/lib/jquery.daterangepicker1.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/lib/jquery.common.min.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/lib/jquery.geo.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/lib/areas_popup.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/lib/jquery-ui-1.10.4.custom.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/lib/jquery.cxselect.js"></script>
+<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=2767a619003d806b2dba379e3e023dfd"></script> 
+<script type="text/javascript" src="${ctx}/assets/js/common/validate.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/wifi.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/advertiser/operatoradAllGroup.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/common/table.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/common/popup.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/layer/layer.js"></script>
+</@override>	
+<@override name="body">
+<div id=content_bg>
+ 	<#include "/advertiser/main/public-head.ftl"/>
+	<div id= "pagecontent">
+		<div id="content">
+	   		<div id="navDiv">
+				<ul id="navDiv_ul">
+					<li><i class="icon-home"></i></li>
+					<li><a href="${ctx}/advertiser/main/dashboard">首页</a></li>
+					<li><i class="icon-angle-right"></i></li>
+					<#if role == "agent">
+					<li><a href="${ctx}/advertiser/main/ad/advertiser/list">广告主管理</a></li>
+					<li><i class="icon-angle-right"></i></li>
+					</#if>
+					<li><a href="${ctx}/advertiser/main/ad/order/list?advertiserId=${advertiserId!}">订单管理</a></li>
+					<li><i class="icon-angle-right"></i></li>
+					<li><a href="${ctx}/advertiser/main/ad/target/campaign/list?orderId=${orderId!}&advertiserId=${advertiserId!}">活动管理</a></li>
+					<li><i class="icon-angle-right"></i></li>
+					<li><a href="${ctx}/advertiser/main/ad/target/operator-ad-group/list?campaignId=${campaignId!}&orderId=${orderId!}&advertiserId=${advertiserId!}">投放管理</a></li>
+					<li><i class="icon-angle-right"></i></li>
+					<li class="navDiv_currentLi">运营投放</li>
+				</ul>  
+	 		</div>
+	 		<form id="validateForm" action="${ctx}/advertiser/main/ad/target/operator-ad-group/save" method="post">
+	 			<input type="hidden" id="adGroupId" name="id" value=""/>
+	 			<input type="hidden" id="advertiserId" name="advertiserId" value="${advertiserId!}"/>
+	 			<input type="hidden" id="orderId" name="orderId" value="${orderId!}"/>
+	 			<input type="hidden" id="campaignId" name="campaignId" value="${campaignId!}"/>
+	 			<input type="hidden" name="agentId" value="${agentId!}"/>
+				<input type="hidden" id="zoneId" name="zoneId" value=""/>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-yes">*</span>投放名称:</label>
+					<input class="input-text" tabindex="1" id="adGroupName" name="adGroupName" type="text" value="" verify="unspecial/255/1/0"/><span class="spanVaildate"></span>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-yes">*</span>活动周期:</label>
+					<span id="input-calendar">
+						<i class="icon-calendar"></i>   
+						<input type="text" tabindex="2" name="activeTime" id="dateRangePicker" value="" readonly/>
+					</span>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-yes">*</span>总预算:</label>
+					<input name="budget" type="hidden" id="budget" value="${budget!}"/>
+					<input class="input-text" tabindex="3" id="totalBudget" name="totalBudget" type="text" value="" verify="float/11/1/2"/>
+					<span class="input-span">元</span><span class="help-inline">总预算不能大于活动总预算</span>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-yes">*</span>投放模式:</label>
+					<input class="input-radio" name="mode" type="radio" value="1" checked="checked"><span class="input-radio-span otherspan">CPM</span>
+					<input class="input-radio" name="mode" type="radio" value="2"><span class="input-radio-span otherspan">CPC</span>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-yes">*</span>单价(CPM):</label>
+					<input class="input-text" tabindex="4" id="price" name="price" type="text" value="" verify="float/11/1/2"/><span class="spanVaildate"></span>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-no"></span>曝光总上限:</label>
+					<input class="input-text" tabindex="6" id="maxImpression" name="maxImpression" type="text" value="" verify="number/11/0/0"/>
+					<span class="input-span">千次</span><span class="help-inline">整个投放期,广告最多被曝光多少千次,-1代表不限</span>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-no"></span>点击总上限:</label>
+					<input class="input-text" tabindex="7" id="maxClick" name="maxClick" type="text" value="" verify="number/11/0/0"/>
+					<span class="input-span">次</span><span class="help-inline">整个投放期,广告最多被点击多少次,-1代表不限</span>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-no"></span>转化总上限:</label>
+					<input class="input-text" tabindex="8" id="maxConversion" name="maxConversion" type="text" value="" verify="number/11/0/0"/>
+					<span class="input-span">次</span><span class="help-inline">整个投放期,广告最多被曝光多少千次,-1代表不限</span>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-no"></span>每日曝光总上限:</label>
+					<input class="input-text" tabindex="9" id="dailyMaxImpression" name="dailyMaxImpression" type="text" value="" verify="number/11/0/0"/>
+					<span class="input-span">千次</span><span class="help-inline">每天,广告最多被曝光多少千次</span>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-no"></span>每日点击总上限:</label>
+					<input class="input-text" tabindex="10" id="dailyMaxClick" name="dailyMaxClick" type="text" value="" verify="number/11/0/0"/>
+					<span class="input-span">次</span><span class="help-inline">每天,广告最多被点击多少次</span>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-no"></span>每日转化总上限:</label>
+					<input class="input-text" tabindex="11" id="dailyMaxConversion" name="dailyMaxConversion" type="text" value="" verify="number/11/0/0"/>
+					<span class="input-span">次</span><span class="help-inline">每天,广告最多被转换多少次</span>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-no"></span>单人点击频次:</label>
+					<ul id="main_perClickul">
+						<li class="select_box" id="perClickul_box">
+							<span id="perClickul_span">请选择点击类型</span>
+							<ul class="son_ul" id="perClick_son_ul">
+								<li value="0">请选择点击类型</li>
+                    			<li value="1">每天</li>
+                    			<li value="2">投放周期</li>
+							</ul>
+						</li>
+					</ul>
+					<input id="perClickType" name="perClickType" type="hidden" value="" />
+					<input class="input-text-small" tabindex="12" id="perClick" name="perClick" type="text" value="" verify="number/11/0/0"/><span class="input-span">次</span><span class="spanVaildate"></span>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-no"></span>单人曝光频次:</label>
+					<ul id="main_perImpressionul">
+						<li class="select_box" id="perImpressionul_box">
+							<span id="perImpressionul_span">请选择曝光类型</span>
+							<ul class="son_ul" id="perImpression_son_ul">
+								<li value="0">请选择曝光类型</li>
+                    			<li value="1">每天</li>
+                    			<li value="2">投放周期</li>
+							</ul>
+						</li>
+					</ul>
+					<input id="perImpressionType" name="perImpressionType" type="hidden" value="" />
+					<input class="input-text-small" tabindex="13" id="perImpression" name="perImpression" type="text" value="" verify="number/11/0/0"/><span class="input-span">次</span><span class="spanVaildate"></span>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-no"></span>设置优先级</label>
+					<ul id="main_priorityul">
+						<li class="select_box" id="priorityul_box">
+							<span id="priorityul_span">请选择优先级</span>
+							<ul class="son_ul" id="priority_son_ul">
+								<li>1</li>
+                    			<li>2</li>
+                    			<li>3</li>
+                    			<li>4</li>
+                    			<li>5</li>
+                    			<li>6</li>
+                    			<li>7</li>
+                    			<li>8</li>
+                    			<li>9</li>
+							</ul>
+						</li>
+					</ul>
+					<input id="priority" name="priority" type="hidden" value=""/>
+				</div>
+				<div class="input-group" id="areasDiv">
+					<label class="input-label-other"><span class="lbl-no"></span>地域定向:</label>
+					<input class="ignore" type="hidden" id="areas" name="areas" value=""/>
+					<a id="btn-areas" class="btn2">地域设定</a>
+		            <label id="geo-selected-areas"><span class="area-direct"></span><span>您已经设定了<strong id="count-areas">0</strong>个地域条件</span></label>
+		            <label id="geo-all-areas"><span class="area-direct"></span><span class="default_text">不限</span></label>
+				</div>
+				<div id="timediv" class="input-group">
+					<label class="input-label-other"><span class="lbl-no"></span>时段定向:</label>
+					<div class="setting">
+						<div class="time_tit">
+					    	<p>开始时间</p>
+					        <p>结束时间</p>
+					    </div>
+					    <input type="hidden" name="sdayParting" id="sdayParting" value=""/>
+					    <div class="clear"></div>
+					    <div class="time_box"></div>
+					    <div class="time_add"><p id="setting_list" class="dateRangePicker" href="">新增时间段</p></div>
+				    </div>
+			  	</div>
+				<div class="input-group" id="osDiv">
+					<label class="input-label-other"><span class="lbl-yes">*</span>操作系统:</label>
+					<input type="hidden" id="os" name="os" value=""/>
+					<input class="input-checkbox" type="checkbox" value="1"><span class="input-checkbox-span otherspan">iOS</span>
+					<input class="input-checkbox" type="checkbox" value="2"><span class="input-checkbox-span otherspan">Android</span>
+					<input class="input-checkbox" type="checkbox" value="3"><span class="input-checkbox-span otherspan">WP</span>
+					<input class="input-checkbox" type="checkbox" value="4"><span class="input-checkbox-span otherspan">Symbian</span>
+					<input class="input-checkbox" type="checkbox" value="5"><span class="input-checkbox-span otherspan">MAC OS</span>
+					<input class="input-checkbox" type="checkbox" value="6"><span class="input-checkbox-span otherspan">Windows</span>
+					<input class="input-checkbox" type="checkbox" value="7"><span class="input-checkbox-span otherspan">其他</span>
+				</div>
+				<div class="input-group">
+				     <label class="input-label-other"><span class="lbl-no"></span>选择媒体:</label>
+				     <a id="btn-selectOperator" class="btn2">智选网络</a>
+				     <input type="hidden" id="input_selectOperator" value=""/>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-no"></span>广告位:</label>
+					<input class="input-checkbox" name="position" checked="checked" type="checkbox" value="1"><span class="input-checkbox-span otherspan">认证页</span>
+					<input class="input-checkbox" name="position" type="checkbox" value="2"><span class="input-checkbox-span otherspan">认证页后</span>
+					<input class="input-checkbox" name="position" type="checkbox" value="3"><span class="input-checkbox-span otherspan">上网过程</span>
+				</div>
+				<div class="input-group" id="zonechooseDiv">
+					<div id="zone-chooseing" class="zonechoose">
+						<span class="span_title">全部app广告位</span>
+						<ul id="zone-chooseingUl">
+						<#if zoneList ??>
+						<#list zoneList as zone>
+							<li value="${zone.id!}" title="${zone.name!}"><label>${zone.name!}</label></li>
+						</#list>
+						</#if>
+						</ul>
+					</div>
+					<div id="zone-selected" class="zonechoose">
+						<span class="span_title">已选广告位</span>
+						<ul id="zone-selectedUl"></ul>
+					</div>
+				</div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-no"></span>选择策略:</label>
+	                <a id="btn-selectOperatorPlace" class="btn2">媒体场景</a>
+				    <a id="btn-selectPlace" class="btn2">小场景</a>
+				    <a id="btn-selectPlaceClass" class="btn2">数聚场景</a>
+				    <input type="hidden" name="placeId" id="selectPlaceId" value=""/>
+				    <input type="hidden" name="placeName" id="selectPlaceName" value=""/>
+                </div>
+                <div class="input-group">
+	                <label class="input-label-other"><span class="lbl-no"></span>选择终端:</label>
+	                <a id="btn-selectWifi" class="btn2">添加</a>
+				    <input type="hidden" name="wifiIds" id="selectWifi" value=""/>
+                </div>
+				<div class="input-group">
+					<label class="input-label-other"><span class="lbl-yes">*</span>代表必填项</label>
+				</div>
+				<div id="footBtn">
+					<button id="create-btn-save" class="btn-save" type="submit">保存</button>
+					<button id="create-btn-cancel" class="btn-cancel" type="button">取消</button>
+				</div>
+			</form>
+		</div>
+    </div>
+    <div id="areas_layout"></div>
+</div>
+</@override>
+<@extends name="/common/simple.ftl"/>

+ 28 - 0
src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/operatorPlaceWindow.ftl

@@ -0,0 +1,28 @@
+<@override name="head">	
+<link rel="stylesheet" href="${ctx}/assets/css/dialog_adGroup.css"/>
+<script type="text/javascript" src="${ctx}/assets/js/advertiser/operatoradAllGroup_dialog.js"></script>
+</@override>	
+<@override name="body">
+<div id="dialog_content">
+	<form id="selectOperatorPlaceForm" action="${ctx}/advertiser/main/ad/target/ad-group-alloperator/chooseOperatorPlace" method="post">
+		<input type="hidden" id="page" name="page" value="${pager.page}">
+		<div id="selectOperatorPlaceDiv" class="input-radiosDiv">
+			<#if list ??>
+			<#list list as operatorPlace>
+			<div class="single_div">
+				<input class="single_div_radio" name="operatorPlace" type="radio" value="a${operatorPlace.id!}" title="${operatorPlace.operatorShowName!}">
+				<span class="single_div_span" title="${operatorPlace.operatorShowName!}">${operatorPlace.operatorShowName!}</span>
+			</div>
+			</#list>
+			</#if>
+		</div>
+		<div id="pageDiv_dialog">
+			<#include "/common/pagination/simple.ftl"/>
+		</div>
+		<div id="btnDiv_dialog">
+			<input id="btn_formSubmit" class="selectOperatorPlace_save" type="button" value="保存"/>
+		</div>
+	</form>
+</div>
+</@override>
+<@extends name="/common/simple.ftl"/>

+ 28 - 0
src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/operatorWindow.ftl

@@ -0,0 +1,28 @@
+<@override name="head">	
+<link rel="stylesheet" href="${ctx}/assets/css/dialog_adGroup.css"/>
+<script type="text/javascript" src="${ctx}/assets/js/advertiser/operatoradAllGroup_dialog.js"></script>
+</@override>	
+<@override name="body">
+<div id="dialog_content">
+	<form id="selectOperatorForm" action="${ctx}//advertiser/main/ad/target/ad-group-alloperator/chooseOperator" method="post">
+		<input type="hidden" id="page" name="page" value="${pager.page}">
+		<div id="selectOperatorDiv" class="input-radiosDiv">
+			<#if operatorList ??>
+			<#list operatorList as operator>
+			<div class="single_div">
+				<input class="single_div_radio" name="operator" type="radio" id="${operator.id!}" value="${operator.id!}" title="${operator.companyName!}">
+				<span class="single_div_span" title="${operator.companyName!}">${operator.companyName!}</span>
+			</div>
+			</#list>
+			</#if>
+		</div>
+		<div id="pageDiv_dialog">
+			<#include "/common/pagination/simple.ftl"/>
+		</div>
+		<div id="btnDiv_dialog">
+			<input id="btn_formSubmit" class="selectOperator_save" type="button" value="保存"/>
+		</div>
+	</form>
+</div>
+</@override>
+<@extends name="/common/simple.ftl"/>

+ 28 - 0
src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/placeClassWindow.ftl

@@ -0,0 +1,28 @@
+<@override name="head">	
+<link rel="stylesheet" href="${ctx}/assets/css/dialog_adGroup.css"/>
+<script type="text/javascript" src="${ctx}/assets/js/advertiser/operatoradAllGroup_dialog.js"></script>
+</@override>	
+<@override name="body">
+<div id="dialog_content">
+	<form id="selectPlaceClassForm" action="${ctx}/advertiser/main/ad/target/ad-group-alloperator/choosePlaceClass" method="post">
+		<input type="hidden" id="page" name="page" value="${pager.page}">
+		<div id="selectPlaceClassDiv" class="input-radiosDiv">
+			<#if list ??>
+			<#list list as placeClass>
+			<div class="single_div">
+				<input class="single_div_radio" name="placeClass" type="radio" value="c${placeClass.id!}" title="${placeClass.name!}">
+				<span class="single_div_span" title="${placeClass.name!}">${placeClass.name!}</span>
+			</div>
+			</#list>
+			</#if>
+		</div>
+		<div id="pageDiv_dialog">
+			<#include "/common/pagination/simple.ftl"/>
+		</div>
+		<div id="btnDiv_dialog">
+			<input id="btn_formSubmit" class="selectPlaceClass_save" type="button" value="保存"/>
+		</div>
+	</form>
+</div>
+</@override>
+<@extends name="/common/simple.ftl"/>

+ 28 - 0
src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/placeWindow.ftl

@@ -0,0 +1,28 @@
+<@override name="head">	
+<link rel="stylesheet" href="${ctx}/assets/css/dialog_adGroup.css"/>
+<script type="text/javascript" src="${ctx}/assets/js/advertiser/operatoradAllGroup_dialog.js"></script>
+</@override>	
+<@override name="body">
+<div id="dialog_content">
+	<form id="selectPlaceClassForm" action="${ctx}/advertiser/main/ad/target/ad-group-alloperator/choosePlace" method="post">
+		<input type="hidden" id="page" name="page" value="${pager.page}">
+		<div id="selectPlaceDiv" class="input-radiosDiv">
+			<#if list ??>
+			<#list list as place>
+			<div class="single_div">
+				<input class="single_div_radio" name="place" type="radio" value="b${place.id!}" title="${place.name!}">
+				<span class="single_div_span" title="${place.name!}">${place.name!}</span>
+			</div>
+			</#list>
+			</#if>
+		</div>
+		<div id="pageDiv_dialog">
+			<#include "/common/pagination/simple.ftl"/>
+		</div>
+		<div id="btnDiv_dialog">
+			<input id="btn_formSubmit" class="selectPlace_save" type="button" value="保存"/>
+		</div>
+	</form>
+</div>
+</@override>
+<@extends name="/common/simple.ftl"/>

+ 67 - 0
src/main/webapp/WEB-INF/pages/advertiser/main/ad/target/ad-group-alloperator/wifiWindow.ftl

@@ -0,0 +1,67 @@
+<@override name="head">	
+<link rel="stylesheet" href="${ctx}/assets/css/dialog_adGroup.css"/>
+<script type="text/javascript" src="${ctx}/assets/js/common/table.js"></script>
+<script type="text/javascript" src="${ctx}/assets/js/advertiser/operatoradAllGroup_dialog.js"></script>
+</@override>	
+<@override name="body">
+<div id="dialog_content">
+	<form id="selectWifiForm" action="${ctx}/advertiser/main/ad/target/ad-group-alloperator/chooseWifi" method="post">
+		<input type="hidden" id="page" name="page" value="${pager.page}">
+		<div id="content_choose">
+			<ul id="main_cnul">
+				<li class="select_box" id="cnul_box">
+					<span id="cnul_span">${cn!}</span>
+					<ul class="son_ul" id="cn_son_ul"></ul>
+				</li>
+			</ul>
+			<input type="hidden" name="cn" id="cn" value="${cn!}"/>
+			<ul id="main_cnCityul">
+				<li class="select_box" id="cnCityul_box">
+					<span id="cnCityul_span">${cnCity!}</span>
+					<ul class="son_ul" id="cnCityul_son_ul"></ul>
+				</li>
+			</ul>
+			<input type="hidden" name="cnCity" id="cnCity" value="${cnCity!}"/>
+		</div>
+		<table border="1" class="tableFig">
+			<thead>
+				<tr class="theadTr">
+					<th class="theadTh" style="width:3%;"><div class="checkboxStyleTh"></div></th>
+					<th class="theadTh" style="width:7%;">热点名称</th>
+					<th class="theadTh" style="width:5%;">SSID</th>
+					<th class="theadTh" style="width:3%;">省</th>
+					<th class="theadTh" style="width:3%;">市</th>
+					<th class="theadTh" style="width:10%;">详细地址</th>
+					<th class="theadTh" style="width:3%;">经度</th>
+					<th class="theadTh" style="width:3%;">纬度</th>
+					<th class="theadTh" style="width:8%;">apmac</th>	
+				</tr>
+			</thead>
+			<tbody>
+				<#if list ??>
+				<#list list as wifi>
+				<tr id="tbodyTr">
+					<td class="tbodyTd"><div class="checkboxStyleTd" id="${wifi.id!}"></div></td>
+					<td class="tbodyTd">${wifi.name!}</td>
+					<td class="tbodyTd">${wifi.SSID!}</td>
+					<td class="tbodyTd">${wifi.cn!}</td>
+					<td class="tbodyTd">${wifi.cnCity!}</td>
+					<td class="tbodyTd">${wifi.address!}</td>
+					<td class="tbodyTd">${wifi.longitude!}</td>
+					<td class="tbodyTd">${wifi.latitude!}</td>
+					<td class="tbodyTd">${wifi.apmac!}</td>
+				</tr>
+				</#list>
+				</#if>
+			</tbody>
+		</table>
+		<div id="pageDiv_dialog">
+			<#include "/common/pagination/simple.ftl"/>
+		</div>
+		<div id="btnDiv_dialog">
+			<input id="btn_formSubmit" class="selectWifi_save" type="button" value="保存"/>
+		</div>
+	</form>
+</div>
+</@override>
+<@extends name="/common/simple.ftl"/>

+ 6 - 0
src/main/webapp/assets/css/common.css

@@ -746,6 +746,11 @@ input.input-text-small{
 	margin-left:0px;
 	margin-right:80px;
 }
+
+.input-group ul#main_priorityul{
+	margin-left:123px;
+}
+
 .input-group #upload-click{
 	width:300px;
 	height:34px;
@@ -929,6 +934,7 @@ input.input-text-small{
     margin-left: 5px;
     position: relative;
     width: 140px;
+    height: 34px;
     margin-right: 10px;
     overflow: hidden;
 }

+ 48 - 0
src/main/webapp/assets/css/dialog_adGroup.css

@@ -0,0 +1,48 @@
+#dialog_content{
+	margin:20px;
+}
+
+.input-radiosDiv .single_div{
+	float:left;
+	margin-bottom: 20px;
+}
+
+.input-radiosDiv .single_div input.single_div_radio{
+	float: left;
+}
+
+.input-radiosDiv .single_div span.single_div_span{
+	float: left;
+    margin-left: 5px;
+    width: 100px;
+    height: 16px;
+    margin-right: 10px;
+    overflow: hidden;
+}
+
+#pageDiv_dialog{
+	clear: both;
+    float: right;
+    margin-top:-20px;
+}
+
+#btnDiv_dialog{
+	clear: both;
+    float: right;
+}
+
+#content_choose{
+	padding:0px;
+}
+
+table.tableFig{
+	margin-bottom:20px;
+}
+
+table.tableFig th,table.tableFigOther th{
+	height:50px;
+}
+
+table.tableFig td,table.tableFigOther td{
+	height:40px;
+}

+ 708 - 0
src/main/webapp/assets/js/advertiser/operatoradAllGroup.js

@@ -0,0 +1,708 @@
+$(document).ready(function(){
+	var ctx = $("#ctx").val();//获取服务器地址
+	
+	/***************************    活动列表页    ***************************/
+	
+	$("#btn-create").click(function(){
+		if($("#campaignId").val() == "" || $("#campaignId").val() == -1){
+			$(this).attr("href","javascript:void(0);");
+			bootbox.alert("请选择活动!");
+			$(this).attr("title","请选择活动");
+			return false;
+		}
+	});
+
+	$('ul#campaignul_son_ul li').live("click",function(){
+		$("#myform").attr("action",ctx+"/advertiser/main/ad/target/operator-ad-group/list?campaignId="+$("#campaignId").val()+"&orderId="+$("#orderId").val()+"&advertiserId="+$("#advertiserId").val());
+		refreshData();
+	});
+	
+ 	//状态全部、开启、停用
+ 	if($("#status").val() == 0 || $("#status").val() == ""){
+ 		$("#selectBar_status a:first").addClass("selectBar_change");
+ 		$("#status").val(0);
+	}
+ 	$("#selectBar_status a").each(function(){
+ 		var value = $(this).attr("value");
+ 		if($("#status").val() == value){
+ 			$(this).addClass("selectBar_change").siblings('.selectBar_change').removeClass('selectBar_change');
+ 		}
+ 	});
+ 	$("#selectBar_status a").click(function(){
+ 		$("#status").val($(this).attr("value"));
+ 		refreshData();
+ 	});
+ 
+	//开启,暂停
+	$("#btn-enable,#btn-disable,#btn-delete").click(function(){
+		if($(this).attr("id") == "btn-enable"){
+			url = ctx+"/advertiser/main/ad/target/operator-ad-group/enable";
+		}else if($(this).attr("id") == "btn-disable"){
+			url = ctx+"/advertiser/main/ad/target/operator-ad-group/disable";
+		}else if($(this).attr("id") == "btn-delete"){
+			url = ctx+"/advertiser/main/ad/target/operator-ad-group/delete";
+		}
+		singleOper($(this),url);
+	});
+			
+	//批量开启,批量暂停
+	$("#all-btn-enable,#all-btn-disable,#all-btn-delete").click(function(){
+		if($(this).attr("id") == "all-btn-enable"){
+			url = ctx+"/advertiser/main/ad/target/operator-ad-group/enable";
+		}else if($(this).attr("id") == "all-btn-disable"){
+			url = ctx+"/advertiser/main/ad/target/operator-ad-group/disable";
+		}else if($(this).attr("id") == "all-btn-delete"){
+			url = ctx+"/advertiser/main/ad/target/operator-ad-group/delete";
+		}
+		batchOpear($(this),url);
+	});
+	
+	/***************************    创建,编辑投放    ***************************/
+	
+	//请选择点击类型
+ 	if($("#main_perClickul").html()){
+ 		if($("#perClickType").val() == 0 || $("#perClickType").val() == ""){
+ 			$("#perClickul_span").text("请选择点击类型");
+ 		}
+ 		$('ul#perClick_son_ul li').each(function(){
+ 			if($(this).attr("value") == $("#perClickType").val()){
+ 				$("#perClickul_span").text($(this).text());
+ 			}
+ 		});
+ 		$("#perClick_son_ul").hide();
+ 		$('ul#perClick_son_ul li').live("click",function(){
+ 			$(this).parents('li').find('span').text($(this).html());
+ 			$("#perClickType").val($(this).attr("value"));
+ 			$("#perClickTypeName").val($(this).text());
+ 			$('#perClick_son_ul').hide(); //ul隐藏
+ 		});
+ 		$("#perClickul_span").on("click",function(){
+ 	 		$('#perClick_son_ul').show(); //ul显示
+ 	 	});
+ 		$("#perClickul_box").mouseleave(function(){
+ 	 		$('#perClick_son_ul').hide(); //ul隐藏
+ 	 	});
+ 	}
+ 	
+ 	//请选择曝光类型
+ 	if($("#main_perImpressionul").html()){
+ 		if($("#perImpressionType").val() == 0 || $("#perImpressionType").val() == ""){
+ 			$("#perImpressionul_span").text("请选择曝光类型");
+ 		}
+ 		$('ul#perImpression_son_ul li').each(function(){
+ 			if($(this).attr("value") == $("#perImpressionType").val()){
+ 				$("#perImpressionul_span").text($(this).text());
+ 			}
+ 		});
+ 		$("#perImpression_son_ul").hide();
+ 		$('ul#perImpression_son_ul li').live("click",function(){
+ 			$(this).parents('li').find('span').text($(this).html());
+ 			$("#perImpressionType").val($(this).attr("value"));
+ 			$("#perImpressionTypeName").val($(this).html());
+ 			$('#perImpression_son_ul').hide(); //ul隐藏
+ 		});
+ 		$("#perImpressionul_span").on("click",function(){
+ 	 		$('#perImpression_son_ul').show(); //ul显示
+ 	 	});
+ 		$("#perImpressionul_box").mouseleave(function(){
+ 	 		$('#perImpression_son_ul').hide(); //ul隐藏
+ 	 	});
+ 	}
+ 	
+ 	//请选择曝光类型
+ 	if($("#main_priorityul").html()){
+ 		if($("#priority").val() == 0 || $("#priority").val() == ""){
+ 			$("#priorityul_span").text("设置优先级");
+ 		}
+ 		$('ul#priority_son_ul li').each(function(){
+ 			if($(this).attr("value") == $("#perImpressionType").val()){
+ 				$("#priorityul_span").text($(this).text());
+ 			}
+ 		});
+ 		$("#priority_son_ul").hide();
+ 		$('ul#priority_son_ul li').live("click",function(){
+ 			$(this).parents('li').find('span').text($(this).html());
+ 			$("#priority").val($(this).text());
+ 			$('#priority_son_ul').hide(); //ul隐藏
+ 		});
+ 		$("#priorityul_span").on("click",function(){
+ 	 		$('#priority_son_ul').show(); //ul显示
+ 	 	});
+ 		$("#priorityul_box").mouseleave(function(){
+ 	 		$('#priority_son_ul').hide(); //ul隐藏
+ 	 	});
+ 	}
+	
+ 	if($("#areasDiv").html()){
+		var areasgeoPopup = $("#areas_popup")[0];
+		var GEO_list;
+		$('#btn-areas').click(function () {
+			if (!areasgeoPopup) {
+	            areasgeoPopup = new areasPopup({
+	                width: '746px',
+	                height: '435px',
+	                title: '地域定向设定'
+	     		});
+	            var defaultValue = "不限";
+	            var input = $('#areas').trigger('change');
+	            var selectedIds = input.val() ? input.val().split(',') : null;
+	            $('#areasconfirm').click(function(){
+	                var pop= areasgeoPopup;
+	                areasgeoPopup.hide();
+	                input.val(Area.save());
+	                var id = 'areas',selected = Area.save();
+	                parent.$('#'+id).val(selected);
+	                if (selected && $('input[type=checkbox]:not(:checked)').length) {
+	                    //有选择 且 非全选的
+	                    parent.$('#count-'+id)[0].innerHTML = selected.split(',').length;
+	                    parent.$('#geo-all-'+id).hide();
+	                    parent.$('#geo-selected-'+id).show();
+	                }else{
+	                    if(!$('input[type=checkbox]:not(:checked)').length){
+	                        parent.$('#geo-all-'+id).find('.default_text')[0].innerHTML=defaultValue;
+	                    }else{
+	                        var val = defaultValue;
+	                        parent.$('#geo-all-'+id).find('.default_text')[0].innerHTML=decodeURIComponent(val);
+	                    }
+	                    parent.$('#geo-all-'+id).show();
+	                    parent.$('#geo-selected-'+id).hide();
+	                }
+	                parent.$(parent.document).trigger('setData');
+				
+	            });
+	            //Area.init(GEO_LIST,selectedIds);
+	            $.ajax({
+	            	url: ctx+'/advertiser/main/ad/target/operator-ad-group/getLocations',
+	            	dataType:'json',
+	            	success:function(GEO_LIST){
+	            		Area.init(GEO_LIST,selectedIds);
+	            		areasgeoPopup.show();
+	            		GEO_list = GEO_LIST;
+	            	},
+	            	error:function(){
+	            		alert('数据拉取失败,请检查您的网络连接是否可用');
+	            	}
+	            });
+    		}else{
+    			areasgeoPopup.show();
+            }
+        });
+        
+        $('#count-areas').click(function () {
+            $('#btn-areas').trigger('click');
+        });
+        
+        if ($('#areas').val()) {
+            $('#geo-selected-areas').show();
+            $('#geo-all-areas').hide();
+            $('#count-areas')[0].innerHTML = $('#areas').val().split(',').length;
+        } else {
+            $('#geo-selected-areas').hide();
+            $('#geo-all-areas').show();
+        }
+	
+	}
+	
+	//时间定向
+	$('#setting_list').unbind("mousedown").bind("mousedown",function(){
+	 	var date = $("#dateRangePicker").val().split('to');
+		var s_date = date[0];
+		var e_date = date[1];
+		var len_box = $(".time_box").find(".time_item").length;
+		if(len_box > 6){
+			bootbox.alert("最多只能添加6个时段");
+		}else{
+			if(s_date!=""&&e_date!=""){
+				var datePickerOptions = {
+					"startDate":s_date,
+					"endDate":e_date
+				}
+				$("#quantum_list1").find("p").removeClass("pitchon");
+				$('#setting_list').unbind("datepicker-apply").bind('datepicker-apply',function(event,obj){
+					var date = $("#dateRangePicker").val().split('to');
+				    var s_date = date[0];
+					var e_date = date[1];
+					var checked_date = new Array();
+					var len = $(".setting .time_item").length;
+					for(var i=0;i<len;i++){
+						var json_check = {"startDate":$(".time_item").eq(i).find(".start_date").val(),"endDate":$(".time_item").eq(i).find(".end_date").val()};
+						checked_date.push(json_check);
+					}
+					var startDate = obj.value.split('to')[0];
+			   		var endDate = obj.value.split('to')[1];
+					var flag = true;
+			   		for(var j=0;j<checked_date.length;j++){
+			   			if(startDate < checked_date[j].startDate && endDate < checked_date[j].startDate){
+			   				console.log(startDate+":"+endDate)
+			   				console.log(flag+":1");
+			   			}else if(startDate > checked_date[j].endDate && endDate > checked_date[j].endDate){
+			   				console.log(flag+":2");
+			   			}else{
+			   				flag=false;
+			   			}
+			   		}
+			   		if(flag){
+				   		var obj = $("#quantum_list1");
+				   		if(obj.find(".pitchon").length){
+				           	var timeData = obj.find(".pitchon").map(function(i,span){
+				        		return $(span).attr("title");
+				        	}).toArray().join(',');
+				        }else{
+				           	var timeData = -1;
+				        }
+				   		var html = '<div class="time_item"><p class="tr_data"><span class="inp"><input type="" class="start_date edit_time" readonly="readonly" value="'+startDate+'"></span><span class="inp"><input type="" class="end_date edit_time" readonly="readonly" value = "'+endDate+'"></span></p><button class="btn_del">删除</button><input class="json_date" type="hidden" value = "'+timeData+'"></div>';
+				   		$(".setting .time_box").append(html);
+				   		$(".time_box .time_item .btn_del").bind("click",function(e){
+				   			$(this).parents(".time_item").remove();
+				   		});
+				   		$(".setting .tr_data").unbind("mousedown").bind("mousedown",function(){
+				   				var obj_tr = $(this);
+				   				var datePickerOptions_td = {
+									"startDate":s_date,
+									"endDate":e_date,
+									getValue: function(){
+										if (obj_tr.find(".start_date").val() && obj_tr.find(".end_date").val() )
+											return obj_tr.find(".start_date").val() + ' to ' + obj_tr.find(".end_date").val();
+										else
+											return '';
+									},
+									setValue: function(s,s1,s2){
+										obj_tr.find(".start_date").val(s1);
+										obj_tr.find(".end_date").val(s2);
+									}
+								}
+								obj_tr.unbind("datepicker-apply").bind('datepicker-apply',function(event,obj){
+										var date = $("#dateRangePicker").val().split('to');
+									    var s_date = date[0];
+										var e_date = date[1];
+										var checked_date = new Array();
+										var other_box =obj_tr.parent().siblings();
+										var len = other_box.length;
+										for(var i=0;i<len;i++){
+											var json_check = {"startDate":other_box.eq(i).find(".start_date").val(),"endDate":other_box.eq(i).find(".end_date").val()};
+											checked_date.push(json_check);
+										}
+										console.log(checked_date);									
+										var startDate = obj.value.split('to')[0];
+			   							var endDate = obj.value.split('to')[1];
+			   							var flag = true;
+							   			console.log(checked_date);
+							   			
+							   			if(flag){
+							   				var obj = $("#quantum_list1");
+								   			if(obj.find(".pitchon")){
+								            	var timeData = obj.find(".pitchon").map(function(i,span){
+								        			return $(span).attr("title");
+								        		}).toArray().join(',');
+								            }else{
+								            	var timeData = -1;
+								            }
+								   			obj_tr.find(".start_date").val(startDate);
+									   		obj_tr.find(".end_date").val(endDate);
+									   		console.log(timeData);
+									   		console.log(obj_tr);
+									   		obj_tr.parent().find(".json_date").val(timeData);
+							   			}else{bootbox.alert("请选择正确时间!");}
+						        });
+						        obj_tr.dateRangePicker1(datePickerOptions_td);
+						        $("#quantum_list1").find("p").removeClass("pitchon");
+						        var chose_time = obj_tr.parent().find(".json_date").val();
+					        	console.log(chose_time);
+					        	if(chose_time!=-1&&chose_time!=""){
+					        		var chose_arr = chose_time.split(",");
+					        		for(var n=0;n<chose_arr.length;n++){
+					        			$("#quantum_list1 p").eq(chose_arr[n]).addClass("pitchon");
+					        		}
+					        	}
+			   				})
+			   		}else{
+			   			bootbox.alert("请选择正确时间!");
+			    	}
+				});
+				$('#setting_list').dateRangePicker1(datePickerOptions);
+			}else{
+				bootbox.alert("请选择活动周期,在进行操作!");
+			}
+		}
+	});
+	
+	if($("#divLBS").html()){
+		$('#city_custom').cxSelect({
+			selects: ['prov', 'city'],
+			required: true,
+			url:ctx+'/advertiser/main/ad/target/operator-ad-group/getLocations'
+		});
+	}
+	
+	//初始校验表单
+ 	if($("#validateForm").html()){
+ 		$('#dateRangePicker').dateRangePicker();
+ 		$("#validateForm").autovalidate();
+ 		$(".input-text").focus(function(){
+ 			$(this).parent("div.input-group").find("span.help-inline").text("").removeClass("help-inline").addClass("spanVaildate");
+ 		});
+ 	}
+ 	
+ 	//点击日期控件的按钮时,去掉前面时间标签的样式
+ 	$(".apply-btn").click(function(){
+		if(!$(this).hasClass("disabled")){
+			$('#dateRangePicker').val($(".start-day").text() +" to "+$(".end-day").text());
+		}
+	});
+	
+ 	$("#create-btn-save,#edit-btn-save").click(function(){
+ 		$("div.input-group").find("span.help-inline").text("").removeClass("help-inline").addClass("spanVaildate");
+ 		if (!$("#validateForm").validate()) {
+			return false;
+		}
+ 		var checked_date = new Array();
+		var len = $(".setting .time_item").length;
+		var jsondata = "[";
+		for(var i=0;i<len;i++){
+			if(i == 0){
+				jsondata += '{"startDate":\"'+$(".time_item").eq(i).find(".start_date").val()+'\","endDate":\"'+$(".time_item").eq(i).find(".end_date").val()+'\","dehours":\"'+$(".time_item").eq(i).find(".json_date").val()+'\"}';
+			}else{
+				jsondata += ',{"startDate":\"'+$(".time_item").eq(i).find(".start_date").val()+'\","endDate":\"'+$(".time_item").eq(i).find(".end_date").val()+'\","dehours":\"'+$(".time_item").eq(i).find(".json_date").val()+'\"}';
+			}
+		}
+		jsondata += "]";
+		$("#sdayParting").val(jsondata);
+		var falg = validateMoney();
+		if(falg == false){
+			return false;
+		}
+		//提示操作系统选择
+		var oslist = $("#osDiv input[type='checkbox']:checked");
+		var osId = "";
+		if(oslist.length == 0){
+			bootbox.alert("操作系统为必填项,请选择!");
+			return false;
+		}else{
+			oslist.each(function(){
+				osId += $(this).val()+",";
+			});
+			if(osId!=""){
+				osId = osId.substring(0, osId.length-1);
+				$("#os").val(osId);
+			}
+		}
+		//提示场景选择
+		var placelist = $("#operatorAdgroup_placeDiv input[type='checkbox']:checked");
+		var placeId = "";
+		var placeName = "";
+		if(placelist.length == 0){
+			bootbox.alert("场景为必填项,请选择!");
+			return false;
+		}else{
+			placelist.each(function(){
+				placeId += $(this).val()+",";
+				placeName += $(this).attr("title")+",";
+			});
+			
+			if(placeId!=""){
+				placeId = placeId.substring(0, placeId.length-1);
+				placeName = placeName.substring(0, placeName.length-1);
+				var checked_id =$(".input-group input[name=aa]:checked").val();
+				if(checked_id==1){
+					$("#placeId").val("a,"+placeId);
+				}else if(checked_id==2){
+					$("#placeId").val("b,"+placeId);
+				}
+				$("#placeName").val(placeName);
+			}
+		}
+		$("#validateForm").submit();
+		return false;
+	});
+	
+	$("#create-btn-cancel,#edit-btn-cancel").click(function(){
+		window.location.href = ctx+"/advertiser/main/ad/target/operator-ad-group/list?campaignId="+$("#campaignId").val()+"&orderId="+$("#orderId").val()+"&advertiserId="+$("#advertiserId").val();
+	});
+	
+	$("#totalBudget").blur(function(){
+		validateMoney();
+	});
+	
+	//场景
+	if($(".place-edit").html()){
+		savewifi();//获取保存的WiFi
+		setting_date();//获取排期时间
+		var place = $("#placeId").val();
+		var authArr = place.split(",");
+		var checkboxs = $("#operatorAdgroup_placeDiv input[type='checkbox']");
+		checkboxs.each(function(i){
+			for(var i = 0;i<authArr.length;i++){
+				if($(this).val() == authArr[i]){
+					$(this).attr("checked","true");
+				}
+			}
+		});
+	}
+	
+	//操作系统
+	if($(".edit_osDiv").html()){
+		var osId = $("#os").val();
+		var authArr = osId.split(",");
+		var checkboxs = $("#osDiv input[type='checkbox']");
+		checkboxs.each(function(i){
+			for(var i = 0;i<authArr.length;i++){
+				if($(this).val() == authArr[i]){
+					$(this).attr("checked","true");
+				}
+			}
+		});
+	}
+	
+	/******  广告位  *****/
+	//选中右移
+    var $chooseing_li = $("#zone-chooseingUl li");
+	$chooseing_li.live('click', function() {
+		var mychoice = $(this).attr("title");
+		var mychoiceId = $(this).attr("value");
+		$(this).remove();
+	    var ul = document.getElementById("dimension-selected");
+		$("#zone-selectedUl").append("<li value="+mychoiceId+" title="+mychoice+"><label>"+mychoice+"</label><input type='button' class='movedel'/></li>");
+		if($("#zoneId").val() == ""){
+			$("#zoneId").val(mychoiceId);
+		}else{
+			$("#zoneId").val($("#zoneId").val()+","+mychoiceId);
+		}
+	});
+	
+    //选中左移
+	$('#zone-selectedUl li input.movedel').live('click', function() {	
+		var mychoice = $(this).parents("li").attr("title");
+		var mychoiceId = $(this).parents("li").attr("value");
+		$(this).parents("li").remove();
+	    $("#zone-chooseingUl").append("<li value="+mychoiceId+" title="+mychoice+"><label>"+mychoice+"</label></li>");
+		//获取content值
+		var selectedArr = $("#zoneId").val().split(",");
+		for(var i=0;i<selectedArr.length;i++){
+			if(selectedArr[i] == mychoiceId){
+				selectedArr.splice(i,1);
+			}
+		} 
+		if(selectedArr.length !=0){
+			for(var j=0;j<selectedArr.length;j++){
+				if(j == 0){
+					$("#zoneId").val(selectedArr[0]);
+				}else{
+					$("#zoneId").val($("#zoneId").val()+","+selectedArr[j]);
+				}
+			} 
+		}else{
+			$("#zoneId").val("");
+		}
+	});
+	
+	//编辑时保存选中的广告位
+	if($(".edit_zonechooseDiv").html()){
+		$("#edit_zonechoose").hide();
+		$("#edit_zonechoose").html($("#zone-selectedUl").html());
+	}
+	
+	//选择广告位
+	$(".input-group input[name=position]").click(function(){
+		$("#zone-chooseingUl").empty();//清空ul
+		$("#zone-selectedUl").empty();
+		//取值
+		var check_input = [];
+		checks =$(".input-group input[name=position]:checked");
+		var checked_id = "";
+		checks.each(function(){
+			checked_id += $(this).val() +",";
+		});
+		if(checked_id != ""){
+			checked_id = checked_id.substring(0, checked_id.length-1);
+		}
+		var zone_url = ctx+"/advertiser/main/ad/target/ad-group-alloperator/chooseZone";
+		var param = {"position":checked_id,"operatorId":$("#input_selectOperator").val()};
+		$.post( zone_url, param, function(data){
+	 		$.each( data, function( key, val ) {
+	 			$("#zone-chooseingUl").append("<li value="+val.id+" title="+val.name+"><label>"+val.name+"</label></li>");
+			});
+	 	});
+		if($(".edit_zonechooseDiv").html()){
+			
+	 		$("#zone-selectedUl").append($("#edit_zonechoose").html());
+		}
+	})
+	
+	/******  智选网络  *****/
+	$("#btn-selectOperator").click(function(){
+		layer.open({
+		    type: 2,
+			title: '选择媒体',
+			shadeClose: false,
+			shade: 0.6,
+			fix:false,
+			area: ['680px','430px'],
+			content: [ctx+'/advertiser/main/ad/target/ad-group-alloperator/chooseOperator', 'no']
+		}); 
+	});
+	
+	/******  媒体场景  *****/
+	$("#btn-selectOperatorPlace").click(function(){
+		layer.open({
+		    type: 2,
+			title: '选择媒体场景',
+			shadeClose: false,
+			shade: 0.6,
+			fix:false,
+			area: ['680px','430px'],
+			content: [ctx+'/advertiser/main/ad/target/ad-group-alloperator/chooseOperatorPlace', 'no']
+		}); 
+	});
+	
+	/******  小场景  *****/
+	$("#btn-selectPlace").click(function(){
+		layer.open({
+		    type: 2,
+			title: '选择小场景',
+			shadeClose: false,
+			shade: 0.6,
+			fix:false,
+			area: ['680px','430px'],
+			content: [ctx+'/advertiser/main/ad/target/ad-group-alloperator/choosePlace', 'no']
+		}); 
+	});
+	
+	/******  数聚场景  *****/
+	$("#btn-selectPlaceClass").click(function(){
+		layer.open({
+		    type: 2,
+			title: '选择数聚场景',
+			shadeClose: false,
+			shade: 0.6,
+			fix:false,
+			area: ['680px','430px'],
+			content: [ctx+'/advertiser/main/ad/target/ad-group-alloperator/choosePlaceClass', 'no']
+		}); 
+	});
+	
+	/******  选择终端  *****/
+	$("#btn-selectWifi").click(function(){
+		layer.open({
+		    type: 2,
+			title: '选择终端',
+			shadeClose: false,
+			shade: 0.6,
+			minmax:true,
+			fix:false,
+			area: ['1000px','500px'],
+			content: ctx+'/advertiser/main/ad/target/ad-group-alloperator/chooseWifi'
+		}); 
+	});
+	
+});
+	
+function exportExcel_list(){
+	var searchValue = $("#searchValue").val();
+	if(searchValue == "请输入关键字"){
+		searchValue = "";
+	}
+	var param = "?orderId="+$("#orderId").val()+"&advertiserId="+$("#advertiserId").val()+"&status="+$("#status").val()+"&searchValue="+searchValue;
+	$("#exportExcel").attr("href",$("#ctx").val()+"/advertiser/main/ad/target/campaign/exportDataReportExcel"+param);
+	return false;
+}
+
+function validateMoney(){
+	var reg=/^\d{1,8}\.?\d{0,2}$/;
+	var $this = $("#totalBudget");
+	if($this.val().match(reg)!=null){
+		if(($this.val().indexOf('.') == -1 && $this.val().length > 8) || $this.val() <= 0){
+			$this.css("box-shadow","0 0 6px #ff0000").attr('title','总预算金额整数位最多8位');
+			$this.parent("div").find("span.spanVaildate").html("总预算金额整数位最多8位");
+			return false;
+		}else if($this.val() > parseInt($("#budget").val())){
+			$this.css("box-shadow","0 0 6px #ff0000").attr('title','总预算不能大于活动总预算');
+			$this.parent("div").find("span.spanVaildate").html("总预算不能大于活动总预算");
+			return false;
+		}else{
+			$this.css("box-shadow","none").attr('title','');
+			$this.parent("div").find("span.spanVaildate").html("");
+		}
+	}else{
+		$this.css("box-shadow","0 0 6px #ff0000").attr('title','总预算金额整数位最多8位且最多有2位小数');
+		$this.parent("div").find("span.spanVaildate").html("总预算金额整数位最多8位且最多有2位小数");
+		return false;
+	}
+}
+
+function setting_date(){
+	var str_date = $("#sdayParting").val();
+	console.log(str_date);  
+	if(str_date!=""){
+		var js_date = $.parseJSON(str_date);
+		var html="";
+		for(var i=0;i<js_date.length;i++){
+			console.log(js_date[i].dehours);
+			html += '<div class="time_item"><p class="tr_data"><span class="inp"><input type="text" class="start_date edit_time" readonly="readonly" value="'+js_date[i].startDate+'"></span><span class="inp"><input type="text" class="end_date edit_time" readonly="readonly" value = "'+js_date[i].endDate+'"></span></p><button class="btn_del">删除</button><input class="json_date" type="hidden" value = "'+js_date[i].dehours+'"></div>'; 
+		}
+		$(".setting .time_box").append(html);
+		$(".time_box .time_item .btn_del").bind("click",function(e){
+				$(this).parents(".time_item").remove();
+			});
+		var date = $("#dateRangePicker").val().split('to');
+		var s_date = date[0];
+		var e_date = date[1];
+		$(".setting .tr_data").unbind("mousedown").bind("mousedown",function(){
+				var obj_tr = $(this);
+				var th_date_s = $(this).find(".start_date").val();
+				var th_date_e = $(this).find(".end_date").val();
+				var datePickerOptions_td = {
+				"startDate":th_date_s,
+				"endDate":th_date_e,
+				getValue: function(){
+					if (obj_tr.find(".start_date").val() && obj_tr.find(".end_date").val() )
+						return obj_tr.find(".start_date").val() + ' to ' + obj_tr.find(".end_date").val();
+					else
+						return '';
+				},
+				setValue: function(s,s1,s2){
+					obj_tr.find(".start_date").val(s1);
+					obj_tr.find(".end_date").val(s2);
+				}
+			}
+			obj_tr.unbind("datepicker-apply").bind('datepicker-apply',function(event,obj){
+				var date = $("#dateRangePicker").val().split('to');
+				var s_date = date[0];
+				var e_date = date[1];
+				var checked_date = new Array();
+				var other_box =obj_tr.parent().siblings();
+				var len = other_box.length;
+				for(var i=0;i<len;i++){
+					var json_check = {"startDate":other_box.eq(i).find(".start_date").val(),"endDate":other_box.eq(i).find(".end_date").val()};
+					checked_date.push(json_check);
+				}
+				console.log(checked_date);									
+				var startDate = obj.value.split('to')[0];
+			   	var endDate = obj.value.split('to')[1];
+		   		var flag = true;
+		   		if(flag){
+					var obj = $("#quantum_list1");
+					if(obj.find(".pitchon")){
+						var timeData = obj.find(".pitchon").map(function(i,span){
+							return $(span).attr("title");
+						}).toArray().join(',');
+					}else{
+						var timeData = -1;
+					}
+					obj_tr.find(".start_date").val(startDate);
+					obj_tr.find(".end_date").val(endDate);
+					obj_tr.parent().find(".json_date").val(timeData);
+				}else{alert("请选择正确时间!");}
+			});
+			obj_tr.dateRangePicker1(datePickerOptions_td);
+			$("#quantum_list1").find("p").removeClass("pitchon");
+			var chose_time = obj_tr.parent().find(".json_date").val();
+			console.log(chose_time);
+			if(chose_time!=-1&&chose_time!=""){
+				var chose_arr = chose_time.split(",");
+				for(var n=0;n<chose_arr.length;n++){
+					$("#quantum_list1 p").eq(chose_arr[n]).addClass("pitchon");
+				}
+			}
+		});
+	}
+}

+ 213 - 0
src/main/webapp/assets/js/advertiser/operatoradAllGroup_dialog.js

@@ -0,0 +1,213 @@
+$(document).ready(function(){
+	var ctx = $("#ctx").val();//获取服务器地址
+	
+	/***************************    选择媒体    ***************************/
+	
+	$(".selectOperator_save").click(function(){
+		var operatorId = $("#selectOperatorDiv input[type='radio']:checked").val();
+		if(operatorId == undefined){
+			alert("请选择媒体,在进行操作!");
+			return false;
+		}
+		parent.$("#input_selectOperator").val(operatorId);//父层的元素
+		var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
+		parent.layer.close(index);//再执行关闭
+	});
+	
+	$("#selectOperatorDiv input[type='radio']").each(function(){
+		if($(this).val() == parent.$("#input_selectOperator").val()){
+			$(this).attr('checked',true);
+		}
+	});
+	
+	// 分页中超链接跳转
+	$('#selectOperatorForm .pagination ul li a[href]').click(function(){
+		var _page = $(this).attr('href').substr(1);
+		$('#selectOperatorForm').find('input:hidden[name="page"]').val(_page);
+		$('#selectOperatorForm').submit();
+	});
+	
+/***************************    选择媒体场景    ***************************/
+	
+	$(".selectOperatorPlace_save").click(function(){
+		var placeId = $("#selectOperatorPlaceDiv input[type='radio']:checked").val();
+		if(placeId == undefined){
+			alert("请选择媒体场景,在进行操作!");
+			return false;
+		}
+		parent.$("#placeId").val(placeId);//父层的元素
+		var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
+		parent.layer.close(index);//再执行关闭
+	});
+	
+	$("#selectOperatorPlaceDiv input[type='radio'],#selectPlaceDiv input[type='radio'],#selectPlaceClassDiv input[type='radio']").each(function(){
+		if($(this).val() == parent.$("#placeId").val()){
+			$(this).attr('checked',true);
+		}
+	});
+	
+	// 分页中超链接跳转
+	$('#selectOperatorPlaceForm .pagination ul li a[href]').click(function(){
+		var _page = $(this).attr('href').substr(1);
+		$('#selectOperatorPlaceForm').find('input:hidden[name="page"]').val(_page);
+		$('#selectOperatorPlaceForm').submit();
+	});
+	
+/***************************    选择小场景    ***************************/
+	
+	$(".selectPlace_save").click(function(){
+		var placeId = $("#selectPlaceDiv input[type='radio']:checked").val();
+		if(placeId == undefined){
+			alert("请选择小场景,在进行操作!");
+			return false;
+		}
+		parent.$("#placeId").val(placeId);//父层的元素
+		var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
+		parent.layer.close(index);//再执行关闭
+	});
+	
+	// 分页中超链接跳转
+	$('#selectPlaceForm .pagination ul li a[href]').click(function(){
+		var _page = $(this).attr('href').substr(1);
+		$('#selectPlaceForm').find('input:hidden[name="page"]').val(_page);
+		$('#selectPlaceForm').submit();
+	});
+	
+/***************************    选择数聚场景    ***************************/
+	
+	$(".selectPlaceClass_save").click(function(){
+		var placeId = $("#selectPlaceClassDiv input[type='radio']:checked").val();
+		if(placeId == undefined){
+			alert("请选择数聚场景,在进行操作!");
+			return false;
+		}
+		parent.$("#placeId").val(placeId);//父层的元素
+		var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
+		parent.layer.close(index);//再执行关闭
+	});
+	
+	// 分页中超链接跳转
+	$('#selectPlaceClassForm .pagination ul li a[href]').click(function(){
+		var _page = $(this).attr('href').substr(1);
+		$('#selectPlaceClassForm').find('input:hidden[name="page"]').val(_page);
+		$('#selectPlaceClassForm').submit();
+	});
+	
+/***************************    选择终端    ***************************/
+	
+	$(".selectWifi_save").click(function(){
+		var checkboxs = $("table tbody .checkboxStyle_change");
+		var ids = [];
+		if(checkboxs.length > 0){
+			checkboxs.each(function(){
+				var id = parseInt($(this).attr("id"));
+				ids.push(id);
+			});
+			parent.$("#selectWifi").val(ids);//父层的元素
+			var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
+			parent.layer.close(index);//再执行关闭
+		}else{
+			alert("请选择wifi信息,在进行操作!");
+		}
+	});
+	
+	// 分页中超链接跳转
+	$('#selectWifiForm .pagination ul li a[href]').click(function(){
+		var _page = $(this).attr('href').substr(1);
+		$('#selectWifiForm').find('input:hidden[name="page"]').val(_page);
+		$('#selectWifiForm').submit();
+	});
+	
+	$("table tbody .checkboxStyleTd").each(function(){
+		var obj = $(this);
+		var ids = parent.$("#selectWifi").val().split(",");
+		for(var i = 0,l=ids.length;i<l;i++){
+			if(obj.attr("id") == ids[i]){
+				obj.addClass("checkboxStyle_change");
+			}
+		}
+	});
+	
+	//获取省份信息
+	if($("#main_cnul").html()){
+		$("#cn_son_ul").hide();
+		if($("#cn").val() == "省"){
+			$("#cn").val("");
+		}
+		$("#cn_son_ul").append("<li value=''>省</li>");
+		var url = "cn";
+		$.getJSON( url, function(data) {
+			var data_1 = data.province;
+			$.each( data_1, function( key, val ) {
+				$("#cn_son_ul").append('<li>' + val + '</li>');
+			});
+		});
+		$("#cnul_span").on("click",function(){
+			if($('#cn_son_ul').height()>210){
+				$('#cn_son_ul').addClass("son_ul_change");
+	 		}
+	 		$('#cn_son_ul').show(); //ul显示
+		});
+		$("ul#cn_son_ul li").live("click",function(){
+	 		$("#cnul_span").text($(this).text());
+	 		if($(this).text() == "省"){
+	 			$("#cn").val("");
+	 		}else{
+	 			$("#cn").val($(this).text());
+	 		}
+	 		$("#cnCity").val("");
+	 		$("#cnCityul_span").text("市");
+	 		$("#cn_son_ul").hide(); //ul隐藏
+	 		$('#selectWifiForm').submit();
+		});
+		
+		$("#cnul_box").mouseleave(function(){
+			$('#cn_son_ul').hide(); //ul隐藏
+			$('#cn_son_ul').removeClass("son_ul_showchange");
+		});
+	}
+	
+	//获取省份对应的城市信息
+	if($("#main_cnCityul").html()){
+		$("#cnCityul_son_ul").hide();
+		if($("#cnCity").val() == "市"){
+			$("#cnCity").val("");
+		}
+		$("#cnCityul_span").on("click",function(){
+			initSelectUlData("cnCityul_son_ul","市","city?province=" + $("#cn").val(),$("#cn").val(),"cnCityul_box","city");
+		});
+	 	$('ul#cnCityul_son_ul li').live("click",function(){
+			$("#cnCityul_span").text($(this).text());
+			if($(this).text() == "市"){
+				$("#cnCity").val("");
+	 		}else{
+	 			$("#cnCity").val($(this).text());
+	 		}
+			$("#cnCityul_son_ul").hide(); //ul隐藏
+			$('#selectWifiForm').submit();
+		});
+	}
+});
+
+function initSelectUlData(target_sonulId,defaultName,url,paramValue,boxName,tabId){
+	$("#"+target_sonulId).empty();
+ 	$("#"+target_sonulId).append("<li value=''>"+defaultName+"</li>");
+ 	if(paramValue != -1 && paramValue != ""){
+ 	 	$.getJSON( url, function(data) {
+ 	 		var data_1 = data[tabId];
+ 	 		$.each( data_1, function( key, val ) {
+ 	 			$("#"+target_sonulId).append('<li>' + val + '</li>');
+	 		});
+ 			$("#"+target_sonulId).show(); //ul显示
+			if($("#"+target_sonulId).height()>210){
+				$("#"+target_sonulId).addClass("son_ul_change");
+	 		};
+ 		});
+ 	}else{
+ 		$("#"+target_sonulId).show();
+ 	}
+	$("#"+boxName).mouseleave(function(){
+		$("#"+target_sonulId).hide(); //ul隐藏
+		$("#"+target_sonulId).removeClass("son_ul_change");
+ 	});
+}

File diff suppressed because it is too large
+ 1 - 0
src/main/webapp/assets/js/layer/extend/layer.ext.js


File diff suppressed because it is too large
+ 1 - 0
src/main/webapp/assets/js/layer/layer.js


BIN
src/main/webapp/assets/js/layer/skin/default/icon-ext.png


BIN
src/main/webapp/assets/js/layer/skin/default/icon.png


BIN
src/main/webapp/assets/js/layer/skin/default/loading-0.gif


BIN
src/main/webapp/assets/js/layer/skin/default/loading-1.gif


BIN
src/main/webapp/assets/js/layer/skin/default/loading-2.gif


File diff suppressed because it is too large
+ 6 - 0
src/main/webapp/assets/js/layer/skin/layer.css


File diff suppressed because it is too large
+ 7 - 0
src/main/webapp/assets/js/layer/skin/layer.ext.css


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