index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908
  1. <!--
  2. * @Author: zk
  3. * @Date: 2022-01-17 10:39:22
  4. * @LastEditTime: 2022-05-13 15:40:37
  5. * @LastEditors: your name
  6. * @Description: 离港01
  7. -->
  8. <template>
  9. <div class="departure-one">
  10. <!--功能区-表单-->
  11. <div class="departure-form">
  12. <el-form
  13. ref="form"
  14. :inline="true"
  15. :model="formData"
  16. :rules="rules"
  17. class="form"
  18. >
  19. <el-form-item prop="currentAirport">
  20. <!-- <el-cascader
  21. v-model="formData.currentAirport"
  22. style="width:144px;margin-left:10px"
  23. placeholder="全部机场"
  24. size="small"
  25. :options="currentAirportList"
  26. :props="currentAirportProps"
  27. collapse-tags
  28. clearable
  29. filterable
  30. @change="setCurrentAirport"
  31. /> -->
  32. <el-select
  33. v-model="formData.currentAirport"
  34. size="small"
  35. @change="airPortChange"
  36. filterable
  37. placeholder="请选择机场"
  38. >
  39. <el-option
  40. v-for="(item, index) in AirportList"
  41. :key="index"
  42. :label="item.PlanDepartureApt"
  43. :value="item.PlanDepartureApt"
  44. >
  45. </el-option>
  46. </el-select>
  47. </el-form-item>
  48. <el-form-item prop="inboundCarrier">
  49. <el-cascader
  50. v-model="formData.inboundCarrier"
  51. style="width: 164px"
  52. size="small"
  53. :options="carrierProps"
  54. :props="optionProps"
  55. placeholder="进港承运航司"
  56. collapse-tags
  57. clearable
  58. filterable
  59. @change="getTableData"
  60. />
  61. </el-form-item>
  62. <el-form-item prop="outgoingAirline">
  63. <el-cascader
  64. v-model="formData.outgoingAirline"
  65. style="width: 164px"
  66. size="small"
  67. :options="carrierPropsop"
  68. :props="optionPropser"
  69. placeholder="离港承运航司"
  70. collapse-tags
  71. clearable
  72. filterable
  73. @change="getTableData"
  74. />
  75. </el-form-item>
  76. <el-form-item prop="startDate">
  77. <el-date-picker
  78. v-model="formData.startDate"
  79. style="width: 216px"
  80. size="small"
  81. type="date"
  82. value-format="yyyy-MM-dd"
  83. placeholder="开始时间"
  84. @change="setStartDate"
  85. />
  86. </el-form-item>
  87. <el-form-item prop="endDate">
  88. <el-date-picker
  89. v-model="formData.endDate"
  90. style="width: 216px"
  91. size="small"
  92. type="date"
  93. value-format="yyyy-MM-dd"
  94. placeholder="结束时间"
  95. @change="setEndDate"
  96. />
  97. </el-form-item>
  98. <!-- <el-form-item>
  99. <div class="box-item">
  100. <p>预计装载总数:</p>
  101. <li
  102. :class="{ 'number-item': !isNaN(item), 'mark-item': isNaN(item) }"
  103. v-for="(item, index) in orderNum"
  104. :key="index"
  105. >
  106. <span v-if="!isNaN(item)">
  107. <i ref="numberItem">0123456789</i>
  108. </span>
  109. <span class="comma" v-else>{{ item }}</span>
  110. </li>
  111. </div>
  112. </el-form-item> -->
  113. <div style="float: right">
  114. <el-form-item
  115. prop="search"
  116. @keyup.enter="onSubmit(0)"
  117. >
  118. <el-input
  119. v-model="formData.search"
  120. style="width: 240px; margin-left: 105px"
  121. size="small"
  122. placeholder="请输入内容"
  123. prefix-icon="el-icon-search"
  124. clearable
  125. @clear="inputClear"
  126. />
  127. </el-form-item>
  128. <el-form-item>
  129. <el-button
  130. size="small"
  131. type="primary"
  132. @click="onSubmit(0)"
  133. >搜索</el-button>
  134. </el-form-item>
  135. <!-- <el-form-item>
  136. <el-switch
  137. v-model="formData.switch"
  138. style="margin-left: 40px"
  139. active-text="显示中转"
  140. />
  141. </el-form-item> -->
  142. <!-- <el-form-item v-is="['i_timeIcon']">
  143. <el-dropdown>
  144. <img
  145. class="checkTime msgImg"
  146. src="../../../../assets/departure/ic_time.png"
  147. />切换视角
  148. <el-dropdown-menu slot="dropdown" class="time-zone">
  149. <el-dropdown-item>国内Local/国际UTC</el-dropdown-item>
  150. <el-dropdown-item>Local</el-dropdown-item>
  151. <el-dropdown-item>UTC</el-dropdown-item>
  152. </el-dropdown-menu>
  153. </el-dropdown>
  154. </el-form-item> -->
  155. <el-form-item v-is="['ti_showTransit']">
  156. <el-button
  157. size="small"
  158. type="primary"
  159. @click="changeView"
  160. >切换视角</el-button>
  161. </el-form-item>
  162. <el-form-item v-is="['i_timeIcon']">
  163. <el-dropdown>
  164. <img
  165. class="checkTime msgImg"
  166. src="../../../../assets/departure/ic_time.png"
  167. >
  168. <el-dropdown-menu
  169. slot="dropdown"
  170. class="time-zone"
  171. >
  172. <el-dropdown-item>国内Local/国际UTC</el-dropdown-item>
  173. <el-dropdown-item>Local</el-dropdown-item>
  174. <el-dropdown-item>UTC</el-dropdown-item>
  175. </el-dropdown-menu>
  176. </el-dropdown>
  177. </el-form-item>
  178. <el-form-item>
  179. <img
  180. class="msgImg"
  181. src="../../../../assets/departure/ic_setting.png"
  182. @click="show"
  183. >
  184. </el-form-item>
  185. <!-- <el-form-item>
  186. <el-button
  187. class="btn-square setBtn"
  188. type="primary"
  189. icon="el-icon-s-tools"
  190. size="mini"
  191. @click="show"
  192. />
  193. </el-form-item> -->
  194. </div>
  195. </el-form>
  196. </div>
  197. <!--表格-->
  198. <div
  199. v-loading="loading"
  200. class="departure-table"
  201. element-loading-text="拼命加载中"
  202. element-loading-spinner="el-icon-loading"
  203. element-loading-background="rgba(0, 0, 0, 0.8)"
  204. >
  205. <el-table
  206. ref="table"
  207. :data="tableData"
  208. class="table"
  209. max-height="100%"
  210. :height="computedTableHeight"
  211. show-summary
  212. :summary-method="summaryMethod"
  213. :span-method="arraySpanMethod"
  214. :cell-class-name="cellClass"
  215. border
  216. stripe
  217. @cell-click="cellClick"
  218. >
  219. <el-table-column
  220. v-for="(item, index) in tableColsCopy"
  221. :key="index"
  222. :prop="item.statCode"
  223. :label="item.statName"
  224. >
  225. <el-table-column
  226. v-for="(p, i) in item.children"
  227. :key="i"
  228. :prop="p.statCode"
  229. :label="p.statName"
  230. :formatter="tableFormat"
  231. >
  232. <template slot="header">
  233. <el-tooltip :content="p.statName" placement="top"><span>{{ p.statName }}</span></el-tooltip>
  234. </template>
  235. </el-table-column>
  236. </el-table-column>
  237. </el-table>
  238. </div>
  239. <!--列设置-->
  240. <Dialog
  241. :flag="dialogFlag"
  242. class="dialog-check-cols"
  243. >
  244. <div class="col-dialog">
  245. <div class="title">列设置</div>
  246. <div class="content">
  247. <el-tree
  248. :data="tableCols"
  249. :class="colsCheckClass"
  250. show-checkbox
  251. node-key="index"
  252. :default-expand-all="true"
  253. :props="{
  254. label: 'statName',
  255. children: 'children',
  256. }"
  257. :default-checked-keys="checkedKeysTemp"
  258. @check="handleCheck"
  259. />
  260. </div>
  261. <div class="foot right t30">
  262. <el-button
  263. size="medium"
  264. class="r24"
  265. type="primary"
  266. @click="onCheck"
  267. >确定</el-button>
  268. <el-button
  269. size="medium"
  270. @click="hide"
  271. >取消</el-button>
  272. </div>
  273. </div>
  274. </Dialog>
  275. </div>
  276. </template>
  277. <script>
  278. import Dialog from '@/layout/components/Dialog'
  279. import terminalMixin from '../../mixins/terminal'
  280. import formMixin from '../../mixins/form'
  281. import tableColsMixin from '../../mixins/tableCols'
  282. import { getQuery } from '@/api/flight'
  283. export default {
  284. name: 'DepartureTerminalView',
  285. components: { Dialog },
  286. mixins: [terminalMixin, formMixin, tableColsMixin],
  287. data() {
  288. return {
  289. optionProps: {
  290. value: 'inAicompanyCode2',
  291. label: 'inAicompanyCode2'
  292. },
  293. optionPropser: {
  294. value: 'outAicompanyCode2',
  295. label: 'outAicompanyCode2'
  296. },
  297. orderNum: ['0', '0', '0', '0', '0', '0'], // 默认总数
  298. // 初始表头
  299. tableCols: [
  300. {
  301. statCode: 'departureInfo',
  302. statName: '离港航班',
  303. children: [
  304. {
  305. statCode: 'FlightNO',
  306. statName: '航班号',
  307. width: 81
  308. },
  309. {
  310. statCode: 'FlightDate',
  311. statName: '航班日期',
  312. width: 100
  313. },
  314. {
  315. statCode: 'ActualDepartureTime',
  316. statName: '起飞时间',
  317. width: 100
  318. },
  319. {
  320. statCode: 'TargetAirport',
  321. statName: '目的站',
  322. width: 93
  323. },
  324. {
  325. statCode: 'DepartureBuild',
  326. statName: '起飞航站楼',
  327. width: 81
  328. },
  329. {
  330. statCode: 'BordingGate',
  331. statName: '起飞登机口',
  332. width: 81
  333. },
  334. {
  335. statCode: 'StandForDepartrue',
  336. statName: '起飞停机位',
  337. width: 81
  338. },
  339. {
  340. statCode: 'outTransferBaggageCount',
  341. statName: '中转进行李数',
  342. width: 93
  343. },
  344. {
  345. statCode: 'outTransferredBaggageCount',
  346. statName: '已中转进行李数',
  347. width: 120
  348. },
  349. {
  350. statCode: 'timeDifference',
  351. statName: '转运时间',
  352. width: 93
  353. }
  354. ]
  355. },
  356. {
  357. statCode: 'arrivalInfo',
  358. statName: '进港航班',
  359. children: [
  360. {
  361. statCode: 'PreFlightNO',
  362. statName: '航班号',
  363. width: 122
  364. },
  365. {
  366. statCode: 'PreFlightDate',
  367. statName: '航班日期',
  368. width: 83
  369. },
  370. {
  371. statCode: 'PreAirport',
  372. statName: '起飞机场',
  373. width: 79
  374. },
  375. {
  376. statCode: 'ActualLandingTime',
  377. statName: '降落时间',
  378. width: 79
  379. },
  380. {
  381. statCode: 'LandingBuild',
  382. statName: '降落航站楼',
  383. width: 79
  384. },
  385. {
  386. statCode: 'Carousel',
  387. statName: '行李转盘',
  388. width: 79
  389. },
  390. {
  391. statCode: 'StandForLanding',
  392. statName: '降落停机位',
  393. width: 79
  394. },
  395. {
  396. statCode: 'inTransferBaggageCount',
  397. statName: '中转行李数',
  398. width: 58
  399. },
  400. {
  401. statCode: 'inTransferredBaggageCount',
  402. statName: '已中转行李数',
  403. width: 63
  404. }
  405. ]
  406. }
  407. ],
  408. AirportList: [],
  409. carrierProps: [],
  410. carrierPropsop: [],
  411. tableDataFilters: {
  412. FlightNO: [],
  413. FlightDate: [],
  414. PlanDepartureTime: [],
  415. TargetAirport: [],
  416. BordingGate: [],
  417. StandForDepartrue: [],
  418. DepartureBuild: []
  419. },
  420. loopEvent: null,
  421. leaveCount: 0,
  422. baggageCount: 0,
  423. spanArr: [],
  424. contactDot: 0,
  425. flag: 0
  426. }
  427. },
  428. created() {
  429. this.getAirPortData()
  430. },
  431. methods: {
  432. cellClass(row, column, rowIndex, columnIndex) {
  433. if (row.column.property == 'FlightNO' || row.column.property == 'PreFlightNO') {
  434. return 'clickCell'
  435. }
  436. },
  437. cellClick(row, column, cell, event) {
  438. switch (column.property) {
  439. case 'FlightNO':
  440. this.$router.push({ path: '/transfer/departure/flightView', query: row })
  441. break
  442. case 'PreFlightNO': {
  443. const row2 = this._.cloneDeep(row)
  444. row2.FlightNO = row2.PreFlightNO
  445. this.$router.push({ path: '/transfer/departure/flightView', query: row2 })
  446. break
  447. }
  448. case 'inTransferBaggageCount':
  449. this.$router.push({
  450. path: '/advance',
  451. query: {
  452. FlightNO: row.FlightNO,
  453. transferArrival: row.PreFlightNO,
  454. startDate: row.FlightDate,
  455. endDate: row.FlightDate
  456. }
  457. })
  458. break
  459. default:
  460. break
  461. }
  462. },
  463. changeView() {
  464. this.$router.replace({
  465. path: '/transfer/arrival'
  466. })
  467. },
  468. airPortChange() {
  469. this.getAviationData()
  470. this.upAviationData()
  471. // this.getTableData();
  472. },
  473. //选择机场
  474. async getAirPortData() {
  475. try {
  476. const res = await getQuery({
  477. id: 72,
  478. dataContent: []
  479. })
  480. if (res.code == 0) {
  481. this.AirportList = res.returnData
  482. this.formData.currentAirport = 'PEK'
  483. this.getAviationData()
  484. this.upAviationData()
  485. this.getTableData()
  486. } else {
  487. this.$message.error(res.message)
  488. }
  489. } catch (error) {
  490. console.log('出错了', error)
  491. }
  492. },
  493. //选择航司
  494. async getAviationData() {
  495. try {
  496. const res = await getQuery({
  497. id: 71,
  498. dataContent: [this.formData.currentAirport]
  499. })
  500. if (res.code == 0) {
  501. this.carrierProps = res.returnData
  502. // this.getTableData();
  503. } else {
  504. this.$message.error(res.message)
  505. }
  506. } catch (error) {
  507. console.log('出错了', error)
  508. }
  509. },
  510. //选择航司
  511. async upAviationData() {
  512. try {
  513. const res = await getQuery({
  514. id: 74,
  515. dataContent: [this.formData.currentAirport]
  516. })
  517. if (res.code == 0) {
  518. this.carrierPropsop = res.returnData
  519. // this.getTableData();
  520. } else {
  521. this.$message.error(res.message)
  522. }
  523. } catch (error) {
  524. console.log('出错了', error)
  525. }
  526. },
  527. tableRowClassName({ row, rowIndex }) {
  528. if (row.hasTakenOff == 0) {
  529. if (rowIndex == this.leaveCount - 1) {
  530. return 'bgl-hui redBorder'
  531. } else {
  532. return 'bgl-hui'
  533. }
  534. }
  535. },
  536. tableCellClassName({ row, column }) {
  537. if (
  538. column.property === 'transfer_all' ||
  539. column.property === 'departureAnomaly' ||
  540. column.property === 'riskWarning'
  541. ) {
  542. return 'bgl-huang'
  543. }
  544. },
  545. // 获取表单下拉框数据
  546. // getFormData(params) {
  547. // this.relatedAirportQuery({
  548. // ...params,
  549. // type: 'OUT'
  550. // })
  551. // this.outgoingAirlineQuery(params)
  552. // this.craftTypeQuery(params)
  553. // this.flightAttrQuery(params)
  554. // },
  555. // 获取表格数据
  556. async getTableData() {
  557. // let arr = [
  558. // this.formData.currentAirport,
  559. // this.formData.startDate,
  560. // this.formData.endDate,
  561. // this.formData.inboundCarrier,
  562. // this.formData.outgoingAirline,
  563. // ];
  564. let arrs1 = [this.formData.inboundCarrier.length == 0 ? '' : this.formData.inboundCarrier[0]]
  565. let arrs2 = [this.formData.outgoingAirline.length == 0 ? '' : this.formData.outgoingAirline[0]]
  566. let arr = [
  567. this.formData.currentAirport,
  568. this.formData.startDate,
  569. this.formData.endDate,
  570. ...arrs1,
  571. ...arrs1,
  572. ...arrs1,
  573. ...arrs2,
  574. ...arrs2,
  575. ...arrs2
  576. // this.formData.inboundCarrier,
  577. // this.formData.outgoingAirline,
  578. // JSON.stringify(this.formData.inboundCarrier),
  579. // JSON.stringify(this.formData.outgoingAirline),
  580. ]
  581. try {
  582. const res = await getQuery({
  583. id: 68,
  584. dataContent: [...arr]
  585. })
  586. if (res.code == 0) {
  587. this.tableData = res.returnData
  588. let contactDot = this.contactDot
  589. this.spanArr = []
  590. this.tableData.forEach((item, index) => {
  591. item.index = index
  592. if (index === 0) {
  593. this.spanArr.push(1)
  594. } else {
  595. if (item.FlightNO === this.tableData[index - 1].FlightNO) {
  596. this.spanArr[contactDot] += 1
  597. this.spanArr.push(0)
  598. } else {
  599. this.spanArr.push(1)
  600. contactDot = index
  601. }
  602. }
  603. })
  604. //this.initTableData(res.returnData);
  605. } else {
  606. console.log(res.message)
  607. }
  608. } catch (error) {
  609. clearInterval(this.loopEvent)
  610. console.log('出错了', error)
  611. }
  612. },
  613. initTableData(tableData) {
  614. this.leaveCount = 0
  615. this.baggageCount = 0
  616. tableData.forEach(item => {
  617. if (item.hasTakenOff == 0) {
  618. this.leaveCount++
  619. }
  620. // item["waitfanj"] = item["noCheckInNumber"] - item["unLoad"];
  621. this.baggageCount = this.baggageCount + item.preLoad
  622. })
  623. this.tableData = this._.sortBy(tableData, ['FlightDate', 'PlanDepartureTime'])
  624. // this.setTableFilters();
  625. // this.toOrderNum(this.baggageCount);
  626. // setInterval(() => {
  627. // this.baggageCount = this.baggageCount+1;
  628. // // 这里输入数字即可调用
  629. // }, 2000);
  630. },
  631. // 表格添加过滤条件
  632. setTableFilters(tableData = this.tableData, filters = this.tableDataFilters) {
  633. const tempSets = {}
  634. Object.keys(filters).forEach(key => {
  635. tempSets[key] = new Set()
  636. })
  637. tableData.forEach(item => {
  638. Object.keys(tempSets).forEach(key => {
  639. (item[key] ?? '') !== '' && tempSets[key].add(item[key])
  640. })
  641. })
  642. Object.keys(tempSets).forEach(key => {
  643. filters[key] = this._.orderBy(
  644. [...tempSets[key]].map(value => ({
  645. text: value,
  646. value
  647. })),
  648. o => o.value
  649. )
  650. })
  651. },
  652. filterHandler(value, row, column) {
  653. const property = column['property']
  654. return row[property] === value
  655. },
  656. setNumberTransform() {
  657. const numberItems = this.$refs.numberItem // 拿到数字的ref,计算元素数量
  658. const numberArr = this.orderNum.filter(item => !isNaN(item))
  659. // 结合CSS 对数字字符进行滚动,显示订单数量
  660. for (let index = 0; index < numberItems.length; index++) {
  661. const elem = numberItems[index]
  662. elem.style.transform = `translate(-50%, -${numberArr[index] * 10}%)`
  663. }
  664. },
  665. toOrderNum(num) {
  666. num = num.toString()
  667. if (num.length < 6) {
  668. num = '0' + num // 如未满八位数,添加"0"补位
  669. this.toOrderNum(num) // 递归添加"0"补位
  670. } else if (num.length >= 6) {
  671. this.orderNum = num.split('') // 将其便变成数据,渲染至滚动数组
  672. } else {
  673. // 订单总量数字超过八位显示异常
  674. this.$message.warning('总量数字过大')
  675. }
  676. this.setNumberTransform()
  677. },
  678. tableSpanMethod({ row, column, rowIndex, columnIndex }) {
  679. if (
  680. [
  681. 'FlightNO',
  682. 'FlightDate',
  683. 'PlanLandingTime',
  684. 'PlanDepartureApt',
  685. 'LandingBuild',
  686. 'Carousel',
  687. 'StandForLanding',
  688. 'outTransferBaggageCount',
  689. 'outTransferredBaggageCount',
  690. 'positionDistribution',
  691. 'expect_load',
  692. 'loadflight'
  693. ].includes(column['property'])
  694. ) {
  695. const _row = this.spanArr[rowIndex]
  696. const _col = _row > 0 ? 1 : 0
  697. return {
  698. rowspan: _row,
  699. colspan: _col
  700. }
  701. }
  702. },
  703. arraySpanMethod({ row, column, rowIndex, columnIndex }) {
  704. for (let i = 0; i < 9; i++) {
  705. if (columnIndex === i) {
  706. const _row = this.spanArr[rowIndex]
  707. const _col = _row > 0 ? 1 : 0
  708. return {
  709. rowspan: _row,
  710. colspan: _col
  711. }
  712. }
  713. }
  714. }
  715. },
  716. mounted() {
  717. let that = this
  718. this.loopEvent = setInterval(function () {
  719. that.getTableData()
  720. }, 3000)
  721. },
  722. beforeDestroy() {
  723. clearInterval(this.loopEvent)
  724. }
  725. }
  726. </script>
  727. <style lang="scss" scoped>
  728. .departure-form {
  729. padding-top: 11px;
  730. padding-left: 5px;
  731. ::v-deep .form {
  732. .el-form-item {
  733. margin-bottom: 0px;
  734. margin-right: 8px;
  735. button,
  736. input,
  737. optgroup,
  738. select,
  739. textarea {
  740. font-family: Helvetica, 'Microsoft YaHei';
  741. font-size: 14px;
  742. }
  743. .el-switch__label {
  744. color: #303133;
  745. }
  746. .el-form-item__error {
  747. z-index: 10;
  748. }
  749. .el-button {
  750. &.btn-square {
  751. width: 30px;
  752. height: 30px;
  753. display: flex;
  754. align-items: center;
  755. justify-content: center;
  756. margin-top: 5px;
  757. }
  758. }
  759. }
  760. .checkTime {
  761. margin: 0 16px;
  762. }
  763. .msgImg {
  764. cursor: pointer;
  765. position: relative;
  766. top: 6px;
  767. }
  768. }
  769. .box-item {
  770. position: relative;
  771. height: 32px;
  772. font-size: 18px;
  773. line-height: 32px;
  774. text-align: center;
  775. list-style: none;
  776. color: #2d7cff;
  777. writing-mode: vertical-lr;
  778. text-orientation: upright;
  779. /*文字禁止编辑*/
  780. -moz-user-select: none; /*火狐*/
  781. -webkit-user-select: none; /*webkit浏览器*/
  782. -ms-user-select: none; /*IE10*/
  783. -khtml-user-select: none; /*早期浏览器*/
  784. user-select: none;
  785. /* overflow: hidden; */
  786. p {
  787. line-height: 32px;
  788. writing-mode: horizontal-tb !important;
  789. text-orientation: none !important;
  790. /*文字禁止编辑*/
  791. -moz-user-select: none; /*火狐*/
  792. -webkit-user-select: none; /*webkit浏览器*/
  793. -ms-user-select: none; /*IE10*/
  794. -khtml-user-select: none; /*早期浏览器*/
  795. user-select: none;
  796. margin-top: 5px;
  797. }
  798. }
  799. /* 默认逗号设置 */
  800. .mark-item {
  801. width: 10px;
  802. height: 32px;
  803. margin-right: 5px;
  804. line-height: 10px;
  805. font-size: 18px;
  806. position: relative;
  807. & > span {
  808. position: absolute;
  809. width: 100%;
  810. bottom: 0;
  811. writing-mode: vertical-rl;
  812. text-orientation: upright;
  813. }
  814. }
  815. /*滚动数字设置*/
  816. .number-item {
  817. width: 41px;
  818. height: 42px;
  819. /* 背景图片 */
  820. background: url(/images/text-bg-blue.png) no-repeat center center;
  821. background-size: 100% 100%;
  822. // background: #ccc;
  823. list-style: none;
  824. margin-right: 5px;
  825. // background:rgba(250,250,250,1);
  826. border-radius: 4px;
  827. border: 3px solid rgb(221, 221, 221);
  828. & > span {
  829. position: relative;
  830. display: inline-block;
  831. margin-right: 10px;
  832. width: 100%;
  833. height: 100%;
  834. writing-mode: vertical-rl;
  835. text-orientation: upright;
  836. overflow: hidden;
  837. & > i {
  838. font-style: normal;
  839. position: absolute;
  840. top: 11px;
  841. left: 50%;
  842. transform: translate(-50%, -1%);
  843. transition: transform 1s ease-in-out;
  844. letter-spacing: 10px;
  845. }
  846. }
  847. }
  848. .number-item:last-child {
  849. margin-right: 0;
  850. }
  851. }
  852. .departure-table {
  853. width: 100%;
  854. ::v-deep .table {
  855. width: 100%;
  856. .cell {
  857. padding: 0;
  858. text-align: center;
  859. font-size: 14px;
  860. font-family: Helvetica, 'Microsoft YaHei';
  861. letter-spacing: 0;
  862. }
  863. .clickCell {
  864. cursor: pointer;
  865. color: #2d7cff;
  866. }
  867. .el-table__header-wrapper {
  868. .cell {
  869. font-weight: bold;
  870. color: #101116;
  871. }
  872. .has-gutter {
  873. tr {
  874. .bgl-huang {
  875. background: #fcf0b1;
  876. }
  877. }
  878. }
  879. }
  880. .el-table__body-wrapper {
  881. tr.bgl-hui {
  882. background: #d2d6df;
  883. td {
  884. background: #d2d6df;
  885. }
  886. &.redBorder {
  887. position: relative;
  888. &::after {
  889. content: '';
  890. position: absolute;
  891. left: 0;
  892. bottom: 0;
  893. width: 100%;
  894. height: 2px;
  895. background: #e83f82;
  896. }
  897. }
  898. }
  899. }
  900. }
  901. }
  902. </style>