Sentinel.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769
  1. <!--设备中心-->
  2. <template>
  3. <div class="visual-con hz_body">
  4. <div class="s_header">
  5. <div class="head_btn">
  6. <a><i>驾驶舱</i></a>
  7. <a class="on"><i>设备中心</i></a>
  8. </div>
  9. <div class="header_tit"><i>{{title}}</i></div>
  10. <div class="head_btn">
  11. <a><i>事件中心</i></a>
  12. <a><i>用户中心</i></a>
  13. </div>
  14. <div class="head_tx">
  15. <span><img src="../assets/images/sentinel/hz_tx.png"/></span>
  16. </div>
  17. </div>
  18. <!--主体-->
  19. <div class="con_left">
  20. <div class="list_tit">设备列表</div>
  21. <el-select v-model="listParams.brand" placeholder="请选择" @change="brandHasChanged" clearable>
  22. <el-option
  23. v-for="item in options"
  24. :key="item.value"
  25. :label="item.label"
  26. :value="item.value">
  27. </el-option>
  28. </el-select>
  29. <el-input
  30. placeholder="请输入内容"
  31. suffix-icon="el-icon-search"
  32. v-model="listParams.deviceName">
  33. </el-input>
  34. <dl class="sp_list">
  35. <dt>
  36. <span class="dt1">序号</span>
  37. <span class="dt2">设备名称</span>
  38. <span class="dt3">定位</span>
  39. </dt>
  40. <div class="hei_scroll hei56">
  41. <dd v-for="(e,idx) in deviceListSearch" :key="idx">
  42. <span class="dt1">{{ idx + 1 }}</span>
  43. <span class="dt2">{{ e.deviceName }}</span>
  44. <span class="dt3">
  45. <img
  46. style="cursor: pointer;"
  47. @click="dropLocation(e.latitude,e.longitude)"
  48. src="../assets/images/sentinel/hz_list_d.png"
  49. />
  50. </span>
  51. </dd>
  52. </div>
  53. </dl>
  54. <el-pagination
  55. background
  56. layout="prev, pager, next"
  57. :current-page.sync="listParams.pageNum"
  58. @current-change="pageNumHasChanged"
  59. :total="100">
  60. </el-pagination>
  61. </div>
  62. <div class="visual-body">
  63. <!--弹框演示模板 开始-->
  64. <img src="../assets/images/sentinel/hz_qy.png" class="qydw1"/>
  65. <img src="../assets/images/sentinel/hz_qy.png" class="qydw2"/>
  66. <img src="../assets/images/sentinel/hz_qy.png" class="qydw3"/>
  67. <div class="tk_div">
  68. <div class="tk1 tk_bor">
  69. <h1>GGB19329<i>使用中</i></h1>
  70. <p>设备名称:GGB19329</p>
  71. <p>设备类型:燃气哨兵</p>
  72. <p>设备建设时间:2005年1月15日</p>
  73. <p>设备监测指标:震动、温度、可燃气体浓度</p>
  74. <p>所在街道:紫气大路</p>
  75. <p>安装位置:XXX大路于XXX大街交汇南100米</p>
  76. <p>历史数值:<a @click="toggleDisplay">详情</a></p>
  77. </div>
  78. <div class="tk2 tk_bor" v-if="isVisible">
  79. <h1>哨兵详情</h1>
  80. <div id="sbxqChart" ref="MyChart"></div>
  81. </div>
  82. </div>
  83. <!--弹框演示模板 结束-->
  84. <!-- 地图 -->
  85. <supermap ref="supermap" style="width: 100%;height: 100vh;">
  86. </supermap>
  87. </div>
  88. </div>
  89. </template>
  90. <script>
  91. import Cookies from 'js-cookie'
  92. import supermap from '@/components/supermap-2.5d' //超图
  93. import {getUserProfile} from "@/api/system/user";
  94. import {
  95. listDeviceAll,
  96. selectBrandList,
  97. selectByDeviceId,
  98. selectDailyThreshold
  99. } from "@/api/sentinel"
  100. import '../assets/styles/hz_body.css';
  101. import {
  102. selectConfigKey
  103. } from "@/api/system/config";
  104. // import * as echarts from 'echarts'
  105. let echarts = require("echarts");
  106. export default {
  107. name:'MyChart',
  108. components: {
  109. supermap,
  110. },
  111. metaInfo () {
  112. return {
  113. title:'四平市智慧哨兵监管平台',
  114. meta:[{
  115. charset: "utf-8"
  116. },
  117. {
  118. name: "viewport",
  119. content: "width=device-width, initial-scale=1.0,minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"
  120. }]
  121. }
  122. },
  123. created() {
  124. this.getListDeviceAll()
  125. // 查询品牌
  126. selectBrandList().then(res => {
  127. if(res.data){
  128. let brandoptions = []
  129. res.data.forEach(e => {
  130. brandoptions.push({
  131. value:e,
  132. label:e
  133. })
  134. })
  135. this.options = brandoptions
  136. }
  137. })
  138. selectByDeviceId({id:'05cb0481a4e441028f1a219c961176c8'}).then(res => {
  139. // 品牌:brand
  140. // 工作状态:workingStatusText
  141. // 所属区域:address
  142. // 设备名称:deviceName
  143. // 设备类型:deviceTypeText
  144. })
  145. selectDailyThreshold().then(res => {
  146. })
  147. },
  148. mounted() {
  149. // 初始化地图数据
  150. this.getSuperMapUrl();
  151. setTimeout(() => {
  152. this.title = '四平市智慧哨兵监管平台'
  153. }, 1000);
  154. this.initChart();
  155. },
  156. data() {
  157. return {
  158. isVisible: false, // 初始时设置为false,不显示内容
  159. input:'',
  160. input1: '',
  161. title:'四平市智慧哨兵监管平台',
  162. deviceList:[], // 设备列表
  163. deviceListSearch:[], // 设备列表检索
  164. listParams:{
  165. brand:'',
  166. deviceName:'',
  167. pageNum: 1,
  168. pageSize: 10,
  169. }, // 设备列表条件检索
  170. options: [],
  171. value: ''
  172. }
  173. },
  174. methods: {
  175. dropLocation(lat, lng) {
  176. this.$refs.supermap.dropLocation(lat*1, lng*1)
  177. },
  178. pageNumHasChanged(e){
  179. this.getListDeviceAll()
  180. },
  181. // 查询设备列表
  182. getListDeviceAll(){
  183. listDeviceAll(this.listParams).then(res => {
  184. this.deviceList = res.rows
  185. this.deviceListSearch = res.rows
  186. let deviceMarkersList = []
  187. // hz_qy
  188. if (res.rows != null && res.rows.length > 0) {
  189. for (let i = 0; i < res.rows.length; i++) {
  190. let markersMap = {
  191. lng: 124.59,
  192. lat: 43.02,
  193. icon: "hzqy",
  194. bindPopupHtml: "",
  195. click: "preview",
  196. parameter: "",
  197. keepBindPopup: false,
  198. isAggregation: false,
  199. };
  200. markersMap.lng = res.rows[i].longitude*1;
  201. markersMap.lat = res.rows[i].latitude*1;
  202. markersMap.radius = res.rows[i].cameraRadius || '';
  203. deviceMarkersList.push(markersMap);
  204. }
  205. setTimeout(() => {
  206. this.$refs.supermap.clearM();
  207. this.$refs.supermap.clearMRadius();
  208. this.$refs.supermap.setMarkersRadius(deviceMarkersList);
  209. }, 1000);
  210. } else {
  211. setTimeout(() => {
  212. this.$refs.supermap.clearM();
  213. this.$refs.supermap.clearMRadius();
  214. }, 1000);
  215. }
  216. })
  217. },
  218. brandHasChanged(e){
  219. this.getListDeviceAll()
  220. },
  221. /**
  222. * desc: 设备列表条件检索
  223. * @param {string} [val=''] // 设备名称
  224. * @param {string} [brandName=''] // 品牌
  225. * */
  226. searchOptionHasChanged(val='',brandName=''){
  227. this.deviceListSearch = [];
  228. // 名称检索
  229. for (let i in this.deviceList) {
  230. if (this.deviceList[i].deviceName.indexOf(val) != -1) {
  231. this.deviceListSearch.push(this.deviceList[i]);
  232. }
  233. }
  234. // 品牌检索
  235. if(brandName){
  236. this.deviceListSearch = this.deviceListSearch.filter(v => v.brand == brandName)
  237. }
  238. },
  239. getSuperMapUrl(){
  240. getUserProfile().then(response => {
  241. let mapDeptId=response.mapDeptId
  242. let num = 0;
  243. if (mapDeptId == "365") {
  244. num = 0;
  245. } else if (mapDeptId == "369") {
  246. num = 1;
  247. } else if (mapDeptId == "371") {
  248. num = 2;
  249. } else if (mapDeptId == "373") {
  250. num = 3;
  251. } else if (mapDeptId == "372") {
  252. num = 4;
  253. } else if (mapDeptId == "370") {
  254. num = 5;
  255. }
  256. this.$refs.supermap.removeAllviewer(mapDeptId, -1);
  257. });
  258. },
  259. toggleDisplay() {
  260. this.isVisible = !this.isVisible; // 点击按钮时切换isVisible的值
  261. },
  262. initChart(){
  263. // 基于准备好的dom,初始化echarts实例
  264. const myChart = echarts.init(this.$refs.myChart)
  265. let xdata = [
  266. "B4",
  267. "B3",
  268. "C4",
  269. "A1",
  270. "E2",
  271. "C1",
  272. "D1",
  273. "A3",
  274. "E3",
  275. "A2",
  276. "D2",
  277. "C2",
  278. "D3",
  279. "D4",
  280. "B2",
  281. "A4",
  282. "C3",
  283. "E1",
  284. "B1",
  285. ]; //x轴
  286. let dataArr = [
  287. 4000, 4200, 3800, 3500, 4100, 4150, 4800, 4000, 3200, 3600, 3200, 3100, 4700,
  288. 3500, 4600, 4500, 3900, 4700, 3400,
  289. ]; //value
  290. let dashedArr = [
  291. 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000,
  292. 4000, 4000, 4000, 4000, 4000, 4000,
  293. ];
  294. let titleName = "预期值";
  295. let titleNames = "各馆实际承载力";
  296. let option = {
  297. backgroundColor: "#11183c",
  298. grid: {
  299. left: "5%",
  300. bottom: "10%",
  301. top: "18%",
  302. containLabel: true,
  303. },
  304. tooltip: {
  305. trigger: "axis",
  306. axisPointer: {
  307. type: "shadow",
  308. },
  309. },
  310. legend: {
  311. show: true,
  312. x: "center",
  313. y: 60,
  314. textStyle: {
  315. color: "#fff", // 图例文字颜色
  316. fontSize: 16,
  317. },
  318. },
  319. xAxis: {
  320. type: "category",
  321. boundaryGap: false,
  322. data: xdata,
  323. axisLabel: {
  324. show: true,
  325. textStyle: {
  326. color: "#fff",
  327. },
  328. },
  329. axisLine: {
  330. lineStyle: {
  331. color: "transparent",
  332. width: 2, //这里是为了突出显示加上的
  333. },
  334. },
  335. },
  336. yAxis: [
  337. {
  338. type: "value",
  339. name: "立方米",
  340. nameTextStyle: {
  341. color: "#fff",
  342. },
  343. min: 0,
  344. max: 6000,
  345. axisLabel: {
  346. formatter: "{value}",
  347. textStyle: {
  348. color: "#fff",
  349. },
  350. },
  351. axisLine: {
  352. lineStyle: {
  353. color: "transparent",
  354. width: 2, //这里是为了突出显示加上的
  355. },
  356. },
  357. axisTick: {
  358. show: false,
  359. },
  360. splitLine: {
  361. show: true,
  362. lineStyle: {
  363. color: "#11366e",
  364. },
  365. },
  366. },
  367. ],
  368. series: [
  369. {
  370. name: titleName,
  371. type: "line",
  372. smooth: true,
  373. symbol: "none",
  374. itemStyle: {
  375. normal: {
  376. lineStyle: {
  377. type: "dashed",
  378. },
  379. color: "#01F699", //拐点的颜色
  380. borderColor: "#01F699", //拐点边框的颜色
  381. },
  382. },
  383. data: dashedArr,
  384. },
  385. {
  386. name: titleNames,
  387. type: "line",
  388. stack: "总量",
  389. smooth: true, //平滑曲线显示
  390. symbol: "circle", //标记的图形为实心圆
  391. symbolSize: 8,
  392. itemStyle: {
  393. normal: {
  394. color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
  395. {
  396. offset: 0,
  397. color: "rgba(3,191,255,1)",
  398. },
  399. {
  400. offset: 1,
  401. color: "rgba(18,93,236,1)",
  402. },
  403. ]),
  404. areaStyle: {
  405. color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
  406. {
  407. offset: 0,
  408. color: "rgba(3,191,255,.3)",
  409. },
  410. {
  411. offset: 1,
  412. color: "rgba(18,93,236,.3)",
  413. },
  414. ]),
  415. },
  416. },
  417. },
  418. data: dataArr,
  419. },
  420. ],
  421. };
  422. myChart.setOption(option);
  423. }
  424. },
  425. watch:{
  426. ['listParams.deviceName'](){
  427. this.getListDeviceAll()
  428. }
  429. }
  430. }
  431. </script>
  432. <style rel="stylesheet/scss" lang="scss">
  433. .visual-con .el-input__inner {
  434. border: 1px solid #3bb8a4;
  435. background-color: rgba(20, 107, 115, 0.3);
  436. color: #fff;
  437. }
  438. .hz_body{
  439. position: relative;
  440. }
  441. i,b,u{
  442. font-style: normal;
  443. text-decoration: none;
  444. }
  445. /*//头部通用*/
  446. .s_header{
  447. width: 100%;
  448. height: 110px;
  449. position: absolute;
  450. top:0px;
  451. left: 0px;
  452. z-index: 99;
  453. display: flex;
  454. flex-direction: row;
  455. justify-content: space-around;
  456. background: url("../assets/images/sentinel/hz_header.png") no-repeat center;
  457. background-size: contain;
  458. }
  459. .s_header .header_tit{
  460. display: block;
  461. width: 1000px;
  462. height: 109px;
  463. line-height: 65px;
  464. text-align: center;
  465. }
  466. .s_header .header_tit i{
  467. font-family: 'ysbth';
  468. font-size: 40px;
  469. /*text-shadow: 3px 5.196px 0px rgba(17, 20, 22, 0.22);*/
  470. letter-spacing: 4px;
  471. background: linear-gradient(180deg, #fff 0%, #b0d3f1 100%);
  472. -webkit-background-clip: text;
  473. color: transparent;
  474. mix-blend-mode: screen;
  475. /*text-shadow: 3px 5px 0px rgba(17, 20, 22, 0.22);*/
  476. display: block;
  477. text-align: center;
  478. }
  479. .s_header .head_btn{
  480. width: 316px;
  481. }
  482. .s_header .head_tx{
  483. display: block;
  484. position: absolute;
  485. right:20px;
  486. }
  487. .s_header .head_btn a{
  488. display: inline-block;
  489. background: url("../assets/images/sentinel/hz_btnbg.png") no-repeat center;
  490. width: 138px;
  491. margin: 0px 10px;
  492. height: 29px;
  493. line-height: 29px;
  494. text-align: center;
  495. }
  496. .s_header .head_btn a i{
  497. display: block;
  498. font-family: 'ysbth';
  499. font-size: 20px;
  500. background: linear-gradient(180deg, #95dded 60%, #fff 40%);
  501. -webkit-background-clip: text;
  502. color: transparent;
  503. mix-blend-mode: screen;
  504. /*text-shadow: 3px 5px 0px rgba(17, 20, 22, 0.22);*/
  505. display: block;
  506. text-align: center;
  507. }
  508. .s_header .head_btn a.on{
  509. background: url("../assets/images/sentinel/hz_btnbg_on.png") no-repeat center;
  510. box-shadow: none;
  511. }
  512. .con_left{
  513. position: absolute;
  514. z-index: 99;
  515. left: 30px;
  516. top:100px;
  517. width: 320px;
  518. background: rgba(0,0,0,0.25);
  519. padding: 0px 10px 20px 10px!important;
  520. }
  521. .con_left .list_tit{
  522. background: url("../assets/images/sentinel/hz_list_tit.png") no-repeat center;
  523. background-size: 100% 100%;
  524. height: 44px;
  525. line-height: 44px;
  526. padding-left: 20px;
  527. font-family: 'ysbth';
  528. font-size: 20px;
  529. color: #fff;
  530. margin-bottom: 10px;
  531. }
  532. .con_left .el-select{
  533. width: 100%;
  534. margin-bottom: 8px;
  535. }
  536. .el-select-dropdown {
  537. border: 1px solid #3bb7a3;
  538. background-color: #0c3038;
  539. }
  540. .el-select-dropdown__item {
  541. color: #b0d3f1;
  542. }
  543. .el-select-dropdown__item.hover,.con_left .el-select-dropdown__item:hover {
  544. background-color: #0a4c5c;
  545. }
  546. .el-select-dropdown__item.selected {
  547. color: #3bb7a3;
  548. }
  549. .el-input__inner {
  550. color: #b0d3f1;
  551. height: 35px;
  552. line-height: 35px;
  553. }
  554. .el-input__icon{
  555. line-height: 35px;
  556. color: #5bf9e0;
  557. }
  558. .sp_list{
  559. margin-top: 10px!important;
  560. }
  561. .sp_list dt{
  562. background: linear-gradient(to right, rgba(40, 115, 124, 0.68), rgba(38, 75, 80, 0.68));
  563. height: 38px;
  564. line-height: 38px;
  565. margin-bottom: 5px;
  566. }
  567. .sp_list dd{
  568. display: flex;
  569. flex-direction: row;
  570. }
  571. .sp_list dd:nth-child(odd){
  572. background: linear-gradient(to right, rgba(40, 115, 124, 0.68), rgba(38, 75, 80, 0.68));
  573. height: 38px;
  574. line-height: 38px;
  575. margin-bottom: 5px;
  576. }
  577. .sp_list dd:nth-child(even){
  578. background: linear-gradient(to right, rgba(40, 115, 124, 0.38), rgba(38, 75, 80, 0.38));
  579. height: 38px;
  580. line-height: 38px;
  581. margin-bottom: 5px;
  582. }
  583. .sp_list span{
  584. display: inline-block;
  585. text-align: left;
  586. font-size: 14px;
  587. color: #acdfe5;
  588. height: 38px;
  589. line-height: 38px;
  590. }
  591. .sp_list span.dt1{
  592. width: 60px;
  593. background: url("../assets/images/sentinel/hz_list_j.png") no-repeat left;
  594. padding-left: 15px;
  595. }
  596. .sp_list span.dt2{
  597. width: 200px;
  598. text-align: left;
  599. }
  600. .sp_list span.dt3{
  601. width: 40px;
  602. text-align: center;
  603. line-height: 38px;
  604. position: relative;
  605. }
  606. .sp_list span.dt3 img{
  607. display: inline-block;
  608. position: absolute;
  609. top:10px;
  610. left: 11px;
  611. }
  612. .el-pagination{
  613. width: 100%;
  614. margin-top: 20px!important;
  615. }
  616. .el-pagination.is-background .btn-next, .el-pagination.is-background .btn-prev, .el-pagination.is-background .el-pager li {
  617. margin: 0 2px;
  618. background-color:unset!important;
  619. color: #47c5b0;
  620. min-width: 26px;
  621. }
  622. .el-pagination.is-background .el-pager li:not(.disabled).active {
  623. background-color: #47c5b0!important;
  624. color: #FFF;
  625. }
  626. .el-pagination.is-background .el-pager li:not(.disabled):hover {
  627. background-color: #47c5b0!important;
  628. color: #FFF;
  629. }
  630. .el-pager li:hover {
  631. background-color: #47c5b0!important;
  632. color: #FFF;
  633. }
  634. .hei_scroll{
  635. overflow-y: scroll;
  636. }
  637. .hei_scroll::-webkit-scrollbar{
  638. width: 0px;
  639. height: 0px;
  640. }
  641. .hei56{
  642. height: 56vh;
  643. }
  644. .qydw1{
  645. position: absolute;
  646. top: 60%;
  647. left: 40%;
  648. display: block;
  649. width:54px ;
  650. height: 77px;
  651. }
  652. .qydw2{
  653. position: absolute;
  654. top: 50%;
  655. left: 70%;
  656. display: block;
  657. width:54px ;
  658. height: 77px;
  659. }
  660. .qydw3{
  661. position: absolute;
  662. top: 40%;
  663. left: 80%;
  664. display: block;
  665. width:54px ;
  666. height: 77px;
  667. }
  668. .tk_div{
  669. position: absolute;
  670. top: 24%;
  671. left: 32.2%;
  672. z-index: 98;
  673. display: flex;
  674. flex-direction: row;
  675. }
  676. .tk_bor{
  677. padding: 15px!important;
  678. border: 3px solid #28727e;
  679. box-shadow: 0px 0px 24px #28727e;
  680. background: rgba(0,0,0,0.39);
  681. }
  682. .tk_bor h1{
  683. padding-left: 20px;
  684. background: url("../assets/images/sentinel/hz_k.png") no-repeat left;
  685. font-size: 18px;
  686. color: #e0e5fa;
  687. font-weight: bold;
  688. height: 38px;
  689. line-height: 38px;
  690. }
  691. .tk_bor h1 i{
  692. display: inline-block;
  693. float: right;
  694. background: #3bad96;
  695. padding: 0px 10px;
  696. color: #fff;
  697. font-size: 16px;
  698. height: 30px;
  699. line-height: 30px;
  700. position: relative;
  701. border-radius: 4px;
  702. }
  703. .tk_bor h1 i::after{
  704. display: block;
  705. content: '';
  706. border-bottom: 9px solid transparent;
  707. border-right: 9px solid #3bad96;
  708. border-top: 9px solid transparent;
  709. position: absolute;
  710. left:-8px;
  711. top:8px;
  712. }
  713. .tk_bor p{
  714. padding-left: 20px;
  715. background: url("../assets/images/sentinel/hz_k.png") no-repeat left;
  716. background-size: 12px;
  717. font-size: 16px;
  718. color: #fff;
  719. line-height: 35px;
  720. }
  721. .tk_bor p a{
  722. color: #6bf5f2;
  723. text-underline-offset: 0.4em;
  724. text-decoration: underline;
  725. }
  726. .tk_bor p a:hover{
  727. color: #6bf5f2;
  728. text-underline-offset: 0.4em;
  729. text-decoration: underline;
  730. cursor: pointer;
  731. }
  732. .tk1{
  733. position: relative;
  734. margin-right: 20px!important;
  735. }
  736. .tk1::after{
  737. display: block;
  738. content: '';
  739. background: url("../assets/images/sentinel/hz_down.png") no-repeat left;
  740. width: 46px;
  741. height: 40px;
  742. position: absolute;
  743. bottom:-40px;
  744. left: 50%;
  745. transform: translateX(-50%);
  746. }
  747. #sbxqChart{
  748. width: 250px;
  749. height: 200px;
  750. }
  751. </style>
  752. <style rel="stylesheet/scss" lang="scss" scoped>
  753. @import '@/assets/styles/base.scss';
  754. </style>