stationGun.vue 37 KB

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