index.vue 20 KB

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