소스 검색

行程单费用40

caipin 5 년 전
부모
커밋
fdc4d88b9d

BIN
global/css/down_arrow.png


BIN
global/css/down_arrow2.png


BIN
global/css/flight_arrow.png


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 4056 - 0
global/css/global-1.css


+ 132 - 0
global/css/itinerary.js

@@ -0,0 +1,132 @@
+//构建总行程单
+function buildItineraryProcess(data){
+	let html='';
+	let dataJson=JSON.parse(data);
+	let last=dataJson.length-1;
+	for(let i=0;i<dataJson.length;i++){
+		let price=0;
+		for(let p=0;p<dataJson[i].feeTraveItem.length;p++){
+			price+=parseFloat(dataJson[i].feeTraveItem[p].price);
+		}
+		html+=`<div class="addressName fL"><i class="contactsMark icon-">P</i><b>${dataJson[i].departurecity}</b></div>
+		<div class="pointLine fL">
+			<span class="price colGray">¥${price}</span>
+			<span class="time colGray">${dataJson[i].departuredate}${dataJson[i].arrivalsdate}</span>
+		</div>`;
+		if(i===last){
+			let arrivalscity=dataJson[i].arrivalscity.substring(1);
+			html+=`<div class="addressName fL"><i class="contactsMark icon-">P</i><b>${arrivalscity}</b></div>`;
+		}
+	}
+	
+	$("td[itineraryinfo]").html(html);
+}
+
+//设置城市下来菜单-存储数据
+function districtCityBuild(selectDom,obj,selected){
+	var storage=window.localStorage;
+	var id=$('select['+obj+']').val();
+	
+	if(typeof storage["district_"+id]==='undefined'||storage["district_"+id]===''){
+		$.ajax({
+			url : '/api/district?did='+id,
+			type : "post",
+			cache : false,
+			dataType : "json",
+			async:false,
+			global : true,
+			success : function(data) {
+				storage.setItem("district_"+id,JSON.stringify(data.districtList));
+				//districtCity(selectDom,data.districtList);
+			},
+			error : function(err) {}
+		});
+	}
+	
+	districtCity=JSON.parse(storage["district_"+id]);
+	
+	var html='';var cityName='';
+	if(typeof selected!=='undefined'){
+		if(selectDom=='departurecity'){
+			cityName=selected.departurecity;
+		}else{
+			cityName=selected.arrivalscity.substring(1);
+		}
+	}
+	
+	
+	for(let i=0;i<districtCity.length;i++){
+		
+		if(typeof selected!=='undefined'&&cityName==districtCity[i].name){
+			html+='<option selected value='+districtCity[i].name+'>'+districtCity[i].name+'</option>';
+		}else{
+			html+='<option value='+districtCity[i].name+'>'+districtCity[i].name+'</option>';
+		}
+	}
+	$("select["+selectDom+"]").html(html);
+}
+//--设置省份下拉
+function districtTop(selected){
+	
+	var storage=window.localStorage;
+	
+	if(typeof storage["districtTop"]==='undefined'||storage["districtTop"]===''){
+		$.ajax({
+			url : '/api/district',
+			type : "post",
+			cache : false,
+			dataType : "json",
+			global : true,
+			success : function(data) {
+				storage.setItem("districtTop",JSON.stringify(data.districtList));
+				//districtTop(data.districtList);
+				
+			},
+			error : function(err) {}
+		});
+	}
+	
+	var districtTop=JSON.parse(storage["districtTop"]);
+	
+	var html='';
+	for(let i=0;i<districtTop.length;i++){
+		if(typeof selected!=='undefined'&&selected.departureprovince==districtTop[i].name){
+			html+='<option selected value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
+		}else{
+			html+='<option value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
+		}
+		
+	}
+	$("select[departureProvince]").html(html);
+	
+	html='';
+	for(let i=0;i<districtTop.length;i++){
+		if(typeof selected!=='undefined'&&selected.arrivalsprovince==districtTop[i].name){
+			html+='<option selected value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
+		}else{
+			html+='<option value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
+		}
+		
+	}
+	$("select[arrivalsProvince]").html(html);
+}
+
+$(function() {
+	//打开设置行程单
+	$("a[addStroke]").click(function() {
+		console.log('ddd');
+		districtTop();
+		districtCityBuild('departurecity','departureprovince');
+		districtCityBuild('arrivalscity','arrivalsprovince');
+		$("input[departuredate]").val('');
+		$("input[arrivalsdate]").val('');
+		$("tbody[feeTravelItem]").html('');
+		
+		var sessionItinerary= sessionStorage.getItem("itineraryList");
+		sessionItinerary=JSON.parse(sessionItinerary);
+		
+		$("a[additinerarybut]").show();
+		$("a[ediItineraryBut]").hide();
+	});
+	
+})

BIN
global/css/qrcode2.png


BIN
global/images/iphonedemo1.jpg


BIN
global/images/iphonedemo2.jpg


BIN
global/images/iphonedemo3.jpg


BIN
global/images/iphonedemo4.jpg


BIN
global/images/tianyancha.png


BIN
global/images/tip.gif


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 2140 - 0
global/jquery.validator.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 5 - 0
global/jquery.validator.min.js


+ 528 - 0
global/js/itinerary.js

