dataLock.vue 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812
  1. <template>
  2. <view>
  3. <u-navbar :title="title" :backIconColor="'#ffffff'" title-color="#ffffff"
  4. :background="backgroundObj"></u-navbar>
  5. <view class="gradient-header">
  6. <view class="jpback">
  7. </view>
  8. </view>
  9. <u-picker title="日期选择" :maskCloseAble="true" v-model="body0data.tabsFrom.show" :defaultTime="body0data.tabsFrom.showIndex+'-1'"
  10. mode="time" :params="body0data.tabsFrom.params" @confirm="selector2confirm" @cancel="selector2cancel"
  11. >
  12. </u-picker>
  13. <view class="main">
  14. <view class="statistics ">
  15. <view class="data1">
  16. <view class="item">
  17. <view class="line">
  18. <view class="name">
  19. {{info.name}}
  20. </view>
  21. <view class="item-tags">
  22. <view class="tag tag1" :class="'typeN typeN'+info.type">
  23. {{info.typeN}}
  24. </view>
  25. <!-- <view class="tag" :class="'statusN statusN'+info.status">
  26. {{info.statusN}}
  27. </view>
  28. <view class="tag" :class="'lockStatusN lockStatusN'+info.lockStatus">
  29. {{info.lockStatusN}}
  30. </view> -->
  31. </view>
  32. </view>
  33. <view class="line">
  34. 编号:{{info.lockNo}}
  35. </view>
  36. <view class="line" style=" color: #909399;">
  37. 更新时间:{{info.lastOnlineTime}}
  38. </view>
  39. </view>
  40. <view class="value" v-if="0">
  41. <u-button type="primary" size="mini" shape="circle">
  42. <img class="img" src="@/assets/img/button/lock.svg" alt="">
  43. 降锁
  44. </u-button>
  45. </view>
  46. </view>
  47. <view class="top-span">
  48. <view class="item-span">
  49. <img src="@/assets/img/topspan/span1.png">
  50. <span>地锁</span>
  51. <span v-if="info.parkingStatus==1" style="color: #1677FF;" >有车</span>
  52. <span v-else-if="info.parkingStatus==0" style="color: #00B962;" >无车</span>
  53. </view>
  54. <view class="item-span">
  55. <img src="@/assets/img/topspan/span2.png">
  56. <span>地锁</span>
  57. <span style="color: red;"
  58. v-if="info.lockStatus==4||info.lockStatus==0">
  59. 错误</span>
  60. <span v-else-if="info.lockStatus==1" style="color: #1677FF;" >升起</span>
  61. <span v-else-if="info.lockStatus==2" style="color: #00B962;" >降落</span>
  62. <span v-else >其他</span>
  63. </view>
  64. <view class="item-span">
  65. <img src="@/assets/img/topspan/span3.png">
  66. <span>电压</span>
  67. <span v-if="info.batteryLevel">{{info.batteryLevel}}V</span>
  68. <span v-else>未知</span>
  69. </view>
  70. <view class="item-span">
  71. <img src="@/assets/img/topspan/span4.png">
  72. <span>网络</span>
  73. <span v-if="info.status==1" style="color: #00B962;" >在线</span>
  74. <span v-else-if="info.status==0" style="color: red" >离线</span>
  75. </view>
  76. <view class="item-span">
  77. <img src="@/assets/img/topspan/span5.png">
  78. <span>雷达</span>
  79. <span v-if="info.radarStatus==0" style="color: #00B962;" >正常</span>
  80. <span v-else-if="info.radarStatus==1" style="color: red" >故障</span>
  81. </view>
  82. </view>
  83. </view>
  84. <view class=" no_statistics">
  85. <view class="data2">
  86. <view class="top">
  87. <view class="item">
  88. <view class="name">
  89. 停车时长
  90. </view>
  91. <view class="value" v-html="durationShow()">
  92. </view>
  93. </view>
  94. <view class="item">
  95. <view class="name">
  96. 使用率
  97. </view>
  98. <view class="value" v-if="lockUsageRateData&&lockUsageRateData.usageRate">
  99. {{lockUsageRateData.usageRate=='∞'?'/':lockUsageRateData.usageRate+'%'}}
  100. </view>
  101. </view>
  102. <view class="item">
  103. <view class="name">
  104. 异常次数
  105. </view>
  106. <view class="value">
  107. 0
  108. </view>
  109. </view>
  110. </view>
  111. <view class="body">
  112. <u-radio-group v-model="radiovalue" @change="radioGroupChange">
  113. <u-radio @change="radioChange" v-for="(item, index) in radiolist" :key="index"
  114. :name="item.value">
  115. {{item.name}}
  116. </u-radio>
  117. </u-radio-group>
  118. </view>
  119. </view>
  120. </view>
  121. <u-picker v-model="body2data.vue.show" :params="body2data.vue.params" :default-time="body2data.query.startTime"
  122. @confirm="body2dataconfirm" mode="time"></u-picker>
  123. <view class="statistics ">
  124. <view class="title">
  125. <view class="icon">
  126. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  127. </view>
  128. <view class="text">
  129. <view>地锁平均占用率(%)</view>
  130. <view class="tag" @click="body2data.vue.show=true">{{body2data.vue.queryN}}<u-icon
  131. name="arrow-down"></u-icon></view>
  132. </view>
  133. </view>
  134. <view class="contentBody">
  135. <jpContent :status="jpContentMap.body2">
  136. <view class="body2lineChart">
  137. <view id="body2line1" class="body2line">
  138. </view>
  139. </view>
  140. </jpContent>
  141. </view>
  142. </view>
  143. <view class="statistics " v-if="0">
  144. <view class="title">
  145. <view class="icon">
  146. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  147. </view>
  148. <view class="text">
  149. <view>地锁历史异常状态</view>
  150. </view>
  151. </view>
  152. <view class="contentBody">
  153. <jpContent :status="jpContentMap.body1">
  154. <view class="body1pieChart">
  155. <view id="body1pie1" class="body1pie">
  156. </view>
  157. </view>
  158. </jpContent>
  159. </view>
  160. </view>
  161. <view class="statistics ">
  162. <view class="title">
  163. <view class="icon">
  164. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  165. </view>
  166. <view class="text">
  167. <view>高频使用时段分布</view>
  168. </view>
  169. </view>
  170. <view class="contentBody">
  171. <jpContent :status="jpContentMap.body3">
  172. <view class="body3barChart">
  173. <view id="body3bar1" class="body3bar">
  174. </view>
  175. </view>
  176. </jpContent>
  177. </view>
  178. </view>
  179. <view class="statistics ">
  180. <view class="title">
  181. <view class="icon">
  182. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  183. </view>
  184. <view class="text">
  185. <view>用户停留时长分群特征</view>
  186. </view>
  187. </view>
  188. <view class="contentBody">
  189. <jpContent :status="jpContentMap.body4">
  190. <view class="body4pieChart">
  191. <view id="body4pie1" class="body4pie">
  192. </view>
  193. </view>
  194. </jpContent>
  195. </view>
  196. </view>
  197. <view class="statistics " v-if="0">
  198. <view class="title">
  199. <view class="icon">
  200. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  201. </view>
  202. <view class="text">
  203. <view>高频使用用户TOP</view>
  204. </view>
  205. </view>
  206. <view class="contentBody">
  207. <jpContent :status="jpContentMap.body5">
  208. <view class="body5data">
  209. <view class="line">
  210. <view class="data">
  211. <view class="item">
  212. 王二
  213. </view>
  214. <view class="value">
  215. 鄂DDT1268
  216. </view>
  217. <view class="value">
  218. 28次
  219. </view>
  220. </view>
  221. <view class="goto">
  222. <u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
  223. </view>
  224. </view>
  225. <view class="line">
  226. <view class="data">
  227. <view class="item">
  228. 王三
  229. </view>
  230. <view class="value">
  231. 鄂DDT1268
  232. </view>
  233. <view class="value">
  234. 8次
  235. </view>
  236. </view>
  237. <view class="goto">
  238. <u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
  239. </view>
  240. </view>
  241. </view>
  242. </jpContent>
  243. </view>
  244. </view>
  245. <!-- end-->
  246. <view class="statistics " v-if="0">
  247. <view class="title">
  248. <view class="icon">
  249. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  250. </view>
  251. <view class="text">
  252. <view>白名单用户清单</view>
  253. <view class="check-all">查看全部<u-icon name="arrow-right"></u-icon></view>
  254. </view>
  255. </view>
  256. <view class="contentBody">
  257. <jpContent :status="jpContentMap.body7">
  258. <view class="body7data">
  259. <view class="line">
  260. <view class="value">
  261. 用户姓名
  262. </view>
  263. <view class="value">
  264. 车主身份
  265. </view>
  266. <view class="value">
  267. 使用次数
  268. </view>
  269. </view>
  270. <view class="line">
  271. <view class="value">
  272. 孙培军
  273. </view>
  274. <view class="value">
  275. 地锁所有人
  276. </view>
  277. <view class="value">
  278. 22
  279. </view>
  280. </view>
  281. <view class="line">
  282. <view class="value">
  283. 刘洋
  284. </view>
  285. <view class="value">
  286. 白名单用户
  287. </view>
  288. <view class="value">
  289. 11
  290. </view>
  291. </view>
  292. </view>
  293. </jpContent>
  294. </view>
  295. </view>
  296. <!-- end-->
  297. <view class="statistics " v-if="0" >
  298. <view class="title">
  299. <view class="icon">
  300. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  301. </view>
  302. <view class="text">
  303. <view>地锁异常记录</view>
  304. <view class="check-all">查看全部<u-icon name="arrow-right"></u-icon></view>
  305. </view>
  306. </view>
  307. <view class="contentBody" >
  308. <jpContent :status="jpContentMap.body6">
  309. <view class="body6main">
  310. <view class="line" v-for="(item,index) in abnormalRecordsList" :key="index">
  311. <view class="abnormal-item">
  312. <!-- @click="gotoUrl('/pages/abnormal/abnormalAlarmDetails?id='+item.id)"
  313. -->
  314. <view class="item-title">
  315. <view class="name">
  316. <span v-if="item.level==1" class="level level1 ">一级</span>
  317. <span v-if="item.level==2" class="level level2">二级</span>
  318. {{item.content}}
  319. </view>
  320. <view class="date"
  321. style="display: flex; justify-content: space-between;margin-top: 4rpx;">
  322. <view>{{item.title}}</view>
  323. <view>{{item.createTime}}</view>
  324. </view>
  325. </view>
  326. </view>
  327. <u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
  328. </view>
  329. </view>
  330. </jpContent>
  331. </view>
  332. </view>
  333. <!-- end-->
  334. <view class="body8data-popup">
  335. <u-popup v-model="body8data.popup" mode="bottom" height="80%" border-radius="12">
  336. <view class="content">
  337. <view class="headline">
  338. 地锁信息
  339. </view>
  340. <view class="infos">
  341. <view class="item">
  342. <view class="item-title">
  343. 地锁名称
  344. </view>
  345. <view class="item-value">
  346. {{info.name}}
  347. </view>
  348. </view>
  349. <view class="item">
  350. <view class="item-title">
  351. 地锁管理者
  352. </view>
  353. <view class="item-value">
  354. {{info.administrator}}
  355. </view>
  356. </view>
  357. <view class="item">
  358. <view class="item-title">
  359. 地锁类型
  360. </view>
  361. <view class="item-value">
  362. {{info.typeN}}
  363. </view>
  364. </view>
  365. <view class="item">
  366. <view class="item-title">
  367. 地锁状态
  368. </view>
  369. <view class="item-value">
  370. {{info.lockStatusN}}
  371. </view>
  372. </view>
  373. <view class="item">
  374. <view class="item-title">
  375. 地锁型号
  376. </view>
  377. <view class="item-value">
  378. {{info.model}}
  379. </view>
  380. </view>
  381. <view class="item">
  382. <view class="item-title">
  383. 出厂编号
  384. </view>
  385. <view class="item-value">
  386. <span>{{info.factoryNumber}}</span>
  387. </view>
  388. </view>
  389. <view class="item">
  390. <view class="item-title">
  391. 固件版号
  392. </view>
  393. <view class="item-value">
  394. {{info.solidVersion}}
  395. </view>
  396. </view>
  397. <view class="item">
  398. <view class="item-title">
  399. 防护等级
  400. </view>
  401. <view class="item-value">
  402. {{info.protectionGrade}}
  403. </view>
  404. </view>
  405. <view class="item">
  406. <view class="item-title">
  407. 生产日期
  408. </view>
  409. <view class="item-value">
  410. {{info.manufactureDate}}
  411. </view>
  412. </view>
  413. <view class="item">
  414. <view class="item-title">
  415. 标准依据
  416. </view>
  417. <view class="item-value">
  418. {{info.enablingTime}}
  419. </view>
  420. </view>
  421. <view class="item">
  422. <view class="item-title">
  423. 联网卡号
  424. </view>
  425. <view class="item-value">
  426. {{info.standardBasis}}
  427. </view>
  428. </view>
  429. <view class="item" v-if="info.tariffStandard">
  430. <view class="item-title">
  431. 资费标准
  432. </view>
  433. <view class="item-value">
  434. {{info.tariffStandard}}元/月
  435. </view>
  436. </view>
  437. <view class="item">
  438. <view class="item-title">
  439. 地锁启动时间
  440. </view>
  441. <view class="item-value">
  442. {{info.activationTime}}
  443. </view>
  444. </view>
  445. <view class="item">
  446. <view class="item-title">
  447. 地锁质保期
  448. </view>
  449. <view class="item-value">
  450. {{info.shelfLife}}年
  451. </view>
  452. </view>
  453. </view>
  454. <button class="get" @click="body8data.popup=false">知道了</button>
  455. </view>
  456. </u-popup>
  457. </view>
  458. <view class="statistics ">
  459. <view class="title">
  460. <view class="icon">
  461. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  462. </view>
  463. <view class="text">
  464. <view>地锁信息</view>
  465. <view class="check-all" @click="body8data.popup=true" >查看全部<u-icon name="arrow-right"></u-icon></view>
  466. </view>
  467. </view>
  468. <view class="contentBody">
  469. <jpContent :status="jpContentMap.body8">
  470. <view class="body8main">
  471. <view class="line">
  472. <view class="value">
  473. 地锁型号
  474. </view>
  475. <view class="value">
  476. 出厂编号
  477. </view>
  478. <view class="value">
  479. 固件版号
  480. </view>
  481. </view>
  482. <view class="line">
  483. <view class="value">
  484. {{info.model}}
  485. </view>
  486. <view class="value">
  487. {{info.factoryNumber}}
  488. </view>
  489. <view class="value">
  490. {{info.solidVersion}}
  491. </view>
  492. </view>
  493. </view>
  494. </jpContent>
  495. </view>
  496. </view>
  497. <!-- end-->
  498. <u-divider border-color="#CFD2D5">已经到底了</u-divider>
  499. </view>
  500. </view>
  501. </template>
  502. <script>
  503. import jpContent from '@/components/JPcontent.vue'
  504. import * as echarts from 'echarts';
  505. import * as API from '@/apis/pagejs/deviceTab.js'
  506. import * as API_index from '@/apis/pagejs/index.js'
  507. import {
  508. parseUnixTime,
  509. beforeTimeStamp,
  510. newDate
  511. } from '@/apis/utils'
  512. export default {
  513. components: {
  514. jpContent
  515. },
  516. data() {
  517. return {
  518. id:"",
  519. info:{},
  520. echartsList: {},
  521. lockUsageRateData:{},
  522. body2data: {
  523. query: {},
  524. vue: {
  525. queryN: "",
  526. show: false,
  527. params: {
  528. year: true,
  529. month: true,
  530. day: false,
  531. hour: false,
  532. minute: false,
  533. second: false
  534. }
  535. },
  536. data: {}
  537. },
  538. body0data: {
  539. query: {},
  540. data: {},
  541. tabsFrom:{
  542. show:false,
  543. showIndex:"",
  544. params:{
  545. year: true,
  546. month: true,
  547. day: false,
  548. hour: false,
  549. minute: false,
  550. second: false
  551. }
  552. }
  553. },
  554. body4data: {
  555. query: {},
  556. data: {}
  557. },
  558. body8data: {
  559. query: {},
  560. data: {},
  561. popup:false,
  562. },
  563. body3data: {
  564. query: {},
  565. data: {}
  566. },
  567. jpContentMap: {
  568. body1: 2,
  569. body2: 2,
  570. body3: 2,
  571. body4: 2,
  572. body5: 2,
  573. body6: 2,
  574. body7: 2,
  575. body8: 2,
  576. body9: 2,
  577. body10: 2,
  578. },
  579. title: "",
  580. backgroundObj: {
  581. background: '#307AF6'
  582. },
  583. radiovalue: "1",
  584. radiolist: [{
  585. name: '上月',
  586. value: "3"
  587. },
  588. {
  589. name: '当月',
  590. value: "1"
  591. },
  592. {
  593. name: '今日',
  594. value: "2"
  595. }, {
  596. name: '当年',
  597. value: "4"
  598. }, {
  599. name: '合计',
  600. value: "5"
  601. },
  602. {
  603. name: '指定月份',
  604. value: "0"
  605. }
  606. ],
  607. abnormalRecordsList: [{
  608. level: 1,
  609. content: "1111111",
  610. title: "11",
  611. createTime: "123:123"
  612. },
  613. {
  614. level: 2,
  615. content: "1111111",
  616. title: "11",
  617. createTime: "123:123"
  618. }
  619. ],
  620. };
  621. },
  622. onLoad(op) {
  623. if(op.id){
  624. this.id=op.id
  625. this.init();
  626. }
  627. this.body0data.tabsFrom.showIndex=new Date().getFullYear()+'-'+(new Date().getMonth()+1)
  628. },
  629. onReady() {
  630. // if(this.id){
  631. // }
  632. },
  633. methods: {
  634. durationShow(){
  635. if(this.lockUsageRateData.duration){
  636. var m=this.lockUsageRateData.duration%60
  637. var h=parseInt(this.lockUsageRateData.duration/60)
  638. if(h>0){
  639. if(h>24){
  640. var day=parseInt(h/24)
  641. h=h%24
  642. var px= uni.upx2px(12*2)
  643. if(day>100){
  644. return `${day}<span style='font-size: ${px}px;'>天</span>`
  645. }else{
  646. return `${day}<span style='font-size: ${px}px;'>天</span>${h}h`
  647. }
  648. }else{
  649. return `${h}h${m}m`
  650. }
  651. }else{
  652. return `${m}m`
  653. }
  654. }else{
  655. return '0m'
  656. }
  657. },
  658. radioChange(e) {
  659. // console.log(e);
  660. },
  661. // 选中任一radio时,由radio-group触发
  662. selector2confirm(e){
  663. var time=e.year + "-" + e.month
  664. this.radiolist[5].name=e.year + "年" + e.month+"月"
  665. this.body0data.tabsFrom.showIndex=time
  666. this.getLockUsageRate()
  667. },
  668. selector2cancel(){
  669. this.radiovalue= "1"
  670. this.radiolist[5].name="指定月份"
  671. this.getLockUsageRate()
  672. },
  673. radioGroupChange(e) {
  674. console.log(e);
  675. if(e==0){
  676. this.body0data.tabsFrom.show=true
  677. }else{
  678. this.radiolist[5].name="指定月份"
  679. this.getLockUsageRate()
  680. }
  681. },
  682. init() {
  683. this.getInfo()
  684. this.getLockUsageRate()
  685. this.occupancyByTime(1)
  686. //this.getbody1()
  687. //this.getbody2()
  688. this.occupancyByTimeBar(1);
  689. //this.getbody3()
  690. //this.getbody4()
  691. this.durationDistribution()
  692. },
  693. occupancyByTime(init) {
  694. if (init) {
  695. var date = new Date();
  696. this.body2data.vue.queryN = date.getFullYear() + "年" + (date.getMonth() + 1) + '月';
  697. this.body2data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
  698. var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
  699. this.body2data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
  700. }
  701. this.jpContentMap.body2 = 0
  702. this.body2data.query.floorId = this.id
  703. API_index.occupancyByTime(
  704. this.body2data.query
  705. ).then((response) => {
  706. this.body2data.data = [
  707. ...response.data.locksTimeList,
  708. // ...response.data.locksTimeList,
  709. ];
  710. if (this.body2data.data.length == 0) {
  711. this.jpContentMap.body2 = 1
  712. } else {
  713. this.jpContentMap.body2 = 2
  714. this.getbody2()
  715. }
  716. }).catch(error => {
  717. uni.showToast({
  718. title: error,
  719. icon: "none"
  720. })
  721. })
  722. },
  723. body2dataconfirm(e) {
  724. var date = new Date(e.year + "-" + e.month + "-1");
  725. this.body2data.vue.queryN = date.getFullYear() + "年" + (date.getMonth() + 1) + '月';
  726. this.body2data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
  727. var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
  728. this.body2data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
  729. this.occupancyByTime()
  730. },
  731. getLockUsageRate(){
  732. var obj = {
  733. floorId: this.id,
  734. queryType:this.radiovalue
  735. }
  736. if(this.radiovalue==0){
  737. obj.queryMonth=this.body0data.tabsFrom.showIndex
  738. }
  739. API.lockUsageRate(obj).then((res) => {
  740. this.lockUsageRateData=res.data
  741. }).catch(error => {
  742. uni.hideLoading();
  743. uni.showToast({
  744. title: error,
  745. icon: "none"
  746. })
  747. })
  748. },
  749. durationDistribution() {
  750. this.jpContentMap.body4 = 0
  751. var date = new Date();
  752. //test
  753. //this.body4data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
  754. var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
  755. // this.body4data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
  756. this.body4data.query.floorId = this.id
  757. API_index.durationDistribution(
  758. this.body4data.query
  759. ).then((response) => {
  760. this.body4data.data = response.data.distribution;
  761. if (this.body4data.data.length == 0) {
  762. this.jpContentMap.body4 = 1
  763. } else {
  764. this.jpContentMap.body4 = 2
  765. //this.getbody3()
  766. this.getbody4()
  767. }
  768. }).catch(error => {
  769. uni.showToast({
  770. title: error,
  771. icon: "none"
  772. })
  773. })
  774. },
  775. getInfo(){
  776. uni.showLoading({
  777. title: "加载中",
  778. mask: true,
  779. })
  780. var obj = {
  781. id: this.id
  782. }
  783. this.jpContentMap.body8 =0
  784. API.lockDetails(obj).then((res) => {
  785. this.info = res.data.floorlockInfo
  786. this.title =this.info.parkingName
  787. uni.hideLoading();
  788. this.jpContentMap.body8 =2
  789. //this.getWhiteList()
  790. }).catch(error => {
  791. uni.hideLoading();
  792. uni.showToast({
  793. title: error,
  794. icon: "none"
  795. })
  796. })
  797. },
  798. getbody1() {
  799. var key = "body1pie1"
  800. var myChart = this.echartsList[key];
  801. if (!myChart) {
  802. myChart = echarts.init(document.getElementById(key), null, {
  803. width: uni.upx2px(300 * 2),
  804. height: uni.upx2px(170 * 2)
  805. })
  806. }
  807. myChart.clear()
  808. var option = {
  809. grid: {
  810. top: 20,
  811. left: 0,
  812. right: 0,
  813. bottom: 0,
  814. containLabel: true
  815. },
  816. series: [{
  817. type: 'pie',
  818. radius: ['80%', '50%'],
  819. radius: [35, 50],
  820. data: [{
  821. itemStyle: {
  822. color: "#EB3C31"
  823. },
  824. value: 1048,
  825. name: '0.5小时\n20%',
  826. },
  827. {
  828. itemStyle: {
  829. color: "#EF8132"
  830. },
  831. value: 735,
  832. name: '2小时\n10%'
  833. },
  834. {
  835. itemStyle: {
  836. color: "#929292"
  837. },
  838. value: 580,
  839. name: '2-6小时\n30%'
  840. },
  841. ]
  842. }]
  843. };
  844. myChart.setOption(option);
  845. this.echartsList[key] = myChart;
  846. },
  847. getbody4() {
  848. var key = "body4pie1"
  849. var myChart = this.echartsList[key];
  850. if (!myChart) {
  851. myChart = echarts.init(document.getElementById(key), null, {
  852. width: uni.upx2px(300 * 2),
  853. height: uni.upx2px(170 * 2)
  854. })
  855. }
  856. myChart.clear()
  857. var dataApi = this.body4data.data;
  858. var data = []
  859. var num = 0
  860. var sum = 0
  861. Object.keys(dataApi).forEach(key1 => {
  862. num += dataApi[key1]
  863. });
  864. var i = 0
  865. Object.keys(dataApi).forEach(key1 => {
  866. var value = dataApi[key1]
  867. if(value!=0){
  868. var obj = {
  869. value: value,
  870. name: key1
  871. }
  872. if (num != 0) {
  873. var valueInt = parseInt(value / num * 100)
  874. if (valueInt == 0 && value != 0) {
  875. valueInt = 1
  876. }
  877. sum += valueInt;
  878. if (i == Object.keys(dataApi).length - 1) {
  879. if (sum != 100) {
  880. valueInt += (100 - sum)
  881. }
  882. }
  883. obj.name += '\n' + (valueInt) + '%'
  884. }
  885. data.push(obj)
  886. }
  887. i++;
  888. });
  889. var option = {
  890. grid: {
  891. top: 20,
  892. left: 0,
  893. right: 0,
  894. bottom: 0,
  895. containLabel: true
  896. },
  897. series: [{
  898. type: 'pie',
  899. radius: ['80%', '50%'],
  900. radius: [45, 60],
  901. data: data
  902. }]
  903. };
  904. myChart.setOption(option);
  905. this.echartsList[key] = myChart;
  906. },
  907. occupancyByTimeBar(init) {
  908. if (init) {
  909. var date = new Date();
  910. //test
  911. //this.body3data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
  912. var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
  913. //this.body3data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
  914. }
  915. this.jpContentMap.body3 = 0
  916. this.body3data.query.floorId = this.id
  917. API_index.occupancyByTimeBar(
  918. this.body3data.query
  919. ).then((response) => {
  920. this.body3data.data = [
  921. ...response.data.locksTimeList,
  922. // ...response.data.locksTimeList,
  923. ];
  924. if (this.body3data.data.length == 0) {
  925. this.jpContentMap.body3 = 1
  926. } else {
  927. this.jpContentMap.body3 = 2
  928. this.getbody3()
  929. }
  930. }).catch(error => {
  931. uni.showToast({
  932. title: error,
  933. icon: "none"
  934. })
  935. })
  936. },
  937. getbody3() {
  938. var key = "body3bar1"
  939. var myChart = this.echartsList[key];
  940. if (!myChart) {
  941. myChart = echarts.init(document.getElementById(key), null, {
  942. width: uni.upx2px(300 * 2),
  943. height: uni.upx2px(170 * 2)
  944. })
  945. }
  946. var dataApi = this.body3data.data;
  947. myChart.clear()
  948. var data1 = []
  949. var data2 = [] //useDays
  950. var i = 0
  951. dataApi[0].timeUseList.forEach(item => {
  952. Object.keys(item).forEach(key1 => {
  953. data1.push(key1 + '点')
  954. var num = 0
  955. dataApi.forEach(item2 => {
  956. num += item2.timeUseList[i][key1].useDays
  957. })
  958. data2.push(num)
  959. });
  960. i += 1
  961. })
  962. var axisLabel = {
  963. rotate: 40,
  964. interval: 0,
  965. textStyle: {
  966. color: "#333"
  967. }
  968. }
  969. if (data1.length < 7) {
  970. axisLabel = {
  971. interval: 0,
  972. textStyle: {
  973. color: "#333"
  974. },
  975. }
  976. } else {
  977. axisLabel.interval = 0;
  978. }
  979. var option = {
  980. xAxis: {
  981. type: 'category',
  982. data: data1,
  983. axisLabel: axisLabel,
  984. },
  985. tooltip: {
  986. trigger: 'axis',
  987. axisPointer: {
  988. type: 'shadow'
  989. },
  990. formatter: function(params) {
  991. var result = params[0].name + '<br/>';
  992. for (var i = 0; i < params.length; i++) {
  993. result += params[i].marker+ ' ' + params[i].value + '次<br/>';
  994. }
  995. return result;
  996. }
  997. },
  998. yAxis: {
  999. type: 'value'
  1000. },
  1001. grid: {
  1002. top: 20,
  1003. left: 0,
  1004. right: 0,
  1005. bottom: 0,
  1006. containLabel: true
  1007. },
  1008. series: [{
  1009. itemStyle: {
  1010. color: "#5A88E5"
  1011. },
  1012. data: data2,
  1013. type: 'bar'
  1014. }]
  1015. };
  1016. myChart.setOption(option);
  1017. this.echartsList[key] = myChart;
  1018. },
  1019. getbody2() {
  1020. var key = "body2line1"
  1021. var myChart = this.echartsList[key];
  1022. var dataApi = this.body2data.data;
  1023. var head = 20 * (parseInt(dataApi.length / 4)) + 20
  1024. if (!myChart) {
  1025. myChart = echarts.init(document.getElementById(key), null, {
  1026. width: uni.upx2px(300 * 2),
  1027. height: uni.upx2px((170 + head) * 2)
  1028. })
  1029. }
  1030. myChart.clear()
  1031. var data1 = []
  1032. var series = [];
  1033. dataApi.forEach(item => {
  1034. var obj = {
  1035. name: item.lockName,
  1036. areaStyle: {},
  1037. itemStyle: {
  1038. color: "#BBD4FB"
  1039. },
  1040. label: {
  1041. show: true,
  1042. position: 'top',
  1043. color: "#307AF6"
  1044. },
  1045. data: [],
  1046. type: 'line'
  1047. }
  1048. if (dataApi.length == 1) {
  1049. obj.label.color = "#307AF6"
  1050. obj.areaStyle = {}
  1051. obj.itemStyle = {
  1052. color: "#BBD4FB"
  1053. }
  1054. }
  1055. item.timeUseList.forEach(item2 => {
  1056. Object.keys(item2).forEach(key1 => {
  1057. obj.data.push(item2[key1].useRate)
  1058. });
  1059. })
  1060. series.push(obj)
  1061. })
  1062. dataApi[0].timeUseList.forEach(item => {
  1063. Object.keys(item).forEach(key1 => {
  1064. data1.push(key1)
  1065. });
  1066. })
  1067. var axisLabel = {
  1068. rotate: 40,
  1069. interval: 0,
  1070. textStyle: {
  1071. color: "#333"
  1072. }
  1073. }
  1074. if (data1.length < 7) {
  1075. axisLabel = {
  1076. interval: 0,
  1077. textStyle: {
  1078. color: "#333"
  1079. },
  1080. }
  1081. } else {
  1082. axisLabel.interval = 0;
  1083. }
  1084. var option = {
  1085. xAxis: {
  1086. type: 'category',
  1087. data: data1,
  1088. axisLabel: axisLabel,
  1089. },
  1090. tooltip: {
  1091. trigger: 'axis',
  1092. axisPointer: {
  1093. type: 'shadow'
  1094. },
  1095. formatter: function(params) {
  1096. var result = params[0].name + '点<br/>';
  1097. for (var i = 0; i < params.length; i++) {
  1098. result += params[i].marker+params[i].seriesName + ': ' + params[i].value + '%<br/>';
  1099. }
  1100. return result;
  1101. }
  1102. },
  1103. yAxis: {
  1104. type: 'value'
  1105. },
  1106. grid: {
  1107. top: (20 + head),
  1108. left: 0,
  1109. right: 0,
  1110. bottom: 0,
  1111. containLabel: true
  1112. },
  1113. series: series,
  1114. };
  1115. myChart.setOption(option);
  1116. this.echartsList[key] = myChart;
  1117. },
  1118. }
  1119. }
  1120. </script>
  1121. <style lang="scss">
  1122. .gradient-header {
  1123. height: 0px;
  1124. }
  1125. .jpback {
  1126. height: 268rpx;
  1127. background: linear-gradient(180deg, rgba(22, 119, 255, 1) 20%, rgba(121, 177, 255, 1) 100%);
  1128. }
  1129. .main {
  1130. padding: 32rpx;
  1131. .no_statistics {
  1132. margin-bottom: 24rpx;
  1133. }
  1134. .statistics {
  1135. border-radius: 8px;
  1136. background-color: rgba(255, 255, 255, 1);
  1137. box-shadow: 0px 1px 6px 0px rgba(0, 59, 142, 0.05);
  1138. margin-bottom: 24rpx;
  1139. padding: 40rpx;
  1140. .title {
  1141. display: flex;
  1142. align-items: center;
  1143. margin-bottom: 32rpx;
  1144. font-weight: bold;
  1145. .img {
  1146. width: 36rpx;
  1147. height: 36rpx;
  1148. vertical-align: middle;
  1149. border-radius: 999px;
  1150. }
  1151. .change {
  1152. display: flex;
  1153. align-items: center;
  1154. .change-img {
  1155. width: 32rpx;
  1156. height: 32rpx;
  1157. vertical-align: middle;
  1158. }
  1159. text {
  1160. margin-left: 8rpx;
  1161. }
  1162. }
  1163. .text {
  1164. color: rgba(16, 16, 16, 1);
  1165. font-size: 36rpx;
  1166. margin-left: 16rpx;
  1167. display: flex;
  1168. justify-content: space-between;
  1169. align-items: center;
  1170. width: 100%;
  1171. .tag {
  1172. border-radius: 4px;
  1173. border: 1px solid rgba(187, 187, 187, 1);
  1174. color: rgba(51, 51, 51, 1);
  1175. font-size: 24rpx;
  1176. padding: 1px 8rpx;
  1177. margin-left: 8rpx;
  1178. }
  1179. }
  1180. .change {
  1181. margin-left: 16rpx;
  1182. font-size: 24rpx;
  1183. color: #838383;
  1184. }
  1185. .check-all {
  1186. margin-left: auto;
  1187. color: rgba(131, 131, 131, 1);
  1188. font-size: 24rpx;
  1189. }
  1190. }
  1191. }
  1192. }
  1193. .data1 {
  1194. display: flex;
  1195. align-items: center;
  1196. justify-content: space-between;
  1197. .item {
  1198. .line{
  1199. display: flex;
  1200. align-items: center;
  1201. }
  1202. .name {
  1203. color: rgba(51, 51, 51, 1);
  1204. font-size: 36rpx;
  1205. font-weight: bold;
  1206. margin-right: 8rpx;
  1207. }
  1208. .item-tags {
  1209. display: flex;
  1210. .tag {
  1211. border-radius: 4px;
  1212. background-color: rgba(39, 177, 72, 1);
  1213. color: rgba(255, 255, 255, 1);
  1214. font-size: 24rpx;
  1215. padding: 2rpx 8rpx;
  1216. margin-right: 8rpx;
  1217. }
  1218. .typeN1 {
  1219. background-color: rgba(22, 119, 255, 1);
  1220. }
  1221. .typeN2{
  1222. background-color: #8161ff;
  1223. background-color: #8161ff;
  1224. }
  1225. .statusN{
  1226. background-color:#838383
  1227. }
  1228. .lockStatusN {
  1229. background-color: rgba(153, 153, 153, 1);
  1230. }
  1231. .lockStatusN2 {
  1232. background-color: #03A9F4
  1233. }
  1234. }
  1235. }
  1236. .value {
  1237. .img {
  1238. margin-right: 8rpx;
  1239. width: 32rpx;
  1240. height: 32rpx;
  1241. }
  1242. }
  1243. }
  1244. .data2 {
  1245. height: 336rpx;
  1246. padding: 32rpx;
  1247. border-radius: 12px;
  1248. background: linear-gradient(180deg, rgba(222, 222, 222, 1) 3%, rgba(255, 255, 255, 1) 5%, rgba(232, 232, 232, 1) 56%, rgba(255, 255, 255, 1) 59%, rgba(236, 236, 236, 1) 95%, rgba(215, 215, 215, 1) 98%);
  1249. .top {
  1250. background-repeat: round;
  1251. background-image: url('@/assets/img/deviceTab/index3-2.png');
  1252. display: flex;
  1253. justify-content: space-around;
  1254. text-align: center;
  1255. height: 152rpx;
  1256. align-items: center;
  1257. .item {
  1258. .name {
  1259. color: rgba(16, 16, 16, 1);
  1260. font-size: 32rpx;
  1261. }
  1262. .value {
  1263. color: rgba(16, 16, 16, 1);
  1264. font-size: 48rpx;
  1265. font-weight: bold;
  1266. }
  1267. }
  1268. }
  1269. .body {
  1270. padding: 16rpx;
  1271. }
  1272. }
  1273. .body5data {
  1274. .line {
  1275. display: flex;
  1276. align-items: center;
  1277. justify-content: space-between;
  1278. .data {
  1279. display: flex;
  1280. width: 80%;
  1281. justify-content: space-between;
  1282. .item {
  1283. color: rgba(51, 51, 51, 1);
  1284. font-size: 16px;
  1285. }
  1286. .value {
  1287. color: rgba(119, 119, 119, 1);
  1288. font-size: 16px;
  1289. }
  1290. }
  1291. }
  1292. }
  1293. .body7data {
  1294. .line {
  1295. display: flex;
  1296. align-items: center;
  1297. justify-content: space-between;
  1298. .value {
  1299. width: 33%;
  1300. padding: 16rpx;
  1301. color: rgba(51, 51, 51, 1);
  1302. }
  1303. .value:nth-child(3) {
  1304. text-align: center;
  1305. }
  1306. }
  1307. /* 隔行变色: 偶数行设置背景色 */
  1308. .line:nth-child(odd) {
  1309. background-color: #F2F2F2;
  1310. /* 偶数行 */
  1311. }
  1312. .line:nth-child(even) {
  1313. background-color: #FFFFFF
  1314. /* 奇数行 */
  1315. }
  1316. }
  1317. .body8main {
  1318. .line {
  1319. display: flex;
  1320. align-items: center;
  1321. justify-content: space-between;
  1322. .value {
  1323. width: 33%;
  1324. padding: 16rpx;
  1325. text-align: center;
  1326. overflow: hidden;
  1327. white-space: nowrap;
  1328. text-overflow: ellipsis;
  1329. }
  1330. }
  1331. /* 隔行变色: 偶数行设置背景色 */
  1332. .line:nth-child(odd) {
  1333. color: rgba(119, 119, 119, 1);
  1334. font-size: 14px;
  1335. /* 偶数行 */
  1336. }
  1337. .line:nth-child(even) {
  1338. color: rgba(16, 16, 16, 1);
  1339. font-size: 16px;
  1340. /* 奇数行 */
  1341. }
  1342. }
  1343. .body6main {
  1344. .line {
  1345. display: flex;
  1346. justify-content: space-between;
  1347. }
  1348. .abnormal-item:last-of-type {
  1349. border-bottom: none !important;
  1350. padding-bottom: 0;
  1351. }
  1352. .abnormal-item {
  1353. width: 100%;
  1354. display: flex;
  1355. justify-content: space-between;
  1356. align-items: center;
  1357. padding: 16rpx;
  1358. border-bottom: 1px solid rgba(245, 245, 245, 1);
  1359. .item-title {
  1360. .level {
  1361. color: #fff;
  1362. border-radius: 8rpx;
  1363. font-weight: 400;
  1364. padding: 4rpx 8rpx;
  1365. font-size: 22rpx;
  1366. margin-right: 2px;
  1367. }
  1368. .level1 {
  1369. background: red;
  1370. }
  1371. .level2 {
  1372. background-color: rgba(255, 123, 0, 1);
  1373. }
  1374. color: rgba(51, 51, 51, 1);
  1375. width: 100%;
  1376. .img {
  1377. width: 32rpx;
  1378. height: 32rpx;
  1379. margin-right: 8rpx;
  1380. }
  1381. .name {
  1382. color: rgba(51, 51, 51, 1);
  1383. font-weight: bold;
  1384. overflow: hidden;
  1385. white-space: nowrap;
  1386. text-overflow: ellipsis;
  1387. }
  1388. .date {
  1389. color: rgba(119, 119, 119, 1);
  1390. font-size: 24rpx;
  1391. }
  1392. }
  1393. .item-value {
  1394. text-align: right;
  1395. display: flex;
  1396. align-items: center;
  1397. .more {
  1398. margin-left: 8rpx;
  1399. }
  1400. .value1 {
  1401. font-weight: bold;
  1402. color: rgba(51, 51, 51, 1);
  1403. }
  1404. .value2 {
  1405. color: rgba(119, 119, 119, 1);
  1406. font-size: 24rpx;
  1407. }
  1408. }
  1409. }
  1410. }
  1411. // 地锁信息弹窗
  1412. .body8data-popup {
  1413. .content {
  1414. padding: 32rpx;
  1415. .headline {
  1416. color: rgba(16, 16, 16, 1);
  1417. font-size: 36rpx;
  1418. text-align: center;
  1419. font-weight: bold;
  1420. margin-bottom: 24rpx;
  1421. }
  1422. .infos {
  1423. //padding-bottom: 100rpx;
  1424. .item:last-of-type {
  1425. border: none;
  1426. }
  1427. .item {
  1428. display: flex;
  1429. align-items: center;
  1430. //line-height: 48rpx;
  1431. padding: 20rpx 0;
  1432. border-bottom: 1px solid #cccccc;
  1433. .item-title {
  1434. color: rgba(51, 51, 51, 1);
  1435. width: 200rpx;
  1436. }
  1437. .item-value {
  1438. color: #666666;
  1439. flex: 1;
  1440. margin-left: 16rpx;
  1441. display: flex;
  1442. align-items: center;
  1443. justify-content: space-between;
  1444. .img{
  1445. width: 32rpx;
  1446. height: 32rpx;
  1447. transform: rotate(90deg);
  1448. margin-left: 96rpx;
  1449. }
  1450. }
  1451. }
  1452. }
  1453. .get {
  1454. height: 80rpx;
  1455. line-height: 80rpx;
  1456. border-radius: 4px;
  1457. background-color: rgba(22, 119, 255, 1);
  1458. color: rgba(255, 255, 255, 1);
  1459. font-size: 32rpx;
  1460. }
  1461. }
  1462. }
  1463. .top-span{
  1464. border-top: 1px solid rgba(245, 245, 245, 1);
  1465. display: flex;
  1466. flex-wrap: wrap;
  1467. justify-content: space-between;
  1468. padding-top: 16rpx;
  1469. margin-top: 16rpx;
  1470. .item-span{
  1471. white-space: pre;
  1472. display: flex;
  1473. align-items: center;
  1474. margin-top: 4rpx;
  1475. width: 30%;
  1476. font-size: 28rpx;
  1477. span{
  1478. margin: 0 8rpx;
  1479. }
  1480. img{
  1481. width: 28rpx;
  1482. height: 28rpx;
  1483. }
  1484. }
  1485. .lockStatusX1{
  1486. color: #00B962;
  1487. }
  1488. .lockStatusX2{
  1489. color: #1677FF;
  1490. }
  1491. .statusX1{
  1492. color: #00B962;
  1493. }
  1494. .statusX2{
  1495. color: #1677FF;
  1496. }
  1497. }
  1498. </style>