You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1626 lines
54 KiB

  1. //date:2017-04-12
  2. var cache_res_data = {};
  3. var order_id = '';
  4. var mao_location = '';
  5. var temp_all_html = '';
  6. var save_info = '保存';
  7. var save_update_info = '保存并生成修改单';
  8. var temp_docking_type = '';
  9. var temp_order_status = '';
  10. var temp_channel_order_status = '';
  11. var status_arr1 = ['313']; //待发单
  12. var status_arr2 = ["198", "382"]; //待安排 退改中
  13. var status_arr3 = ['313', '198', '382']; //待发单 待安排 退改中
  14. //渠道状态为已拒绝,取消被拒
  15. var channel_status_arr1 = ['552', '554'];
  16. //延迟加载的时间
  17. var delayTs = 800;
  18. $(document).ready(function() {
  19. order_id = getPar('order_id');
  20. mao_location = getPar('location');
  21. if(mao_location.indexOf('#') != -1) {
  22. var index = mao_location.indexOf('#');
  23. mao_location = mao_location.substring(0, index);
  24. }
  25. if('' == order_id) {
  26. ZZAlertInfo('缺少订单号!');
  27. return;
  28. }
  29. //将日志的结束时间设置为今天
  30. $('#log-end-date').val(getDateTime(0));
  31. httpLoadInfo()
  32. })
  33. //加载基本信息
  34. function httpLoadInfo() {
  35. loading();
  36. var data = {
  37. "type": "order_HotelOrderDetailLevel",
  38. "order_id": order_id
  39. }
  40. $.ajax({
  41. type: "post",
  42. url: base_api,
  43. async: true,
  44. data: data,
  45. dataType: "json",
  46. success: (res_data) => {
  47. ZZLog(res_data);
  48. if(res_data['code'] != "0") {
  49. ZZAlertInfo(res_data['info']);
  50. } else {
  51. cache_res_data[order_id] = res_data;
  52. loadHtml(res_data);
  53. loadUpLog(res_data);
  54. httpLoadLog();
  55. $('.iframe_box').show();
  56. closeLoading();
  57. //锚点定位
  58. if(mao_location != "") window.location.hash = '#' + mao_location;
  59. }
  60. },
  61. error: () => {
  62. ZZAlertInfo(infoApiError);
  63. }
  64. });
  65. }
  66. //根据初始数据刷新页面
  67. function loadHtml(res_data) {
  68. // order_info
  69. //:如果是直连订单 不能更改销售价
  70. var order_info = res_data['order_info'];
  71. var order_id = order_info['order_id'];
  72. var order_status_name = order_info['order_status_name']
  73. var org_id = order_info['org_id'];
  74. var org_name = order_info['org_name'];
  75. var org_num = order_info['org_num'];
  76. $('#top-order-id').html('订单编号:' + order_id);
  77. $('#top-order-status').html(order_status_name);
  78. $('#top-order-channel').html('订单渠道:' + org_name);
  79. $('#top-order-channel-order-id').html(org_num);
  80. var docking_type = order_info['docking_type'];
  81. temp_docking_type = docking_type;
  82. var docking_type_desc = order_info['docking_type_desc'];
  83. if('557' == docking_type) {
  84. // $('#ludan').html(docking_type_desc);
  85. $('#ludan').html('录');
  86. $('#ludan').removeClass('hide_f');
  87. if(order_info['order_title_id'] !== '0'){
  88. $('#zhuhe').html('组');
  89. $('#zhuhe').removeClass('hide_f')
  90. }
  91. }
  92. if('556' == docking_type) {
  93. // $('#zhilian').html(docking_type_desc);
  94. $('#zhilian').html('直');
  95. $('#zhilian').removeClass('hide_f')
  96. if(order_info['if_last_prod'] === '2'){
  97. $('#lihe').html('礼');
  98. $('#lihe').removeClass('hide_f')
  99. }
  100. }
  101. var cha = order_info['seconds'];
  102. var channel_order_status = order_info['channel_order_status'];
  103. var channel_order_status_desc = order_info['channel_order_status_desc'];
  104. temp_channel_order_status = channel_order_status;
  105. if(cha >= 0 && "550" == channel_order_status && "556" == docking_type) { //后30分钟内 //渠道状态必须是待处理550
  106. timeJian();
  107. function timeJian() {
  108. cha--;
  109. if(cha < 0) cha = 0;
  110. var m = parseInt(cha / 60);
  111. var s = cha % 60;
  112. if(0 == m && s == 0) {
  113. $('#top-order-status-main').children().eq(1).html('|');
  114. $('#top-order-status-main').children().eq(2).html(`${channel_order_status_desc} <span style="color:red;">(超时)</span>`);
  115. return;
  116. }
  117. m = m < 10 ? `0${m}` : m;
  118. s = s < 10 ? `0${s}` : s;
  119. $('#top-order-status-main').children().eq(1).html('|');
  120. $('#top-order-status-main').children().eq(2).html(`${channel_order_status_desc} <span style="color:red;">(${m}:${s})</span>`);
  121. setTimeout(timeJian, 1000);
  122. }
  123. }
  124. //订单状态
  125. var order_status = res_data['order_status'];
  126. if(order_status.hasOwnProperty('198')) $('.198').addClass('active'); //待安排
  127. if(order_status.hasOwnProperty('314')) $('.314').addClass('active'); //已安排
  128. if(order_status.hasOwnProperty('147')) $('.147').addClass('active'); //已入住
  129. if('147' == order_info['order_status']) $('.147').addClass('active'); //已入住
  130. temp_order_status = order_info['order_status'];
  131. //三个单 下载 0:确认单 1:修改单 2:取消单
  132. if('0' == order_info['order_level']) {
  133. $('#top-btn-ok-d').removeClass('hide_f')
  134. $('#top-btn-update-d').addClass('hide_f')
  135. $('#top-btn-cancele-d').addClass('hide_f')
  136. };
  137. if('1' == order_info['order_level']) {
  138. $('#top-btn-update-d').removeClass('hide_f')
  139. $('#top-btn-ok-d').addClass('hide_f')
  140. $('#top-btn-cancele-d').addClass('hide_f')
  141. };
  142. if('2' == order_info['order_level']) {
  143. $('#top-btn-cancel-d').removeClass('hide_f')
  144. $('#top-btn-ok-d').addClass('hide_f')
  145. $('#top-btn-update-d').addClass('hide_f')
  146. };
  147. //1.入住需求
  148. var hotel_id = order_info['hotel_id'];
  149. var hotel_name = order_info['hotel_name'];
  150. var room_type = order_info['room_type'];
  151. var base_room_type = order_info['base_room_type'];
  152. var room_name = order_info['room_name'];
  153. $('#rz-hotel-name').attr('data-hotel-id', hotel_id);
  154. $('#rz-hotel-name').html(hotel_name);
  155. $('#rz-hotel-room').attr('data-room-type', room_type);
  156. $('#rz-hotel-room').attr('data-base-room-type', base_room_type);
  157. $('#rz-hotel-room').html(room_name);
  158. //1.1渠道订单号
  159. $('#order_channel_order_id_txt').html(org_num);
  160. $('#order_channel_order_id').val(org_num);
  161. $('#order_channel_txt').html(org_name);
  162. var org_list = res_data['org_list'];
  163. var channel_html = '';
  164. org_list.forEach((v, i) => {
  165. // channel_html += `<option value="${v.org_id}" ${v.org_id==org_id?'selected="selected"':""}>${v.org_name}</option>`;
  166. channel_html += `<option value="${v.org_id}">${v.org_name}</option>`;
  167. })
  168. $('#order_channel').html(channel_html);
  169. $('#order_channel').val(org_id);
  170. $('#order_channel').comboSelect();
  171. $('#order_channel').closest('.combo-select').addClass('hide_f update1_h');
  172. // $('#order_channel').val(org_id);
  173. //1.2入住日期
  174. var start_date = order_info['start_date'];
  175. var end_date = order_info['end_date'];
  176. $('#start_date').children().eq(0).val(start_date);
  177. $('#end_date').children().eq(0).val(end_date);
  178. var days = DateDiff(start_date,end_date);
  179. $('#datediff').html(`共 ${days} 晚`);
  180. $('#start_date_txt').html(start_date);
  181. $('#end_date_txt').html(end_date);
  182. //1.3表格
  183. var one_day = order_info['one_day'];
  184. var one_html = '';
  185. var all_commission = order_info['all_commission'];
  186. var all_price = order_info['all_price'];
  187. var all_profit = order_info['all_profit'];
  188. var all_html = `<tr style="font-weight:bold">
  189. <td>小计</td>
  190. <td></td>
  191. <td></td>
  192. <td></td>
  193. <td class="all_price" data-value="${all_price}">${all_price}元</td>
  194. <td class="all_commission" data-value="${all_commission}">${all_commission}元</td>
  195. <td class="all_profit" data-value="${all_profit}">${all_profit}元</td>
  196. </tr>`;
  197. temp_all_html = all_html;
  198. one_day.forEach((v, i) => {
  199. var cstr1 = '';
  200. for(var j = 1; j <= 20; j++) {
  201. cstr1 += `<option value="${j}" ${v.count==j?'selected="selected"':""}>${j}</option>`;
  202. }
  203. one_html += `<tr class="tr_line" height="45">
  204. <td>${v.start_date}</td>
  205. <td>
  206. <span class="update1_s">${v.count}</span>
  207. <select class="form-control hide_f update1_h room_count" style="width: 40px;padding:0px">
  208. ${cstr1}
  209. </select>
  210. </td>
  211. <td>
  212. <span class="update2_s">${v.order_price}</span>
  213. <input data-price="${v.order_price}" type="text" class="form-control hide_f update2_h sale_single_price" style="width: 80px;" value="${v.order_price}"/>
  214. </td>
  215. <td>
  216. <span class="update3_s">${v.base_price}</span>
  217. <input data-price="${v.base_price}" type="text" class="form-control hide_f update3_h cai_base_price" style="width: 80px;" value="${v.base_price}"/>
  218. </td>
  219. <td class="tr_all_price">${toDecimal2(v.order_price*v.count)}</td>
  220. <td class="tr_all_commission" data-commission="${toDecimal2(v.commission)}">${toDecimal2(v.commission)}</td>
  221. <td class="tr_profit_value">${toDecimal2(v.profit_value)}</td>
  222. </tr>`;
  223. });
  224. one_html += all_html;
  225. $('#rz-table').html(one_html);
  226. // $('.room_count').on('change',function()){
  227. // $parent = $(this).closest('tr');
  228. // tr_change($parent);
  229. // }
  230. $('.cai_base_price').on('input', function() {
  231. $parent = $(this).closest('tr');
  232. tr_change($parent);
  233. })
  234. $('.sale_single_price').on('input', function() {
  235. $parent = $(this).closest('tr');
  236. changeCount($parent);
  237. })
  238. $('.sale_single_price').on('blur', function() {
  239. var val = $(this).val();
  240. val = val.trim() == "" ? "0" : val.trim();
  241. $(this).val(val);
  242. $(this).closest('td').find('.sale_single_price_txt').text(val);
  243. })
  244. $('.cai_base_price').on('blur', function() {
  245. var val = $(this).val();
  246. val = val.trim() == "" ? "0" : val.trim();
  247. $(this).val(val);
  248. $(this).closest('td').find('.cai_base_price_txt').text(val);
  249. })
  250. //1.5三个按钮
  251. //如果是直连 则不能够修改销售价 556:直连 557:录单
  252. if('556' == docking_type) {
  253. //销售价不允许改
  254. $('#btn-rz-update-xsj').hide();
  255. $('#btn-rz-update-xsj').remove();
  256. $('#btn-rz-update-xsj').css('opacity', '0');
  257. // 判断采购价能否修改采购价,payment_status > 1 则不能修改
  258. if(order_info['payment_status'] > 1)
  259. {
  260. $('#btn-rz-update-cgj').hide();
  261. $('#btn-rz-update-cgj').remove();
  262. $('#btn-rz-update-cgj').css('opacity', '0');
  263. }
  264. //修改入住需求 临时方案 先不允许改
  265. $('#btn-rz-update-xq').hide();
  266. $('#btn-rz-update-xq').remove();
  267. $('#btn-rz-update-xq').css('opacity', '0');
  268. //1.5.1
  269. if($.inArray(temp_order_status, status_arr3) == -1 || ($.inArray(temp_channel_order_status, channel_status_arr1) >= 0)) {
  270. $('#btn-rz-update-xq').hide();
  271. $('#btn-rz-update-xq').remove();
  272. $('#btn-rz-update-xq').css('opacity', '0');
  273. $('#btn-rz-update-cgj').hide();
  274. $('#btn-rz-update-cgj').remove();
  275. $('#btn-rz-update-cgj').css('opacity', '0');
  276. $('#btn-rz-update-cancel').hide();
  277. $('#btn-rz-update-cancel').remove();
  278. $('#btn-rz-update-cancel').css('opacity', '0');
  279. //客人信息
  280. $('#btn-customer-update').closest('.myBody').children().eq(2).css('opacity', '0');
  281. $('#btn-customer-update').closest('.myBody').children().eq(2).hide();
  282. //订单备注
  283. $('.order-remark').css('opacity', '0');
  284. $('.order-remark').hide();
  285. $('.btn-comment').attr("disabled", "disabled");
  286. $('.btn-comment').hide();
  287. }
  288. }
  289. if("557" == docking_type) {
  290. //1.5.2
  291. //录入的订单 应收:gathering_status > 1 则不显示销售价,应付:payment_status > 1 则不显示采购价
  292. if(order_info['gathering_status'] > 1)
  293. {
  294. $('#btn-rz-update-xsj').hide();
  295. $('#btn-rz-update-xsj').remove();
  296. $('#btn-rz-update-xsj').css('opacity', '0');
  297. }
  298. if(order_info['payment_status'] > 1)
  299. {
  300. $('#btn-rz-update-cgj').hide();
  301. $('#btn-rz-update-cgj').remove();
  302. $('#btn-rz-update-cgj').css('opacity', '0');
  303. }
  304. if($.inArray(temp_order_status, status_arr3) == -1) {
  305. //三个按钮
  306. $('#btn-rz-update-xq').hide();
  307. $('#btn-rz-update-xq').remove();
  308. $('#btn-rz-update-xq').css('opacity', '0');
  309. $('#btn-rz-update-xsj').hide();
  310. $('#btn-rz-update-xsj').remove();
  311. $('#btn-rz-update-xsj').css('opacity', '0');
  312. $('#btn-rz-update-cgj').hide();
  313. $('#btn-rz-update-cgj').remove();
  314. $('#btn-rz-update-cgj').css('opacity', '0');
  315. $('#btn-rz-update-cancel').hide();
  316. $('#btn-rz-update-cancel').remove();
  317. $('#btn-rz-update-cancel').css('opacity', '0');
  318. //客人信息
  319. $('#btn-customer-update').closest('.myBody').children().eq(2).css('opacity', '0');
  320. $('#btn-customer-update').closest('.myBody').children().eq(2).hide();
  321. //订单备注
  322. $('.order-remark').css('opacity', '0');
  323. $('.order-remark').hide();
  324. $('.btn-comment').attr("disabled", "disabled");
  325. $('.btn-comment').hide();
  326. }
  327. }
  328. //2.0客人信息
  329. var customer_name = order_info['customer_name'];
  330. var customer_mobile = order_info['customer_mobile'];
  331. if(customer_name.length > 18){
  332. $('#customer_name').css('width', '500px');
  333. }
  334. $('#customer_name').val(customer_name);
  335. $('#customer_name').attr('data-old',customer_name);
  336. $('#customer_phone').val(customer_mobile ? customer_mobile : "-");
  337. $('#customer_phone').attr('data-old',customer_mobile);
  338. //3.0订单备注
  339. var order_comment = res_data['order_comment'];
  340. var comment_html = '';
  341. order_comment.forEach((v, i) => {
  342. comment_html += ` <tr>
  343. <td data-type="${v.comment_type}">${v.comment_type_desc}</td>
  344. <td>${v.comment_txt}</td>
  345. <td>${v.user_true_name?v.user_true_name:"-"}</td>
  346. <td>${v.create_time}</td>
  347. <td>
  348. <button type="button" data-comment-id="${v.comment_id}" class="btn btn-link btn-comment" style="padding-left: 0;">删除</button>
  349. </td>
  350. </tr>`;
  351. })
  352. comment_html=comment_html==""?`<tr style="text-align: center;color:#ddd;">
  353. <td colspan="5">无查询结果</td>
  354. </tr>`:comment_html;
  355. $('#remark-table').html(comment_html);
  356. //删除备注
  357. $('.btn-comment').on('click', function() {
  358. var $this = $(this);
  359. ZZConfirm("您真的要删除该条备注吗?", function() {
  360. var comment_id = $this.attr('data-comment-id');
  361. var data = {
  362. type: "order_ModifyHTOrderLevel",
  363. op: "commentDel",
  364. order_id,
  365. comment_id
  366. }
  367. $.ajax({
  368. type: "post",
  369. url: base_api,
  370. async: true,
  371. data: data,
  372. dataType: "json",
  373. success: (res_data) => {
  374. ZZLog(res_data);
  375. if(res_data['code'] != "0") {
  376. ZZAlertInfo(res_data['info']);
  377. } else {
  378. httpLoadInfo();
  379. }
  380. },
  381. error: () => {
  382. ZZAlertInfo(infoApiError);
  383. }
  384. });
  385. })
  386. })
  387. }
  388. function changeCount($parent) {
  389. // 房间数量
  390. var room_count = $parent.find('.room_count').val();
  391. // 结算单价
  392. var room_price = $parent.find('.sale_single_price').val();
  393. $parent.find('.room_count.txt').text(room_count);
  394. // 佣金规则
  395. var dict = getJsonHtml($parent.attr('data-json'));
  396. var dict_maiduan = getJsonHtml($parent.attr('data-json-maiduan'));
  397. var dict_baoliu = getJsonHtml($parent.attr('data-json-baoliu'));
  398. var dict_xianxun = getJsonHtml($parent.attr('data-json-xianxun'));
  399. var commision_price = 0;
  400. if(dict['commision_flag'] == '1') { //有佣金规则
  401. if(dict['back_commision_method'] == '309') { //308 按销售金额309 按结算金额
  402. commision_price = dict['back_value']
  403. } else if(dict['back_commision_method'] == '308') {
  404. commision_price = room_count * room_price * parseFloat(dict['back_percent']) / 100;
  405. }
  406. } else { //无佣金规则
  407. commision_price = 0;
  408. }
  409. //end 佣金规则
  410. //结算总价
  411. var jiesuan_price = room_count * room_price;
  412. //end 结算总价
  413. //库存类型与成本
  414. var maiduan_count = dict_maiduan['remaining_count'] == undefined ? 0 : dict_maiduan['remaining_count'];
  415. var baoliu_count = dict_baoliu['remaining_count'] == undefined ? 0 : dict_baoliu['remaining_count'];
  416. var xianxun_count = dict_xianxun['remaining_count'] == undefined ? 0 : dict_xianxun['remaining_count'];
  417. var maiduan_price = dict_maiduan['cost_price'] == undefined ? 0 : dict_maiduan['cost_price'];
  418. var baoliu_price = dict_baoliu['cost_price'] == undefined ? 0 : dict_baoliu['cost_price'];
  419. var xianxun_price = dict_xianxun['cost_price'] == undefined ? 0 : dict_xianxun['cost_price'];
  420. //end 库存类型与成本
  421. //销售利润
  422. var profit = 0;
  423. if(parseInt(room_count) <= parseInt(maiduan_count)) { //所选房间数小于等于买断数
  424. profit = jiesuan_price - commision_price - maiduan_price * room_count
  425. } else if(parseInt(room_count) > parseInt(maiduan_count) && parseInt(room_count) <= (parseInt(maiduan_count) + parseInt(baoliu_count))) { //所选房间数大于买断数,小于等于保留数+买断数
  426. profit = jiesuan_price - commision_price - maiduan_price * maiduan_count - baoliu_price * (room_count - maiduan_count)
  427. } else if(parseInt(room_count) > (parseInt(maiduan_count) + parseInt(baoliu_count)) && parseInt(room_count) <= (parseInt(maiduan_count) + parseInt(baoliu_count) + parseInt(xianxun_count))) {
  428. profit = jiesuan_price - commision_price - maiduan_price * maiduan_count - baoliu_price * baoliu_count - xianxun_price * (room_count - maiduan_count - baoliu_count)
  429. }
  430. //end 销售利润
  431. //佣金显示
  432. var commision_price1 = parseFloat(commision_price).toFixed(2);
  433. if(dict['commision_flag'] == 1) {
  434. $parent.find('.tr_all_commission').text(commision_price1);
  435. } else {
  436. $parent.find('.tr_all_commission').text('0.00');
  437. // $parent.find('.tr_all_commission').text('-');
  438. }
  439. //结算总价显示
  440. var jiesuan_price1 = parseFloat(jiesuan_price).toFixed(2);
  441. if(jiesuan_price1) {
  442. $parent.find('.tr_all_price').text(jiesuan_price1);
  443. }
  444. //销售利润显示
  445. var profit1 = parseFloat(profit).toFixed(2);
  446. if(profit1) {
  447. $parent.find('.tr_profit_value').text(profit1);
  448. }
  449. total_price_jisuan();
  450. }
  451. function tr_change($parent) {
  452. var room_count = $parent.find('.room_count').val();
  453. var sale_single_price = $parent.find('.sale_single_price').val();
  454. var cai_base_price = $parent.find('.cai_base_price').val();
  455. var commission = $parent.find('.tr_all_commission').attr('data-commission');
  456. var tr_all_1 = sale_single_price * room_count;
  457. tr_all_1 = tr_all_1.toFixed(2);
  458. var tr_all_2 = commission * room_count;
  459. tr_all_2 = tr_all_2.toFixed(2);
  460. var tr_all_3 = tr_all_1 - cai_base_price * room_count - tr_all_2;
  461. tr_all_3 = tr_all_3.toFixed(2);
  462. if(isNaN(tr_all_1)) tr_all_1 = 0.00;
  463. if(isNaN(tr_all_2)) tr_all_2 = 0.00;
  464. if(isNaN(tr_all_3)) tr_all_3 = 0.00;
  465. // if(0==tr_all_1) tr_all_1 = '-';
  466. // if(0==tr_all_2) tr_all_2 = '-';
  467. // if(0==tr_all_3) tr_all_3 = '-';
  468. $parent.find('.tr_all_price').text(tr_all_1);
  469. $parent.find('.tr_all_commission').text(tr_all_2);
  470. $parent.find('.tr_profit_value').text(tr_all_3);
  471. total_price_jisuan();
  472. }
  473. function total_price_jisuan() {
  474. var all_1 = 0,
  475. all_2 = 0,
  476. all_3 = 0;
  477. $('.tr_all_price').each(function(index, dom) {
  478. var tr_all_1 = $(this).text();
  479. all_1 += tr_all_1 - 0;
  480. })
  481. $('.tr_all_commission').each(function(index, dom) {
  482. var tr_all_2 = $(this).text();
  483. all_2 += tr_all_2 - 0;
  484. })
  485. $('.tr_profit_value').each(function(index, dom) {
  486. var tr_all_3 = $(this).text();
  487. all_3 += tr_all_3 - 0;
  488. })
  489. if(isNaN(all_1)) all_1 = 0;
  490. if(isNaN(all_2)) all_2 = 0;
  491. if(isNaN(all_3)) all_3 = 0;
  492. $('.all_price').text(all_1.toFixed(2) + '元');
  493. $('.all_price').attr('data-value', all_1.toFixed(2));
  494. $('.all_commission').text(all_2.toFixed(2) + '元');
  495. $('.all_commission').attr('data-value', all_2.toFixed(2));
  496. $('.all_profit').text(all_3.toFixed(2) + '元');
  497. $('.all_profit').attr('data-value', all_2.toFixed(2));
  498. }
  499. function loadUpLog(res_data) {
  500. var log_update_user = res_data['log_update_user'];
  501. var log_html = ' <option value="0">全部</option>';
  502. log_update_user.forEach((v, i) => {
  503. log_html += `<option value="${v.id}">${v.true_name}</option>`;
  504. })
  505. $('#update-user').html(log_html);
  506. $('#update-user').comboSelect();
  507. }
  508. $('#log-search').on('click', function() {
  509. httpLoadLog()
  510. })
  511. //请求操作日志
  512. function httpLoadLog() {
  513. var log_user = $('#update-user').val();
  514. var log_start_date = $('#log-start-date').val();
  515. var log_end_date = $('#log-end-date').val();
  516. var data = {
  517. order_id,
  518. type: "log_LogLogInformation",
  519. name: "getHotelDetail",
  520. operator: log_user,
  521. startDate: log_start_date,
  522. endDate: log_end_date
  523. }
  524. ZZLog(JSON.stringify(data));
  525. delay(function() {
  526. $.ajax({
  527. type: "post",
  528. url: base_api,
  529. async: true,
  530. data: data,
  531. dataType: 'json',
  532. success: (res_data) => {
  533. ZZLog(res_data);
  534. if(res_data['code'] != "0") {
  535. ZZAlertInfo(res_data['info']);
  536. } else {
  537. var log_list = res_data['result'];
  538. var log_html = '';
  539. var _room_name = '';
  540. log_list = log_list.reverse();
  541. log_list.forEach((v, i) => {
  542. log_html += `<tr height="40px">
  543. <td>${v.true_name}</td>
  544. <td>${v.create_time}</td>
  545. <td>${v.log_desc.replace(/\;/g,'<br/>')}</td>
  546. </tr>`;
  547. })
  548. $('#log-table').html(log_html);
  549. closeLoading();
  550. }
  551. },
  552. error: () => {
  553. ZZAlertInfo(infoApiError);
  554. }
  555. });
  556. }, delayTs);
  557. }
  558. //确认单
  559. $('#top-btn-ok-d').on('click', function() {
  560. window.location.href = base_api + "?type=order_HotelOrderDetailLevel&op=export&order_id=" + order_id;
  561. })
  562. //修改单
  563. $('#top-btn-update-d').on('click', function() {
  564. window.location.href = base_api + "?type=order_HotelOrderDetailLevel&op=export&order_id=" + order_id;
  565. })
  566. //取消单
  567. $('#top-btn-cancel-d').on('click', function() {
  568. window.location.href = base_api + "?type=order_HotelOrderDetailLevel&op=export&order_id=" + order_id;
  569. })
  570. //入住时间
  571. $('#start_date').on('changeDate', function(e) {
  572. changeStartEndDate()
  573. })
  574. //离店时间
  575. $('#end_date').on('changeDate', function(e) {
  576. changeStartEndDate();
  577. })
  578. function changeStartEndDate() {
  579. var start_date = $('#start_date').children().eq(0).val();
  580. var end_date = $('#end_date').children().eq(0).val();
  581. var days = DateDiff(start_date,end_date);
  582. $('#datediff').html(`共${days}晚`);
  583. var hotel_id = $('#rz-hotel-name').attr('data-hotel-id');
  584. var room_type = $('#rz-hotel-room').attr('data-room-type');
  585. var base_room_type = $('#rz-hotel-room').attr('data-base-room-type');
  586. var org_id = $('#order_channel').val();
  587. var data = {
  588. "type": "order_ModifyHTOrderLevel",
  589. "op": "stockGetList",
  590. start_date,
  591. end_date,
  592. hotel_id,
  593. room_type,
  594. org_id,
  595. "parent_room_type": base_room_type
  596. }
  597. ZZLog(JSON.stringify(data));
  598. loading();
  599. delay(function() {
  600. $.ajax({
  601. type: "post",
  602. url: base_api,
  603. async: true,
  604. data: data,
  605. dataType: "json",
  606. success: (res_data) => {
  607. ZZLog(res_data);
  608. if(res_data['code'] != "0") {
  609. ZZAlertInfo(res_data['info'], function() {
  610. closeLoading();
  611. });
  612. } else {
  613. loadStockHtml(res_data);
  614. closeLoading();
  615. }
  616. },
  617. error: () => {
  618. ZZAlertInfo(infoApiError, function() {
  619. closeLoading();
  620. });
  621. }
  622. });
  623. }, delayTs);
  624. }
  625. //加载库存相差
  626. function loadStockHtml(res_data) {
  627. var price_info_list = res_data['price_info_list'];
  628. var stock_list = res_data['stock_list'];
  629. var sumHTML = '';
  630. price_info_list.forEach((v, i) => {
  631. var HTML = `<tr class="tr_line" height="45" data-json=[data-json] data-json-maiduan=[data-json-maiduan] data-json-baoliu=[data-json-baoliu] data-json-xianxun=[data-json-xianxun]>
  632. <td>[入住日期]</td>
  633. <td>
  634. <span class="update1_h hide_f room_count_txt">[间数1]</span>
  635. <select class="form-control update1_s room_count" style="width: 40px;padding:0px">
  636. [间数2]
  637. </select>
  638. </td>
  639. <td>
  640. <span class="update2_s sale_single_price_txt">[销售单价]</span>
  641. <input data-price="[销售单价]" type="text" class="form-control hide_f update2_h sale_single_price" style="width: 80px;" value="[销售单价]">
  642. </td>
  643. <td>
  644. <span class="update3_s cai_base_price_txt">[采购成本价]</span>
  645. <input data-price="[采购成本价]" type="text" class="form-control hide_f update3_h cai_base_price" style="width: 80px;" value="[采购成本价]">
  646. </td>
  647. <td class="tr_all_price">[销售总价]</td>
  648. <td class="tr_all_commission" data-commission=[渠道佣金]>[渠道佣金]</td>
  649. <td class="tr_profit_value">[利润]</td>
  650. </tr>`;
  651. HTML = HTML.replace('[入住日期]', v['run_date']);
  652. //得到替换数量,逻辑:先判断超售oversell_flag,1为可以超售,如果可以超售则取data['order_list'][1]中的该天所有库存,超了不能下单。
  653. var count = 0;
  654. if(1 == v['oversell_flag'] && -1 != v['remaining_count']) {
  655. stock_list.forEach((v2, i2) => {
  656. if(v['run_date'] == v2['run_date']) {
  657. count += parseInt(v2['remaining_count']);
  658. if("228" == v2['stock_type']) { //买断
  659. HTML = HTML.replace('[data-json-maiduan]', JSON.stringify(v2));
  660. } else if("229" == v2['stock_type']) { //现询
  661. HTML = HTML.replace('[data-json-xianxun]', JSON.stringify(v2));
  662. } else if("230" == v2["stock_type"]) { //保留
  663. HTML = HTML.replace('[data-json-baoliu]', JSON.stringify(v2));
  664. } else {
  665. ZZAlertInfo('没有该库存类型');
  666. }
  667. }
  668. })
  669. } else {
  670. stock_list.forEach((v2, i2) => {
  671. if(v['run_date'] == v2['run_date']) {
  672. if("228" == v2['stock_type']) { //买断
  673. count += parseInt(v2['remaining_count']);
  674. HTML = HTML.replace('[data-json-maiduan]', JSON.stringify(v2));
  675. } else if("229" == v2['stock_type']) { //现询
  676. HTML = HTML.replace('[data-json-xianxun]', JSON.stringify(v2));
  677. } else if("230" == v2["stock_type"]) { //保留
  678. count += parseInt(v2['remaining_count']);
  679. HTML = HTML.replace('[data-json-baoliu]', JSON.stringify(v2));
  680. } else {
  681. ZZAlertInfo('没有该库存类型');
  682. }
  683. }
  684. })
  685. count = parseInt(v['remaining_count'] == -1 ? 0 : v['remaining_count']);
  686. }
  687. var optionHTML = '';
  688. for(var m = 0; m <= count; m++) {
  689. if(m > 20) break;
  690. var temp = `<option value="${m}">${m}</option>`;
  691. optionHTML += temp;
  692. }
  693. HTML = HTML.replace('[间数2]', optionHTML);
  694. HTML = HTML.replace(/\[销售单价]/g, v['price']);
  695. HTML = HTML.replace(/\[采购成本价]/g, v['price']);
  696. //佣金规则
  697. var ling = 0;
  698. var ling1 = ling.toFixed(2);
  699. if(0 == v['commission_flag']) { //为0不返佣 为1返佣
  700. HTML = HTML.replace(/\[渠道佣金]/g, '-');
  701. } else {
  702. HTML = HTML.replace(/\[渠道佣金]/g, ling1);
  703. }
  704. HTML = HTML.replace('[销售总价]', ling1);
  705. HTML = HTML.replace('[利润]', ling1);
  706. //将非超卖库存存入data-json
  707. HTML = HTML.replace('[data-json]', JSON.stringify(v));
  708. sumHTML += HTML;
  709. })
  710. sumHTML += temp_all_html;
  711. $('#rz-table').html(sumHTML);
  712. $('.room_count').on('change', function() {
  713. $parent = $(this).closest('.tr_line');
  714. changeCount($parent);
  715. })
  716. $('.sale_single_price').on('input', function() {
  717. $parent = $(this).closest('tr');
  718. changeCount($parent);
  719. })
  720. $('.sale_single_price').on('blur', function() {
  721. var val = $(this).val();
  722. val = val.trim() == "" ? "0" : val.trim();
  723. $(this).val(val);
  724. $(this).closest('td').find('.sale_single_price_txt').text(val);
  725. })
  726. var hotel_child_order_detail = {};
  727. if(cache_res_data.hasOwnProperty(order_id)) {
  728. hotel_child_order_detail = cache_res_data[order_id]['hotel_child_order_detail'];
  729. $('#rz-table .tr_line').each(function(index, dom) {
  730. for(var n = 0; n < hotel_child_order_detail.length; n++) {
  731. if(hotel_child_order_detail[n]['run_date'] == $(dom).find('td:first').text()) {
  732. var dict = hotel_child_order_detail[n];
  733. $(dom).find('.room_count').val(dict['total']); //间数
  734. $(dom).find('.sale_single_price_txt').text(dict['order_single_price']); //销售单价
  735. $(dom).find('.sale_single_price').attr('data-price', dict['order_single_price']);
  736. $(dom).find('.sale_single_price').attr('value', dict['order_single_price']);
  737. $(dom).find('.cai_base_price_txt').text(dict['base_price']); //采购成本价
  738. $(dom).find('.cai_base_price').attr('data-price', dict['base_price']);
  739. $(dom).find('.cai_base_price').attr('value', dict['base_price']);
  740. $(dom).find('.tr_all_price').html(dict['all_price']); //销售总价
  741. $(dom).find('.tr_profit_value').text(dict['benefit']); //利润
  742. //根据不同类型,选择不同库存
  743. var json_type = '';
  744. if("228" == dict['stock_type']) json_type = "data-json-maiduan";
  745. if("229" == dict['stock_type']) json_type = "data-json-xianxun";
  746. if("230" == dict['stock_type']) json_type = "data-json-baoliu";
  747. var tr_json_data = $(dom).attr(json_type);
  748. if(tr_json_data != '' && tr_json_data.indexOf('[data-json') == -1) {
  749. var tmp_data = JSON.parse(tr_json_data);
  750. tmp_data['remaining_count'] = parseInt(tmp_data['remaining_count']) + parseInt(dict['total']);
  751. var json_str = JSON.stringify(tmp_data);
  752. $(dom).attr(json_type, json_str);
  753. }
  754. var count = parseInt($(dom).find('.room_count option:last').html());
  755. var new_count = count + parseInt(dict['total']);
  756. for(var i = count + 1; i <= new_count && i < 20; i++) {
  757. $(dom).find('.room_count option:last').after('<option value="' + i + '">' + i + '</option>');
  758. }
  759. $(dom).find('.room_count').val(dict['total']).change();
  760. }
  761. }
  762. })
  763. }
  764. //刷新总计
  765. total_price_jisuan();
  766. }
  767. /*修改销售价*/
  768. function changeStartEndDateXSJ() {
  769. var start_date = $('#start_date').children().eq(0).val();
  770. var end_date = $('#end_date').children().eq(0).val();
  771. var days = DateDiff(start_date,end_date);
  772. $('#datediff').html(`共${days}晚`);
  773. var hotel_id = $('#rz-hotel-name').attr('data-hotel-id');
  774. var room_type = $('#rz-hotel-room').attr('data-room-type');
  775. var base_room_type = $('#rz-hotel-room').attr('data-base-room-type');
  776. var org_id = $('#order_channel').val();
  777. var data = {
  778. "type": "order_ModifyHTOrderLevel",
  779. "op": "stockGetList",
  780. start_date,
  781. end_date,
  782. hotel_id,
  783. room_type,
  784. org_id,
  785. "parent_room_type": base_room_type
  786. }
  787. ZZLog(JSON.stringify(data));
  788. loading();
  789. delay(function() {
  790. $.ajax({
  791. type: "post",
  792. url: base_api,
  793. async: true,
  794. data: data,
  795. dataType: "json",
  796. success: (res_data) => {
  797. ZZLog(res_data);
  798. if(res_data['code'] != "0") {
  799. ZZAlertInfo(res_data['info'], function() {
  800. closeLoading();
  801. });
  802. } else {
  803. loadStockHtmlXSJ(res_data);
  804. closeLoading();
  805. }
  806. },
  807. error: () => {
  808. ZZAlertInfo(infoApiError, function() {
  809. closeLoading();
  810. });
  811. }
  812. });
  813. }, delayTs);
  814. }
  815. //计算天数差的函数,通用
  816. function DateDiff(sDate1, sDate2){ //sDate1和sDate2是2002-12-18格式
  817. var aDate, oDate1, oDate2, iDays
  818. aDate = sDate1.split("-")
  819. oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]) //转换为12-18-2002格式
  820. aDate = sDate2.split("-")
  821. oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])
  822. iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 /24) //把相差的毫秒数转换为天数
  823. return iDays
  824. }
  825. //加载库存相差
  826. function loadStockHtmlXSJ(res_data) {
  827. var price_info_list = res_data['price_info_list'];
  828. var stock_list = res_data['stock_list'];
  829. var sumHTML = '';
  830. price_info_list.forEach((v, i) => {
  831. var HTML = `<tr class="tr_line" height="45" data-json=[data-json] data-json-maiduan=[data-json-maiduan] data-json-baoliu=[data-json-baoliu] data-json-xianxun=[data-json-xianxun]>
  832. <td>[入住日期]</td>
  833. <td>
  834. <span class="update1_h room_count_txt">[间数1]</span>
  835. <select class="form-control hide_f update1_s room_count" style="width: 40px;padding:0px">
  836. [间数2]
  837. </select>
  838. </td>
  839. <td>
  840. <span class="update2_s hide_f sale_single_price_txt">[销售单价]</span>
  841. <input data-price="[销售单价]" type="text" class="form-control update2_h sale_single_price" style="width: 80px;" value="[销售单价]">
  842. </td>
  843. <td>
  844. <span class="update3_s cai_base_price_txt">[采购成本价]</span>
  845. <input data-price="[采购成本价]" type="text" class="form-control hide_f update3_h cai_base_price" style="width: 80px;" value="[采购成本价]">
  846. </td>
  847. <td class="tr_all_price">[销售总价]</td>
  848. <td class="tr_all_commission" data-commission=[渠道佣金]>[渠道佣金]</td>
  849. <td class="tr_profit_value">[利润]</td>
  850. </tr>`;
  851. HTML = HTML.replace('[入住日期]', v['run_date']);
  852. //得到替换数量,逻辑:先判断超售oversell_flag,1为可以超售,如果可以超售则取data['order_list'][1]中的该天所有库存,超了不能下单。
  853. var count = 0;
  854. if(1 == v['oversell_flag'] && -1 != v['remaining_count']) {
  855. stock_list.forEach((v2, i2) => {
  856. if(v['run_date'] == v2['run_date']) {
  857. count += parseInt(v2['remaining_count']);
  858. if("228" == v2['stock_type']) { //买断
  859. HTML = HTML.replace('[data-json-maiduan]', JSON.stringify(v2));
  860. } else if("229" == v2['stock_type']) { //现询
  861. HTML = HTML.replace('[data-json-xianxun]', JSON.stringify(v2));
  862. } else if("230" == v2["stock_type"]) { //保留
  863. HTML = HTML.replace('[data-json-baoliu]', JSON.stringify(v2));
  864. } else {
  865. ZZAlertInfo('没有该库存类型');
  866. }
  867. }
  868. })
  869. } else {
  870. stock_list.forEach((v2, i2) => {
  871. if(v['run_date'] == v2['run_date']) {
  872. if("228" == v2['stock_type']) { //买断
  873. count += parseInt(v2['remaining_count']);
  874. HTML = HTML.replace('[data-json-maiduan]', JSON.stringify(v2));
  875. } else if("229" == v2['stock_type']) { //现询
  876. HTML = HTML.replace('[data-json-xianxun]', JSON.stringify(v2));
  877. } else if("230" == v2["stock_type"]) { //保留
  878. count += parseInt(v2['remaining_count']);
  879. HTML = HTML.replace('[data-json-baoliu]', JSON.stringify(v2));
  880. } else {
  881. ZZAlertInfo('没有该库存类型');
  882. }
  883. }
  884. })
  885. count = parseInt(v['remaining_count'] == -1 ? 0 : v['remaining_count']);
  886. }
  887. var optionHTML = '';
  888. for(var m = 0; m <= count; m++) {
  889. if(m > 20) break;
  890. var temp = `<option value="${m}">${m}</option>`;
  891. optionHTML += temp;
  892. }
  893. HTML = HTML.replace('[间数2]', optionHTML);
  894. HTML = HTML.replace(/\[销售单价]/g, v['price']);
  895. HTML = HTML.replace(/\[采购成本价]/g, v['price']);
  896. //佣金规则
  897. var ling = 0;
  898. var ling1 = ling.toFixed(2);
  899. if(0 == v['commission_flag']) { //为0不返佣 为1返佣
  900. HTML = HTML.replace(/\[渠道佣金]/g, '-');
  901. } else {
  902. HTML = HTML.replace(/\[渠道佣金]/g, ling1);
  903. }
  904. HTML = HTML.replace('[销售总价]', ling1);
  905. HTML = HTML.replace('[利润]', ling1);
  906. //将非超卖库存存入data-json
  907. HTML = HTML.replace('[data-json]', JSON.stringify(v));
  908. sumHTML += HTML;
  909. })
  910. sumHTML += temp_all_html;
  911. $('#rz-table').html(sumHTML);
  912. $('.room_count').on('change', function() {
  913. $parent = $(this).closest('.tr_line');
  914. changeCount($parent);
  915. })
  916. $('.sale_single_price').on('input', function() {
  917. $parent = $(this).closest('tr');
  918. changeCount($parent);
  919. })
  920. $('.sale_single_price').on('blur', function() {
  921. var val = $(this).val();
  922. val = val.trim() == "" ? "0" : val.trim();
  923. $(this).val(val);
  924. $(this).closest('td').find('.sale_single_price_txt').text(val);
  925. })
  926. var hotel_child_order_detail = {};
  927. if(cache_res_data.hasOwnProperty(order_id)) {
  928. hotel_child_order_detail = cache_res_data[order_id]['hotel_child_order_detail'];
  929. $('#rz-table .tr_line').each(function(index, dom) {
  930. for(var n = 0; n < hotel_child_order_detail.length; n++) {
  931. if(hotel_child_order_detail[n]['run_date'] == $(dom).find('td:first').text()) {
  932. var dict = hotel_child_order_detail[n];
  933. $(dom).find('.room_count').val(dict['total']); //间数
  934. $(dom).find('.room_count_txt').html(dict['total']); //间数
  935. $(dom).find('.sale_single_price_txt').text(dict['order_single_price']); //销售单价
  936. $(dom).find('.sale_single_price').attr('data-price', dict['order_single_price']);
  937. $(dom).find('.sale_single_price').attr('value', dict['order_single_price']);
  938. $(dom).find('.cai_base_price_txt').text(dict['base_price']); //采购成本价
  939. $(dom).find('.cai_base_price').attr('data-price', dict['base_price']);
  940. $(dom).find('.cai_base_price').attr('value', dict['base_price']);
  941. $(dom).find('.tr_all_price').html(dict['all_price']); //销售总价
  942. $(dom).find('.tr_profit_value').text(dict['benefit']); //利润
  943. //根据不同类型,选择不同库存
  944. var json_type = '';
  945. if("228" == dict['stock_type']) json_type = "data-json-maiduan";
  946. if("229" == dict['stock_type']) json_type = "data-json-xianxun";
  947. if("230" == dict['stock_type']) json_type = "data-json-baoliu";
  948. var tr_json_data = $(dom).attr(json_type);
  949. if(tr_json_data != '' && tr_json_data.indexOf('[data-json') == -1) {
  950. var tmp_data = JSON.parse(tr_json_data);
  951. tmp_data['remaining_count'] = parseInt(tmp_data['remaining_count']) + parseInt(dict['total']);
  952. var json_str = JSON.stringify(tmp_data);
  953. $(dom).attr(json_type, json_str);
  954. }
  955. var count = parseInt($(dom).find('.room_count option:last').html());
  956. var new_count = count + parseInt(dict['total']);
  957. for(var i = count + 1; i <= new_count && i < 20; i++) {
  958. $(dom).find('.room_count option:last').after('<option value="' + i + '">' + i + '</option>');
  959. }
  960. $(dom).find('.room_count').val(dict['total']).change();
  961. }
  962. }
  963. })
  964. }
  965. //刷新总计
  966. total_price_jisuan();
  967. }
  968. /*修改销售价 end*/
  969. $('#btn-rz-update-xq').on('click', function() {
  970. //1:修改入住需求 2:保存并生成修改单 3:保存
  971. var btn_status = $(this).attr('data-btn-status') ? $(this).attr('data-btn-status') : "1";
  972. if('1' == btn_status) {
  973. ZZLog('修改入住需求');
  974. $('#btn-rz-cancel').attr('data-main-status', '1');
  975. $('#btn-rz-cancel').removeClass('hide_f');
  976. $('#btn-rz-update-xsj').addClass('hide_f');
  977. $('#btn-rz-update-cgj').addClass('hide_f');
  978. //切换编辑状态
  979. $('.update1_h').removeClass('hide_f');
  980. $('.update1_s').addClass('hide_f');
  981. changeStartEndDate();
  982. click_three_btn($(this));
  983. }
  984. if('2' == btn_status || "3" == btn_status) {
  985. ZZLog('保存入住需求');
  986. commit($(this));
  987. function commit($this) {
  988. //提交的参数
  989. var hotel_id = '';
  990. var room_type = '';
  991. if(cache_res_data.hasOwnProperty(order_id)) {
  992. hotel_id = cache_res_data[order_id]['order_info']['hotel_id'];
  993. room_type = cache_res_data[order_id]['order_info']['room_type'];
  994. }
  995. if('' == hotel_id || '' == room_type) {
  996. ZZAlertInfo('缺少参数,逻辑出错');
  997. return;
  998. }
  999. //获取联系人,联系方式,备注
  1000. var contacts = $('#customer_name').val().replace(/\,/g, ' ').trim();
  1001. var phone = $('#customer_phone').val();
  1002. var more = '',
  1003. total = 0;
  1004. //拒单标识0为不能拒单,1为可以拒单
  1005. var if_cancel = 0;
  1006. var cus_list = `{${contacts},${phone},${more}}`;
  1007. //最晚到店时间
  1008. var checkin_time = "23:59";
  1009. var org_num = $('#order_channel_order_id').val();
  1010. var org_id = $('#order_channel').val();
  1011. //房型列表
  1012. var room_list = '';
  1013. var room_count = 0;
  1014. var dan_yongj = 0;
  1015. var all_yongj = $('.all_commission').attr('data-value');
  1016. var all_profit = $('.all_profit').attr('data-value');
  1017. $('.tr_line').each(function(index, dom) {
  1018. var start_date = $(this).children().eq(0).text();
  1019. var all_count = $(this).find('.room_count').val();
  1020. room_count += parseInt(all_count) - 0;
  1021. if(all_count == 0) {
  1022. ZZAlertInfo('请选择库存', function() {
  1023. return;
  1024. });
  1025. }
  1026. var dan_jiesuan = $(this).find('.sale_single_price').val();
  1027. dan_yongj = 0;
  1028. if("-" == $(this).find('.tr_all_commission').text()) dan_yongj = 0;
  1029. if("-" != $(this).find('.tr_all_commission').text()) dan_yongj = parseFloat($(this).find('.tr_all_commission').text()) / parseInt(all_count);
  1030. //获得买断,保留,现询的价格与库存
  1031. var dict_maiduan = getJsonHtml($(this).attr('data-json-maiduan'));
  1032. var dict_baoliu = getJsonHtml($(this).attr('data-json-baoliu'));
  1033. var dict_xianxun = getJsonHtml($(this).attr('data-json-xianxun'));
  1034. //库存类型与成本
  1035. var maiduan_count = dict_maiduan == 0 ? 0 : dict_maiduan['remaining_count'];
  1036. var baoliu_count = dict_baoliu == 0 ? 0 : dict_baoliu['remaining_count'];
  1037. var xianxun_count = dict_xianxun == 0 ? 0 : dict_xianxun['remaining_count'];
  1038. var maiduan_price = dict_maiduan == 0 ? 0 : dict_maiduan['cost_price'];
  1039. var baoliu_price = dict_baoliu == 0 ? 0 : dict_baoliu['cost_price'];
  1040. var xianxun_price = dict_xianxun == 0 ? 0 : dict_xianxun['cost_price'];
  1041. if(maiduan_price == 0 && baoliu_price == 0 && xianxun_price == 0) {
  1042. ZZAlertInfo('存在成本价为零,请至对应房型列表确认', function() {
  1043. return;
  1044. })
  1045. // ZZAlertInfo('存在成本价为零,请至对应房型列表确认');
  1046. // return;
  1047. }
  1048. //判断库存
  1049. var maiduan_field = '';
  1050. var baoliu_field = '';
  1051. var xianxun_field = '';
  1052. var sum_field = '';
  1053. if(parseInt(all_count) <= parseInt(maiduan_count)) { //小于等于买断库存228
  1054. sum_field = '228' + ',' + all_count + ',' + maiduan_price
  1055. } else if(parseInt(all_count) > parseInt(maiduan_count) && parseInt(all_count) <= (parseInt(maiduan_count) + parseInt(baoliu_count))) {
  1056. maiduan_field = '228' + ',' + maiduan_count + ',' + maiduan_price;
  1057. baoliu_field = '230' + ',' + (all_count - maiduan_count) + ',' + baoliu_price;
  1058. sum_field = maiduan_field + '|' + baoliu_field
  1059. } else if(parseInt(all_count) > (parseInt(maiduan_count) + parseInt(baoliu_count)) && parseInt(all_count) <= (parseInt(maiduan_count) + parseInt(baoliu_count) + parseInt(xianxun_count))) {
  1060. if_cancel = 1;
  1061. maiduan_field = '228' + ',' + maiduan_count + ',' + maiduan_price;
  1062. baoliu_field = '230' + ',' + baoliu_count + ',' + baoliu_price;
  1063. xianxun_field = '229' + ',' + (all_count - baoliu_count - maiduan_count) + ',' + xianxun_price;
  1064. sum_field = maiduan_field + '|' + baoliu_field + '|' + xianxun_field
  1065. } else {
  1066. // alert('出错了,不可能!!');
  1067. // return;
  1068. }
  1069. room_list += '{\'\'' + start_date + '\'\',' + all_count + ',' + dan_jiesuan + ',' + dan_yongj + '}';
  1070. total += all_count;
  1071. })
  1072. var start_date = $('#start_date').children().eq(0).val();
  1073. var end_date = $('#end_date').children().eq(0).val();
  1074. var data = {
  1075. // type: "order_ModifyHTOrder",
  1076. // op: "modify_order",
  1077. type: "order_ModifyHTOrderLevel",
  1078. op: "orderUpdateCheckIn",
  1079. hotel_id: hotel_id,
  1080. room_type: room_type,
  1081. org_id: org_id,
  1082. org_num: org_num,
  1083. room_list: room_list,
  1084. room_count: room_count,
  1085. cus_list: cus_list,
  1086. contact: contacts,
  1087. mobile: phone,
  1088. start_date: start_date,
  1089. end_date: end_date,
  1090. // memo: more,
  1091. // total: total,//这两个参数 php没有接收
  1092. checkin_time: checkin_time,
  1093. if_cancel: if_cancel,
  1094. order_id: order_id,
  1095. total_commission: all_yongj,
  1096. benefit: all_profit
  1097. }
  1098. ZZLog(JSON.stringify(data));
  1099. loading();
  1100. $.ajax({
  1101. type: "post",
  1102. url: base_api,
  1103. async: true,
  1104. data: data,
  1105. dataType: "json",
  1106. success: (res_data) => {
  1107. ZZLog(res_data);
  1108. if(res_data['code'] != "0") {
  1109. ZZAlertInfo(res_data['info'], function() {
  1110. closeLoading();
  1111. });
  1112. } else {
  1113. //在这里写保存的操作
  1114. $('#btn-rz-cancel').addClass('hide_f');
  1115. $('#btn-rz-update-xsj').removeClass('hide_f');
  1116. $('#btn-rz-update-cgj').removeClass('hide_f');
  1117. //浏览状态
  1118. $('.update1_h').addClass('hide_f');
  1119. $('.update1_s').removeClass('hide_f');
  1120. $('#btn-rz-update-xq').attr('data-btn-status', '1');
  1121. $('#btn-rz-update-xq').html('修改入住需求');
  1122. httpLoadInfo();
  1123. }
  1124. },
  1125. error: () => {
  1126. ZZAlertInfo(infoApiError, function() {
  1127. closeLoading();
  1128. });
  1129. }
  1130. });
  1131. }
  1132. }
  1133. })
  1134. //修改销售价
  1135. $('#btn-rz-update-xsj').on('click', function() {
  1136. //1:修改销售价 2:保存销售价
  1137. var btn_status = $(this).attr('data-btn-status') ? $(this).attr('data-btn-status') : "1";
  1138. if('1' == btn_status) {
  1139. ZZLog('修改销售价');
  1140. $('#btn-rz-cancel').attr('data-main-status', '2');
  1141. $('#btn-rz-cancel').removeClass('hide_f');
  1142. $('#btn-rz-update-xq').addClass('hide_f');
  1143. $('#btn-rz-update-cgj').addClass('hide_f');
  1144. $(this).attr('data-btn-status', '2');
  1145. $(this).html(save_info);
  1146. //切换编辑状态
  1147. $('.update2_h').removeClass('hide_f');
  1148. $('.update2_s').addClass('hide_f');
  1149. changeStartEndDateXSJ();
  1150. }
  1151. if('2' == btn_status) {
  1152. ZZLog('保存销售价');
  1153. //在这里写保存的操作
  1154. $('#btn-rz-cancel').addClass('hide_f');
  1155. $('#btn-rz-update-xq').removeClass('hide_f');
  1156. $('#btn-rz-update-cgj').removeClass('hide_f');
  1157. $(this).attr('data-btn-status', '1');
  1158. $(this).html('修改销售价');
  1159. //浏览状态
  1160. $('.update2_h').addClass('hide_f');
  1161. $('.update2_s').removeClass('hide_f');
  1162. var room_list = [];
  1163. $('.tr_line').each(function(index, dom) {
  1164. var run_date = $(this).children().eq(0).text();
  1165. var old = $(this).find('.sale_single_price').attr('data-price');
  1166. var sale_single_price = $(this).find('.sale_single_price').val();
  1167. // if(old != sale_single_price) {
  1168. var obj = {
  1169. run_date,
  1170. "order_price": sale_single_price
  1171. };
  1172. room_list.push(obj);
  1173. // }
  1174. })
  1175. commitP();
  1176. function commitP() {
  1177. var data = {
  1178. type: "order_ModifyHTOrderLevel",
  1179. op: "orderUpdateXSJ",
  1180. order_id,
  1181. room_list: JSON.stringify(room_list)
  1182. }
  1183. ZZLog(JSON.stringify(data));
  1184. $.ajax({
  1185. type: "post",
  1186. url: base_api,
  1187. async: true,
  1188. data: data,
  1189. dataType: "json",
  1190. success: (res_data) => {
  1191. ZZLog(res_data);
  1192. if(res_data['code'] != "0") {
  1193. ZZAlertInfo(res_data['info']);
  1194. } else {
  1195. httpLoadInfo();
  1196. }
  1197. },
  1198. error: () => {
  1199. ZZAlertInfo(infoApiError);
  1200. }
  1201. });
  1202. }
  1203. }
  1204. })
  1205. //修改采购价
  1206. $('#btn-rz-update-cgj').on('click', function() {
  1207. //1:修改采购价 2:保存并生成修改单 3:保存采购价
  1208. var btn_status = $(this).attr('data-btn-status') ? $(this).attr('data-btn-status') : "1";
  1209. if('1' == btn_status) {
  1210. ZZLog('修改采购价');
  1211. $('#btn-rz-cancel').attr('data-main-status', '3');
  1212. $('#btn-rz-cancel').removeClass('hide_f');
  1213. $('#btn-rz-update-xq').addClass('hide_f');
  1214. $('#btn-rz-update-xsj').addClass('hide_f');
  1215. //切换编辑状态
  1216. $('.update3_h').removeClass('hide_f');
  1217. $('.update3_s').addClass('hide_f');
  1218. click_three_btn($(this));
  1219. }
  1220. if('2' == btn_status || "3" == btn_status) {
  1221. ZZLog('保存采购价');
  1222. //在这里写保存的操作
  1223. $('#btn-rz-cancel').addClass('hide_f');
  1224. $('#btn-rz-update-xq').removeClass('hide_f');
  1225. $('#btn-rz-update-xsj').removeClass('hide_f');
  1226. $(this).attr('data-btn-status', '1');
  1227. $(this).html('修改采购价');
  1228. //浏览状态
  1229. $('.update3_h').addClass('hide_f');
  1230. $('.update3_s').removeClass('hide_f');
  1231. var cus_list = [];
  1232. $('.tr_line').each(function(index, dom) {
  1233. var run_date = $(this).children().eq(0).text();
  1234. var old = $(this).find('.cai_base_price').attr('data-price');
  1235. var base_price = $(this).find('.cai_base_price').val();
  1236. if(old != base_price) {
  1237. var obj = {
  1238. run_date,
  1239. "base_price": base_price
  1240. };
  1241. cus_list.push(obj);
  1242. }
  1243. })
  1244. commitP();
  1245. function commitP() {
  1246. var data = {
  1247. type: "order_ModifyHTOrderLevel",
  1248. op: "orderUpdateCGJ",
  1249. order_id,
  1250. cus_list: JSON.stringify(cus_list)
  1251. }
  1252. ZZLog(JSON.stringify(data));
  1253. $.ajax({
  1254. type: "post",
  1255. url: base_api,
  1256. async: true,
  1257. data: data,
  1258. dataType: "json",
  1259. success: (res_data) => {
  1260. ZZLog(res_data);
  1261. if(res_data['code'] != "0") {
  1262. ZZAlertInfo(res_data['info']);
  1263. } else {
  1264. httpLoadInfo();
  1265. }
  1266. },
  1267. error: () => {
  1268. ZZAlertInfo(infoApiError);
  1269. }
  1270. });
  1271. }
  1272. }
  1273. })
  1274. //入住需求取消
  1275. $('#btn-rz-cancel').on('click', function() {
  1276. //data-main-status 1:修改入住需求 2:修改销售价 3:修改采购价
  1277. var btn_main_status = $(this).attr('data-main-status') ? $(this).attr('data-main-status') : "1";
  1278. if('1' == btn_main_status) {
  1279. //修改入住需求
  1280. ZZLog('入住需求取消-修改入住需求');
  1281. $('#btn-rz-update-xq').html('修改入住需求');
  1282. $('#btn-rz-update-xq').attr('data-btn-status', '1');
  1283. }
  1284. if('2' == btn_main_status) {
  1285. //修改销售价
  1286. ZZLog('入住需求取消-修改销售价');
  1287. $('#btn-rz-update-xsj').html('修改销售价');
  1288. $('#btn-rz-update-xsj').attr('data-btn-status', '1');
  1289. }
  1290. if('3' == btn_main_status) {
  1291. //修改采购价
  1292. ZZLog('入住需求取消-修改采购价');
  1293. $('#btn-rz-update-cgj').html('修改采购价');
  1294. $('#btn-rz-update-cgj').attr('data-btn-status', '1');
  1295. }
  1296. $(this).addClass('hide_f');
  1297. $('#btn-rz-update-xq').removeClass('hide_f');
  1298. $('#btn-rz-update-xsj').removeClass('hide_f');
  1299. $('#btn-rz-update-cgj').removeClass('hide_f');
  1300. $('.update1_s').removeClass('hide_f');
  1301. $('.update1_h').addClass('hide_f');
  1302. $('.update2_s').removeClass('hide_f');
  1303. $('.update2_h').addClass('hide_f');
  1304. $('.update3_s').removeClass('hide_f');
  1305. $('.update3_h').addClass('hide_f');
  1306. if(cache_res_data.hasOwnProperty(order_id)) {
  1307. loadHtml(cache_res_data[order_id]);
  1308. }
  1309. })
  1310. //客人修改
  1311. $('#btn-customer-update').on('click', function() {
  1312. //1:客人信息修改 2:保存并生成修改单 3:保存
  1313. ZZLog('客人信息修改');
  1314. var btn_status = $(this).attr('data-btn-status') ? $(this).attr('data-btn-status') : "1";
  1315. if('1' == btn_status) {
  1316. $('#btn-customer-cancel').removeClass('hide_f');
  1317. click_customer_update1($(this));
  1318. $('.update4_h').removeClass('hide_f');
  1319. $('.update4_s').addClass('hide_f');
  1320. if($('#customer_phone').val()=='-')$('#customer_phone').val('');
  1321. $('#customer_name').removeClass('readonly');
  1322. $('#customer_name').removeAttr('readonly');
  1323. $('#customer_phone').removeClass('readonly');
  1324. $('#customer_phone').removeAttr('readonly');
  1325. }
  1326. if('2' == btn_status || '3' == btn_status) {
  1327. var customer_name = $('#customer_name').val().trim();
  1328. var customer_mobile = $('#customer_phone').val().trim();
  1329. var old_customer_name = $('#customer_name').attr('data-old');
  1330. var old_customer_mobile = $('#customer_phone').attr('data-old');
  1331. if(old_customer_name == customer_name && old_customer_mobile == customer_mobile) {
  1332. return;
  1333. }
  1334. customer_name = customer_name.trim();
  1335. if(""==customer_name){
  1336. ZZAlertInfo('请填写客人姓名!');
  1337. return;
  1338. }
  1339. var data = {
  1340. type: "order_ModifyHTOrderLevel",
  1341. op: "customerUpdate",
  1342. order_id,
  1343. customer_name,
  1344. customer_mobile
  1345. }
  1346. ZZLog(JSON.stringify(data));
  1347. $.ajax({
  1348. type: "post",
  1349. url: base_api,
  1350. async: true,
  1351. data: data,
  1352. dataType: 'json',
  1353. success: (res_data) => {
  1354. ZZLog(res_data);
  1355. if(res_data['code'] != "0") {
  1356. ZZAlertInfo(res_data['info']);
  1357. } else {
  1358. customer_cancel_css();
  1359. httpLoadInfo();
  1360. }
  1361. },
  1362. error: () => {
  1363. ZZAlertInfo(infoApiError);
  1364. }
  1365. });
  1366. }
  1367. })
  1368. function click_customer_update1($this) {
  1369. var btn_status = '';
  1370. var btn_info = '';
  1371. if($.inArray(temp_order_status, status_arr1) >= 0) {
  1372. btn_status = '3';
  1373. btn_info = save_info;
  1374. }
  1375. if($.inArray(temp_order_status, status_arr2) >= 0) {
  1376. btn_status = '2';
  1377. btn_info = save_update_info;
  1378. }
  1379. // //1.录单
  1380. // if("557" == temp_docking_type) {
  1381. // }
  1382. // //2.直连
  1383. // if("556" == temp_docking_type) {
  1384. // }
  1385. $this.attr('data-btn-status', btn_status);
  1386. $this.html(btn_info);
  1387. }
  1388. //客人取消
  1389. $('#btn-customer-cancel').on('click', function() {
  1390. ZZLog('客人信息取消');
  1391. customer_cancel_css();
  1392. if(cache_res_data.hasOwnProperty(order_id)) loadHtml(cache_res_data[order_id]);
  1393. })
  1394. $('.comment-type').on('click', function() {
  1395. $('.comment-type0').removeClass('comment_selected');
  1396. $('.comment-type1').removeClass('comment_selected');
  1397. $(this).addClass('comment_selected');
  1398. if($(this).hasClass('comment-type0')) {
  1399. //内部备注
  1400. $(this).removeClass('btn-secondary');
  1401. $(this).addClass('btn-default');
  1402. $('#btn-order-remark-save-update-d').html('保存');
  1403. $('.comment-type1').removeClass('btn-default');
  1404. $('.comment-type1').addClass('btn-secondary');
  1405. }
  1406. if($(this).hasClass('comment-type1')) {
  1407. //公共备注
  1408. $(this).removeClass('btn-secondary');
  1409. $(this).addClass('btn-default');
  1410. var btn_info = '';
  1411. if($.inArray(temp_order_status, status_arr1) >= 0) btn_info = save_info;
  1412. if($.inArray(temp_order_status, status_arr2) >= 0) btn_info = save_update_info;
  1413. $('#btn-order-remark-save-update-d').html(btn_info);
  1414. // $('#btn-order-remark-save-update-d').html('保存并生成修改单');
  1415. $('.comment-type0').removeClass('btn-default');
  1416. $('.comment-type0').addClass('btn-secondary');
  1417. }
  1418. })
  1419. //备注保存并生成修改单
  1420. $('#btn-order-remark-save-update-d').on('click', function() {
  1421. ZZLog('备注保存并生成修改单');
  1422. var comment_type = $('.comment_selected').attr('data-value');
  1423. var comment_txt = $('#comment-txt').val();
  1424. var data = {
  1425. type: "order_ModifyHTOrderLevel",
  1426. op: "commentAdd",
  1427. order_id,
  1428. comment_type,
  1429. comment_txt
  1430. }
  1431. ZZLog(JSON.stringify(data));
  1432. $.ajax({
  1433. type: "post",
  1434. url: base_api,
  1435. async: true,
  1436. data: data,
  1437. dataType: "json",
  1438. success: (res_data) => {
  1439. ZZLog(res_data);
  1440. if(res_data['code'] != "0") {
  1441. ZZAlertInfo(res_data['info']);
  1442. } else {
  1443. $('#comment-txt').val('');
  1444. $('#comment-type').val('0');
  1445. httpLoadInfo();
  1446. }
  1447. },
  1448. error: () => {
  1449. ZZAlertInfo(infoApiError);
  1450. }
  1451. });
  1452. })
  1453. //客人取消
  1454. function customer_cancel_css() {
  1455. $('#btn-customer-cancel').addClass('hide_f');
  1456. $('#btn-customer-update').attr('data-btn-status', '1');
  1457. $('#btn-customer-update').html('修改');
  1458. // $('.update4_h').addClass('hide_f');
  1459. // $('.update4_s').removeClass('hide_f');
  1460. $('#customer_name').addClass('readonly');
  1461. $('#customer_name').attr('readonly','readonly');
  1462. $('#customer_phone').addClass('readonly');
  1463. $('#customer_phone').attr('readonly','readonly');
  1464. }
  1465. //时间戳转换函数
  1466. function getLocalTime(nS) {
  1467. return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/, ' ');
  1468. }
  1469. //取出html存入的json
  1470. function getJsonHtml(data) {
  1471. if(data && data.indexOf('[') == -1) {
  1472. var data_info = JSON.parse(data);
  1473. return data_info;
  1474. } else {
  1475. return 0
  1476. }
  1477. }
  1478. //制保留2位小数,如:2,会在2后面补上00.即2.00
  1479. function toDecimal2(x) {
  1480. var f = parseFloat(x);
  1481. if(isNaN(f)) {
  1482. return false;
  1483. }
  1484. var f = Math.round(x * 100) / 100;
  1485. var s = f.toString();
  1486. var rs = s.indexOf('.');
  1487. if(rs < 0) {
  1488. rs = s.length;
  1489. s += '.';
  1490. }
  1491. while(s.length <= rs + 2) {
  1492. s += '0';
  1493. }
  1494. return s;
  1495. }
  1496. function click_three_btn($this) {
  1497. var btn_status = '';
  1498. var btn_info = '';
  1499. if($.inArray(temp_order_status, status_arr1) >= 0) {
  1500. btn_status = '3';
  1501. btn_info = save_info;
  1502. }
  1503. if($.inArray(temp_order_status, status_arr2) >= 0) {
  1504. btn_status = '2';
  1505. btn_info = save_update_info;
  1506. }
  1507. $this.attr('data-btn-status', btn_status);
  1508. $this.html(btn_info);
  1509. }