BioSafety.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927
  1. <template>
  2. <div class="bioSafety">
  3. <div class="bio-flex">
  4. <div class="bio-flex-left">
  5. <div class="bio-title">
  6. <div class="bio-title-left"></div>
  7. <div class="bio-title-center">门卫管控</div>
  8. <div class="bio-title-right"></div>
  9. </div>
  10. <div class="bio-video">
  11. <div class="kuang"></div>
  12. </div>
  13. <div class="bio-out">
  14. <div class="bio-out-center">
  15. <div class="out-img"></div>
  16. <div style="color: white; font-size: 16px">
  17. <p>违规次数</p>
  18. <p style="font-size: 22px; font-weight: 600">27</p>
  19. </div>
  20. </div>
  21. <div class="bio-out-center">
  22. <div class="out-img"></div>
  23. <div style="color: white; font-size: 16px">
  24. <p>违规次数</p>
  25. <p style="font-size: 22px; font-weight: 600">27</p>
  26. </div>
  27. </div>
  28. </div>
  29. </div>
  30. <div class="bio-flex-center">
  31. <div class="bio-title">
  32. <div class="bio-title-left-1"></div>
  33. <div class="bio-title-center-1">车辆管理</div>
  34. <div class="bio-title-right-1"></div>
  35. </div>
  36. <div class="bio-content flex">
  37. <div class="bio-content-left">
  38. <div class="box">
  39. <div class="circle"></div>
  40. <div class="price">
  41. <strong class="price-size">15.2</strong>
  42. <span>分钟</span>
  43. </div>
  44. <div class="text">平均洗消时长</div>
  45. </div>
  46. <div class="box">
  47. <div class="circle"></div>
  48. <div class="price">
  49. <strong class="price-size">15.2</strong>
  50. <span>分钟</span>
  51. </div>
  52. <div class="text">平均熏蒸时长</div>
  53. </div>
  54. </div>
  55. <div class="bio-content-right"
  56. v-loading="carLoading"
  57. element-loading-text="拼命加载中"
  58. element-loading-spinner="el-icon-loading"
  59. element-loading-background="rgba(0, 0, 0, 0.8)">
  60. <swiper style="height: 100%; margin-top: auto; margin-bottom: auto;" class="swiper" :options="swiperOption">
  61. <swiper-slide v-for="(item, i) in carListContent" :key="i">
  62. <div class="case" @click="open(item, 1)">
  63. <div class="case-left1">
  64. <img style="align-items: center;" :src="item.originalPicPath" width="100%" alt="">
  65. </div>
  66. <div class="case-right">
  67. <div class="case-time">{{ item.capTimeStr }}</div>
  68. <div class="case-content">
  69. <div class="content-grid">
  70. <span>区域:</span>
  71. <span>{{item.devChnName}}</span>
  72. </div>
  73. <div class="content-grid">
  74. <span>车牌号:</span>
  75. <span>{{item.carNum ? item.carNum : '未识别'}}</span>
  76. </div>
  77. <div class="content-grid">
  78. <span>方向:</span>
  79. <span>{{item.carDirectStr}}</span>
  80. </div>
  81. <div class="content-grid">
  82. <span>车辆颜色:</span>
  83. <span>{{item.parkingCarColor}}</span>
  84. </div>
  85. </div>
  86. </div>
  87. </div>
  88. </swiper-slide>
  89. </swiper>
  90. </div>
  91. </div>
  92. <div class="bio-content"
  93. v-loading="carsLoading"
  94. element-loading-text="拼命加载中"
  95. element-loading-spinner="el-icon-loading"
  96. element-loading-background="rgba(0, 0, 0, 0.8)">
  97. <chart-bar :data="carList"></chart-bar>
  98. </div>
  99. </div>
  100. <div class="bio-flex-center">
  101. <div class="bio-title">
  102. <div class="bio-title-left-1"></div>
  103. <div class="bio-title-center-1">门禁管理</div>
  104. <div class="bio-title-right-1"></div>
  105. </div>
  106. <div class="bio-content flex">
  107. <div class="bio-content-left">
  108. <div class="box">
  109. <div class="circle"></div>
  110. <div class="price">
  111. <strong class="price-size">{{enterPerson}}</strong>
  112. <span>人次</span>
  113. </div>
  114. <div class="text">今日进入人数</div>
  115. </div>
  116. <div class="box">
  117. <div class="circle"></div>
  118. <div class="price">
  119. <strong class="price-size">{{outPerson}}</strong>
  120. <span>次</span>
  121. </div>
  122. <div class="text">今日违规次数</div>
  123. </div>
  124. </div>
  125. <div class="bio-content-right" v-loading="personLoading"
  126. element-loading-text="拼命加载中"
  127. element-loading-spinner="el-icon-loading"
  128. element-loading-background="rgba(0, 0, 0, 0.8)">
  129. <swiper style="height: 100%; margin-top: auto; margin-bottom: auto;" class="swiper" :options="swiperOption">
  130. <swiper-slide v-for="(item, i) in personList" :key="i">
  131. <div class="case" @click="open(item, 2)">
  132. <div class="case-left1">
  133. <img :src="item.recordImage" width="100%" alt="">
  134. </div>
  135. <div class="case-right">
  136. <div class="case-time">{{item.swingTime}}</div>
  137. <div style="text-align: left; margin-left: 10px">
  138. <div style="color: white; line-height: 30px">
  139. <span>姓名:</span>
  140. <span>{{item.personName}}</span>
  141. </div>
  142. <div style="color: white; line-height: 30px">
  143. 进入区域:
  144. <span style="padding-left: 10px">{{item.deviceName}}</span>
  145. </div>
  146. </div>
  147. </div>
  148. </div>
  149. </swiper-slide>
  150. </swiper>
  151. </div>
  152. </div>
  153. <div class="bio-content" v-loading="personChartLoading"
  154. element-loading-text="拼命加载中"
  155. element-loading-spinner="el-icon-loading"
  156. element-loading-background="rgba(0, 0, 0, 0.8)">
  157. <chart-bar :data="data1"></chart-bar>
  158. </div>
  159. </div>
  160. </div>
  161. <div class="bio-flex-1">
  162. <div class="bio-flex-1-left">
  163. <div class="bio-title">
  164. <div class="bio-title-left"></div>
  165. <div class="bio-title-center">人员管理</div>
  166. <div class="bio-title-right"></div>
  167. </div>
  168. <div class="bio-vertical">
  169. <div class="bio-vertical-left">
  170. <div class="bio-vertical-title">
  171. <div class="title-left"></div>
  172. <div class="title-center">
  173. <span>进出人次</span>
  174. <strong>&nbsp;126</strong>
  175. </div>
  176. <div class="title-right"></div>
  177. </div>
  178. <div class="bio-vertical-content">
  179. <div class="content-img"></div>
  180. <div style="color: white; font-size: 14px">
  181. <p>正常进入</p>
  182. <span><strong style="font-size: 22px; font-weight: 600">99</strong>人次</span>
  183. </div>
  184. </div>
  185. <div class="bio-vertical-content">
  186. <div class="content-img content-img-1"></div>
  187. <div style="color: white; font-size: 14px">
  188. <p>违规次数</p>
  189. <span><strong style="font-size: 22px; font-weight: 600">27</strong>人次</span>
  190. </div>
  191. </div>
  192. </div>
  193. <div class="bio-vertical-right">
  194. <chart-bar :data="data2"></chart-bar>
  195. </div>
  196. </div>
  197. </div>
  198. <div class="bio-flex-1-center">
  199. <div class="bio-title">
  200. <div class="bio-title-left"></div>
  201. <div class="bio-title-center">车辆烘干</div>
  202. <div class="bio-title-right"></div>
  203. </div>
  204. <div class="bio-vertical" v-loading="hgLoading"
  205. element-loading-text="拼命加载中"
  206. element-loading-spinner="el-icon-loading"
  207. element-loading-background="rgba(0, 0, 0, 0.8)">
  208. <chart-bar :data="data3"></chart-bar>
  209. </div>
  210. </div>
  211. <div class="bio-flex-1-left">
  212. <div class="bio-title">
  213. <div class="bio-title-left"></div>
  214. <div class="bio-title-center">死猪管控</div>
  215. <div class="bio-title-right"></div>
  216. </div>
  217. <div class="bio-vertical">
  218. <div class="bio-vertical-left">
  219. <div class="bio-vertical-title">
  220. <div class="title-left"></div>
  221. <div class="title-center">
  222. <span>视频抓取数</span>
  223. <strong>&nbsp;{{value1}}</strong>
  224. </div>
  225. <div class="title-right"></div>
  226. </div>
  227. <div class="bio-vertical-content">
  228. <div class="content-img content-img-2"></div>
  229. <div style="color: white; font-size: 14px">
  230. <p>七日抓取次数</p>
  231. <span><strong style="font-size: 22px; font-weight: 600">{{value2}}</strong></span>
  232. </div>
  233. </div>
  234. <div class="bio-vertical-content">
  235. <div class="content-img content-img-3"></div>
  236. <div style="color: white; font-size: 14px">
  237. <p>最近抓取时间</p>
  238. <span><strong style="font-size: 22px; font-weight: 600">{{(value3).slice(5,16)}}</strong></span>
  239. </div>
  240. </div>
  241. </div>
  242. <div class="bio-vertical-right" v-loading="sizhuLoading"
  243. element-loading-text="拼命加载中"
  244. element-loading-spinner="el-icon-loading"
  245. element-loading-background="rgba(0, 0, 0, 0.8)">
  246. <swiper style="height: 100%; margin-top: auto; margin-bottom: auto;" class="swiper" :options="swiperOption">
  247. <swiper-slide v-for="(item, i) in sizhuList" :key="i">
  248. <div class="case case1" @click="open(item, 3)">
  249. <div class="case-left">
  250. <img :src="item.alarmPicture" width="100%" alt="">
  251. </div>
  252. <div class="case-right">
  253. <div class="case-time">{{ item.alarmDate }}</div>
  254. <div class="case-content1">
  255. <span>位置:</span>
  256. <span>{{item.alarmPosition}}</span>
  257. </div>
  258. </div>
  259. </div>
  260. </swiper-slide>
  261. </swiper>
  262. </div>
  263. </div>
  264. </div>
  265. </div>
  266. <div class="bio-dialog" v-show="dialog" @click="dialog = false">
  267. <div class="dialog-content" v-if="type === 1 || type === 3">
  268. <img :src="selectImg" width="100%" alt="">
  269. </div>
  270. <div class="dialog-content1" v-else-if="type === 2">
  271. <img :src="selectImg" width="100%" alt="">
  272. </div>
  273. </div>
  274. </div>
  275. </template>
  276. <script>
  277. import { swiper, swiperSlide } from 'vue-awesome-swiper'
  278. import 'swiper/css/swiper.css'
  279. import ChartBar from "@/views/BioSafety/chart/ChartBar";
  280. import {getCar, getRecord, getSizhu, getCarList, getPersonList, getFaceToken, getSizhuList, getHoure, getDoor} from "@/utils/api";
  281. import axios from "axios";
  282. import {timeDate} from "@/utils";
  283. export default {
  284. name: "BioSafety",
  285. components: {
  286. swiper,
  287. swiperSlide,
  288. ChartBar
  289. },
  290. data() {
  291. return {
  292. swiperOption: {
  293. direction: 'vertical',
  294. slidesPerView: 3,
  295. slidesPerColumn: 1,
  296. slidesPerGroup: 3,
  297. // spaceBetween: 30,
  298. autoplay: {
  299. delay: 3000,
  300. disableOnInteraction: false
  301. },
  302. // pagination: {
  303. // el: '.swiper-pagination',
  304. // clickable: true
  305. // }
  306. },
  307. carList: {
  308. id: 11,
  309. time: [],
  310. data: [],
  311. name: '',
  312. unit: '次'
  313. },
  314. data1: {
  315. id: 1,
  316. time: [],
  317. data: [],
  318. name: '',
  319. unit: '人次'
  320. },
  321. data2: {
  322. id: 2,
  323. time: ['8:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00'],
  324. data: [21, 13, 10, 14, 20, 23, 21],
  325. name: '',
  326. unit: '人次'
  327. },
  328. data3: {
  329. id: 3,
  330. time: [],
  331. data: [],
  332. name: '',
  333. unit: '次'
  334. },
  335. value1: '',
  336. value2: '',
  337. value3: '',
  338. carListContent: [],
  339. dialog: false,
  340. selectImg: '',
  341. type: 1,
  342. personList: [],
  343. sizhuList: [],
  344. token: '',
  345. carLoading: true,
  346. carsLoading: true,
  347. personLoading: true,
  348. personChartLoading: true,
  349. sizhuLoading: true,
  350. hgLoading: true,
  351. enterPerson: '',
  352. outPerson: ''
  353. }
  354. },
  355. methods: {
  356. init() {
  357. var that = this;
  358. axios.all([
  359. getCar({}),
  360. getRecord({})
  361. ]).then(axios.spread(function (res1, res2){
  362. if(res1.code === 0) {
  363. that.carList.time = [];
  364. that.carList.data = [];
  365. res1.data.forEach(item => {
  366. that.carList.time.push(item.time);
  367. that.carList.data.push(item.value);
  368. })
  369. that.carsLoading = false
  370. }
  371. if(res2.code === 0) {
  372. that.data1.time = [];
  373. that.data1.data = [];
  374. res2.data.forEach(item => {
  375. that.data1.time.push(item.time);
  376. that.data1.data.push(item.value);
  377. })
  378. that.personChartLoading = false;
  379. }
  380. }))
  381. getSizhu({}).then(res => {
  382. if(res.code=== 0) {
  383. this.value1 = res.data.value2;
  384. this.value2 = res.data.value1;
  385. this.value3 = res.data.value3;
  386. }
  387. })
  388. // 车辆管理列表
  389. getCarList({pageNum:1,pageSize: 21}).then(res => {
  390. if(res.code == 200) {
  391. that.carLoading = false;
  392. const result = JSON.parse(res.result);
  393. this.carListContent = result.data.pageData;
  394. this.carListContent.forEach((item) => {
  395. item.originalPicPath = `https://36.26.62.70:447/evo-apigw/${item.originalPicPath}`;
  396. item.devChnName = item.devChnName.split("_")[0];
  397. });
  398. // this.carListContent = res.data;
  399. }
  400. })
  401. // 门禁管理列表
  402. let params1 = {
  403. openType: 61,
  404. pageNum:1,
  405. pageSize: 21,
  406. startSwingTime: timeDate(new Date().getTime()) + '00:00:00',
  407. endSwingTime: timeDate(new Date().getTime()) + '23:59:59',
  408. }
  409. getPersonList(params1).then(async res => {
  410. let result = JSON.parse(res.result);
  411. this.personList = result.data.pageData;
  412. const { token } = await getFaceToken();
  413. this.personList.forEach((item) => {
  414. item.channelName = item.channelName.split("人脸门禁")[0];
  415. item.recordImage = `https://36.26.62.70:447/evo-pic/${item.recordImage}?token=${token}&oss_addr=172.16.3.223:8925`;
  416. });
  417. that.personLoading = false;
  418. let queryParams = {
  419. pageNum: 1,
  420. pageSize: 21,
  421. alarmStartDateString: timeDate(new Date().getTime()) + " 00:00:00",
  422. alarmEndDateString: timeDate(new Date().getTime()) + " 23:59:59",
  423. nodeCodeList: [
  424. "1002874$1$0$0",
  425. "1002875$1$0$0",
  426. "1002876$1$0$0",
  427. "1002877$1$0$0",
  428. "1002878$1$0$0",
  429. "1002879$1$0$0",
  430. "1002880$1$0$0",
  431. "1002881$1$0$0",
  432. "1002882$1$0$0",
  433. "1002883$1$0$0",
  434. "1002884$1$0$0",
  435. "1002885$1$0$0",
  436. "1002886$1$0$0",
  437. "1002887$1$0$0",
  438. "1002888$1$0$0",
  439. "1002889$1$0$0",
  440. "1002890$1$0$0",
  441. "1002891$1$0$0",
  442. "1002892$1$0$0",
  443. "1002893$1$0$0",
  444. "1002894$1$0$0",
  445. "1002895$1$0$0",
  446. "1002896$1$0$0",
  447. "1002897$1$0$0",
  448. "1002898$1$0$0",
  449. "1002899$1$0$0",
  450. "1002900$1$0$0",
  451. "1002901$1$0$0",
  452. "1002902$1$0$0",
  453. "1002903$1$0$0",
  454. "1002904$1$0$0",
  455. "1002905$1$0$0",
  456. "1002906$1$0$0",
  457. "1002907$1$0$0",
  458. "1002908$1$0$0",
  459. "1002909$1$0$0",
  460. "1002910$1$0$0",
  461. "1002911$1$0$0",
  462. "1002912$1$0$0",
  463. "1002913$1$0$0",
  464. "1002939$1$0$0",
  465. "1002939$1$0$1",
  466. "1002939$1$0$2",
  467. "1002939$1$0$3",
  468. "1002939$1$0$4",
  469. "1002939$1$0$5",
  470. "1002939$1$0$6",
  471. "1002939$1$0$7",
  472. "1002939$1$0$8",
  473. "1002939$1$0$9",
  474. "1002940$1$0$0",
  475. "1002940$1$0$1",
  476. "1002940$1$0$2",
  477. "1002940$1$0$3",
  478. "1002940$1$0$4",
  479. "1002940$1$0$5",
  480. "1002940$1$0$6",
  481. "1002940$1$0$7",
  482. "1002939$1$0$10",
  483. "1002939$1$0$11",
  484. "1002939$1$0$12",
  485. "1002939$1$0$13",
  486. "1002939$1$0$14",
  487. "1002939$1$0$15",
  488. ],
  489. deviceCategory: 1,
  490. alarmType: 303,
  491. dbType: 0,
  492. };
  493. await getSizhuList(queryParams).then( res => {
  494. that.sizhuLoading = false;
  495. const result = JSON.parse(res.result);
  496. this.sizhuList = result.data.pageData;
  497. this.sizhuList.forEach((item) => {
  498. item.alarmPicture = `https://36.26.62.70:447/evo-pic/${item.alarmPicture}?token=${token}&oss_addr=172.16.3.223:8925`;
  499. });
  500. })
  501. getHoure({}).then(res => {
  502. if(res.code === 10000) {
  503. this.data3.time = [];
  504. this.data3.data = [];
  505. res.data.forEach(item => {
  506. this.data3.time.push(item.time);
  507. this.data3.data.push(item.value);
  508. })
  509. this.hgLoading = false;
  510. }
  511. })
  512. })
  513. // 门禁违规
  514. getDoor({}).then(res => {
  515. if(res.code === 0) {
  516. this.enterPerson = res.data.value1;
  517. this.outPerson = res.data.value2;
  518. }
  519. })
  520. },
  521. // 打开img
  522. open(item, num) {
  523. this.dialog = true;
  524. this.type = num;
  525. if(num === 1) {
  526. this.selectImg = item.originalPicPath;
  527. } else if(num === 2) {
  528. this.selectImg = item.recordImage;
  529. } else {
  530. this.selectImg = item.alarmPicture;
  531. }
  532. }
  533. },
  534. mounted() {
  535. this.init()
  536. }
  537. }
  538. </script>
  539. <style scoped>
  540. p{
  541. margin: 0;
  542. }
  543. .swiper-slide {
  544. height: 100px;
  545. }
  546. .bioSafety {
  547. width: 100%;
  548. height: 100%;
  549. box-sizing: border-box;
  550. padding: 20px 0 0 0;
  551. }
  552. .bio-flex {
  553. width: 100%;
  554. height: 560px;
  555. display: flex;
  556. justify-content: space-between;
  557. }
  558. .bio-flex-left {
  559. width: 770px;
  560. height: 100%;
  561. border: 1px solid rgb(121, 121, 121);
  562. }
  563. .bio-flex-center {
  564. width: 465px;
  565. height: 100%;
  566. border: 1px solid rgb(121, 121, 121);
  567. }
  568. .bio-title {
  569. width: 100%;
  570. height: 26px;
  571. display: flex;
  572. }
  573. .bio-video {
  574. width: 100%;
  575. height: 440px;
  576. box-sizing: border-box;
  577. padding: 20px;
  578. }
  579. .kuang {
  580. width: 100%;
  581. height: 100%;
  582. background: url("../../assets/BioSafety/kuang.png") no-repeat;
  583. background-size: 100% 100%;
  584. }
  585. .bio-out {
  586. width: 100%;
  587. height: calc(100% - 440px - 40px);
  588. display: flex;
  589. justify-content: space-around;
  590. }
  591. .bio-out-center {
  592. width: 280px;
  593. height: 100%;
  594. background: url("../../assets/BioSafety/base.jpg") no-repeat;
  595. background-size: 100% 100%;
  596. display: flex;
  597. align-items: center;
  598. justify-content: space-around;
  599. }
  600. .out-img {
  601. width: 54px;
  602. height: 54px;
  603. background: url("../../assets/BioSafety/u2500.svg") no-repeat;
  604. background-size: 100% 100%;
  605. }
  606. .bio-title-left {
  607. flex: 1;
  608. height: 26px;
  609. background: url("../../assets/BioSafety/u1717.svg") no-repeat;
  610. background-size: 100% 100%;
  611. position: relative;
  612. }
  613. .bio-title-left:before {
  614. content: '';
  615. height: 85%;
  616. border: 2px solid #66FFFF;
  617. position: absolute;
  618. top: 0;
  619. left: 0;
  620. }
  621. .bio-title-center {
  622. width: 120px;
  623. height: 26px;
  624. background: url("../../assets/BioSafety/u1719.svg") no-repeat;
  625. background-size: 100% 100%;
  626. line-height: 26px;
  627. color: white;
  628. font-size: 16px;
  629. }
  630. .bio-title-right {
  631. flex: 1;
  632. height: 26px;
  633. background: url("../../assets/BioSafety/u1718.svg") no-repeat;
  634. background-size: 100% 100%;
  635. position: relative;
  636. }
  637. .bio-title-right:after {
  638. content: '';
  639. height: 85%;
  640. border: 2px solid #66FFFF;
  641. position: absolute;
  642. top: 0;
  643. right: 0;
  644. }
  645. .bio-title-left-1 {
  646. width: 172.5px;
  647. height: 26px;
  648. background: url("../../assets/BioSafety/u1745.svg") no-repeat;
  649. background-size: 100% 100%;
  650. position: relative;
  651. }
  652. .bio-title-left-1:before {
  653. content: '';
  654. height: 85%;
  655. border: 2px solid #66FFFF;
  656. position: absolute;
  657. top: 0;
  658. left: 0;
  659. }
  660. .bio-title-center-1 {
  661. width: 120px;
  662. height: 26px;
  663. background: url("../../assets/BioSafety/u1719.svg") no-repeat;
  664. background-size: 100% 100%;
  665. line-height: 26px;
  666. color: white;
  667. font-size: 16px;
  668. }
  669. .bio-title-right-1 {
  670. width: 172.5px;
  671. height: 26px;
  672. background: url("../../assets/BioSafety/u1746.svg") no-repeat;
  673. background-size: 100% 100%;
  674. position: relative;
  675. }
  676. .bio-title-right-1:after {
  677. content: '';
  678. height: 85%;
  679. border: 2px solid #66FFFF;
  680. position: absolute;
  681. top: 0;
  682. right: 0;
  683. }
  684. .bio-content {
  685. width: 100%;
  686. height: calc((100% - 26px) / 2);
  687. }
  688. .flex {
  689. display: flex;
  690. justify-content: space-between;
  691. box-sizing: border-box;
  692. padding: 20px 10px;
  693. }
  694. .bio-content-left {
  695. width: 132px;
  696. height: 100%;
  697. }
  698. .bio-content-right {
  699. width: calc(100% - 142px);
  700. height: 100%;
  701. overflow: hidden;
  702. }
  703. .box {
  704. width: 100%;
  705. height: 113.5px;
  706. position: relative;
  707. }
  708. .circle {
  709. width: 90px;
  710. height: 90px;
  711. margin: 0 auto;
  712. background: url("../../assets/BioSafety/ciru.png") no-repeat;
  713. background-size: 100% 100%;
  714. transform: rotate(40deg);
  715. position: relative;
  716. }
  717. .price {
  718. width: 100%;
  719. text-align: center;
  720. color: #00D1E5;
  721. position: absolute;
  722. top: 35px;
  723. }
  724. .price-size {
  725. font-size: 18px;
  726. }
  727. .text {
  728. width: 100%;
  729. text-align: center;
  730. color: white;
  731. }
  732. .case {
  733. width: 100%;
  734. height: 100%;
  735. background: url("../../assets/BioSafety/some.png") no-repeat;
  736. background-size: 100% 100%;
  737. position: relative;
  738. display: flex;
  739. }
  740. .bio-flex-1 {
  741. width: 100%;
  742. height: calc(100% - 580px);
  743. margin-top: 20px;
  744. display: flex;
  745. justify-content: space-between;
  746. }
  747. .bio-flex-1-left {
  748. width: 600px;
  749. height: 100%;
  750. }
  751. .bio-flex-1-center {
  752. width: 500px;
  753. height: 100%;
  754. }
  755. .bio-vertical {
  756. width: 100%;
  757. height: calc(100% - 26px);
  758. box-sizing: border-box;
  759. padding: 10px;
  760. display: flex;
  761. justify-content: space-between;
  762. }
  763. .bio-vertical-left {
  764. width: 200px;
  765. height: 100%;
  766. }
  767. .bio-vertical-right {
  768. margin-left: 10px;
  769. flex: 1;
  770. }
  771. .bio-vertical-title {
  772. width: 100%;
  773. height: 25px;
  774. line-height: 25px;
  775. display: flex;
  776. justify-content: space-between;
  777. align-items: center;
  778. }
  779. .title-left {
  780. width: 16px;
  781. height: 100%;
  782. background: url("../../assets/BioSafety/u2475.svg") no-repeat;
  783. background-size: 100% 100%;
  784. }
  785. .title-center {
  786. flex: 1;
  787. font-size: 14px;
  788. color: #fff;
  789. text-align: center;
  790. }
  791. .title-center strong {
  792. font-size: 25px;
  793. }
  794. .title-right {
  795. width: 16px;
  796. height: 100%;
  797. background: url("../../assets/BioSafety/u2476.svg") no-repeat;
  798. background-size: 100% 100%;
  799. }
  800. .bio-vertical-content {
  801. width: 100%;
  802. height: 65px;
  803. background: url("../../assets/BioSafety/base.jpg") no-repeat;
  804. background-size: 100% 100%;
  805. margin-top: 30px;
  806. display: flex;
  807. align-items: center;
  808. justify-content: space-around;
  809. }
  810. .content-img {
  811. width: 40px;
  812. height: 40px;
  813. background: url("../../assets/BioSafety/u3222.png") no-repeat;
  814. background-size: 100% 100%;
  815. }
  816. .content-img-1 {
  817. background: url("../../assets/BioSafety/u2500.svg") no-repeat;
  818. background-size: 100% 100%;
  819. }
  820. .content-img-2 {
  821. background: url("../../assets/BioSafety/u2168.svg") no-repeat;
  822. background-size: 100% 100%;
  823. }
  824. .content-img-3 {
  825. background: url("../../assets/BioSafety/u2179.svg") no-repeat;
  826. background-size: 100% 100%;
  827. }
  828. .case1 {
  829. height: 60px;
  830. }
  831. .case-left1 {
  832. width: 60px;
  833. height: 100%;
  834. display: flex;
  835. align-items: center;
  836. }
  837. .case-left {
  838. width: 100px;
  839. height: 100%;
  840. }
  841. .case-right {
  842. flex: 1;
  843. }
  844. .case-time {
  845. width: 100%;
  846. height: 12px;
  847. box-sizing: border-box;
  848. line-height: 12px;
  849. text-align: left;
  850. /*text-align: center;*/
  851. font-size: 12px;
  852. color: #333
  853. }
  854. .case-box {
  855. width: 100%;
  856. height: calc(100% - 15px);
  857. display: flex;
  858. align-items: center;
  859. }
  860. .case-img {
  861. width: 60px;
  862. height: 100%;
  863. /*background-size: 100% 100%;*/
  864. }
  865. .case-img1 {
  866. width: 120px;
  867. height: 100%;
  868. /*background-size: 100% 100%;*/
  869. }
  870. .case-content {
  871. width: 100%;
  872. height: calc(100% - 14px);
  873. display: grid;
  874. grid-template-columns: repeat(2, 1fr);
  875. grid-template-rows: repeat(2, 1fr);
  876. grid-column-gap: 0px;
  877. grid-row-gap: 0px;
  878. }
  879. .case-content1 {
  880. width: 100%;
  881. height: calc(100% - 14px);
  882. text-align: center;
  883. color: white;
  884. line-height: 30px;
  885. }
  886. .content-grid {
  887. width: 100%;
  888. height: 100%;
  889. box-sizing: border-box;
  890. text-align: left;
  891. padding-left: 10px;
  892. line-height: 30px;
  893. color: white;
  894. }
  895. .bio-dialog {
  896. width: 100vw;
  897. height: 100vh;
  898. position: absolute;
  899. top: 0;
  900. left: 0;
  901. background-color: rgba(0,0,0 ,.6);
  902. z-index: 999;
  903. }
  904. .dialog-content {
  905. width: 50%;
  906. position: absolute;
  907. top: 50%;
  908. left: 50%;
  909. transform: translate(-50%, -50%);
  910. /*background-color: #fff;*/
  911. }
  912. .dialog-content1 {
  913. width: 15%;
  914. position: absolute;
  915. top: 50%;
  916. left: 50%;
  917. transform: translate(-50%, -50%);
  918. /*background-color: #fff;*/
  919. }
  920. </style>