@@ -0,0 +1,528 @@
+
+$(function() {
+	//初始化行程单
+	var sessionStorage= window.sessionStorage;
+	var sessionItinerary= sessionStorage.getItem(sessionStorageList);
+	if(typeof sessionItinerary!=='object'){
+		//console.log(JSON.parse(sessionItinerary));
+		buildItinerary(JSON.parse(sessionItinerary));
+		fnTotTravelPrice();
+		buildItineraryProcess(sessionItinerary);
+	}
+	
+	//打开新建设置行程单
+	$("a[addStroke]").click(function() {
+		
+		districtTop();
+		districtCityBuild('departurecity','departureprovince');
+		districtCityBuild('arrivalscity','arrivalsprovince');
+		$("input[departuredate]").val('');
+		$("input[arrivalsdate]").val('');
+		$("tbody[feeTravelItem]").html('');
+		
+		var sessionItinerary= sessionStorage.getItem(sessionStorageList);
+		
+		if(!(sessionItinerary===null||sessionItinerary==='[]')){
+			sessionItinerary=JSON.parse(sessionItinerary);
+			var id=sessionItinerary.length-1;
+			let item=`{"departuredate":"","departureprovince":"${sessionItinerary[id].arrivalsprovince}","departurecity":"${sessionItinerary[id].arrivalscity.substring(1)}","arrivalsdate":"${sessionItinerary[id].arrivalsdate}","arrivalsprovince":"","arrivalscity":"","feeTraveItem":[]}`;
+			districtTop(JSON.parse(item));
+			districtCityBuild('departurecity','departureprovince',JSON.parse(item));
+			setDisabled(item);
+		}else{
+			setUnDisabled();
+		}
+		
+		$("a[additinerarybut]").show();
+		$("a[ediItineraryBut]").hide();
+	});
+	
+	//存储新建的行程单
+	$("a[additinerarybut]").click(function() {
+		var itinerary=fnGetItineraryData();
+		
+		var sessionItinerary = sessionStorage.getItem(sessionStorageList);
+		
+		if(typeof sessionItinerary==='object'){
+			sessionItinerary=[];
+			sessionItinerary.push(itinerary);
+			sessionStorage.setItem(sessionStorageList,JSON.stringify(sessionItinerary));
+		}else{
+			sessionItinerary=JSON.parse(sessionItinerary);
+			sessionItinerary.push(itinerary);
+			sessionStorage.setItem(sessionStorageList,JSON.stringify(sessionItinerary));
+		}
+		
+		buildItinerary(sessionItinerary);
+		fnTotTravelPrice();
+		
+		buildItineraryProcess(sessionItinerary);
+	});
+	
+	//打开编辑行程单
+//	$("a[ediStroke]").click(function() {
+//		var sessionItinerary= sessionStorage.getItem(sessionStorageList);
+//		sessionItinerary=JSON.parse(sessionItinerary);
+//		var id=$(this).attr('dataId');
+//		
+//		var storage=window.localStorage;
+//		
+//		if(id==='0'){
+//			
+//		}else{
+//			sessionItinerary[id].departureprovince=sessionItinerary[id-1].arrivalsprovince;
+//			sessionItinerary[id].departurecity=sessionItinerary[id-1].arrivalscity;
+//			console.log(sessionItinerary[id]);
+//		}
+//		
+//		districtTop(sessionItinerary[id]);
+//		districtCityBuild('departurecity','departureprovince',sessionItinerary[id]);
+//		districtCityBuild('arrivalscity','arrivalsprovince',sessionItinerary[id]);
+//		
+//		//读取上一个行程的终点
+//		
+//		buildFeeTravelItem(sessionItinerary[id].feeTraveItem);
+//		
+//		if(id==='0'){
+//			$("input[departuredate]").val(sessionItinerary[id].departuredate);
+//			setUnDisabled();
+//		}else{
+//			console.log(sessionItinerary[id-1].arrivalsdate);
+//			$("input[departuredate]").val(sessionItinerary[id-1].arrivalsdate.substring(1));
+//			setDisabled('');
+//		}
+//		
+//		$("a[additinerarybut]").hide();
+//		$("a[ediItineraryBut]").show();
+//	});
+	
+	$("tbody[itinerary]").on("click","a[edistroke]",function(){
+		$("input[name=ediStrokeId]").val($(this).attr('dataid'));
+		var sessionItinerary= sessionStorage.getItem(sessionStorageList);
+		sessionItinerary=JSON.parse(sessionItinerary);
+		var id=$(this).attr('dataId');
+		
+		var storage=window.localStorage;
+		
+		if(id!=='0'){
+			sessionItinerary[id].departureprovince=sessionItinerary[id-1].arrivalsprovince;
+			sessionItinerary[id].departurecity=sessionItinerary[id-1].arrivalscity.substring(1);
+			
+		}
+		
+		districtTop(sessionItinerary[id]);
+		districtCityBuild('departurecity','departureprovince',sessionItinerary[id]);
+		districtCityBuild('arrivalscity','arrivalsprovince',sessionItinerary[id]);
+		
+		
+		$("input[arrivalsdate]").val(sessionItinerary[id].arrivalsdate.substring(1));
+		
+		buildFeeTravelItem(sessionItinerary[id].feeTraveItem);
+		
+		if(id==='0'){
+			$("input[departuredate]").val(sessionItinerary[id].departuredate);
+			setUnDisabled();
+		}else{
+			$("input[departuredate]").val(sessionItinerary[id-1].arrivalsdate.substring(1));
+			setDisabled('');
+		}
+		
+		$("a[additinerarybut]").hide();
+		$("a[ediItineraryBut]").show();
+	});
+	
+	//存储编辑行程单
+	$("a[ediItineraryBut]").click(function() {
+		var itinerary=fnGetItineraryData();
+		var siIndex=$("input[name=ediStrokeId]").val();
+		
+		var sessionItinerary =JSON.parse(sessionStorage.getItem(sessionStorageList));
+		
+		sessionItinerary[siIndex]=itinerary;
+		let data=JSON.stringify(sessionItinerary);
+		sessionStorage.setItem(sessionStorageList,data);
+		buildItinerary(sessionItinerary);
+		fnTotTravelPrice();
+		buildItineraryProcess(data)
+	});
+	
+	//移除行程单item功能
+	$("tbody[itinerary]").on("click","a[removeitinerary]",function(){
+		var sessionItinerary= sessionStorage.getItem(sessionStorageList);
+		var id=$(this).attr('dataId');
+		sessionItinerary=JSON.parse(sessionItinerary);
+		sessionItinerary.splice(id,1);
+		sessionStorage.setItem(sessionStorageList,JSON.stringify(sessionItinerary));
+		buildItinerary(sessionItinerary);
+		$("#itinerary").val(JSON.stringify(sessionItinerary));
+		fnTotTravelPrice();
+		buildItineraryProcess(sessionItinerary);
+	});
+	
+	$("select[departureProvince]").change(function() {
+		districtCityBuild('departurecity','departureprovince');
+	});
+	
+	$("select[arrivalsProvince]").change(function() {
+		districtCityBuild('arrivalscity','arrivalsprovince');
+	});
+	$("a[feeTravelItem]").click(function() {
+		var itemName=$("select[feeTravelItem] option:selected").text();
+		var itemId=$("select[feeTravelItem] option:selected").val();
+		
+		var html='<tr class="remove" ><th>'+itemName+'</th>';
+		html+='<td class="taR"><p>¥<input type="number" itemId_'+itemId+' data="'+itemName+'" dataId="'+itemId+'" value="0" placeholder="输入费用" pattern="[0-9]" step="1" min="0"class="span2"></p>'+
+		'<p><textarea type="text" itemDetail_'+itemId+' placeholder="填写费用说明" rows="2" style=" width: 350px; margin: 10px 0px 0px 12px; height: 65px;"></textarea></p></td>';
+		//html+='<td><textarea type="text" itemDetail_'+itemId+' placeholder="填写费用说明"></textarea></td>';
+		html+='<td><a href="#" removeFeeTravelItem >移除</a></td></tr>';
+		$("tbody[feeTravelItem]").append(html);
+		
+	});
+	$("tbody[feeTravelItem]").on("click","a[removeFeeTravelItem]",function(){
+		$(this).closest('.remove').remove();
+	});
+	
+	//检查行程日期
+	$("input[departureDate]").change(function() {
+		
+		 let date=$(this).val();
+		
+		$.ajax({
+			url : '/api/itinerary/date',
+			data: {date:date},
+			type : "post",
+			cache : false,
+			dataType : "json",
+			async:false,
+			global : true,
+			success : function(data) {
+				console.log(data.status);
+				if(!data.status){
+					
+					$('input[departureDate]').val('');
+					$('td[msg]').html('<span class="colRed">日期已被使用过</span>');
+				}else{
+					$('td[msg]').html('');
+				}
+				//storage.setItem("district_"+id,JSON.stringify(data.districtList));
+				//districtCity(selectDom,data.districtList);
+			},
+			error : function(err) {}
+		});
+	});
+	$("input[arrivalsDate]").change(function() {
+		
+		 let date=$(this).val();
+		
+		$.ajax({
+			url : '/api/itinerary/date',
+			data: {date:date},
+			type : "post",
+			cache : false,
+			dataType : "json",
+			async:false,
+			global : true,
+			success : function(data) {
+				console.log(data.status);
+				if(!data.status){
+					
+					$('input[arrivalsDate]').val('');
+					$('td[msg]').html('<span class="colRed">日期已被使用过</span>');
+				}else{
+					$('td[msg]').html('');
+				}
+				//storage.setItem("district_"+id,JSON.stringify(data.districtList));
+				//districtCity(selectDom,data.districtList);
+			},
+			error : function(err) {}
+		});
+	});
+	
+	
+})
+
+function setDisabled(sessionItinerary){
+	
+	if(sessionItinerary!==''){
+		let si=JSON.parse(sessionItinerary);
+		$('input[departuredate]').val(si.arrivalsdate.substring(1));
+	}
+	
+	//禁用出发地
+	$('select[departureprovince]').attr("disabled","disabled");
+	$('select[departurecity]').attr("disabled","disabled");
+	
+	$('input[departuredate]').attr("disabled","disabled");
+}
+
+function setUnDisabled(){
+	
+	//禁用出发地
+	$('select[departureprovince]').removeAttr("disabled");
+	$('select[departurecity]').removeAttr("disabled");
+	$('input[departuredate]').removeAttr("disabled");
+}
+
+//构建总行程单
+function buildItineraryProcess(data){
+	let html='';
+	let dataJson=data;
+	if(typeof data==='string'){
+		dataJson=JSON.parse(data);
+	}
+	
+	let last=dataJson.length-1;
+	let n=0;
+	
+	for(let i=0;i<dataJson.length;i++){
+		let price=0;
+		for(let p=0;p<dataJson[i].feeTraveItem.length;p++){
+			price+=parseFloat(dataJson[i].feeTraveItem[p].price);
+		}
+		price=price.toFixed(2);
+		
+		let city='';
+		if(i==0){
+			city=dataJson[i].departurecity;
+		}else{
+			n=i-1;
+			city=dataJson[n].arrivalscity.substring(1);
+		}
+		
+		html+=`<li>
+		<div class="itineraryList">
+			<div class="addressName"><i class="contactsMark icon-">P</i> <b>${city}</b></div>
+			<div class="pointLine">
+				<div class="priceList">
+					<span class="priceTitle">金额</span>
+					<span class="price colGreen">¥${price}</span>
+				</div>
+				<div class="timeList">
+					<span class="timeTitle">时间</span>
+					<span class="time">${dataJson[i].departuredate}${dataJson[i].arrivalsdate}</span>
+				</div>
+			</div>
+		</div>
+	</li>`;
+		
+		if(i===last){
+			let arrivalscity=dataJson[i].arrivalscity.substring(1);
+			
+			html+=`<li>
+			<div class="itineraryList">
+				<div class="addressName"><i class="contactsMark icon-">P</i> <b>${arrivalscity}</b></div>
+				
+			</div>
+		</li>`;
+			
+			//html+=`<div class="addressName fL"><i class="contactsMark icon-">P</i><b>${arrivalscity}</b></div>`;
+		}
+	}
+	
+	$("ul[itineraryinfo]").html(html);
+}
+
+//重新计算费用单金额
+function fnTotTravelPrice(){
+	var itineraryStr=sessionStorage.getItem(sessionStorageList);
+	var sessionItinerary= JSON.parse(itineraryStr);
+	//重新赋值行程详情
+	$("#itinerary").val(itineraryStr);
+	var priceList=[];
+	for(let i=0;i<sessionItinerary.length;i++){
+		let feeTraveItem=sessionItinerary[i].feeTraveItem;
+		for(let k=0;k<feeTraveItem.length;k++){
+			if(typeof priceList[feeTraveItem[k].id]==='undefined'){
+				priceList[feeTraveItem[k].id]=0;
+			}
+			priceList[feeTraveItem[k].id]+=parseFloat(feeTraveItem[k].price);
+		}
+	}
+	
+	
+	$("input[id^='travel_']").val(0);
+	$("td span").html(0);
+	
+	let travelResult=0;
+	for(let i=0;i<priceList.length;i++){
+		if(typeof priceList[i]==='number'){
+			$("span[travelprice_"+i+"]").html(priceList[i].toFixed(2));
+			$("#travel_"+i+"").val(priceList[i].toFixed(2));
+			travelResult+=priceList[i];
+		}
+	}
+	
+	$("#travelResult").html(travelResult.toFixed(2));
+	$("#RS").html(travelResult.toFixed(2));
+}
+
+//构建费用说明
+function buildFeeTravelItem(feeTraveItem){
+	
+	var html='';
+	for(let i=0;i<feeTraveItem.length;i++){
+		html+='<tr class="remove" ><th>'+feeTraveItem[i].name+'</th>';
+		html+='<td class="taR"><p>¥<input type="number" itemId_'+feeTraveItem[i].id+' data="'+feeTraveItem[i].name+'" dataId="'+feeTraveItem[i].id+'" value="'+feeTraveItem[i].price+'" placeholder="输入费用" pattern="[0-9]" step="1" min="0"class="span2"></p>'+
+		'<p><textarea type="text"  itemDetail_'+feeTraveItem[i].id+' placeholder="填写费用说明" rows="2" style=" width: 350px; margin: 10px 0px 0px 12px; height: 65px;">'+feeTraveItem[i].detail+'</textarea></p></td>';
+		//html+='<td><textarea type="text"  itemDetail_'+feeTraveItem[i].id+' placeholder="填写费用说明">'+feeTraveItem[i].detail+'</textarea> </td>';
+		html+='<td><a href="#" removeFeeTravelItem >移除</a></td></tr>';
+	}
+	$("tbody[feeTravelItem]").html(html);
+}
+
+//获得设置行程单的相关内容
+function fnGetItineraryData(){
+	var departurecity=$("select[departurecity] option:selected").text();
+	var arrivalscity=$("select[arrivalscity] option:selected").text();
+	var departureprovince=$("select[departureprovince] option:selected").text();
+	var arrivalsprovince=$("select[arrivalsprovince] option:selected").text();
+	
+	var departuredate=$("input[departuredate]").val();
+	var arrivalsdate=$("input[arrivalsdate]").val();
+	
+	var feeTravePriceList=$("tbody[feeTravelItem]").find('input[type=number]');
+	//var feeTraveDetailList=$("tbody[feeTravelItem]").find('input[type=text]');
+	var feeTraveDetailList=$("tbody[feeTravelItem]").find('textarea');
+	if(arrivalscity!==''){
+		arrivalscity='-'+arrivalscity;
+	}
+	if(arrivalsdate!==''){
+		arrivalsdate='~'+arrivalsdate;
+	}
+	
+	var feeTraveItem=[];
+	for(let i=0;i<feeTravePriceList.length;i++){
+		feeTraveItem.push({'id':$(feeTravePriceList[i]).attr('dataId'),'name':$(feeTravePriceList[i]).attr('data'),'price':$(feeTravePriceList[i]).val(),'detail':$(feeTraveDetailList[i]).val()});
+	}
+	
+	var itinerary={'departuredate':departuredate,'departureprovince':departureprovince,'departurecity':departurecity,'arrivalsdate':arrivalsdate,'arrivalsprovince':arrivalsprovince,'arrivalscity':arrivalscity,'feeTraveItem':feeTraveItem};
+	return itinerary;
+}
+
+//设置行程详情--列表页
+function buildItinerary(list){
+	var html='';
+	for(let i=0;i<list.length;i++){
+		if(i==0){
+			html+='<tr><th colspan="2" class="ta"><i class="contactsMark icon-">P</i> '+list[i].departuredate+list[i].arrivalsdate+' '+list[i].departurecity+list[i].arrivalscity+'';
+		}else{
+			let previousIndex=i-1;
+			html+='<tr><th colspan="2" class="ta"><i class="contactsMark icon-">P</i> '+list[previousIndex].arrivalsdate.substring(1)+list[i].arrivalsdate+' '+list[previousIndex].arrivalscity.substring(1)+list[i].arrivalscity+'';
+		}
+		html+='<div class="fR"><a href="#route-add" ediStroke data-toggle="modal" dataId="'+i+'" >编辑</a>&nbsp;<a href="#" dataId="'+i+'" removeitinerary class="colRed">移除</a></div></th></tr>';
+		let feeTraveItem=list[i].feeTraveItem;
+		let price=0;let detail='';
+		
+		for(let k=0;k<feeTraveItem.length;k++){
+			price+=parseFloat(feeTraveItem[k].price);
+			
+			if(!(typeof feeTraveItem[k].detail==='undefined')){
+				detail=feeTraveItem[k].detail.replace(new RegExp("\n", "gm"), '<br/>');
+			}
+			html+='<tr><th>'+feeTraveItem[k].name+'<p class="colGray">'+detail+'</p></th><td width="200" class="taR">¥'+feeTraveItem[k].price+'</td></tr>';
+		}
+		html+='<tr><th class="taR">合计</th><td class="colGreen taR">¥'+price.toFixed(2)+'</td></tr>';
+	}
+	$("tbody[itinerary]").html(html);
+	
+}
+
+//设置城市下来菜单-存储数据
+function districtCityBuild(selectDom,obj,selected){
+	var storage=window.localStorage;
+	var id=$('select['+obj+']').val();
+
+	if(typeof storage["district_"+id]==='undefined'||storage["district_"+id]===''){
+		$.ajax({
+			url : '/api/district?did='+id,
+			type : "post",
+			cache : false,
+			dataType : "json",
+			async:false,
+			global : true,
+			success : function(data) {
+				storage.setItem("district_"+id,JSON.stringify(data.districtList));
+				//districtCity(selectDom,data.districtList);
+			},
+			error : function(err) {}
+		});
+	}
+	
+	districtCity=JSON.parse(storage["district_"+id]);
+	
+	var html='';var cityName='';
+	if(typeof selected!=='undefined'){
+		if(selectDom=='departurecity'){
+			cityName=selected.departurecity;
+			
+		}else{
+			cityName=selected.arrivalscity.substring(1);
+		}
+	}
+	
+	for(let i=0;i<districtCity.length;i++){
+		
+		if(typeof selected!=='undefined'&&cityName==districtCity[i].name){
+			
+			html+='<option selected value='+districtCity[i].name+'>'+districtCity[i].name+'</option>';
+		}else{
+			html+='<option value='+districtCity[i].name+'>'+districtCity[i].name+'</option>';
+		}
+	}
+	$("select["+selectDom+"]").html(html);
+}
+//--设置省份下拉
+function districtTop(selected){
+	
+	var storage=window.localStorage;
+	
+	if(typeof storage["districtTop"]==='undefined'||storage["districtTop"]===''){
+		$.ajax({
+			url : '/api/district',
+			type : "post",
+			cache : false,
+			dataType : "json",
+			global : true,
+			success : function(data) {
+				
+				storage.setItem("districtTop",JSON.stringify(data.districtList));
+				//districtTop(data.districtList);
+				districtTopHtml(data.districtList,selected);
+			},
+			error : function(err) {}
+		});
+	}else{
+		
+		districtTopHtml(JSON.parse(storage["districtTop"]),selected);
+	}
+	
+	
+}
+
+function districtTopHtml(districtTop,selected){
+	//var districtTop=JSON.parse(storage["districtTop"]);
+	//console.log(districtTop.length);
+	
+	var html='';
+	for(let i=0;i<districtTop.length;i++){
+		if(typeof selected!=='undefined'&&selected.departureprovince==districtTop[i].name){
+			html+='<option selected value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
+		}else{
+			html+='<option value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
+		}
+		
+	}
+	$("select[departureProvince]").html(html);
+	
+	html='';
+	for(let i=0;i<districtTop.length;i++){
+		if(typeof selected!=='undefined'&&selected.arrivalsprovince==districtTop[i].name){
+			html+='<option selected value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
+		}else{
+			html+='<option value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
+		}
+		
+	}
+	$("select[arrivalsProvince]").html(html);
+}
+

