dataLock.vue 38 KB

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