screenIndex.vue 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958
  1. <!--
  2. * @Author: 15902849627 380091478@qq.com
  3. * @Date: 2024-08-07 15:18:32
  4. * @LastEditors: 15902849627 380091478@qq.com
  5. * @LastEditTime: 2024-09-27 09:32:29
  6. * @FilePath: \assets\src\page\screenIndex.vue
  7. * @Description:
  8. *
  9. * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
  10. -->
  11. <!-- 首页 -->
  12. <template>
  13. <div class="container">
  14. <div class="page_index">
  15. <div class="times fontFx">
  16. <span class="m_10 fontMF">{{ nowWeek }}</span>
  17. <span class="m_10">{{ nowDate }}</span
  18. >{{ nowTime }}
  19. </div>
  20. <div class="tit_box">
  21. <div class="maintitle">{{ pageName }}</div>
  22. </div>
  23. <div class="main">
  24. <div class="topBox">
  25. <div class="left">
  26. <div class="l_inner">
  27. <div class="e_box" style="margin-top: 0">
  28. <div class="tit_bg">
  29. <div class="tit_txt">{{ pageData.COVER.moduleName }}</div>
  30. </div>
  31. <div class="e_inner" style="display: flex; margin: 20px 0">
  32. <div
  33. class="e_item"
  34. :class="[index % 2 == 0 ? 'e_bg3' : 'e_bg1']"
  35. v-for="(item, index) in pageData.COVER.data"
  36. :key="index"
  37. >
  38. <progressBox :data="item" :color="index % 2 == 0 ? '#1EEBBC' : '#2E9AE2'"> </progressBox>
  39. </div>
  40. </div>
  41. </div>
  42. <div class="absolute">
  43. <div
  44. class="e_box e_box2"
  45. style="margin-top: 0"
  46. v-if="pageData.ASSERT_SUMMARY.data && pageData.ASSERT_SUMMARY.data[0]"
  47. >
  48. <div class="tit_bg">
  49. <div class="tit_txt">{{ pageData.ASSERT_SUMMARY.data[0].field }}</div>
  50. </div>
  51. <div class="num">
  52. <count
  53. :startVal="0"
  54. bg
  55. separator=""
  56. :length="7"
  57. :endVal="Number(pageData.ASSERT_SUMMARY.data[0].amount)"
  58. />
  59. </div>
  60. </div>
  61. <div class="ai">
  62. <img src="../assets/img/ai.gif" alt="" style="cursor: pointer;" @click="showAi=!showAi"/>
  63. <div class="gaojing" v-if="pageData.ALARM.data[0] && showAi">
  64. <p class="title">{{ pageData.ALARM.data[0].field }}</p>
  65. <p class="content">{{ pageData.ALARM.data[0].value }}</p>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. <div class="bottom">
  71. <div class="l">
  72. <div class="e_box" style="margin-top: 6px">
  73. <div class="tit_bg">
  74. <div class="tit_txt">{{ pageData.CAR_PUT.moduleName }}</div>
  75. </div>
  76. <div style="margin-top: 10px">
  77. <lineBox :data="pageData.CAR_PUT.data"></lineBox>
  78. </div>
  79. </div>
  80. <div class="e_box" style="margin-top: 6px">
  81. <div class="tit_bg">
  82. <div class="tit_txt">{{ pageData.SUPPLEMENT_ENERGY_PUT.moduleName }}</div>
  83. </div>
  84. <div style="margin-top: 10px">
  85. <lineBox :data="pageData.SUPPLEMENT_ENERGY_PUT.data"></lineBox>
  86. </div>
  87. </div>
  88. <div class="e_box" style="margin-top: 6px">
  89. <div class="tit_bg">
  90. <div class="tit_txt">{{ pageData.BATTERY_PUT.moduleName }}</div>
  91. </div>
  92. <div style="margin-top: 10px">
  93. <lineBox :data="pageData.BATTERY_PUT.data"></lineBox>
  94. </div>
  95. </div>
  96. </div>
  97. </div>
  98. </div>
  99. <div class="middle">
  100. <div class="top">
  101. <div class="btn-list" v-if="pageData.ASSERT_SUMMARY.data[1]">
  102. <div class="btn-item" :class="[btn1 == 0 ? 'active' : '']">
  103. <p>{{ pageData.ASSERT_SUMMARY.data[1].field }}</p>
  104. <p>{{ pageData.ASSERT_SUMMARY.data[1].amount }}</p>
  105. </div>
  106. <div class="btn-item" :class="[btn1 == 1 ? 'active' : '']">
  107. <p>{{ pageData.ASSERT_SUMMARY.data[2].field }}</p>
  108. <p>{{ pageData.ASSERT_SUMMARY.data[2].amount }}</p>
  109. </div>
  110. <div class="btn-item" :class="[btn1 == 2 ? 'active' : '']">
  111. <p>{{ pageData.ASSERT_SUMMARY.data[3].field }}</p>
  112. <p>{{ pageData.ASSERT_SUMMARY.data[3].amount }}</p>
  113. </div>
  114. <div class="btn-item" :class="[btn1 == 3 ? 'active' : '']">
  115. <p>{{ pageData.ASSERT_SUMMARY.data[4].field }}</p>
  116. <p>{{ pageData.ASSERT_SUMMARY.data[4].amount }}</p>
  117. </div>
  118. </div>
  119. </div>
  120. <div class="mapBox">
  121. <mapBox :mapData="pageData.MAP_DATA.data"></mapBox>
  122. </div>
  123. </div>
  124. <div class="left right">
  125. <div class="e_box" style="margin-top: 0; margin-left: 15px">
  126. <div class="tit_bg">
  127. <div class="tit_txt">{{ pageData.COOPERATION.moduleName }}</div>
  128. </div>
  129. <div class="e_inner" style="display: flex; margin: 20px 0">
  130. <div class="e_item e_bg1" v-for="(item, index) in pageData.COOPERATION.data" :key="index">
  131. <progressBox :data="item"></progressBox>
  132. </div>
  133. </div>
  134. </div>
  135. <div class="bottom">
  136. <div class="r">
  137. <div class="e_box">
  138. <div class="tit_bg">
  139. <div class="tit_txt">{{ pageData.CAR_INFO.moduleName }}</div>
  140. </div>
  141. <div class="table">
  142. <div class="th" style="display: flex">
  143. <div class="td" v-for="(i, k) in pageData.CAR_INFO.data.field" :key="k">{{ i }}</div>
  144. </div>
  145. <vue-seamless-scroll
  146. :data="pageData.CAR_INFO.data.value"
  147. class="seamless-warp"
  148. :class-option="defaultOption"
  149. >
  150. <div
  151. class="tr last"
  152. v-for="(item, index) in pageData.CAR_INFO.data.value"
  153. :key="index"
  154. :style="{
  155. background: index % 2 == 0 ? 'rgba(255,255,255,0.1)' : '',
  156. color: index == 0 ? '#108a92' : '#fff',
  157. display: 'flex'
  158. }"
  159. >
  160. <div class="td" v-for="(i, k) in item.split(',')" :key="k">{{ i }}</div>
  161. </div>
  162. </vue-seamless-scroll>
  163. </div>
  164. </div>
  165. <div class="e_box">
  166. <div class="tit_bg">
  167. <div class="tit_txt">{{ pageData.SUPPLEMENT_ENERGY_INFO.moduleName }}</div>
  168. </div>
  169. <div class="table">
  170. <div class="th" style="display: flex">
  171. <div class="td" v-for="(i, k) in pageData.SUPPLEMENT_ENERGY_INFO.data.field" :key="k">
  172. {{ i }}
  173. </div>
  174. </div>
  175. <vue-seamless-scroll
  176. :data="pageData.SUPPLEMENT_ENERGY_INFO.data.value"
  177. class="seamless-warp"
  178. :class-option="defaultOption"
  179. >
  180. <div
  181. class="tr last"
  182. v-for="(item, index) in pageData.SUPPLEMENT_ENERGY_INFO.data.value"
  183. :key="index"
  184. :style="{
  185. background: index % 2 == 0 ? 'rgba(255,255,255,0.1)' : '',
  186. color: index == 0 ? '#108a92' : '#fff',
  187. display: 'flex'
  188. }"
  189. >
  190. <div class="td" v-for="(i, k) in item.split(',')" :key="k">{{ i }}</div>
  191. </div>
  192. </vue-seamless-scroll>
  193. </div>
  194. </div>
  195. <div class="e_box">
  196. <div class="tit_bg">
  197. <div class="tit_txt">{{ pageData.CBS_INFO.moduleName }}</div>
  198. </div>
  199. <div class="table">
  200. <div class="th" style="display: flex">
  201. <div class="td" v-for="(i, k) in pageData.CBS_INFO.data.field" :key="k">{{ i }}</div>
  202. </div>
  203. <vue-seamless-scroll
  204. :data="pageData.CBS_INFO.data.value"
  205. class="seamless-warp"
  206. :class-option="defaultOption"
  207. >
  208. <div
  209. class="tr last"
  210. v-for="(item, index) in pageData.CBS_INFO.data.value"
  211. :key="index"
  212. :style="{
  213. background: index % 2 == 0 ? 'rgba(255,255,255,0.1)' : '',
  214. color: index == 0 ? '#108a92' : '#fff',
  215. display: 'flex'
  216. }"
  217. >
  218. <div class="td" v-for="(i, k) in item.split(',')" :key="k">{{ i }}</div>
  219. </div>
  220. </vue-seamless-scroll>
  221. </div>
  222. </div>
  223. </div>
  224. </div>
  225. </div>
  226. </div>
  227. <div class="bottomBox">
  228. <div class="bottom">
  229. <div class="item">
  230. <div class="tit_bg">
  231. <div class="tit_txt">{{ pageData.SUPPLEMENT_ENERGY_PROVINCE.moduleName }}</div>
  232. </div>
  233. <div class="subTitle">{{ pageData.SUPPLEMENT_ENERGY_PROVINCE.data.unit }}</div>
  234. <div class="barItem" v-for="(i, k) in pageData.SUPPLEMENT_ENERGY_PROVINCE.data.items" :key="k">
  235. <span class="label">{{ i.field }}</span>
  236. <div class="barBox">
  237. <div class="active" :style="{ width: i.proportion }"></div>
  238. <span>{{ i.amount }}</span>
  239. </div>
  240. </div>
  241. </div>
  242. <div class="item">
  243. <div class="tit_bg">
  244. <div class="tit_txt">{{ pageData.SUPPLEMENT_ENERGY_COST.moduleName }}</div>
  245. </div>
  246. <div class="subTitle">{{ pageData.SUPPLEMENT_ENERGY_COST.data.unit }}</div>
  247. <div class="barItem" v-for="(i, k) in pageData.SUPPLEMENT_ENERGY_COST.data.items" :key="k">
  248. <span class="label">{{ i.field }}</span>
  249. <div class="barBox">
  250. <div class="active" :style="{ width: i.proportion }"></div>
  251. <span>{{ i.amount }}</span>
  252. </div>
  253. </div>
  254. </div>
  255. <div class="item">
  256. <div class="tit_bg">
  257. <div class="tit_txt">{{ pageData.CAR_PROVINCE.moduleName }}</div>
  258. </div>
  259. <div class="subTitle">{{ pageData.CAR_PROVINCE.data.unit }}</div>
  260. <div class="barItem" v-for="(i, k) in pageData.CAR_PROVINCE.data.items" :key="k">
  261. <span class="label">{{ i.field }}</span>
  262. <div class="barBox">
  263. <div class="active" :style="{ width: i.proportion }"></div>
  264. <span>{{ i.amount }}</span>
  265. </div>
  266. </div>
  267. </div>
  268. <div class="item">
  269. <div class="tit_bg">
  270. <div class="tit_txt">{{ pageData.BATTERY_PROVINCE.moduleName }}</div>
  271. </div>
  272. <div class="subTitle">{{ pageData.BATTERY_PROVINCE.data.unit }}</div>
  273. <div class="barItem" v-for="(i, k) in pageData.BATTERY_PROVINCE.data.items" :key="k">
  274. <span class="label">{{ i.field }}</span>
  275. <div class="barBox">
  276. <div class="active" :style="{ width: i.proportion }"></div>
  277. <span>{{ i.amount }}</span>
  278. </div>
  279. </div>
  280. </div>
  281. <div class="item">
  282. <div class="tit_bg">
  283. <div class="tit_txt">{{ pageData.BATTERY_COST.moduleName }}</div>
  284. </div>
  285. <div class="subTitle">{{ pageData.BATTERY_COST.data.unit }}</div>
  286. <div class="barItem" v-for="(i, k) in pageData.BATTERY_COST.data.items" :key="k">
  287. <span class="label">{{ i.field }}</span>
  288. <div class="barBox">
  289. <div class="active" :style="{ width: i.proportion }"></div>
  290. <span>{{ i.amount }}</span>
  291. </div>
  292. </div>
  293. </div>
  294. </div>
  295. </div>
  296. </div>
  297. </div>
  298. </div>
  299. </template>
  300. <script>
  301. import AMapLoader from '@amap/amap-jsapi-loader';
  302. import moment from 'moment';
  303. import * as echarts from 'echarts';
  304. import 'echarts-gl';
  305. import count from '@/components/count.vue';
  306. import Charts from '@/components/selfCP/charts.vue';
  307. import { POST, GET } from '@/server/api/common';
  308. import mapBox from '@/components/map.vue';
  309. import progressBox from '@/components/progress.vue';
  310. import lineBox from '@/components/lineBox.vue';
  311. import rightBox from './right.vue';
  312. import { setOption1, setOption2, setOption3, setOption4, setOption5, lineOption, userList } from './data.js';
  313. let infoWindow = null;
  314. let map;
  315. export default {
  316. name: 'dashboard',
  317. components: {
  318. Charts,
  319. count,
  320. mapBox,
  321. rightBox,
  322. progressBox,
  323. lineBox
  324. },
  325. data() {
  326. return {
  327. showAi: true,
  328. nowWeek: '',
  329. nowDate: '',
  330. nowTime: '',
  331. setOption1,
  332. setOption2,
  333. setOption3,
  334. setOption4,
  335. setOption5,
  336. lineOption,
  337. taskData2: userList,
  338. btn1: 0,
  339. pageName: '',
  340. pageData: {
  341. pieList: [],
  342. ALARM: { data: [] },
  343. AI_RISK: { data: [] },
  344. ASSERT_SUMMARY: {
  345. data: []
  346. },
  347. BATTERY_COST: { data: [] },
  348. BATTERY_PROVINCE: { data: [] },
  349. BATTERY_PUT: { data: [] },
  350. CAR_INFO: { data: [] },
  351. CAR_PROVINCE: { data: [] },
  352. CAR_PUT: { data: [] },
  353. CBS_INFO: { data: [] },
  354. COOPERATION: { data: [] },
  355. COVER: { data: [] },
  356. MAP_DATA: { data: [] },
  357. RISK_RECORD: { data: [] },
  358. SUPPLEMENT_ENERGY_COST: { data: [] },
  359. SUPPLEMENT_ENERGY_INFO: { data: [] },
  360. SUPPLEMENT_ENERGY_PROVINCE: { data: [] },
  361. SUPPLEMENT_ENERGY_PUT: { data: [] }
  362. }
  363. };
  364. },
  365. mounted() {
  366. this.getNowTime();
  367. this.getData();
  368. // 定时获取时间
  369. this.newTimer = setInterval(this.getNowTime, 1000);
  370. moment.locale('zh-cn');
  371. // 监听iframe传参
  372. // window.addEventListener('message', this.getiframeMsg);
  373. },
  374. destoryed() {
  375. clearInterval(this.newTimer);
  376. this.newTimer = null;
  377. },
  378. computed: {
  379. defaultOption() {
  380. return {
  381. step: 2, // 数值越大速度滚动越快
  382. limitMoveNum: 6, // 开始无缝滚动的数据量 this.dataList.length
  383. hoverStop: true, // 是否开启鼠标悬停stop
  384. direction: 1, // 0向下 1向上 2向左 3向右
  385. openWatch: true, // 开启数据实时监控刷新dom
  386. singleHeight: 25, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
  387. singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
  388. waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
  389. };
  390. },
  391. defaultOption2() {
  392. return {
  393. step: 2, // 数值越大速度滚动越快
  394. limitMoveNum: 4, // 开始无缝滚动的数据量 this.dataList.length
  395. hoverStop: true, // 是否开启鼠标悬停stop
  396. direction: 1, // 0向下 1向上 2向左 3向右
  397. openWatch: true, // 开启数据实时监控刷新dom
  398. singleHeight: 48, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
  399. singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
  400. waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
  401. };
  402. }
  403. },
  404. beforeRouteLeave(to, from, next) {
  405. // 离开组件时停掉定时器,节省内存
  406. clearInterval(this.newTimer);
  407. next();
  408. },
  409. methods: {
  410. getData() {
  411. GET(this.$config.api + '/elms-view/view/assertOperations').then((res) => {
  412. this.pageData = res.data.data.item;
  413. this.pageData.pieList = this.chunkArray(this.pageData.AI_RISK.data, 6);
  414. console.log(this.pageData.pieList);
  415. this.pageName = res.data.data.name;
  416. });
  417. },
  418. chunkArray(array, chunkSize) {
  419. let result = [];
  420. for (let i = 0; i < array.length; i += chunkSize) {
  421. result.push(array.slice(i, i + chunkSize));
  422. }
  423. return result;
  424. },
  425. getNowTime() {
  426. let date = new Date();
  427. // 日期格式 2022.05.31.
  428. this.nowDate =
  429. date.getFullYear() +
  430. '.' +
  431. (date.getMonth() + 1 >= 10 ? date.getMonth() + 1 : '0' + (date.getMonth() + 1)) +
  432. '.' +
  433. (date.getDate() >= 10 ? date.getDate() : '0' + date.getDate());
  434. // 时间格式 12:11:27
  435. this.nowTime =
  436. date.getHours() +
  437. ':' +
  438. (date.getMinutes() >= 10 ? date.getMinutes() : '0' + date.getMinutes()) +
  439. ':' +
  440. (date.getSeconds() >= 10 ? date.getSeconds() : '0' + date.getSeconds());
  441. // 星期
  442. let weeks = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
  443. this.nowWeek = weeks[date.getDay()];
  444. }
  445. }
  446. };
  447. </script>
  448. <style scoped lang="less">
  449. @font-face {
  450. font-family: MFLiHei;
  451. src: url('./font/MFLiHei_Noncommercial-Regular.otf') format('opentype');
  452. }
  453. @font-face {
  454. font-family: FXLed;
  455. src: url('./font/FX-LED Bold.TTF');
  456. }
  457. .el-carousel__item h3 {
  458. color: #475669;
  459. font-size: 18px;
  460. opacity: 0.75;
  461. line-height: 300px;
  462. margin: 0;
  463. }
  464. .el-carousel__item:nth-child(2n) {
  465. }
  466. .el-carousel__item:nth-child(2n + 1) {
  467. }
  468. .table {
  469. display: flex;
  470. flex-direction: column;
  471. align-items: flex-end;
  472. width: 350px;
  473. margin-top: 2px;
  474. .seamless-warp {
  475. overflow: hidden;
  476. // height: 360px;
  477. height: 110px;
  478. width: 100%;
  479. }
  480. .th,
  481. .tr {
  482. width: 100%;
  483. display: flex;
  484. height: 18px;
  485. line-height: 18px;
  486. }
  487. .th .td,
  488. .tr .td {
  489. flex: 1;
  490. font-weight: 400;
  491. font-size: 10px;
  492. color: #ffffff;
  493. height: 18px;
  494. line-height: 18px;
  495. text-align: center;
  496. }
  497. .th .td {
  498. font-size: 12px;
  499. }
  500. }
  501. .table2 {
  502. width: 800px;
  503. overflow: hidden;
  504. display: flex;
  505. flex-direction: column;
  506. align-items: flex-end;
  507. .th .td {
  508. font-size: 14px;
  509. height: 48px;
  510. line-height: 48px;
  511. }
  512. .th .td,
  513. .tr .td {
  514. flex: 1;
  515. font-weight: 400;
  516. color: #ffffff;
  517. height: 48px;
  518. line-height: 48px;
  519. text-align: center;
  520. }
  521. .th,
  522. .tr {
  523. width: 100%;
  524. }
  525. .tr .td {
  526. font-size: 12px;
  527. }
  528. .seamless-warp {
  529. overflow: hidden;
  530. // height: 360px;
  531. height: 336px;
  532. width: 100%;
  533. }
  534. }
  535. * {
  536. user-select: none;
  537. }
  538. .fontMF {
  539. font-family: MFLiHei;
  540. }
  541. .fontFx {
  542. font-family: FXLed;
  543. }
  544. .flex {
  545. display: flex;
  546. align-items: center;
  547. }
  548. .MR40 {
  549. margin-right: 40px;
  550. }
  551. .m_10 {
  552. margin-right: 10px;
  553. }
  554. .f1 {
  555. font-size: 12px;
  556. }
  557. .times {
  558. position: fixed;
  559. right: 50px;
  560. height: 30px;
  561. line-height: 30px;
  562. font-size: 16px;
  563. top: 0px;
  564. color: #fff;
  565. }
  566. .last {
  567. .td:last-child {
  568. color: #3a93ff;
  569. }
  570. }
  571. .tit_box {
  572. position: fixed;
  573. width: 100%;
  574. height: 67px;
  575. background-position: 0 0;
  576. background-repeat: no-repeat;
  577. left: 0px;
  578. top: 26px;
  579. z-index: 50;
  580. .maintitle {
  581. text-align: center;
  582. font-weight: 400;
  583. font-size: 30px;
  584. color: #ffffff;
  585. line-height: 67px;
  586. height: 67px;
  587. margin-top: -22px;
  588. background: linear-gradient(0deg, #9dc7fb 0%, #9dc7fb 40%, #ffffff 70%, #ffffff 100%);
  589. -webkit-background-clip: text;
  590. -webkit-text-fill-color: transparent;
  591. flex: 1;
  592. font-weight: bold;
  593. letter-spacing: 15px;
  594. text-overflow: ellipsis;
  595. white-space: nowrap;
  596. overflow: hidden;
  597. font-size: 30px;
  598. color: #ffffff;
  599. }
  600. }
  601. .container {
  602. width: 100%;
  603. height: 1080px;
  604. background: url('../assets/img/background.png') no-repeat;
  605. background-size: 100% 100%;
  606. }
  607. .bottomBox {
  608. position: absolute;
  609. width: 100%;
  610. bottom: 0;
  611. left: 0;
  612. .bottom {
  613. width: 100%;
  614. display: flex;
  615. justify-content: space-between;
  616. .item {
  617. width: 342px;
  618. height: 198px;
  619. padding: 20px 20px;
  620. background: url('../assets/img/smallBg.png') no-repeat rgba(255, 255, 255, 0.05);
  621. background-size: 100% 100%;
  622. box-sizing: border-box;
  623. .subTitle {
  624. font-weight: 400;
  625. font-size: 12px;
  626. color: #ffffff;
  627. line-height: 30px;
  628. }
  629. .barItem {
  630. display: flex;
  631. margin-bottom: 5px;
  632. .barBox {
  633. width: 247px;
  634. height: 18px;
  635. background: rgba(255, 255, 255, 0.1);
  636. display: flex;
  637. align-items: center;
  638. .active {
  639. height: 10px;
  640. background: linear-gradient(90deg, #0067ff, #3a93ff);
  641. }
  642. span {
  643. font-weight: 400;
  644. font-size: 12px;
  645. color: #ffffff;
  646. line-height: 30px;
  647. margin-left: 8px;
  648. }
  649. }
  650. .label {
  651. display: block;
  652. width: 66px;
  653. font-weight: 400;
  654. font-size: 12px;
  655. color: #ffffff;
  656. line-height: 18px;
  657. }
  658. }
  659. }
  660. }
  661. }
  662. .page_index {
  663. width: 100%;
  664. height: 1080px;
  665. // overflow: hidden;
  666. position: relative;
  667. padding: 0 60px;
  668. padding-top: 102px;
  669. background: url('../assets/img/border.png') no-repeat;
  670. background-size: calc(100% - 40px) calc(100% - 40px);
  671. background-position: 20px 20px;
  672. box-sizing: border-box;
  673. .main {
  674. display: flex;
  675. justify-content: space-between;
  676. position: relative;
  677. height: 900px;
  678. .bottom {
  679. display: flex;
  680. }
  681. .topBox {
  682. display: flex;
  683. width: 100%;
  684. }
  685. .tit_bg {
  686. width: 200px;
  687. height: 21px;
  688. background-image: url(../assets/img/tit_bg1.png);
  689. background-position: 0 0;
  690. background-repeat: no-repeat;
  691. .tit_txt {
  692. font-weight: 400;
  693. font-size: 14px;
  694. color: #ffffff;
  695. line-height: 26px;
  696. text-indent: 30px;
  697. }
  698. }
  699. .left {
  700. width: 529px;
  701. height: 689px;
  702. background: url('../assets/img/leftBg.png') no-repeat;
  703. background-size: 100% 100%;
  704. padding: 20px 20px;
  705. margin-top: 20px;
  706. box-sizing: border-box;
  707. .l_inner {
  708. display: flex;
  709. align-items: center;
  710. position: relative;
  711. .absolute {
  712. position: absolute;
  713. right: -220px;
  714. top: 0;
  715. .ai {
  716. position: relative;
  717. top: 346px;
  718. img {
  719. width: 133px;
  720. height: 130px;
  721. }
  722. .gaojing {
  723. width: 281px;
  724. height: 90px;
  725. background: url('../assets/img/gaojing.png') no-repeat;
  726. background-size: 100% 100%;
  727. color: #fff;
  728. padding-top: 11px;
  729. padding-left: 5px;
  730. box-sizing: border-box;
  731. .content {
  732. width: 270px;
  733. height: 63px;
  734. font-family: Source Han Sans SC;
  735. font-weight: 400;
  736. font-size: 11px;
  737. margin-top: 11px;
  738. color: #ffffff;
  739. }
  740. .title {
  741. font-weight: bold;
  742. font-size: 14px;
  743. padding-left: 33px;
  744. color: #333333;
  745. }
  746. }
  747. }
  748. }
  749. }
  750. .e_box {
  751. margin-top: 14px;
  752. .e_item {
  753. width: 75px;
  754. height: 75px;
  755. background-position: 0 0;
  756. background-repeat: no-repeat;
  757. margin-right: 13px;
  758. }
  759. .e_item:nth-last-child(1) {
  760. margin-right: 0;
  761. }
  762. .e_bg1 {
  763. background-image: url(../assets/img/card1.png);
  764. background-size: 100% 100%;
  765. }
  766. .e_bg2 {
  767. background-image: url(../assets/img/card2.png);
  768. background-size: 100% 100%;
  769. }
  770. .e_bg3 {
  771. background-image: url(../assets/img/card3.png);
  772. background-size: 100% 100%;
  773. }
  774. .e_bg4 {
  775. background-image: url(../assets/img/card4.png);
  776. background-size: 100% 100%;
  777. }
  778. }
  779. .inner {
  780. margin-top: 87px;
  781. }
  782. .e_box2 {
  783. .tit_bg {
  784. background: none;
  785. .tit_txt {
  786. display: flex;
  787. align-items: center;
  788. text-indent: 30px;
  789. background: url('../assets/img/dot.png') no-repeat;
  790. background-size: 20px 20px;
  791. }
  792. }
  793. }
  794. }
  795. .middle {
  796. // width:851px;
  797. flex: 1;
  798. .top {
  799. width: 100%;
  800. // left: 50%;
  801. // top: 20px;
  802. // margin-left: -528px;
  803. height: 25px;
  804. background: url('../assets/img/btnBoxBG.png') no-repeat;
  805. background-size: 100% 100%;
  806. z-index: 20;
  807. .btn-list {
  808. width: 374px;
  809. display: flex;
  810. justify-content: space-between;
  811. position: absolute;
  812. left: 50%;
  813. margin-left: -191px;
  814. top: -15px;
  815. align-items: center;
  816. .btn-item {
  817. width: 47px;
  818. height: 41px;
  819. background: url('../assets/img/btn.png') no-repeat;
  820. background-size: 100% 100%;
  821. display: flex;
  822. align-items: center;
  823. justify-content: center;
  824. flex-direction: column;
  825. cursor: pointer;
  826. p:first-child {
  827. font-family: MFLiHei;
  828. font-weight: 400;
  829. font-size: 11px;
  830. color: #3a93ff;
  831. margin: 0;
  832. text-align: center;
  833. }
  834. p:last-child {
  835. font-family: FXLed;
  836. font-weight: 400;
  837. font-size: 11px;
  838. margin: 0;
  839. text-align: center;
  840. color: #3a93ff;
  841. }
  842. }
  843. .active {
  844. width: 57px;
  845. height: 55px;
  846. background: url('../assets/img/btnActive.png') no-repeat;
  847. background-size: 100% 100%;
  848. p:first-child {
  849. font-family: MFLiHei;
  850. font-weight: 400;
  851. font-size: 13px;
  852. color: #3a93ff;
  853. margin: 0;
  854. text-align: center;
  855. }
  856. p:last-child {
  857. font-family: FXLed;
  858. font-weight: 400;
  859. font-size: 12px;
  860. margin: 0;
  861. text-align: center;
  862. color: #3a93ff;
  863. }
  864. }
  865. }
  866. }
  867. }
  868. .right {
  869. width: 529px;
  870. height: 689px;
  871. background: url('../assets/img/rightBg.png') no-repeat;
  872. background-size: 100% 100%;
  873. padding: 20px;
  874. box-sizing: border-box;
  875. margin-top: 20px;
  876. padding-left: 150px;
  877. }
  878. }
  879. }
  880. .pieList {
  881. margin-top: 10px;
  882. display: flex;
  883. flex-wrap: wrap;
  884. height: 368px;
  885. box-sizing: border-box;
  886. .carousel {
  887. }
  888. }
  889. </style>