+ 267 - 0
global/js/itinerary2.0.js

@@ -0,0 +1,267 @@
+let sessionStorage= window.sessionStorage;
+let sessionItinerary= sessionStorage.getItem(sessionStorageList);
+$(function() {
+	
+	//初始化行程单
+	if(typeof sessionItinerary!=='object'){
+		sessionItinerary=JSON.parse(sessionItinerary);
+		buildStrokeTable(sessionItinerary);
+		fnTotTravelPrice();
+		buildItineraryProcess(sessionItinerary)
+	}
+	
+	// 新增行程
+	$("a[stroke='addNode']").click(function() {
+		let sessionItinerary = sessionStorage.getItem(sessionStorageList);
+		if(typeof sessionItinerary==='object'){
+			sessionItinerary=[{'0':[]}];
+		}else{
+			sessionItinerary=JSON.parse(sessionItinerary);
+			sessionItinerary.push({[sessionItinerary.length]:[]});
+		}
+		sessionStorage.setItem(sessionStorageList,JSON.stringify(sessionItinerary));
+		//构建行程单
+		buildStrokeTable(sessionItinerary);
+		//计算金额
+		
+	});
+	
+	// 移除行程
+	$("table[stroke]").on("click","a[stroke='delNode']",function(){
+		let sessionItinerary = sessionStorage.getItem(sessionStorageList);
+		sessionItinerary=JSON.parse(sessionItinerary);
+		let dataID=$(this).attr('dataID');
+		sessionItinerary=sessionItinerary.filter(item=>{
+			let keyId=Object.keys(item)[0];
+			console.log(dataID);
+			if(keyId===dataID){
+				return false
+			}else{
+				return true
+			}
+		});
+		let isIndex=dataID-1;
+		$('#node_'+dataID).remove();
+		sessionStorage.setItem(sessionStorageList,JSON.stringify(sessionItinerary));
+		// 重新计算金额
+		fnTotTravelPrice();
+	});
+	
+	//打开新建设置的行程单
+	$("table[stroke]").on("click","a[addStroke]",function(){
+		districtTop();
+		districtCityBuild('departurecity','departureprovince');
+		districtCityBuild('arrivalscity','arrivalsprovince');
+		//
+		let dataID=$(this).attr('dataID');
+		
+		$("input[departuredate]").val('');
+		$("input[arrivalsdate]").val('');
+		$("tbody[feeTravelItem]").html('');
+		
+		let strokeList= sessionStorage.getItem(sessionStorageList);
+		sessionItinerary=getItineraryData(strokeList,dataID);
+
+		if(!(sessionItinerary.length===0)){
+			let si= sessionItinerary[sessionItinerary.length-1];
+			let item=`{"departuredate":"","departureprovince":"${si.arrivalsprovince}","departurecity":"${si.arrivalscity.substring(1)}","arrivalsdate":"${si.arrivalsdate}","arrivalsprovince":"","arrivalscity":"","feeTraveItem":[]}`;
+			districtTop(JSON.parse(item));
+			districtCityBuild('departurecity','departureprovince',JSON.parse(item));
+			setDisabled(item);
+		}else{
+			setUnDisabled();
+		}
+		
+		$("#strokeIndex").val(dataID);
+		$("a[additinerarybut]").show();
+		$("a[ediItineraryBut]").hide();
+	});
+	//存储新建的行程单
+	$("a[additinerarybut]").click(function() {
+		var itinerary=fnGetItineraryData();
+		let dataID=$("#strokeIndex").val();
+		
+		let strokeStr = sessionStorage.getItem(sessionStorageList);
+		let strokeJson=JSON.parse(strokeStr);
+		
+		sessionItinerary=getItineraryData(strokeStr,dataID);
+		
+		sessionItinerary.push(itinerary);
+		strokeJson.forEach(function(value,index){
+			keyId=Object.keys(value)[0];
+			if(keyId==dataID){
+				strokeJson[index][dataID]=sessionItinerary;
+			}
+		})
+		sessionStorage.setItem(sessionStorageList,JSON.stringify(strokeJson));
+
+		buildStrokeTable(strokeJson);
+		fnTotTravelPrice();
+		//TODO
+//		
+//		buildItineraryProcess(sessionItinerary);
+	});
+	
+	
+	//打开编辑的行程单
+	$("table[stroke]").on("click","a[edistroke]",function(){
+		let id=$(this).attr('dataId');
+		let strokeid=$(this).attr('strokeId');
+		let strokeIndex=$(this).attr('strokeIndex');
+		
+		$("input[name=ediStrokeId]").val(id);
+		
+		let strokeStr= sessionStorage.getItem(sessionStorageList);
+		let strokeJson=JSON.parse(strokeStr);
+		
+		sessionItinerary=strokeJson[strokeIndex][strokeid];
+		
+		var storage=window.localStorage;
+		
+		if(id!=='0'){
+			sessionItinerary[id].departureprovince=sessionItinerary[id-1].arrivalsprovince;
+			sessionItinerary[id].departurecity=sessionItinerary[id-1].arrivalscity.substring(1);
+		}
+		
+		districtTop(sessionItinerary[id]);
+		districtCityBuild('departurecity','departureprovince',sessionItinerary[id]);
+		districtCityBuild('arrivalscity','arrivalsprovince',sessionItinerary[id]);
+		
+		
+		$("input[arrivalsdate]").val(sessionItinerary[id].arrivalsdate.substring(1));
+		
+		buildFeeTravelItem(sessionItinerary[id].feeTraveItem);
+		
+		if(id==='0'){
+			$("input[departuredate]").val(sessionItinerary[id].departuredate);
+			setUnDisabled();
+		}else{
+			$("input[departuredate]").val(sessionItinerary[id-1].arrivalsdate.substring(1));
+			setDisabled('');
+		}
+		
+		$("#dataId").val(id);
+		$("#strokeId").val(strokeid);
+		$("#strokeIndex").val(strokeIndex);
+		
+		$("a[additinerarybut]").hide();
+		$("a[ediItineraryBut]").show();
+	});
+	
+	//存储编辑行程单
+	$("a[ediItineraryBut]").click(function() {
+		var itinerary=fnGetItineraryData();
+		var siIndex=$("input[name=ediStrokeId]").val();
+		let strokeid=$("#strokeId").val();
+		let strokeIndex=$("#strokeIndex").val();
+		
+		let strokeStr=sessionStorage.getItem(sessionStorageList)
+		let strokeJson=JSON.parse(strokeStr);
+		
+		var sessionItinerary =strokeJson[strokeIndex][strokeid];
+		//var sessionItinerary =JSON.parse(sessionStorage.getItem(sessionStorageList));
+		
+		sessionItinerary[siIndex]=itinerary;
+		strokeJson[strokeIndex][strokeid]=sessionItinerary;
+
+		let data=JSON.stringify(strokeJson);
+		sessionStorage.setItem(sessionStorageList,data);
+		buildStrokeTable(strokeJson);
+		fnTotTravelPrice();
+	});
+	
+	//移除行程单item功能
+	$("table[stroke]").on("click","a[removeitinerary]",function(){
+		var strokeStr= sessionStorage.getItem(sessionStorageList);
+		let id=$(this).attr('dataId');
+		let strokeid=$(this).attr('strokeId');
+		let strokeIndex=$(this).attr('strokeIndex');
+		
+		var strokeJson= JSON.parse(strokeStr);
+		//console.log(strokeJson[strokeIndex][strokeid]);
+		let sessionItinerary=strokeJson[strokeIndex][strokeid];
+		
+		sessionItinerary.splice(id,1);
+		strokeJson[strokeIndex][strokeid]=sessionItinerary;
+		console.log(strokeJson);
+		sessionStorage.setItem(sessionStorageList,JSON.stringify(strokeJson));
+		buildStrokeTable(strokeJson);
+		//$("#itinerary").val(JSON.stringify(strokeJson));
+		fnTotTravelPrice();
+		
+		//buildItineraryProcess(sessionItinerary);
+	});
+	
+	
+	//编辑行程单内容相关--设置出发城市-设置到达城市
+	$("select[departureProvince]").change(function() {
+		districtCityBuild('departurecity','departureprovince');
+	});
+	$("select[arrivalsProvince]").change(function() {
+		districtCityBuild('arrivalscity','arrivalsprovince');
+	});
+	//检查行程日期
+	$("input[departureDate]").change(function() {
+		 let date=$(this).val();
+		$.ajax({
+			url : '/api/itinerary/date',
+			data: {date:date},
+			type : "post",
+			cache : false,
+			dataType : "json",
+			async:false,
+			global : true,
+			success : function(data) {
+				console.log(data.status);
+				if(!data.status){
+					$('input[departureDate]').val('');
+					$('td[msg]').html('<span class="colRed">日期已被使用过</span>');
+				}else{
+					$('td[msg]').html('');
+				}
+			},
+			error : function(err) {}
+		});
+	});
+	$("input[arrivalsDate]").change(function() {
+		 let date=$(this).val();
+		$.ajax({
+			url : '/api/itinerary/date',
+			data: {date:date},
+			type : "post",
+			cache : false,
+			dataType : "json",
+			async:false,
+			global : true,
+			success : function(data) {
+				console.log(data.status);
+				if(!data.status){
+					$('input[arrivalsDate]').val('');
+					$('td[msg]').html('<span class="colRed">日期已被使用过</span>');
+				}else{
+					$('td[msg]').html('');
+				}
+			},
+			error : function(err) {}
+		});
+	});
+	//添加费用详情列表
+	$("a[feeTravelItem]").click(function() {
+		var itemName=$("select[feeTravelItem] option:selected").text();
+		var itemId=$("select[feeTravelItem] option:selected").val();
+		
+		var html='<tr class="remove" ><th>'+itemName+'</th>';
+		html+='<td class="taR"><p>¥<input type="number" itemId_'+itemId+' data="'+itemName+'" dataId="'+itemId+'" value="0" placeholder="输入费用" pattern="[0-9]" step="1" min="0"class="span2"></p>'+
+		'<p><textarea type="text" itemDetail_'+itemId+' placeholder="填写费用说明" rows="2" style=" width: 350px; margin: 10px 0px 0px 12px; height: 65px;"></textarea></p></td>';
+		html+='<td><a href="#" removeFeeTravelItem >移除</a></td></tr>';
+		$("tbody[feeTravelItem]").append(html);
+		
+	});
+	$("tbody[feeTravelItem]").on("click","a[removeFeeTravelItem]",function(){
+		$(this).closest('.remove').remove();
+	});
+	
+	
+})
+
+

