Dashboard.vue 64 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525
  1. <!-- 首页 -->
  2. <template>
  3. <div class="page_index">
  4. <div id="bg"></div>
  5. <div class="content">
  6. <!-- <div :class="tabsActive == 1 ? 'top top_bg_1' : 'top top_bg_2'">
  7. <div class="title fontMF">无人地磅数据可视化</div>
  8. </div> -->
  9. <div class="weather flex">
  10. <div class="flex fontMF MR40" style="padding-left: 40px;">
  11. <span class="text">{{ weatherInfo && weatherInfo.info }}</span>
  12. </div>
  13. <div class="text flex fontMF MR40" style="margin-left: 40px;">
  14. 温度 &nbsp;<span class="num fontFx">{{ weatherInfo && weatherInfo.temperature }}<span
  15. style="font-size: 18px"> ℃</span></span>
  16. </div>
  17. </div>
  18. <div class="time flex">
  19. <div class=" fontFx num" style="margin-right: 20px;">{{ timeInfo && timeInfo.ymd }}</div>
  20. <div class="fontFx num">{{ timeInfo && timeInfo.hms }}</div>
  21. </div>
  22. <div class="contain">
  23. <div class="mid_charts">
  24. <div class="botChart">
  25. <div class="left_charts">
  26. <div class="leftdivitem newLeftdivitem" style="padding: 23px 26px;">
  27. <div class="btnGroup">
  28. <div :class="current1 == 1 ? 'btn1' : 'btn2'" @click="current1 = 1">物流</div>
  29. <div :class="current1 == 2 ? 'btn1' : 'btn2'" style="position:relative;left:-6px"
  30. @click="current1 = 2">铲车</div>
  31. </div>
  32. <div class="title1">物流铲车司机排行榜 </div>
  33. <div class="scroll_table">
  34. <div class="thead flex">
  35. <div class="th" style="width: 20%;padding-left: 10px;">排名</div>
  36. <div class="th" style="width: 36%">运单号</div>
  37. <div class="th" style="width: 24%">车牌号</div>
  38. <div class="th" style="width: 20%">超时状态</div>
  39. </div>
  40. <div class="tbody">
  41. <vue-seamless-scroll v-if="current1 == 1"
  42. :data="driverRanking.logistics_truck_driver_ranking" class="seamless-warp"
  43. style="height:800px;" :class-option="{
  44. step: 2, // 数值越大速度滚动越快
  45. limitMoveNum: 15, // 开始无缝滚动的数据量 this.dataList.length
  46. hoverStop: true, // 是否开启鼠标悬停stop
  47. direction: 1, // 0向下 1向上 2向左 3向右
  48. openWatch: true, // 开启数据实时监控刷新dom
  49. singleHeight: 32, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
  50. singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
  51. waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
  52. }">
  53. <div class="tr flex"
  54. v-for="(item, i) in driverRanking.logistics_truck_driver_ranking">
  55. <div class="td" style="width: 20%;padding-left: 10px;">{{ item.ranking
  56. }}
  57. </div>
  58. <div class="td" style="width: 36%">{{ item.task_no }}</div>
  59. <div class="td" style="width: 24%">{{ item.license_plate }}
  60. </div>
  61. <div class="td" style="width: 20%;color:#01FFFF">
  62. {{ item.timeout_status }}
  63. </div>
  64. </div>
  65. </vue-seamless-scroll>
  66. <vue-seamless-scroll v-if="current1 == 2" :data="driverRanking.driver_ranking"
  67. class="seamless-warp" style="height: 800px;" :class-option="{
  68. step: 2, // 数值越大速度滚动越快
  69. limitMoveNum: driverRanking.driver_ranking.length, // 开始无缝滚动的数据量 this.dataList.length
  70. hoverStop: true, // 是否开启鼠标悬停stop
  71. direction: 1, // 0向下 1向上 2向左 3向右
  72. openWatch: true, // 开启数据实时监控刷新dom
  73. singleHeight: 30, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
  74. singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
  75. waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
  76. }">
  77. <div class="tr flex" v-for="(item, i) in driverRanking.driver_ranking">
  78. <div class="td" style="width: 20%;padding-left: 10px;">{{ item.ranking
  79. }}
  80. </div>
  81. <div class="td" style="width: 36%">{{ item.task_no }}</div>
  82. <div class="td" style="width: 24%">{{ item.license_plate }}
  83. </div>
  84. <div class="td" style="width: 20%;color:#01FFFF">
  85. {{ item.timeout_status }}
  86. </div>
  87. </div>
  88. </vue-seamless-scroll>
  89. </div>
  90. </div>
  91. </div>
  92. </div>
  93. <div class="left_charts newLeftdivitem" style="margin-left: 20px;">
  94. <div class="leftdivitem leftdivitem1">
  95. <div class="leftdivitemchild">
  96. <div class="title2">场内拥堵率</div>
  97. <div class="pie pie1">
  98. <Charts :eOption="pie" v-if="pie" style="height: 207px" />
  99. </div>
  100. </div>
  101. <div class="leftdivitemchild">
  102. <div class="title2">场内异常率</div>
  103. <div class="pie pie2">
  104. <Charts :eOption="pie2" v-if="pie2" style="height: 207px" />
  105. </div>
  106. </div>
  107. </div>
  108. <div class="leftdivitem leftdivitem1" style="">
  109. <div class="leftdivitemchild">
  110. <div class="title2">潜在接单司机</div>
  111. <Charts :eOption="bing" v-if="bing" style="height:250px" />
  112. </div>
  113. <div class="leftdivitemchild">
  114. <Charts :eOption="bar" v-if="bar" style="height: 250px;margin-top: 30px;" />
  115. </div>
  116. </div>
  117. <div class="leftdivitem " style="padding: 14px 30px;">
  118. <div class="title2">近30天出货量</div>
  119. <div>
  120. <Charts :eOption="line" v-if="line" style="height: 250px"></Charts>
  121. </div>
  122. </div>
  123. </div>
  124. <div class="mid">
  125. <div class="topChart flex">
  126. <div class="toptitle">今日概况</div>
  127. <div class="num_item" v-for="(item, i) in topChartList" :key="i">
  128. <div class="num_title"> <img src="../../assets/newimg/s.png" alt=""> {{ item.title
  129. }}</div>
  130. <div class="num_value">
  131. <div v-for="(obj, j) in item.value" :key="j" class="num fontFx">{{ obj }}</div>
  132. <div class="weight">{{ item.unit }}</div>
  133. </div>
  134. </div>
  135. </div>
  136. <div class="midMap">
  137. <div class="toptitle">矿区地图</div>
  138. <div style="height: 100%;border-radius:20px;overflow: hidden;">
  139. <amap :zoom="6" :marker="Weighbridge" :center="center" @map-loaded="onMapLoaded">
  140. </amap>
  141. </div>
  142. </div>
  143. <!-- <div class="middibu"></div> -->
  144. </div>
  145. <div class="right">
  146. <div class="right_content">
  147. <div class="rightcontent1">
  148. <div class="title2">地磅数据统计</div>
  149. <div class="btnGroup2">
  150. <div :class="current2 == 1 ? 'btn1' : 'btn2'" @click="current2 = 1">按月计算</div>
  151. <div :class="current2 == 2 ? 'btn1' : 'btn2'" @click="current2 = 2"
  152. style="position:relative;left:-6px">按年计算</div>
  153. </div>
  154. <div class="rightcontentitem1">
  155. <div>
  156. <p>{{
  157. current2 == 1 ?
  158. statistics.month.vehicle_count : statistics.year.vehicle_count
  159. }}</p>
  160. <p>{{ current2 == 1 ? '月' : '年' }}过磅车辆/辆</p>
  161. </div>
  162. <div>
  163. <p>{{ current2 == 1 ? statistics.month.material_ton :
  164. statistics.year.material_ton
  165. }}</p>
  166. <p>{{ current2 == 1 ? '月' : '年' }}出货量/吨</p>
  167. </div>
  168. </div>
  169. <div class="rightcontentitem2">
  170. <div>
  171. <p>{{ current2 == 1 ? statistics.month.order_count :
  172. statistics.year.order_count
  173. }}</p>
  174. <p>{{ current2 == 1 ? '月' : '年' }}派单量/单</p>
  175. </div>
  176. <div>
  177. <p>{{
  178. current2 == 1 ?
  179. statistics.month.exception_count : statistics.year.exception_count
  180. }}</p>
  181. <p>{{ current2 == 1 ? '月' : '年' }}异常处理量/单</p>
  182. </div>
  183. </div>
  184. <div class="detail">
  185. <div class="btnGroup">
  186. <div :class="current3 == 1 ? 'btn1' : 'btn2'" @click="current3 = 1">今日</div>
  187. <div :class="current3 == 2 ? 'btn1' : 'btn2'" @click="current3 = 2">本月</div>
  188. </div>
  189. <div class="aa a1">
  190. <p>{{ current3 == 1 ? "今日" : "本月" }}总量/吨</p>
  191. <p>{{ current3 == 1 ? overview.today.total : overview.month.total }}</p>
  192. </div>
  193. <div class="a3">
  194. <img src="@/assets/newimg/490f9990ec23ee5671551eca4d18f3aa.png" alt="">
  195. <!-- <p>订单</p>
  196. <p>详情</p> -->
  197. <!-- <p>{{ current3 == 1 ? overview.today.completion_rate :
  198. overview.month.completion_rate }}<span>%</span>
  199. </p>
  200. <p>完成率</p> -->
  201. </div>
  202. <div class="aa a2">
  203. <p>{{ current3 == 1 ? "今日" : "本月" }}车次/次</p>
  204. <p>{{ current3 == 1 ? overview.today.vehicle_count :
  205. overview.month.vehicle_count }}
  206. </p>
  207. </div>
  208. </div>
  209. </div>
  210. <div class="rightcontent2">
  211. <div class="title1">异常过磅车辆数据库</div>
  212. <div class="scroll_table">
  213. <div class="thead flex">
  214. <div class="th" style="width: 20%;padding-left: 10px;">地磅名称</div>
  215. <div class="th" style="width: 24%">车牌号</div>
  216. <div class="th" style="width: 36%">异常时间</div>
  217. <div class="th" style="width: 20%">异常原因</div>
  218. </div>
  219. <div class="tbody">
  220. <vue-seamless-scroll :data="abnormal" class="seamless-warp"
  221. style="height: 370px;" :class-option="{
  222. step: 2, // 数值越大速度滚动越快
  223. limitMoveNum: abnormal.length, // 开始无缝滚动的数据量 this.dataList.length
  224. hoverStop: true, // 是否开启鼠标悬停stop
  225. direction: 1, // 0向下 1向上 2向左 3向右
  226. openWatch: true, // 开启数据实时监控刷新dom
  227. singleHeight: 30, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
  228. singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
  229. waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
  230. }">
  231. <div class="tr flex" v-for="(item, i) in abnormal">
  232. <div class="td" style="width: 20%;padding-left: 10px;">{{
  233. item.wb_name }}
  234. </div>
  235. <div class="td" style="width: 24%">{{ item.license_plate }}</div>
  236. <div class="td" style="width: 36%">{{ item.exception_time }}</div>
  237. <div class="td" style="width: 20%;color:#01FFFF">
  238. {{ item.exception_reason }}</div>
  239. </div>
  240. </vue-seamless-scroll>
  241. </div>
  242. </div>
  243. </div>
  244. </div>
  245. </div>
  246. <div class="right">
  247. <div class="right_content">
  248. <div class="rightcontent2">
  249. <div class="title2">过磅记录数据库</div>
  250. <div class="list" style="overflow: hidden;margin-top: 17px;">
  251. <vue-seamless-scroll :data="overweightRecord" class="seamless-warp"
  252. style="height: 820px;" :class-option="{
  253. step: 2, // 数值越大速度滚动越快
  254. limitMoveNum: overweightRecord.length, // 开始无缝滚动的数据量 this.dataList.length
  255. hoverStop: true, // 是否开启鼠标悬停stop
  256. direction: 1, // 0向下 1向上 2向左 3向右
  257. openWatch: true, // 开启数据实时监控刷新dom
  258. singleHeight: 110, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
  259. singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
  260. waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
  261. }">
  262. <div class="item" v-for="(item, i) in overweightRecord"
  263. style="margin-bottom: 10px;">
  264. <p class="tt">地磅编号:{{ item.wb_code }}</p>
  265. <div>
  266. <p><span>车牌号:</span>{{ item.license_plate }}</p>
  267. <p><span>地磅名称:</span>{{ item.wb_name }}</p>
  268. </div>
  269. <div>
  270. <p><span>过磅重量:</span>{{ item.tare_weight }}吨</p>
  271. <p><span>过磅时间:</span>{{ item.recv_time }}</p>
  272. </div>
  273. <!-- <div>
  274. <p><span>货品净重:</span>{{ item.actual_weight }}</p>
  275. <p><span>出场时间:</span>{{ item.confirm_out_time }}</p>
  276. </div> -->
  277. </div>
  278. </vue-seamless-scroll>
  279. </div>
  280. <!-- <div class="scroll_table">
  281. <div class="tbody">
  282. <vue-seamless-scroll :data="orderSituationList" class="seamless-warp"
  283. style="height: 110px;" :class-option="defaultOption3">
  284. <div class="tr flex" v-for="(item, i) in orderSituationList">
  285. <div class="td" style="width: 20%;padding-left: 10px;">{{ item.x1 }}
  286. </div>
  287. <div class="td" style="width: 24%">{{ item.x3 }}</div>
  288. <div class="td" style="width: 36%">2025/05/08 12:22:32</div>
  289. <div class="td" style="width: 20%;color:#01FFFF">超载</div>
  290. </div>
  291. </vue-seamless-scroll>
  292. </div>
  293. </div> -->
  294. </div>
  295. </div>
  296. </div>
  297. </div>
  298. </div>
  299. </div>
  300. </div>
  301. </div>
  302. </template>
  303. <script>
  304. import moment from 'moment';
  305. import $ from 'jquery';
  306. import Charts from '@/components/selfCP/charts.vue';
  307. import { POST, GET } from '@/server/api/common';
  308. import { pie, pie2, initBing, barData, initLine } from './data';
  309. import * as echarts from "echarts";
  310. import 'echarts-gl'
  311. import amap from './amap.vue'
  312. export default {
  313. name: 'dashboard',
  314. components: {
  315. Charts,
  316. amap
  317. },
  318. data() {
  319. return {
  320. weatherTimer: null, // 定时器 更新天气信息
  321. weatherInfo: null, // 天气信息
  322. timer: null, // 定时器 更新时间
  323. timeInfo: null, // 时间信息
  324. SalesProportion: null,
  325. energy_consumption: null, // 能源消耗
  326. yield: null, // 实时产量
  327. sales_volumn: null, // 实时销量
  328. chartsTimer: null, // 左侧charts定时器
  329. typeList: [], // 分类列表
  330. CalciumOxideTimer: null, // 氧化钙轮播定时器
  331. modal_charts: null, // 弹窗 charts
  332. messageList: [], // 消息队列
  333. messageIndex: 0, // 当前消息下标
  334. client: null, // mqtt
  335. saveChart: null, // 节能减排
  336. formInline: {
  337. type: 1,
  338. nickName: '',
  339. startDate: moment().format('YYYY-MM-DD'),
  340. endDate: moment().format('YYYY-MM-DD')
  341. },
  342. modalTitle: '',
  343. modalTimeIndex: 1,
  344. time_title: moment().format('YYYY-MM-DD'),
  345. modalType: 1,
  346. mineralTypeList: [], // 矿产类别
  347. oxideTimer: null,
  348. loadedMap: false,
  349. topicCate: null,
  350. apiUrl: null,
  351. videoList: [], // 视频列表
  352. topChartList: [
  353. { title: '总入场车次/辆', value: [0, 6, 9, 2, 3, 6] },
  354. { title: '总出场车次/辆', value: [0, 6, 9, 2, 3, 6] },
  355. { title: '当前总出货量/吨', value: [0, 6, 9, 2, 3, 6] },
  356. { title: '当前场内车辆/辆', value: [0, 9, 2, 3] },
  357. { title: '异常过磅/辆', value: [0, 9, 2, 3] },
  358. ],
  359. wait_entry_num: 0,
  360. running_num: 0,
  361. total_running_num: 0,
  362. salesForShihui: [],
  363. salesForYanghuagai: [],
  364. salesForKHxse: [],
  365. sevenDaysShipmentOption: null,
  366. sevenDaysSaleOption: null,
  367. saleNumProportion: null,
  368. salePriceProportion: null,
  369. numsStatictis: null,
  370. tabsActive: 1,
  371. pie: null,
  372. pie2: null,
  373. bar: null,
  374. line: null,
  375. bing: null,
  376. list: ['#001', '#002', '#003', '#004', '#005'],
  377. center: [103.530507, 29.473931], // 北京坐标
  378. mapInstance: null,
  379. AMap: null,
  380. marker: [[103.53031386349485, 29.473982265482523]],
  381. data: {
  382. },
  383. orderSituationList: [],
  384. driverRanking: {
  385. driver_ranking: [],
  386. logistics_truck_driver_ranking: []
  387. },
  388. current1: 1,
  389. current2: 1,
  390. current3: 1,
  391. statistics: {
  392. "month": {
  393. "vehicle_count": 0,
  394. "material_ton": 0,
  395. "order_count": 0,
  396. "exception_count": 0
  397. },
  398. "year": {
  399. "vehicle_count": 0,
  400. "material_ton": 0,
  401. "order_count": 0,
  402. "exception_count": 0
  403. }
  404. },
  405. overview: {
  406. "today": {
  407. "total": 0,
  408. "completion_rate": 0,
  409. "vehicle_count": 0
  410. },
  411. "month": {
  412. "total": 0,
  413. "completion_rate": 0,
  414. "vehicle_count": 0
  415. }
  416. },
  417. abnormal: [],
  418. overweightRecord: [],
  419. timer: null,
  420. Weighbridge: []
  421. };
  422. },
  423. mounted() {
  424. moment.locale('zh-cn');
  425. this.getWeather()
  426. this.getTime()
  427. this.getApi()
  428. this.getApi2()
  429. this.cycleGetApi()
  430. },
  431. destoryed() {
  432. clearInterval(this.timer);
  433. },
  434. computed: {
  435. },
  436. methods: {
  437. cycleGetApi() {
  438. clearInterval(this.timer)
  439. this.timer = setInterval(() => {
  440. this.getApi2()
  441. }, 2 * 60 * 1000)
  442. },
  443. getApi2() {
  444. //地磅数据统计
  445. POST(`${this.$config.api}/large_screen/getTodayCompanyWbStatistics`).then(res => {
  446. console.log(res);
  447. this.topChartList = [
  448. { title: '总入场车次/辆', value: this.numberSplit(res.data.total_arrival_vehicle_count) },
  449. { title: '总出场车次/辆', value: this.numberSplit(res.data.total_departure_vehicle_count) },
  450. { title: '当前总出货量/吨', value: this.numberSplit(res.data.total_departure_material_ton) },
  451. { title: '当前场内车辆/辆', value: this.numberSplit(res.data.current_field_vehicle_count) },
  452. { title: '异常过磅/辆', value: this.numberSplit(res.data.exception_overweight_vehicle_count) },
  453. ]
  454. pie.title[1].text = `${res.data.congestion_rate}%`
  455. pie.series[0].data = [res.data.congestion_rate]
  456. this.pie = pie
  457. pie2.title[1].text = `${res.data.exception_rate}%`
  458. pie2.series[0].data = [res.data.exception_rate]
  459. this.pie2 = pie2
  460. })
  461. //今日订单概况总量、完成率、车次
  462. POST(`${this.$config.api}/large_screen/getTodayMonthOrderOverview`).then(res => {
  463. this.overview = res.data
  464. })
  465. //地磅信息
  466. POST(`${this.$config.api}/large_screen/getWeighbridgeInfo`).then(res => {
  467. this.Weighbridge = res.data.map(r => {
  468. return {
  469. "truckNo": r.name,
  470. "businessStatus": 1,
  471. "runStatus": 2,
  472. "lat": "112.32956",
  473. "lng": "34.651725",
  474. "detailAddress": null,
  475. "speed": 0.0,
  476. "gpsTime": "2024-04-17 14:31:09",
  477. lnglat: [r.lng, r.lat]
  478. }
  479. })
  480. })
  481. //近30天出货量
  482. POST(`${this.$config.api}/large_screen/getOutboundMaterialTon`).then(res => {
  483. this.line = initLine(res.data[0].data.map(r => r.time), res.data[0].data.map(r => r.shipment), res.data[1].data.map(r => r.shipment), res.data[2].data.map(r => r.shipment))
  484. })
  485. //过磅记录
  486. POST(`${this.$config.api}/large_screen/getOverweightRecord`).then(res => {
  487. this.overweightRecord = res.data
  488. })
  489. //异常过磅车辆
  490. POST(`${this.$config.api}/large_screen/getExceptionOverweightVehicle`).then(res => {
  491. this.abnormal = res.data
  492. })
  493. //物流铲车司机排行榜
  494. POST(`${this.$config.api}/large_screen/getDriverRanking`).then(res => {
  495. this.driverRanking = res.data
  496. })
  497. },
  498. getApi() {
  499. //按月、年地磅数据统计
  500. POST(`${this.$config.api}/large_screen/getCompanyWbStatistics`).then(res => {
  501. this.statistics = res.data
  502. })
  503. //潜在接单司机
  504. POST(`${this.$config.api}/large_screen/getPotentialDriverCount`).then(res => {
  505. let colors = ['#3A92FE', '#01FFFF', '#47FD7F']
  506. let xData = res.data.distance.map(r => r.distance)
  507. let yData = res.data.distance.map(r => r.count)
  508. // 传入数据生成 option
  509. let optionsData = [];
  510. for (let i = 0; i < xData.length; i++) {
  511. optionsData.push(
  512. {
  513. name: xData[i],
  514. value: yData[i],
  515. itemStyle: {
  516. color: colors[i],
  517. }
  518. }
  519. );
  520. }
  521. let bing = initBing(optionsData)
  522. this.bing = bing
  523. barData.series[1].data = [res.data.time.current, res.data.time.next_hour]
  524. barData.series[2].data = this.getSymbolData([res.data.time.current, res.data.time.next_hour])
  525. this.bar = barData
  526. })
  527. },
  528. numberSplit(num) {
  529. const targetLength = 6; // 目标数组长度
  530. const digits = Array.from(String(num.toFixed(0)), Number); // [1, 2, 3]
  531. const zerosToAdd =(targetLength > digits.length)? targetLength - digits.length : digits.length; // 需要补的 0 的数量
  532. const result = Array(zerosToAdd).fill(0).concat(digits);
  533. return result
  534. },
  535. onMapLoaded(map, AMap) {
  536. this.mapInstance = map
  537. this.AMap = AMap
  538. console.log('地图加载完成')
  539. },
  540. getWeather() {
  541. const self = this;
  542. $.ajax({
  543. url: 'http://www.nmc.cn/rest/weather?stationid=JKQBL&_=' + new Date().getTime(),
  544. dataType: 'json',
  545. type: 'GET',
  546. success: (res) => {
  547. const data = res.data.real.weather;
  548. self.weatherInfo = {
  549. info: data.info,
  550. temperature: data.temperature,
  551. rain: data.rain,
  552. humidity: data.humidity,
  553. img: `http://image.nmc.cn/assets/img/w/35x35/1/${data.img}.png`
  554. };
  555. }
  556. });
  557. },
  558. // 获取时间信息
  559. getTime() {
  560. this.timeInfo = {
  561. week: moment().format('dddd'),
  562. ymd: moment().format('YYYY-MM-DD'),
  563. hms: moment().format('HH:mm:ss')
  564. };
  565. this.timer = setInterval(() => {
  566. this.getTime();
  567. }, 1000);
  568. },
  569. getSymbolData(datas) {
  570. let arr = []
  571. for (var i = 0; i < datas.length; i++) {
  572. arr.push({
  573. value: datas[i],
  574. symbolPosition: 'end',
  575. })
  576. }
  577. return arr
  578. },
  579. b64Decode(str) {
  580. return decodeURIComponent(atob(str));
  581. },
  582. b64Encode(str) {
  583. return btoa(encodeURIComponent(str));
  584. },
  585. formatNumber(num) {
  586. let reg = /(?=(\B)(\d{3})+$)/g;
  587. return num.toString().replace(reg, ",");
  588. },
  589. // 弹窗时间选择
  590. handleChangeTime(index) {
  591. this.modalTimeIndex = index;
  592. if (index == 1) {
  593. this.formInline.startDate = moment().format('YYYY-MM-DD');
  594. this.formInline.endDate = moment().format('YYYY-MM-DD');
  595. this.time_title = this.formInline.startDate;
  596. } else if (index == 2) {
  597. this.formInline.startDate = moment().subtract(7, 'days').format('YYYY-MM-DD');
  598. this.formInline.endDate = moment().format('YYYY-MM-DD');
  599. this.time_title = this.formInline.startDate + ' 至 ' + this.formInline.endDate;
  600. } else if (index == 3) {
  601. this.formInline.startDate = moment().subtract(30, 'days').format('YYYY-MM-DD');
  602. this.formInline.endDate = moment().format('YYYY-MM-DD');
  603. this.time_title = this.formInline.startDate + ' 至 ' + this.formInline.endDate;
  604. }
  605. this.buildModalCharts(this.modalType);
  606. },
  607. // 弹窗搜索
  608. onSubmit() {
  609. this.buildModalCharts(this.modalType);
  610. },
  611. // 弹窗重置
  612. onReset() {
  613. this.formInline = {
  614. type: 1,
  615. nickName: '',
  616. startDate: moment().format('YYYY-MM-DD'),
  617. endDate: moment().format('YYYY-MM-DD')
  618. };
  619. this.modalTimeIndex = 1;
  620. this.time_title = moment().format('YYYY-MM-DD');
  621. this.buildModalCharts(this.modalType);
  622. },
  623. getRankingItemWIdth(item) {
  624. const width = 480 * (parseInt(item.value) / parseInt(this.salesForKHxse[0].value));
  625. return width + 'px';
  626. },
  627. formatMoney(str) {
  628. return parseFloat(str).toLocaleString('en-US');
  629. },
  630. getRadioWidth(pct) {
  631. let width = (76 / 100) * parseFloat(pct);
  632. return width + 'px';
  633. }
  634. }
  635. };
  636. </script>
  637. <style scoped lang="less">
  638. @font-face {
  639. font-family: MFLiHei;
  640. src: url('./font/MFLiHei_Noncommercial-Regular.otf') format('opentype');
  641. }
  642. @font-face {
  643. font-family: FXLed;
  644. src: url('./font/FX-LED Bold.TTF');
  645. }
  646. .fontMF {
  647. font-family: MFLiHei;
  648. }
  649. .fontFx {
  650. font-family: FXLed;
  651. }
  652. .flex {
  653. display: flex;
  654. align-items: center;
  655. }
  656. .page_index {
  657. width: 100%;
  658. height: 100%;
  659. overflow: hidden;
  660. position: relative;
  661. #bg {
  662. height: 1152px;
  663. width: 100%;
  664. background-image: url(../../assets/newimg/bg.png);
  665. background-size: 100% 100%;
  666. background-repeat: no-repeat;
  667. }
  668. .content {
  669. position: absolute;
  670. top: 0;
  671. left: 0;
  672. height: calc(100% - 20px);
  673. z-index: 1;
  674. width: calc(100% - 120px);
  675. background: url(../../assets/newimg/waikuang.png) no-repeat;
  676. background-size: 100% 100%;
  677. margin: 0 60px;
  678. box-sizing: border-box;
  679. .title1 {
  680. width: 220px;
  681. height: 31px;
  682. font-family: MFLiHei;
  683. font-weight: 400;
  684. font-size: 16px;
  685. color: #FFFFFF;
  686. line-height: 30px;
  687. padding-left: 20px;
  688. background: url(../../assets/newimg/title1.png) no-repeat;
  689. background-size: 100% 100%;
  690. background-position: 0 8px;
  691. position: relative;
  692. }
  693. .title2 {
  694. width: 162px;
  695. height: 31px;
  696. font-family: MFLiHei;
  697. font-weight: 400;
  698. font-size: 16px;
  699. color: #FFFFFF;
  700. line-height: 30px;
  701. padding-left: 20px;
  702. background: url(../../assets/newimg/title2.png) no-repeat;
  703. background-size: 100% 100%;
  704. background-position: 0 8px;
  705. }
  706. .top {
  707. display: flex;
  708. justify-content: center;
  709. background-repeat: no-repeat;
  710. background-size: 100% 100%;
  711. gap: 280px;
  712. .title {
  713. text-align: center;
  714. background: linear-gradient(0deg, #769dd6 0%, #ffffff 100%);
  715. -webkit-background-clip: text;
  716. -webkit-text-fill-color: transparent;
  717. line-height: 30px;
  718. font-weight: 400;
  719. color: #ffffff;
  720. font-size: 42px;
  721. padding: 15px 0 50px;
  722. letter-spacing: 2px;
  723. }
  724. .btn {
  725. font-size: 24px;
  726. font-weight: bold;
  727. color: #ffffff;
  728. line-height: 30px;
  729. padding-top: 24px;
  730. }
  731. }
  732. .top_bg_1 {
  733. background-image: url(../../assets/img/title_bg_1.png);
  734. }
  735. .top_bg_2 {
  736. background-image: url(../../assets/img/title_bg_2.png);
  737. }
  738. .charts {
  739. background-image: url(../../assets/img/data_bg.png);
  740. background-repeat: no-repeat;
  741. background-size: 100% 100%;
  742. overflow: hidden;
  743. }
  744. .charts1 {
  745. background-image: url(../../assets/img/data_bg1.png);
  746. background-repeat: no-repeat;
  747. background-size: 100% 100%;
  748. overflow: hidden;
  749. }
  750. .charts2 {
  751. background-image: url(../../assets/img/data_bg2.png);
  752. background-repeat: no-repeat;
  753. background-size: 100% 100%;
  754. overflow: hidden;
  755. }
  756. .contain {
  757. margin-top: 122px;
  758. padding: 0 34px;
  759. box-sizing: border-box;
  760. .content_title {
  761. font-size: 14px;
  762. font-weight: 400;
  763. color: #ffffff;
  764. background-image: url(https://ore-1302260927.cos.ap-chengdu.myqcloud.com/data_screen/image/17.png);
  765. background-repeat: no-repeat;
  766. padding: 0 0 10px 20px;
  767. }
  768. .left_charts {
  769. width: 601px;
  770. .leftdivitem {
  771. width: 601px;
  772. // background: url(../../assets/newimg/left.png) no-repeat;
  773. background-size: 100% 100%;
  774. margin-bottom: 4px;
  775. box-sizing: border-box;
  776. position: relative;
  777. }
  778. .btnGroup {
  779. position: absolute;
  780. right: 25px;
  781. top: 30px;
  782. display: flex;
  783. .btn1 {
  784. width: 58px;
  785. height: 16px;
  786. background: url(../../assets/newimg/btn1.png) no-repeat;
  787. background-size: 100% 100%;
  788. font-family: MFLiHei;
  789. font-weight: 400;
  790. font-size: 11px;
  791. color: #fff;
  792. line-height: 16px;
  793. text-align: center;
  794. cursor: pointer;
  795. letter-spacing: 1px;
  796. }
  797. .btn2 {
  798. width: 58px;
  799. height: 16px;
  800. background: url(../../assets/newimg/btn2.png) no-repeat;
  801. background-size: 100% 100%;
  802. font-family: MFLiHei;
  803. font-weight: 400;
  804. font-size: 11px;
  805. color: #fff;
  806. line-height: 16px;
  807. text-align: center;
  808. position: relative;
  809. cursor: pointer;
  810. letter-spacing: 1px;
  811. }
  812. }
  813. .leftdivitem1 {
  814. display: flex;
  815. padding: 23px 26px;
  816. .leftdivitemchild {
  817. width: 50%;
  818. .pie {
  819. margin: 0 auto;
  820. width: 207px;
  821. height: 207px;
  822. margin-top: 10px;
  823. }
  824. .pie1 {
  825. background: url(../../assets/newimg/pie1.png) no-repeat;
  826. background-size: 100% 100%;
  827. }
  828. .pie2 {
  829. background: url(../../assets/newimg/pie2.png) no-repeat;
  830. background-size: 100% 100%;
  831. }
  832. }
  833. }
  834. .left_content_three {
  835. width: 580px;
  836. height: 348px;
  837. overflow: hidden;
  838. .hide_box {
  839. position: relative;
  840. overflow: hidden;
  841. height: 300px;
  842. margin-top: 20px;
  843. }
  844. .banner_box {
  845. position: absolute;
  846. width: 90%;
  847. left: 5%;
  848. top: 0;
  849. .banner_item {
  850. padding-bottom: 30px;
  851. .content_box {
  852. display: flex;
  853. align-items: center;
  854. flex-wrap: wrap;
  855. gap: 10px 15px;
  856. .item {
  857. justify-content: space-between;
  858. background-color: rgba(255, 255, 255, 0.1);
  859. width: 160px;
  860. height: 24px;
  861. font-size: 12px;
  862. font-weight: 500;
  863. color: #ffffff;
  864. }
  865. }
  866. }
  867. }
  868. }
  869. }
  870. .mid_charts {
  871. padding: 0 30px;
  872. .middibu {
  873. width: 832px;
  874. height: 55px;
  875. background: url(../../assets/newimg/middibu.png) no-repeat;
  876. background-size: 100% 100%;
  877. }
  878. .midMap {
  879. width: 1546px;
  880. flex: 1;
  881. background: url(../../assets/newimg/midbottom.png) no-repeat;
  882. background-size: 100% 100%;
  883. position: relative;
  884. overflow: hidden;
  885. padding: 20px;
  886. box-sizing: border-box;
  887. .toptitle {
  888. width: 84px;
  889. position: absolute;
  890. top: 0;
  891. left: 50%;
  892. margin-left: -42px;
  893. color: #fff;
  894. font-size: 18px;
  895. font-weight: bold;
  896. font-family: MFLiHei;
  897. letter-spacing: 3px;
  898. }
  899. }
  900. .topChart {
  901. width: 1546px;
  902. justify-content: space-between;
  903. background-image: url(../../assets/newimg/midtopbg.png);
  904. background-repeat: no-repeat;
  905. background-size: 100% 100%;
  906. height: 120px;
  907. padding: 0 64px;
  908. margin-bottom: 4px;
  909. position: relative;
  910. box-sizing: border-box;
  911. .toptitle {
  912. width: 84px;
  913. position: absolute;
  914. top: 0;
  915. left: 50%;
  916. margin-left: -42px;
  917. color: #fff;
  918. font-size: 18px;
  919. font-weight: bold;
  920. font-family: MFLiHei;
  921. letter-spacing: 3px;
  922. }
  923. .num_item {
  924. flex: 1;
  925. margin-top: 9px;
  926. .num_title {
  927. font-size: 14px;
  928. font-weight: 500;
  929. color: #ffffff;
  930. line-height: 18px;
  931. text-align: center;
  932. img {
  933. position: relative;
  934. top: 5px;
  935. }
  936. }
  937. .num_value {
  938. display: flex;
  939. align-items: center;
  940. justify-content: center;
  941. gap: 3px;
  942. .num {
  943. background-image: url(https://ore-1302260927.cos.ap-chengdu.myqcloud.com/data_screen/image/num_bg.png);
  944. background-repeat: no-repeat;
  945. background-size: 100% 100%;
  946. font-size: 30px;
  947. font-weight: normal;
  948. color: #fffffe;
  949. padding: 4px;
  950. }
  951. .weight {
  952. font-size: 16px;
  953. font-weight: bold;
  954. color: #fffffe;
  955. align-self: end;
  956. }
  957. }
  958. }
  959. }
  960. .botChart {
  961. height: 925px;
  962. display: flex;
  963. justify-content: space-between;
  964. .left {
  965. width: 580px;
  966. height: 848px;
  967. .left_content {
  968. padding: 30px 20px 0;
  969. }
  970. }
  971. .mid {
  972. margin: 0 20px;
  973. flex: 1;
  974. display: flex;
  975. flex-direction: column;
  976. .charts2 {
  977. flex: 1;
  978. }
  979. .left_content_three {
  980. height: 100%;
  981. overflow: hidden;
  982. padding-top: 20px;
  983. .hide_box {
  984. position: relative;
  985. overflow: hidden;
  986. height: 300px;
  987. margin-top: 20px;
  988. }
  989. .banner_box {
  990. position: absolute;
  991. width: 90%;
  992. left: 5%;
  993. top: 0;
  994. .banner_item {
  995. padding-bottom: 30px;
  996. .content_box {
  997. display: flex;
  998. align-items: center;
  999. flex-wrap: wrap;
  1000. gap: 10px 15px;
  1001. .item {
  1002. justify-content: space-between;
  1003. background-color: rgba(255, 255, 255, 0.1);
  1004. width: 160px;
  1005. height: 24px;
  1006. font-size: 12px;
  1007. font-weight: 500;
  1008. color: #ffffff;
  1009. }
  1010. }
  1011. }
  1012. }
  1013. }
  1014. }
  1015. .right {
  1016. width: 601px;
  1017. height: 925px;
  1018. padding: 28px 45px;
  1019. background: url(../../assets/newimg/right2.png) no-repeat;
  1020. background-size: 100% 100%;
  1021. box-sizing: border-box;
  1022. margin-left: 20px;
  1023. .rightcontent2 {
  1024. box-sizing: border-box;
  1025. box-sizing: border-box;
  1026. .list {
  1027. .item {
  1028. width: 100%;
  1029. background: rgba(255, 255, 255, 0.1);
  1030. padding: 20px;
  1031. padding-bottom: 10px;
  1032. box-sizing: border-box;
  1033. padding-right: 37px;
  1034. div {
  1035. display: flex;
  1036. justify-content: space-between;
  1037. margin-bottom: 10px;
  1038. }
  1039. p {
  1040. font-size: 12px;
  1041. color: #fff;
  1042. line-height: 20px;
  1043. margin: 0;
  1044. text-align: left;
  1045. width: 180px;
  1046. span {
  1047. width: 60px;
  1048. display: inline-block;
  1049. text-align: right;
  1050. }
  1051. }
  1052. p.tt {
  1053. font-weight: bold;
  1054. font-size: 12px;
  1055. color: #01FFFF;
  1056. line-height: 20px;
  1057. margin-bottom: 13px;
  1058. }
  1059. }
  1060. }
  1061. }
  1062. .right_content {
  1063. box-sizing: border-box;
  1064. .detail {
  1065. background: url(../../assets/newimg/detail.png) no-repeat;
  1066. background-size: 100% 100%;
  1067. width: 100%;
  1068. height: 150px;
  1069. box-sizing: border-box;
  1070. position: relative;
  1071. background-position-y: 8px;
  1072. .btnGroup {
  1073. position: absolute;
  1074. right: 25px;
  1075. top: 20px;
  1076. display: flex;
  1077. .btn1 {
  1078. width: 58px;
  1079. height: 16px;
  1080. background: url(../../assets/newimg/btn1.png) no-repeat;
  1081. background-size: 100% 100%;
  1082. font-family: MFLiHei;
  1083. font-weight: 400;
  1084. font-size: 11px;
  1085. color: #fff;
  1086. line-height: 16px;
  1087. text-align: center;
  1088. cursor: pointer;
  1089. letter-spacing: 1px;
  1090. }
  1091. .btn2 {
  1092. width: 58px;
  1093. height: 16px;
  1094. background: url(../../assets/newimg/btn2.png) no-repeat;
  1095. background-size: 100% 100%;
  1096. font-family: MFLiHei;
  1097. font-weight: 400;
  1098. font-size: 11px;
  1099. color: #fff;
  1100. line-height: 16px;
  1101. text-align: center;
  1102. position: relative;
  1103. cursor: pointer;
  1104. letter-spacing: 1px;
  1105. }
  1106. }
  1107. .a3 {
  1108. text-align: center;
  1109. position: absolute;
  1110. top: 19px;
  1111. left: 50%;
  1112. width: 116px;
  1113. height: 116px;
  1114. margin-left: -61px;
  1115. display: flex;
  1116. align-items: center;
  1117. justify-content: center;
  1118. img {
  1119. width: 50px;
  1120. }
  1121. p {
  1122. font-family: FXLED;
  1123. font-size: 40px;
  1124. color: #01FFFF;
  1125. margin: 0;
  1126. span {
  1127. font-size: 20px;
  1128. }
  1129. }
  1130. p:first-child {
  1131. font-weight: bold;
  1132. font-size: 14px;
  1133. color: #fff;
  1134. margin-bottom: 5px;
  1135. }
  1136. p:last-child {
  1137. font-weight: bold;
  1138. font-size: 14px;
  1139. color: #fff;
  1140. margin-top: 5px;
  1141. }
  1142. }
  1143. .a2 {
  1144. top: 50px;
  1145. right: 50px;
  1146. text-align: center;
  1147. position: absolute;
  1148. p {
  1149. font-family: FXLED;
  1150. font-weight: bold;
  1151. font-size: 30px;
  1152. color: #fff;
  1153. }
  1154. p:first-child {
  1155. font-family: PingFang SC;
  1156. font-weight: bold;
  1157. font-size: 14px;
  1158. color: #01FFFF;
  1159. }
  1160. }
  1161. .a1 {
  1162. top: 50px;
  1163. left: 25px;
  1164. text-align: center;
  1165. position: absolute;
  1166. p {
  1167. font-family: FXLED;
  1168. font-weight: bold;
  1169. font-size: 30px;
  1170. color: #fff;
  1171. }
  1172. p:first-child {
  1173. font-family: PingFang SC;
  1174. font-weight: bold;
  1175. font-size: 14px;
  1176. color: #01FFFF;
  1177. }
  1178. }
  1179. }
  1180. .rightcontentitem2 {
  1181. height: 98px;
  1182. width: 100%;
  1183. background: url(../../assets/newimg/zhibiao2.png) no-repeat;
  1184. background-size: 100%;
  1185. display: flex;
  1186. color: #fff;
  1187. padding-right: 98px;
  1188. box-sizing: border-box;
  1189. div {
  1190. width: 50%;
  1191. text-align: center;
  1192. font-size: 12px;
  1193. padding-top: 26px;
  1194. }
  1195. p:first-child {
  1196. font-family: FXLed;
  1197. font-weight: normal;
  1198. font-size: 24px;
  1199. color: #FFFFFF;
  1200. margin-bottom: 0;
  1201. }
  1202. }
  1203. .rightcontentitem1 {
  1204. margin-top: 10px;
  1205. height: 98px;
  1206. width: 100%;
  1207. background: url(../../assets/newimg/zhibiao1.png) no-repeat;
  1208. background-size: 100%;
  1209. display: flex;
  1210. color: #fff;
  1211. padding-left: 98px;
  1212. box-sizing: border-box;
  1213. div {
  1214. width: 50%;
  1215. text-align: center;
  1216. font-size: 12px;
  1217. padding-top: 26px;
  1218. }
  1219. p:first-child {
  1220. font-family: FXLed;
  1221. font-weight: normal;
  1222. font-size: 24px;
  1223. color: #FFFFFF;
  1224. margin-bottom: 0;
  1225. }
  1226. }
  1227. .rightcontent1 {
  1228. position: relative;
  1229. width: 100%;
  1230. height: 428px;
  1231. box-sizing: border-box;
  1232. background-size: 100% 100%;
  1233. }
  1234. .btnGroup2 {
  1235. position: absolute;
  1236. right: 30px;
  1237. top: 24px;
  1238. display: flex;
  1239. .btn1 {
  1240. width: 78px;
  1241. height: 16px;
  1242. background: url(../../assets/newimg/btn11.png) no-repeat;
  1243. background-size: 100% 100%;
  1244. font-family: MFLiHei;
  1245. font-weight: 400;
  1246. font-size: 10px;
  1247. color: #fff;
  1248. line-height: 16px;
  1249. text-align: center;
  1250. cursor: pointer;
  1251. letter-spacing: 1px;
  1252. }
  1253. .btn2 {
  1254. width: 78px;
  1255. height: 16px;
  1256. background: url(../../assets/newimg/btn22.png) no-repeat;
  1257. background-size: 100% 100%;
  1258. font-family: MFLiHei;
  1259. font-weight: 400;
  1260. font-size: 10px;
  1261. color: #fff;
  1262. line-height: 16px;
  1263. text-align: center;
  1264. position: relative;
  1265. cursor: pointer;
  1266. letter-spacing: 1px;
  1267. }
  1268. }
  1269. }
  1270. }
  1271. }
  1272. }
  1273. }
  1274. }
  1275. }
  1276. .weather {
  1277. width: 30%;
  1278. height: 25px;
  1279. position: absolute;
  1280. top: 50px;
  1281. left: 100px;
  1282. .text {
  1283. font-size: 20px;
  1284. font-weight: 400;
  1285. color: #fffffe;
  1286. }
  1287. .num {
  1288. font-size: 24px;
  1289. font-weight: normal;
  1290. color: #fffffe;
  1291. }
  1292. }
  1293. .time {
  1294. position: absolute;
  1295. top: 50px;
  1296. right: 100px;
  1297. width: 30%;
  1298. height: 25px;
  1299. justify-content: flex-end;
  1300. padding-right: 20px;
  1301. .text {
  1302. font-size: 20px;
  1303. font-weight: 400;
  1304. color: #fffffe;
  1305. }
  1306. .num {
  1307. font-size: 24px;
  1308. font-weight: normal;
  1309. color: #fffffe;
  1310. }
  1311. }
  1312. .scroll_table {
  1313. width: 100%;
  1314. .thead {}
  1315. .tbody {
  1316. .seamless-warp {
  1317. overflow: hidden;
  1318. height: 210px;
  1319. width: 100%;
  1320. }
  1321. }
  1322. .th {
  1323. text-align: left;
  1324. font-size: 12px;
  1325. font-weight: 400;
  1326. color: #ffffff;
  1327. line-height: 30px;
  1328. }
  1329. .td {
  1330. font-size: 12px;
  1331. font-weight: 400;
  1332. color: #ffffff;
  1333. line-height: 30px;
  1334. }
  1335. .tr:nth-child(even) {
  1336. background-color: rgba(255, 255, 255, 0.1);
  1337. }
  1338. .radio_td {
  1339. display: flex;
  1340. align-items: center;
  1341. color: #fff;
  1342. .radio {
  1343. position: relative;
  1344. min-width: 6px;
  1345. height: 10px;
  1346. background: linear-gradient(90deg, #29abe3, #01ffff);
  1347. margin-right: 4px;
  1348. .div {
  1349. width: 6px;
  1350. height: 16px;
  1351. background: #ffffff;
  1352. position: absolute;
  1353. top: -3px;
  1354. right: 0;
  1355. }
  1356. }
  1357. }
  1358. }
  1359. .newLeftdivitem {
  1360. width: 601px !important;
  1361. height: 925px !important;
  1362. background: url('../../assets/newimg/newLeftBG.png') no-repeat !important;
  1363. background-size: 100% 100% !important;
  1364. box-sizing: border-box !important;
  1365. }
  1366. </style>