index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  1. <template>
  2. <div class="fireHome">
  3. <!-- 模型区域 -->
  4. <!-- <div class="moduleArea">
  5. <iframe src="http://82.157.13.146:18224/valkyrja" width="100%" height="100%" frameborder="0"></iframe>
  6. </div> -->
  7. <div class="main-container">
  8. <transition name="fade" mode="out-in">
  9. <div class="left-area" v-if="isShow">
  10. <!-- 左上区域 -->
  11. <div class="left-t">
  12. <div class="tcontent-area">
  13. <div class="tcontent-l">
  14. <div>全矿井</div>
  15. <div>监测区域</div>
  16. </div>
  17. <div class="tcontent-c">
  18. <div style="margin-bottom: 10px; color: #1fb3f7; font-size: 24px">低风险</div>
  19. <div style="color: #fff; font-size: 14px">自燃倾向性等级 : 容易自燃</div>
  20. </div>
  21. <div class="tcontent-r">火灾风险</div>
  22. </div>
  23. </div>
  24. <!-- 左中区域 -->
  25. <div class="left-c">
  26. <DanelBd :moduleName="'工作面风险监测'" :contentStyle="{ contentH: '430px' }">
  27. <workJc
  28. :heightT="'30%'"
  29. :heightB="'70%'"
  30. :echartData="echartDataWork"
  31. :cardData="cardData"
  32. />
  33. </DanelBd>
  34. </div>
  35. <!-- 左下区域 -->
  36. <div class="left-b">
  37. <DanelBd
  38. :moduleName="'密闭采空区监测系统'"
  39. :contentStyle="{ contentH: '170px' }"
  40. commonTitle="selected"
  41. :selectValue="areaCodeMb"
  42. :selectList="selectListMb"
  43. @change-select="changeSelect"
  44. >
  45. <emptyJc :emptyData="emptyData" />
  46. </DanelBd>
  47. </div>
  48. <!-- 左底部区域 -->
  49. <div class="left-f">
  50. <DanelBd
  51. :moduleName="'GIS重点区域风险监测'"
  52. :contentStyle="{ contentH: '0px' }"
  53. commonTitle="switchs"
  54. />
  55. </div>
  56. </div>
  57. </transition>
  58. <div :class="isShow ? 'center-area' : 'center-area1'">
  59. <div :class="isShow ? 'center-t' : 'center-t1'">
  60. <div class="center-scalc" @click="getScalc">
  61. <img src="../../../../assets/images/scalc.png" alt="" />
  62. </div>
  63. <iframe
  64. src="http://172.16.253.23:91/valkyrja/?type=tf"
  65. width="100%"
  66. height="100%"
  67. frameborder="0"
  68. ></iframe>
  69. </div>
  70. <transition name="fade" mode="out-in">
  71. <div class="center-b" v-if="isShow">
  72. <DanelBd
  73. :moduleName="'工作面束管监测'"
  74. :selectValue="pointCode"
  75. :moduleSelect="moduleSelect"
  76. :contentStyle="{ contentH: '289px' }"
  77. commonTitle="selected"
  78. :selectList="selectList"
  79. @change-select="changeSelect"
  80. >
  81. <fiberBunbleJc :bunbleData="bunbleData" />
  82. </DanelBd>
  83. </div>
  84. </transition>
  85. </div>
  86. <transition name="fade" mode="out-in">
  87. <div class="right-area" v-if="isShow">
  88. <!-- 右上区域 -->
  89. <div class="right-t">
  90. <DanelBd :moduleName="''" :contentStyle="{ contentH: '121px' }">
  91. <systemJc />
  92. </DanelBd>
  93. </div>
  94. <!-- 右中区域 -->
  95. <div class="right-c">
  96. <DanelBd
  97. :moduleName="'带式输送机防灭火监控系统'"
  98. :contentStyle="{ contentH: '180px' }"
  99. commonTitle="selected"
  100. :selectList="selectListDs"
  101. :selectValue="dsCode"
  102. @change-select="changeSelect"
  103. >
  104. <outFireJc :outFireData="outFireData" />
  105. </DanelBd>
  106. </div>
  107. <!-- 右下区域 -->
  108. <div class="right-b">
  109. <DanelBd
  110. :moduleName="'变电硐室防灭火监控系统'"
  111. :contentStyle="{ contentH: '180px' }"
  112. commonTitle="selected"
  113. :selectList="selectListBd"
  114. :selectValue="pointCodeBd"
  115. @change-select="changeSelect"
  116. >
  117. <substationJc :echartDatas="echartDatas" />
  118. </DanelBd>
  119. </div>
  120. <!-- 右底部区域 -->
  121. <div class="right-f">
  122. <DanelBd
  123. :moduleName="'安全监控系统'"
  124. :contentStyle="{ contentH: '215px' }"
  125. commonTitle="selected"
  126. :selectList="selectListAq"
  127. :selectValue="pointCodeAq"
  128. @change-select="changeSelect"
  129. >
  130. <safetyJc :safetyHead="safetyHead" :safetyList="safetyList" />
  131. </DanelBd>
  132. </div>
  133. </div>
  134. </transition>
  135. </div>
  136. </div>
  137. </template>
  138. <script setup lang="ts">
  139. import { ref, reactive, onMounted, onUnmounted } from 'vue';
  140. import DanelBd from '../../common/danelBd.vue';
  141. import workJc from './components/workJc.vue';
  142. import emptyJc from './components/emptyJc.vue';
  143. import fiberBunbleJc from './components/fiberBunbleJc.vue';
  144. import systemJc from './components/systemJc.vue';
  145. import outFireJc from './components/outFireJc.vue';
  146. import substationJc from './components/substationJc.vue';
  147. import safetyJc from './components/safetyJc.vue';
  148. import {
  149. getFireAreaInfo,
  150. getMbRealData,
  151. getSgjcPointInfo,
  152. getSgjcRealDataByPointCode,
  153. getInfosByAreaCode,
  154. getGxcwHistoryDataByPointCode,
  155. getZcHfWd,
  156. getHeadingFace,
  157. getMainTrafficYw,
  158. getDsWd,
  159. } from './firehome.api';
  160. let moduleSelect = reactive([
  161. { label: '工作面束管监测' },
  162. // { label: '工作面光钎监测' },
  163. ]);
  164. //是否显示左侧区域和右侧区域
  165. let isShow = ref(true);
  166. let areaCode = ref('');
  167. let pointCode = ref('');
  168. let areaCodeMb = ref('');
  169. let dsCode = ref('');
  170. let areaCodeBd = ref('');
  171. let pointCodeBd = ref('');
  172. let pointCodeAq = ref('one');
  173. //工作面风险监测数据
  174. let echartDataWork = reactive<any[]>([]);
  175. let cardData = reactive<any[]>([]);
  176. let selectList = reactive<any[]>([]);
  177. let bunbleData = reactive<any[]>([]);
  178. //密闭采空区数据
  179. let selectListMb = reactive<any[]>([]);
  180. let emptyData = reactive<any>([]);
  181. //带式输送机防灭火监控系统
  182. let selectListDs = reactive<any[]>([]);
  183. let outFireData = reactive<any[]>([]);
  184. //变电硐室
  185. let selectListBd = reactive<any[]>([]);
  186. let echartDatas = reactive({
  187. xData: [],
  188. yData: [],
  189. yData1: [],
  190. });
  191. //安全监控
  192. let selectListAq = reactive<any[]>([
  193. { label: '综放工作面传感器监测', value: 'one' },
  194. { label: '掘进工作面传感器监测', value: 'two' },
  195. { label: '主运输系统传感器监测', value: 'three' },
  196. { label: '机电硐室及配电点传感器监测', value: 'four' },
  197. ]);
  198. let safetyHead = reactive<any[]>([]);
  199. let safetyList = reactive<any[]>([]);
  200. //隐藏和显示左右侧区域
  201. function getScalc() {
  202. isShow.value = !isShow.value;
  203. }
  204. // https获取监测数据
  205. let timer: null | NodeJS.Timeout = null;
  206. function getMonitor() {
  207. timer = setTimeout(async () => {
  208. //工作面
  209. await getFireAreaInfoList();
  210. //密闭
  211. await getFireAreaInfoListMb();
  212. //带式
  213. await getFireAreaInfoListDs();
  214. //变电硐室
  215. await getFireAreaInfoListBd();
  216. //安全监控
  217. await getTableList();
  218. if (timer) {
  219. timer = null;
  220. }
  221. getMonitor();
  222. }, 5000);
  223. }
  224. //下拉选项切换
  225. function changeSelect(data) {
  226. console.log(data, '下拉------');
  227. switch (data.label) {
  228. case '密闭采空区监测系统':
  229. areaCodeMb.value = data.value;
  230. getMbRealDataList();
  231. break;
  232. case '工作面束管监测':
  233. pointCode.value = data.value;
  234. getSgjcRealDataByPointCodeList();
  235. break;
  236. case '带式输送机防灭火监控系统':
  237. dsCode.value = data.value;
  238. getFireAreaInfoListDs();
  239. break;
  240. case '变电硐室防灭火监控系统':
  241. pointCodeBd.value = data.value;
  242. getGxcwHistoryDataByPointCodeList();
  243. break;
  244. case '安全监控系统':
  245. pointCodeAq.value = data.value;
  246. getTableList();
  247. break;
  248. }
  249. }
  250. //获取工作面风险监测数据
  251. async function getFireAreaInfoList() {
  252. let res = await getFireAreaInfo({ fireCauseType: 2 });
  253. if (res.length != 0) {
  254. echartDataWork.length = 0;
  255. cardData.length = 0;
  256. let data = res.filter((v) => v.areaType == 2);
  257. data.forEach((el) => {
  258. cardData.push({
  259. title: '风险',
  260. val:
  261. el.warningLevel == 1
  262. ? '低'
  263. : el.warningLevel == 2
  264. ? '中'
  265. : el.warningLevel == 3
  266. ? '较大'
  267. : el.warningLevel == 4
  268. ? '重大'
  269. : '--',
  270. label: el.areaName,
  271. title1: '温度最大值',
  272. val1: el.infoTypeTwo.maxTemperature,
  273. });
  274. });
  275. areaCode.value = data[0].areaCode;
  276. //工作面束管监测
  277. getSgjcPointInfoList();
  278. }
  279. }
  280. //获取密闭下拉列表
  281. async function getFireAreaInfoListMb() {
  282. let res = await getFireAreaInfo({ fireCauseType: 2 });
  283. console.log(res, '密闭数据');
  284. if (res.length != 0) {
  285. selectListMb.length = 0;
  286. let dataMb = res.filter((m) => m.areaType == 1);
  287. dataMb.forEach((m) => {
  288. selectListMb.push({ label: m.areaName, value: m.areaCode });
  289. });
  290. areaCodeMb.value = areaCodeMb.value ? areaCodeMb.value : selectListMb[0]['value'];
  291. //获取密闭监测实时信息
  292. getMbRealDataList();
  293. }
  294. }
  295. //获取密闭监测实时信息
  296. async function getMbRealDataList() {
  297. let res = await getMbRealData({ areaCode: areaCodeMb.value });
  298. console.log(res, '密闭监测实时信息');
  299. emptyData.length = 0;
  300. res.forEach((el) => {
  301. emptyData.push({ label: el.name, val: el.currentValue, unit: el.unit });
  302. });
  303. }
  304. //工作面束管监测
  305. async function getSgjcPointInfoList() {
  306. let res = await getSgjcPointInfo({ areaCode: areaCode.value });
  307. console.log(res, '工作面束管列表---');
  308. if (res.length != 0) {
  309. selectList.length = 0;
  310. res.forEach((el) => {
  311. selectList.push({ label: el.pointName, value: el.pointCode });
  312. });
  313. pointCode.value = pointCode.value ? pointCode.value : selectList[0]['value'];
  314. //获取工作面束管测点实时数据
  315. getSgjcRealDataByPointCodeList();
  316. }
  317. }
  318. //获取工作面束管测点实时数据
  319. async function getSgjcRealDataByPointCodeList() {
  320. let res = await getSgjcRealDataByPointCode({ pointCode: pointCode.value });
  321. console.log(res, '束管测点实时数据---');
  322. if (res.length != 0) {
  323. bunbleData.length = 0;
  324. res.forEach((el) => {
  325. bunbleData.push({
  326. type: el.name,
  327. label: '最大浓度',
  328. val: el.currentValue,
  329. label1: '位置',
  330. val1: el.position,
  331. label2: '时间',
  332. val2: el.time,
  333. unit: el.unit,
  334. });
  335. });
  336. }
  337. }
  338. //带式输送机防灭火监控系统
  339. async function getFireAreaInfoListDs() {
  340. const res = await getFireAreaInfo({});
  341. if (res.length != 0) {
  342. selectListDs.length = 0;
  343. outFireData.length = 0;
  344. let dataDs = res.filter((m) => m.areaType == 4);
  345. console.log(dataDs, '带式输送机防灭火');
  346. dataDs.forEach((el) => {
  347. selectListDs.push({ label: el.areaName, value: el.areaName });
  348. });
  349. dsCode.value = dsCode.value ? dsCode.value : selectListDs[0].value;
  350. let dataName = dataDs.filter((v) => v.areaName == dsCode.value)[0];
  351. outFireData.push(
  352. { title: '光钎预警', val: dataName.infoTypeTwo.maxTemperature, dw: '℃', label: '最高温度' },
  353. {
  354. title: '一氧化碳预警',
  355. val: dataName.infoTypeTwo.returnAirCornerCO,
  356. dw: 'ppm',
  357. label: '最高浓度',
  358. },
  359. { title: '烟雾预警', val: dataName.infoTypeTwo.hazard, dw: '', label: '状态' },
  360. { title: '火焰预警', val: '--', dw: '', label: '状态' },
  361. { title: '喷粉阀门', val: '--', dw: '', label: '开关量' },
  362. );
  363. }
  364. }
  365. //变电硐室防灭火监控系统
  366. async function getFireAreaInfoListBd() {
  367. const res = await getFireAreaInfo({});
  368. if (res.length != 0) {
  369. let dataBd = res.filter((m) => m.areaType == 5);
  370. console.log(dataBd, '变电硐室-----');
  371. areaCodeBd.value = dataBd[0].areaCode;
  372. //获取光钎条数及测点编号
  373. getInfosByAreaCodeList();
  374. }
  375. }
  376. //获取光钎条数及测点编号
  377. async function getInfosByAreaCodeList() {
  378. let res = await getInfosByAreaCode({ areaCode: areaCodeBd.value });
  379. console.log(res, 'res000999');
  380. if (res.length != 0) {
  381. selectListBd.length = 0;
  382. res.forEach((el) => {
  383. selectListBd.push({
  384. label: el.pointName,
  385. value: el.pointCode,
  386. });
  387. });
  388. pointCodeBd.value = pointCodeBd.value ? pointCodeBd.value : selectListBd[0].value;
  389. //获取光钎测温图表数据
  390. getGxcwHistoryDataByPointCodeList();
  391. }
  392. }
  393. //获取光钎测温图表数据
  394. async function getGxcwHistoryDataByPointCodeList() {
  395. let res = await getGxcwHistoryDataByPointCode({ pointCode: pointCodeBd.value });
  396. console.log(res, '光钎测温图表数据-------');
  397. echartDatas.xData.length = 0;
  398. echartDatas.yData.length = 0;
  399. echartDatas.yData1.length = 0;
  400. res.time.forEach((el) => {
  401. echartDatas.xData.push(el);
  402. });
  403. res.maxValue.forEach((el) => {
  404. echartDatas.yData.push(el);
  405. });
  406. res.minValue.forEach((el) => {
  407. echartDatas.yData1.push(el);
  408. });
  409. }
  410. //获取安全监控列表数据
  411. function getTableList() {
  412. switch (pointCodeAq.value) {
  413. case 'one':
  414. getZcHfWdList();
  415. break;
  416. case 'two':
  417. getHeadingFaceList();
  418. break;
  419. case 'three':
  420. getMainTrafficYwList();
  421. break;
  422. case 'four':
  423. getDsWdList();
  424. break;
  425. default:
  426. getZcHfWdList();
  427. break;
  428. }
  429. }
  430. //获取综放工作面传感器监测数据
  431. async function getZcHfWdList() {
  432. let res = await getZcHfWd();
  433. console.log(res, '综放工作面传感器监测数据');
  434. safetyHead.length = 0;
  435. safetyList.length = 0;
  436. safetyHead.push(
  437. { label: '测点位置' },
  438. { label: '温度(°C)' },
  439. { label: '预警级别' },
  440. { label: '时间' },
  441. );
  442. if (res.length != 0) {
  443. res.forEach((el) => {
  444. safetyList.push({
  445. address: el.nodePlacement,
  446. temp: el.detectValue + '',
  447. grade: el.warningMsg,
  448. time: el.dateTime,
  449. });
  450. });
  451. }
  452. }
  453. //获取掘进工作面传感器监测数据
  454. async function getHeadingFaceList() {
  455. let res = await getHeadingFace();
  456. safetyHead.length = 0;
  457. safetyList.length = 0;
  458. safetyHead.push(
  459. { label: '测点位置' },
  460. { label: 'CO浓度(%)' },
  461. { label: '温度' },
  462. { label: '预警级别' },
  463. { label: '时间' },
  464. );
  465. console.log(res, '掘进工作面传感器监测数据');
  466. if (res.length != 0) {
  467. res.forEach((el) => {
  468. safetyList.push({
  469. address: el.name,
  470. nd: el.co + '',
  471. temp: el.wd + '',
  472. grade: el.warningMsg,
  473. time: el.dateTime,
  474. });
  475. });
  476. }
  477. }
  478. //获取运输系统烟雾传感器数据
  479. async function getMainTrafficYwList() {
  480. let res = await getMainTrafficYw();
  481. safetyHead.length = 0;
  482. safetyList.length = 0;
  483. safetyHead.push(
  484. { label: '测点位置' },
  485. { label: '温度(°C)' },
  486. { label: '预警级别' },
  487. { label: '时间' },
  488. );
  489. console.log(res, '运输系统烟雾传感器数据');
  490. if (res.length != 0) {
  491. res.forEach((el) => {
  492. safetyList.push({
  493. address: el.nodePlacement,
  494. temp: el.detectValue + '',
  495. grade: el.warningMsg,
  496. time: el.dateTime,
  497. });
  498. });
  499. }
  500. }
  501. //获取机电硐室传感器数据
  502. async function getDsWdList() {
  503. let res = await getDsWd();
  504. console.log(res, '机电硐室传感器数据');
  505. safetyHead.length = 0;
  506. safetyList.length = 0;
  507. safetyHead.push(
  508. { label: '测点位置' },
  509. { label: '温度(°C)' },
  510. { label: '预警级别' },
  511. { label: '时间' },
  512. );
  513. if (res.length != 0) {
  514. res.forEach((el) => {
  515. safetyList.push({
  516. address: el.nodePlacement,
  517. temp: el.detectValue + '',
  518. grade: el.warningMsg,
  519. time: el.dateTime,
  520. });
  521. });
  522. }
  523. }
  524. onMounted(() => {
  525. //工作面
  526. getFireAreaInfoList();
  527. //密闭
  528. getFireAreaInfoListMb();
  529. //带式
  530. getFireAreaInfoListDs();
  531. //变电硐室
  532. getFireAreaInfoListBd();
  533. //安全监控
  534. getTableList();
  535. getMonitor();
  536. });
  537. onUnmounted(() => {
  538. if (timer) {
  539. clearTimeout(timer);
  540. timer = null;
  541. }
  542. });
  543. </script>
  544. <style lang="less" scoped>
  545. @font-face {
  546. font-family: douyuFont;
  547. src: url('../../../../assets/font/douyuFont.otf');
  548. }
  549. .fireHome {
  550. position: relative;
  551. // width: calc(100% - 20px);
  552. // height: calc(100vh - 82px);
  553. width: 100%;
  554. // height: calc(100vh - 70px);
  555. height: 875px;
  556. // margin-top: 50px;
  557. .moduleArea {
  558. width: 100%;
  559. height: 100%;
  560. }
  561. .main-container {
  562. display: flex;
  563. position: absolute;
  564. top: 0;
  565. left: 0;
  566. box-sizing: border-box;
  567. justify-content: space-between;
  568. width: 100%;
  569. height: 100%;
  570. padding: 15px 10px;
  571. .left-area {
  572. display: flex;
  573. flex-direction: column;
  574. align-items: center;
  575. justify-content: space-between;
  576. // width: 30%;
  577. width: 392px;
  578. height: 100%;
  579. margin-right: 15px;
  580. .left-t {
  581. position: relative;
  582. width: 100%;
  583. // height: 121px;
  584. height: 100px;
  585. background: url('../../../../assets/images/fire/firehome/qkjaq.png') no-repeat center;
  586. background-size: 100% 100%;
  587. .tcontent-area {
  588. display: flex;
  589. position: absolute;
  590. top: 50%;
  591. left: 0;
  592. box-sizing: border-box;
  593. align-items: center;
  594. justify-content: space-around;
  595. width: 100%;
  596. height: 90px;
  597. padding: 0 15px;
  598. transform: translate(0, -50%);
  599. .tcontent-l {
  600. display: flex;
  601. flex: 1;
  602. flex-direction: column;
  603. align-items: center;
  604. justify-content: center;
  605. height: 100%;
  606. color: #9da5aa;
  607. font-size: 14px;
  608. letter-spacing: 2px;
  609. }
  610. .tcontent-c {
  611. display: flex;
  612. flex: 3;
  613. flex-direction: column;
  614. align-items: center;
  615. justify-content: center;
  616. height: 100%;
  617. }
  618. .tcontent-r {
  619. display: flex;
  620. flex: 1;
  621. flex-direction: column;
  622. align-items: center;
  623. justify-content: center;
  624. height: 100%;
  625. color: #9da5aa;
  626. font-size: 14px;
  627. letter-spacing: 2px;
  628. }
  629. }
  630. }
  631. .left-c {
  632. width: 100%;
  633. }
  634. .left-b {
  635. width: 100%;
  636. }
  637. .left-f {
  638. width: 100%;
  639. }
  640. }
  641. .center-area {
  642. display: flex;
  643. flex-direction: column;
  644. align-items: center;
  645. justify-content: space-between;
  646. width: calc(100% - 814px);
  647. .center-t {
  648. position: relative;
  649. width: 100%;
  650. height: 60%;
  651. margin-bottom: 15px;
  652. overflow: hidden;
  653. .center-scalc {
  654. position: absolute;
  655. top: 10px;
  656. left: 10px;
  657. width: 50px;
  658. height: 50px;
  659. background-color: rgb(30 58 117 / 41.8%);
  660. img {
  661. position: absolute;
  662. top: 50%;
  663. left: 50%;
  664. width: 37px;
  665. height: 41px;
  666. transform: translate(-50%, -50%);
  667. cursor: pointer;
  668. &:hover {
  669. width: 43px;
  670. height: 47px;
  671. background-color: rgb(100 228 185 / 6.27%);
  672. }
  673. }
  674. }
  675. }
  676. .center-b {
  677. width: 100%;
  678. height: calc(40% - 15px);
  679. }
  680. }
  681. .center-area1 {
  682. display: flex;
  683. flex-direction: column;
  684. align-items: center;
  685. justify-content: space-between;
  686. width: 100%;
  687. .center-t1 {
  688. position: relative;
  689. width: 100%;
  690. height: 100%;
  691. margin-bottom: 15px;
  692. overflow: hidden;
  693. .center-scalc {
  694. position: absolute;
  695. top: 10px;
  696. left: 10px;
  697. width: 50px;
  698. height: 50px;
  699. background-color: rgb(30 58 117 / 41.8%);
  700. img {
  701. position: absolute;
  702. top: 50%;
  703. left: 50%;
  704. width: 37px;
  705. height: 41px;
  706. transform: translate(-50%, -50%);
  707. cursor: pointer;
  708. &:hover {
  709. width: 43px;
  710. height: 47px;
  711. background-color: rgb(100 228 185 / 6.27%);
  712. }
  713. }
  714. }
  715. }
  716. }
  717. .right-area {
  718. display: flex;
  719. flex-direction: column;
  720. align-items: center;
  721. justify-content: space-between;
  722. // width: 30%;
  723. width: 392px;
  724. height: 100%;
  725. margin-left: 15px;
  726. .right-t {
  727. width: 100%;
  728. }
  729. .right-c {
  730. width: 100%;
  731. }
  732. .right-b {
  733. width: 100%;
  734. }
  735. .right-f {
  736. width: 100%;
  737. }
  738. }
  739. }
  740. /* fade.css */
  741. .fade-enter-active {
  742. transition: opacity 2.5s ease;
  743. /* 设置过渡时间为1秒 */
  744. }
  745. .fade-leave-active {
  746. transition: opacity 0.5s ease;
  747. /* 设置过渡时间为1秒 */
  748. }
  749. .fade-enter,
  750. .fade-leave-to {
  751. opacity: 0;
  752. /* 初始状态为不可见 */
  753. }
  754. }
  755. </style>