+ 329 - 0
global/js/itinerary2func.js

@@ -0,0 +1,329 @@
+//构建编辑行程单
+function buildStrokeTable(sessionItinerary){
+	let table=$("table[stroke]");
+	let html='';let nodeCount=0;let dataId=0;
+	sessionItinerary.forEach(function(value,index){
+		dataId=Object.keys(value)[0];
+		nodeCount=index+1;
+		html+=`<tbody strokeNode id="node_${dataId}" ><tr><th colspan="2" class="taC">行程${nodeCount}#详细
+		<a href="#" dataID="${dataId}" stroke='delNode' class="fR text-danger">删除</a>
+		</th></tr>`;
+		html+=buildItinerary(value[dataId],dataId,index);
+		html+=`<tr><th colspan="2" class="taC"><a href="#route-add"class="button" dataID="${dataId}" dataIndex="${index}" addStroke data-toggle="modal">设置行程费用单</a></th></tr></tbody>`;
+	})
+	table.html(html);
+}
+//设置行程详情--列表页
+function buildItinerary(list,strokeId,strokeIndex){
+	
+	var html='';
+	for(let i=0;i<list.length;i++){
+		if(i==0){
+			html+='<tr><th colspan="2" class="ta"><i class="contactsMark icon-">P</i> '+list[i].departuredate+list[i].arrivalsdate+' '+list[i].departurecity+list[i].arrivalscity+'';
+		}else{
+			let previousIndex=i-1;
+			html+='<tr><th colspan="2" class="ta"><i class="contactsMark icon-">P</i> '+list[previousIndex].arrivalsdate.substring(1)+list[i].arrivalsdate+' '+list[previousIndex].arrivalscity.substring(1)+list[i].arrivalscity+'';
+		}
+		html+='<div class="fR"><a href="#route-add" ediStroke data-toggle="modal" dataId="'+i+'" strokeIndex="'+strokeIndex+'" strokeId="'+strokeId+'" >编辑</a>&nbsp;<a href="#" dataId="'+i+'" strokeIndex="'+strokeIndex+'" strokeId="'+strokeId+'" removeitinerary class="colRed">移除</a></div></th></tr>';
+		let feeTraveItem=list[i].feeTraveItem;
+		let price=0;let detail='';
+		
+		for(let k=0;k<feeTraveItem.length;k++){
+			price+=parseFloat(feeTraveItem[k].price);
+			//TODO-处理换行
+			if(!(typeof feeTraveItem[k].detail==='undefined')){
+				detail=feeTraveItem[k].detail.replace(new RegExp("\n", "gm"), '<br/>');
+			}
+			html+='<tr><th>'+feeTraveItem[k].name+'<p class="colGray">'+detail+'</p></th><td width="200" class="taR">¥'+feeTraveItem[k].price+'</td></tr>';
+		}
+		html+='<tr><th class="taR">合计</th><td class="colGreen taR">¥'+price+'</td></tr>';
+	}
+	return html;
+}
+
+//构建总行程单
+function buildItineraryProcess(data){
+	let html='';
+	let strokeJson=data;
+	if(typeof data==='string'){
+		strokeJson=JSON.parse(data);
+	}
+	
+	
+	let dataJson;
+	strokeJson.forEach(function(value,index){
+		dataId=Object.keys(value)[0];
+		dataJson=value[dataId];
+		let last=dataJson.length-1;
+		let n=0;var ln=index+1;
+		html+=`<li>行程${ln}#</li>`;
+		for(let i=0;i<dataJson.length;i++){
+			let price=0;
+			for(let p=0;p<dataJson[i].feeTraveItem.length;p++){
+				price+=parseFloat(dataJson[i].feeTraveItem[p].price);
+			}
+			price=price.toFixed(2);
+			
+			let city='';
+			if(i==0){
+				city=dataJson[i].departurecity;
+			}else{
+				n=i-1;
+				city=dataJson[n].arrivalscity.substring(1);
+			}
+			
+			html+=`<li>
+			<div class="itineraryList">
+				<div class="addressName"><i class="contactsMark icon-">P</i> <b>${city}</b></div>
+				<div class="pointLine">
+					<div class="priceList">
+						<span class="priceTitle">金额</span>
+						<span class="price colGreen">¥${price}</span>
+					</div>
+					<div class="timeList">
+						<span class="timeTitle">时间</span>
+						<span class="time">${dataJson[i].departuredate}${dataJson[i].arrivalsdate}</span>
+					</div>
+				</div>
+			</div>
+		</li>`;
+			
+			if(i===last){
+				let arrivalscity=dataJson[i].arrivalscity.substring(1);
+				
+				html+=`<li>
+				<div class="itineraryList">
+					<div class="addressName"><i class="contactsMark icon-">P</i> <b>${arrivalscity}</b></div>
+					
+				</div>
+			</li>`;
+				
+				//html+=`<div class="addressName fL"><i class="contactsMark icon-">P</i><b>${arrivalscity}</b></div>`;
+			}
+		}
+		
+		html+=`<li><br/></li>`;
+		
+	})
+	
+	$("ul[itineraryinfo]").html(html);
+}
+
+//重新计算费用单金额
+function fnTotTravelPrice(){
+	var itineraryStr=sessionStorage.getItem(sessionStorageList);
+	
+	//重新赋值行程详情
+	$("#itinerary").val(itineraryStr);
+	
+	//var sessionItinerary= JSON.parse(itineraryStr);
+	var strokeJson= JSON.parse(itineraryStr);
+	
+	var priceList=[];
+	strokeJson.forEach(function(value,index){
+		dataId=Object.keys(value)[0];
+		var sessionItinerary=value[dataId];
+		for(let i=0;i<sessionItinerary.length;i++){
+			let feeTraveItem=sessionItinerary[i].feeTraveItem;
+			for(let k=0;k<feeTraveItem.length;k++){
+				if(typeof priceList[feeTraveItem[k].id]==='undefined'){
+					priceList[feeTraveItem[k].id]=0;
+				}
+				priceList[feeTraveItem[k].id]+=parseFloat(feeTraveItem[k].price);
+			}
+		}
+	})
+	
+	$("input[id^='travel_']").val(0);
+	$("td span").html(0);
+	
+	let travelResult=0;
+	for(let i=0;i<priceList.length;i++){
+		if(typeof priceList[i]==='number'){
+			$("span[travelprice_"+i+"]").html(priceList[i].toFixed(2));
+			$("#travel_"+i+"").val(priceList[i].toFixed(2));
+			travelResult+=priceList[i];
+		}
+	}
+	
+	$("#travelResult").html(travelResult.toFixed(2));
+	$("#RS").html(travelResult.toFixed(2));
+}
+
+//构建费用说明
+function buildFeeTravelItem(feeTraveItem){
+	
+	var html='';
+	for(let i=0;i<feeTraveItem.length;i++){
+		html+='<tr class="remove" ><th>'+feeTraveItem[i].name+'</th>';
+		html+='<td class="taR"><p>¥<input type="number" itemId_'+feeTraveItem[i].id+' data="'+feeTraveItem[i].name+'" dataId="'+feeTraveItem[i].id+'" value="'+feeTraveItem[i].price+'" placeholder="输入费用" pattern="[0-9]" step="1" min="0"class="span2"></p>'+
+		'<p><textarea type="text"  itemDetail_'+feeTraveItem[i].id+' placeholder="填写费用说明" rows="2" style=" width: 350px; margin: 10px 0px 0px 12px; height: 65px;">'+feeTraveItem[i].detail+'</textarea></p></td>';
+		//html+='<td><textarea type="text"  itemDetail_'+feeTraveItem[i].id+' placeholder="填写费用说明">'+feeTraveItem[i].detail+'</textarea> </td>';
+		html+='<td><a href="#" removeFeeTravelItem >移除</a></td></tr>';
+	}
+	$("tbody[feeTravelItem]").html(html);
+}
+
+//获得对应的行程单
+function getItineraryData(dataString,dataID){
+	strokeList=JSON.parse(dataString);
+	let sessionItinerary={};let keyId=0;
+	strokeList.forEach(function(value,index){
+		keyId=Object.keys(value)[0];
+		if(keyId===dataID){
+			sessionItinerary=value;
+		}
+	})
+	return sessionItinerary[dataID];
+}
+
+function setUnDisabled(){
+	//禁用出发地
+	$('select[departureprovince]').removeAttr("disabled");
+	$('select[departurecity]').removeAttr("disabled");
+	$('input[departuredate]').removeAttr("disabled");
+}
+function setDisabled(sessionItinerary){
+	if(sessionItinerary!==''){
+		let si=JSON.parse(sessionItinerary);
+		$('input[departuredate]').val(si.arrivalsdate.substring(1));
+	}
+	
+	//禁用出发地
+	$('select[departureprovince]').attr("disabled","disabled");
+	$('select[departurecity]').attr("disabled","disabled");
+	
+	$('input[departuredate]').attr("disabled","disabled");
+}
+//获得设置行程单的相关内容
+function fnGetItineraryData(){
+	var departurecity=$("select[departurecity] option:selected").text();
+	var arrivalscity=$("select[arrivalscity] option:selected").text();
+	var departureprovince=$("select[departureprovince] option:selected").text();
+	var arrivalsprovince=$("select[arrivalsprovince] option:selected").text();
+	
+	var departuredate=$("input[departuredate]").val();
+	var arrivalsdate=$("input[arrivalsdate]").val();
+	
+	var feeTravePriceList=$("tbody[feeTravelItem]").find('input[type=number]');
+	//var feeTraveDetailList=$("tbody[feeTravelItem]").find('input[type=text]');
+	var feeTraveDetailList=$("tbody[feeTravelItem]").find('textarea');
+	if(arrivalscity!==''){
+		arrivalscity='-'+arrivalscity;
+	}
+	if(arrivalsdate!==''){
+		arrivalsdate='~'+arrivalsdate;
+	}
+	
+	var feeTraveItem=[];
+	for(let i=0;i<feeTravePriceList.length;i++){
+		feeTraveItem.push({'id':$(feeTravePriceList[i]).attr('dataId'),'name':$(feeTravePriceList[i]).attr('data'),'price':$(feeTravePriceList[i]).val(),'detail':$(feeTraveDetailList[i]).val()});
+	}
+	
+	var itinerary={'departuredate':departuredate,'departureprovince':departureprovince,'departurecity':departurecity,'arrivalsdate':arrivalsdate,'arrivalsprovince':arrivalsprovince,'arrivalscity':arrivalscity,'feeTraveItem':feeTraveItem};
+	return itinerary;
+}
+
+//--设置省份下拉
+function districtTop(selected){
+	
+	var storage=window.localStorage;
+	
+	if(typeof storage["districtTop"]==='undefined'||storage["districtTop"]===''){
+		$.ajax({
+			url : '/api/district',
+			type : "post",
+			cache : false,
+			dataType : "json",
+			global : true,
+			success : function(data) {
+				
+				storage.setItem("districtTop",JSON.stringify(data.districtList));
+				//districtTop(data.districtList);
+				districtTopHtml(data.districtList,selected);
+			},
+			error : function(err) {}
+		});
+	}else{
+		
+		districtTopHtml(JSON.parse(storage["districtTop"]),selected);
+	}
+}
+function districtTopHtml(districtTop,selected){
+	//var districtTop=JSON.parse(storage["districtTop"]);
+	//console.log(districtTop.length);
+	
+	var html='';
+	for(let i=0;i<districtTop.length;i++){
+		if(typeof selected!=='undefined'&&selected.departureprovince==districtTop[i].name){
+			html+='<option selected value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
+		}else{
+			html+='<option value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
+		}
+		
+	}
+	$("select[departureProvince]").html(html);
+	
+	html='';
+	for(let i=0;i<districtTop.length;i++){
+		if(typeof selected!=='undefined'&&selected.arrivalsprovince==districtTop[i].name){
+			html+='<option selected value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
+		}else{
+			html+='<option value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
+		}
+		
+	}
+	$("select[arrivalsProvince]").html(html);
+}
+//设置城市下来菜单-存储数据
+function districtCityBuild(selectDom,obj,selected){
+	var storage=window.localStorage;
+	var id=$('select['+obj+']').val();
+
+	if(typeof storage["district_"+id]==='undefined'||storage["district_"+id]===''){
+		$.ajax({
+			url : '/api/district?did='+id,
+			type : "post",
+			cache : false,
+			dataType : "json",
+			async:false,
+			global : true,
+			success : function(data) {
+				storage.setItem("district_"+id,JSON.stringify(data.districtList));
+				//districtCity(selectDom,data.districtList);
+			},
+			error : function(err) {}
+		});
+	}
+	
+	districtCity=JSON.parse(storage["district_"+id]);
+	
+	var html='';var cityName='';
+	if(typeof selected!=='undefined'){
+		if(selectDom=='departurecity'){
+			cityName=selected.departurecity;
+			
+		}else{
+			cityName=selected.arrivalscity.substring(1);
+		}
+	}
+	
+	for(let i=0;i<districtCity.length;i++){
+		
+		if(typeof selected!=='undefined'&&cityName==districtCity[i].name){
+			
+			html+='<option selected value='+districtCity[i].name+'>'+districtCity[i].name+'</option>';
+		}else{
+			html+='<option value='+districtCity[i].name+'>'+districtCity[i].name+'</option>';
+		}
+	}
+	$("select["+selectDom+"]").html(html);
+}
+
+function emptyJson(data) {
+    if (data === "{}" || JSON.stringify(data) === "{}") {
+        return true;
+    } else {
+        return false;
+    }
+}

