index.vue 25 KB

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