index.vue 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958
  1. <template>
  2. <view>
  3. <u-navbar v-show="false" title="首页" title-color="#101010"></u-navbar>
  4. <u-picker v-model="body2data.vue.show" :params="body2data.vue.params"
  5. :default-time="body2data.query.startTime"
  6. @confirm="body2dataconfirm"
  7. mode="time"></u-picker>
  8. <u-picker v-model="body5data.vue.show"
  9. :default-time="body2data.query.queryDate"
  10. :params="body5data.vue.params" @confirm="body5dataconfirm"
  11. mode="time"></u-picker>
  12. <view class="navbar">
  13. 智泊e家 运管端
  14. </view>
  15. <view class="tabs-box">
  16. <u-picker-jp v-model="showselect1" range-key="name" :num="3" @confirm="showselect1confirm"
  17. :range="companyList"></u-picker-jp>
  18. <template v-if="companyListTabs.length>2">
  19. <u-tabs ref="tabs" :list="companyListTabs" bg-color="#1677ff" :current="current1" inactive-color="#fff"
  20. @change="utabsChange1" item-width="180" height="70" gutter="10" active-color="#fff"></u-tabs>
  21. <view class="tabs-box-other" v-if="companyList.length>3" @click="utabsChange1other">
  22. 更多
  23. </view>
  24. </template>
  25. </view>
  26. <view class="main">
  27. <u-picker-jp v-model="showselect2" range-key="name" :num='3' @confirm="showselect2confirm"
  28. :range="parkingList"></u-picker-jp>
  29. <view class="tabs-box2" v-show="parkingListTabs.length>2">
  30. <u-tabs ref="tabs2" gutter="10" :list="parkingListTabs" :current="current2" @change="utabsChange2"
  31. item-width="180" bg-color="#f2f4f6" height="70"></u-tabs>
  32. <view v-if="parkingList.length>3" class="tabs-box-other" @click="utabsChange2other">
  33. 更多
  34. </view>
  35. </view>
  36. <view class="statistics ">
  37. <view class="title">
  38. <view class="icon">
  39. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  40. </view>
  41. <view class="text">
  42. 综合统计
  43. </view>
  44. </view>
  45. <view class="contentBody">
  46. <jpContent :status="jpContentMap.body1">
  47. <view class="body1pie-table">
  48. <view class="tr">
  49. <view class="td td1">
  50. <view id="body1pie1" class="body1pie">
  51. </view>
  52. </view>
  53. <view class="td td2">
  54. <view class="td td3">
  55. <view class="td td4">空闲<span
  56. class="body1pie-num color53B56B">{{body1data.data.idleNum}}</span>台
  57. </view>
  58. <view class="td td4">占用<span
  59. class="body1pie-num colorAAAAAA">{{body1data.data.useNum}}</span>台
  60. </view>
  61. </view>
  62. <view class="td td3" >
  63. <view class="td td4">公共车位<span
  64. class="body1pie-num colorEF8132">{{body1data.data1.type1}}</span>台
  65. </view>
  66. <view class="td td4">私家车位<span
  67. class="body1pie-num colorDC4441">{{body1data.data1.type2}}</span>台
  68. </view>
  69. </view>
  70. </view>
  71. </view>
  72. <view class="tr">
  73. <view class="td td1">
  74. <view id="body1pie2" class="body1pie">
  75. </view>
  76. </view>
  77. <view class="td td2">
  78. <view class="td td3">
  79. <view class="td td4">正常<span
  80. class="body1pie-num color53B56B">{{body1data.data.normalNum}}</span>台
  81. </view>
  82. <view class="td td4">离线<span
  83. class="body1pie-num colorAAAAAA">{{body1data.data.loseNum}}</span>台
  84. </view>
  85. </view>
  86. <view class="td td3">
  87. <view class="td td4">故障<span
  88. class="body1pie-num colorEF8132">{{body1data.data.errorNum}}</span>台
  89. </view>
  90. <view class="td td4" v-if="0">低电量<span
  91. class="body1pie-num colorDC4441">5</span>台</view>
  92. </view>
  93. </view>
  94. </view>
  95. <view class="tr" v-if="0">
  96. <view class="td td1">
  97. <view id="body1pie3" class="body1pie">
  98. </view>
  99. </view>
  100. <view class="td td2">
  101. <view class="td td3">
  102. <view class="td td4">管理员<span class="body1pie-num color307AF6">5</span>人</view>
  103. <view class="td td4">白名单<span class="body1pie-num color53B56B">5</span>人</view>
  104. </view>
  105. <view class="td td3">
  106. <view class="td td4">游客<span class="body1pie-num colorEF8375">5</span>人次</view>
  107. <view class="td td4"></view>
  108. </view>
  109. </view>
  110. </view>
  111. </view>
  112. </jpContent>
  113. </view>
  114. </view>
  115. <view class="statistics " >
  116. <view class="title">
  117. <view class="icon">
  118. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  119. </view>
  120. <view class="text">
  121. <view>时空矩阵图</view>
  122. <view class="tag" @click="body5data.vue.show=true">{{body5data.vue.queryN}}<u-icon
  123. name="arrow-down"></u-icon></view>
  124. </view>
  125. </view>
  126. <view class="contentBody">
  127. <jpContent :status="jpContentMap.body5">
  128. <view class="body5main">
  129. <view id="body5echart" class="body5class">
  130. </view>
  131. </view>
  132. </jpContent>
  133. </view>
  134. </view>
  135. <view class="statistics " v-show="companyId">
  136. <view class="title">
  137. <view class="icon">
  138. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  139. </view>
  140. <view class="text">
  141. <view>车位异常记录</view>
  142. <view class="check-all" @click="gotoUrl('/pages/myTab/abnormalList?companyId='+companyId)">
  143. 查看全部<u-icon name="arrow-right"></u-icon></view>
  144. </view>
  145. </view>
  146. <view class="contentBody">
  147. <jpContent :status="jpContentMap.body6">
  148. <view class="body6main">
  149. <view class="line" v-for="(item,index) in abnormalRecordsList" :key="index">
  150. <view class="abnormal-item">
  151. <!-- @click="gotoUrl('/pages/abnormal/abnormalAlarmDetails?id='+item.id)"
  152. -->
  153. <view class="item-title">
  154. <view class="name">
  155. <span v-if="item.level==1" class="level level1 ">一级</span>
  156. <span v-if="item.level==2" class="level level2">二级</span>
  157. {{item.content}}
  158. </view>
  159. <view class="date"
  160. style="display: flex; justify-content: space-between;margin-top: 4rpx;">
  161. <view>{{item.title}}</view>
  162. <view>{{item.createTime}}</view>
  163. </view>
  164. </view>
  165. </view>
  166. <u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
  167. </view>
  168. </view>
  169. </jpContent>
  170. </view>
  171. </view>
  172. <view class="statistics ">
  173. <view class="title">
  174. <view class="icon">
  175. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  176. </view>
  177. <view class="text">
  178. <view>车位平均占用率(%)</view>
  179. <view class="tag" @click="body2data.vue.show=true">{{body2data.vue.queryN}}<u-icon
  180. name="arrow-down"></u-icon></view>
  181. </view>
  182. </view>
  183. <view class="contentBody">
  184. <jpContent :status="jpContentMap.body2">
  185. <view class="body2lineChart">
  186. <view id="body2line1" class="body2line">
  187. </view>
  188. </view>
  189. </jpContent>
  190. </view>
  191. </view>
  192. <view class="statistics ">
  193. <view class="title">
  194. <view class="icon">
  195. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  196. </view>
  197. <view class="text">
  198. <view>高频使用时段分布</view>
  199. </view>
  200. </view>
  201. <view class="contentBody">
  202. <jpContent :status="jpContentMap.body3">
  203. <view class="body3barChart">
  204. <view id="body3bar1" class="body3bar">
  205. </view>
  206. </view>
  207. </jpContent>
  208. </view>
  209. </view>
  210. <view class="statistics ">
  211. <view class="title">
  212. <view class="icon">
  213. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  214. </view>
  215. <view class="text">
  216. <view>用户停留时长分群特征</view>
  217. </view>
  218. </view>
  219. <view class="contentBody">
  220. <jpContent :status="jpContentMap.body4">
  221. <view class="body4pieChart">
  222. <view id="body4pie1" class="body4pie">
  223. </view>
  224. </view>
  225. </jpContent>
  226. </view>
  227. </view>
  228. <view class="statistics " v-show="companyId">
  229. <view class="title">
  230. <view class="icon">
  231. <image class="img" src="@/assets/img/circleCopy1@1x.png" mode=""></image>
  232. </view>
  233. <view class="text">
  234. <view>设备列表</view>
  235. <view class="check-all" @click="gotoDeviceList()">查看全部<u-icon name="arrow-right"></u-icon>
  236. </view>
  237. </view>
  238. </view>
  239. <view class="contentBody">
  240. <jpContent :status="jpContentMap.body7">
  241. <view class="body7main">
  242. <view class="line" v-for="(item,index) in equipmentList"
  243. @click="gotoUrl('/pages/deviceTab/dataLock?id='+item.id)" :key="index">
  244. <view class="item">
  245. <!--
  246. -->
  247. <view class="item-title">
  248. {{item.name}}
  249. </view>
  250. <view class="item-tags">
  251. <view class="tag " :class="'tag'+item.type">
  252. {{item.typeN}}
  253. </view>
  254. <view class="tag" :class="'statusN'+item.status">
  255. {{item.statusN}}
  256. </view>
  257. <view class="tag" :class="'lockStatus lockStatus'+item.lockStatus">
  258. {{item.lockStatusN}}
  259. </view>
  260. </view>
  261. </view>
  262. <u-icon name="arrow-right" size="24" color="#BBBBBB"></u-icon>
  263. </view>
  264. <u-divider border-color="#CFD2D5" @click="gotoDeviceList()"
  265. v-if="equipmentList.length==10">最多显示10条,点击查看更多</u-divider>
  266. </view>
  267. </jpContent>
  268. </view>
  269. </view>
  270. <u-divider border-color="#CFD2D5">已经到底了</u-divider>
  271. </view>
  272. <tabbar :current="0" ></tabbar>
  273. </view>
  274. </template>
  275. <script>
  276. import Tabbar from '@/components/Tabbar.vue'
  277. import jpContent from '@/components/JPcontent.vue'
  278. import * as echarts from 'echarts';
  279. import * as API from '@/apis/pagejs/index.js'
  280. import {
  281. parseUnixTime,
  282. beforeTimeStamp,
  283. newDate
  284. } from '@/apis/utils'
  285. export default {
  286. components: {
  287. Tabbar,
  288. jpContent
  289. },
  290. data() {
  291. return {
  292. current1: 0,
  293. showselect1: false,
  294. current2: 0,
  295. showselect2: false,
  296. isReady: false,
  297. companyList: [],
  298. parkingList: [],
  299. //companyListIndex:0,
  300. companyId: "",
  301. parkingId: "",
  302. echartsList: {},
  303. equipmentList: [{}],
  304. abnormalRecordsList: [{
  305. level: 1,
  306. content: "1111111",
  307. title: "11",
  308. createTime: "123:123"
  309. },
  310. {
  311. level: 2,
  312. content: "1111111",
  313. title: "11",
  314. createTime: "123:123"
  315. }
  316. ],
  317. body2data: {
  318. query: {},
  319. vue: {
  320. queryN: "",
  321. show: false,
  322. params: {
  323. year: true,
  324. month: true,
  325. day: false,
  326. hour: false,
  327. minute: false,
  328. second: false
  329. }
  330. },
  331. data: {}
  332. },
  333. body1data: {
  334. query: {},
  335. data: {},
  336. data1: {}
  337. },
  338. body4data: {
  339. query: {},
  340. data: {}
  341. },
  342. body3data: {
  343. query: {},
  344. data: {}
  345. },
  346. body5data: {
  347. query: {},
  348. data: {},
  349. vue: {
  350. queryN: "",
  351. show: false,
  352. params: {
  353. year: true,
  354. month: true,
  355. day: true,
  356. hour: false,
  357. minute: false,
  358. second: false
  359. }
  360. },
  361. },
  362. jpContentMap: {
  363. body1: 0,
  364. body2: 0,
  365. body3: 0,
  366. body4: 0,
  367. body5: 0,
  368. body6: 1,
  369. body7: 0,
  370. body8: 0,
  371. body9: 0,
  372. body10: 0,
  373. }
  374. }
  375. },
  376. onLoad() {
  377. },
  378. onReady() {
  379. this.getfindByOpenId();
  380. },
  381. computed: {
  382. companyListTabs() {
  383. var sz = []
  384. if (this.companyList.length > 3) {
  385. sz = [{
  386. id: "",
  387. name: '全部'
  388. }]
  389. sz.push(this.companyList[0])
  390. sz.push(this.companyList[1])
  391. } else {
  392. sz = [{
  393. id: "",
  394. name: '全部'
  395. },
  396. ...this.companyList
  397. ]
  398. }
  399. return sz
  400. },
  401. parkingListTabs() {
  402. var sz = []
  403. if (this.parkingList.length > 3) {
  404. sz = [{
  405. id: "",
  406. name: '综合查询'
  407. }]
  408. sz.push(this.parkingList[0])
  409. sz.push(this.parkingList[1])
  410. } else {
  411. sz = [{
  412. id: "",
  413. name: '综合查询'
  414. },
  415. ...this.parkingList
  416. ]
  417. }
  418. return sz
  419. },
  420. },
  421. methods: {
  422. gotoDeviceList() {
  423. if (this.companyId) {
  424. this.gotoUrl('/pages/deviceTab/deviceList?companyId=' + this.companyId)
  425. } else {
  426. this.gotoUrl('/pages/deviceTab/index')
  427. }
  428. },
  429. getfloorStatus() {
  430. this.jpContentMap.body1 = 0
  431. API.floorStatus({
  432. companyId: this.companyId,
  433. parkingId: this.parkingId
  434. }).then((response) => {
  435. this.body1data.data = response.data
  436. uni.hideLoading();
  437. this.jpContentMap.body1 = 2
  438. this.getbody1pie1()
  439. this.getbody1pie2()
  440. this.getbody1pie3()
  441. }).catch(error => {
  442. uni.showToast({
  443. title: error,
  444. icon: "none"
  445. })
  446. })
  447. },
  448. getfloorlockList() {
  449. this.jpContentMap.body7 = 0
  450. API.floorlockList({
  451. companyId: this.companyId,
  452. parkingId: this.parkingId,
  453. pageSize: 10
  454. }).then((response) => {
  455. uni.hideLoading();
  456. if (response.data.totalPage) {
  457. this.jpContentMap.body7 = 2
  458. this.equipmentList = response.data.data
  459. var num1=0
  460. var num2=0
  461. this.equipmentList.forEach(item=>{
  462. if(item.type==1){
  463. num1+=1
  464. }
  465. if(item.type==2){
  466. num2+=1
  467. }
  468. })
  469. this.body1data.data1.type1=num1
  470. this.body1data.data1.type2=num2
  471. } else {
  472. this.jpContentMap.body7 = 1
  473. }
  474. }).catch(error => {
  475. uni.showToast({
  476. title: error,
  477. icon: "none"
  478. })
  479. })
  480. },
  481. getApi1() {
  482. if (this.companyId == "") {
  483. this.getApi2()
  484. } else {
  485. this.parkingInfoList()
  486. }
  487. },
  488. getApi2() {
  489. this.getfloorStatus()
  490. this.getfloorlockList()
  491. this.occupancyByTime(1);
  492. this.occupancyByTimeBar(1);
  493. this.occupancyByDay(1);
  494. this.durationDistribution();
  495. if (this.parkingId == "") {
  496. } else {
  497. }
  498. },
  499. change1companyList(i) {
  500. //this.companyListIndex=i
  501. var companyId = ""
  502. if (i == -1) {
  503. if (this.companyId == companyId) {
  504. } else {
  505. this.companyId = ""
  506. this.parkingList = [];
  507. this.getApi1()
  508. }
  509. } else {
  510. var item = this.companyList[i]
  511. companyId = item.id
  512. if (this.companyId == companyId) {
  513. } else {
  514. this.companyId = companyId
  515. this.parkingId = "";
  516. this.current2 = 0;
  517. this.$refs.tabs2.showBar = true
  518. this.getApi1()
  519. }
  520. }
  521. },
  522. change2parkingList(i) {
  523. var parkingId = ""
  524. if (i == -1) {
  525. if (this.parkingId == parkingId) {
  526. } else {
  527. this.parkingId = "";
  528. this.getApi2()
  529. }
  530. } else {
  531. var item = this.parkingList[i]
  532. parkingId = item.id
  533. if (this.parkingId == parkingId) {
  534. } else {
  535. this.parkingId = parkingId;
  536. this.getApi2()
  537. }
  538. }
  539. },
  540. showselect2confirm(e) {
  541. this.change2parkingList(e[0])
  542. },
  543. utabsChange2other() {
  544. this.$refs.tabs2.showBar = false
  545. this.current2 = -1;
  546. this.showselect2 = true;
  547. },
  548. utabsChange2(index) {
  549. this.current2 = index;
  550. this.change2parkingList(index - 1)
  551. this.$refs.tabs2.showBar = true
  552. },
  553. showselect1confirm(e) {
  554. this.change1companyList(e[0])
  555. },
  556. utabsChange1other() {
  557. this.$refs.tabs.showBar = false
  558. this.current1 = -1;
  559. this.showselect1 = true;
  560. },
  561. utabsChange1(index) {
  562. this.current1 = index;
  563. this.change1companyList(index - 1)
  564. this.$refs.tabs.showBar = true
  565. },
  566. parkingInfoList() {
  567. uni.showLoading({
  568. title: "加载中",
  569. mask: true,
  570. })
  571. this.parkingList = [];
  572. API.parkingList({
  573. companyId: this.companyId,
  574. pageSize: 999
  575. }).then((response) => {
  576. uni.hideLoading();
  577. var parkingInfoList = response.data.parkingInfoList
  578. this.parkingList = [
  579. ...parkingInfoList,
  580. ];
  581. if (this.parkingList.length == 1) {
  582. this.change2parkingList(0)
  583. } else {
  584. this.change2parkingList(-1)
  585. this.getApi2()
  586. }
  587. this.getfloorlockList()
  588. }).catch(error => {
  589. uni.showToast({
  590. title: error,
  591. icon: "none"
  592. })
  593. })
  594. },
  595. companyInfoList() {
  596. uni.showLoading({
  597. title: "加载中",
  598. mask: true,
  599. })
  600. this.companyList = [];
  601. API.companyInfoList({
  602. }).then((response) => {
  603. uni.hideLoading();
  604. var companyInfoList = response.data.companyInfoList
  605. this.companyList = [
  606. ...companyInfoList,
  607. ];
  608. if (this.companyList.length == 1) {
  609. this.change1companyList(0)
  610. } else {
  611. this.change1companyList(-1)
  612. this.getApi1()
  613. }
  614. }).catch(error => {
  615. uni.showToast({
  616. title: error,
  617. icon: "none"
  618. })
  619. })
  620. },
  621. init() {
  622. this.companyInfoList()
  623. //this.occupancyByTime();
  624. //this.getbody3()
  625. //this.getbody4()
  626. //this.getbody5()
  627. },
  628. body2dataconfirm(e) {
  629. var date = new Date(e.year + "-" + e.month + "-1");
  630. this.body2data.vue.queryN = date.getFullYear() + "年" + (date.getMonth() + 1) + '月';
  631. this.body2data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
  632. var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
  633. this.body2data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
  634. this.occupancyByTime()
  635. },
  636. body5dataconfirm(e) {
  637. console.log(e)
  638. var date = new Date(e.year + "-" + e.month + "-"+e.day);
  639. this.body5data.query.queryDate = parseUnixTime(date, '{y}-{m}-{d}')
  640. this.body5data.vue.queryN = parseUnixTime(date, '{y}年{m}月{d}日');
  641. this.occupancyByDay()
  642. },
  643. occupancyByTimeBar(init) {
  644. if (init) {
  645. var date = new Date();
  646. //test
  647. this.body3data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
  648. var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
  649. this.body3data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
  650. }
  651. this.jpContentMap.body3 = 0
  652. this.body3data.query.companyId = this.companyId
  653. this.body3data.query.parkingId = this.parkingId
  654. API.occupancyByTimeBar(
  655. this.body3data.query
  656. ).then((response) => {
  657. this.body3data.data = [
  658. ...response.data.locksTimeList,
  659. // ...response.data.locksTimeList,
  660. ];
  661. if (this.body3data.data.length == 0) {
  662. this.jpContentMap.body3 = 1
  663. } else {
  664. this.jpContentMap.body3 = 2
  665. this.getbody3()
  666. }
  667. }).catch(error => {
  668. uni.showToast({
  669. title: error,
  670. icon: "none"
  671. })
  672. })
  673. },
  674. durationDistribution(){
  675. this.jpContentMap.body4 = 0
  676. var date = new Date();
  677. //test
  678. this.body4data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
  679. var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
  680. this.body4data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
  681. this.body4data.query.companyId = this.companyId
  682. this.body4data.query.parkingId = this.parkingId
  683. API.durationDistribution(
  684. this.body4data.query
  685. ).then((response) => {
  686. this.body4data.data = response.data.distribution;
  687. if (this.body4data.data.length == 0) {
  688. this.jpContentMap.body4 = 1
  689. } else {
  690. this.jpContentMap.body4 = 2
  691. //this.getbody3()
  692. this.getbody4()
  693. }
  694. }).catch(error => {
  695. uni.showToast({
  696. title: error,
  697. icon: "none"
  698. })
  699. })
  700. },
  701. occupancyByDay(init) {
  702. if (init) {
  703. var date = new Date();
  704. this.body5data.query.queryDate = parseUnixTime(date, '{y}-{m}-{d}')
  705. this.body5data.vue.queryN = parseUnixTime(date, '{y}年{m}月{d}日');
  706. }
  707. this.jpContentMap.body5 = 0
  708. this.body5data.query.companyId = this.companyId
  709. this.body5data.query.parkingId = this.parkingId
  710. API.occupancyByDay(
  711. this.body5data.query
  712. ).then((response) => {
  713. this.body5data.data = [
  714. ...response.data.locksTimeList,
  715. ];
  716. if (this.body5data.data.length == 0) {
  717. this.jpContentMap.body5 = 1
  718. } else {
  719. this.jpContentMap.body5 = 2
  720. //this.getbody3()
  721. this.getbody5()
  722. }
  723. }).catch(error => {
  724. uni.showToast({
  725. title: error,
  726. icon: "none"
  727. })
  728. })
  729. },
  730. occupancyByTime(init) {
  731. if (init) {
  732. var date = new Date();
  733. this.body2data.vue.queryN = date.getFullYear() + "年" + (date.getMonth() + 1) + '月';
  734. this.body2data.query.startTime = date.getFullYear() + "-" + (date.getMonth() + 1) + "-1"
  735. var endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
  736. this.body2data.query.endTime = parseUnixTime(endOfMonth, '{y}-{m}-{d}')
  737. }
  738. this.jpContentMap.body2 = 0
  739. this.body2data.query.companyId = this.companyId
  740. this.body2data.query.parkingId = this.parkingId
  741. API.occupancyByTime(
  742. this.body2data.query
  743. ).then((response) => {
  744. this.body2data.data = [
  745. ...response.data.locksTimeList,
  746. // ...response.data.locksTimeList,
  747. ];
  748. if (this.body2data.data.length == 0) {
  749. this.jpContentMap.body2 = 1
  750. } else {
  751. this.jpContentMap.body2 = 2
  752. this.getbody2()
  753. }
  754. }).catch(error => {
  755. uni.showToast({
  756. title: error,
  757. icon: "none"
  758. })
  759. })
  760. },
  761. getbody5() {
  762. // 颜色映射
  763. var colorMap = [
  764. '#FFA500',
  765. '#00FF00',
  766. '#F44336',
  767. '#E91E63',
  768. '#9C27B0',
  769. '#673AB7',
  770. '#3F51B5',
  771. '#2196F3',
  772. '#03A9F4',
  773. '#00BCD4',
  774. '#009688',
  775. '#CDDC39',
  776. '#FFEB3B',
  777. '#FFC107',
  778. '#FF9800',
  779. '#FF5722',
  780. '#795548',
  781. '#607D8B'
  782. ];
  783. var key = "body5echart"
  784. var dataApi = this.body5data.data;
  785. var head = 40 * (parseInt(dataApi.length / 4)) + 20
  786. var body =20 * (parseInt(dataApi.length ))
  787. var myChart = this.echartsList[key];
  788. if (!myChart) {
  789. myChart = echarts.init(document.getElementById(key), null, {
  790. width: uni.upx2px(300 * 2),
  791. height: uni.upx2px((170 + head) * 2+body)
  792. })
  793. }
  794. myChart.clear()
  795. var dataName=[]
  796. var dataTime=[]
  797. var series=[]
  798. var i =0;
  799. dataApi.forEach(item => {
  800. dataName.push(item.lockName)
  801. var itemList=[]
  802. var j=0
  803. item.timeUseList.forEach(item2=>{
  804. Object.keys(item2).forEach(key1 => {
  805. console.log(item2[key1])
  806. if(item2[key1]){
  807. var ob=[j,i,i]
  808. itemList.push(ob)
  809. }else{
  810. // var ob=[j,i,i]
  811. // itemList.push(ob)
  812. }
  813. });
  814. j+=1;
  815. })
  816. var obj={
  817. silent: true,
  818. type: 'custom',
  819. "name": item.lockName,
  820. tooltip:{
  821. //trigger: 'none',
  822. show:false
  823. },
  824. itemStyle: {
  825. color: colorMap[i%colorMap.length]
  826. },
  827. renderItem: function(params, api) {
  828. var xIndex = api.value(0); // x轴索引
  829. var yIndex = api.value(1); // y轴索引
  830. var value = api.value(2); // 值
  831. // 获取颜色
  832. var color = colorMap[value%colorMap.length] || '#ffffff';
  833. // 计算矩形的位置和大小
  834. var x = api.coord([xIndex, yIndex])[0];
  835. var y = api.coord([xIndex, yIndex])[1];
  836. var width = api.size([1, 0])[0];
  837. var height = api.size([0, 1])[1];
  838. return {
  839. type: 'rect',
  840. shape: {
  841. x: x - uni.upx2px(25),
  842. y: y - uni.upx2px(20),
  843. width: width,
  844. height: 20,
  845. },
  846. style: {
  847. fill: color
  848. }
  849. };
  850. },
  851. }
  852. obj.data=itemList
  853. series.push(obj)
  854. i+=1;
  855. })
  856. dataApi[0].timeUseList.forEach(item => {
  857. Object.keys(item).forEach(key1 => {
  858. dataTime.push(key1)
  859. });
  860. })
  861. var option = {
  862. tooltip: {
  863. trigger: 'axis',
  864. axisPointer: {
  865. type: 'shadow'
  866. }
  867. },
  868. grid: {
  869. top: 30 + head,
  870. left: -10,
  871. right: 0,
  872. bottom: 0,
  873. containLabel: true
  874. },
  875. legend: {
  876. data:dataName
  877. },
  878. xAxis: {
  879. type: 'category',
  880. data: dataTime
  881. },
  882. yAxis: {
  883. type: 'category',
  884. },
  885. series:series
  886. };
  887. myChart.setOption(option);
  888. this.echartsList[key] = myChart;
  889. },
  890. getbody4() {
  891. var key = "body4pie1"
  892. var myChart = this.echartsList[key];
  893. if (!myChart) {
  894. myChart = echarts.init(document.getElementById(key), null, {
  895. width: uni.upx2px(300 * 2),
  896. height: uni.upx2px(170 * 2)
  897. })
  898. }
  899. myChart.clear()
  900. var dataApi = this.body4data.data;
  901. var data=[]
  902. var num=0
  903. var sum=0
  904. Object.keys(dataApi).forEach(key1 => {
  905. num+=dataApi[key1]
  906. });
  907. var i=0
  908. Object.keys(dataApi).forEach(key1 => {
  909. var value=dataApi[key1]
  910. var obj={
  911. value: value,
  912. name: key1
  913. }
  914. if(num!=0){
  915. var valueInt=parseInt(value/num*100)
  916. if(valueInt==0&&value!=0){
  917. valueInt=1
  918. }
  919. sum+=valueInt;
  920. if(i==Object.keys(dataApi).length-1){
  921. if(sum!=100){
  922. valueInt+=(100-sum)
  923. }
  924. }
  925. obj.name+='\n'+(valueInt)+'%'
  926. }
  927. data.push(obj)
  928. i++;
  929. });
  930. var option = {
  931. grid: {
  932. top: 20,
  933. left: 0,
  934. right: 0,
  935. bottom: 0,
  936. containLabel: true
  937. },
  938. series: [{
  939. type: 'pie',
  940. radius: ['80%', '50%'],
  941. radius: [45, 60],
  942. data: data
  943. }]
  944. };
  945. console.log(option)
  946. myChart.setOption(option);
  947. this.echartsList[key] = myChart;
  948. },
  949. getbody3() {
  950. var key = "body3bar1"
  951. var myChart = this.echartsList[key];
  952. if (!myChart) {
  953. myChart = echarts.init(document.getElementById(key), null, {
  954. width: uni.upx2px(300 * 2),
  955. height: uni.upx2px(170 * 2)
  956. })
  957. }
  958. var dataApi = this.body3data.data;
  959. myChart.clear()
  960. var data1 = []
  961. var data2 = [] //useDays
  962. var i = 0
  963. dataApi[0].timeUseList.forEach(item => {
  964. Object.keys(item).forEach(key1 => {
  965. data1.push(key1)
  966. var num = 0
  967. dataApi.forEach(item2 => {
  968. num += item2.timeUseList[i][key1].useDays
  969. })
  970. data2.push(num)
  971. });
  972. i += 1
  973. })
  974. var axisLabel = {
  975. rotate: 40,
  976. interval: 0,
  977. textStyle: {
  978. color: "#333"
  979. }
  980. }
  981. if (data1.length < 7) {
  982. axisLabel = {
  983. interval: 0,
  984. textStyle: {
  985. color: "#333"
  986. },
  987. }
  988. } else {
  989. axisLabel.interval = 0;
  990. }
  991. var option = {
  992. xAxis: {
  993. type: 'category',
  994. data: data1,
  995. axisLabel: axisLabel,
  996. },
  997. tooltip: {
  998. trigger: 'axis',
  999. axisPointer: {
  1000. type: 'shadow'
  1001. }
  1002. },
  1003. yAxis: {
  1004. type: 'value'
  1005. },
  1006. grid: {
  1007. top: 20,
  1008. left: 0,
  1009. right: 0,
  1010. bottom: 0,
  1011. containLabel: true
  1012. },
  1013. series: [{
  1014. itemStyle: {
  1015. color: "#5A88E5"
  1016. },
  1017. data: data2,
  1018. type: 'bar'
  1019. }]
  1020. };
  1021. myChart.setOption(option);
  1022. this.echartsList[key] = myChart;
  1023. },
  1024. getbody2() {
  1025. var key = "body2line1"
  1026. var myChart = this.echartsList[key];
  1027. var dataApi = this.body2data.data;
  1028. var head = 20 * (parseInt(dataApi.length / 4)) + 20
  1029. if (!myChart) {
  1030. myChart = echarts.init(document.getElementById(key), null, {
  1031. width: uni.upx2px(300 * 2),
  1032. height: uni.upx2px((170 + head) * 2)
  1033. })
  1034. }
  1035. myChart.clear()
  1036. var data1 = []
  1037. var series = [];
  1038. dataApi.forEach(item => {
  1039. var obj = {
  1040. name: item.lockName,
  1041. //areaStyle: {},
  1042. // itemStyle: {
  1043. // color: "#BBD4FB"
  1044. // },
  1045. label: {
  1046. show: true,
  1047. position: 'top',
  1048. // color: "#307AF6"
  1049. },
  1050. data: [],
  1051. type: 'line'
  1052. }
  1053. if (dataApi.length == 1) {
  1054. obj.label.color = "#307AF6"
  1055. obj.areaStyle = {}
  1056. obj.itemStyle = {
  1057. color: "#BBD4FB"
  1058. }
  1059. }
  1060. item.timeUseList.forEach(item2 => {
  1061. Object.keys(item2).forEach(key1 => {
  1062. obj.data.push(item2[key1].useRate)
  1063. });
  1064. })
  1065. series.push(obj)
  1066. })
  1067. dataApi[0].timeUseList.forEach(item => {
  1068. Object.keys(item).forEach(key1 => {
  1069. data1.push(key1)
  1070. });
  1071. })
  1072. var axisLabel = {
  1073. rotate: 40,
  1074. interval: 0,
  1075. textStyle: {
  1076. color: "#333"
  1077. }
  1078. }
  1079. if (data1.length < 7) {
  1080. axisLabel = {
  1081. interval: 0,
  1082. textStyle: {
  1083. color: "#333"
  1084. },
  1085. }
  1086. } else {
  1087. axisLabel.interval = 0;
  1088. }
  1089. var option = {
  1090. legend: {},
  1091. xAxis: {
  1092. type: 'category',
  1093. data: data1,
  1094. axisLabel: axisLabel,
  1095. },
  1096. tooltip: {
  1097. trigger: 'axis',
  1098. axisPointer: {
  1099. type: 'shadow'
  1100. }
  1101. },
  1102. yAxis: {
  1103. type: 'value'
  1104. },
  1105. grid: {
  1106. top: (20 + head),
  1107. left: 0,
  1108. right: 0,
  1109. bottom: 0,
  1110. containLabel: true
  1111. },
  1112. series: series
  1113. };
  1114. myChart.setOption(option);
  1115. this.echartsList[key] = myChart;
  1116. },
  1117. getbody1pie1() {
  1118. var img = require("@/assets/img/index/pie1-1.svg")
  1119. var key = "body1pie1"
  1120. var myChart = this.echartsList[key];
  1121. if (!myChart) {
  1122. myChart = echarts.init(document.getElementById(key), null, {
  1123. width: uni.upx2px(88),
  1124. height: uni.upx2px(88)
  1125. })
  1126. }
  1127. myChart.clear()
  1128. var option = {
  1129. series: [{
  1130. silent: true,
  1131. type: 'pie',
  1132. radius: ['70%', '100%'],
  1133. label: {
  1134. show: false,
  1135. },
  1136. data: [{
  1137. value: this.body1data.data.useNum,
  1138. itemStyle: {
  1139. color: '#AAAAAA'
  1140. }
  1141. },
  1142. {
  1143. value: this.body1data.data.idleNum,
  1144. itemStyle: {
  1145. color: '#53B56B'
  1146. }
  1147. }
  1148. ]
  1149. }],
  1150. grid: {
  1151. top: 0,
  1152. left: 0,
  1153. right: 0,
  1154. bottom: 0,
  1155. containLabel: true
  1156. },
  1157. graphic: [{
  1158. type: 'image',
  1159. id: 'logo',
  1160. left: 'center',
  1161. top: 'center',
  1162. style: {
  1163. image: img, // 图片路径
  1164. width: uni.upx2px(40),
  1165. height: uni.upx2px(40)
  1166. }
  1167. }]
  1168. }
  1169. myChart.setOption(option);
  1170. this.echartsList[key] = myChart;
  1171. },
  1172. getbody1pie2() {
  1173. var img = require("@/assets/img/index/pie1-2.svg")
  1174. var key = "body1pie2"
  1175. var myChart = this.echartsList[key];
  1176. if (!myChart) {
  1177. myChart = echarts.init(document.getElementById(key), null, {
  1178. width: uni.upx2px(88),
  1179. height: uni.upx2px(88)
  1180. })
  1181. }
  1182. myChart.clear()
  1183. var option = {
  1184. series: [{
  1185. silent: true,
  1186. type: 'pie',
  1187. radius: ['70%', '100%'],
  1188. label: {
  1189. show: false,
  1190. },
  1191. data: [{
  1192. value: this.body1data.data.loseNum,
  1193. itemStyle: {
  1194. color: '#AAAAAA'
  1195. }
  1196. },
  1197. {
  1198. value: this.body1data.data.normalNum,
  1199. itemStyle: {
  1200. color: '#53B56B'
  1201. }
  1202. },
  1203. {
  1204. value: this.body1data.data.errorNum,
  1205. itemStyle: {
  1206. color: '#EF8132'
  1207. }
  1208. }
  1209. //, {
  1210. // value: 735,
  1211. // itemStyle: {
  1212. // color: '#DC4441'
  1213. // }
  1214. // }
  1215. ]
  1216. }],
  1217. grid: {
  1218. top: 0,
  1219. left: 0,
  1220. right: 0,
  1221. bottom: 0,
  1222. containLabel: true
  1223. },
  1224. graphic: [{
  1225. type: 'image',
  1226. id: 'logo',
  1227. left: 'center',
  1228. top: 'center',
  1229. style: {
  1230. image: img, // 图片路径
  1231. width: uni.upx2px(40),
  1232. height: uni.upx2px(40)
  1233. }
  1234. }]
  1235. }
  1236. myChart.setOption(option);
  1237. this.echartsList[key] = myChart;
  1238. },
  1239. getbody1pie3() {
  1240. var img = require("@/assets/img/index/pie1-3.svg")
  1241. var key = "body1pie3"
  1242. var myChart = this.echartsList[key];
  1243. if (!myChart) {
  1244. myChart = echarts.init(document.getElementById(key), null, {
  1245. width: uni.upx2px(88),
  1246. height: uni.upx2px(88)
  1247. })
  1248. }
  1249. myChart.clear()
  1250. var option = {
  1251. series: [{
  1252. type: 'pie',
  1253. silent: true, // 禁用交互效果
  1254. radius: ['70%', '100%'],
  1255. label: {
  1256. show: false,
  1257. },
  1258. data: [{
  1259. value: 735,
  1260. itemStyle: {
  1261. color: '#53B56B'
  1262. }
  1263. },
  1264. {
  1265. value: 735,
  1266. itemStyle: {
  1267. color: '#EF8375'
  1268. }
  1269. },
  1270. {
  1271. value: 735,
  1272. itemStyle: {
  1273. color: '#307AF6'
  1274. }
  1275. }
  1276. ]
  1277. }],
  1278. grid: {
  1279. top: 0,
  1280. left: 0,
  1281. right: 0,
  1282. bottom: 0,
  1283. containLabel: true
  1284. },
  1285. graphic: [{
  1286. type: 'image',
  1287. id: 'logo',
  1288. left: 'center',
  1289. top: 'center',
  1290. style: {
  1291. image: img, // 图片路径
  1292. width: uni.upx2px(40),
  1293. height: uni.upx2px(40)
  1294. }
  1295. }]
  1296. }
  1297. myChart.setOption(option);
  1298. this.echartsList[key] = myChart;
  1299. },
  1300. getfindByOpenId() {
  1301. uni.showLoading({
  1302. title: "加载中",
  1303. mask: true,
  1304. })
  1305. API.findByOpenId({
  1306. openId: this.jphelp.getOpenId(),
  1307. }).then((response) => {
  1308. uni.hideLoading();
  1309. this.isReady = true;
  1310. this.loginset(response)
  1311. try {
  1312. this.init()
  1313. } catch (e) {
  1314. uni.showToast({
  1315. title: e,
  1316. icon: "none"
  1317. })
  1318. }
  1319. }).catch(error => {
  1320. uni.showToast({
  1321. title: error,
  1322. icon: "none"
  1323. })
  1324. uni.redirectTo({
  1325. url: '/pages/login/login'
  1326. })
  1327. })
  1328. }
  1329. }
  1330. }
  1331. </script>
  1332. <style scoped lang="scss">
  1333. .color307AF6 {
  1334. color: #307AF6
  1335. }
  1336. .color53B56B {
  1337. color: #53B56B
  1338. }
  1339. .colorAAAAAA {
  1340. color: #AAAAAA
  1341. }
  1342. .colorEF8132 {
  1343. color: #EF8132
  1344. }
  1345. .colorDC4441 {
  1346. color: #DC4441
  1347. }
  1348. .colorEF8375 {
  1349. color: #EF8375
  1350. }
  1351. .body1pie-table {
  1352. color: rgba(51, 51, 51, 1);
  1353. font-size: 32rpx;
  1354. font-weight: bold;
  1355. .tr {
  1356. .td1 {
  1357. padding-right: 24rpx;
  1358. }
  1359. display: flex;
  1360. margin-bottom: 40rpx;
  1361. .td2 {
  1362. width: 100%;
  1363. .td3 {
  1364. display: flex;
  1365. .td4 {
  1366. width: 120px;
  1367. }
  1368. }
  1369. }
  1370. }
  1371. // td{
  1372. // padding-right: 24rpx;
  1373. // }
  1374. .body1pie {}
  1375. .body1pie-num {
  1376. margin: 0 8rpx;
  1377. }
  1378. }
  1379. // 导航栏
  1380. .navbar {
  1381. box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.15);
  1382. background-color: rgba(22, 119, 255, 1);
  1383. color: #fff;
  1384. line-height: 88rpx;
  1385. display: flex;
  1386. justify-content: space-between;
  1387. align-items: center;
  1388. padding: 0 32rpx;
  1389. color: rgba(255, 255, 255, 1);
  1390. font-size: 36rpx;
  1391. position: fixed;
  1392. left: 0;
  1393. right: 0;
  1394. top: 0;
  1395. z-index: 999999;
  1396. font-weight: bold;
  1397. }
  1398. .main {
  1399. border-radius: 16px 16px 0px 0px;
  1400. background: linear-gradient(180deg, rgba(242, 244, 246, 1) 61%, rgba(255, 255, 255, 0) 100%);
  1401. margin-top: -24rpx;
  1402. padding: 32rpx;
  1403. .statistics {
  1404. border-radius: 8px;
  1405. background-color: rgba(255, 255, 255, 1);
  1406. box-shadow: 0px 1px 6px 0px rgba(0, 59, 142, 0.05);
  1407. margin-bottom: 24rpx;
  1408. padding: 40rpx;
  1409. .title {
  1410. display: flex;
  1411. align-items: center;
  1412. margin-bottom: 32rpx;
  1413. font-weight: bold;
  1414. .img {
  1415. width: 36rpx;
  1416. height: 36rpx;
  1417. vertical-align: middle;
  1418. border-radius: 999px;
  1419. }
  1420. .change {
  1421. display: flex;
  1422. align-items: center;
  1423. .change-img {
  1424. width: 32rpx;
  1425. height: 32rpx;
  1426. vertical-align: middle;
  1427. }
  1428. text {
  1429. margin-left: 8rpx;
  1430. }
  1431. }
  1432. .text {
  1433. color: rgba(16, 16, 16, 1);
  1434. font-size: 36rpx;
  1435. margin-left: 16rpx;
  1436. display: flex;
  1437. justify-content: space-between;
  1438. align-items: center;
  1439. width: 100%;
  1440. .tag {
  1441. border-radius: 4px;
  1442. border: 1px solid rgba(187, 187, 187, 1);
  1443. color: rgba(51, 51, 51, 1);
  1444. font-size: 24rpx;
  1445. padding: 1px 8rpx;
  1446. margin-left: 8rpx;
  1447. }
  1448. }
  1449. .change {
  1450. margin-left: 16rpx;
  1451. font-size: 24rpx;
  1452. color: #838383;
  1453. }
  1454. .check-all {
  1455. margin-left: auto;
  1456. color: rgba(131, 131, 131, 1);
  1457. font-size: 24rpx;
  1458. }
  1459. }
  1460. }
  1461. .statistics-end {
  1462. padding-bottom: 0;
  1463. }
  1464. }
  1465. .tabs-box2 {
  1466. margin-bottom: 8rpx;
  1467. padding-right: 16rpx;
  1468. display: flex;
  1469. align-items: center;
  1470. justify-content: space-between;
  1471. .tabs-box-other {
  1472. padding-bottom: 12rpx;
  1473. }
  1474. }
  1475. .tabs-box {
  1476. padding: 42rpx 0;
  1477. margin-top: 66rpx;
  1478. padding-right: 32rpx;
  1479. background-color: rgba(22, 119, 255, 1);
  1480. display: flex;
  1481. align-items: center;
  1482. justify-content: space-between;
  1483. .tabs {
  1484. width: 97%;
  1485. }
  1486. .more {
  1487. padding-right: 12rpx;
  1488. }
  1489. .tabs-box-other {
  1490. padding-bottom: 12rpx;
  1491. height: 80rpx;
  1492. line-height: 70rpx;
  1493. font-size: 30rpx;
  1494. color: rgb(255, 255, 255);
  1495. }
  1496. }
  1497. .body6main {
  1498. .line {
  1499. display: flex;
  1500. justify-content: space-between;
  1501. }
  1502. .abnormal-item:last-of-type {
  1503. border-bottom: none !important;
  1504. padding-bottom: 0;
  1505. }
  1506. .abnormal-item {
  1507. width: 100%;
  1508. display: flex;
  1509. justify-content: space-between;
  1510. align-items: center;
  1511. padding: 16rpx;
  1512. border-bottom: 1px solid rgba(245, 245, 245, 1);
  1513. .item-title {
  1514. .level {
  1515. color: #fff;
  1516. border-radius: 8rpx;
  1517. font-weight: 400;
  1518. padding: 4rpx 8rpx;
  1519. font-size: 22rpx;
  1520. margin-right: 2px;
  1521. }
  1522. .level1 {
  1523. background: red;
  1524. }
  1525. .level2 {
  1526. background-color: rgba(255, 123, 0, 1);
  1527. }
  1528. color: rgba(51, 51, 51, 1);
  1529. width: 100%;
  1530. .img {
  1531. width: 32rpx;
  1532. height: 32rpx;
  1533. margin-right: 8rpx;
  1534. }
  1535. .name {
  1536. color: rgba(51, 51, 51, 1);
  1537. font-weight: bold;
  1538. overflow: hidden;
  1539. white-space: nowrap;
  1540. text-overflow: ellipsis;
  1541. }
  1542. .date {
  1543. color: rgba(119, 119, 119, 1);
  1544. font-size: 24rpx;
  1545. }
  1546. }
  1547. .item-value {
  1548. text-align: right;
  1549. display: flex;
  1550. align-items: center;
  1551. .more {
  1552. margin-left: 8rpx;
  1553. }
  1554. .value1 {
  1555. font-weight: bold;
  1556. color: rgba(51, 51, 51, 1);
  1557. }
  1558. .value2 {
  1559. color: rgba(119, 119, 119, 1);
  1560. font-size: 24rpx;
  1561. }
  1562. }
  1563. }
  1564. }
  1565. .body7main {
  1566. border-radius: 4px;
  1567. background-color: rgba(245, 245, 245, 1);
  1568. padding: 32rpx;
  1569. .line {
  1570. display: flex;
  1571. display: flex;
  1572. justify-content: space-between;
  1573. margin-bottom: 24rpx;
  1574. .item-title {
  1575. color: rgba(51, 51, 51, 1);
  1576. font-size: 28rpx;
  1577. }
  1578. .item-tags {
  1579. display: flex;
  1580. .tag {
  1581. border-radius: 4px;
  1582. background-color: rgba(39, 177, 72, 1);
  1583. color: rgba(255, 255, 255, 1);
  1584. font-size: 20rpx;
  1585. padding: 2rpx 8rpx;
  1586. margin-right: 8rpx;
  1587. }
  1588. .tag1 {
  1589. background-color: rgba(22, 119, 255, 1);
  1590. }
  1591. .tag2 {
  1592. background-color: rgba(129, 97, 255, 1);
  1593. }
  1594. .statusN1 {}
  1595. .statusN0 {
  1596. background-color: rgba(153, 153, 153, 1);
  1597. }
  1598. .lockStatus{
  1599. background-color: rgba(153, 153, 153, 1);
  1600. }
  1601. .lockStatus2 {
  1602. background-color: #03A9F4
  1603. }
  1604. }
  1605. }
  1606. }
  1607. </style>