index.vue 24 KB

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