OpAirTicketRes.vue 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150
  1. <template>
  2. <div class="car_add">
  3. <div>
  4. <div class="communal-title">
  5. <div>{{ title }}</div>
  6. </div>
  7. </div>
  8. <div style="display: flex;">
  9. <div style="text-align:left;font-size: 17px;font-weight: 600;color: #555;">
  10. 团组成本预算 - 机票的预算:
  11. </div>
  12. <div style="margin-left:20px;color: #555;" v-if="airGroupCostParameter != null">
  13. 经济舱: {{ airGroupCostParameter.jjccb }}元/人 {{ airGroupCostParameter.jjcrs }}人
  14. 共:{{ airGroupCostParameter.jjccb * airGroupCostParameter.jjcrs
  15. }}元&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  16. 公务舱: {{ airGroupCostParameter.gwccb }}元/人 {{ airGroupCostParameter.gwcrs }}人
  17. 共:{{ airGroupCostParameter.gwccb * airGroupCostParameter.gwcrs
  18. }}元&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  19. </div>
  20. <div style="margin-left:20px;" v-else>
  21. 团组成本暂未开放此团数据!
  22. </div>
  23. </div>
  24. <hr style='background-color:#5555; height:1px; border:none;' />
  25. <div>
  26. <el-form :model="delegationInfo" label-width="100px" class="demo-ruleForm">
  27. <div style="display: flex;">
  28. <div style="width: 25%;">
  29. <el-form-item label="团组名称:" label-width="160px">
  30. <el-select v-model="DiIdSelect" clearable filterable placeholder="团组选择"
  31. @change="AirTicketResChange" :disabled="isShow" style="width: 100%;">
  32. <el-option v-for="item in AirTicketResSelectData" :key="item.id" :label="item.groupName"
  33. :value="item.id">
  34. </el-option>
  35. </el-select>
  36. </el-form-item>
  37. </div>
  38. <div style="width: 25%;">
  39. <el-form-item label="团 号:" prop="tourCode" label-width="160px">
  40. <el-input placeholder="团号" v-model="delegationInfo.tourCode" :disabled="true">
  41. </el-input>
  42. </el-form-item>
  43. </div>
  44. <div style="width: 25%;">
  45. <el-form-item label="客户:" prop="clientName" label-width="160px">
  46. <el-input placeholder="客户" v-model="delegationInfo.clientName" :disabled="true">
  47. </el-input>
  48. </el-form-item>
  49. </div>
  50. </div>
  51. <div style="display: flex;">
  52. <div style="width: 25%;">
  53. <el-form-item label="出访国家:" prop="visitCountry" label-width="160px">
  54. <el-input placeholder="出访国家" v-model="delegationInfo.visitCountry" :disabled="true">
  55. </el-input>
  56. </el-form-item>
  57. </div>
  58. </div>
  59. </el-form>
  60. <el-form :model="airTicketResOpData" :rules="airTicketResRules" ref="airTicketResOpData" label-width="100px"
  61. class="demo-ruleForm">
  62. <div style="display: flex;">
  63. <div style="width: 25%;">
  64. <el-form-item label="舱类型:" label-width="160px" prop="cType">
  65. <el-select v-model="airTicketResOpData.cType" placeholder="舱类型" style="width: 100%;"
  66. @change="tankTypeChange">
  67. <el-option v-for="item in ticketClass" :key="item.id" :label="item.name" :value="item.id">
  68. </el-option>
  69. </el-select>
  70. </el-form-item>
  71. </div>
  72. <div style="width: 25%;display: flex;">
  73. <div style="width: 72%;">
  74. <el-form-item label="机票单价:" prop="prePrice" label-width="160px">
  75. <el-input placeholder="机票单价" v-model="airTicketResOpData.prePrice" @input="peiceinput">
  76. </el-input>
  77. </el-form-item>
  78. </div>
  79. <div style="width: 28%;">
  80. <el-form-item prop="preCurrency" label-width="5px">
  81. <el-select v-model="airTicketResOpData.preCurrency" @change="currencyChange"
  82. placeholder="币种">
  83. <el-option v-for="item in rateList" :key="item.currencyId" :label="item.currencyCode"
  84. :value="item.currencyId"></el-option>
  85. </el-select>
  86. </el-form-item>
  87. </div>
  88. </div>
  89. <div style="width: 25%;">
  90. <el-form-item label="机票总价:" prop="price" label-width="160px">
  91. <el-input placeholder="机票总价" v-model="airTicketResOpData.price" style="width: 58%;"
  92. :disabled="true">
  93. </el-input>
  94. <el-select v-model="airTicketResOpData.currency" style="width: 40%;" :disabled="true">
  95. <el-option v-for="item in rateList" :key="item.currencyId" :label="item.currencyCode"
  96. :value="item.currencyId"></el-option>
  97. </el-select>
  98. </el-form-item>
  99. </div>
  100. </div>
  101. <div style="display: flex;">
  102. <div style="width: 25%;">
  103. <el-form-item label="机票编号:" label-width="160px" prop="ticketNumber">
  104. <el-input placeholder="机票编号" v-model="airTicketResOpData.ticketNumber">
  105. </el-input>
  106. </el-form-item>
  107. </div>
  108. <div style="width: 25%;">
  109. <el-form-item label="机票票号:" label-width="160px" prop="ticketCode">
  110. <el-input placeholder="机票票号" v-model="airTicketResOpData.ticketCode">
  111. </el-input>
  112. </el-form-item>
  113. </div>
  114. </div>
  115. <div style="display: flex;">
  116. <div style="width: 100%;">
  117. <el-form-item label="航班描述:" prop="flightsDescription" label-width="160px">
  118. <el-input type="textarea" :rows="5"
  119. placeholder="请严格遵守此格式!!! 1. EK363 R1 WE08MAR CANDXB HK7 0015 0515 SEAME 2 3 (注意空格以及多条数据换行)"
  120. v-model="airTicketResOpData.flightsDescription" @change="flightsCodeChange"></el-input>
  121. </el-form-item>
  122. </div>
  123. </div>
  124. <div style="display: flex;">
  125. <div style="width: 25%;">
  126. <el-form-item label="航班简述:" label-width="160px" prop="flightsCode">
  127. <el-input placeholder="航班简述" v-model="airTicketResOpData.flightsCode">
  128. </el-input>
  129. </el-form-item>
  130. </div>
  131. <div style="width: 25%;">
  132. <el-form-item label="城 市:" prop="flightsCity" label-width="160px">
  133. <el-input placeholder="城市" v-model="airTicketResOpData.flightsCity">
  134. </el-input>
  135. </el-form-item>
  136. </div>
  137. <div style="width: 25%;">
  138. <el-form-item label="航班日期:" prop="flightsDate" label-width="160px">
  139. <el-date-picker v-model="airTicketResOpData.flightsDate" type="date" placeholder="航班日期">
  140. </el-date-picker>
  141. </el-form-item>
  142. </div>
  143. <div style="width: 25%;">
  144. <el-form-item label="航班时间:" prop="flightsTime" label-width="160px">
  145. <el-time-select v-model="airTicketResOpData.flightsTime" placeholder="航班时间">
  146. </el-time-select>
  147. </el-form-item>
  148. </div>
  149. </div>
  150. <div style="display: flex;">
  151. <div style="width: 25%;">
  152. <el-form-item label="此舱位客人名称:" prop="clientName" label-width="160px">
  153. <el-select v-model="airTicketResOpData.clientName" placeholder="此舱位客人名称" multiple clearable
  154. filterable @change="clientNamechange">
  155. <el-option v-for="item in fliterClient" :key="item.id" :label="item.name" :value="item.id">
  156. </el-option>
  157. </el-select>
  158. </el-form-item>
  159. </div>
  160. <div style="width: 25%;">
  161. <el-form-item label="此舱位人数:" prop="clientNum" label-width="160px">
  162. <el-input placeholder="此舱位人数" v-model="airTicketResOpData.clientNum" @input="peiceinput">
  163. </el-input>
  164. </el-form-item>
  165. </div>
  166. <div style="width: 25%;">
  167. <el-form-item label="是否值机: " label-width="160px">
  168. <el-radio-group v-model="airTicketResOpData.isCheckIn">
  169. <el-radio :label=1>是</el-radio>
  170. <el-radio :label=0>否</el-radio>
  171. </el-radio-group>
  172. </el-form-item>
  173. </div>
  174. <div style="width: 25%;">
  175. <el-form-item label="是否选座:" label-width="160px">
  176. <el-radio-group v-model="airTicketResOpData.isSetSeat">
  177. <el-radio :label=1>是</el-radio>
  178. <el-radio :label=0>否</el-radio>
  179. </el-radio-group>
  180. </el-form-item>
  181. </div>
  182. </div>
  183. <div style="display: flex;">
  184. <div style="width: 25%;">
  185. <el-form-item label="是否购买行李:" label-width="160px">
  186. <el-radio-group v-model="airTicketResOpData.isPackage">
  187. <el-radio :label=1>是</el-radio>
  188. <el-radio :label=0>否</el-radio>
  189. </el-radio-group>
  190. </el-form-item>
  191. </div>
  192. <div style="width: 25%;">
  193. <el-form-item label="是否行李直挂:" label-width="160px">
  194. <el-radio-group v-model="airTicketResOpData.isBagHandle">
  195. <el-radio :label=1>是</el-radio>
  196. <el-radio :label=0>否</el-radio>
  197. </el-radio-group>
  198. </el-form-item>
  199. </div>
  200. <div style="width: 25%;">
  201. <el-form-item label="是否火车票出票选座:" label-width="160px">
  202. <el-radio-group v-model="airTicketResOpData.isTrain">
  203. <el-radio :label=1>是</el-radio>
  204. <el-radio :label=0>否</el-radio>
  205. </el-radio-group>
  206. </el-form-item>
  207. </div>
  208. </div>
  209. <div style="display: flex;">
  210. </div>
  211. <div style="display: flex;">
  212. <div style="width: 100%;">
  213. <el-form-item label="费用描述:" prop="priceDescription" label-width="160px">
  214. <el-input type="textarea" :rows="3" placeholder="费用描述"
  215. v-model="airTicketResOpData.priceDescription"></el-input>
  216. </el-form-item>
  217. </div>
  218. </div>
  219. <div style="display: flex;">
  220. <div style="width: 100%;">
  221. <el-form-item label="备 注:" prop="Remark" label-width="160px">
  222. <el-input type="textarea" :rows="3" placeholder="备注"
  223. v-model="airTicketResOpData.remark"></el-input>
  224. </el-form-item>
  225. </div>
  226. </div>
  227. </el-form>
  228. <div style="margin-top: 20px;">
  229. <div class="communal-title">付款申请</div>
  230. <hr style='background-color:#5555; height:1px; border:none;margin-top: 10px;' />
  231. </div>
  232. <el-form :model="cardPaymentOpData" ref="cardPaymentOpData" :rules="cardPaymentRules" label-width="130px"
  233. class="demo-ruleForm">
  234. <div style="display: flex;">
  235. <div style="width: 25%;">
  236. <el-form-item label="支付方式:" prop="payDId">
  237. <el-select v-model="cardPaymentOpData.payDId" placeholder="支付方式" style="width: 100%;"
  238. @change="payChange">
  239. <el-option v-for="item in payment" :key="item.id" :label="item.name" :value="item.id">
  240. </el-option>
  241. </el-select>
  242. </el-form-item>
  243. </div>
  244. <div style="width: 25%;">
  245. <el-form-item label="消费方式:" prop="consumptionPatterns">
  246. <el-input placeholder="消费方式" v-model="cardPaymentOpData.consumptionPatterns">
  247. </el-input>
  248. </el-form-item>
  249. </div>
  250. <div style="width: 25%;">
  251. <el-form-item label="消费日期:" prop="visitCountry">
  252. <el-date-picker v-model="cardPaymentOpData.consumptionDate" placeholder="消费日期" type="date">
  253. </el-date-picker>
  254. </el-form-item>
  255. </div>
  256. <div style="width: 25%;">
  257. <el-form-item label="付款金额:" prop="payMoney">
  258. <el-input placeholder="付款金额" v-model="cardPaymentOpData.payMoney" style="width: 52%;"
  259. :disabled="true">
  260. </el-input>
  261. <el-select v-model="cardPaymentOpData.paymentCurrency" style="width: 45%;" :disabled="true">
  262. <el-option v-for="item in rateList" :key="item.currencyId" :label="item.currencyCode"
  263. :value="item.currencyId"></el-option>
  264. </el-select>
  265. </el-form-item>
  266. </div>
  267. </div>
  268. <div v-if="cardPaymentOpData.payDId == 72">
  269. <div style="display: flex;">
  270. <div style="width: 25%;">
  271. <el-form-item label="卡类型:" prop="ctdId">
  272. <el-select v-model="cardPaymentOpData.ctdId" placeholder="卡类型" style="width: 100%;"
  273. @change="ctdChange">
  274. <el-option v-for="item in cardType" :key="item.id" :label="item.name" :value="item.id">
  275. </el-option>
  276. </el-select>
  277. </el-form-item>
  278. </div>
  279. <div style="width: 25%;">
  280. <el-form-item label="银行卡号:" prop="bankNo">
  281. <el-input placeholder="银行卡号" v-model="cardPaymentOpData.bankNo" :disabled="true">
  282. </el-input>
  283. </el-form-item>
  284. </div>
  285. <div style="width: 25%;">
  286. <el-form-item label="持卡人姓名:" prop="cardholderName">
  287. <el-input placeholder="持卡人姓名" v-model="cardPaymentOpData.cardholderName" :disabled="true">
  288. </el-input>
  289. </el-form-item>
  290. </div>
  291. </div>
  292. </div>
  293. <div v-else-if="cardPaymentOpData.payDId == 73">
  294. <div style="display: flex;">
  295. <div style="width: 25%;">
  296. <el-form-item label="公司银行账号:">
  297. <el-input placeholder="公司银行账号" v-model="cardPaymentOpData.companyBankNo">
  298. </el-input>
  299. </el-form-item>
  300. </div>
  301. <div style="width: 25%;">
  302. <el-form-item label="对方开户行:" prop="otherBankName">
  303. <el-input placeholder="对方开户行:" v-model="cardPaymentOpData.otherBankName">
  304. </el-input>
  305. </el-form-item>
  306. </div>
  307. <div style="width: 25%;">
  308. <el-form-item label="对方银行卡号:" prop="otherSideNo">
  309. <el-input placeholder="对方银行卡号" v-model="cardPaymentOpData.otherSideNo">
  310. </el-input>
  311. </el-form-item>
  312. </div>
  313. <div style="width: 25%;">
  314. <el-form-item label="对方姓名:" prop="otherSideName">
  315. <el-input placeholder="对方姓名" v-model="cardPaymentOpData.otherSideName">
  316. </el-input>
  317. </el-form-item>
  318. </div>
  319. </div>
  320. </div>
  321. <div v-else-if="cardPaymentOpData.payDId == 83">
  322. <div style="display: flex;">
  323. <div style="width: 25%;">
  324. <el-form-item label="对方开户行:" prop="otherBankName">
  325. <el-input placeholder="对方开户行" v-model="cardPaymentOpData.otherBankName">
  326. </el-input>
  327. </el-form-item>
  328. </div>
  329. <div style="width: 25%;">
  330. <el-form-item label="对方银行卡号:" prop="otherSideNo">
  331. <el-input placeholder="对方银行卡号" v-model="cardPaymentOpData.otherSideNo">
  332. </el-input>
  333. </el-form-item>
  334. </div>
  335. <div style="width: 25%;">
  336. <el-form-item label="对方姓名:" prop="otherSideName">
  337. <el-input placeholder="对方姓名" v-model="cardPaymentOpData.otherSideName">
  338. </el-input>
  339. </el-form-item>
  340. </div>
  341. </div>
  342. </div>
  343. <div v-else></div>
  344. <div style="display:flex;">
  345. <div style="width: 25%;">
  346. <el-form-item label="收款方:" prop="payee">
  347. <el-input placeholder="对方姓名:" v-model="cardPaymentOpData.payee">
  348. </el-input>
  349. </el-form-item>
  350. </div>
  351. <div style="width: 25%;">
  352. <el-form-item label="费用标识:" prop="orbitalPrivateTransfer">
  353. <el-select v-model="cardPaymentOpData.orbitalPrivateTransfer" placeholder="费用标识"
  354. style="width: 100%;">
  355. <el-option key="0" label="公转" :value=0>
  356. </el-option>
  357. <el-option key="1" label="私转" :value=1>
  358. </el-option>
  359. </el-select>
  360. </el-form-item>
  361. </div>
  362. <div style="width: 25%;">
  363. <el-form-item label="出票方合作方资料:" prop="visitCountry">
  364. <el-select v-model="airTicketAgentsId" placeholder="出票方合作方资料" style="width: 100%;"
  365. @change="Agents">
  366. <el-option v-for="item in airTicketAgents" :key="item.id" :label="item.name"
  367. :value="item.id">
  368. </el-option>
  369. </el-select>
  370. </el-form-item>
  371. </div>
  372. </div>
  373. <div style="display: flex;">
  374. <div style="width: 100%;">
  375. <el-form-item label="备 注:" prop="Remark">
  376. <el-input type="textarea" :rows="5" placeholder="备注"
  377. v-model="cardPaymentOpData.remark"></el-input>
  378. </el-form-item>
  379. </div>
  380. </div>
  381. <el-form-item>
  382. <div style="margin-left: 60%;">
  383. <el-button type="primary" @click="addBtn">保存</el-button>
  384. <el-button @click="back()">取消</el-button>
  385. </div>
  386. </el-form-item>
  387. </el-form>
  388. </div>
  389. </div>
  390. </template>
  391. <script>
  392. export default {
  393. data() {
  394. return {
  395. airTicketResRules: {
  396. cType: [
  397. { required: true, message: '请选择舱位类型', trigger: ['blur', 'change'] }
  398. ],
  399. prePrice: [
  400. { required: true, message: '请输入机票单价', trigger: ['blur', 'change'] },
  401. { pattern: /^(([1-9]?\d{0,8}(\.\d{1,2})?)|999999999|999999999\.(0){1,2})$/, message: '请输入正确的金额(最多2位小数)' }
  402. ],
  403. clientNum: [
  404. { required: true, message: '请输入舱位人数', trigger: ['blur', 'change'] },
  405. ],
  406. flightsCode: [
  407. { required: true, message: '请输入航班描述', trigger: ['blur', 'change'] },
  408. ],
  409. flightsCity: [
  410. { required: true, message: '请输入城市', trigger: ['blur', 'change'] },
  411. ],
  412. clientName: [
  413. { type: "array", required: true, message: '请选择责任人', trigger: ['blur', 'change'] }
  414. ],
  415. flightsDescription: [
  416. { required: true, message: '请严格遵守格式,正确填写', trigger: ['blur', 'change'] },
  417. ],
  418. preCurrency: [
  419. { required: true, message: '请选择币种', trigger: ['blur', 'change'] }
  420. ]
  421. },
  422. cardPaymentRules: {
  423. payDId: [
  424. { required: true, message: '请选择支付方式', trigger: ['blur', 'change'] },
  425. ],
  426. consumptionPatterns: [
  427. { required: true, message: '请输入消费方式', trigger: ['blur', 'change'] },
  428. ],
  429. payee: [
  430. { required: true, message: '请输入收款方', trigger: ['blur', 'change'] },
  431. ],
  432. orbitalPrivateTransfer: [
  433. { required: true, message: '请选择费用表示', trigger: ['blur', 'change'] },
  434. ],
  435. // ctdId: [
  436. // { required: true, message: '请选择卡类型', trigger: ['blur', 'change'] },
  437. // ]
  438. },
  439. title: "新增机票费用录入",
  440. token: '',
  441. userId: 0,
  442. id: '',
  443. DiId: '',
  444. isShow: false,
  445. DiIdSelect: '',
  446. delegationInfo: {},
  447. AirTicketResSelectData: [],//团组下拉框
  448. ticketClass: [],//舱位下拉框
  449. payment: [],//支付方式下拉框
  450. cardType: [],//卡类型下拉框
  451. airTicketAgents: [],//合作的代理资料
  452. airTicketAgentsId: '',
  453. clientNameId: [],//客人姓名
  454. clientNameList: [],
  455. airGroupCostParameter: {},//机票成本预算
  456. status: 0,
  457. airTicketResOpData: {
  458. id: 0,
  459. diId: 0,
  460. cType: 460,
  461. prePrice: 0,
  462. preCurrency: '',
  463. price: 0,
  464. currency: '',
  465. clientNum: 0,
  466. clientName: [],
  467. isCheckIn: 0,
  468. isSetSeat: 0,
  469. isPackage: 0,
  470. isBagHandle: 0,
  471. isTrain: 0,
  472. flightsCode: '',
  473. flightsDate: '',
  474. flightsTime: '',
  475. flightsCity: '',
  476. flightsDescription: '',
  477. priceDescription: '',
  478. ticketNumber: '',
  479. ticketCode: '',
  480. createUserId: 0,
  481. remark: ''
  482. },
  483. cardPaymentOpData: {
  484. id: 0,
  485. payDId: 72,
  486. consumptionPatterns: '',
  487. consumptionDate: this.transformDateFormat(new Date()),
  488. ctdId: '',
  489. bankNo: '',
  490. cardholderName: 'Zhang Hailin',
  491. payMoney: 0,
  492. paymentCurrency: '',
  493. companyBankNo: '',
  494. otherBankName: '',
  495. otherSideNo: '',
  496. otherSideName: '',
  497. mfOperator: 0,
  498. mfOperatorDate: this.transformDateFormat(new Date()),
  499. diId: this.DiId,
  500. payThenMoney: 0,
  501. payee: '',
  502. createUserId: 0,
  503. orbitalPrivateTransfer: '',
  504. remark: ''
  505. },
  506. IsAuditGM: 0,
  507. rateList: [],
  508. }
  509. },
  510. methods: {
  511. clientNamechange(val) {
  512. console.log(val.length)
  513. this.airTicketResOpData.clientNum = val.length;
  514. this.cardPaymentOpData.payMoney = parseFloat(parseFloat(this.airTicketResOpData.prePrice) * parseFloat(this.airTicketResOpData.clientNum)).toFixed(2)
  515. this.cardPaymentOpData.payThenMoney = this.cardPaymentOpData.payMoney
  516. this.airTicketResOpData.price = parseFloat(parseFloat(this.airTicketResOpData.prePrice) * parseFloat(this.airTicketResOpData.clientNum)).toFixed(2)
  517. console.log('airTicketResOpData.clientName', this.airTicketResOpData.clientName);
  518. },
  519. //团组下拉框(下拉列表加载)
  520. AirTicketResSelect() {
  521. var url = "/api/Groups/AirTicketResSelect"
  522. var that = this
  523. this.$axios({
  524. method: 'post',
  525. url: url,
  526. headers: {
  527. Authorization: 'Bearer ' + this.token
  528. },
  529. data: {
  530. userId: that.userId
  531. }
  532. }).then(function (res) {
  533. if (res.data.code == 200) {
  534. that.AirTicketResSelectData = res.data.data.groupName; //团组下拉列表
  535. that.ticketClass = res.data.data.ticketClass;//舱位下拉框
  536. that.payment = res.data.data.payment;//支付方式下拉框
  537. that.cardType = res.data.data.cardType;//卡类型下拉框
  538. that.airTicketAgents = res.data.data.airTicketAgents//合作方资料下拉框
  539. that.DiIdSelect = parseInt(that.DiId); //选中团组
  540. //that.QueryTankType();
  541. }
  542. })
  543. },
  544. //团组切换
  545. AirTicketResChange() {
  546. this.AirTicketResList();
  547. this.QueryClient();
  548. },
  549. //团组基础信息以及成本信息
  550. AirTicketResList() {
  551. var url = "/api/Groups/AirTicketResList"
  552. var that = this
  553. this.$axios({
  554. method: 'post',
  555. url: url,
  556. headers: {
  557. Authorization: 'Bearer ' + this.token
  558. },
  559. data: {
  560. userId: that.userId,
  561. portType: 1,
  562. diId: this.DiIdSelect ? this.DiIdSelect : this.DiId
  563. }
  564. }).then(function (res) {
  565. if (res.data.code == 200) {
  566. that.delegationInfo = res.data.data.delegationInfo
  567. that.airGroupCostParameter = res.data.data.airGroupCostParameter
  568. }
  569. })
  570. },
  571. //(弃用 仓类型加载客户名单)
  572. QueryTankType() {
  573. var url = "/api/Groups/tankType"
  574. var that = this
  575. this.$axios({
  576. method: 'post',
  577. url: url,
  578. headers: {
  579. Authorization: 'Bearer ' + that.token
  580. },
  581. data: {
  582. id: that.airTicketResOpData.cType
  583. }
  584. }).then(function (res) {
  585. if (res.data.code == 200) {
  586. that.clientNameId = res.data.data
  587. that.AirTicketResList()
  588. }
  589. })
  590. },
  591. tankTypeChange() {
  592. //this.QueryTankType();
  593. },
  594. //点击保存事件
  595. addBtn() {
  596. if (this.IsAuditGM == 1) {
  597. var ss = this.airTicketResOpData.clientName.split(',')
  598. this.airTicketResOpData.clientName = [];
  599. ss.forEach(function (item) {
  600. that.airTicketResOpData.clientName.push(parseInt(item))
  601. });
  602. this.$message.error('审核已通过,不可修改!');
  603. } else {
  604. if (this.DiId == null && this.DiId == undefined && this.DiId == "") {
  605. this.$message.error("请选择团组名称");
  606. var ss = this.airTicketResOpData.clientName.split(',')
  607. this.airTicketResOpData.clientName = [];
  608. ss.forEach(function (item) {
  609. that.airTicketResOpData.clientName.push(parseInt(item))
  610. });
  611. return;
  612. }
  613. const that = this;
  614. let formArr = ['airTicketResOpData', 'cardPaymentOpData']//三个form表单的ref
  615. var resultArr = [] //用来接受返回结果的数组
  616. function checkForm(formName) { //封装验证表单的函数
  617. var result = new Promise(function (resolve, reject) {
  618. that.$refs[formName].validate((valid) => {
  619. if (valid) {
  620. resolve();
  621. } else { reject() }
  622. })
  623. })
  624. resultArr.push(result) //push 得到promise的结果
  625. }
  626. formArr.forEach(item => { //根据表单的ref校验
  627. checkForm(item)
  628. })
  629. Promise.all(resultArr).then(values => {
  630. that.airTicketResOpData.diId = parseInt(that.DiIdSelect);
  631. that.airTicketResOpData.createUserId = that.userId;
  632. var clientNameStr = ''
  633. that.airTicketResOpData.clientName.forEach(function (item) {
  634. clientNameStr += item + ","
  635. });
  636. that.airTicketResOpData.clientName = clientNameStr.substring(0, clientNameStr.length - 1)
  637. that.cardPaymentOpData.createUserId = that.userId;
  638. that.cardPaymentOpData.diId = parseInt(that.DiIdSelect);
  639. if (that.cardPaymentOpData.ctdId == '') {
  640. that.cardPaymentOpData.ctdId = 0;
  641. }
  642. var url = "/api/Groups/OpAirTicketRes"
  643. that.$axios({
  644. method: 'post',
  645. url: url,
  646. headers: {
  647. Authorization: 'Bearer ' + that.token
  648. },
  649. data: {
  650. status: that.status,
  651. airTicketResOpData: that.airTicketResOpData,
  652. cardPaymentOpData: that.cardPaymentOpData
  653. }
  654. }).then(function (res) {
  655. if (res.data.code == 200) {
  656. that.$message({
  657. message: res.data.msg,
  658. type: 'success'
  659. });
  660. that.loading = true;
  661. console.log('that.airTicketResOpData.clientName', that.airTicketResOpData.clientName)
  662. setTimeout(() => {
  663. that.back();
  664. }, 1000);
  665. } else {
  666. that.$message.error(res.data.msg);
  667. }
  668. }).catch(function (error) { // 此时必填完成,做保存后的业务操作
  669. console.log(error)
  670. }).finally(() => {
  671. var ss = that.airTicketResOpData.clientName.split(',')
  672. if (ss.length != 0) {
  673. that.airTicketResOpData.clientName = [];
  674. ss.forEach(function (item) {
  675. if (item) {
  676. that.airTicketResOpData.clientName.push(parseInt(item))
  677. }
  678. });
  679. }
  680. console.log('run finally code');
  681. })
  682. }).catch(err => {
  683. console.log("err", err.message);
  684. this.$message.error('请完善信息在保存!');
  685. return false;
  686. })
  687. }
  688. },
  689. //根据机票费用录入Id查询c表和机票费用信息
  690. AirTicketResById() {
  691. var url = "/api/Groups/AirTicketResById"
  692. var that = this
  693. this.$axios({
  694. method: 'post',
  695. url: url,
  696. headers: {
  697. Authorization: 'Bearer ' + this.token
  698. },
  699. data: {
  700. id: this.id
  701. }
  702. }).then(function (res) {
  703. if (res.data.code == 200) {
  704. var airData = res.data.data.airTicket
  705. that.airTicketResOpData.id = airData.id
  706. that.airTicketResOpData.diId = airData.diId
  707. that.airTicketResOpData.cType = airData.cType
  708. that.airTicketResOpData.prePrice = airData.prePrice
  709. that.airTicketResOpData.preCurrency = airData.preCurrency
  710. that.airTicketResOpData.price = airData.price
  711. that.airTicketResOpData.currency = airData.currency
  712. that.airTicketResOpData.clientNum = airData.clientNum
  713. that.airTicketResOpData.isCheckIn = airData.isCheckIn
  714. that.airTicketResOpData.isSetSeat = airData.isSetSeat
  715. that.airTicketResOpData.isPackage = airData.isPackage
  716. that.airTicketResOpData.isBagHandle = airData.isBagHandle
  717. that.airTicketResOpData.isTrain = airData.isTrain
  718. that.airTicketResOpData.flightsCode = airData.flightsCode
  719. that.airTicketResOpData.flightsDate = airData.flightsDate
  720. that.airTicketResOpData.flightsTime = airData.flightsTime
  721. that.airTicketResOpData.flightsCity = airData.flightsCity
  722. that.airTicketResOpData.flightsDescription = airData.flightsDescription
  723. that.airTicketResOpData.priceDescription = airData.priceDescription
  724. that.airTicketResOpData.ticketNumber = airData.ticketNumber
  725. that.airTicketResOpData.ticketCode = airData.ticketCode
  726. that.airTicketResOpData.createUserId = airData.createUserId
  727. that.airTicketResOpData.remark = airData.remark
  728. var ss = airData.clientName.split(',')
  729. that.airTicketResOpData.clientName = [];
  730. ss.forEach(function (item) {
  731. that.airTicketResOpData.clientName.push(parseInt(item))
  732. });
  733. that.prePrice = res.data.data.airTicket.prePrice
  734. that.currencyId = res.data.data.airTicket.preCurrency
  735. that.clientNum = res.data.data.airTicket.clientNum
  736. var creData = res.data.data.creditCard;
  737. that.cardPaymentOpData.id = creData.id
  738. that.cardPaymentOpData.payDId = creData.payDId
  739. that.cardPaymentOpData.consumptionPatterns = creData.consumptionPatterns
  740. that.cardPaymentOpData.consumptionDate = creData.consumptionDate
  741. that.cardPaymentOpData.bankNo = creData.bankNo
  742. that.cardPaymentOpData.cardholderName = creData.cardholderName
  743. that.cardPaymentOpData.payMoney = creData.payMoney
  744. that.cardPaymentOpData.paymentCurrency = creData.paymentCurrency
  745. that.cardPaymentOpData.companyBankNo = creData.companyBankNo
  746. that.cardPaymentOpData.otherBankName = creData.otherBankName
  747. that.cardPaymentOpData.otherSideNo = creData.otherSideNo
  748. that.cardPaymentOpData.otherSideName = creData.otherSideName
  749. that.cardPaymentOpData.mfOperator = creData.mfOperator
  750. that.cardPaymentOpData.mfOperatorDate = creData.mfOperatorDate
  751. that.cardPaymentOpData.diId = creData.diId
  752. that.cardPaymentOpData.payThenMoney = creData.payThenMoney
  753. that.cardPaymentOpData.payee = creData.payee
  754. that.cardPaymentOpData.createUserId = creData.createUserId
  755. that.cardPaymentOpData.orbitalPrivateTransfer = creData.orbitalPrivateTransfer
  756. that.cardPaymentOpData.remark = creData.remark
  757. that.IsAuditGM = creData.isAuditGM
  758. if (creData.ctdId == 0) {
  759. that.cardPaymentOpData.ctdId = ""
  760. } else {
  761. that.cardPaymentOpData.ctdId = parseInt(creData.ctdId)
  762. }
  763. that.cardPaymentOpData.orbitalPrivateTransfer = parseInt(creData.orbitalPrivateTransfer)
  764. }
  765. })
  766. },
  767. //支付方式change事件
  768. payChange() {
  769. this.cardPaymentOpData.ctdId = '';
  770. this.cardPaymentOpData.bankNo = '';
  771. this.cardPaymentOpData.cardholderName = 'Zhang Hailin';
  772. this.cardPaymentOpData.companyBankNo = '';
  773. this.cardPaymentOpData.otherBankName = '';
  774. this.cardPaymentOpData.otherSideNo = '';
  775. this.cardPaymentOpData.otherSideName = '';
  776. this.cardPaymentOpData.mfOperator = 0;
  777. this.cardPaymentOpData.payee = '';
  778. this.cardPaymentOpData.orbitalPrivateTransfer = '';
  779. this.cardPaymentOpData.remark = ''
  780. },
  781. //合作方下拉选择事件
  782. Agents(Id) {
  783. for (var i = 0; i < this.airTicketAgents.length; i++) {
  784. if (this.airTicketAgents[i].id == parseInt(Id)) {
  785. this.cardPaymentOpData.payee = this.airTicketAgents[i].name
  786. this.cardPaymentOpData.otherBankName = this.airTicketAgents[i].bank
  787. this.cardPaymentOpData.otherSideNo = this.airTicketAgents[i].account
  788. }
  789. }
  790. },
  791. //卡类型选择事件
  792. ctdChange(id) {
  793. this.airTicketAgentsId = '';
  794. for (var i = 0; i < this.cardType.length; i++) {
  795. if (this.cardType[i].id == parseInt(id)) {
  796. this.cardPaymentOpData.bankNo = this.cardType[i].remark
  797. }
  798. }
  799. },
  800. //单价值改变事件
  801. peiceinput() {
  802. this.cardPaymentOpData.payMoney = parseFloat(parseFloat(this.airTicketResOpData.prePrice) * parseFloat(this.airTicketResOpData.clientNum)).toFixed(2);
  803. if (isNaN(this.cardPaymentOpData.payMoney)) {
  804. this.cardPaymentOpData.payMoney = 0;
  805. }
  806. this.cardPaymentOpData.payThenMoney = this.cardPaymentOpData.payMoney;
  807. this.airTicketResOpData.price = parseFloat(parseFloat(this.airTicketResOpData.prePrice) * parseFloat(this.airTicketResOpData.clientNum)).toFixed(2);
  808. if (isNaN(this.airTicketResOpData.price)) {
  809. this.airTicketResOpData.price = 0;
  810. }
  811. },
  812. currencyChange(Id) {
  813. this.cardPaymentOpData.paymentCurrency = Id;
  814. this.airTicketResOpData.preCurrency = Id;
  815. this.airTicketResOpData.currency = Id;
  816. },
  817. //航班描述值改变事件
  818. flightsCodeChange(val) {
  819. var reg = /[\r\n]+/g;
  820. var that = this;
  821. that.airTicketResOpData.flightsCode = ''
  822. that.airTicketResOpData.flightsCity = ''
  823. var dateTime = [];
  824. if (reg.test(val)) {
  825. var attrsList = val.split(reg)
  826. attrsList.forEach(function (item, index) {
  827. var ss = item.split(' ')
  828. for (var i = 0; i < ss.length; i++) {
  829. ss[i] = ss[i].trim();
  830. if (!ss[i]) {
  831. ss.splice(i, 1);
  832. i--;
  833. }
  834. }
  835. ss = ss;
  836. that.airTicketResOpData.flightsCode += ss[1] + '/'//航班号
  837. that.airTicketResOpData.flightsCity += ss[4].substring(0, 3) + '-' + ss[4].substring(3) + '/'//城市
  838. var dateStr = ss[3].substring(4)
  839. switch (dateStr) {
  840. case "JAN":
  841. dateStr = "01";
  842. break;
  843. case "FEB":
  844. dateStr = "02";
  845. break;
  846. case "MAR":
  847. dateStr = "03";
  848. break;
  849. case "APR":
  850. dateStr = "04";
  851. break;
  852. case "MAY":
  853. dateStr = "05";
  854. break;
  855. case "JUN":
  856. dateStr = "06";
  857. break;
  858. case "JUL":
  859. dateStr = "07";
  860. break;
  861. case "AUG":
  862. dateStr = "08";
  863. break;
  864. case "SEP":
  865. dateStr = "09";
  866. break;
  867. case "OCT":
  868. dateStr = "10";
  869. break;
  870. case "NOV":
  871. dateStr = "11";
  872. break;
  873. case "DEC":
  874. dateStr = "12";
  875. break;
  876. }
  877. dateTime.push({
  878. date: new Date(new Date().getFullYear() + '-' + dateStr + '-' + ss[3].substring(2, 4)),
  879. time: ss[6].substring(0, 2) + ':' + ss[6].substring(2)
  880. })//日期
  881. });
  882. that.airTicketResOpData.flightsCode = that.airTicketResOpData.flightsCode.substring(0, that.airTicketResOpData.flightsCode.length - 1)//航班号
  883. that.airTicketResOpData.flightsCity = that.airTicketResOpData.flightsCity.substring(0, that.airTicketResOpData.flightsCity.length - 1)//城市
  884. var compare = function (obj1, obj2) {
  885. var val1 = obj1.date;
  886. var val2 = obj2.date;
  887. if (val1 < val2) {
  888. return -1;
  889. } else if (val1 > val2) {
  890. return 1;
  891. } else {
  892. return 0;
  893. }
  894. }
  895. dateTime = dateTime.sort(compare);
  896. that.airTicketResOpData.flightsTime = dateTime[0].time
  897. that.airTicketResOpData.flightsDate = dateTime[0].date
  898. } else {
  899. var ss = val.split(' ')
  900. for (var i = 0; i < ss.length; i++) {
  901. ss[i] = ss[i].trim();
  902. if (!ss[i]) {
  903. ss.splice(i, 1);
  904. i--;
  905. }
  906. }
  907. ss = ss;
  908. that.airTicketResOpData.flightsCode = ss[1]//航班号
  909. that.airTicketResOpData.flightsCity += ss[4].substring(0, 3) + '-' + ss[4].substring(3)//城市
  910. that.airTicketResOpData.flightsTime = ss[6].substring(0, 2) + ':' + ss[6].substring(2)//时间
  911. var dateStr = ss[3].substring(4)
  912. switch (dateStr) {
  913. case "JAN":
  914. dateStr = "01";
  915. break;
  916. case "FEB":
  917. dateStr = "02";
  918. break;
  919. case "MAR":
  920. dateStr = "03";
  921. break;
  922. case "APR":
  923. dateStr = "04";
  924. break;
  925. case "MAY":
  926. dateStr = "05";
  927. break;
  928. case "JUN":
  929. dateStr = "06";
  930. break;
  931. case "JUL":
  932. dateStr = "07";
  933. break;
  934. case "AUG":
  935. dateStr = "08";
  936. break;
  937. case "SEP":
  938. dateStr = "09";
  939. break;
  940. case "OCT":
  941. dateStr = "10";
  942. break;
  943. case "NOV":
  944. dateStr = "11";
  945. break;
  946. case "DEC":
  947. dateStr = "12";
  948. break;
  949. }
  950. that.airTicketResOpData.flightsDate = new Date().getFullYear() + '-' + dateStr + '-' + ss[3].substring(2, 4)
  951. }
  952. },
  953. //加载团组客户名单
  954. QueryClient() {
  955. var url = "/api/Groups/QueryClientInfoByDIID"
  956. var that = this
  957. this.$axios({
  958. method: 'post',
  959. url: url,
  960. headers: {
  961. Authorization: 'Bearer ' + that.token
  962. },
  963. data: {
  964. diid: this.DiIdSelect ? this.DiIdSelect : this.DiId
  965. }
  966. }).then(function (res) {
  967. if (res.data.code == 200) {
  968. //客户名单
  969. console.log(res.data.data);
  970. that.clientNameId = res.data.data;
  971. }
  972. })
  973. },
  974. back() {
  975. this.$router.push({
  976. path: "/home/AirTicketRes",
  977. query: {
  978. DiId: this.DiIdSelect ? this.DiIdSelect : this.DiId,
  979. }
  980. })
  981. },
  982. QueryRate() {
  983. var url = "/api/Business/PostGroupTeamRateByDiIdAndCTableId"
  984. var that = this
  985. this.$axios({
  986. method: 'post',
  987. url: url,
  988. headers: {
  989. Authorization: 'Bearer ' + that.token
  990. },
  991. data: {
  992. "portType": 1,
  993. "diId": this.DiIdSelect ? this.DiIdSelect : this.DiId,
  994. "cTable": 85
  995. }
  996. }).then(function (res) {
  997. if (res.data.code == 200) {
  998. //汇率
  999. console.log("汇率--", res.data.data);
  1000. that.rateList = res.data.data.teamRates;
  1001. }
  1002. })
  1003. }
  1004. },
  1005. mounted() {
  1006. this.token = JSON.parse(localStorage.getItem('userinif')).token;
  1007. this.userId = JSON.parse(localStorage.getItem('userinif')).userInfo.userId
  1008. this.id = this.$route.query.id
  1009. this.DiId = this.$route.query.DiId
  1010. this.QueryRate(); //团组机票汇率
  1011. this.AirTicketResSelect(); //加载所有下拉框
  1012. this.QueryClient(); //加载客户名单
  1013. this.AirTicketResList();//加载团组基础信息以及成本信息
  1014. var that = this
  1015. if (that.DiId != undefined && that.id != undefined) {
  1016. that.status = 2;
  1017. that.isShow = true
  1018. that.AirTicketResById(); //加载单条数据信息
  1019. } else {
  1020. that.isShow = false
  1021. that.status = 1;
  1022. }
  1023. },
  1024. computed: {
  1025. //客户名单属性
  1026. fliterClient() {
  1027. var arr = [];
  1028. if (this.clientNameId.length < 1) {
  1029. return [];
  1030. }
  1031. this.clientNameId.forEach(element => {
  1032. var item = "";
  1033. if (element.pinyin) {
  1034. item += element.pinyin;
  1035. }
  1036. if (element.firstName && element.lastName) {
  1037. item += "(" + element.lastName + element.firstName + ")";
  1038. }
  1039. if (item) {
  1040. arr.push({ id: element.id, name: item });
  1041. }
  1042. });
  1043. return arr;
  1044. }
  1045. }
  1046. }
  1047. </script>
  1048. <style>
  1049. .communal-list {
  1050. background-color: #fff;
  1051. padding: 10px;
  1052. box-shadow: 0 0 5px #0005;
  1053. border-radius: 10px;
  1054. }
  1055. .car_add .communal-title {
  1056. display: flex;
  1057. font-size: 17px;
  1058. font-weight: 600;
  1059. color: #555;
  1060. margin-bottom: 20px;
  1061. justify-content: space-between;
  1062. align-items: center;
  1063. }
  1064. .appraise-box {
  1065. display: flex;
  1066. flex-wrap: wrap;
  1067. justify-content: space-between;
  1068. margin: 50px 0;
  1069. }
  1070. .appraise-box>div {
  1071. width: 30%;
  1072. }
  1073. .communal-box {
  1074. display: flex;
  1075. }
  1076. .communal-box>button {
  1077. margin-left: 10px;
  1078. padding: 8px 20px;
  1079. }
  1080. .car_add {
  1081. background-color: #fff;
  1082. padding: 20px;
  1083. box-shadow: 0 0 5px #0005;
  1084. border-radius: 10px;
  1085. }
  1086. @media screen and (max-width: 1700px) {
  1087. .appraise-box>div {
  1088. width: 48%;
  1089. }
  1090. .appraise-box>div el-form-item__content {
  1091. width: 260px !important;
  1092. }
  1093. }
  1094. </style>