index.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840
  1. <!--
  2. * @Author: your name
  3. * @Date: 2022-01-17 10:39:22
  4. * @LastEditTime: 2022-05-26 09:56:00
  5. * @LastEditors: your name
  6. * @Description: 航班视图
  7. -->
  8. <template>
  9. <div class="flight-view">
  10. <div class="flight-wrap">
  11. <div class="part1">
  12. <div class="title">
  13. {{ flightInfo.PlanDepartureApt }} - {{ flightInfo.FlightNO }} -
  14. {{ flightInfo.PlanLandingApt }}
  15. </div>
  16. <div class="part1_info">
  17. <div class="part1_info_box">
  18. <el-row>
  19. <el-col :span="12">
  20. <span>起飞机场简称:</span>
  21. </el-col>
  22. <el-col :span="12">
  23. <span>{{ flightInfo.departureName }}</span>
  24. </el-col>
  25. </el-row>
  26. <el-row>
  27. <el-col :span="12">
  28. <span>起飞机场三字码:</span>
  29. </el-col>
  30. <el-col :span="12">
  31. <span>{{ flightInfo.PlanDepartureApt }}</span>
  32. </el-col>
  33. </el-row>
  34. <el-row>
  35. <el-col :span="12">
  36. <span>起飞机场航站楼:</span>
  37. </el-col>
  38. <el-col :span="12">
  39. <span>{{ flightInfo.DepartureBuild }}</span>
  40. </el-col>
  41. </el-row>
  42. <el-row>
  43. <el-col :span="12">
  44. <span>
  45. 日期:
  46. {{ flightInfo.PlanDepartureTime && flightInfo.PlanDepartureTime.split("T")[0] }}
  47. </span>
  48. </el-col>
  49. <el-col :span="12">
  50. <span>
  51. 时间:
  52. {{ flightInfo.PlanDepartureTime && flightInfo.PlanDepartureTime.split("T")[1] }}
  53. </span>
  54. </el-col>
  55. </el-row>
  56. <el-row>
  57. <el-col :span="12">
  58. <span>登机口:{{ flightInfo.BordingGate }}</span>
  59. </el-col>
  60. <el-col :span="12">
  61. <span>停机位:{{ flightInfo.StandForDepartrue }}</span>
  62. </el-col>
  63. </el-row>
  64. </div>
  65. <div class="part1_info_box">
  66. <el-row>
  67. <el-col :span="12">
  68. <span>航班号:</span>
  69. </el-col>
  70. <el-col :span="12">
  71. <span>{{ flightInfo.FlightNO }}</span>
  72. </el-col>
  73. </el-row>
  74. <el-row>
  75. <el-col :span="12">
  76. <span>航班状态:</span>
  77. </el-col>
  78. <el-col :span="12">
  79. <span>{{ flightInfo.FlightStatus === null ? '正常' : flightInfo.FlightStatus }}</span>
  80. </el-col>
  81. </el-row>
  82. <el-row>
  83. <el-col :span="12">
  84. <span>托运旅客数:</span>
  85. </el-col>
  86. <el-col :span="12">
  87. <span>{{ flightInfo.count1 }}</span>
  88. </el-col>
  89. </el-row>
  90. <el-row>
  91. <el-col :span="12">
  92. <span>终点行李数:</span>
  93. </el-col>
  94. <el-col :span="12">
  95. <span>{{ flightInfo.count2 }}</span>
  96. </el-col>
  97. </el-row>
  98. <el-row>
  99. <el-col :span="12">
  100. <span>中转进行李数:</span><span>{{ flightInfo.count4 }}</span>
  101. </el-col>
  102. <el-col :span="12">
  103. <span>中转出行李数:</span><span>{{ flightInfo.count3 }}</span>
  104. </el-col>
  105. </el-row>
  106. </div>
  107. <div class="part1_info_box">
  108. <el-row>
  109. <el-col :span="12">
  110. <span>降落机场简称:</span>
  111. </el-col>
  112. <el-col :span="12">
  113. <span>{{ flightInfo.landingName }}</span>
  114. </el-col>
  115. </el-row>
  116. <el-row>
  117. <el-col :span="12">
  118. <span>降落机场三字码:</span>
  119. </el-col>
  120. <el-col :span="12">
  121. <span>{{ flightInfo.PlanLandingApt }}</span>
  122. </el-col>
  123. </el-row>
  124. <el-row>
  125. <el-col :span="12">
  126. <span>降落机场航站楼:</span>
  127. </el-col>
  128. <el-col :span="12">
  129. <span>{{ flightInfo.LandingBuild }}</span>
  130. </el-col>
  131. </el-row>
  132. <el-row>
  133. <el-col :span="12">
  134. <span>
  135. 日期:
  136. {{ flightInfo.ExpectLandingTime && flightInfo.ExpectLandingTime.split("T")[0] }}
  137. </span>
  138. </el-col>
  139. <el-col :span="12">
  140. <span>
  141. 时间:
  142. {{ flightInfo.ExpectLandingTime && flightInfo.ExpectLandingTime.split("T")[1] }}
  143. </span>
  144. </el-col>
  145. </el-row>
  146. <el-row>
  147. <el-col :span="12">
  148. <span>提取转盘:{{ flightInfo.Carousel }}</span>
  149. </el-col>
  150. <el-col :span="12">
  151. <span>停机位:{{ flightInfo.StandForLanding }}</span>
  152. </el-col>
  153. </el-row>
  154. </div>
  155. </div>
  156. </div>
  157. <div class="part2">
  158. <el-table
  159. ref="containerTable"
  160. :data="containerTableData"
  161. border
  162. style="width: 100%"
  163. height="344px"
  164. stripe
  165. size="mini"
  166. show-summary
  167. :summary-method="summaryMethod"
  168. :header-cell-style="{ color: '#101116' }"
  169. @row-click="containeClick"
  170. >
  171. <el-table-column
  172. v-for="col in containerTableColumn"
  173. :key="col.id"
  174. :prop="col.prop"
  175. :label="col.name"
  176. :align="col.align || 'center'"
  177. :show-overflow-tooltip="true"
  178. />
  179. </el-table>
  180. </div>
  181. <div
  182. class="part3"
  183. style="padding-right: 4px;"
  184. >
  185. <div class="title">中转进</div>
  186. <el-table
  187. ref="transferInBaggageTable"
  188. :data="transferInBaggageTableData"
  189. border
  190. style="width: 100%"
  191. height="162"
  192. stripe
  193. size="mini"
  194. show-summary
  195. :summary-method="summaryMethod"
  196. :header-cell-style="{ color: '#101116' }"
  197. :cell-class-name="cellClass"
  198. @cell-click="cellClickHandler"
  199. >
  200. <el-table-column
  201. v-for="col in transferInTableColumn"
  202. :key="col.id"
  203. :prop="col.prop"
  204. :label="col.name"
  205. :align="col.align || 'center'"
  206. :show-overflow-tooltip="true"
  207. />
  208. </el-table>
  209. </div>
  210. <div
  211. class="part3"
  212. style="padding-left: 4px;"
  213. >
  214. <div class="title">中转出</div>
  215. <el-table
  216. ref="transferOutBaggageTable"
  217. :data="transferOutBaggageTableData"
  218. border
  219. style="width: 100%"
  220. height="162"
  221. stripe
  222. size="mini"
  223. show-summary
  224. :summary-method="summaryMethod"
  225. :header-cell-style="{ color: '#101116' }"
  226. :cell-class-name="cellClass"
  227. @cell-click="cellClickHandler"
  228. >
  229. <el-table-column
  230. v-for="col in transferOutTableColumn"
  231. :key="col.id"
  232. :prop="col.prop"
  233. :label="col.name"
  234. :align="col.align || 'center'"
  235. :show-overflow-tooltip="true"
  236. />
  237. </el-table>
  238. </div>
  239. <div class="part4">
  240. <div class="title">
  241. <!-- <el-cascader
  242. placeholder="全部行李"
  243. :options="options"
  244. :props="props"
  245. collapse-tags
  246. size="mini"
  247. clearable
  248. /> -->
  249. <!-- <div class="search">
  250. <el-input
  251. v-model="keyWords"
  252. placeholder="请输入需要搜索姓名或行李编号"
  253. size="mini"
  254. style="width: 280px"
  255. />
  256. <el-button
  257. class="searchBtn"
  258. type="primary"
  259. size="mini"
  260. >搜索</el-button>
  261. </div> -->
  262. <TimeZoneSelector />
  263. <img
  264. class="btn-square"
  265. src="../../../../assets/baggage/ic_export.png"
  266. >
  267. <img
  268. class="btn-square"
  269. src="../../../../assets/baggage/ic_setting.png"
  270. @click="show"
  271. >
  272. </div>
  273. <el-table
  274. ref="flightBaggageTable"
  275. :data="filteredTableData"
  276. border
  277. style="width: 100%"
  278. height="320"
  279. stripe
  280. size="mini"
  281. show-summary
  282. :summary-method="summaryRow(flightBaggageTableData.length)"
  283. :header-cell-style="{ color: '#101116' }"
  284. :cell-class-name="cellClass"
  285. @cell-click="cellClickHandler"
  286. >
  287. <el-table-column
  288. v-for="col in tableColsCopy"
  289. :key="col.index"
  290. :prop="col.prop"
  291. :label="col.name"
  292. :align="col.align || 'center'"
  293. :width="col.width"
  294. :formatter="tableFormat"
  295. >
  296. <template #header>
  297. <div class="table-header-cell">
  298. <span>{{ col.name }}</span>
  299. <template v-if="flightBaggageTableFilters[col.prop]">
  300. <TableHeaderCellWithFilter
  301. :label="col.name"
  302. :filter-options="flightBaggageTableFilters[col.prop]"
  303. :filter-value.sync="filterValues[col.prop]"
  304. />
  305. </template>
  306. </div>
  307. </template>
  308. </el-table-column>
  309. </el-table>
  310. </div>
  311. </div>
  312. <!--列设置-->
  313. <Dialog
  314. :flag="dialogFlag"
  315. class="dialog-check-cols"
  316. >
  317. <div class="col-dialog">
  318. <div class="title">列设置</div>
  319. <div class="content">
  320. <el-tree
  321. :data="tableCols"
  322. :class="colsCheckClass"
  323. show-checkbox
  324. node-key="index"
  325. :default-expand-all="true"
  326. :props="{
  327. label: 'name',
  328. children: 'children'
  329. }"
  330. :default-checked-keys="checkedKeysTemp"
  331. @check="handleCheck"
  332. />
  333. </div>
  334. <div class="foot right t30">
  335. <el-button
  336. size="medium"
  337. class="r24"
  338. type="primary"
  339. @click="onCheck"
  340. >确定</el-button>
  341. <el-button
  342. size="medium"
  343. @click="hide"
  344. >取消</el-button>
  345. </div>
  346. </div>
  347. </Dialog>
  348. </div>
  349. </template>
  350. <script>
  351. import Dialog from '@/layout/components/Dialog/index.vue'
  352. import TimeZoneSelector from '@/components/TimeZoneSelector'
  353. import { queryMap, myQuery } from '@/api/dataIntegration'
  354. import tableColsMixin from '../../mixins/tableCols'
  355. import timeZoneMixin from '../../mixins/timeZone'
  356. import TableHeaderCellWithFilter from '@/components/TableHeaderCellWithFilter'
  357. import { setTableFilters } from '@/utils/table'
  358. // const arrivalBaggageTableColumn = [
  359. // { name: '序号', prop: 'index' },
  360. // { name: '旅客姓名', prop: 'name', sortable: 'custom' },
  361. // { name: '行李牌号', prop: 'bagNo' },
  362. // {
  363. // name: '特殊行李类型',
  364. // prop: 'specialType',
  365. // sortable: 'custom'
  366. // },
  367. // {
  368. // name: '容器编号',
  369. // prop: 'containerNo',
  370. // sortable: 'custom'
  371. // },
  372. // { name: '装载序号', prop: 'loadSequenceIndex' },
  373. // { name: '卸载', prop: 'uninstall' },
  374. // { name: '到达', prop: 'arrival' },
  375. // { name: '提取', prop: 'extract' },
  376. // { name: '旅客仓位', prop: 'positionNo' },
  377. // { name: '中转标志', prop: 'transitStatus' },
  378. // { name: '卷宗号', prop: 'fileNumber' }
  379. // ]
  380. const departureBaggageTableColumn = [
  381. // { name: '序号', prop: 'index' },
  382. { name: '旅客姓名', prop: 'PassengerNameUpcase', sortable: 'custom' },
  383. { name: '行李牌号', prop: 'BagSN' },
  384. {
  385. name: '特殊行李类型',
  386. prop: 'SpecialType',
  387. sortable: 'custom'
  388. },
  389. {
  390. name: '容器编号',
  391. prop: 'U_Device_ID',
  392. sortable: 'custom'
  393. },
  394. { name: '装载序号', prop: 'LoadSN' },
  395. { name: '值机', prop: 'checkIn', width: 140 },
  396. { name: '状态', prop: 'latestStatus' },
  397. { name: '安检', prop: 'security', width: 140 },
  398. { name: '分拣', prop: 'sorting', width: 140 },
  399. { name: '装车', prop: 'loading', width: 140 },
  400. { name: '装机', prop: 'installed', width: 140 },
  401. { name: '中转标志', prop: 'transitFlag' },
  402. { name: '卷宗号', prop: 'fileNumber' }
  403. ]
  404. export default {
  405. name: 'FlightView',
  406. components: {
  407. Dialog,
  408. TimeZoneSelector,
  409. TableHeaderCellWithFilter
  410. },
  411. mixins: [tableColsMixin, timeZoneMixin],
  412. data() {
  413. return {
  414. queryData: {},
  415. flightInfo: {},
  416. keyWords: '',
  417. openUTC: true,
  418. props: { multiple: true },
  419. // options: [
  420. // { value: 0, label: 'VIP行李' },
  421. // { value: 0, label: 'VIP行李' }
  422. // ],
  423. containerTableColumn: [
  424. { name: '容器编号', prop: 'containerNumber' },
  425. { name: '类型', prop: 'style' },
  426. { name: '行李数', prop: 'numberOfBags' }
  427. ],
  428. transferInTableColumn: [
  429. { name: '航班号', prop: 'PreFlightNO' },
  430. { name: '日期', prop: 'PreFlightDate' },
  431. { name: '时间', prop: 'flightTime' },
  432. { name: '始发站', prop: 'PlanDepartureApt' },
  433. { name: '航班状态', prop: 'FlightStatus' },
  434. { name: '中转数', prop: 'totalNumber' }
  435. ],
  436. transferOutTableColumn: [
  437. { name: '航班号', prop: 'TransferFlightNO' },
  438. { name: '日期', prop: 'TransferFlightDate' },
  439. { name: '时间', prop: 'flightTime' },
  440. { name: '始发站', prop: 'PlanDepartureApt' },
  441. { name: '目的站', prop: 'PlanLandingApt' },
  442. { name: '中转数', prop: 'transferNumber' }
  443. ],
  444. // tableCols:
  445. // this.$route.matched[0].path === '/arrival' || this.$route.matched[1].path === '/transfer/arrival'
  446. // ? arrivalBaggageTableColumn
  447. // : departureBaggageTableColumn,
  448. tableCols: departureBaggageTableColumn,
  449. containerTableData: [], // 容器统计
  450. transferInBaggageTableData: [], // 中转进
  451. transferOutBaggageTableData: [], // 中转出
  452. flightBaggageTableData: [], // 行李列表
  453. flightBaggageTableFilters: {
  454. PassengerNameUpcase: [],
  455. BagSN: [],
  456. SpecialType: [],
  457. U_Device_ID: [],
  458. latestStatus: []
  459. },
  460. filterValues: {
  461. PassengerNameUpcase: '',
  462. BagSN: '',
  463. SpecialType: '',
  464. U_Device_ID: '',
  465. latestStatus: ''
  466. },
  467. warningContainers: []
  468. }
  469. },
  470. computed: {
  471. filteredTableData() {
  472. return this.flightBaggageTableData.filter(item => {
  473. let flag = true
  474. Object.entries(this.filterValues).forEach(([key, value]) => {
  475. if (value !== '' && item[key] !== value) {
  476. flag = false
  477. }
  478. })
  479. return flag
  480. })
  481. }
  482. },
  483. created() {
  484. this.queryData = this._.cloneDeep(this.$route.query)
  485. // console.log(this.queryData)
  486. const queryData = [this.queryData.FlightNO, this.queryData.FlightDate]
  487. this.queryAll(queryData)
  488. },
  489. updated() {
  490. this.$nextTick(() => {
  491. this.$refs['containerTable'].doLayout()
  492. this.$refs['transferInBaggageTable'].doLayout()
  493. this.$refs['transferOutBaggageTable'].doLayout()
  494. this.$refs['flightBaggageTable'].doLayout()
  495. })
  496. },
  497. methods: {
  498. cellClass({ row, column, rowIndex, columnIndex }) {
  499. const classes = []
  500. if (['checkIn', 'security', 'sorting', 'loading', 'installed'].includes(column.property)) {
  501. classes.push('pre-line')
  502. }
  503. if (
  504. ['PreFlightNO', 'totalNumber', 'TransferFlightNO', 'transferNumber', 'PassengerNameUpcase', 'BagSN'].includes(
  505. column.property
  506. )
  507. ) {
  508. classes.push('cell-click')
  509. }
  510. if (
  511. (column.property === 'latestStatus' && row[column.property] === '待翻减') ||
  512. this.warningContainers.includes(row['containerNumber'])
  513. ) {
  514. classes.push('cell-warning')
  515. }
  516. return classes.join(' ')
  517. },
  518. cellClickHandler(row, column, cell, event) {
  519. switch (column.property) {
  520. case 'PreFlightNO':
  521. this.$router.push({
  522. path: '/advance/flightView',
  523. query: {
  524. FlightNO: row.PreFlightNO,
  525. FlightDate: row.PreFlightDate
  526. }
  527. })
  528. break
  529. case 'totalNumber':
  530. this.$router.push({
  531. path: '/advance',
  532. query: {
  533. FlightNO: this.queryData.FlightNO,
  534. startDate: this.queryData.FlightDate,
  535. endDate: this.queryData.FlightDate,
  536. transferArrival: row.PreFlightNO
  537. }
  538. })
  539. break
  540. case 'TransferFlightNO':
  541. this.$router.push({
  542. path: '/advance/flightView',
  543. query: {
  544. FlightNO: row.TransferFlightNO,
  545. FlightDate: row.TransferFlightDate
  546. }
  547. })
  548. break
  549. case 'transferNumber':
  550. this.$router.push({
  551. path: '/advance',
  552. query: {
  553. FlightNO: this.queryData.FlightNO,
  554. startDate: this.queryData.FlightDate,
  555. endDate: this.queryData.FlightDate,
  556. transferDeparture: row.TransferFlightNO
  557. }
  558. })
  559. break
  560. case 'PassengerNameUpcase':
  561. this.$message.info('开发中')
  562. break
  563. case 'BagSN':
  564. this.$router.push({
  565. path: `/${this.$route.path.split('/').slice(1, -1).join('/')}/baggageView`,
  566. query: {
  567. BagSN: row.BagSN,
  568. FlightNO: this.queryData.FlightNO,
  569. FlightDate: this.queryData.FlightDate
  570. }
  571. })
  572. break
  573. default:
  574. break
  575. }
  576. },
  577. // 合计行
  578. summaryMethod({ columns, data }) {
  579. const sums = []
  580. if (columns.length > 0) {
  581. columns.forEach((column, index) => {
  582. if (index === 0) {
  583. sums[index] = '合计'
  584. } else if (
  585. // 需要计算的列
  586. ['numberOfBags', 'totalNumber', 'transferNumber'].includes(column.property)
  587. ) {
  588. const values = data.map(item => Number(item[column.property]))
  589. if (values.some(value => !isNaN(value))) {
  590. sums[index] = values.reduce((prev, curr) => {
  591. const value = Number(curr)
  592. if (!isNaN(value)) {
  593. return Number(prev) + Number(curr)
  594. } else {
  595. return Number(prev)
  596. }
  597. }, 0)
  598. } else {
  599. sums[index] = 0
  600. }
  601. } else {
  602. // 过滤某些字段不参与计算
  603. sums[index] = '-'
  604. }
  605. })
  606. }
  607. return sums
  608. },
  609. // 统计行数
  610. summaryRow(num) {
  611. return function () {
  612. return ['合计', `共${num}件`]
  613. }
  614. },
  615. filterHandler(value, row, column) {
  616. const property = column['property']
  617. return row[property] === value
  618. },
  619. containeClick(row) {
  620. this.$router.push({
  621. path: '/advance',
  622. query: {
  623. FlightNO: this.queryData.FlightNO,
  624. startDate: this.queryData.FlightDate,
  625. endDate: this.queryData.FlightDate,
  626. U_Device_ID: row.containerNumber
  627. }
  628. })
  629. },
  630. queryflightInfo(dataContent) {
  631. return myQuery(queryMap.flightInfo, ...dataContent)
  632. },
  633. queryContainer(dataContent) {
  634. return myQuery(queryMap.container, ...dataContent)
  635. },
  636. queryTrasferOutBaggage(dataContent) {
  637. return myQuery(queryMap.transferOutBaggage, ...dataContent)
  638. },
  639. queryTrasferInBaggage(dataContent) {
  640. return myQuery(queryMap.transferInBaggage, ...dataContent)
  641. },
  642. queryBaggageByFlightNO(dataContent) {
  643. return myQuery(queryMap.baggageByFlightNO, ...dataContent)
  644. },
  645. async queryAll(dataContent) {
  646. try {
  647. const [
  648. flightInfo,
  649. containerTableDataData,
  650. transferOutBaggageTableData,
  651. transferInBaggageTableData,
  652. flightBaggageTableData
  653. ] = await Promise.all([
  654. this.queryflightInfo(dataContent),
  655. this.queryContainer(dataContent),
  656. this.queryTrasferOutBaggage(dataContent),
  657. this.queryTrasferInBaggage(dataContent),
  658. this.queryBaggageByFlightNO(dataContent)
  659. ])
  660. flightInfo.length && (this.flightInfo = flightInfo[0])
  661. this.containerTableData = containerTableDataData
  662. this.transferOutBaggageTableData = transferOutBaggageTableData.map(item => {
  663. item['flightTime'] = item['flightDate'] ? item['flightDate'].split('T')[1] : ''
  664. return item
  665. })
  666. this.transferInBaggageTableData = transferInBaggageTableData.map(item => {
  667. item['flightTime'] = item['flightDate'] ? item['flightDate'].split('T')[1] : ''
  668. return item
  669. })
  670. this.warningContainers = []
  671. this.flightBaggageTableData = flightBaggageTableData.map((item, index) => {
  672. item['latestStatus'] === '待翻减' && this.warningContainers.push(item['U_Device_ID'])
  673. item['checkIn'] = `${item['checkIn'] ?? ''}\n${item['checkInTime'] ?? ''}`
  674. // item['latestStatus'] = item['Status'] === 'DEL' ? '删除' : item['latestStatus']
  675. item['security'] = `${item['DealInfo'] ?? ''}\n${item['DealTime'] ?? ''}`
  676. item['sorting'] = `${item['sortLocationMark'] ?? ''}\n${item['sortDealTime'] ?? ''}`
  677. item['loading'] = `${item['loadLocationMark'] ?? ''}\n${item['loadDealTime'] ?? ''}`
  678. item['installed'] = `${item['inflLocationMark'] ?? ''}\n${item['inflLoadDealTime'] ?? ''}`
  679. item['transitFlag'] = item['PreFlightNO'] ? '是' : '否'
  680. return item
  681. })
  682. setTableFilters(this.flightBaggageTableData, this.flightBaggageTableFilters)
  683. } catch (error) {
  684. console.log('错误', error)
  685. }
  686. }
  687. }
  688. }
  689. </script>
  690. <style lang="scss" scoped>
  691. .flight-view {
  692. padding: 16px 0 44px 8px;
  693. overflow: hidden;
  694. background: #dfe3ea;
  695. .flight-wrap {
  696. padding-right: 8px;
  697. width: 100%;
  698. height: calc(100vh - 140px);
  699. display: flex;
  700. flex-direction: row;
  701. justify-content: flex-start;
  702. flex-wrap: wrap;
  703. overflow: auto;
  704. .part1 {
  705. width: 71.15%;
  706. height: 344px;
  707. background: #041741;
  708. padding: 24px;
  709. .title {
  710. font-size: 18px;
  711. font-weight: bold;
  712. color: #ffffff;
  713. }
  714. .part1_info {
  715. width: 100%;
  716. display: flex;
  717. flex-direction: row;
  718. justify-content: space-between;
  719. padding-top: 32px;
  720. .part1_info_box {
  721. width: calc(33.333% - 48px);
  722. height: 244px;
  723. background: #2c416d;
  724. position: relative;
  725. padding: 24px;
  726. display: flex;
  727. flex-direction: column;
  728. align-content: space-around;
  729. .el-row {
  730. margin-bottom: 27px;
  731. }
  732. span {
  733. display: inline-block;
  734. font-size: 16px;
  735. font-weight: 400;
  736. color: #ffffff;
  737. }
  738. }
  739. .part1_info_box::after {
  740. content: '';
  741. border-top: 15px solid transparent;
  742. border-left: 10px solid transparent;
  743. border-bottom: 10px solid #fff;
  744. position: absolute;
  745. right: -34px;
  746. transform: rotate(-45deg);
  747. top: 50%;
  748. margin-top: -15px;
  749. }
  750. .part1_info_box:last-child::after {
  751. content: '';
  752. border-top: 0;
  753. border-left: 0;
  754. border-bottom: 0;
  755. }
  756. }
  757. }
  758. .part2 {
  759. width: calc(100% - 71.15%);
  760. height: 344px;
  761. padding-left: 16px;
  762. }
  763. .part3 {
  764. width: 50%;
  765. height: 204px;
  766. margin-top: 8px;
  767. .title {
  768. background: #fafcff;
  769. font-size: 14px;
  770. font-weight: bold;
  771. color: #101116;
  772. padding: 12px 0;
  773. text-align: center;
  774. }
  775. }
  776. .part4 {
  777. width: 100%;
  778. height: 384px;
  779. .title {
  780. padding: 16px 0;
  781. display: flex;
  782. flex-direction: row;
  783. justify-content: flex-end;
  784. align-items: center;
  785. .search {
  786. display: flex;
  787. flex-direction: row;
  788. margin-left: 20px;
  789. margin-right: 10px;
  790. }
  791. .el-dropdown {
  792. height: 30px;
  793. }
  794. .btn-square {
  795. margin-left: 20px;
  796. cursor: pointer;
  797. &:last-child {
  798. margin-right: 30px;
  799. }
  800. }
  801. }
  802. .el-table {
  803. .el-table__body-wrapper {
  804. min-height: 178px;
  805. }
  806. }
  807. }
  808. }
  809. ::v-deep .el-table {
  810. .cell-click {
  811. cursor: pointer;
  812. color: #2d7cff;
  813. &.cell-clicked {
  814. color: purple;
  815. }
  816. }
  817. .cell-warning {
  818. background: orange;
  819. }
  820. }
  821. }
  822. </style>