itinerary2func.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. //构建编辑行程单
  2. function buildStrokeTable(sessionItinerary){
  3. let table=$("table[stroke]");
  4. let html='';let nodeCount=0;let dataId=0;
  5. sessionItinerary.forEach(function(value,index){
  6. dataId=Object.keys(value)[0];
  7. nodeCount=index+1;
  8. html+=`<tbody strokeNode id="node_${dataId}" ><tr><th colspan="2" class="taC">行程${nodeCount}#详细
  9. <a href="#" dataID="${dataId}" stroke='delNode' class="fR text-danger">删除</a>
  10. </th></tr>`;
  11. html+=buildItinerary(value[dataId],dataId,index);
  12. 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>`;
  13. })
  14. table.html(html);
  15. }
  16. //设置行程详情--列表页
  17. function buildItinerary(list,strokeId,strokeIndex){
  18. var html='';
  19. for(let i=0;i<list.length;i++){
  20. if(i==0){
  21. 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+'';
  22. }else{
  23. let previousIndex=i-1;
  24. 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+'';
  25. }
  26. 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>';
  27. let feeTraveItem=list[i].feeTraveItem;
  28. let price=0;let detail='';
  29. for(let k=0;k<feeTraveItem.length;k++){
  30. price+=parseFloat(feeTraveItem[k].price);
  31. //TODO-处理换行
  32. if(!(typeof feeTraveItem[k].detail==='undefined')){
  33. detail=feeTraveItem[k].detail.replace(new RegExp("\n", "gm"), '<br/>');
  34. }
  35. html+='<tr><th>'+feeTraveItem[k].name+'<p class="colGray">'+detail+'</p></th><td width="200" class="taR">¥'+feeTraveItem[k].price+'</td></tr>';
  36. }
  37. html+='<tr><th class="taR">合计</th><td class="colGreen taR">¥'+price+'</td></tr>';
  38. }
  39. return html;
  40. }
  41. //构建总行程单
  42. function buildItineraryProcess(data){
  43. let html='';
  44. let strokeJson=data;
  45. if(typeof data==='string'){
  46. strokeJson=JSON.parse(data);
  47. }
  48. let dataJson;
  49. strokeJson.forEach(function(value,index){
  50. dataId=Object.keys(value)[0];
  51. dataJson=value[dataId];
  52. let last=dataJson.length-1;
  53. let n=0;var ln=index+1;
  54. html+=`<li>行程${ln}#</li>`;
  55. for(let i=0;i<dataJson.length;i++){
  56. let price=0;
  57. for(let p=0;p<dataJson[i].feeTraveItem.length;p++){
  58. price+=parseFloat(dataJson[i].feeTraveItem[p].price);
  59. }
  60. price=price.toFixed(2);
  61. let city='';
  62. if(i==0){
  63. city=dataJson[i].departurecity;
  64. }else{
  65. n=i-1;
  66. city=dataJson[n].arrivalscity.substring(1);
  67. }
  68. html+=`<li>
  69. <div class="itineraryList">
  70. <div class="addressName"><i class="contactsMark icon-">P</i> <b>${city}</b></div>
  71. <div class="pointLine">
  72. <div class="priceList">
  73. <span class="priceTitle">金额</span>
  74. <span class="price colGreen">¥${price}</span>
  75. </div>
  76. <div class="timeList">
  77. <span class="timeTitle">时间</span>
  78. <span class="time">${dataJson[i].departuredate}${dataJson[i].arrivalsdate}</span>
  79. </div>
  80. </div>
  81. </div>
  82. </li>`;
  83. if(i===last){
  84. let arrivalscity=dataJson[i].arrivalscity.substring(1);
  85. html+=`<li>
  86. <div class="itineraryList">
  87. <div class="addressName"><i class="contactsMark icon-">P</i> <b>${arrivalscity}</b></div>
  88. </div>
  89. </li>`;
  90. //html+=`<div class="addressName fL"><i class="contactsMark icon-">P</i><b>${arrivalscity}</b></div>`;
  91. }
  92. }
  93. html+=`<li><br/></li>`;
  94. })
  95. $("ul[itineraryinfo]").html(html);
  96. }
  97. //重新计算费用单金额
  98. function fnTotTravelPrice(){
  99. var itineraryStr=sessionStorage.getItem(sessionStorageList);
  100. //重新赋值行程详情
  101. $("#itinerary").val(itineraryStr);
  102. //var sessionItinerary= JSON.parse(itineraryStr);
  103. var strokeJson= JSON.parse(itineraryStr);
  104. var priceList=[];
  105. strokeJson.forEach(function(value,index){
  106. dataId=Object.keys(value)[0];
  107. var sessionItinerary=value[dataId];
  108. for(let i=0;i<sessionItinerary.length;i++){
  109. let feeTraveItem=sessionItinerary[i].feeTraveItem;
  110. for(let k=0;k<feeTraveItem.length;k++){
  111. if(typeof priceList[feeTraveItem[k].id]==='undefined'){
  112. priceList[feeTraveItem[k].id]=0;
  113. }
  114. priceList[feeTraveItem[k].id]+=parseFloat(feeTraveItem[k].price);
  115. }
  116. }
  117. })
  118. $("input[id^='travel_']").val(0);
  119. $("td span").html(0);
  120. let travelResult=0;
  121. for(let i=0;i<priceList.length;i++){
  122. if(typeof priceList[i]==='number'){
  123. $("span[travelprice_"+i+"]").html(priceList[i].toFixed(2));
  124. $("#travel_"+i+"").val(priceList[i].toFixed(2));
  125. travelResult+=priceList[i];
  126. }
  127. }
  128. $("#travelResult").html(travelResult.toFixed(2));
  129. $("#RS").html(travelResult.toFixed(2));
  130. }
  131. //构建费用说明
  132. function buildFeeTravelItem(feeTraveItem){
  133. var html='';
  134. for(let i=0;i<feeTraveItem.length;i++){
  135. html+='<tr class="remove" ><th>'+feeTraveItem[i].name+'</th>';
  136. 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>'+
  137. '<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>';
  138. //html+='<td><textarea type="text" itemDetail_'+feeTraveItem[i].id+' placeholder="填写费用说明">'+feeTraveItem[i].detail+'</textarea> </td>';
  139. html+='<td><a href="#" removeFeeTravelItem >移除</a></td></tr>';
  140. }
  141. $("tbody[feeTravelItem]").html(html);
  142. }
  143. //获得对应的行程单
  144. function getItineraryData(dataString,dataID){
  145. strokeList=JSON.parse(dataString);
  146. let sessionItinerary={};let keyId=0;
  147. strokeList.forEach(function(value,index){
  148. keyId=Object.keys(value)[0];
  149. if(keyId===dataID){
  150. sessionItinerary=value;
  151. }
  152. })
  153. return sessionItinerary[dataID];
  154. }
  155. function setUnDisabled(){
  156. //禁用出发地
  157. $('select[departureprovince]').removeAttr("disabled");
  158. $('select[departurecity]').removeAttr("disabled");
  159. $('input[departuredate]').removeAttr("disabled");
  160. }
  161. function setDisabled(sessionItinerary){
  162. if(sessionItinerary!==''){
  163. let si=JSON.parse(sessionItinerary);
  164. $('input[departuredate]').val(si.arrivalsdate.substring(1));
  165. }
  166. //禁用出发地
  167. $('select[departureprovince]').attr("disabled","disabled");
  168. $('select[departurecity]').attr("disabled","disabled");
  169. $('input[departuredate]').attr("disabled","disabled");
  170. }
  171. //获得设置行程单的相关内容
  172. function fnGetItineraryData(){
  173. var departurecity=$("select[departurecity] option:selected").text();
  174. var arrivalscity=$("select[arrivalscity] option:selected").text();
  175. var departureprovince=$("select[departureprovince] option:selected").text();
  176. var arrivalsprovince=$("select[arrivalsprovince] option:selected").text();
  177. var departuredate=$("input[departuredate]").val();
  178. var arrivalsdate=$("input[arrivalsdate]").val();
  179. var feeTravePriceList=$("tbody[feeTravelItem]").find('input[type=number]');
  180. //var feeTraveDetailList=$("tbody[feeTravelItem]").find('input[type=text]');
  181. var feeTraveDetailList=$("tbody[feeTravelItem]").find('textarea');
  182. if(arrivalscity!==''){
  183. arrivalscity='-'+arrivalscity;
  184. }
  185. if(arrivalsdate!==''){
  186. arrivalsdate='~'+arrivalsdate;
  187. }
  188. var feeTraveItem=[];
  189. for(let i=0;i<feeTravePriceList.length;i++){
  190. feeTraveItem.push({'id':$(feeTravePriceList[i]).attr('dataId'),'name':$(feeTravePriceList[i]).attr('data'),'price':$(feeTravePriceList[i]).val(),'detail':$(feeTraveDetailList[i]).val()});
  191. }
  192. var itinerary={'departuredate':departuredate,'departureprovince':departureprovince,'departurecity':departurecity,'arrivalsdate':arrivalsdate,'arrivalsprovince':arrivalsprovince,'arrivalscity':arrivalscity,'feeTraveItem':feeTraveItem};
  193. return itinerary;
  194. }
  195. //--设置省份下拉
  196. function districtTop(selected){
  197. var storage=window.localStorage;
  198. if(typeof storage["districtTop"]==='undefined'||storage["districtTop"]===''){
  199. $.ajax({
  200. url : '/api/district',
  201. type : "post",
  202. cache : false,
  203. dataType : "json",
  204. global : true,
  205. success : function(data) {
  206. storage.setItem("districtTop",JSON.stringify(data.districtList));
  207. //districtTop(data.districtList);
  208. districtTopHtml(data.districtList,selected);
  209. },
  210. error : function(err) {}
  211. });
  212. }else{
  213. districtTopHtml(JSON.parse(storage["districtTop"]),selected);
  214. }
  215. }
  216. function districtTopHtml(districtTop,selected){
  217. //var districtTop=JSON.parse(storage["districtTop"]);
  218. //console.log(districtTop.length);
  219. var html='';
  220. for(let i=0;i<districtTop.length;i++){
  221. if(typeof selected!=='undefined'&&selected.departureprovince==districtTop[i].name){
  222. html+='<option selected value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
  223. }else{
  224. html+='<option value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
  225. }
  226. }
  227. $("select[departureProvince]").html(html);
  228. html='';
  229. for(let i=0;i<districtTop.length;i++){
  230. if(typeof selected!=='undefined'&&selected.arrivalsprovince==districtTop[i].name){
  231. html+='<option selected value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
  232. }else{
  233. html+='<option value='+districtTop[i].id+'>'+districtTop[i].name+'</option>';
  234. }
  235. }
  236. $("select[arrivalsProvince]").html(html);
  237. }
  238. //设置城市下来菜单-存储数据
  239. function districtCityBuild(selectDom,obj,selected){
  240. var storage=window.localStorage;
  241. var id=$('select['+obj+']').val();
  242. if(typeof storage["district_"+id]==='undefined'||storage["district_"+id]===''){
  243. $.ajax({
  244. url : '/api/district?did='+id,
  245. type : "post",
  246. cache : false,
  247. dataType : "json",
  248. async:false,
  249. global : true,
  250. success : function(data) {
  251. storage.setItem("district_"+id,JSON.stringify(data.districtList));
  252. //districtCity(selectDom,data.districtList);
  253. },
  254. error : function(err) {}
  255. });
  256. }
  257. districtCity=JSON.parse(storage["district_"+id]);
  258. var html='';var cityName='';
  259. if(typeof selected!=='undefined'){
  260. if(selectDom=='departurecity'){
  261. cityName=selected.departurecity;
  262. }else{
  263. cityName=selected.arrivalscity.substring(1);
  264. }
  265. }
  266. for(let i=0;i<districtCity.length;i++){
  267. if(typeof selected!=='undefined'&&cityName==districtCity[i].name){
  268. html+='<option selected value='+districtCity[i].name+'>'+districtCity[i].name+'</option>';
  269. }else{
  270. html+='<option value='+districtCity[i].name+'>'+districtCity[i].name+'</option>';
  271. }
  272. }
  273. $("select["+selectDom+"]").html(html);
  274. }
  275. function emptyJson(data) {
  276. if (data === "{}" || JSON.stringify(data) === "{}") {
  277. return true;
  278. } else {
  279. return false;
  280. }
  281. }