+ 93 - 0
global/js/itineraryView.js

@@ -0,0 +1,93 @@
+$(function() {
+				
+				var sessionStorage= window.sessionStorage;
+				//sessionStorage.setItem("itineraryListApproval",'{{receiptList.0.itinerary}}');
+				var sessionItinerary= sessionStorage.getItem(sessionStorageList);
+				if(typeof sessionItinerary!=='object'){
+					buildItinerary(JSON.parse(sessionItinerary));
+					buildItineraryProcess(sessionItinerary);
+				}
+	})
+
+function buildItinerary(feeTraveItem){
+				var html='';
+				
+				
+				for(let k=0;k<feeTraveItem.length;k++){
+					html+=`<p class="routeW">
+					<b class="fR">¥${feeTraveItem[k].price}</b>
+					<b>${feeTraveItem[k].name}</b>
+					</p><p class="colGray">#${feeTraveItem[k].detail}</p>
+				<p></p>`;
+				}
+				return html;
+				
+			}
+	// 构建总行程单
+	function buildItineraryProcess(data){
+		let html='';
+		let dataJson=data;
+		if(typeof data==='string'){
+			dataJson=JSON.parse(data);
+		}
+		
+		let last=dataJson.length-1;
+		let n=0;
+		
+		for(let i=0;i<dataJson.length;i++){
+			let price=0;
+			for(let p=0;p<dataJson[i].feeTraveItem.length;p++){
+				price+=parseFloat(dataJson[i].feeTraveItem[p].price);
+			}
+			price=price.toFixed(2);
+			
+			let city='';
+			if(i==0){
+				city=dataJson[i].departurecity;
+			}else{
+				n=i-1;
+				city=dataJson[n].arrivalscity.substring(1);
+			}
+			
+			let feeTraveItem=dataJson[i].feeTraveItem;
+			let itemHtml=buildItinerary(feeTraveItem);
+			
+			
+			html+=`<li>
+				<div class="itineraryList">
+					<div class="addressName"><i class="contactsMark icon-">P</i> <b>${city}</b></div>
+					<div class="pointLine">
+						<div class="priceList">
+							<span class="priceTitle">金额</span>
+							<span class="price colGreen">¥${price}</span>
+						</div>
+						<div class="timeList">
+							<span class="timeTitle">时间</span>
+							<span class="time">${dataJson[i].departuredate}${dataJson[i].arrivalsdate}</span>
+						</div>
+						<div class="routeList clearfix">
+							<span class="routeTitle fL">详情</span>
+							<span class="route fL">
+							
+								${itemHtml}
+							</span>
+						</div>
+					</div>
+				</div>
+			</li>`;
+			
+			if(i===last){
+				let arrivalscity=dataJson[i].arrivalscity.substring(1);
+				
+				html+=`<li>
+				<div class="itineraryList">
+					<div class="addressName"><i class="contactsMark icon-">P</i> <b>${arrivalscity}</b></div>
+					
+				</div>
+			</li>`;
+				
+			}
+		}
+		
+		$("ul[itineraryinfo]").html(html);
+	}

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 5 - 0
global/js/jquery.validator.min.1.12.3.js


