itinerary.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. $(function() {
  2. //初始化行程单
  3. var sessionStorage= window.sessionStorage;
  4. var sessionItinerary= sessionStorage.getItem(sessionStorageList);
  5. // console.log(typeof sessionItinerary)
  6. // if(sessionItinerary===''){
  7. // sessionItinerary={};
  8. // }
  9. if(typeof sessionItinerary!=='object'){
  10. //console.log(JSON.parse(sessionItinerary));
  11. buildItinerary(JSON.parse(sessionItinerary));
  12. fnTotTravelPrice();
  13. buildItineraryProcess(sessionItinerary);
  14. }
  15. //打开新建设置行程单
  16. $("a[addStroke]").click(function() {
  17. districtTop();
  18. districtCityBuild('departurecity','departureprovince');
  19. districtCityBuild('arrivalscity','arrivalsprovince');
  20. $("input[departuredate]").val('');
  21. $("input[arrivalsdate]").val('');
  22. $("tbody[feeTravelItem]").html('');
  23. var sessionItinerary= sessionStorage.getItem(sessionStorageList);
  24. if(!(sessionItinerary===null||sessionItinerary==='[]')){
  25. sessionItinerary=JSON.parse(sessionItinerary);
  26. var id=sessionItinerary.length-1;
  27. let item=`{"departuredate":"","departureprovince":"${sessionItinerary[id].arrivalsprovince}","departurecity":"${sessionItinerary[id].arrivalscity.substring(1)}","arrivalsdate":"${sessionItinerary[id].arrivalsdate}","arrivalsprovince":"","arrivalscity":"","feeTraveItem":[]}`;
  28. districtTop(JSON.parse(item));
  29. districtCityBuild('departurecity','departureprovince',JSON.parse(item));
  30. setDisabled(item);
  31. }else{
  32. setUnDisabled();
  33. }
  34. $("a[additinerarybut]").show();
  35. $("a[ediItineraryBut]").hide();
  36. });
  37. //存储新建的行程单
  38. $("a[additinerarybut]").click(function() {
  39. var itinerary=fnGetItineraryData();
  40. var sessionItinerary = sessionStorage.getItem(sessionStorageList);
  41. if(typeof sessionItinerary==='object'){
  42. sessionItinerary=[];
  43. sessionItinerary.push(itinerary);
  44. sessionStorage.setItem(sessionStorageList,JSON.stringify(sessionItinerary));
  45. }else{
  46. sessionItinerary=JSON.parse(sessionItinerary);
  47. sessionItinerary.push(itinerary);
  48. sessionStorage.setItem(sessionStorageList,JSON.stringify(sessionItinerary));
  49. }
  50. buildItinerary(sessionItinerary);
  51. fnTotTravelPrice();
  52. buildItineraryProcess(sessionItinerary);
  53. });
  54. //打开编辑行程单
  55. // $("a[ediStroke]").click(function() {
  56. // var sessionItinerary= sessionStorage.getItem(sessionStorageList);
  57. // sessionItinerary=JSON.parse(sessionItinerary);
  58. // var id=$(this).attr('dataId');
  59. //
  60. // var storage=window.localStorage;
  61. //
  62. // if(id==='0'){
  63. //
  64. // }else{
  65. // sessionItinerary[id].departureprovince=sessionItinerary[id-1].arrivalsprovince;
  66. // sessionItinerary[id].departurecity=sessionItinerary[id-1].arrivalscity;
  67. // console.log(sessionItinerary[id]);
  68. // }
  69. //
  70. // districtTop(sessionItinerary[id]);
  71. // districtCityBuild('departurecity','departureprovince',sessionItinerary[id]);
  72. // districtCityBuild('arrivalscity','arrivalsprovince',sessionItinerary[id]);
  73. //
  74. // //读取上一个行程的终点
  75. //
  76. // buildFeeTravelItem(sessionItinerary[id].feeTraveItem);
  77. //
  78. // if(id==='0'){
  79. // $("input[departuredate]").val(sessionItinerary[id].departuredate);
  80. // setUnDisabled();
  81. // }else{
  82. // console.log(sessionItinerary[id-1].arrivalsdate);
  83. // $("input[departuredate]").val(sessionItinerary[id-1].arrivalsdate.substring(1));
  84. // setDisabled('');
  85. // }
  86. //
  87. // $("a[additinerarybut]").hide();
  88. // $("a[ediItineraryBut]").show();
  89. // });
  90. $("tbody[itinerary]").on("click","a[edistroke]",function(){
  91. $("input[name=ediStrokeId]").val($(this).attr('dataid'));
  92. var sessionItinerary= sessionStorage.getItem(sessionStorageList);
  93. sessionItinerary=JSON.parse(sessionItinerary);
  94. var id=$(this).attr('dataId');
  95. var storage=window.localStorage;
  96. if(id!=='0'){
  97. sessionItinerary[id].departureprovince=sessionItinerary[id-1].arrivalsprovince;
  98. sessionItinerary[id].departurecity=sessionItinerary[id-1].arrivalscity.substring(1);
  99. }
  100. districtTop(sessionItinerary[id]);
  101. districtCityBuild('departurecity','departureprovince',sessionItinerary[id]);
  102. districtCityBuild('arrivalscity','arrivalsprovince',sessionItinerary[id]);
  103. $("input[arrivalsdate]").val(sessionItinerary[id].arrivalsdate.substring(1));
  104. buildFeeTravelItem(sessionItinerary[id].feeTraveItem);
  105. if(id==='0'){
  106. $("input[departuredate]").val(sessionItinerary[id].departuredate);
  107. setUnDisabled();
  108. }else{
  109. $("input[departuredate]").val(sessionItinerary[id-1].arrivalsdate.substring(1));
  110. setDisabled('');
  111. }
  112. $("a[additinerarybut]").hide();
  113. $("a[ediItineraryBut]").show();
  114. });
  115. //存储编辑行程单
  116. $("a[ediItineraryBut]").click(function() {
  117. var itinerary=fnGetItineraryData();
  118. var siIndex=$("input[name=ediStrokeId]").val();
  119. var sessionItinerary =JSON.parse(sessionStorage.getItem(sessionStorageList));
  120. sessionItinerary[siIndex]=itinerary;
  121. let data=JSON.stringify(sessionItinerary);
  122. sessionStorage.setItem(sessionStorageList,data);
  123. buildItinerary(sessionItinerary);
  124. fnTotTravelPrice();
  125. buildItineraryProcess(data)
  126. });
  127. //移除行程单item功能
  128. $("tbody[itinerary]").on("click","a[removeitinerary]",function(){
  129. var sessionItinerary= sessionStorage.getItem(sessionStorageList);
  130. var id=$(this).attr('dataId');
  131. sessionItinerary=JSON.parse(sessionItinerary);
  132. sessionItinerary.splice(id,1);
  133. sessionStorage.setItem(sessionStorageList,JSON.stringify(sessionItinerary));
  134. buildItinerary(sessionItinerary);
  135. $("#itinerary").val(JSON.stringify(sessionItinerary));
  136. fnTotTravelPrice();
  137. buildItineraryProcess(sessionItinerary);
  138. });
  139. $("select[departureProvince]").change(function() {
  140. districtCityBuild('departurecity','departureprovince');
  141. });
  142. $("select[arrivalsProvince]").change(function() {
  143. districtCityBuild('arrivalscity','arrivalsprovince');
  144. });
  145. $("a[feeTravelItem]").click(function() {
  146. var itemName=$("select[feeTravelItem] option:selected").text();
  147. var itemId=$("select[feeTravelItem] option:selected").val();
  148. var html='<tr class="remove" ><th>'+itemName+'</th>';
  149. 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>'+
  150. '<p><textarea type="text" itemDetail_'+itemId+' placeholder="填写费用说明" rows="2" style=" width: 350px; margin: 10px 0px 0px 12px; height: 65px;"></textarea></p></td>';
  151. //html+='<td><textarea type="text" itemDetail_'+itemId+' placeholder="填写费用说明"></textarea></td>';
  152. html+='<td><a href="#" removeFeeTravelItem >移除</a></td></tr>';
  153. $("tbody[feeTravelItem]").append(html);
  154. });
  155. $("tbody[feeTravelItem]").on("click","a[removeFeeTravelItem]",function(){
  156. $(this).closest('.remove').remove();
  157. });
  158. //检查行程日期
  159. $("input[departureDate]").change(function() {
  160. let date=$(this).val();
  161. $.ajax({
  162. url : '/api/itinerary/date',
  163. data: {date:date},
  164. type : "post",
  165. cache : false,
  166. dataType : "json",
  167. async:false,
  168. global : true,
  169. success : function(data) {
  170. console.log(data.status);
  171. if(!data.status){
  172. $('input[departureDate]').val('');
  173. $('td[msg]').html('<span class="colRed">日期已被使用过</span>');
  174. }else{
  175. $('td[msg]').html('');
  176. }
  177. //storage.setItem("district_"+id,JSON.stringify(data.districtList));
  178. //districtCity(selectDom,data.districtList);
  179. },
  180. error : function(err) {}
  181. });
  182. });
  183. $("input[arrivalsDate]").change(function() {
  184. let date=$(this).val();
  185. $.ajax({
  186. url : '/api/itinerary/date',
  187. data: {date:date},
  188. type : "post",
  189. cache : false,
  190. dataType : "json",
  191. async:false,
  192. global : true,
  193. success : function(data) {
  194. console.log(data.status);
  195. if(!data.status){
  196. $('input[arrivalsDate]').val('');
  197. $('td[msg]').html('<span class="colRed">日期已被使用过</span>');
  198. }else{
  199. $('td[msg]').html('');
  200. }
  201. //storage.setItem("district_"+id,JSON.stringify(data.districtList));
  202. //districtCity(selectDom,data.districtList);
  203. },
  204. error : function(err) {}
  205. });
  206. });
  207. })
  208. function setDisabled(sessionItinerary){
  209. if(sessionItinerary!==''){
  210. let si=JSON.parse(sessionItinerary);
  211. $('input[departuredate]').val(si.arrivalsdate.substring(1));
  212. }
  213. //禁用出发地
  214. $('select[departureprovince]').attr("disabled","disabled");
  215. $('select[departurecity]').attr("disabled","disabled");
  216. $('input[departuredate]').attr("disabled","disabled");
  217. }
  218. function setUnDisabled(){
  219. //禁用出发地
  220. $('select[departureprovince]').removeAttr("disabled");
  221. $('select[departurecity]').removeAttr("disabled");
  222. $('input[departuredate]').removeAttr("disabled");
  223. }
  224. //构建总行程单
  225. function buildItineraryProcess(data){
  226. let html='';
  227. let dataJson=data;
  228. if(typeof data==='string'){
  229. dataJson=JSON.parse(data);
  230. }
  231. let last=dataJson.length-1;
  232. let n=0;
  233. for(let i=0;i<dataJson.length;i++){
  234. let price=0;
  235. for(let p=0;p<dataJson[i].feeTraveItem.length;p++){
  236. price+=parseFloat(dataJson[i].feeTraveItem[p].price);
  237. }
  238. price=price.toFixed(2);
  239. let city='';
  240. if(i==0){
  241. city=dataJson[i].departurecity;
  242. }else{
  243. n=i-1;
  244. city=dataJson[n].arrivalscity.substring(1);
  245. }
  246. html+=`<li>
  247. <div class="itineraryList">
  248. <div class="addressName"><i class="contactsMark icon-">P</i> <b>${city}</b></div>
  249. <div class="pointLine">
  250. <div class="priceList">
  251. <span class="priceTitle">金额</span>
  252. <span class="price colGreen">¥${price}</span>
  253. </div>
  254. <div class="timeList">
  255. <span class="timeTitle">时间</span>
  256. <span class="time">${dataJson[i].departuredate}${dataJson[i].arrivalsdate}</span>
  257. </div>
  258. </div>
  259. </div>
  260. </li>`;
  261. if(i===last){
  262. let arrivalscity=dataJson[i].arrivalscity.substring(1);
  263. html+=`<li>
  264. <div class="itineraryList">
  265. <div class="addressName"><i class="contactsMark icon-">P</i> <b>${arrivalscity}</b></div>
  266. </div>
  267. </li>`;
  268. //html+=`<div class="addressName fL"><i class="contactsMark icon-">P</i><b>${arrivalscity}</b></div>`;
  269. }
  270. }
  271. $("ul[itineraryinfo]").html(html);
  272. }
  273. //重新计算费用单金额
  274. function fnTotTravelPrice(){
  275. var itineraryStr=sessionStorage.getItem(sessionStorageList);
  276. var sessionItinerary= JSON.parse(itineraryStr);
  277. //重新赋值行程详情
  278. $("#itinerary").val(itineraryStr);
  279. var priceList=[];
  280. for(let i=0;i<sessionItinerary.length;i++){
  281. let feeTraveItem=sessionItinerary[i].feeTraveItem;
  282. for(let k=0;k<feeTraveItem.length;k++){
  283. if(typeof priceList[feeTraveItem[k].id]==='undefined'){
  284. priceList[feeTraveItem[k].id]=0;
  285. }
  286. priceList[feeTraveItem[k].id]+=parseFloat(feeTraveItem[k].price);
  287. }
  288. }
  289. $("input[id^='travel_']").val(0);
  290. $("td span").html(0);
  291. let travelResult=0;
  292. for(let i=0;i<priceList.length;i++){
  293. if(typeof priceList[i]==='number'){
  294. $("span[travelprice_"+i+"]").html(priceList[i].toFixed(2));
  295. $("#travel_"+i+"").val(priceList[i].toFixed(2));
  296. travelResult+=priceList[i];
  297. }
  298. }
  299. $("#travelResult").html(travelResult.toFixed(2));
  300. $("#RS").html(travelResult.toFixed(2));
  301. }
  302. //构建费用说明
  303. function buildFeeTravelItem(feeTraveItem){
  304. var html='';
  305. for(let i=0;i<feeTraveItem.length;i++){
  306. html+='<tr class="remove" ><th>'+feeTraveItem[i].name+'</th>';
  307. 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>'+
  308. '<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>';
  309. //html+='<td><textarea type="text" itemDetail_'+feeTraveItem[i].id+' placeholder="填写费用说明">'+feeTraveItem[i].detail+'</textarea> </td>';
  310. html+='<td><a href="#" removeFeeTravelItem >移除</a></td></tr>';
  311. }
  312. $("tbody[feeTravelItem]").html(html);
  313. }
  314. //获得设置行程单的相关内容
  315. function fnGetItineraryData(){
  316. var departurecity=$("select[departurecity] option:selected").text();
  317. var arrivalscity=$("select[arrivalscity] option:selected").text();
  318. var departureprovince=$("select[departureprovince] option:selected").text();
  319. var arrivalsprovince=$("select[arrivalsprovince] option:selected").text();
  320. var departuredate=$("input[departuredate]").val();
  321. var arrivalsdate=$("input[arrivalsdate]").val();
  322. var feeTravePriceList=$("tbody[feeTravelItem]").find('input[type=number]');
  323. //var feeTraveDetailList=$("tbody[feeTravelItem]").find('input[type=text]');
  324. var feeTraveDetailList=$("tbody[feeTravelItem]").find('textarea');
  325. if(arrivalscity!==''){
  326. arrivalscity='-'+arrivalscity;
  327. }
  328. if(arrivalsdate!==''){
  329. arrivalsdate='~'+arrivalsdate;
  330. }
  331. var feeTraveItem=[];
  332. for(let i=0;i<feeTravePriceList.length;i++){
  333. feeTraveItem.push({'id':$(feeTravePriceList[i]).attr('dataId'),'name':$(feeTravePriceList[i]).attr('data'),'price':$(feeTravePriceList[i]).val(),'detail':$(feeTraveDetailList[i]).val()});
  334. }
  335. var itinerary={'departuredate':departuredate,'departureprovince':departureprovince,'departurecity':departurecity,'arrivalsdate':arrivalsdate,'arrivalsprovince':arrivalsprovince,'arrivalscity':arrivalscity,'feeTraveItem':feeTraveItem};
  336. return itinerary;
  337. }
  338. //设置行程详情--列表页
  339. function buildItinerary(list){
  340. var html='';
  341. for(let i=0;i<list.length;i++){
  342. if(i==0){
  343. 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+'';
  344. }else{
  345. let previousIndex=i-1;
  346. 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+'';
  347. }
  348. 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>';
  349. let feeTraveItem=list[i].feeTraveItem;
  350. let price=0;let detail='';
  351. for(let k=0;k<feeTraveItem.length;k++){
  352. price+=parseFloat(feeTraveItem[k].price);
  353. if(!(typeof feeTraveItem[k].detail==='undefined')){
  354. detail=feeTraveItem[k].detail.replace(new RegExp("\n", "gm"), '<br/>');
  355. }
  356. html+='<tr><th>'+feeTraveItem[k].name+'<p class="colGray">'+detail+'</p></th><td width="200" class="taR">¥'+feeTraveItem[k].price+'</td></tr>';
  357. }
  358. html+='<tr><th class="taR">合计</th><td class="colGreen taR">¥'+price.toFixed(2)+'</td></tr>';
  359. }
  360. $("tbody[itinerary]").html(html);
  361. }
  362. //设置城市下来菜单-存储数据
  363. function districtCityBuild(selectDom,obj,selected){
  364. var storage=window.localStorage;
  365. var id=$('select['+obj+']').val();
  366. if(typeof storage["district_"+id]==='undefined'||storage["district_"+id]===''){
  367. $.ajax({
  368. url : '/api/district?did='+id,
  369. type : "post",
  370. cache : false,
  371. dataType : "json",
  372. async:false,
  373. global : true,
  374. success : function(data) {
  375. storage.setItem("district_"+id,JSON.stringify(data.districtList));
  376. //districtCity(selectDom,data.districtList);
  377. },
  378. error : function(err) {}
  379. });
  380. }
  381. districtCity=JSON.parse(storage["district_"+id]);
  382. var html='';var cityName='';
  383. if(typeof selected!=='undefined'){
  384. if(selectDom=='departurecity'){
  385. cityName=selected.departurecity;
  386. }else{
  387. cityName=selected.arrivalscity.substring(1);
  388. }
  389. }
  390. for(let i=0;i<districtCity.length;i++){
  391. if(typeof selected!=='undefined'&&cityName==districtCity[i].name){
  392. html+='<option selected value='+districtCity[i].name+'>'+districtCity[i].name+'</option>';
  393. }else{
  394. html+='<option value='+districtCity[i].name+'>'+districtCity[i].name+'</option>';
  395. }
  396. }
  397. $("select["+selectDom+"]").html(html);
  398. }
  399. //--设置省份下拉
  400. function districtTop(selected){
  401. var storage=window.localStorage;
  402. if(typeof storage["districtTop"]==='undefined'||storage["districtTop"]===''){
  403. $.ajax({
  404. url : '/api/district',
  405. type : "post",
  406. cache : false,
  407. dataType : "json",
  408. global : true,
  409. success : function(data) {
  410. storage.setItem("districtTop",JSON.stringify(data.districtList));
  411. //districtTop(data.districtList);
  412. districtTopHtml(data.districtList,selected);
  413. },
  414. error : function(err) {}
  415. });
  416. }else{
  417. districtTopHtml(JSON.parse(storage["districtTop"]),selected);
  418. }
  419. }
  420. function districtTopHtml(districtTop,selected){
  421. //var districtTop=JSON.parse(storage["districtTop"]);
  422. //console.log(districtTop.length);
  423. var html='';
  424. for(let i=0;i<districtTop.length;i++){
  425. if(typeof selected!=='undefined'&&selected.departureprovince==districtTop[i].name){
  426. html+='<option selected value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
  427. }else{
  428. html+='<option value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
  429. }
  430. }
  431. $("select[departureProvince]").html(html);
  432. html='';
  433. for(let i=0;i<districtTop.length;i++){
  434. if(typeof selected!=='undefined'&&selected.arrivalsprovince==districtTop[i].name){
  435. html+='<option selected value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
  436. }else{
  437. html+='<option value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
  438. }
  439. }
  440. $("select[arrivalsProvince]").html(html);
  441. }