closeWall.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830
  1. <template>
  2. <div class="closeWall">
  3. <div class="title">
  4. <div class="box-container">
  5. <div class="contents">
  6. <div class="text">
  7. <div class="text-label">位置: </div>
  8. <!-- <div class="text-value">{{ topContent.position }}</div> -->
  9. <div class="text-value">
  10. <a-select v-model:value="selectData" style="width: 360px" @change="changeSelect">
  11. <a-select-option v-for="file in selectList" :key="file.label" :value="file.value">{{ file.label }}</a-select-option>
  12. </a-select>
  13. </div>
  14. </div>
  15. <div class="text">
  16. <span class="text-label">时间 : </span>
  17. <span class="text-value">{{ topContent.time }}</span>
  18. </div>
  19. </div>
  20. <div class="contents">
  21. <img src="@/assets/images/fire/pie.png" alt="" />
  22. <span class="text">{{ topContent.temperature }}</span>
  23. <span class="dw">°C</span>
  24. </div>
  25. </div>
  26. <div class="box-container">
  27. <div class="text1">
  28. <span>预警等级 : </span>
  29. <span
  30. :class="{
  31. value1: topContent.warnLevel == '绿色预警',
  32. value2: topContent.warnLevel == '黄色预警',
  33. value3: topContent.warnLevel == '红色预警',
  34. }"
  35. >{{ topContent.warnLevel || '-' }}</span
  36. >
  37. </div>
  38. <div class="text1">
  39. <span>煤自燃阶段 : </span>
  40. <span>{{ topContent.smokeJd || '-' }}</span>
  41. </div>
  42. </div>
  43. </div>
  44. <div class="content">
  45. <div class="title-b">采空区密闭参数</div>
  46. <div class="card-btn">
  47. <div
  48. :class="activeIndex == index ? 'box-container1' : 'box-container'"
  49. v-for="(item, index) in mbList"
  50. :key="index"
  51. @click="btnClick(item, index)"
  52. >
  53. <div class="box-label">
  54. <span> {{ item.label }}</span>
  55. <span>{{ item.dw }}</span>
  56. </div>
  57. <div class="box-item box-item1">
  58. <span class="text-t">{{ `${item.label1}:` }}</span>
  59. <span class="text-v">{{ item.nd }}</span>
  60. </div>
  61. <div class="box-item box-item2">
  62. <span class="text-t">{{ `${item.label2}:` }}</span>
  63. <span class="text-v">{{ item.time1 }}</span>
  64. </div>
  65. <div class="box-item box-item3">
  66. <span class="text-t">{{ `${item.label3}:` }}</span>
  67. <span class="text-v">{{ item.address }}</span>
  68. </div>
  69. </div>
  70. </div>
  71. <div class="echart-box">
  72. <div class="left-echartbox">
  73. <div class="title-f">
  74. <div class="title-text">
  75. {{ `${type}趋势` }}&nbsp; <span style="color: red">{{ netStatus != 1 ? '(设备未连接)' : '' }}</span>
  76. </div>
  77. <!-- <BaseTab
  78. style="width: 180px; color: var(--vent-font-color)"
  79. :tabs="[
  80. { name: '实时监测', id: 'default' },
  81. { name: '预测曲线', id: 'predict' },
  82. ]"
  83. v-model:id="shownChart"
  84. /> -->
  85. </div>
  86. <div class="echarts-box">
  87. <PredictionCurve v-if="shownChart === 'default'" :chart="curveConfig" />
  88. <echartLine1 v-if="shownChart === 'predict'" :echartDataSg="echartDataSg1" :lengedDataName="echartDataSg1.lengedDataName" :maxY="maxY" />
  89. </div>
  90. </div>
  91. <div class="right-echartbox">
  92. <warnZb
  93. :widthV="widthV"
  94. :heightV="heightV"
  95. :coordDw="coordDw"
  96. :widthCanvas="widthCanvas"
  97. :heightCanvas="heightCanvas"
  98. :warnLevel="topContent.warnLevel"
  99. />
  100. </div>
  101. </div>
  102. </div>
  103. </div>
  104. </template>
  105. <script lang="ts" setup>
  106. import { onMounted, ref, reactive, watch, defineProps } from 'vue';
  107. import echartLine1 from './echartLine1.vue';
  108. import warnZb from './warnZb.vue';
  109. import PredictionCurve from './predictionCurve.vue';
  110. import BaseTab from '../../../gas/components/tab/baseTab.vue';
  111. let props = defineProps({
  112. listData: Object,
  113. });
  114. const shownChart = ref('default');
  115. let maxY = ref<any>(0);
  116. let selectSj = ref<any[]>([]);
  117. let selectData = ref('');
  118. let selectList = reactive<any[]>([]);
  119. let widthV = ref('75%');
  120. let heightV = ref('80%');
  121. let coordDw = ref<any[]>([47, 95]);
  122. let widthCanvas = ref(562);
  123. let heightCanvas = ref(316);
  124. //设备连接状态
  125. let netStatus = ref(0);
  126. //密闭-顶部区域数据
  127. let topContent = reactive({
  128. temperature: 0,
  129. position: '',
  130. time: '',
  131. warnLevel: '',
  132. smokeJd: '',
  133. });
  134. //密闭参数列表
  135. let mbList = reactive([
  136. {
  137. label: 'O₂',
  138. dw: '(%)',
  139. label1: '浓度',
  140. label2: '时间',
  141. label3: '位置',
  142. nd: '0',
  143. time1: '',
  144. address: '',
  145. },
  146. {
  147. label: 'CO',
  148. dw: '(ppm)',
  149. label1: '浓度',
  150. label2: '时间',
  151. label3: '位置',
  152. nd: '0',
  153. time1: '',
  154. address: '',
  155. },
  156. {
  157. label: 'CO₂',
  158. dw: '(%)',
  159. label1: '浓度',
  160. label2: '时间',
  161. label3: '位置',
  162. nd: '0',
  163. time1: '',
  164. address: '',
  165. },
  166. {
  167. label: 'CH₄',
  168. dw: '(%)',
  169. label1: '浓度',
  170. label2: '时间',
  171. label3: '位置',
  172. nd: '0',
  173. time1: '',
  174. address: '',
  175. },
  176. {
  177. label: 'C₂H₂',
  178. dw: '(ppm)',
  179. label1: '浓度',
  180. label2: '时间',
  181. label3: '位置',
  182. nd: '0',
  183. time1: '',
  184. address: '',
  185. },
  186. {
  187. label: 'C₂H₄',
  188. dw: '(ppm)',
  189. label1: '浓度',
  190. label2: '时间',
  191. label3: '位置',
  192. nd: '0',
  193. time1: '',
  194. address: '',
  195. },
  196. ]);
  197. //当前密闭参数激活选项
  198. let activeIndex = ref(0);
  199. //当前激活密闭参数类型
  200. let type = ref('O₂');
  201. let echartDataSg1 = reactive({
  202. xData: [],
  203. yData: [],
  204. lengedData: 'O₂',
  205. lengedDataName: '(%)',
  206. });
  207. let echartDataSgList = reactive<any[]>([]);
  208. function getmaxY() {
  209. maxY.value = echartDataSg1.yData.reduce((acr, cur) => {
  210. return acr > cur ? acr : cur;
  211. });
  212. maxY.value =
  213. maxY.value.toString().indexOf('.') == -1 ? maxY.value.toString() : maxY.value.toString().substring(0, maxY.value.toString().indexOf('.'));
  214. if (maxY.value.length < 2 && Number(maxY.value) < 1) {
  215. maxY.value = 1;
  216. } else if (maxY.value.length < 2 && Number(maxY.value) >= 1) {
  217. maxY.value = 10;
  218. } else if (maxY.value.length < 3) {
  219. maxY.value = (Number(maxY.value[0]) + 1) * 10;
  220. } else if (maxY.value.length < 4) {
  221. maxY.value = (Number(maxY.value[0]) + 1) * 100;
  222. } else if (maxY.value.length < 5) {
  223. maxY.value = (Number(maxY.value[0]) + 1) * 1000;
  224. } else if (maxY.value.length < 6) {
  225. maxY.value = (Number(maxY.value[0]) + 1) * 10000;
  226. }
  227. }
  228. //密闭参数选项切换
  229. function btnClick(item, ind) {
  230. activeIndex.value = ind;
  231. type.value = item.label;
  232. echartDataSg1.xData.length = 0;
  233. echartDataSg1.yData.length = 0;
  234. echartDataSg1.lengedData = type.value;
  235. echartDataSg1.lengedDataName = item.dw;
  236. const data = selectSj.value.filter((v) => v.strinstallpos == selectData.value)[0];
  237. switch (type.value) {
  238. case 'O₂':
  239. echartDataSgList.forEach((el) => {
  240. echartDataSg1.xData.push(el.time);
  241. echartDataSg1.yData.push(el.o2val);
  242. });
  243. curveConfig.value = {
  244. id: 'o2',
  245. label: 'O₂',
  246. time: echartDataSg1.xData,
  247. data: [
  248. // 氧气预测曲线
  249. data.avgParams?.avg_o2_value || 0,
  250. data.avgParams?.max_o2_value || 0,
  251. data.avgParams?.min_o2_value || 0,
  252. // data.readData?.o2val,
  253. ],
  254. monitorData: echartDataSg1.yData,
  255. };
  256. getmaxY();
  257. break;
  258. case 'C₂H₄':
  259. echartDataSgList.forEach((el) => {
  260. echartDataSg1.xData.push(el.time);
  261. echartDataSg1.yData.push(el.ch2val);
  262. });
  263. curveConfig.value = {
  264. id: 'ch2',
  265. label: 'C₂H₄',
  266. time: echartDataSg1.xData,
  267. data: [
  268. // 预测曲线
  269. data.avgParams?.avg_ch2_value || 0,
  270. data.avgParams?.max_ch2_value || 0,
  271. data.avgParams?.min_ch2_value || 0,
  272. // data.readData?.ch2val,
  273. ],
  274. monitorData: echartDataSg1.yData,
  275. };
  276. getmaxY();
  277. break;
  278. case 'CO':
  279. echartDataSgList.forEach((el) => {
  280. echartDataSg1.xData.push(el.time);
  281. echartDataSg1.yData.push(el.coval);
  282. });
  283. curveConfig.value = {
  284. id: 'co',
  285. label: 'CO',
  286. time: echartDataSg1.xData,
  287. data: [
  288. // 预测曲线
  289. data.avgParams?.avg_co_value || 0,
  290. data.avgParams?.max_co_value || 0,
  291. data.avgParams?.min_co_value || 0,
  292. // data.readData?.coval,
  293. ],
  294. monitorData: echartDataSg1.yData,
  295. };
  296. getmaxY();
  297. break;
  298. case 'CH₄':
  299. echartDataSgList.forEach((el) => {
  300. echartDataSg1.xData.push(el.time);
  301. echartDataSg1.yData.push(el.chval);
  302. });
  303. curveConfig.value = {
  304. id: 'ch',
  305. label: 'CH₄',
  306. time: new Date(),
  307. data: [
  308. // 预测曲线
  309. data.avgParams?.avg_ch_value || 0,
  310. data.avgParams?.max_ch_value || 0,
  311. data.avgParams?.min_ch_value || 0,
  312. // data.readData?.chval,
  313. ],
  314. monitorData: echartDataSg1.yData,
  315. };
  316. getmaxY();
  317. break;
  318. case 'CO₂':
  319. echartDataSgList.forEach((el) => {
  320. echartDataSg1.xData.push(el.time);
  321. echartDataSg1.yData.push(el.co2val);
  322. });
  323. curveConfig.value = {
  324. id: 'co2',
  325. label: 'CO₂',
  326. time: echartDataSg1.xData,
  327. data: [
  328. // 预测曲线
  329. data.avgParams?.avg_co2_value || 0,
  330. data.avgParams?.max_co2_value || 0,
  331. data.avgParams?.min_co2_value || 0,
  332. // data.readData?.co2val,
  333. ],
  334. monitorData: echartDataSg1.yData,
  335. };
  336. getmaxY();
  337. break;
  338. case 'C₂H₂':
  339. echartDataSgList.forEach((el) => {
  340. echartDataSg1.xData.push(el.time);
  341. echartDataSg1.yData.push(el.gasval);
  342. });
  343. curveConfig.value = {
  344. id: 'gas',
  345. label: '',
  346. time: echartDataSg1.xData,
  347. data: [
  348. // 预测曲线
  349. data.avgParams?.avg_gas_value || 0,
  350. data.avgParams?.max_gas_value || 0,
  351. data.avgParams?.min_gas_value || 0,
  352. // data.readData?.gasval,
  353. ],
  354. monitorData: echartDataSg1.yData,
  355. };
  356. getmaxY();
  357. break;
  358. }
  359. }
  360. function changeSelect(val) {
  361. selectData.value = val;
  362. let data = selectSj.value.filter((v) => v.strinstallpos == selectData.value)[0];
  363. topContent.time = data.readTime || '--';
  364. topContent.warnLevel = data.syswarnLevel_str;
  365. topContent.smokeJd = data.syswarnLevel_des;
  366. mbList[0].nd = data.readData.o2val || '--';
  367. mbList[1].nd = data.readData.coval || '--';
  368. mbList[2].nd = data.readData.co2val || '--';
  369. mbList[3].nd = data.readData.chval || '--';
  370. mbList[4].nd = data.readData.ch2val || '--';
  371. mbList[5].nd = data.readData.gasval || '--';
  372. mbList.forEach((el) => {
  373. el.time1 = data ? data.readTime.substring(0, data.readTime.lastIndexOf(':')) : '--';
  374. el.address = data ? data.strinstallpos : '--';
  375. });
  376. netStatus.value = data['netStatus'];
  377. }
  378. /** 预测曲线的配置,数据分别为平均、最大、最小、当前值 */
  379. const curveConfig = ref<any>({ id: '0', label: '', time: new Date(), data: [0, 0, 0, 0] });
  380. watch(
  381. () => props.listData,
  382. (val: any) => {
  383. echartDataSg1.xData.length = 0;
  384. echartDataSg1.yData.length = 0;
  385. echartDataSgList.length = 0;
  386. selectList.length = 0;
  387. if (JSON.stringify(val) === '{}') return;
  388. if (val.bundletube.length != 0) {
  389. selectSj.value = val.bundletube;
  390. selectSj.value.forEach((el) => {
  391. selectList.push({ label: el.strinstallpos, value: el.strinstallpos });
  392. });
  393. selectData.value = selectData.value ? selectData.value : selectList[0].value;
  394. let dataVal = selectData.value ? selectSj.value.filter((v) => v.strinstallpos == selectData.value)[0] : selectSj.value[0];
  395. topContent.temperature = val.temperature[0] ? val.temperature[0].readData.temperature : '--';
  396. // topContent.position = dataVal.strinstallpos || '--';
  397. topContent.time = dataVal.readTime || '--';
  398. topContent.warnLevel = dataVal.syswarnLevel_str;
  399. topContent.smokeJd = dataVal.syswarnLevel_des;
  400. mbList[0].nd = dataVal.readData.o2val || '--';
  401. mbList[1].nd = dataVal.readData.coval || '--';
  402. mbList[2].nd = dataVal.readData.co2val || '--';
  403. mbList[3].nd = dataVal.readData.chval || '--';
  404. mbList[4].nd = dataVal.readData.ch2val || '--';
  405. mbList[5].nd = dataVal.readData.gasval || '--';
  406. mbList.forEach((el) => {
  407. el.time1 = dataVal ? dataVal.readTime.substring(0, dataVal.readTime.lastIndexOf(':')) : '--';
  408. el.address = dataVal ? dataVal.strinstallpos : '--';
  409. });
  410. netStatus.value = dataVal['netStatus'];
  411. echartDataSgList = dataVal.history;
  412. btnClick(
  413. {
  414. label: type.value,
  415. dw: echartDataSg1.lengedDataName,
  416. },
  417. activeIndex.value
  418. );
  419. // dataVal.history.forEach((v) => {
  420. // echartDataSg1.xData.push(v.time);
  421. // if (echartDataSg1.lengedData == 'O₂') {
  422. // echartDataSg1.yData.push(v.o2val);
  423. // } else if (echartDataSg1.lengedData == 'C₂H₄') {
  424. // echartDataSg1.yData.push(v.ch2val);
  425. // } else if (echartDataSg1.lengedData == 'CO') {
  426. // echartDataSg1.yData.push(v.coval);
  427. // } else if (echartDataSg1.lengedData == 'CH₄') {
  428. // echartDataSg1.yData.push(v.chval);
  429. // } else if (echartDataSg1.lengedData == 'CO₂') {
  430. // echartDataSg1.yData.push(v.co2val);
  431. // } else if (echartDataSg1.lengedData == 'C₂H₂') {
  432. // echartDataSg1.yData.push(v.gasval);
  433. // }
  434. // echartDataSgList.push(v);
  435. // });
  436. getmaxY();
  437. } else {
  438. topContent.temperature = 0;
  439. // topContent.position = '--';
  440. topContent.time = '--';
  441. topContent.warnLevel = '--';
  442. topContent.smokeJd = '--';
  443. mbList[0].nd = '--';
  444. mbList[1].nd = '--';
  445. mbList[2].nd = '--';
  446. mbList[3].nd = '--';
  447. mbList[4].nd = '--';
  448. mbList[5].nd = '--';
  449. mbList.forEach((el) => {
  450. el.time1 = '--';
  451. el.address = '--';
  452. });
  453. }
  454. },
  455. { immediate: true, deep: true }
  456. );
  457. </script>
  458. <style lang="less" scoped>
  459. @import '/@/design/theme.less';
  460. @{theme-deepblue} {
  461. .closeWall {
  462. --image-bj1: url('/@/assets/images/themify/deepblue/fire/bj1.png');
  463. --image-pj: url('/@/assets/images/themify/deepblue/fire/pj.svg');
  464. --image-1: url('/@/assets/images/themify/deepblue/fire/1.png');
  465. --image-contetn: url('/@/assets/images/themify/deepblue/fire/contetn.png');
  466. --image-2: url('/@/assets/images/themify/deepblue/fire/2.png');
  467. }
  468. }
  469. .closeWall {
  470. --image-bj1: url('/@/assets/images/fire/bj1.png');
  471. --image-pj: url('/@/assets/images/fire/pj.svg');
  472. --image-1: url('/@/assets/images/fire/1.png');
  473. --image-contetn: url('/@/assets/images/fire/contetn.png');
  474. --image-2: url('/@/assets/images/fire/2.png');
  475. --border-image-2: linear-gradient(to bottom, transparent, #024688, transparent);
  476. width: 100%;
  477. height: 100%;
  478. padding: 20px;
  479. box-sizing: border-box;
  480. .title {
  481. width: 100%;
  482. height: 17%;
  483. margin-bottom: 20px;
  484. display: flex;
  485. justify-content: space-between;
  486. background: var(--image-bj1) no-repeat center;
  487. background-size: 100% 100%;
  488. align-items: center;
  489. .box-container {
  490. display: flex;
  491. &:nth-child(1) {
  492. justify-content: space-around;
  493. align-items: center;
  494. flex: 2;
  495. height: 100%;
  496. border-right: 2px solid;
  497. border-image: var(--border-image-2) 1 1 1;
  498. }
  499. &:nth-child(2) {
  500. flex-direction: column;
  501. flex: 1;
  502. justify-content: space-around;
  503. align-items: center;
  504. height: 73%;
  505. }
  506. .contents {
  507. height: 73%;
  508. &:nth-child(1) {
  509. width: 40%;
  510. display: flex;
  511. flex-direction: column;
  512. justify-content: space-around;
  513. .text {
  514. font-size: 14px;
  515. display: flex;
  516. align-items: center;
  517. .text-label {
  518. color: #b3b8cc;
  519. font-weight: bold;
  520. }
  521. .text-value {
  522. font-family: 'douyuFont';
  523. color: var(--vent-table-action-link);
  524. margin-left: 10px;
  525. }
  526. }
  527. }
  528. &:nth-child(2) {
  529. width: 40%;
  530. display: flex;
  531. justify-content: center;
  532. align-items: center;
  533. img {
  534. position: relative;
  535. width: 23%;
  536. height: 100%;
  537. background: var(--image-pj) no-repeat center;
  538. background-size: 50% 50%;
  539. }
  540. .text {
  541. font-family: 'douyuFont';
  542. font-size: 28px;
  543. margin: 0px 15px;
  544. color: var(--vent-table-action-link);
  545. }
  546. .dw {
  547. font-size: 14px;
  548. color: #b3b8cc;
  549. }
  550. }
  551. }
  552. .text1 {
  553. width: 90%;
  554. height: 30px;
  555. line-height: 30px;
  556. font-size: 14px;
  557. color: #b3b8cc;
  558. font-weight: bold;
  559. span {
  560. display: inline-block;
  561. &:nth-child(1) {
  562. width: 160px;
  563. text-align: right;
  564. }
  565. &:nth-child(2) {
  566. font-family: 'douyuFont';
  567. color: var(--vent-table-action-link);
  568. margin-left: 10px;
  569. }
  570. }
  571. .value1 {
  572. color: rgb(145, 230, 9) !important;
  573. }
  574. .value2 {
  575. // color: rgb(0, 242, 255) !important;
  576. color: #ffff35 !important;
  577. }
  578. .value3 {
  579. // color: #ffff35 !important;
  580. color: #ff0000 !important;
  581. }
  582. .value4 {
  583. color: #ffbe69 !important;
  584. }
  585. .value5 {
  586. color: #ff6f00 !important;
  587. }
  588. .value6 {
  589. color: #ff0000 !important;
  590. }
  591. }
  592. }
  593. }
  594. .content {
  595. width: 100%;
  596. height: calc(83% - 20px);
  597. padding: 10px;
  598. background: var(--image-bj1) no-repeat center;
  599. background-size: 100% 100%;
  600. box-sizing: border-box;
  601. .title-b {
  602. height: 30px;
  603. line-height: 30px;
  604. font-family: 'douyuFont';
  605. font-size: 14px;
  606. color: #fff;
  607. // color: var(--vent-table-action-link);
  608. }
  609. .card-btn {
  610. height: 28%;
  611. margin-bottom: 10px;
  612. display: flex;
  613. justify-content: space-between;
  614. .box-container {
  615. position: relative;
  616. width: 16%;
  617. height: 100%;
  618. background: var(--image-1) no-repeat center;
  619. background-size: 100% 100%;
  620. cursor: pointer;
  621. .box-label {
  622. position: absolute;
  623. left: 50%;
  624. top: 2px;
  625. transform: translate(-50%);
  626. color: #fff;
  627. }
  628. .box-item {
  629. position: absolute;
  630. left: 50%;
  631. transform: translate(-50%, 0);
  632. width: 89%;
  633. height: 16%;
  634. padding: 0px 10px;
  635. display: flex;
  636. justify-content: space-between;
  637. align-items: center;
  638. background: var(--image-contetn) no-repeat center;
  639. background-size: 100% 100%;
  640. .text-t {
  641. width: 17%;
  642. color: #fff;
  643. font-size: 12px;
  644. }
  645. .text-v {
  646. width: 83%;
  647. font-family: 'douyuFont';
  648. font-size: 10px;
  649. color: var(--vent-table-action-link);
  650. display: flex;
  651. justify-content: flex-end;
  652. }
  653. }
  654. .box-item1 {
  655. top: 24%;
  656. }
  657. .box-item2 {
  658. top: 50%;
  659. }
  660. .box-item3 {
  661. top: 75%;
  662. }
  663. }
  664. .box-container1 {
  665. position: relative;
  666. width: 16%;
  667. height: 100%;
  668. background: var(--image-2) no-repeat center;
  669. background-size: 100% 100%;
  670. cursor: pointer;
  671. .box-label {
  672. position: absolute;
  673. left: 50%;
  674. top: 2px;
  675. transform: translate(-50%);
  676. color: #fff;
  677. }
  678. .box-item {
  679. position: absolute;
  680. left: 50%;
  681. transform: translate(-50%, 0);
  682. width: 89%;
  683. height: 16%;
  684. padding: 0px 10px;
  685. display: flex;
  686. justify-content: space-between;
  687. align-items: center;
  688. background: var(--image-contetn) no-repeat center;
  689. background-size: 100% 100%;
  690. .text-t {
  691. width: 17%;
  692. color: #fff;
  693. font-size: 12px;
  694. }
  695. .text-v {
  696. width: 83%;
  697. font-family: 'douyuFont';
  698. font-size: 10px;
  699. color: var(--vent-table-action-link);
  700. display: flex;
  701. justify-content: flex-end;
  702. }
  703. }
  704. .box-item1 {
  705. top: 19%;
  706. }
  707. .box-item2 {
  708. top: 41%;
  709. }
  710. .box-item3 {
  711. top: 63%;
  712. }
  713. }
  714. }
  715. .echart-box {
  716. display: flex;
  717. height: calc(72% - 41px);
  718. .left-echartbox {
  719. width: calc(50% - 6px);
  720. margin-right: 6px;
  721. border: 1px solid #114aac;
  722. border-radius: 5px;
  723. .title-f {
  724. height: 40px;
  725. padding: 0px 10px;
  726. box-sizing: border-box;
  727. display: flex;
  728. justify-content: space-between;
  729. align-items: center;
  730. .title-text {
  731. font-family: 'douyuFont';
  732. font-size: 14px;
  733. color: #fff;
  734. // color: var(--vent-table-action-link);
  735. }
  736. }
  737. .echarts-box {
  738. height: calc(100% - 40px);
  739. padding: 0px 10px;
  740. box-sizing: border-box;
  741. }
  742. }
  743. .right-echartbox {
  744. width: calc(50% - 6px);
  745. margin-left: 6px;
  746. border: 1px solid #114aac;
  747. border-radius: 5px;
  748. }
  749. }
  750. }
  751. }
  752. :deep(.zxm-select:not(.zxm-select-customize-input) .zxm-select-selector) {
  753. border: 1px solid #3ad8ff77 !important;
  754. background-color: #ffffff00 !important;
  755. }
  756. :deep(.zxm-select-selection-item) {
  757. color: #fff !important;
  758. }
  759. :deep(.zxm-select-arrow) {
  760. color: #fff;
  761. }
  762. </style>