codeBillDialog.vue 40 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510
  1. <template>
  2. <div class="main-data code-bill-dialog" @click.stop="preventDefault" @mouseleave="leaveFun">
  3. <div class="dialog-title">
  4. <img
  5. src="@/assets/images/main/cont_title_bg.png"
  6. />
  7. <div class="title">后勤资产</div>
  8. </div>
  9. <div class="dialog-cont">
  10. <div class="dialog-left">
  11. <div class="dialog-list">
  12. <div class="dialog-item wid100">
  13. <div class="content-title">
  14. <span class="title">资产台账</span>
  15. </div>
  16. <div class="content">
  17. <div class="leftNav">
  18. <div
  19. :class="['model', 0 == curIndex ? 'cur' : '']"
  20. @click="chooseTab(0, 'main')"
  21. >
  22. 楼宇各类资产占比
  23. </div>
  24. <div
  25. :class="['model', 1 == curIndex ? 'cur' : '']"
  26. @click="chooseTab(1, 'service')"
  27. >
  28. 服务各类资产占比
  29. </div>
  30. <div
  31. :class="['model', 2 == curIndex ? 'cur' : '']"
  32. @click="chooseTab(2, 'logistics')"
  33. >
  34. 办公各类资产占比
  35. </div>
  36. </div>
  37. <div class="device-item1" v-if="showTab === 'main'">
  38. <pie-chart
  39. :chart-data="lyData"
  40. :legend="lyLegend"
  41. :center="['30%','60%']"
  42. :title="lyTitle"
  43. width="400px"
  44. height="180px"
  45. />
  46. </div>
  47. <div class="device-item1" v-else-if="showTab === 'service'">
  48. <pie-chart
  49. :chart-data="fwData"
  50. :legend="fwLegend"
  51. :center="['30%','60%']"
  52. :title="fwTitle"
  53. width="400px"
  54. height="180px"
  55. />
  56. </div>
  57. <div class="device-item1" v-else-if="showTab === 'logistics'">
  58. <pie-chart
  59. :chart-data="bgData"
  60. :legend="bgLegend"
  61. :center="['30%','60%']"
  62. :title="bgTitle"
  63. width="400px"
  64. height="180px"
  65. />
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. <div class="content">
  71. <div class="total-cont">
  72. <span class="title">资产存量
  73. <span class="smallTitle">截止至{{timeString}}</span>
  74. </span>
  75. </div>
  76. <div class="rightList1">
  77. <div class="left-list">
  78. <div class="left-info">
  79. <div class="name">
  80. <div> <img src="@/assets/images/service_new/liveSwin.png"></div>
  81. <div>楼宇设备</div>
  82. </div>
  83. <div class="num">{{ stockList.stockBuildingAssetNum}}<span class="unit">件</span></div>
  84. </div>
  85. </div>
  86. <div class="left-list">
  87. <div class="left-info">
  88. <div class="name">
  89. <div> <img src="@/assets/images/service_new/liveSwin.png"></div>
  90. <div>服务设备</div>
  91. </div>
  92. <div class="num">{{ stockList.stockServiceAssetNum }}<span class="unit">件</span></div>
  93. </div>
  94. </div>
  95. <div class="left-list">
  96. <div class="left-info">
  97. <div class="name">
  98. <div> <img src="@/assets/images/service_new/liveSwin.png"></div>
  99. <div>办公设备</div>
  100. </div>
  101. <div class="num">{{ stockList.stockOfficeAssetNum }}<span class="unit">件</span></div>
  102. </div>
  103. </div>
  104. </div>
  105. </div>
  106. <div class="content">
  107. <div class="total-cont">
  108. <span class="title">{{timeMonth}}年度资产新增数量</span>
  109. </div>
  110. <div class="rightList1">
  111. <div class="left-list">
  112. <div class="left-info">
  113. <div class="name">
  114. <div> <img src="@/assets/images/service_new/liveSwin.png"></div>
  115. <div>楼宇设备</div>
  116. </div>
  117. <div class="num">{{scrapList.scrapBuildingAssetNum }}<span class="unit">件</span></div>
  118. </div>
  119. </div>
  120. <div class="left-list">
  121. <div class="left-info">
  122. <div class="name">
  123. <div> <img src="@/assets/images/service_new/liveSwin.png"></div>
  124. <div>服务设备</div>
  125. </div>
  126. <div class="num">{{scrapList.scrapServiceAssetNum }}<span class="unit">件</span></div>
  127. </div>
  128. </div>
  129. <div class="left-list">
  130. <div class="left-info">
  131. <div class="name">
  132. <div> <img src="@/assets/images/service_new/liveSwin.png"></div>
  133. <div>办公设备</div>
  134. </div>
  135. <div class="num">{{scrapList.scrapOfficeAssetNum}}<span class="unit">件</span></div>
  136. </div>
  137. </div>
  138. </div>
  139. </div>
  140. <div class="content">
  141. <div class="total-cont">
  142. <span class="title">资产报废数量
  143. <span class="smallTitle">截止至{{timeString}}</span>
  144. </span>
  145. </div>
  146. <div class="rightList1">
  147. <div class="left-list">
  148. <div class="left-info">
  149. <div class="name">
  150. <div> <img src="@/assets/images/service_new/liveSwin.png"></div>
  151. <div>楼宇设备</div>
  152. </div>
  153. <div class="num">{{ dumpList.newBuildingAssetNum }}<span class="unit">件</span></div>
  154. </div>
  155. </div>
  156. <div class="left-list">
  157. <div class="left-info">
  158. <div class="name">
  159. <div> <img src="@/assets/images/service_new/liveSwin.png"></div>
  160. <div>服务设备</div>
  161. </div>
  162. <div class="num">{{dumpList.newServiceAssetNum }}<span class="unit">件</span></div>
  163. </div>
  164. </div>
  165. <div class="left-list">
  166. <div class="left-info">
  167. <div class="name">
  168. <div> <img src="@/assets/images/service_new/liveSwin.png"></div>
  169. <div>办公设备</div>
  170. </div>
  171. <div class="num">{{dumpList.newOfficeAssetNum }}<span class="unit">件</span></div>
  172. </div>
  173. </div>
  174. </div>
  175. </div>
  176. <div class="dialog-list">
  177. <div class="dialog-item wid100">
  178. <div class="content-title">
  179. <span class="title">赋码贴签</span>
  180. </div>
  181. <div class="content">
  182. <div class="device-cont">
  183. <div class="device-info">
  184. <div class="device-item1">
  185. <img src="@/assets/images/logistics_guarantee/boxhigh.png" class="icon" alt="" />
  186. <div class="rate">
  187. <div class="rate-data">
  188. <div class="data">{{ codedAndLabelRateList.codedRate }}</div>
  189. <div class="unit">%</div>
  190. </div>
  191. <div class="desc">赋码率</div>
  192. </div>
  193. </div>
  194. <div class="device-item1">
  195. <img src="@/assets/images/logistics_guarantee/boxhigh.png" class="icon" alt="" />
  196. <div class="rate">
  197. <div class="rate-data">
  198. <div class="data">{{ codedAndLabelRateList.labelRate }}</div>
  199. <div class="unit">%</div>
  200. </div>
  201. <div class="desc">贴签率</div>
  202. </div>
  203. </div>
  204. <div class="device-item1">
  205. <pie-chart
  206. position="left"
  207. :chart-data="pieData"
  208. :legend="pieLegend"
  209. :title="pieTitle"
  210. :center="['35%','40%']"
  211. width="220px"
  212. height="180px"
  213. />
  214. </div>
  215. </div>
  216. </div>
  217. </div>
  218. </div>
  219. </div>
  220. <div class="content">
  221. <div class="total-cont">
  222. <span class="title">楼宇设备运行情况</span>
  223. </div>
  224. <div class="rightList">
  225. <div class="left-list">
  226. <img src="@/assets/images/service_new/grow.png">
  227. <div class="left-info">
  228. <div class="name">巡检异常数量</div>
  229. <div class="num">{{ operationList.inspectionAnomalyRecordNum }}<span class="unit">个</span></div>
  230. </div>
  231. </div>
  232. <div class="left-list">
  233. <img src="@/assets/images/service_new/grow.png">
  234. <div class="left-info">
  235. <div class="name">检修记录数量</div>
  236. <div class="num">{{operationList.repairRecordNum}}<span class="unit">条</span></div>
  237. </div>
  238. </div>
  239. <div class="left-list">
  240. <img src="@/assets/images/service_new/grow.png">
  241. <div class="left-info">
  242. <div class="name">维保记录数量</div>
  243. <div class="num">{{operationList.maintenanceRecordNum }}<span class="unit">条</span></div>
  244. </div>
  245. </div>
  246. <div class="left-list">
  247. <img src="@/assets/images/service_new/setting.png">
  248. <div class="left-info">
  249. <div class="name">重点设备巡检覆盖率</div>
  250. <div class="num">{{ operationList.importantDeviceTypeInspectionExecuteRate }}<span class="unit">%</span></div>
  251. </div>
  252. </div>
  253. </div>
  254. </div>
  255. </div>
  256. <div class="dialog-right">
  257. <div class="dialog-list">
  258. <div class="dialog-item wid100">
  259. <div class="content-title">
  260. <span class="title">系统应用</span>
  261. </div>
  262. <div class="content">
  263. <div class="total-cont">
  264. <span class="title">典型场景应用率</span>
  265. <div class="leftNav">
  266. <div
  267. :class="['model1', 0 == curBodex ? 'cur' : '']"
  268. @click="chooseBox(0, 'province')"
  269. >
  270. 地市
  271. </div>
  272. <div
  273. :class="['model1', 1 == curBodex ? 'cur' : '']"
  274. @click="chooseBox(1, 'region')"
  275. >
  276. 直属单位
  277. </div>
  278. </div>
  279. </div>
  280. <div class="charts-cont" v-if="showBox === 'province'">
  281. <bar-chart
  282. :chart-data="nowBuildingAreaBarData"
  283. :x-axis="nowBuildingAreaBarAxis"
  284. :yAxis="nowBuildingAreaBarYaxis"
  285. y-color="#FFF"
  286. l-color="#FFF"
  287. width="500px"
  288. height="360px"
  289. />
  290. </div>
  291. <div class="charts-cont" v-else-if="showBox === 'region'">
  292. <bar-chart
  293. :chart-data="regBuildingAreaBarData"
  294. :x-axis="regBuildingAreaBarAxis"
  295. :yAxis="regBuildingAreaBarYaxis"
  296. y-color="#FFF"
  297. l-color="#FFF"
  298. width="500px"
  299. height="360px"
  300. />
  301. </div>
  302. </div>
  303. <div class="content">
  304. <div class="total-cont">
  305. <span class="title">地市巡检执行数量</span>
  306. </div>
  307. <div class="charts-cont">
  308. <bar-chart
  309. :chart-data="addBuildingAreaBarData"
  310. :x-axis="addBuildingAreaBarAxis"
  311. :yAxis="addBuildingAreaBarYaxis"
  312. y-color="#FFF"
  313. l-color="#FFF"
  314. width="500px"
  315. height="160px"
  316. />
  317. </div>
  318. </div>
  319. <div class="content">
  320. <div class="total-cont">
  321. <span class="title">直属单位巡检执行数量</span>
  322. </div>
  323. <div class="charts-cont">
  324. <bar-chart
  325. :chart-data="jueBuildingAreaBarData"
  326. :x-axis="jueBuildingAreaBarAxis"
  327. :yAxis="jueBuildingAreaBarYaxis"
  328. y-color="#FFF"
  329. l-color="#FFF"
  330. width="500px"
  331. height="360px"
  332. />
  333. </div>
  334. </div>
  335. </div>
  336. </div>
  337. </div>
  338. </div>
  339. </div>
  340. </template>
  341. <script>
  342. import LineChart from "@/components/Echarts/LineChart";
  343. import PieChart from "@/components/Echarts/PieChart";
  344. import BarChart from "@/components/Echarts/BarChart.vue";
  345. import echarts from "echarts";
  346. import {
  347. building,service,office,stock,scrap,dump,codedAndLabelRate,mainlyRate,sceneRate,sceneRateUnit,operation,inspectionSchemeNumX,inspectionSchemeNumY
  348. } from "@/api/screen/service";
  349. export default {
  350. name: "CodeBillDialog",
  351. components: {
  352. BarChart,
  353. PieChart,
  354. LineChart,
  355. },
  356. props: {
  357. appOrg: {
  358. type: String,
  359. default: "0000",
  360. },
  361. },
  362. data() {
  363. return {
  364. curIndex: 0,
  365. curBodex:0,
  366. currentTime: new Date(),
  367. showTab: "main",
  368. showBox: "province",
  369. // 资产存量
  370. stockList:{},
  371. scrapList:{},
  372. dumpList:{},
  373. codedAndLabelRateList:{},
  374. operationList:{},
  375. tabs: [
  376. {
  377. name: "楼宇资产占比",
  378. tab: "main",
  379. },
  380. {
  381. name: "服务资产占比",
  382. tab: "service",
  383. },
  384. {
  385. name: "办公资产占比",
  386. tab: "logistics",
  387. },
  388. ],
  389. Boxtabs: [
  390. {
  391. name: "地市",
  392. tab: "province",
  393. },
  394. {
  395. name: "直属单位",
  396. tab: "region",
  397. },
  398. ],
  399. pieData: [],
  400. pieLegend: {
  401. top: 30,
  402. orient: "vertical",
  403. right: 0,
  404. itemWidth: 8, // 设置图例标记的宽度
  405. itemHeight: 8, // 设置图例标记的高度
  406. textStyle: {
  407. color: "#FFF",
  408. },
  409. },
  410. pieTitle: {
  411. text: "{title|三大类}\n{subtitle|资产占比}",
  412. left: "20%",//对齐方式居中
  413. top: "28%",//距离顶部
  414. textStyle: {
  415. rich: {
  416. title: {
  417. color: '#ffffff',
  418. fontSize: 14,
  419. fontWeight: 'normal',
  420. align: 'center',
  421. },
  422. subtitle: {
  423. fontSize: 14,
  424. color: '#ffffff',
  425. fontWeight: 'normal',
  426. lineHeight: 30,
  427. align: 'center',
  428. },
  429. }
  430. }
  431. },
  432. pieCenter: ["50%", "40%"],
  433. //楼宇资产占比
  434. lyData: [],
  435. lyLegend: {
  436. top: 25,
  437. orient: "vertical",
  438. left: 250,
  439. itemWidth: 8, // 设置图例标记的宽度
  440. itemHeight: 8, // 设置图例标记的高度
  441. textStyle: {
  442. color: "#FFF",
  443. },
  444. },
  445. lyTitle: {},
  446. fwTitle: {},
  447. bgTitle: {},
  448. //服务资产占比
  449. fwData: [],
  450. fwLegend: {
  451. top: 65,
  452. orient: "vertical",
  453. left: 250,
  454. itemWidth: 8, // 设置图例标记的宽度
  455. itemHeight: 8, // 设置图例标记的高度
  456. textStyle: {
  457. color: "#FFF",
  458. },
  459. },
  460. //办公资产占比
  461. bgData: [],
  462. bgLegend: {
  463. top: 55,
  464. orient: "vertical",
  465. left: 250,
  466. itemWidth: 8, // 设置图例标记的宽度
  467. itemHeight: 8, // 设置图例标记的高度
  468. textStyle: {
  469. color: "#FFF",
  470. },
  471. },
  472. //地市
  473. nowBuildingAreaBarData: [],
  474. nowBuildingAreaBarAxis: {},
  475. nowBuildingAreaBarYaxis: {
  476. type: "value",
  477. boundaryGap: [0, 0.01],
  478. name: '应用率(%)',
  479. nameTextStyle: {
  480. color: '#fff',
  481. padding: [0,0,0,30]
  482. },
  483. axisLine:{
  484. lineStyle:{
  485. color:"#465A64"
  486. }
  487. },
  488. axisLabel: {
  489. color: "white", // 设置横坐标轴字体颜色为红色
  490. },
  491. splitLine: {
  492. show: false,
  493. },
  494. axisTick: {
  495. show: false,
  496. },
  497. splitArea:false
  498. },
  499. //直属单位
  500. regBuildingAreaBarData: [],
  501. regBuildingAreaBarAxis: {},
  502. regBuildingAreaBarYaxis: {
  503. type: "value",
  504. boundaryGap: [0, 0.01],
  505. name: '应用率(%)',
  506. nameTextStyle: {
  507. color: '#fff',
  508. padding: [0,0,0,30]
  509. },
  510. axisLine:{
  511. lineStyle:{
  512. color:"#465A64"
  513. }
  514. },
  515. axisLabel: {
  516. color: "white", // 设置横坐标轴字体颜色为红色
  517. },
  518. splitLine: {
  519. show: false,
  520. },
  521. axisTick: {
  522. show: false,
  523. },
  524. splitArea:false
  525. },
  526. //地市巡检执行数量
  527. addBuildingAreaBarData: [],
  528. addBuildingAreaBarAxis: {},
  529. addBuildingAreaBarYaxis: {
  530. type: "value",
  531. boundaryGap: [0, 0.01],
  532. name: '',
  533. nameTextStyle: {
  534. color: '#fff',
  535. padding: [0,0,0,30]
  536. },
  537. axisLine:{
  538. lineStyle:{
  539. color:"#465A64"
  540. }
  541. },
  542. axisLabel: {
  543. color: "white", // 设置横坐标轴字体颜色为红色
  544. },
  545. splitLine: {
  546. show: false,
  547. },
  548. axisTick: {
  549. show: false,
  550. },
  551. splitArea:false
  552. },
  553. //直属单位巡检执行数量
  554. jueBuildingAreaBarData: [],
  555. jueBuildingAreaBarAxis: {},
  556. jueBuildingAreaBarYaxis: {
  557. type: "value",
  558. boundaryGap: [0, 0.01],
  559. name: '',
  560. nameTextStyle: {
  561. color: '#fff',
  562. padding: [0,0,0,30]
  563. },
  564. axisLine:{
  565. lineStyle:{
  566. color:"#465A64"
  567. }
  568. },
  569. axisLabel: {
  570. color: "white", // 设置横坐标轴字体颜色为红色
  571. },
  572. splitLine: {
  573. show: false,
  574. },
  575. axisTick: {
  576. show: false,
  577. },
  578. splitArea:false
  579. },
  580. };
  581. },
  582. computed: {
  583. timeString() {
  584. const year = this.currentTime.getFullYear();
  585. const month = String(this.currentTime.getMonth() + 1);
  586. const day = String(this.currentTime.getDate());
  587. return `${year}年${month}月${day}日`;
  588. },
  589. timeMonth(){
  590. const year = this.currentTime.getFullYear();
  591. return `${year}`;
  592. }
  593. },
  594. created() {
  595. //楼宇各类资产占比
  596. this.building()
  597. // 服务各类资产占比
  598. this.service()
  599. //办公各类资产占比
  600. this.office()
  601. // 资产存量
  602. this.stock()
  603. //2025年度资产新增数量
  604. this.scrap()
  605. //资产报废数量
  606. this.dump()
  607. //赋码率 -贴签率
  608. this.codedAndLabelRate()
  609. // 三大类资产占比
  610. this.mainlyRate()
  611. //典型场景应用率-地市
  612. this.sceneRate()
  613. //典型场景应用率-直属单位
  614. this.sceneRateUnit()
  615. // 楼宇设备运行情况
  616. this.operation()
  617. //地市巡检执行数量
  618. this.inspectionSchemeNumX()
  619. //直属单位巡检执行数量
  620. this.inspectionSchemeNumY()
  621. },
  622. destroyed() {},
  623. beforeDestroy() {},
  624. mounted() {},
  625. methods: {
  626. // 楼宇各类资产占比
  627. building(){
  628. building(this.$props.appOrg).then((res) => {
  629. if (Number(res.code) === 200) {
  630. const colorList = ['#FEB948','#2F82FE','#01F6EC','#7465EF','#242CC4','#2FFEA0','#E16B21'];
  631. const buildingAssetList = res.data.buildingAssetList;
  632. this.lyData = buildingAssetList.map((item, index) => {
  633. return {
  634. value: item.assetNum, // 数据值
  635. name: item.categoryName, // 数据名称
  636. itemStyle: {
  637. color: colorList[index % colorList.length] // 循环使用颜色列表
  638. }
  639. };
  640. });
  641. this.lyTitle= {
  642. text: `{title|资产数量}\n{subtitle|${res.data.buildingAssetNum}}`,
  643. left: "22%",//对齐方式居中
  644. top: "48%",//距离顶部
  645. textStyle: {
  646. rich: {
  647. title: {
  648. color: '#ffffff',
  649. fontSize: 14,
  650. fontWeight: 'normal',
  651. align: 'center',
  652. },
  653. subtitle: {
  654. fontSize: 16,
  655. color: '#00FFFF',
  656. fontFamily: 'electronicFont',
  657. lineHeight: 30,
  658. align: 'center',
  659. },
  660. }
  661. }
  662. }
  663. }
  664. });
  665. },
  666. // 服务各类资产占比
  667. service(){
  668. service(this.$props.appOrg).then((res) => {
  669. if (Number(res.code) === 200) {
  670. const colorList = ['#FEB948','#2F82FE','#01F6EC','#7465EF','#242CC4','#2FFEA0','#E16B21'];
  671. const buildingAssetList = res.data.serviceAssetList;
  672. this.fwData = buildingAssetList.map((item, index) => {
  673. return {
  674. value: item.assetNum, // 数据值
  675. name: item.categoryName, // 数据名称
  676. itemStyle: {
  677. color: colorList[index % colorList.length] // 循环使用颜色列表
  678. }
  679. };
  680. });
  681. this.fwTitle= {
  682. text: `{title|资产数量}\n{subtitle|${res.data.serviceAssetNum}}`,
  683. left: "22%",//对齐方式居中
  684. top: "48%",//距离顶部
  685. textStyle: {
  686. rich: {
  687. title: {
  688. color: '#ffffff',
  689. fontSize: 14,
  690. fontWeight: 'normal',
  691. align: 'center',
  692. },
  693. subtitle: {
  694. fontSize: 16,
  695. color: '#00FFFF',
  696. fontFamily: 'electronicFont',
  697. lineHeight: 30,
  698. align: 'center',
  699. },
  700. }
  701. }
  702. }
  703. }
  704. });
  705. },
  706. //办公各类资产占比
  707. office(){
  708. office(this.$props.appOrg).then((res) => {
  709. if (Number(res.code) === 200) {
  710. const colorList = ['#FEB948','#2F82FE','#01F6EC','#7465EF','#242CC4','#2FFEA0','#E16B21'];
  711. const buildingAssetList = res.data.officeAssetList;
  712. this.bgData = buildingAssetList.map((item, index) => {
  713. return {
  714. value: item.assetNum, // 数据值
  715. name: item.categoryName, // 数据名称
  716. itemStyle: {
  717. color: colorList[index % colorList.length] // 循环使用颜色列表
  718. }
  719. };
  720. });
  721. this.bgTitle= {
  722. text: `{title|资产数量}\n{subtitle|${res.data.officeAssetNum}}`,
  723. left: "22%",//对齐方式居中
  724. top: "48%",//距离顶部
  725. textStyle: {
  726. rich: {
  727. title: {
  728. color: '#ffffff',
  729. fontSize: 14,
  730. fontWeight: 'normal',
  731. align: 'center',
  732. },
  733. subtitle: {
  734. fontSize: 16,
  735. color: '#00FFFF',
  736. fontFamily: 'electronicFont',
  737. lineHeight: 30,
  738. align: 'center',
  739. },
  740. }
  741. }
  742. }
  743. }
  744. });
  745. },
  746. //资产存量
  747. stock() {
  748. stock(this.$props.appOrg).then((res) => {
  749. if (Number(res.code) === 200) {
  750. this.stockList=res.data;
  751. }
  752. });
  753. },
  754. //资产新增数量
  755. scrap() {
  756. scrap(this.$props.appOrg).then((res) => {
  757. if (Number(res.code) === 200) {
  758. this.scrapList=res.data;
  759. }
  760. });
  761. },
  762. //资产报废数量
  763. dump() {
  764. dump(this.$props.appOrg).then((res) => {
  765. if (Number(res.code) === 200) {
  766. this.dumpList=res.data;
  767. }
  768. });
  769. },
  770. //赋码率 -贴签率
  771. codedAndLabelRate() {
  772. codedAndLabelRate(this.$props.appOrg).then((res) => {
  773. if (Number(res.code) === 200) {
  774. this.codedAndLabelRateList=res.data;
  775. }
  776. });
  777. },
  778. // 三大类资产占比
  779. mainlyRate() {
  780. mainlyRate(this.$props.appOrg).then((res) => {
  781. if (Number(res.code) === 200) {
  782. this.pieData= [
  783. { value: res.data.buildingAssetNum, name: "楼宇资产", itemStyle: {color:'#FEB948'} },
  784. { value: res.data.officeAssetNum, name: "办公资产" , itemStyle: {color:'#2F82FE'}},
  785. { value: res.data.serviceAssetNum, name: "服务资产" , itemStyle: {color:'#01F6EC'}},
  786. ]
  787. }
  788. });
  789. },
  790. //典型场景应用率-地市
  791. sceneRate() {
  792. sceneRate(this.$props.appOrg).then((res) => {
  793. if (Number(res.code) === 200) {
  794. this.nowBuildingAreaBarAxis = {
  795. type: "category",
  796. data: res.data.xList,
  797. axisLabel: {
  798. color: "white", // 设置横坐标轴字体颜色为红色
  799. rotate: 0,
  800. interval: 0
  801. },
  802. axisLine: {
  803. show: true
  804. },
  805. axisTick: {
  806. show: false,
  807. },
  808. splitArea: false
  809. };
  810. this.nowBuildingAreaBarData = [
  811. {
  812. data: res.data.yList,
  813. type: "bar",
  814. barWidth: 15,
  815. itemStyle: {
  816. color: {
  817. type: 'linear',
  818. x: 0, //右
  819. y: 0, //下
  820. x2: 0, //左
  821. y2: 1, //上
  822. colorStops: [
  823. {
  824. offset: 0,
  825. color: '#FCE0BB' // 0% 处的颜色
  826. },
  827. {
  828. offset: 1,
  829. color: '#D47F1C' // 100% 处的颜色
  830. }
  831. ]
  832. }
  833. },
  834. },
  835. ];
  836. }
  837. });
  838. },
  839. //典型场景应用率-直属单位
  840. sceneRateUnit() {
  841. sceneRateUnit(this.$props.appOrg).then((res) => {
  842. if (Number(res.code) === 200) {
  843. this.regBuildingAreaBarAxis = {
  844. type: "category",
  845. data: res.data.xList,
  846. axisLabel: {
  847. color: "white", // 设置横坐标轴字体颜色为红色
  848. rotate: 75,
  849. interval: 0
  850. },
  851. axisLine: {
  852. show: true
  853. },
  854. axisTick: {
  855. show: false,
  856. },
  857. splitArea: false
  858. };
  859. this.regBuildingAreaBarData = [
  860. {
  861. data: res.data.yList,
  862. type: "bar",
  863. barWidth: 15,
  864. itemStyle: {
  865. color: {
  866. type: 'linear',
  867. x: 0, //右
  868. y: 0, //下
  869. x2: 0, //左
  870. y2: 1, //上
  871. colorStops: [
  872. {
  873. offset: 0,
  874. color: '#FCE0BB' // 0% 处的颜色
  875. },
  876. {
  877. offset: 1,
  878. color: '#D47F1C' // 100% 处的颜色
  879. }
  880. ]
  881. }
  882. },
  883. },
  884. ];
  885. }
  886. });
  887. },
  888. //楼宇设备运行情况
  889. operation() {
  890. operation(this.$props.appOrg).then((res) => {
  891. if (Number(res.code) === 200) {
  892. this.operationList=res.data;
  893. }
  894. });
  895. },
  896. //地市巡检执行数量
  897. inspectionSchemeNumX() {
  898. inspectionSchemeNumX(this.$props.appOrg).then((res) => {
  899. if (Number(res.code) === 200) {
  900. this.addBuildingAreaBarAxis = {
  901. type: "category",
  902. data: res.data.xList,
  903. axisLabel: {
  904. color: "white", // 设置横坐标轴字体颜色为红色
  905. rotate: 0,
  906. interval: 0
  907. },
  908. axisLine: {
  909. show: true
  910. },
  911. axisTick: {
  912. show: false,
  913. },
  914. splitArea: false
  915. };
  916. this.addBuildingAreaBarData = [
  917. {
  918. data: res.data.yList,
  919. type: "bar",
  920. barWidth: 15,
  921. itemStyle: {
  922. color: {
  923. type: 'linear',
  924. x: 0, //右
  925. y: 0, //下
  926. x2: 0, //左
  927. y2: 1, //上
  928. colorStops: [
  929. {
  930. offset: 0,
  931. color: '#FCE0BB' // 0% 处的颜色
  932. },
  933. {
  934. offset: 1,
  935. color: '#D47F1C' // 100% 处的颜色
  936. }
  937. ]
  938. }
  939. },
  940. },
  941. ];
  942. }
  943. });
  944. },
  945. //直属单位巡检执行数量
  946. inspectionSchemeNumY() {
  947. inspectionSchemeNumY(this.$props.appOrg).then((res) => {
  948. if (Number(res.code) === 200) {
  949. this.jueBuildingAreaBarAxis = {
  950. type: "category",
  951. data: res.data.xList,
  952. axisLabel: {
  953. color: "white", // 设置横坐标轴字体颜色为红色
  954. rotate: 75,
  955. interval: 0
  956. },
  957. axisLine: {
  958. show: true
  959. },
  960. axisTick: {
  961. show: false,
  962. },
  963. splitArea: false
  964. };
  965. this.jueBuildingAreaBarData = [
  966. {
  967. data: res.data.yList,
  968. type: "bar",
  969. barWidth: 15,
  970. itemStyle: {
  971. color: {
  972. type: 'linear',
  973. x: 0, //右
  974. y: 0, //下
  975. x2: 0, //左
  976. y2: 1, //上
  977. colorStops: [
  978. {
  979. offset: 0,
  980. color: '#FCE0BB' // 0% 处的颜色
  981. },
  982. {
  983. offset: 1,
  984. color: '#D47F1C' // 100% 处的颜色
  985. }
  986. ]
  987. }
  988. },
  989. },
  990. ];
  991. }
  992. });
  993. },
  994. //切换菜单
  995. chooseTab(index) {
  996. this.curIndex = index;
  997. this.showTab = this.tabs[index].tab;
  998. },
  999. //切换菜单
  1000. chooseBox(index) {
  1001. this.curBodex = index;
  1002. this.showBox = this.Boxtabs[index].tab;
  1003. },
  1004. preventDefault() {
  1005. console.log(11)
  1006. },
  1007. //鼠标移出
  1008. leaveFun(){
  1009. setTimeout(()=>{
  1010. this.$emit("closeDialog")
  1011. },200)
  1012. },
  1013. },
  1014. };
  1015. </script>
  1016. <style lang="scss">
  1017. .code-bill-dialog {
  1018. overflow: hidden;
  1019. width: 1125px;
  1020. height:1000px;
  1021. background: url("../../../../assets/images/main/components_max_bg.png") no-repeat;
  1022. background-size: 100% 100%;
  1023. padding: 19px 15px 11px 15px;
  1024. .dialog-title {
  1025. display: flex;
  1026. flex-direction: row;
  1027. align-items: center;
  1028. justify-content: center;
  1029. position: relative;
  1030. margin-bottom: 10px;
  1031. img {
  1032. width: 284px;
  1033. height: 32px;
  1034. }
  1035. .title {
  1036. font-size: 20px;
  1037. font-weight: 900;
  1038. font-family: "PingFangSC";
  1039. width: 100%;
  1040. position: absolute;
  1041. display: flex;
  1042. align-items: center;
  1043. justify-content: center;
  1044. top: -5px;
  1045. color: #fff;
  1046. }
  1047. }
  1048. .dialog-cont {
  1049. width:100%;
  1050. height: 920px;
  1051. padding: 15px;
  1052. overflow-y: scroll;
  1053. background: url("../../../../assets/images/main/components_max_cont.png") no-repeat;
  1054. background-size: 100% 100%;
  1055. .dialog-left{
  1056. width: 520px;
  1057. float: left;
  1058. }
  1059. .dialog-right{
  1060. width: 520px;
  1061. float: right;
  1062. }
  1063. }
  1064. .dialog-list{
  1065. width: 100%;
  1066. display: flex;
  1067. justify-content: space-between !important;
  1068. margin-bottom:20px;
  1069. .dialog-item{
  1070. width: calc(50% - 20px);
  1071. }
  1072. .dialog-item-cont{
  1073. display: flex;
  1074. justify-content: center;
  1075. align-items: center;
  1076. margin-top:40px;
  1077. }
  1078. .wid100{
  1079. width:100%;
  1080. .content-title{
  1081. width:100%;
  1082. background: url("../../../../assets/images/main/title_pro_long.png") no-repeat;
  1083. }
  1084. }
  1085. }
  1086. .content-title {
  1087. width: 100%;
  1088. height: 26px;
  1089. background: url("../../../../assets/images/main/title_pro.png") no-repeat;
  1090. background-size: 100% 100%;
  1091. font-family: "PingFangSC";
  1092. font-size: 16px;
  1093. font-weight: bold;
  1094. color: #00ffff;
  1095. padding-left: 20px;
  1096. .title {
  1097. display: block;
  1098. position: relative;
  1099. top:-5px;
  1100. }
  1101. }
  1102. .charts-cont{
  1103. width:100%;
  1104. padding-top:10px;
  1105. }
  1106. .content {
  1107. margin-top: 20px;
  1108. padding-left: 20px;
  1109. }
  1110. .total-cont.pad{
  1111. padding-top:20px;
  1112. }
  1113. .total-cont{
  1114. width: 100%;
  1115. height: 35px;
  1116. background: url("../../../../assets/images/main/lightLone.png") no-repeat;
  1117. background-size: 100% 100%;
  1118. font-family: "PingFangSC";
  1119. font-size: 14px;
  1120. font-weight: bold;
  1121. color: #ffffff;
  1122. padding-left: 25px;
  1123. padding-top: 8px;
  1124. display: flex;
  1125. justify-content: space-between;
  1126. .line{
  1127. width: 1px;
  1128. height: 45px;
  1129. opacity: 1;
  1130. background: rgba(25, 252, 222, 0.2);
  1131. }
  1132. .smallTitle{
  1133. font-size: 10px;
  1134. font-weight: 100;
  1135. }
  1136. .total-list{
  1137. width:auto;
  1138. .total-top{
  1139. display: flex;
  1140. align-items: center;
  1141. .img{
  1142. display: block;
  1143. width: 14px !important;
  1144. height: 14px !important;
  1145. }
  1146. .total-top-info{
  1147. padding-left: 6px;
  1148. .name{
  1149. font-size:14px;
  1150. color:#FFFFFF;
  1151. }
  1152. .desc{
  1153. font-size:8px;
  1154. color:#FFFFFF;
  1155. opacity: 0.4;
  1156. }
  1157. }
  1158. }
  1159. .total-bot{
  1160. width:100%;
  1161. padding-top:6px;
  1162. display: flex;
  1163. align-items: center;
  1164. .num-list{
  1165. display: flex;
  1166. align-items: center;
  1167. padding-right:15px;
  1168. .num{
  1169. font-size: 26px;
  1170. color: #00FFFF;
  1171. font-weight: bold;
  1172. font-family: "electronicFont";
  1173. }
  1174. .unit{
  1175. font-size: 12px;
  1176. color: #00FFFF;
  1177. font-weight: 500;
  1178. position: relative;
  1179. top:3px;
  1180. left:2px;
  1181. }
  1182. }
  1183. .num-list:last-child{
  1184. padding-right: 0;
  1185. }
  1186. }
  1187. }
  1188. }
  1189. //左边菜单
  1190. .rightList1{
  1191. display: flex;
  1192. flex-wrap: wrap;
  1193. padding: 15px 15px 0px 15px;
  1194. .left-list{
  1195. display: flex;
  1196. align-items: center;
  1197. margin-bottom: 15px;
  1198. margin-right: 40px;
  1199. img{
  1200. display: block;
  1201. width:25px;
  1202. height:20px;
  1203. margin-right: 5px;
  1204. }
  1205. .left-info{
  1206. padding-left:12px;
  1207. .num{
  1208. font-size: 30px;
  1209. color:#00FFFF;
  1210. font-family: "electronicFont";
  1211. display: flex;
  1212. flex-direction: row;
  1213. align-items: baseline;
  1214. .unit{
  1215. font-size: 12px;
  1216. }
  1217. }
  1218. .name{
  1219. display: flex;
  1220. font-size: 14px;
  1221. color:#FFFFFF;
  1222. font-family: 'fashionZh';
  1223. padding-top:4px;
  1224. }
  1225. }
  1226. }
  1227. }
  1228. .rightList{
  1229. display: flex;
  1230. flex-wrap: wrap;
  1231. padding: 15px 15px 0 15px;
  1232. .left-list{
  1233. display: flex;
  1234. align-items: center;
  1235. margin-bottom: 15px;
  1236. img{
  1237. display: block;
  1238. width:60px;
  1239. height:60px;
  1240. }
  1241. .left-info{
  1242. padding-left:12px;
  1243. .num{
  1244. font-size: 25px;
  1245. color:#00FFFF;
  1246. font-family: "electronicFont";
  1247. display: flex;
  1248. flex-direction: row;
  1249. align-items: baseline;
  1250. .unit{
  1251. font-size: 12px;
  1252. }
  1253. }
  1254. .name{
  1255. font-size: 14px;
  1256. color:#FFFFFF;
  1257. font-family: 'fashionZh';
  1258. padding-top:4px;
  1259. }
  1260. }
  1261. }
  1262. }
  1263. .device-cont{
  1264. //width:250px;
  1265. padding:0px 15px 0px 10px;
  1266. .title{
  1267. font-size: 14px;
  1268. color: #FFFFFF;
  1269. font-weight: bold;
  1270. }
  1271. .device-info{
  1272. display: flex;
  1273. justify-content: space-between;
  1274. align-items: center;
  1275. //padding-top:15px;
  1276. .device-item {
  1277. position: relative;
  1278. img {
  1279. width: 117px;
  1280. height: 68px;
  1281. }
  1282. .rate {
  1283. display: flex;
  1284. flex-direction: column;
  1285. align-items: center;
  1286. justify-content: center;
  1287. width: 100%;
  1288. position: absolute;
  1289. top: -10px;
  1290. left: 2px;
  1291. color: #fff;
  1292. .rate-data {
  1293. display: flex;
  1294. flex-direction: row;
  1295. align-items: baseline;
  1296. color: #00ffff;
  1297. .data {
  1298. font-size: 30px;
  1299. font-family: "electronicFont";
  1300. }
  1301. .unit {
  1302. font-size: 12px;
  1303. }
  1304. }
  1305. .desc {
  1306. font-size: 12px;
  1307. text-align: center;
  1308. }
  1309. }
  1310. }
  1311. .device-item1 {
  1312. position: relative;
  1313. img {
  1314. width: 95px;
  1315. height: 88px;
  1316. }
  1317. .rate {
  1318. display: flex;
  1319. flex-direction: column;
  1320. align-items: center;
  1321. justify-content: center;
  1322. width: 100%;
  1323. position: absolute;
  1324. top: -10px;
  1325. left: 2px;
  1326. color: #fff;
  1327. .rate-data {
  1328. display: flex;
  1329. flex-direction: row;
  1330. align-items: baseline;
  1331. color: #00ffff;
  1332. .data {
  1333. font-size: 35px;
  1334. font-family: "electronicFont";
  1335. // text-shadow:
  1336. // 0px 0px 0 #bbb,
  1337. // -1px -1px 0 #bbb,
  1338. // 0px -1px 0 #bbb,
  1339. // -1px 1px 0 #bbb;
  1340. transform: translateZ(1px);
  1341. transform: translate3d(0, 0, 1px);
  1342. }
  1343. .unit {
  1344. font-size: 12px;
  1345. }
  1346. }
  1347. .desc {
  1348. font-size: 14px;
  1349. text-align: center;
  1350. margin-top: 18px;
  1351. }
  1352. }
  1353. }
  1354. }
  1355. }
  1356. .leftNav{
  1357. display: flex;
  1358. .model {
  1359. margin-right: 15px;
  1360. width: 145px;
  1361. height: 45px;
  1362. line-height: 30px;
  1363. text-align: center;
  1364. font-family: "PingFangSc";
  1365. font-size: 14px;
  1366. font-weight: bold;
  1367. background: url("../../../../assets/images/main/choose_bg_long.png") no-repeat;
  1368. background-size: 95% 70%;
  1369. color: #CED6D6;
  1370. cursor: pointer;
  1371. }
  1372. .model1 {
  1373. margin-right: 15px;
  1374. width: 82px;
  1375. height: 45px;
  1376. line-height: 30px;
  1377. text-align: center;
  1378. font-family: "PingFangSc";
  1379. font-size: 14px;
  1380. font-weight: bold;
  1381. background: url("../../../../assets/images/main/choose_short_single.png") no-repeat;
  1382. // background-size: 95% 95%;
  1383. color: #CED6D6;
  1384. cursor: pointer;
  1385. }
  1386. .model:last-child {
  1387. margin-right: 0;
  1388. }
  1389. .cur {
  1390. color: #05FEFE;
  1391. // background: url("../../../../assets/images/main/menu_chooe.png") no-repeat;
  1392. }
  1393. }
  1394. ::-webkit-scrollbar {
  1395. display: none;
  1396. width: 3px;
  1397. height: 3px;
  1398. }
  1399. ::-webkit-scrollbar-thumb {
  1400. //滑块部分
  1401. // border-radius: 5px;
  1402. background-color: #58cbbb;
  1403. }
  1404. ::-webkit-scrollbar-track {
  1405. //轨道部分
  1406. // box-shadow: inset 0 0 5px #ddd;
  1407. background: #ddd;
  1408. // border-radius: 5px;
  1409. }
  1410. }
  1411. </style>