OpAirTicketRes.vue 67 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462
  1. <template>
  2. <div class="car_add" v-loading.fullscreen.lock="fullscreenLoading">
  3. <div>
  4. <div class="communal-title">
  5. <div>{{ title }}</div>
  6. </div>
  7. </div>
  8. <div class="opcostbudgeting">
  9. <span>*团组成本预算-机票的预算:</span>
  10. <div v-if="budgeting.length>1">
  11. <div class="opcostbudgeting-li" v-for="(item,index) in budgeting" :key="index">
  12. <span>({{item.costType}}段)</span>
  13. <span>时间:{{item.costTypeStartTime}} ~ {{item.costTypeEndTime}}</span>
  14. <span v-for="(items,index) in item.data.airFeeData" :key="index">&nbsp;&nbsp;&nbsp;{{items.airType}}:{{townum(items.airDRCB)}}元/人&nbsp;&nbsp;&nbsp;{{items.airNum}}人&nbsp;&nbsp;&nbsp;共:{{townum(items.airZCB)}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
  15. <el-popover
  16. placement="right"
  17. width="552"
  18. trigger="hover">
  19. <el-table max-height="800" border :data="item.data.airInitData">
  20. <el-table-column width="150" property="date" label="DATE"></el-table-column>
  21. <el-table-column width="400" property="itinerary" label="ITIN"></el-table-column>
  22. </el-table>
  23. <span slot="reference" style="cursor: pointer;">"移上查看详细"</span>
  24. </el-popover>
  25. <!-- 客户名单 -->
  26. <el-popover
  27. placement="bottom"
  28. width="662"
  29. trigger="hover">
  30. <el-table max-height="600" border :data="rollcallarr">
  31. <el-table-column width="100" property="date" label="姓名">
  32. <template slot-scope="scope">
  33. {{ scope.row.lastName}}{{scope.row.firstName}}
  34. </template>
  35. </el-table-column>
  36. <el-table-column width="200" property="lastName" label="拼音">
  37. <template slot-scope="scope">
  38. {{ pinyingxing(scope.row.lastName) }}/{{ pinyingxing(scope.row.firstName) }}
  39. </template>
  40. </el-table-column>
  41. <el-table-column width="50" property="sex" label="性别">
  42. <template slot-scope="scope">
  43. {{ scope.row.sex==0?'男':'女'}}
  44. </template>
  45. </el-table-column>
  46. <el-table-column width="110" property="birthDay" label="生日">
  47. <template slot-scope="scope">
  48. {{ fgarr(scope.row.birthDay) }}
  49. </template>
  50. </el-table-column>
  51. <el-table-column width="200" property="idCardNo" label="身份证号码">
  52. <template slot-scope="scope">
  53. {{ scope.row.idCardNo }}
  54. </template>
  55. </el-table-column>
  56. </el-table>
  57. <span slot="reference" style="cursor: pointer;margin-left: 20px;">"移上查看客户名单"</span>
  58. </el-popover>
  59. </div>
  60. </div>
  61. <div v-if="budgeting.length<=1">
  62. <div class="opcostbudgeting-li" v-for="(item,index) in budgeting" :key="index">
  63. <span v-for="(items,index) in item.data.airFeeData" :key="index">{{items.airType}}:{{townum(items.airDRCB)}}元/人&nbsp;&nbsp;&nbsp;{{items.airNum}}人&nbsp;&nbsp;&nbsp;共:{{townum(items.airZCB)}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
  64. <el-popover
  65. placement="right"
  66. width="552"
  67. trigger="hover">
  68. <el-table max-height="800" border :data="item.data.airInitData">
  69. <el-table-column width="150" property="date" label="DATE"></el-table-column>
  70. <el-table-column width="400" property="itinerary" label="ITIN"></el-table-column>
  71. </el-table>
  72. <span slot="reference" style="cursor: pointer;">"移上查看详细"</span>
  73. </el-popover>
  74. <!-- 客户名单 -->
  75. <el-popover
  76. placement="bottom"
  77. width="662"
  78. trigger="hover">
  79. <el-table max-height="600" border :data="rollcallarr">
  80. <el-table-column width="100" property="date" label="姓名">
  81. <template slot-scope="scope">
  82. {{ scope.row.lastName}}{{scope.row.firstName}}
  83. </template>
  84. </el-table-column>
  85. <el-table-column width="200" property="lastName" label="拼音">
  86. <template slot-scope="scope">
  87. {{ pinyingxing(scope.row.lastName) }}/{{ pinyingxing(scope.row.firstName) }}
  88. </template>
  89. </el-table-column>
  90. <el-table-column width="50" property="sex" label="性别">
  91. <template slot-scope="scope">
  92. {{ scope.row.sex==0?'男':'女'}}
  93. </template>
  94. </el-table-column>
  95. <el-table-column width="110" property="birthDay" label="生日">
  96. <template slot-scope="scope">
  97. {{ fgarr(scope.row.birthDay) }}
  98. </template>
  99. </el-table-column>
  100. <el-table-column width="200" property="idCardNo" label="身份证号码">
  101. <template slot-scope="scope">
  102. {{ scope.row.idCardNo }}
  103. </template>
  104. </el-table-column>
  105. </el-table>
  106. <span slot="reference" style="cursor: pointer;margin-left: 20px;">"移上查看客户名单"</span>
  107. </el-popover>
  108. </div>
  109. </div>
  110. <div v-if="budgeting.length==0" style="display: flex;align-items: center;">
  111. <div class="opcostbudgeting-li">
  112. 未设置团组成本或成本未通知
  113. </div>
  114. <!-- 客户名单 -->
  115. <el-popover
  116. placement="bottom"
  117. width="662"
  118. trigger="hover">
  119. <el-table max-height="600" border :data="rollcallarr">
  120. <el-table-column width="100" property="date" label="姓名">
  121. <template slot-scope="scope">
  122. {{ scope.row.lastName}}{{scope.row.firstName}}
  123. </template>
  124. </el-table-column>
  125. <el-table-column width="200" property="lastName" label="拼音">
  126. <template slot-scope="scope">
  127. {{ pinyingxing(scope.row.lastName) }}/{{ pinyingxing(scope.row.firstName) }}
  128. </template>
  129. </el-table-column>
  130. <el-table-column width="50" property="sex" label="性别">
  131. <template slot-scope="scope">
  132. {{ scope.row.sex==0?'男':'女'}}
  133. </template>
  134. </el-table-column>
  135. <el-table-column width="110" property="birthDay" label="生日">
  136. <template slot-scope="scope">
  137. {{ fgarr(scope.row.birthDay) }}
  138. </template>
  139. </el-table-column>
  140. <el-table-column width="200" property="idCardNo" label="身份证号码">
  141. <template slot-scope="scope">
  142. {{ scope.row.idCardNo }}
  143. </template>
  144. </el-table-column>
  145. </el-table>
  146. <span slot="reference" style="cursor: pointer;margin-left: 20px;">"移上查看客户名单"</span>
  147. </el-popover>
  148. </div>
  149. </div>
  150. <!-- <div style="display: flex;">
  151. <div style="text-align:left;font-size: 17px;font-weight: 600;color: #555;">
  152. 团组成本预算 - 机票的预算:
  153. </div>
  154. <div style="margin-left:20px;color: #555;" v-if="airGroupCostParameter != null">
  155. 经济舱: {{ airGroupCostParameter.jjccb }}元/人 {{ airGroupCostParameter.jjcrs }}人
  156. 共:{{ airGroupCostParameter.jjccb * airGroupCostParameter.jjcrs
  157. }}元&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  158. 公务舱: {{ airGroupCostParameter.gwccb }}元/人 {{ airGroupCostParameter.gwcrs }}人
  159. 共:{{ airGroupCostParameter.gwccb * airGroupCostParameter.gwcrs
  160. }}元&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  161. </div>
  162. <div style="margin-left:20px;" v-else>
  163. 团组成本暂未开放此团数据!
  164. </div>
  165. </div> -->
  166. <hr style='background-color:#5555; height:1px; border:none;margin: 10px 0;' />
  167. <div>
  168. <el-form :model="delegationInfo" label-width="100px" class="demo-ruleForm">
  169. <div style="display: flex;">
  170. <div style="width: 25%;">
  171. <el-form-item label="团组名称:" label-width="160px">
  172. <el-select v-model="DiIdSelect" clearable filterable placeholder="团组选择" remote :remote-method="GroupFeeKeywordSearch" :loading="selectLoading"
  173. @change="AirTicketResChange" :disabled="isShow" style="width: 100%;">
  174. <el-option v-for="item in AirTicketResSelectDatas" :key="item.id" :label="item.teamName"
  175. :value="item.id">
  176. </el-option>
  177. </el-select>
  178. </el-form-item>
  179. </div>
  180. <div style="width: 25%;">
  181. <el-form-item label="团 号:" prop="tourCode" label-width="160px">
  182. <el-input placeholder="团号" v-model="delegationInfo.tourCode" :disabled="true">
  183. </el-input>
  184. </el-form-item>
  185. </div>
  186. <div style="width: 25%;">
  187. <el-form-item label="客户:" prop="clientName" label-width="160px">
  188. <el-input placeholder="客户" v-model="delegationInfo.clientName" :disabled="true">
  189. </el-input>
  190. </el-form-item>
  191. </div>
  192. <div style="width: 25%;">
  193. <el-form-item label="出访国家:" prop="visitCountry" label-width="160px">
  194. <el-input placeholder="出访国家" v-model="delegationInfo.visitCountry" :disabled="true">
  195. </el-input>
  196. </el-form-item>
  197. </div>
  198. </div>
  199. </el-form>
  200. <el-form :model="airTicketResOpData" :rules="airTicketResRules" ref="airTicketResOpData" label-width="100px"
  201. class="demo-ruleForm">
  202. <div style="display: flex;">
  203. <div style="width: 25%;">
  204. <el-form-item label="舱类型:" label-width="160px" prop="cType">
  205. <el-select v-model="airTicketResOpData.cType" placeholder="舱类型" style="width: 100%;"
  206. @change="tankTypeChange">
  207. <el-option v-for="item in ticketClass" :key="item.id" :label="item.name" :value="item.id">
  208. </el-option>
  209. </el-select>
  210. </el-form-item>
  211. </div>
  212. <div style="width: 25%;display: flex;">
  213. <div style="width: 72%;">
  214. <el-form-item label="机票单价:" prop="prePrice" label-width="160px">
  215. <el-input-number style="width:100%" :precision="2" placeholder="费用金额" @input="peiceinput" v-model="airTicketResOpData.prePrice" :controls='false'>
  216. </el-input-number>
  217. <!-- <el-input placeholder="机票单价" v-model="airTicketResOpData.prePrice" @input="peiceinput">
  218. </el-input> -->
  219. </el-form-item>
  220. </div>
  221. <div style="width: 28%;">
  222. <el-form-item prop="preCurrency" label-width="5px">
  223. <el-select v-model="airTicketResOpData.preCurrency" @change="currencyChange"
  224. placeholder="币种">
  225. <el-option v-for="item in rateList" :key="item.currencyId" :label="item.currencyCode"
  226. :value="item.currencyId"></el-option>
  227. </el-select>
  228. </el-form-item>
  229. </div>
  230. </div>
  231. <div style="width: 25%;">
  232. <el-form-item label="机票总价:" prop="price" label-width="160px">
  233. <el-input placeholder="机票总价" v-model="airTicketResOpData.price" style="width: 58%;"
  234. :disabled="true">
  235. </el-input>
  236. <el-select v-model="airTicketResOpData.currency" style="width: 40%;" :disabled="true">
  237. <el-option v-for="item in rateList" :key="item.currencyId" :label="item.currencyCode"
  238. :value="item.currencyId"></el-option>
  239. </el-select>
  240. </el-form-item>
  241. </div>
  242. <div style="width: 25%;">
  243. <el-form-item label="机票编号:" label-width="160px" prop="ticketNumber">
  244. <el-input placeholder="机票编号" v-model="airTicketResOpData.ticketNumber">
  245. </el-input>
  246. </el-form-item>
  247. </div>
  248. </div>
  249. <div style="display: flex;">
  250. <div style="width: 25%;">
  251. <el-form-item label="机票票号:" label-width="160px" prop="ticketCode">
  252. <el-input placeholder="机票票号" v-model="airTicketResOpData.ticketCode">
  253. </el-input>
  254. </el-form-item>
  255. </div>
  256. </div>
  257. <div style="display: flex;">
  258. <div style="width: 100%;">
  259. <el-form-item label="航班描述:" prop="flightsDescription" label-width="160px">
  260. <el-input type="textarea" :rows="5"
  261. placeholder="请严格遵守此格式!!! 1. EK363 R1 WE08MAR CANDXB HK7 0015 0515 SEAME 2 3 (注意空格以及多条数据换行)"
  262. v-model="airTicketResOpData.flightsDescription" @change="flightsCodeChange"></el-input>
  263. </el-form-item>
  264. </div>
  265. </div>
  266. <div style="display: flex;">
  267. <div style="width: 25%;">
  268. <el-form-item label="航班简述:" label-width="160px" prop="flightsCode">
  269. <el-input placeholder="航班简述" v-model="airTicketResOpData.flightsCode">
  270. </el-input>
  271. </el-form-item>
  272. </div>
  273. <div style="width: 25%;">
  274. <el-form-item label="城 市:" prop="flightsCity" label-width="160px">
  275. <el-input placeholder="城市" v-model="airTicketResOpData.flightsCity">
  276. </el-input>
  277. </el-form-item>
  278. </div>
  279. <div style="width: 25%;">
  280. <el-form-item label="航班日期:" prop="flightsDate" label-width="160px">
  281. <el-date-picker value-format="yyyy-MM-dd" v-model="airTicketResOpData.flightsDate" type="date" placeholder="航班日期">
  282. </el-date-picker>
  283. </el-form-item>
  284. </div>
  285. <div style="width: 25%;">
  286. <el-form-item label="航班时间:" prop="flightsTime" label-width="160px">
  287. <el-time-select v-model="airTicketResOpData.flightsTime" placeholder="航班时间">
  288. </el-time-select>
  289. </el-form-item>
  290. </div>
  291. </div>
  292. <div style="width: 100%;">
  293. <el-form-item label="此舱位客人名称:" prop="clientName" label-width="160px">
  294. <el-select style="width: 100%;" v-model="airTicketResOpData.clientName" placeholder="此舱位客人名称" multiple clearable
  295. filterable @change="clientNamechange">
  296. <el-option v-for="item in fliterClient" :key="item.id" :label="item.name" :value="item.id">
  297. </el-option>
  298. </el-select>
  299. </el-form-item>
  300. </div>
  301. <div style="display: flex;">
  302. <div style="width: 25%;">
  303. <el-form-item label="此舱位人数:" prop="clientNum" label-width="160px">
  304. <el-input placeholder="此舱位人数" v-model="airTicketResOpData.clientNum" @input="peiceinput">
  305. </el-input>
  306. </el-form-item>
  307. </div>
  308. <div style="width: 25%;">
  309. <el-form-item label="是否值机: " label-width="160px">
  310. <el-radio-group v-model="airTicketResOpData.isCheckIn">
  311. <el-radio :label=1>是</el-radio>
  312. <el-radio :label=0>否</el-radio>
  313. </el-radio-group>
  314. </el-form-item>
  315. </div>
  316. <div style="width: 25%;">
  317. <el-form-item label="是否选座:" label-width="160px">
  318. <el-radio-group v-model="airTicketResOpData.isSetSeat">
  319. <el-radio :label=1>是</el-radio>
  320. <el-radio :label=0>否</el-radio>
  321. </el-radio-group>
  322. </el-form-item>
  323. </div>
  324. <div style="width: 25%;">
  325. <el-form-item label="是否购买行李:" label-width="160px">
  326. <el-radio-group v-model="airTicketResOpData.isPackage">
  327. <el-radio :label=1>是</el-radio>
  328. <el-radio :label=0>否</el-radio>
  329. </el-radio-group>
  330. </el-form-item>
  331. </div>
  332. </div>
  333. <div style="display: flex;">
  334. <div style="width: 25%;">
  335. <el-form-item label="是否行李直挂:" label-width="160px">
  336. <el-radio-group v-model="airTicketResOpData.isBagHandle">
  337. <el-radio :label=1>是</el-radio>
  338. <el-radio :label=0>否</el-radio>
  339. </el-radio-group>
  340. </el-form-item>
  341. </div>
  342. <div style="width: 25%;">
  343. <el-form-item label="是否火车票出票选座:" label-width="160px">
  344. <el-radio-group v-model="airTicketResOpData.isTrain">
  345. <el-radio :label=1>是</el-radio>
  346. <el-radio :label=0>否</el-radio>
  347. </el-radio-group>
  348. </el-form-item>
  349. </div>
  350. </div>
  351. <div style="display: flex;">
  352. </div>
  353. <div style="display: flex;">
  354. <div style="width: 100%;">
  355. <el-form-item label="费用描述:" prop="priceDescription" label-width="160px">
  356. <el-input type="textarea" :rows="3" placeholder="费用描述"
  357. v-model="airTicketResOpData.priceDescription"></el-input>
  358. </el-form-item>
  359. </div>
  360. </div>
  361. <div style="display: flex;">
  362. <div style="width: 100%;">
  363. <el-form-item label="备 注:" prop="Remark" label-width="160px">
  364. <el-input type="textarea" :rows="3" placeholder="备注"
  365. v-model="airTicketResOpData.remark"></el-input>
  366. </el-form-item>
  367. </div>
  368. </div>
  369. </el-form>
  370. <div style="margin-top: 20px;">
  371. <div class="communal-title">付款申请</div>
  372. <hr style='background-color:#5555; height:1px; border:none;margin: 10px 0;' />
  373. </div>
  374. <el-form :model="cardPaymentOpData" ref="cardPaymentOpData" :rules="cardPaymentRules" label-width="130px"
  375. class="demo-ruleForm">
  376. <div style="display: flex;">
  377. <div style="width: 25%;">
  378. <el-form-item label="支付方式:" prop="payDId">
  379. <el-select v-model="cardPaymentOpData.payDId" placeholder="支付方式" style="width: 100%;"
  380. @change="payChange">
  381. <el-option v-for="item in payment" :key="item.id" :label="item.name" :value="item.id">
  382. </el-option>
  383. </el-select>
  384. </el-form-item>
  385. </div>
  386. <!-- <div style="width: 25%;">
  387. <el-form-item label="消费方式:" prop="consumptionPatterns">
  388. <el-input placeholder="消费方式" v-model="cardPaymentOpData.consumptionPatterns">
  389. </el-input>
  390. </el-form-item>
  391. </div> -->
  392. <div style="width: 25%;">
  393. <el-form-item label="消费日期:" prop="visitCountry">
  394. <el-date-picker value-format="yyyy-MM-dd" v-model="cardPaymentOpData.consumptionDate" placeholder="消费日期" type="date">
  395. </el-date-picker>
  396. </el-form-item>
  397. </div>
  398. <div style="width: 25%;">
  399. <el-form-item label="付款金额:" prop="payMoney">
  400. <el-input placeholder="付款金额" v-model="cardPaymentOpData.payMoney" style="width: 52%;"
  401. :disabled="true">
  402. </el-input>
  403. <el-select v-model="cardPaymentOpData.paymentCurrency" style="width: 45%;" :disabled="true">
  404. <el-option v-for="item in rateList" :key="item.currencyId" :label="item.currencyCode"
  405. :value="item.currencyId"></el-option>
  406. </el-select>
  407. </el-form-item>
  408. </div>
  409. </div>
  410. <div v-if="cardPaymentOpData.payDId == 72">
  411. <div style="display: flex;">
  412. <div style="width: 25%;">
  413. <el-form-item label="卡类型:" prop="ctdId">
  414. <el-select v-model="cardPaymentOpData.ctdId" placeholder="卡类型" style="width: 100%;"
  415. @change="ctdChange">
  416. <el-option v-for="item in cardType" :key="item.id" :label="item.name" :value="item.id">
  417. </el-option>
  418. </el-select>
  419. </el-form-item>
  420. </div>
  421. <div style="width: 25%;">
  422. <el-form-item label="银行卡号:" prop="bankNo">
  423. <el-input placeholder="银行卡号" v-model="cardPaymentOpData.bankNo" :disabled="true">
  424. </el-input>
  425. </el-form-item>
  426. </div>
  427. <div style="width: 25%;">
  428. <el-form-item label="持卡人姓名:" prop="cardholderName">
  429. <el-input placeholder="持卡人姓名" v-model="cardPaymentOpData.cardholderName" :disabled="true">
  430. </el-input>
  431. </el-form-item>
  432. </div>
  433. </div>
  434. </div>
  435. <div v-else-if="cardPaymentOpData.payDId == 73">
  436. <div style="display: flex;">
  437. <div style="width: 25%;">
  438. <el-form-item label="公司银行账号:">
  439. <el-input placeholder="公司银行账号" v-model="cardPaymentOpData.companyBankNo">
  440. </el-input>
  441. </el-form-item>
  442. </div>
  443. <div style="width: 25%;">
  444. <el-form-item label="对方开户行:" prop="otherBankName">
  445. <el-input placeholder="对方开户行:" v-model="cardPaymentOpData.otherBankName">
  446. </el-input>
  447. </el-form-item>
  448. </div>
  449. <div style="width: 25%;">
  450. <el-form-item label="对方银行卡号:" prop="otherSideNo">
  451. <el-input placeholder="对方银行卡号" v-model="cardPaymentOpData.otherSideNo">
  452. </el-input>
  453. </el-form-item>
  454. </div>
  455. <div style="width: 25%;">
  456. <el-form-item label="对方姓名:" prop="otherSideName">
  457. <el-input placeholder="对方姓名" v-model="cardPaymentOpData.otherSideName">
  458. </el-input>
  459. </el-form-item>
  460. </div>
  461. </div>
  462. </div>
  463. <div v-else-if="cardPaymentOpData.payDId == 83">
  464. <div style="display: flex;">
  465. <div style="width: 25%;">
  466. <el-form-item label="对方开户行:" prop="otherBankName">
  467. <el-input placeholder="对方开户行" v-model="cardPaymentOpData.otherBankName">
  468. </el-input>
  469. </el-form-item>
  470. </div>
  471. <div style="width: 25%;">
  472. <el-form-item label="对方银行卡号:" prop="otherSideNo">
  473. <el-input placeholder="对方银行卡号" v-model="cardPaymentOpData.otherSideNo">
  474. </el-input>
  475. </el-form-item>
  476. </div>
  477. <div style="width: 25%;">
  478. <el-form-item label="对方姓名:" prop="otherSideName">
  479. <el-input placeholder="对方姓名" v-model="cardPaymentOpData.otherSideName">
  480. </el-input>
  481. </el-form-item>
  482. </div>
  483. </div>
  484. </div>
  485. <div v-else></div>
  486. <div style="display:flex;">
  487. <div style="width: 25%;">
  488. <el-form-item label="收款方:" prop="payee">
  489. <el-input placeholder="对方姓名:" v-model="cardPaymentOpData.payee">
  490. </el-input>
  491. </el-form-item>
  492. </div>
  493. <div style="width: 25%;">
  494. <el-form-item label="费用标识:" prop="orbitalPrivateTransfer">
  495. <el-select v-model="cardPaymentOpData.orbitalPrivateTransfer" placeholder="费用标识"
  496. style="width: 100%;">
  497. <el-option key="0" label="公转" :value=0>
  498. </el-option>
  499. <el-option key="1" label="私转" :value=1>
  500. </el-option>
  501. </el-select>
  502. </el-form-item>
  503. </div>
  504. <div style="width: 25%;">
  505. <el-form-item label="出票方合作方资料:" prop="visitCountry">
  506. <el-select v-model="airTicketAgentsId" placeholder="出票方合作方资料" style="width: 100%;"
  507. @change="Agents">
  508. <el-option v-for="item in airTicketAgents" :key="item.id" :label="item.name"
  509. :value="item.id">
  510. </el-option>
  511. </el-select>
  512. </el-form-item>
  513. </div>
  514. </div>
  515. <div style="display: flex;">
  516. <div style="width: 100%;">
  517. <el-form-item label="备 注:" prop="Remark">
  518. <el-input type="textarea" :rows="5" placeholder="备注"
  519. v-model="cardPaymentOpData.remark"></el-input>
  520. </el-form-item>
  521. </div>
  522. </div>
  523. <el-form-item>
  524. <div style="text-align: right;">
  525. <el-button :disabled="addBtndisabled" type="primary" @click="addBtn">保存</el-button>
  526. <el-button @click="back()">取消</el-button>
  527. </div>
  528. </el-form-item>
  529. </el-form>
  530. </div>
  531. </div>
  532. </template>
  533. <script>
  534. import { pinyin } from 'pinyin-pro';
  535. export default {
  536. data() {
  537. return {
  538. fullscreenLoading:false,
  539. airTicketResRules: {
  540. cType: [
  541. { required: true, message: '请选择舱位类型', trigger: ['blur', 'change'] }
  542. ],
  543. prePrice: [
  544. { required: true, message: '请输入机票单价', trigger: ['blur', 'change'] },
  545. ],
  546. clientNum: [
  547. { required: true, message: '请输入舱位人数', trigger: ['blur', 'change'] },
  548. ],
  549. flightsCode: [
  550. { required: true, message: '请输入航班描述', trigger: ['blur', 'change'] },
  551. ],
  552. flightsCity: [
  553. { required: true, message: '请输入城市', trigger: ['blur', 'change'] },
  554. ],
  555. flightsDate: [
  556. { required: true, message: '请选择航班日期', trigger: ['blur', 'change'] },
  557. ],
  558. flightsTime: [
  559. { required: true, message: '请选择航班时间', trigger: ['blur', 'change'] },
  560. ],
  561. clientName: [
  562. { type: "array", required: true, message: '请选择责任人', trigger: ['blur', 'change'] }
  563. ],
  564. flightsDescription: [
  565. { required: true, message: '请严格遵守格式,正确填写', trigger: ['blur', 'change'] },
  566. ],
  567. preCurrency: [
  568. { required: true, message: '请选择币种', trigger: ['blur', 'change'] }
  569. ]
  570. },
  571. cardPaymentRules: {
  572. payDId: [
  573. { required: true, message: '请选择支付方式', trigger: ['blur', 'change'] },
  574. ],
  575. consumptionPatterns: [
  576. { required: true, message: '请输入消费方式', trigger: ['blur', 'change'] },
  577. ],
  578. payee: [
  579. { required: true, message: '请输入收款方', trigger: ['blur', 'change'] },
  580. ],
  581. orbitalPrivateTransfer: [
  582. { required: true, message: '请选择费用表示', trigger: ['blur', 'change'] },
  583. ],
  584. // ctdId: [
  585. // { required: true, message: '请选择卡类型', trigger: ['blur', 'change'] },
  586. // ]
  587. },
  588. title: "新增机票费用录入",
  589. token: '',
  590. userId: 0,
  591. id: '',
  592. DiId: '',
  593. isShow: false,
  594. DiIdSelect: '',
  595. delegationInfo: {},
  596. AirTicketResSelectData: [],//团组下拉框
  597. AirTicketResSelectDatas: [],//团组下拉框
  598. selectLoading:false,
  599. ticketClass: [],//舱位下拉框
  600. payment: [],//支付方式下拉框
  601. cardType: [],//卡类型下拉框
  602. airTicketAgents: [],//合作的代理资料
  603. airTicketAgentsId: '',
  604. clientNameId: [
  605. {
  606. firstName: "程单",
  607. id: -1,
  608. lastName: "行",
  609. phone: "行程单",
  610. pinyin: "行程单"
  611. }
  612. ],//客人姓名
  613. clientNameList: [],
  614. airGroupCostParameter: {},//机票成本预算
  615. status: 0,
  616. airTicketResOpData: {
  617. id: 0,
  618. diId: 0,
  619. cType: 460,
  620. prePrice: 0,
  621. preCurrency: 836,
  622. price: 0,
  623. currency: 836,
  624. clientNum: 0,
  625. clientName: [],
  626. isCheckIn: 0,
  627. isSetSeat: 0,
  628. isPackage: 0,
  629. isBagHandle: 0,
  630. isTrain: 0,
  631. flightsCode: '',
  632. flightsDate: '',
  633. flightsTime: '',
  634. flightsCity: '',
  635. flightsDescription: '',
  636. priceDescription: '',
  637. ticketNumber: '',
  638. ticketCode: '',
  639. createUserId: 0,
  640. remark: ''
  641. },
  642. cardPaymentOpData: {
  643. id: 0,
  644. payDId: 72,
  645. consumptionPatterns: '暂无',
  646. consumptionDate: this.transformDateFormat(new Date()),
  647. ctdId: '',
  648. bankNo: '',
  649. cardholderName: 'Zhang Hailin',
  650. payMoney: 0,
  651. paymentCurrency: 836,
  652. companyBankNo: '',
  653. otherBankName: '',
  654. otherSideNo: '',
  655. otherSideName: '',
  656. mfOperator: 0,
  657. mfOperatorDate: '',
  658. diId: this.DiId,
  659. payThenMoney: 0,
  660. payee: '',
  661. createUserId: 0,
  662. orbitalPrivateTransfer: '',
  663. remark: ''
  664. },
  665. IsAuditGM: 0,
  666. rateList: [],
  667. budgeting:[],
  668. rollcallarr:[],
  669. addBtndisabled:false,
  670. }
  671. },
  672. methods: {
  673. //联想
  674. GroupFeeKeywordSearch(query) {
  675. if (query !== '') {
  676. this.selectLoading=true;
  677. var url = "/api/search/GroupFeeKeywordSearch/" +this.userId+'/'+85 +'/'+query
  678. var that = this
  679. this.$axios({
  680. method: 'get',
  681. url: url,
  682. headers: {
  683. Authorization: 'Bearer ' + this.token
  684. },
  685. }).then(function (res) {
  686. if (res.data.code == 200) {
  687. that.AirTicketResSelectDatas = res.data.data;
  688. }else{
  689. that.AirTicketResSelectDatas=[];
  690. }
  691. }).finally(()=>{
  692. that.selectLoading=false;
  693. })
  694. }else{
  695. this.AirTicketResSelectDatas=this.AirTicketResSelectData;
  696. }
  697. },
  698. //拼音
  699. pinyingxing(val){
  700. return pinyin(val, { toneType: 'none' }).toUpperCase();
  701. },
  702. //fenge
  703. fgarr(val){
  704. val=val+""
  705. return val.split(' ')[0]
  706. },
  707. //保留两位小数
  708. townum(val){
  709. return val.toFixed(2)
  710. },
  711. clientNamechange(val) {
  712. console.log(val.length)
  713. this.airTicketResOpData.clientNum = val.length;
  714. this.cardPaymentOpData.payMoney = parseFloat(parseFloat(this.airTicketResOpData.prePrice) * parseFloat(this.airTicketResOpData.clientNum)).toFixed(2)
  715. this.cardPaymentOpData.payThenMoney = this.cardPaymentOpData.payMoney
  716. this.airTicketResOpData.price = parseFloat(parseFloat(this.airTicketResOpData.prePrice) * parseFloat(this.airTicketResOpData.clientNum)).toFixed(2)
  717. },
  718. //团组下拉框(下拉列表加载)
  719. AirTicketResSelect() {
  720. var url = "/api/Groups/AirTicketResSelect"
  721. var that = this
  722. this.$axios({
  723. method: 'post',
  724. url: url,
  725. headers: {
  726. Authorization: 'Bearer ' + this.token
  727. },
  728. data: {
  729. userId: that.userId
  730. }
  731. }).then(function (res) {
  732. if (res.data.code == 200) {
  733. console.log(res);
  734. that.AirTicketResSelectData = res.data.data.groupName; //团组下拉列表
  735. that.AirTicketResSelectDatas = that.AirTicketResSelectData; //团组下拉列表
  736. that.ticketClass = res.data.data.ticketClass;//舱位下拉框
  737. that.payment = res.data.data.payment;//支付方式下拉框
  738. that.cardType = res.data.data.cardType;//卡类型下拉框
  739. if(that.cardPaymentOpData.ctdId==''){
  740. that.cardPaymentOpData.ctdId=that.cardType[0].id;
  741. }
  742. that.cardPaymentOpData.bankNo=that.cardType[0].remark;
  743. that.airTicketAgents = res.data.data.airTicketAgents//合作方资料下拉框
  744. that.DiIdSelect = parseInt(that.DiId); //选中团组
  745. that.getcostbudgeting();
  746. that.PostTourClientListByDiId();
  747. //that.QueryTankType();
  748. }
  749. })
  750. },
  751. //获取客户名单info
  752. PostTourClientListByDiId(val) {
  753. this.rollcallarr=[];
  754. var that = this
  755. var url = "/api/Groups/PostTourClientListByDiId"
  756. this.$axios({
  757. method: 'post',
  758. url: url,
  759. headers: {
  760. Authorization: 'Bearer ' + that.token
  761. },
  762. data: {
  763. portType:1,
  764. diid: val?val:that.DiId,
  765. pageId:104,
  766. userId:that.userId
  767. }
  768. }).then(function (res) {
  769. if (res.data.code == 200) {
  770. that.rollcallarr=res.data.data;
  771. } else {
  772. that.$message.error(res.data.msg);
  773. }
  774. })
  775. },
  776. //团组切换
  777. AirTicketResChange(val) {
  778. this.getcostbudgeting();
  779. this.AirTicketResList();
  780. this.QueryClient();
  781. this.PostTourClientListByDiId(val);
  782. },
  783. //获取成本提示
  784. getcostbudgeting(){
  785. this.budgeting=[];
  786. var url = "/api/Groups/PostGroupCostModulePrompt"
  787. var that = this
  788. this.$axios({
  789. method: 'post',
  790. url: url,
  791. headers: {
  792. Authorization: 'Bearer ' + this.token
  793. },
  794. data: {
  795. userId: that.userId,
  796. diId: this.DiIdSelect ? this.DiIdSelect : this.DiId,
  797. cTable:85,
  798. }
  799. }).then(function (res) {
  800. if (res.data.code == 200) {
  801. console.log(res)
  802. that.budgeting=res.data.data.modulePromptInfos;
  803. } else {
  804. // that.$message.error(res.data.msg);
  805. }
  806. })
  807. },
  808. //团组基础信息以及成本信息
  809. AirTicketResList() {
  810. this.fullscreenLoading=true;
  811. var url = "/api/Groups/AirTicketResList"
  812. var that = this
  813. this.$axios({
  814. method: 'post',
  815. url: url,
  816. headers: {
  817. Authorization: 'Bearer ' + this.token
  818. },
  819. data: {
  820. userId: that.userId,
  821. portType: 1,
  822. diId: this.DiIdSelect ? this.DiIdSelect : this.DiId
  823. }
  824. }).then(function (res) {
  825. if (res.data.code == 200) {
  826. that.delegationInfo = res.data.data.delegationInfo;
  827. that.airGroupCostParameter = res.data.data.airGroupCostParameter;
  828. that.fullscreenLoading=false;
  829. }
  830. })
  831. },
  832. //(弃用 仓类型加载客户名单)
  833. QueryTankType() {
  834. var url = "/api/Groups/tankType"
  835. var that = this
  836. this.$axios({
  837. method: 'post',
  838. url: url,
  839. headers: {
  840. Authorization: 'Bearer ' + that.token
  841. },
  842. data: {
  843. id: that.airTicketResOpData.cType
  844. }
  845. }).then(function (res) {
  846. if (res.data.code == 200) {
  847. that.clientNameId = res.data.data
  848. that.AirTicketResList()
  849. }
  850. })
  851. },
  852. tankTypeChange() {
  853. //this.QueryTankType();
  854. },
  855. //点击保存事件
  856. addBtn() {
  857. this.addBtndisabled=true;
  858. if (this.IsAuditGM == 1) {
  859. this.$message.error('审核已通过,不可修改!');
  860. return
  861. } else {
  862. if (this.DiId == null || this.DiId == undefined||this.DiId == "") {
  863. this.$message.error("请选择团组名称");
  864. return;
  865. }
  866. const that = this;
  867. let formArr = ['airTicketResOpData', 'cardPaymentOpData']//三个form表单的ref
  868. var resultArr = [] //用来接受返回结果的数组
  869. function checkForm(formName) { //封装验证表单的函数
  870. var result = new Promise(function (resolve, reject) {
  871. that.$refs[formName].validate((valid) => {
  872. if (valid) {
  873. resolve();
  874. } else { reject() }
  875. })
  876. })
  877. resultArr.push(result) //push 得到promise的结果
  878. }
  879. formArr.forEach(item => { //根据表单的ref校验
  880. checkForm(item)
  881. })
  882. Promise.all(resultArr).then(values => {
  883. // that.airTicketResOpData.diId = parseInt(that.DiIdSelect);
  884. // that.airTicketResOpData.createUserId = that.userId;
  885. // var clientNameStr = ''
  886. // that.airTicketResOpData.clientName.forEach(function (item) {
  887. // clientNameStr += item + ","
  888. // });
  889. // that.airTicketResOpData.clientName = clientNameStr.substring(0, clientNameStr.length - 1)
  890. // that.cardPaymentOpData.createUserId = that.userId;
  891. // that.cardPaymentOpData.diId = parseInt(that.DiIdSelect);
  892. // if (that.cardPaymentOpData.ctdId == '') {
  893. // that.cardPaymentOpData.ctdId = 0;
  894. // }
  895. // if(that.cardPaymentOpData.payDId!=72){
  896. // that.cardPaymentOpData.ctdId=0
  897. // }
  898. // var url = "/api/Groups/OpAirTicketRes"
  899. // that.$axios({
  900. // method: 'post',
  901. // url: url,
  902. // headers: {
  903. // Authorization: 'Bearer ' + that.token
  904. // },
  905. // data: {
  906. // status: that.status,
  907. // airTicketResOpData: that.airTicketResOpData,
  908. // cardPaymentOpData: that.cardPaymentOpData
  909. // }
  910. // }).then(function (res) {
  911. // if (res.data.code == 200) {
  912. // that.$message({
  913. // message: res.data.msg,
  914. // type: 'success'
  915. // });
  916. // setTimeout(() => {
  917. // that.back();
  918. // }, 1000);
  919. // } else {
  920. // that.$message.error(res.data.msg);
  921. // }
  922. // }).catch(function (error) { // 此时必填完成,做保存后的业务操作
  923. // console.log(error)
  924. // }).finally(() => {
  925. // var ss = that.airTicketResOpData.clientName.split(',')
  926. // if (ss.length != 0) {
  927. // that.airTicketResOpData.clientName = [];
  928. // ss.forEach(function (item) {
  929. // if (item) {
  930. // that.airTicketResOpData.clientName.push(parseInt(item))
  931. // }
  932. // });
  933. // }
  934. // })
  935. new Promise(function (resolve, reject) {
  936. that.airTicketResOpData.diId = parseInt(that.DiIdSelect);
  937. that.airTicketResOpData.createUserId = that.userId;
  938. that.cardPaymentOpData.createUserId = that.userId;
  939. that.cardPaymentOpData.diId = parseInt(that.DiIdSelect);
  940. if (that.cardPaymentOpData.ctdId == '') {
  941. that.cardPaymentOpData.ctdId = 0;
  942. }
  943. if (that.cardPaymentOpData.payDId != 72) {
  944. that.cardPaymentOpData.ctdId = 0
  945. }
  946. var url = "/api/Groups/OpAirTicketRes"
  947. that.$axios({
  948. method: 'post',
  949. url: url,
  950. headers: {
  951. Authorization: 'Bearer ' + that.token
  952. },
  953. data: {
  954. status: that.status,
  955. airTicketResOpData: that.airTicketResOpData,
  956. cardPaymentOpData: that.cardPaymentOpData
  957. }
  958. }).then(function (res) {
  959. if (res.data.code == 200) {
  960. that.$message({
  961. message: res.data.msg,
  962. type: 'success'
  963. });
  964. resolve();
  965. } else {
  966. reject();
  967. that.$message.error(res.data.msg);
  968. }
  969. })
  970. }).then(() => {
  971. that.addBtndisabled=false;
  972. that.back();
  973. }).catch(() => {
  974. that.addBtndisabled=false;
  975. })
  976. }).catch(err => {
  977. this.addBtndisabled=false;
  978. this.$message.error('请完善信息在保存!');
  979. return false;
  980. })
  981. }
  982. },
  983. //根据机票费用录入Id查询c表和机票费用信息
  984. AirTicketResById() {
  985. var url = "/api/Groups/AirTicketResById"
  986. var that = this
  987. this.$axios({
  988. method: 'post',
  989. url: url,
  990. headers: {
  991. Authorization: 'Bearer ' + this.token
  992. },
  993. data: {
  994. id: this.id
  995. }
  996. }).then(function (res) {
  997. if (res.data.code == 200) {
  998. var airData = res.data.data.airTicket
  999. that.airTicketResOpData.id = airData.id
  1000. that.airTicketResOpData.diId = airData.diId
  1001. that.airTicketResOpData.cType = airData.cType
  1002. that.airTicketResOpData.prePrice = airData.prePrice
  1003. that.airTicketResOpData.preCurrency = airData.preCurrency
  1004. that.airTicketResOpData.price = airData.price
  1005. that.airTicketResOpData.currency = airData.currency
  1006. that.airTicketResOpData.clientNum = airData.clientNum
  1007. that.airTicketResOpData.isCheckIn = airData.isCheckIn
  1008. that.airTicketResOpData.isSetSeat = airData.isSetSeat
  1009. that.airTicketResOpData.isPackage = airData.isPackage
  1010. that.airTicketResOpData.isBagHandle = airData.isBagHandle
  1011. that.airTicketResOpData.isTrain = airData.isTrain
  1012. that.airTicketResOpData.flightsCode = airData.flightsCode
  1013. that.airTicketResOpData.flightsDate = airData.flightsDate
  1014. that.airTicketResOpData.flightsTime = airData.flightsTime
  1015. that.airTicketResOpData.flightsCity = airData.flightsCity
  1016. that.airTicketResOpData.flightsDescription = airData.flightsDescription
  1017. that.airTicketResOpData.priceDescription = airData.priceDescription
  1018. that.airTicketResOpData.ticketNumber = airData.ticketNumber
  1019. that.airTicketResOpData.ticketCode = airData.ticketCode
  1020. that.airTicketResOpData.createUserId = airData.createUserId
  1021. that.airTicketResOpData.remark = airData.remark
  1022. var ss = airData.clientName.split(',')
  1023. that.airTicketResOpData.clientName = [];
  1024. ss.forEach(function (item) {
  1025. console.log()
  1026. console.log(item)
  1027. if(!item.includes('.')){
  1028. that.airTicketResOpData.clientName.push(parseInt(item))
  1029. }else{
  1030. that.airTicketResOpData.clientName=[]
  1031. }
  1032. });
  1033. that.prePrice = res.data.data.airTicket.prePrice
  1034. that.currencyId = res.data.data.airTicket.preCurrency
  1035. that.clientNum = res.data.data.airTicket.clientNum
  1036. var creData = res.data.data.creditCard;
  1037. that.cardPaymentOpData.id = creData.id
  1038. that.cardPaymentOpData.payDId = creData.payDId
  1039. // that.cardPaymentOpData.consumptionPatterns = creData.consumptionPatterns
  1040. that.cardPaymentOpData.consumptionDate = creData.consumptionDate
  1041. that.cardPaymentOpData.bankNo = creData.bankNo
  1042. that.cardPaymentOpData.cardholderName = creData.cardholderName
  1043. that.cardPaymentOpData.payMoney = creData.payMoney
  1044. that.cardPaymentOpData.paymentCurrency = creData.paymentCurrency
  1045. that.cardPaymentOpData.companyBankNo = creData.companyBankNo
  1046. that.cardPaymentOpData.otherBankName = creData.otherBankName
  1047. that.cardPaymentOpData.otherSideNo = creData.otherSideNo
  1048. that.cardPaymentOpData.otherSideName = creData.otherSideName
  1049. that.cardPaymentOpData.mfOperator = creData.mfOperator
  1050. that.cardPaymentOpData.mfOperatorDate = creData.mfOperatorDate
  1051. that.cardPaymentOpData.diId = creData.diId
  1052. that.cardPaymentOpData.payThenMoney = creData.payThenMoney
  1053. that.cardPaymentOpData.payee = creData.payee
  1054. that.cardPaymentOpData.createUserId = creData.createUserId
  1055. that.cardPaymentOpData.orbitalPrivateTransfer = creData.orbitalPrivateTransfer
  1056. that.cardPaymentOpData.remark = creData.remark
  1057. that.IsAuditGM = creData.isAuditGM
  1058. if (creData.ctdId == 0) {
  1059. that.cardPaymentOpData.ctdId = ""
  1060. } else {
  1061. that.cardPaymentOpData.ctdId = parseInt(creData.ctdId)
  1062. }
  1063. console.log(that.cardPaymentOpData.ctdId);
  1064. that.cardPaymentOpData.orbitalPrivateTransfer = parseInt(creData.orbitalPrivateTransfer)
  1065. }
  1066. })
  1067. },
  1068. //支付方式change事件
  1069. payChange() {
  1070. this.cardPaymentOpData.ctdId = '';
  1071. this.cardPaymentOpData.bankNo = '';
  1072. this.cardPaymentOpData.cardholderName = 'Zhang Hailin';
  1073. this.cardPaymentOpData.companyBankNo = '';
  1074. this.cardPaymentOpData.otherBankName = '';
  1075. this.cardPaymentOpData.otherSideNo = '';
  1076. this.cardPaymentOpData.otherSideName = '';
  1077. this.cardPaymentOpData.mfOperator = 0;
  1078. this.cardPaymentOpData.payee = '';
  1079. this.cardPaymentOpData.orbitalPrivateTransfer = '';
  1080. this.cardPaymentOpData.remark = ''
  1081. },
  1082. //合作方下拉选择事件
  1083. Agents(Id) {
  1084. for (var i = 0; i < this.airTicketAgents.length; i++) {
  1085. if (this.airTicketAgents[i].id == parseInt(Id)) {
  1086. this.cardPaymentOpData.payee = this.airTicketAgents[i].name
  1087. this.cardPaymentOpData.otherBankName = this.airTicketAgents[i].bank
  1088. this.cardPaymentOpData.otherSideNo = this.airTicketAgents[i].account
  1089. }
  1090. }
  1091. },
  1092. //卡类型选择事件
  1093. ctdChange(id) {
  1094. this.airTicketAgentsId = '';
  1095. for (var i = 0; i < this.cardType.length; i++) {
  1096. if (this.cardType[i].id == parseInt(id)) {
  1097. this.cardPaymentOpData.bankNo = this.cardType[i].remark
  1098. }
  1099. }
  1100. },
  1101. //单价值改变事件
  1102. peiceinput() {
  1103. this.cardPaymentOpData.payMoney = parseFloat(parseFloat(this.airTicketResOpData.prePrice) * parseFloat(this.airTicketResOpData.clientNum)).toFixed(2);
  1104. if (isNaN(this.cardPaymentOpData.payMoney)) {
  1105. this.cardPaymentOpData.payMoney = 0;
  1106. }
  1107. this.cardPaymentOpData.payThenMoney = this.cardPaymentOpData.payMoney;
  1108. this.airTicketResOpData.price = parseFloat(parseFloat(this.airTicketResOpData.prePrice) * parseFloat(this.airTicketResOpData.clientNum)).toFixed(2);
  1109. if (isNaN(this.airTicketResOpData.price)) {
  1110. this.airTicketResOpData.price = 0;
  1111. }
  1112. },
  1113. currencyChange(Id) {
  1114. this.cardPaymentOpData.paymentCurrency = Id;
  1115. this.airTicketResOpData.preCurrency = Id;
  1116. this.airTicketResOpData.currency = Id;
  1117. },
  1118. //航班描述值改变事件
  1119. flightsCodeChange(val) {
  1120. var reg = /[\r\n]+/g;
  1121. var that = this;
  1122. that.airTicketResOpData.flightsCode = ''
  1123. that.airTicketResOpData.flightsCity = ''
  1124. var dateTime = [];
  1125. if (reg.test(val)) {
  1126. var attrsList = val.split(reg)
  1127. attrsList.forEach(function (item, index) {
  1128. var ss = item.split(' ')
  1129. for (var i = 0; i < ss.length; i++) {
  1130. ss[i] = ss[i].trim();
  1131. if (!ss[i]) {
  1132. ss.splice(i, 1);
  1133. i--;
  1134. }
  1135. }
  1136. ss = ss;
  1137. that.airTicketResOpData.flightsCode += ss[1] + '/'//航班号
  1138. that.airTicketResOpData.flightsCity += ss[4].substring(0, 3) + '-' + ss[4].substring(3) + '/'//城市
  1139. var dateStr = ss[3].substring(4)
  1140. switch (dateStr) {
  1141. case "JAN":
  1142. dateStr = "01";
  1143. break;
  1144. case "FEB":
  1145. dateStr = "02";
  1146. break;
  1147. case "MAR":
  1148. dateStr = "03";
  1149. break;
  1150. case "APR":
  1151. dateStr = "04";
  1152. break;
  1153. case "MAY":
  1154. dateStr = "05";
  1155. break;
  1156. case "JUN":
  1157. dateStr = "06";
  1158. break;
  1159. case "JUL":
  1160. dateStr = "07";
  1161. break;
  1162. case "AUG":
  1163. dateStr = "08";
  1164. break;
  1165. case "SEP":
  1166. dateStr = "09";
  1167. break;
  1168. case "OCT":
  1169. dateStr = "10";
  1170. break;
  1171. case "NOV":
  1172. dateStr = "11";
  1173. break;
  1174. case "DEC":
  1175. dateStr = "12";
  1176. break;
  1177. }
  1178. dateTime.push({
  1179. date: new Date(new Date().getFullYear() + '-' + dateStr + '-' + ss[3].substring(2, 4)),
  1180. time: ss[6].substring(0, 2) + ':' + ss[6].substring(2)
  1181. })//日期
  1182. });
  1183. that.airTicketResOpData.flightsCode = that.airTicketResOpData.flightsCode.substring(0, that.airTicketResOpData.flightsCode.length - 1)//航班号
  1184. that.airTicketResOpData.flightsCity = that.airTicketResOpData.flightsCity.substring(0, that.airTicketResOpData.flightsCity.length - 1)//城市
  1185. var compare = function (obj1, obj2) {
  1186. var val1 = obj1.date;
  1187. var val2 = obj2.date;
  1188. if (val1 < val2) {
  1189. return -1;
  1190. } else if (val1 > val2) {
  1191. return 1;
  1192. } else {
  1193. return 0;
  1194. }
  1195. }
  1196. dateTime = dateTime.sort(compare);
  1197. that.airTicketResOpData.flightsTime = dateTime[0].time
  1198. that.airTicketResOpData.flightsDate = dateTime[0].date
  1199. } else {
  1200. var ss = val.split(' ')
  1201. for (var i = 0; i < ss.length; i++) {
  1202. ss[i] = ss[i].trim();
  1203. if (!ss[i]) {
  1204. ss.splice(i, 1);
  1205. i--;
  1206. }
  1207. }
  1208. ss = ss;
  1209. that.airTicketResOpData.flightsCode = ss[1]//航班号
  1210. that.airTicketResOpData.flightsCity += ss[4].substring(0, 3) + '-' + ss[4].substring(3)//城市
  1211. that.airTicketResOpData.flightsTime = ss[6].substring(0, 2) + ':' + ss[6].substring(2)//时间
  1212. var dateStr = ss[3].substring(4)
  1213. switch (dateStr) {
  1214. case "JAN":
  1215. dateStr = "01";
  1216. break;
  1217. case "FEB":
  1218. dateStr = "02";
  1219. break;
  1220. case "MAR":
  1221. dateStr = "03";
  1222. break;
  1223. case "APR":
  1224. dateStr = "04";
  1225. break;
  1226. case "MAY":
  1227. dateStr = "05";
  1228. break;
  1229. case "JUN":
  1230. dateStr = "06";
  1231. break;
  1232. case "JUL":
  1233. dateStr = "07";
  1234. break;
  1235. case "AUG":
  1236. dateStr = "08";
  1237. break;
  1238. case "SEP":
  1239. dateStr = "09";
  1240. break;
  1241. case "OCT":
  1242. dateStr = "10";
  1243. break;
  1244. case "NOV":
  1245. dateStr = "11";
  1246. break;
  1247. case "DEC":
  1248. dateStr = "12";
  1249. break;
  1250. }
  1251. that.airTicketResOpData.flightsDate = new Date().getFullYear() + '-' + dateStr + '-' + ss[3].substring(2, 4)
  1252. }
  1253. },
  1254. //加载团组客户名单
  1255. QueryClient() {
  1256. this.clientNameId= [
  1257. {
  1258. firstName: "程单",
  1259. id: -1,
  1260. lastName: "行",
  1261. phone: "行程单",
  1262. pinyin: "行程单"
  1263. }
  1264. ]
  1265. var url = "/api/Groups/QueryClientInfoByDIID"
  1266. var that = this
  1267. this.$axios({
  1268. method: 'post',
  1269. url: url,
  1270. headers: {
  1271. Authorization: 'Bearer ' + that.token
  1272. },
  1273. data: {
  1274. diid: this.DiIdSelect ? this.DiIdSelect : this.DiId
  1275. }
  1276. }).then(function (res) {
  1277. if (res.data.code == 200) {
  1278. //客户名单
  1279. console.log(res.data.data);
  1280. for(let j=0;j<res.data.data.length;j++){
  1281. that.clientNameId.push(res.data.data[j])
  1282. }
  1283. }
  1284. })
  1285. },
  1286. back() {
  1287. this.$router.push({
  1288. path: "/home/AirTicketRes",
  1289. query: {
  1290. DiId: this.DiIdSelect ? this.DiIdSelect : this.DiId,
  1291. }
  1292. })
  1293. },
  1294. QueryRate() {
  1295. var url = "/api/Business/PostGroupTeamRateByDiIdAndCTableId"
  1296. var that = this
  1297. this.$axios({
  1298. method: 'post',
  1299. url: url,
  1300. headers: {
  1301. Authorization: 'Bearer ' + that.token
  1302. },
  1303. data: {
  1304. "portType": 1,
  1305. "diId": this.DiIdSelect ? this.DiIdSelect : this.DiId,
  1306. "cTable": 85
  1307. }
  1308. }).then(function (res) {
  1309. if (res.data.code == 200) {
  1310. //汇率
  1311. console.log("汇率--", res.data.data);
  1312. that.rateList = res.data.data.teamRates;
  1313. }
  1314. })
  1315. }
  1316. },
  1317. mounted() {
  1318. this.token = JSON.parse(localStorage.getItem('userinif')).token;
  1319. this.userId = JSON.parse(localStorage.getItem('userinif')).userInfo.userId
  1320. this.id = this.$route.query.id
  1321. this.DiId = this.$route.query.DiId
  1322. this.QueryRate(); //团组机票汇率
  1323. this.AirTicketResSelect(); //加载所有下拉框
  1324. this.QueryClient(); //加载客户名单
  1325. this.AirTicketResList();//加载团组基础信息以及成本信息
  1326. var that = this
  1327. if (that.DiId != undefined && that.id != undefined) {
  1328. that.status = 2;
  1329. that.isShow = true
  1330. that.AirTicketResById(); //加载单条数据信息
  1331. } else {
  1332. that.isShow = false
  1333. that.status = 1;
  1334. }
  1335. },
  1336. computed: {
  1337. //客户名单属性
  1338. fliterClient() {
  1339. var arr = [];
  1340. if (this.clientNameId.length < 1) {
  1341. return [];
  1342. }
  1343. this.clientNameId.forEach(element => {
  1344. var item = "";
  1345. if (element.pinyin) {
  1346. item += element.pinyin;
  1347. }
  1348. if (element.firstName && element.lastName) {
  1349. item += "(" + element.lastName + element.firstName + ")";
  1350. }
  1351. if (item) {
  1352. arr.push({ id: element.id, name: item });
  1353. }
  1354. });
  1355. return arr;
  1356. }
  1357. }
  1358. }
  1359. </script>
  1360. <style>
  1361. .communal-list {
  1362. background-color: #fff;
  1363. padding: 10px;
  1364. box-shadow: 0 0 5px #0005;
  1365. border-radius: 10px;
  1366. }
  1367. .car_add .communal-title {
  1368. display: flex;
  1369. font-size: 17px;
  1370. font-weight: 600;
  1371. color: #555;
  1372. margin-bottom: 20px;
  1373. justify-content: space-between;
  1374. align-items: center;
  1375. }
  1376. .appraise-box {
  1377. display: flex;
  1378. flex-wrap: wrap;
  1379. justify-content: space-between;
  1380. margin: 50px 0;
  1381. }
  1382. .appraise-box>div {
  1383. width: 30%;
  1384. }
  1385. .communal-box {
  1386. display: flex;
  1387. }
  1388. .communal-box>button {
  1389. margin-left: 10px;
  1390. padding: 8px 20px;
  1391. }
  1392. .car_add .el-date-editor.el-input{
  1393. width: 100%;
  1394. }
  1395. .car_add {
  1396. background-color: #fff;
  1397. padding: 20px;
  1398. box-shadow: 0 0 5px #0005;
  1399. border-radius: 10px;
  1400. }
  1401. .opcostbudgeting{
  1402. color: red;
  1403. font-size: 14px;
  1404. }
  1405. .opcostbudgeting-li{
  1406. margin: 5px 0;
  1407. }
  1408. @media screen and (max-width: 1700px) {
  1409. .appraise-box>div {
  1410. width: 48%;
  1411. }
  1412. .appraise-box>div el-form-item__content {
  1413. width: 260px !important;
  1414. }
  1415. }
  1416. </style>