+ 1 - 1
protected/controller/HumanResourceController.php

@@ -1428,7 +1428,7 @@ class HumanResourceController extends DooController {
 		
 		$staffManageDetail = $staffLeaveManage->getStaffManageByCid ( $cidMode );
 		if (empty ( $staffManageDetail ['staffList'] ))
-			die ( 'illegal request ' );
+			die ( 'illegal request -auth' );
 		
 		$pendingApprovalsSid = current ( $staffManageDetail ['staffList'] ) [0];
 		if (empty ( $pendingApprovalsSid ))

+ 10 - 8
protected/controller/InvoiceController.php

@@ -3553,13 +3553,13 @@ class InvoiceController extends DooController {
 					$invoiceStatistics->setInvoiceStatisticsByCondition ( $item );
 				}
 				
-				// 解绑时删除收入流水
-				Doo::loadModel ( 'wasteBook' );
-				$wasteBook = new wasteBook ();
-				$wasteBook->delete ( array (
-						'where' => 'dataID=' . $value . ' and accountType=7',
-						'limit' => 1 
-				) );
+				// 解绑时删除收入流水--退票不删除流水
+// 				Doo::loadModel ( 'wasteBook' );
+// 				$wasteBook = new wasteBook ();
+// 				$wasteBook->delete ( array (
+// 						'where' => 'dataID=' . $value . ' and accountType=7',
+// 						'limit' => 1 
+// 				) );
 			}
 		}
 		
