indexOut.vue 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001
  1. <template>
  2. <div class="dashboard">
  3. <div class="dashboard-head flex">
  4. <!-- <div class="dashboard-head-title">{{title}}</div> -->
  5. <div class="dashboard-head-tabs flex-wrap">
  6. <div class="dashboard-head-tabs-list" :class="tabsIndex == index ? 'active' : ''" @click="tabClick(item, index)" v-for="(item, index) in tabs" :key="index">
  7. {{ item.label }}
  8. </div>
  9. </div>
  10. <!-- <div class="dashboard-head-zw"></div> -->
  11. </div>
  12. <div class="dashboard-content">
  13. <div class="dashboard-content-top flex">
  14. <div class="dashboard-content-top-left">
  15. <div class="dashboard-content-top-left-item">
  16. <div class="dashboard-content-top-left-item-top">
  17. <div class="dashboard-content-top-left-item-top-title">
  18. 小时峰值分布
  19. </div>
  20. <div class="dashboard-content-top-left-item-top-time" @click="showDatePicker">
  21. <el-icon color="#ffffff" size="18">
  22. <Calendar />
  23. </el-icon>
  24. <el-icon color="#ffffff">
  25. <CaretBottom />
  26. </el-icon>
  27. </div>
  28. </div>
  29. <div class="dashboard-content-top-left-item-bottom">
  30. <Echarts id="ww1" :option="optionLeft" />
  31. </div>
  32. </div>
  33. <div class="dashboard-content-top-left-item">
  34. <div class="dashboard-content-top-left-item-top">
  35. <div class="dashboard-content-top-left-item-top-title">
  36. 运单趋势分析
  37. </div>
  38. <div class="dashboard-content-top-left-item-top-time" @click="showDatePicker">
  39. <el-icon color="#ffffff" size="18">
  40. <Calendar />
  41. </el-icon>
  42. <el-icon color="#ffffff">
  43. <CaretBottom />
  44. </el-icon>
  45. </div>
  46. </div>
  47. <div class="dashboard-content-top-left-item-bottom">
  48. <Echarts id="ww12" :option="optionLeft" />
  49. </div>
  50. </div>
  51. </div>
  52. <!-- 地图 -->
  53. <div class="dashboard-content-top-center">
  54. <div class="dashboard-content-top-center-top"></div>
  55. <div class="dashboard-content-top-center-bottom">
  56. <div class="dashboard-content-top-center-bottom-box1">
  57. <div class="dashboard-content-top-center-bottom-box1-title">航班数</div>
  58. <div class="dashboard-content-top-center-bottom-box1-info">
  59. <div>本年:1000</div>
  60. <div>同期:1100</div>
  61. </div>
  62. <div class="dashboard-content-top-center-bottom-box1-info">
  63. <div>本年:1000</div>
  64. <div>同期:1100</div>
  65. </div>
  66. <div class="dashboard-content-top-center-bottom-box1-info">
  67. <div>本年:1000</div>
  68. <div>同期:1100</div>
  69. </div>
  70. </div>
  71. <div class="dashboard-content-top-center-bottom-box2">
  72. <div class="dashboard-content-top-center-bottom-box2-title">运单数</div>
  73. <div class="dashboard-content-top-center-bottom-box2-info">
  74. <div>本年:1000</div>
  75. <div>同期:1100</div>
  76. <div>重量:1100</div>
  77. </div>
  78. <div class="dashboard-content-top-center-bottom-box2-info">
  79. <div>本年:1000</div>
  80. <div>同期:1100</div>
  81. <div>重量:1100</div>
  82. </div>
  83. <div class="dashboard-content-top-center-bottom-box2-info">
  84. <div>本年:1000</div>
  85. <div>同期:1100</div>
  86. <div>重量:1100</div>
  87. </div>
  88. </div>
  89. <EchartsMap id="ww2" />
  90. </div>
  91. </div>
  92. <div class="dashboard-content-top-right">
  93. <div class="dashboard-content-top-right-item">
  94. <div class="dashboard-content-top-right-item-top">
  95. <div class="dashboard-content-top-right-item-top-title">
  96. 航班预警报警分析
  97. </div>
  98. <div class="dashboard-content-top-right-item-top-time" @click="showDatePicker">
  99. <el-icon color="#ffffff" size="18">
  100. <Calendar />
  101. </el-icon>
  102. <el-icon color="#ffffff">
  103. <CaretBottom />
  104. </el-icon>
  105. </div>
  106. </div>
  107. <div class="dashboard-content-top-right-item-bottom">
  108. <Echarts id="ww3" :option="airlineAbnormalBaggage.option" />
  109. </div>
  110. </div>
  111. <div class="dashboard-content-top-right-item">
  112. <div class="dashboard-content-top-right-item-top">
  113. <div class="dashboard-content-top-right-item-top-title">
  114. 航司运量统计
  115. </div>
  116. <div class="dashboard-content-top-right-item-top-time" @click="showDatePicker">
  117. <el-icon color="#ffffff" size="18">
  118. <Calendar />
  119. </el-icon>
  120. <el-icon color="#ffffff">
  121. <CaretBottom />
  122. </el-icon>
  123. </div>
  124. </div>
  125. <div class="dashboard-content-top-left-item-bottom">
  126. <Echarts id="ww33" :option="airCompaneBaggage.option" />
  127. </div>
  128. </div>
  129. </div>
  130. </div>
  131. <div class="dashboard-content-bottom flex">
  132. <div class="dashboard-content-bottom-left">
  133. <div class="dashboard-content-bottom-left-top">
  134. <div class="dashboard-content-bottom-left-top-title">
  135. 节点峰值分布
  136. </div>
  137. <div class="dashboard-content-bottom-left-top-time" @click="showDatePicker">
  138. <el-icon color="#ffffff" size="18">
  139. <Calendar />
  140. </el-icon>
  141. <el-icon color="#ffffff">
  142. <CaretBottom />
  143. </el-icon>
  144. </div>
  145. </div>
  146. <div class="dashboard-content-bottom-left-bottom">
  147. <Echarts id="ww4" :option="hourPeak.option" />
  148. </div>
  149. </div>
  150. <div class="dashboard-content-bottom-center">
  151. <div class="dashboard-content-bottom-center-top">
  152. <div class="dashboard-content-bottom-center-top-title">
  153. 节点效率分析
  154. </div>
  155. <div class="dashboard-content-bottom-center-top-time" @click="showDatePicker">
  156. <el-icon color="#ffffff" size="18">
  157. <Calendar />
  158. </el-icon>
  159. <el-icon color="#ffffff">
  160. <CaretBottom />
  161. </el-icon>
  162. </div>
  163. </div>
  164. <div class="dashboard-content-bottom-center-bottom">
  165. <Echarts id="ww5" :option="nodeEfficiency.option" />
  166. </div>
  167. </div>
  168. <div class="dashboard-content-bottom-right">
  169. <div class="dashboard-content-bottom-right-top">
  170. <div class="dashboard-content-bottom-center-top-title">
  171. 航班动态统计
  172. </div>
  173. </div>
  174. <div class="dashboard-content-bottom-right-bottom">
  175. <Echarts id="ww6" :option="airStutas.option" />
  176. </div>
  177. </div>
  178. </div>
  179. </div>
  180. <Dialog :flag="flag" @resetForm="resetForm" @submitForm="submitForm">
  181. <el-form :model="form" label-width="120px">
  182. <el-form-item label="开始日期">
  183. <el-date-picker :disabled-date="disabledStartDate" v-model="form.startDate" type="date" placeholder="请选择开始日期" size="default" format="YYYY/MM/DD" value-format="YYYY-MM-DD" />
  184. </el-form-item>
  185. <el-form-item label="结束日期">
  186. <el-date-picker :disabled-date="disabledEndDate" v-model="form.endDate" type="date" placeholder="请选择结束日期" size="default" format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
  187. </el-form-item>
  188. </el-form>
  189. </Dialog>
  190. </div>
  191. </template>
  192. <script setup lang="ts">
  193. import { ref, onMounted } from "vue";
  194. import Echarts from "@/components/Echarts/commonChartsBar.vue";
  195. import EchartsMap from "@/components/Echarts/commonChartsChinaMap.vue";
  196. import { Calendar, CaretBottom } from "@element-plus/icons-vue";
  197. import Dialog from "@/components/dialog/index.vue";
  198. import axios from "axios";
  199. const title = ref("决策管理驾驶舱");
  200. const form = ref({
  201. startDate: Date.now(),
  202. endDate: Date.now(),
  203. });
  204. const disabledStartDate = (time: Date) => {
  205. let data = new Date(form.value.endDate);
  206. return time.getTime() > data.getTime();
  207. };
  208. const disabledEndDate = (time: Date) => {
  209. let data = new Date(form.value.startDate);
  210. return data.getTime() > time.getTime();
  211. };
  212. const flag = ref(false);
  213. const resetForm = () => {
  214. flag.value = false;
  215. };
  216. const submitForm = () => {
  217. flag.value = false;
  218. };
  219. const tabs = [
  220. {
  221. id: 1,
  222. label: "国内进港",
  223. value: "one",
  224. },
  225. {
  226. id: 2,
  227. label: "国内出港",
  228. value: "two",
  229. },
  230. {
  231. id: 3,
  232. label: "国际进港",
  233. value: "three",
  234. },
  235. {
  236. id: 4,
  237. label: "国际出港",
  238. value: "four",
  239. },
  240. ];
  241. const tabsIndex = ref(3);
  242. const optionLeft = {
  243. tooltip: {
  244. trigger: "axis",
  245. },
  246. // legend: {
  247. // data: ['运输总数', '托运旅客数'],
  248. // show: true,
  249. // top: 0,
  250. // icon: 'roundRect'
  251. // },
  252. grid: {
  253. left: "0%",
  254. right: "5%",
  255. bottom: "0%",
  256. top: "15%",
  257. containLabel: true,
  258. },
  259. color: ["#F5BB3D", "#73D970", "#6A9DD9"],
  260. xAxis: {
  261. type: "category",
  262. boundaryGap: true,
  263. data: ["2021.12", "2022.01", "2022.02", "2022.03", "2022.04", "2022.05"],
  264. axisLine: {
  265. show: true,
  266. lineStyle: {
  267. color: "#8897BC",
  268. },
  269. },
  270. axisTick: {
  271. show: false,
  272. },
  273. axisLabel: {
  274. color: "#8897BC",
  275. },
  276. },
  277. yAxis: [
  278. {
  279. type: "value",
  280. axisLabel: {
  281. color: "#8897BC",
  282. formatter: function (item) {
  283. return item / 10000 + "万";
  284. },
  285. },
  286. splitLine: {
  287. lineStyle: {
  288. type: "dashed",
  289. color: "rgba(196,194,225, 0.54)",
  290. },
  291. },
  292. },
  293. {
  294. type: "value",
  295. axisLabel: {
  296. color: "#8897BC",
  297. },
  298. splitLine: {
  299. lineStyle: {
  300. type: "dashed",
  301. color: "rgba(196,194,225, 0.54)",
  302. },
  303. },
  304. },
  305. ],
  306. series: [
  307. {
  308. name: "运输总数",
  309. type: "line",
  310. symbol: "none",
  311. key: "bagsnum",
  312. data: [120, 132, 101, 134, 90, 230, 210],
  313. areaStyle: {
  314. color: {
  315. type: "linear",
  316. x: 0,
  317. y: 0,
  318. x2: 0,
  319. y2: 1,
  320. colorStops: [
  321. {
  322. offset: 0,
  323. color: "rgba(125,72,255,0.5)",
  324. },
  325. {
  326. offset: 1,
  327. color: "rgba(0,180,255,0.01)",
  328. },
  329. ],
  330. global: false,
  331. },
  332. },
  333. },
  334. {
  335. name: "托运旅客数",
  336. type: "line",
  337. symbol: "none",
  338. key: "passengers",
  339. data: [220, 182, 191, 234, 290, 330, 310],
  340. areaStyle: {
  341. color: {
  342. type: "linear",
  343. x: 0,
  344. y: 0,
  345. x2: 0,
  346. y2: 1,
  347. colorStops: [
  348. {
  349. offset: 0,
  350. color: "rgba(125,72,255,0.5)",
  351. },
  352. {
  353. offset: 1,
  354. color: "rgba(0,180,255,0.01)",
  355. },
  356. ],
  357. global: false,
  358. },
  359. },
  360. },
  361. ],
  362. };
  363. const airlineAbnormalBaggage = ref({
  364. component: "commonChartsBar",
  365. option: {
  366. baseOption: {
  367. legend: {
  368. data: ["报警", "预警"],
  369. right: "20",
  370. textStyle: {
  371. color: "#8897BC",
  372. },
  373. // top:"-10"
  374. },
  375. color: ["#EC3B71", "#E5B35C"],
  376. dataZoom:[
  377. {
  378. id: 'dataZoomX',
  379. type: 'slider',
  380. filterMode: 'filter',
  381. height: 13,
  382. bottom:"3%"
  383. }
  384. ],
  385. grid: {
  386. bottom: "20%",
  387. left: "5%",
  388. right: "1%",
  389. top: "15%",
  390. },
  391. xAxis: {
  392. data: ["入园", "海关", "运抵", "安检", "核单", "理货", "拉下", "待运区", "货站交接", "机下交接", "装机"],
  393. axisLine: {
  394. show: true,
  395. lineStyle: {
  396. color: "#8897BC",
  397. },
  398. },
  399. axisTick: {
  400. show: false,
  401. },
  402. axisLabel: {
  403. color: "#8897BC",
  404. },
  405. },
  406. yAxis: {
  407. type: "value",
  408. axisLabel: {
  409. color: "#8897BC",
  410. },
  411. splitLine: {
  412. lineStyle: {
  413. type: "dashed",
  414. color: "rgba(196,194,225, 0.54)",
  415. },
  416. },
  417. },
  418. series: [
  419. {
  420. name: "报警",
  421. type: "bar",
  422. data: [12, 10, 15, 11, 16, 4, 6],
  423. },
  424. {
  425. name: "预警",
  426. type: "bar",
  427. data: [11, 15, 17, 8, 1, 4, 6],
  428. },
  429. ],
  430. },
  431. },
  432. });
  433. const airCompaneBaggage = ref({
  434. component: "commonChartsBar",
  435. option: {
  436. baseOption: {
  437. legend: {
  438. data: ["2020年", "2021年"],
  439. right: "20",
  440. textStyle: {
  441. color: "#8897BC",
  442. },
  443. },
  444. color: ["#51DEE9", "#4C88E1"],
  445. grid: {
  446. bottom: "10%",
  447. left: "5%",
  448. right: "1%",
  449. top: "15%",
  450. },
  451. xAxis: {
  452. data: ["国航", "南航", "深航", "东航", "海航", "国泰", "川航"],
  453. axisLine: {
  454. show: true,
  455. lineStyle: {
  456. color: "#8897BC",
  457. },
  458. },
  459. axisTick: {
  460. show: false,
  461. },
  462. axisLabel: {
  463. color: "#8897BC",
  464. },
  465. },
  466. yAxis: {
  467. type: "value",
  468. axisLabel: {
  469. color: "#8897BC",
  470. },
  471. splitLine: {
  472. lineStyle: {
  473. type: "dashed",
  474. color: "rgba(196,194,225, 0.54)",
  475. },
  476. },
  477. },
  478. series: [
  479. {
  480. name: "2020年",
  481. type: "bar",
  482. data: [12, 10, 15, 11, 16, 4, 6],
  483. },
  484. {
  485. name: "2021年",
  486. type: "bar",
  487. data: [11, 15, 17, 8, 1, 4, 6],
  488. },
  489. ],
  490. },
  491. },
  492. });
  493. const airStutas = ref({
  494. component: "commonChartsBar",
  495. option: {
  496. baseOption: {
  497. // legend: {
  498. // data: ['2020年', '2021年'],
  499. // right:"20",
  500. // textStyle:{
  501. // color: "#8897BC"
  502. // }
  503. // // top:"-10"
  504. // },
  505. color: ["#51DEE9", "#4C88E1"],
  506. grid: {
  507. bottom: "10%",
  508. left: "5%",
  509. right: "1%",
  510. top: "15%",
  511. },
  512. xAxis: {
  513. data: ["机下交接", "货站交接", "理货"],
  514. axisLine: {
  515. show: true,
  516. lineStyle: {
  517. color: "#8897BC",
  518. },
  519. },
  520. axisTick: {
  521. show: false,
  522. },
  523. axisLabel: {
  524. color: "#8897BC",
  525. },
  526. },
  527. yAxis: {
  528. type: "value",
  529. axisLabel: {
  530. color: "#8897BC",
  531. },
  532. splitLine: {
  533. lineStyle: {
  534. type: "dashed",
  535. color: "rgba(196,194,225, 0.54)",
  536. },
  537. },
  538. },
  539. series: [
  540. {
  541. type: "bar",
  542. data: [12, 10, 15],
  543. },
  544. ],
  545. },
  546. },
  547. });
  548. const nodeEfficiency = ref({
  549. component: "commonChartsLine",
  550. option: {
  551. legend: {
  552. top: "1%",
  553. right: "5%",
  554. data: ["平均时间", "最长时间", "最短时间"],
  555. itemWidth: 25,
  556. itemHeight: 14,
  557. },
  558. grid: {
  559. bottom: "10%",
  560. left: "1%",
  561. right: "1%",
  562. top: "15%",
  563. },
  564. color: ["#3ca4fc", "#f1ce7c", "#36ccba"],
  565. xAxis: {
  566. axisLabel: {
  567. interval: 0,
  568. },
  569. data: [
  570. "入园", "海关", "运抵", "安检", "核单", "理货", "拉下", "待运区", "货站交接", "机下交接", "装机"
  571. ],
  572. },
  573. series: [
  574. {
  575. name: "平均时间",
  576. type: "line",
  577. smooth: true,
  578. stack: "",
  579. areaStyle: {
  580. opacity: 0,
  581. },
  582. data: [
  583. 4016, 4652, 1570, 6334, 12052, 3115, 10604, 12733, 14533, 2464, 4168,
  584. 3844,
  585. ],
  586. },
  587. {
  588. name: "最长时间",
  589. type: "line",
  590. smooth: true,
  591. stack: "",
  592. areaStyle: {
  593. opacity: 0,
  594. },
  595. data: [
  596. 4558, 770, 11745, 2699, 11205, 6497, 1544, 1555, 4181, 447, 60, 9804,
  597. ],
  598. },
  599. {
  600. name: "最短时间",
  601. type: "line",
  602. smooth: true,
  603. stack: "",
  604. areaStyle: {
  605. opacity: 0,
  606. },
  607. data: [
  608. 14240, 3190, 1699, 14446, 11349, 11182, 14829, 11740, 2418, 4824,
  609. 9707, 8126,
  610. ],
  611. },
  612. ],
  613. },
  614. });
  615. const node = [
  616. "入园", "海关", "运抵", "安检", "核单", "理货", "拉下", "待运区", "货站交接", "机下交接", "装机"
  617. ];
  618. const hours = Array.from({ length: 24 }, (v, i) => i + 1);
  619. const hourPeak = ref({
  620. component: "commonChartsScatter",
  621. option: {
  622. title: node.map((month, index) => ({
  623. top: ((index + 0.5) * 100) / 11 - 3 + "%",
  624. text: month,
  625. textStyle: {
  626. fontSize: 12,
  627. fontWeight: "normal",
  628. color: "#698dc3",
  629. },
  630. })),
  631. singleAxis: node.map((month, index) => ({
  632. type: "category",
  633. data: hours,
  634. top: ((index + 0.5) * 100) / 11 - 3 + "%",
  635. height: 100 / 11 - 5 + "%",
  636. left: "12%",
  637. right: "1%",
  638. axisTick: {
  639. show: false,
  640. },
  641. splitLine: {
  642. show: false,
  643. },
  644. })),
  645. series: node.map((month, index) => ({
  646. singleAxisIndex: index,
  647. coordinateSystem: "singleAxis",
  648. type: "scatter",
  649. data: [
  650. 3, 6, 1, 4, 0, 4, 2, 5, 4, 4, 6, 2, 0, 3, 1, 6, 6, 1, 0, 3, 6, 3, 0, 5,
  651. ],
  652. symbolSize: function (dataItem) {
  653. return dataItem * 3;
  654. },
  655. })),
  656. },
  657. });
  658. const getHourPeakData = () => {
  659. axios
  660. .get("./mock/hourPeakData.json")
  661. .then((res) => {
  662. if (res.data.code === 200 || res.data.code === "200") {
  663. res.data.data.series.forEach((item, index) => {
  664. hourPeak.value.option.series[index].data = item.data;
  665. });
  666. } else {
  667. // this.$message.error('小时高峰量统计分析-初始化数据失败')
  668. }
  669. })
  670. .catch((err) => {
  671. // this.$message.error(err)
  672. });
  673. };
  674. const router = useRouter()
  675. const tabClick = (item, index) => {
  676. tabsIndex.value = index;
  677. if(index==0){
  678. router.push({
  679. path:'../homein'
  680. })
  681. }
  682. if(index==1){
  683. router.push({
  684. path:'../homeOut'
  685. })
  686. }
  687. if(index==2){
  688. router.push({
  689. path:'../indexIn'
  690. })
  691. }
  692. if(index==3){
  693. router.push({
  694. path:'../indexOut'
  695. })
  696. }
  697. };
  698. const showDatePicker = () => {
  699. flag.value = true;
  700. };
  701. onMounted(() => {
  702. // getHourPeakData()
  703. });
  704. </script>
  705. <style lang="scss" scoped>
  706. .dashboard {
  707. position: absolute;
  708. width: 100%;
  709. height: 100%;
  710. left: 0;
  711. top: 0;
  712. background: linear-gradient(185deg, #1e305f, #0f1015);
  713. z-index: 2000;
  714. color: #fff;
  715. &-head {
  716. padding: 0 32px;
  717. height: 40px;
  718. line-height: 40px;
  719. background: #1d2948;
  720. width: 100%;
  721. display: flex;
  722. justify-content: center;
  723. &-title {
  724. font-size: 24px;
  725. font-family: Microsoft YaHei;
  726. font-weight: bold;
  727. color: #51dee9;
  728. }
  729. &-tabs {
  730. font-size: 16px;
  731. font-family: Microsoft YaHei;
  732. font-weight: 400;
  733. color: #ffffff;
  734. &-list {
  735. margin-right: 60px;
  736. cursor: pointer;
  737. position: relative;
  738. &:last-child {
  739. margin-right: 0;
  740. }
  741. }
  742. .active {
  743. color: #51dee9;
  744. &::after {
  745. content: "";
  746. position: absolute;
  747. bottom: 0;
  748. width: 80%;
  749. left: 10%;
  750. height: 2px;
  751. background: #51dee9;
  752. }
  753. }
  754. }
  755. &-zw {
  756. width: 190px;
  757. }
  758. }
  759. &-content {
  760. padding: 0 20px;
  761. height: calc(100% - 40px);
  762. box-sizing: border-box;
  763. display: flex;
  764. flex-direction: column;
  765. &-top {
  766. width: 100%;
  767. height: 65%;
  768. &-left,
  769. &-right {
  770. width: calc(30% - 20px);
  771. &-item {
  772. width: 100%;
  773. height: calc(50% - 20px);
  774. margin: 20px 0;
  775. display: flex;
  776. flex-direction: column;
  777. background-image: url("../../assets/home/pic_border.png");
  778. background-repeat: no-repeat;
  779. background-size: 100% 100%;
  780. padding: 13px;
  781. box-sizing: border-box;
  782. &-top {
  783. width: 100%;
  784. height: 45px;
  785. display: flex;
  786. padding-top: 15px;
  787. box-sizing: border-box;
  788. &-title {
  789. font-size: 16px;
  790. font-weight: bold;
  791. color: #75cee1;
  792. line-height: 1.8;
  793. margin-right: 10px;
  794. }
  795. &-time {
  796. display: flex;
  797. justify-content: flex-start;
  798. align-items: center;
  799. cursor: pointer;
  800. }
  801. }
  802. &-bottom {
  803. width: 100%;
  804. flex: 1;
  805. position: relative;
  806. // margin-top: 10px;
  807. }
  808. }
  809. }
  810. &-center {
  811. width: 40%;
  812. box-sizing: border-box;
  813. display: flex;
  814. flex-direction: column;
  815. &-top {
  816. width: 100%;
  817. height: 32px;
  818. display: flex;
  819. padding-top: 15px;
  820. box-sizing: border-box;
  821. &-title {
  822. font-size: 16px;
  823. font-weight: bold;
  824. color: #75cee1;
  825. line-height: 1.8;
  826. margin-right: 10px;
  827. }
  828. &-time {
  829. display: flex;
  830. justify-content: flex-start;
  831. align-items: center;
  832. cursor: pointer;
  833. }
  834. }
  835. &-bottom {
  836. width: 100%;
  837. flex: 1;
  838. position: relative;
  839. &-box1 {
  840. z-index: 10;
  841. width: 205px;
  842. height: 120px;
  843. border: 2px solid #468fc3;
  844. position: absolute;
  845. left: 50px;
  846. display: flex;
  847. flex-direction: column;
  848. padding: 15px 0 15px 15px;
  849. &-title {
  850. font-size: 16px;
  851. font-weight: bold;
  852. color: #ffffff;
  853. margin-bottom: 10px;
  854. }
  855. &-info {
  856. font-size: 14px;
  857. font-weight: 400;
  858. color: #c0cbe4;
  859. display: flex;
  860. div {
  861. margin-right: 10px;
  862. }
  863. }
  864. }
  865. &-box2 {
  866. z-index: 10;
  867. width: 284px;
  868. height: 120px;
  869. border: 2px solid #468fc3;
  870. position: absolute;
  871. right: 60px;
  872. display: flex;
  873. flex-direction: column;
  874. padding: 15px 0 15px 15px;
  875. &-title {
  876. font-size: 16px;
  877. font-weight: bold;
  878. color: #ffffff;
  879. margin-bottom: 10px;
  880. }
  881. &-info {
  882. font-size: 14px;
  883. font-weight: 400;
  884. color: #c0cbe4;
  885. display: flex;
  886. div {
  887. margin-right: 10px;
  888. }
  889. }
  890. }
  891. }
  892. }
  893. }
  894. &-bottom {
  895. width: 100%;
  896. flex: 1;
  897. &-left,
  898. &-right {
  899. width: calc(30% - 20px);
  900. display: flex;
  901. flex-direction: column;
  902. box-sizing: border-box;
  903. background-image: url("../../assets/home/pic_border.png");
  904. background-repeat: no-repeat;
  905. background-size: 100% 100%;
  906. padding: 13px;
  907. box-sizing: border-box;
  908. margin-top: 20px;
  909. margin-bottom: 20px;
  910. &-top {
  911. width: 100%;
  912. height: 45px;
  913. display: flex;
  914. padding-top: 15px;
  915. box-sizing: border-box;
  916. &-title {
  917. font-size: 16px;
  918. font-weight: bold;
  919. color: #75cee1;
  920. line-height: 1.8;
  921. margin-right: 10px;
  922. }
  923. &-time {
  924. display: flex;
  925. justify-content: flex-start;
  926. align-items: center;
  927. cursor: pointer;
  928. }
  929. }
  930. &-bottom {
  931. width: 100%;
  932. flex: 1;
  933. position: relative;
  934. // margin-top: 10px;
  935. }
  936. }
  937. &-center {
  938. width: 40%;
  939. padding: 13px;
  940. margin-top: 20px;
  941. margin-bottom: 20px;
  942. box-sizing: border-box;
  943. display: flex;
  944. flex-direction: column;
  945. background-image: url("../../assets/home/pic_border.png");
  946. background-repeat: no-repeat;
  947. background-size: 100% 100%;
  948. background-position: center center;
  949. box-sizing: border-box;
  950. &-top {
  951. width: 100%;
  952. height: 45px;
  953. display: flex;
  954. padding-top: 15px;
  955. box-sizing: border-box;
  956. &-title {
  957. font-size: 16px;
  958. font-weight: bold;
  959. color: #75cee1;
  960. line-height: 1.8;
  961. margin-right: 10px;
  962. }
  963. &-time {
  964. display: flex;
  965. justify-content: flex-start;
  966. align-items: center;
  967. cursor: pointer;
  968. }
  969. }
  970. &-bottom {
  971. width: 100%;
  972. flex: 1;
  973. position: relative;
  974. // margin-top: 10px;
  975. }
  976. }
  977. }
  978. .pBox {
  979. background-image: url("../../assets/home/pic_border.png");
  980. background-repeat: no-repeat;
  981. background-size: 100% 100%;
  982. }
  983. }
  984. }
  985. </style>