@@ -4272,7 +4272,9 @@ class InvoiceController extends DooController {
 					'cid' => $this->staff [0] ['cid'],
 					'name' => $this->staff [0] ['username'],
 					'sid' => $this->staff [0] ['sid'],
-					'inputDate' => date ( "Y-m-d H:i:s" ) 
+					'inputDate' => $receivablesDate ,
+					//'createAt'=>date ( "Y-m-d H:i:s" ) ,
+					'synPaymentDate'=>1
 			);
 			$wasteBook->setAccountBookStatistics ( $item );
 		}

+ 27 - 17
protected/controller/ReceiptController.php

@@ -8244,7 +8244,8 @@ class ReceiptController extends DooController {
 		
 		$data ['mothHtml'] = $mothHtml;
 		
-		// print_r($receiptList);
+		$receiptList[0]['itinerary']=str_replace('\n','<br/>',$receiptList[0]['itinerary']);
+	
 		$data ['rid'] = $rid;
 		$data ['tijdate'] = $tijdate ['date'];
 		$data ['receiptList'] = $receiptList;
@@ -12596,7 +12597,7 @@ class ReceiptController extends DooController {
 				$accountBank = 'PersonalDeposit';
 			}
 			if (empty ( $accountBank ))
-				die ( 'illegal request' );
+				die ( 'illegal request-bank' );
 
 
 			if($accountType == 11 || $accountType == 12){
@@ -12793,8 +12794,8 @@ class ReceiptController extends DooController {
 				);
 				$wasteBook->setAccountBookStatistics ( $itemWaste );
 			} elseif ($accountType == 1) {
-				if ($receivedBank == '个人广发')
-					die ( 'illegal request' );
+// 				if ($receivedBank == '个人广发')
+// 					die ( 'illegal request--no man' );
 					// 添加一条收入
 				$accountBook = new accountBook ();
 				$accountBook->accountType = $accountType;
@@ -14048,6 +14049,8 @@ class ReceiptController extends DooController {
 		$total = $waste ['bank'] ['CGBDeposit'] + $waste ['bank'] ['ICBCDeposit']+ $waste ['bank'] ['HUADeposit']  + $waste ['bank'] ['PersonalDeposit'] + $waste ['financial'] ['current'] ['CGBDeposit'] + $waste ['financial'] ['current'] ['ICBCDeposit'] + $waste ['financial'] ['fixed'] ['CGBDeposit'] + $waste ['financial'] ['fixed'] ['ICBCDeposit'];
 		$CGBDeposit_total =$waste ['bank'] ['CGBDeposit']+$waste ['bank'] ['HUADeposit'];
 		
+		//$waste ['bank'] ['ICBCDeposit']=sprintf("%.2f", round($waste ['bank'] ['ICBCDeposit'], 2));
+		
 		// print_r($waste);
 		
 		$data ['waste'] = $waste;
@@ -14125,17 +14128,6 @@ class ReceiptController extends DooController {
 		Doo::loadClass ( 'XDeode' );
 		$XDeode = new XDeode ( 5 );
 		
-		// echo $XDeode->encode(1).'<br>';
-		// echo $XDeode->encode(2).'<br>';
-		// echo $XDeode->encode(3).'<br>';
-		// echo $XDeode->encode(4).'<br>';
-		// echo $XDeode->encode(5).'<br>';
-		// echo $XDeode->encode(6).'<br>';
-		// echo $XDeode->encode(7).'<br>';
-		// echo $XDeode->encode(8).'<br>';
-		// echo $XDeode->encode(9).'<br>';
-		// echo $XDeode->encode(10).'<br>';
-		
 		$year=date("Y");
 		$theDay=date("Y-m-d");
 		
@@ -14174,6 +14166,17 @@ class ReceiptController extends DooController {
 		
 		$incomeList = $wasteBook->getAccountBookByExpensesType ( 0, 1, $con );
 		
+		foreach ($incomeList as $key=>$value){
+			if(($value['accountType']==6||$value['accountType']==9||$value['accountType']==10)&&$value['synPaymentDate']==0){
+				$wasteBook = new wasteBook ();
+				$wasteBook->wid = $value['wid'];
+				$wasteBook->synPaymentDate = 1;
+				$wasteBook->inputDate = $value['data']['receivedDate'];
+				$wasteBook->update();
+			}
+		}
+		
+		
 		$sum = 0;$thsDaySum=0;
 		foreach ( $incomeList as $key => $value ) {
 			$sum += $value ['accountPrice'];
@@ -14275,8 +14278,15 @@ class ReceiptController extends DooController {
 		
 		$incomeList = $wasteBook->getAccountBookByExpensesType ( 0, 2, $con );
 		
-		print_r($incomeList);
-		
+		foreach ($incomeList as $key=>$value){
+			if(($value['accountType']==5||$value['accountType']==9||$value['accountType']==10)&&$value['synPaymentDate']==0){
+				$wasteBook = new wasteBook ();
+				$wasteBook->wid = $value['wid'];
+				$wasteBook->synPaymentDate = 1;
+				$wasteBook->inputDate = $value['data']['expenditureDate'];
+				$wasteBook->update();
+			}
+		}
 		
 		$sum = 0;$thsDaySum=0;
 		foreach ( $incomeList as $key => $value ) {

+ 11 - 3
protected/model/wasteBook.php

@@ -16,8 +16,10 @@ class wasteBook extends DooModel {
 	public $inputDate;
 	public $dataID;
 	public $remarks;
-	
 	public $accountPriceShow;
+	public $createAt;
+	public $updateAt;
+	public $synPaymentDate;
 	
 	
 	public $_table = 'CLD_wasteBook';
@@ -39,8 +41,11 @@ class wasteBook extends DooModel {
 			'inputDate' ,
 			'dataID',
 			'remarks',
-			
 			'accountPriceShow',
+			
+			'createAt',
+			'updateAt',
+			'synPaymentDate',
 	);
 	
 	//
@@ -116,7 +121,7 @@ class wasteBook extends DooModel {
 		
 		$where= array (
 				'where' => "expensesType=".$expensesType.$con,
-				'desc' => 'wid',
+				'desc' => 'inputDate',
 				'asArray' => TRUE
 		);
 		if($limit!=0){
@@ -311,6 +316,9 @@ class wasteBook extends DooModel {
 				'groupby' => 'date_format(inputDate,"%Y-%m"),expensesType',
 				'asArray' => TRUE
 		) );
+		
+		//print_r($list);
+		
 // 		//合计
 // 		$list['total'] = $this->find ( array (
 // 				'select' => 'sum(accountPrice) as accountPrice',

+ 0 - 1
protected/view/expenses/wasteBook.html

@@ -49,7 +49,6 @@
 											<td>¥{{waste.financial.current.CGBDeposit}}</td>
 											<th class="taC">工行理财活期</th>
 											<td>¥{{waste.financial.current.ICBCDeposit}}</td>
-											
 										</tr>
 										<tr>
                                             <th class="taC" colspan="4">活期结余金额:¥{{cashBalance}}</th>

+ 2 - 1
protected/view/receipt/feeTravel.html

@@ -251,7 +251,8 @@
 						<h3>设置行程费用单</h3>
 					</div>
 					<div class="modal-body saeaList">
-						<input type="hidden" name="ediStrokeId" >
+						<input type="hidden" name="ediStrokeId" id="dataId">
+						<input type="hidden" name="strokeid" id="strokeId" >
 						<input type="hidden" name="strokeIndex" id="strokeIndex" >
 						<table class="table table-bordered table-condensed">
 							<tr>