新型管道消毒机前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

691 lines
18 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <template>
  2. <div class="test_container">
  3. <div class="common_set switch_wrap">
  4. <p class="title">加液蠕动泵</p>
  5. <!-- <div class="num">
  6. <van-field
  7. type="number"
  8. v-model="addLiquidVal"
  9. :clickable="true"
  10. :formatter="formatter6"
  11. readonly
  12. @click.stop="hideAllKeyboards(1)"
  13. class="add_liquid_input"
  14. />
  15. <p>g/min</p>
  16. </div> -->
  17. <div class="btn_wrap">
  18. <div
  19. :class="
  20. settingStore.chargingPumpRPM > 0
  21. ? 'open style-btn mg'
  22. : 'close style-btn mg'
  23. "
  24. @click="setAddLiquidConfig(1)"
  25. >
  26. 正转
  27. </div>
  28. <div
  29. :class="
  30. settingStore.chargingPumpRPM < 0
  31. ? 'open style-btn'
  32. : 'close style-btn'
  33. "
  34. @click="setAddLiquidConfig(5)"
  35. >
  36. 反转
  37. </div>
  38. </div>
  39. <div class="btn_wrap">
  40. <div
  41. :class="
  42. settingStore.chargingPumpRPM != 0
  43. ? 'open style-btn mg'
  44. : 'close style-btn mg'
  45. "
  46. @click="setAddLiquidConfig(1)"
  47. >
  48. 打开
  49. </div>
  50. <div
  51. :class="
  52. settingStore.chargingPumpRPM == 0
  53. ? 'open style-btn'
  54. : 'close style-btn'
  55. "
  56. @click="setAddLiquidConfig(3)"
  57. >
  58. 关闭
  59. </div>
  60. </div>
  61. </div>
  62. <div class="common_set switch_wrap">
  63. <p class="title">注射蠕动泵</p>
  64. <div class="num">
  65. <van-field
  66. type="number"
  67. :formatter="formatter7"
  68. v-model="addLiquidVal2"
  69. :clickable="true"
  70. readonly
  71. @click.stop="hideAllKeyboards(3)"
  72. class="add_liquid_input"
  73. />
  74. <p>g/min</p>
  75. </div>
  76. <div class="btn_wrap">
  77. <div
  78. :class="
  79. settingStore.sprinklerPumpRPM > 0
  80. ? 'open style-btn mg'
  81. : 'close style-btn mg'
  82. "
  83. @click="setAddLiquidConfig(2)"
  84. >
  85. 正转
  86. </div>
  87. <div
  88. :class="
  89. settingStore.sprinklerPumpRPM < 0
  90. ? 'open style-btn'
  91. : 'close style-btn'
  92. "
  93. @click="setAddLiquidConfig(6)"
  94. >
  95. 反转
  96. </div>
  97. </div>
  98. <div class="btn_wrap">
  99. <div
  100. :class="
  101. settingStore.sprinklerPumpRPM != 0
  102. ? 'open style-btn mg'
  103. : 'close style-btn mg'
  104. "
  105. @click="setAddLiquidConfig(2)"
  106. >
  107. 打开
  108. </div>
  109. <div
  110. :class="
  111. settingStore.sprinklerPumpRPM == 0
  112. ? 'open style-btn'
  113. : 'close style-btn'
  114. "
  115. @click="setAddLiquidConfig(4)"
  116. >
  117. 关闭
  118. </div>
  119. </div>
  120. </div>
  121. <div class="common_set switch_wrap">
  122. <p class="title">空压机</p>
  123. <p class="num">
  124. {{
  125. testStore?.airCompressorObj?.currentVal > 5000
  126. ? 5000
  127. : testStore?.airCompressorObj?.currentVal
  128. }}
  129. A
  130. </p>
  131. <div class="btn_wrap">
  132. <div
  133. :class="
  134. testStore.airCompressor ? 'open style-btn mg' : 'close style-btn mg'
  135. "
  136. @click="changeAirStatus(1)"
  137. >
  138. 打开
  139. </div>
  140. <div
  141. :class="
  142. !testStore.airCompressor ? 'open style-btn' : 'close style-btn'
  143. "
  144. @click="changeAirStatus(2)"
  145. >
  146. 关闭
  147. </div>
  148. </div>
  149. </div>
  150. <div class="common_set switch_wrap">
  151. <p class="title">风机</p>
  152. <p class="num">{{ testStore?.airBlowerObj?.currentVal }} A</p>
  153. <div class="btn_wrap">
  154. <div
  155. :class="
  156. testStore.draughtFan ? 'open style-btn mg' : 'close style-btn mg'
  157. "
  158. @click="changeDraughtStatus(1)"
  159. >
  160. 打开
  161. </div>
  162. <div
  163. :class="!testStore.draughtFan ? 'open style-btn ' : 'close style-btn'"
  164. @click="changeDraughtStatus(2)"
  165. >
  166. 关闭
  167. </div>
  168. </div>
  169. </div>
  170. <div class="common_set switch_wrap">
  171. <p class="title">加热片</p>
  172. <p class="num">{{ testStore?.heatingStripObj?.currentVal }} A</p>
  173. <div class="btn_wrap">
  174. <div
  175. :class="
  176. testStore.heatingStrip ? 'open style-btn mg' : 'close style-btn mg'
  177. "
  178. @click="changeHeatingStatus(1)"
  179. >
  180. 打开
  181. </div>
  182. <div
  183. :class="
  184. !testStore.heatingStrip ? 'open style-btn' : 'close style-btn'
  185. "
  186. @click="changeHeatingStatus(2)"
  187. >
  188. 关闭
  189. </div>
  190. </div>
  191. </div>
  192. <div class="common_set switch_wrap">
  193. <p class="title">空压机通道</p>
  194. <div class="btn_wrap">
  195. <div
  196. :class="
  197. testStore.airCompressorChannel
  198. ? 'open style-btn mg'
  199. : 'close style-btn mg'
  200. "
  201. @click="changeChannel(1)"
  202. >
  203. 打开
  204. </div>
  205. <div
  206. :class="
  207. !testStore.airCompressorChannel
  208. ? 'open style-btn'
  209. : 'close style-btn'
  210. "
  211. @click="changeChannel(2)"
  212. >
  213. 关闭
  214. </div>
  215. </div>
  216. </div>
  217. <div class="common_set update_wrap">
  218. <p class="title">水浸1</p>
  219. <p class="num">{{ testStore.waterImmersionSensor1 ? '有水' : '没水' }}</p>
  220. <div class="btn_wrap style-btn" @click="handleUpdate" style="opacity: 0">
  221. 更新读取水浸状态
  222. </div>
  223. </div>
  224. <div class="common_set update_wrap">
  225. <p class="title">水浸2</p>
  226. <p class="num">{{ testStore.waterImmersionSensor2 ? '有水' : '没水' }}</p>
  227. <div class="btn_wrap style-btn" @click="handleUpdate" style="opacity: 0">
  228. 更新读取水浸状态
  229. </div>
  230. </div>
  231. <div class="common_set update_wrap">
  232. <p class="title">液位</p>
  233. <p class="num">
  234. {{
  235. deviceStore.disinfectantCapacity <= 0
  236. ? 0
  237. : deviceStore.disinfectantCapacity
  238. }}
  239. g
  240. </p>
  241. <div class="btn_wrap style-btn" @click="handleUpdate" style="opacity: 0">
  242. 更新读取液位状态
  243. </div>
  244. </div>
  245. <div class="common_set info_wrap">
  246. <p class="title">仓内</p>
  247. <p class="info">温度 {{ deviceStore.binTemperature }} </p>
  248. <p class="info">湿度 {{ deviceStore.binHumidity }} </p>
  249. <p class="info">过氧化氢浓度 {{ deviceStore.binHP }} PPM</p>
  250. </div>
  251. <!-- <div class="common_set info_wrap">
  252. <p class="title">环境1</p>
  253. <p class="info">温度 {{ deviceStore.envirTemperature1 }} </p>
  254. <p class="info">湿度 {{ deviceStore.envirHumidity1 }} </p>
  255. <p class="info">过氧化氢浓度 {{ deviceStore.envirHP1 }} PPM</p>
  256. </div>
  257. <div class="common_set info_wrap">
  258. <p class="title">环境2</p>
  259. <p class="info">温度 {{ deviceStore.envirTemperature2 }} </p>
  260. <p class="info">湿度 {{ deviceStore.envirHumidity2 }} </p>
  261. <p class="info">过氧化氢浓度 {{ deviceStore.envirHP2 }} PPM</p>
  262. </div> -->
  263. <van-number-keyboard
  264. v-model="addLiquidVal"
  265. @input="val => handleInput(val, 1)"
  266. :show="numberKeyboardShowVal"
  267. @blur="numberKeyboardShowVal = false"
  268. />
  269. <van-number-keyboard
  270. @input="val => handleInput(val, 2)"
  271. v-model="addLiquidPower"
  272. :show="numberKeyboardShowPower"
  273. @blur="numberKeyboardShowPower = false"
  274. />
  275. <van-number-keyboard
  276. @input="val => handleInput(val, 3)"
  277. v-model="addLiquidVal2"
  278. :show="numberKeyboardShowVal2"
  279. @blur="numberKeyboardShowVal2 = false"
  280. />
  281. <van-number-keyboard
  282. @input="val => handleInput(val, 4)"
  283. v-model="addLiquidPower2"
  284. :show="numberKeyboardShowPower2"
  285. @blur="numberKeyboardShowPower2 = false"
  286. />
  287. </div>
  288. </template>
  289. <script setup>
  290. import { ref } from 'vue'
  291. import {
  292. useTestStore,
  293. useDeviceStore,
  294. useWebSocketStore,
  295. useSettingStore,
  296. } from '@/store'
  297. import {
  298. someAirSwitchJSON,
  299. liquidpumpctrlJSON,
  300. airCompressor_channelCtrlJSON,
  301. getStateJSON,
  302. addLiquidCtrlJSON,
  303. test_replenishingFluidsPumpCtrJSON,
  304. sprayLiquidPump_open_for_testJSON,
  305. } from '@/mock/command'
  306. import { showSuccessToast, showFailToast } from 'vant'
  307. const testStore = useTestStore()
  308. const deviceStore = useDeviceStore()
  309. const websocketStore = useWebSocketStore()
  310. const settingStore = useSettingStore()
  311. const addLiquidVal = ref(settingStore.addLiquidConfigVal)
  312. const addLiquidPower = ref(25)
  313. const numberKeyboardShowVal = ref(false)
  314. const numberKeyboardShowPower = ref(false)
  315. const addLiquidVal2 = ref(settingStore.sprayLiquidConfigVal)
  316. const addLiquidPower2 = ref(25)
  317. const numberKeyboardShowVal2 = ref(false)
  318. const numberKeyboardShowPower2 = ref(false)
  319. const formatter = value => {
  320. if (parseInt(value) > 31) {
  321. return '31'
  322. }
  323. return value
  324. }
  325. const formatter6 = value => {
  326. let arr = settingStore.allSettingList.filter(
  327. item => item.name == 'drainage_pump_speed',
  328. )
  329. if (arr && arr.length > 0) {
  330. if (parseInt(value) > 40) {
  331. return '40'
  332. }
  333. if (parseInt(value) < arr[0].val_lower_limit) {
  334. return arr[0].val_lower_limit + ''
  335. }
  336. }
  337. if (value == '') {
  338. return '0'
  339. }
  340. return value
  341. }
  342. const formatter7 = value => {
  343. let arr = settingStore.allSettingList.filter(
  344. item => item.name == 'injection_pump_speed',
  345. )
  346. if (arr && arr.length > 0) {
  347. if (parseInt(value) > 40) {
  348. return '40'
  349. }
  350. if (parseInt(value) < arr[0].val_lower_limit) {
  351. return arr[0].val_lower_limit + ''
  352. }
  353. }
  354. if (value == '') {
  355. return '0'
  356. }
  357. return value
  358. }
  359. const isFirstClick = ref(true)
  360. const hideAllKeyboards = flag => {
  361. isFirstClick.value = true
  362. if (flag == 1) {
  363. numberKeyboardShowVal.value = true
  364. numberKeyboardShowPower.value = false
  365. numberKeyboardShowVal2.value = false
  366. numberKeyboardShowPower2.value = false
  367. }
  368. if (flag == 2) {
  369. numberKeyboardShowPower.value = true
  370. numberKeyboardShowVal.value = false
  371. numberKeyboardShowVal2.value = false
  372. numberKeyboardShowPower2.value = false
  373. }
  374. if (flag == 3) {
  375. numberKeyboardShowVal2.value = true
  376. numberKeyboardShowPower.value = false
  377. numberKeyboardShowVal.value = false
  378. numberKeyboardShowPower2.value = false
  379. }
  380. if (flag == 4) {
  381. numberKeyboardShowPower2.value = true
  382. numberKeyboardShowPower.value = false
  383. numberKeyboardShowVal2.value = false
  384. numberKeyboardShowVal.value = false
  385. }
  386. }
  387. const handleInput = (value, index) => {
  388. if (isFirstClick.value) {
  389. if (index == 1) {
  390. setTimeout(() => {
  391. addLiquidVal.value = value + ''
  392. })
  393. }
  394. if (index == 2) {
  395. setTimeout(() => {
  396. addLiquidPower.value = value + ''
  397. })
  398. }
  399. if (index == 3) {
  400. setTimeout(() => {
  401. addLiquidVal2.value = value + ''
  402. })
  403. }
  404. if (index == 4) {
  405. setTimeout(() => {
  406. addLiquidPower2.value = value + ''
  407. })
  408. }
  409. isFirstClick.value = false
  410. }
  411. }
  412. const setAddLiquidConfig = flag => {
  413. if (flag == 1) {
  414. websocketStore.sendCommandMsg(
  415. // 正传
  416. test_replenishingFluidsPumpCtrJSON(1, 300),
  417. )
  418. showSuccessToast('设置成功')
  419. return
  420. } else if (flag == 2) {
  421. websocketStore.sendCommandMsg(
  422. sprayLiquidPump_open_for_testJSON(1, addLiquidVal2.value),
  423. )
  424. showSuccessToast('设置成功')
  425. return
  426. } else if (flag == 3) {
  427. // 关闭
  428. websocketStore.sendCommandMsg(test_replenishingFluidsPumpCtrJSON(0, 0))
  429. showSuccessToast('关闭加液蠕动泵成功')
  430. return
  431. } else if (flag == 5) {
  432. // 反转
  433. websocketStore.sendCommandMsg(test_replenishingFluidsPumpCtrJSON(-1, 300))
  434. showSuccessToast('设置成功')
  435. } else if (flag == 6) {
  436. websocketStore.sendCommandMsg(
  437. sprayLiquidPump_open_for_testJSON(-1, addLiquidVal2.value),
  438. )
  439. showSuccessToast('设置成功')
  440. } else {
  441. websocketStore.sendCommandMsg(
  442. sprayLiquidPump_open_for_testJSON(0, addLiquidVal2.value),
  443. )
  444. showSuccessToast('关闭注射蠕动泵成功')
  445. return
  446. }
  447. }
  448. const handleUpdate = () => {
  449. websocketStore.sendCommandMsg(getStateJSON)
  450. }
  451. const changeFeedingStatus = flag => {
  452. if (flag == 1) {
  453. if (!testStore.feedingPeristalticPumpStatus) {
  454. // 发送打开指令
  455. websocketStore.sendCommandMsg(
  456. liquidpumpctrlJSON(1, settingStore.addLiquidConfigVal),
  457. )
  458. testStore.updateFeedingPeristalticPumpStatus(true)
  459. }
  460. } else {
  461. if (testStore.feedingPeristalticPumpStatus) {
  462. websocketStore.sendCommandMsg(liquidpumpctrlJSON(1, 0))
  463. testStore.updateFeedingPeristalticPumpStatus(false)
  464. }
  465. }
  466. }
  467. const changeSprayStatus = flag => {
  468. if (flag == 1) {
  469. if (!testStore.sprayPeristalticPump) {
  470. websocketStore.sendCommandMsg(
  471. liquidpumpctrlJSON(2, settingStore.sprayLiquidConfigVal),
  472. )
  473. testStore.updateSprayPeristalticPump(true)
  474. }
  475. } else {
  476. if (testStore.sprayPeristalticPump) {
  477. websocketStore.sendCommandMsg(liquidpumpctrlJSON(2, 0))
  478. testStore.updateSprayPeristalticPump(false)
  479. }
  480. }
  481. }
  482. const changeHeatingStatus = flag => {
  483. if (flag == 1) {
  484. if (!testStore.heatingStrip) {
  485. websocketStore.sendCommandMsg(someAirSwitchJSON(4, 1))
  486. websocketStore.sendCommandMsg(someAirSwitchJSON(5, 1))
  487. testStore.updateHeatingStrip(true)
  488. }
  489. } else {
  490. if (testStore.heatingStrip) {
  491. websocketStore.sendCommandMsg(someAirSwitchJSON(4, 0))
  492. websocketStore.sendCommandMsg(someAirSwitchJSON(5, 0))
  493. testStore.updateHeatingStrip(false)
  494. }
  495. }
  496. }
  497. const changeAirStatus = flag => {
  498. if (flag == 1) {
  499. if (!testStore.airCompressor) {
  500. websocketStore.sendCommandMsg(someAirSwitchJSON(0, 1))
  501. websocketStore.sendCommandMsg(someAirSwitchJSON(1, 1))
  502. testStore.updateAirCompressor(true)
  503. }
  504. } else {
  505. if (testStore.airCompressor) {
  506. websocketStore.sendCommandMsg(someAirSwitchJSON(0, 0))
  507. websocketStore.sendCommandMsg(someAirSwitchJSON(1, 0))
  508. testStore.updateAirCompressor(false)
  509. }
  510. }
  511. }
  512. const changeDraughtStatus = flag => {
  513. if (flag == 1) {
  514. if (!testStore.draughtFan) {
  515. websocketStore.sendCommandMsg(someAirSwitchJSON(2, 1))
  516. websocketStore.sendCommandMsg(someAirSwitchJSON(3, 1))
  517. testStore.updateDraughtFan(true)
  518. }
  519. } else {
  520. if (testStore.draughtFan) {
  521. websocketStore.sendCommandMsg(someAirSwitchJSON(2, 0))
  522. websocketStore.sendCommandMsg(someAirSwitchJSON(3, 0))
  523. testStore.updateDraughtFan(false)
  524. }
  525. }
  526. }
  527. const changeChannel = flag => {
  528. if (flag == 1) {
  529. websocketStore.sendCommandMsg(airCompressor_channelCtrlJSON([1]))
  530. testStore.updateAirCompressorChannel(true)
  531. } else {
  532. websocketStore.sendCommandMsg(airCompressor_channelCtrlJSON([0]))
  533. testStore.updateAirCompressorChannel(false)
  534. }
  535. }
  536. </script>
  537. <style lang="scss" scoped>
  538. .test_container {
  539. margin-bottom: 19px;
  540. height: 580px;
  541. overflow: scroll;
  542. box-sizing: border-box;
  543. background: #ffffff;
  544. border-radius: 16px;
  545. padding: 20px;
  546. display: grid;
  547. row-gap: 20px;
  548. column-gap: 20px;
  549. grid-template-columns: repeat(2, 1fr);
  550. grid-template-rows: repeat(5, 1fr);
  551. padding-bottom: 20px;
  552. .common_set {
  553. width: 580px;
  554. height: 90px;
  555. box-sizing: border-box;
  556. border-radius: 14px;
  557. background: #f6f6f6;
  558. display: flex;
  559. align-items: center;
  560. .title {
  561. font-family: Source Han Sans CN;
  562. font-size: 20px;
  563. font-weight: 500;
  564. letter-spacing: 0.06em;
  565. color: #000000;
  566. width: 106px;
  567. }
  568. .num {
  569. font-family: Source Han Sans CN;
  570. font-size: 18px;
  571. font-weight: 500;
  572. letter-spacing: 0.1em;
  573. color: #000000;
  574. display: flex;
  575. align-items: center;
  576. margin-right: 4px;
  577. .add_liquid_input {
  578. width: 40px;
  579. margin-right: 2px;
  580. text-align: right;
  581. height: 24px;
  582. padding: 0;
  583. color: #0e0e0e;
  584. font-family: Source Han Sans CN;
  585. font-weight: 500;
  586. font-size: 18px;
  587. }
  588. }
  589. }
  590. .switch_wrap {
  591. padding: 0 17px 0 17px;
  592. justify-content: space-between;
  593. .btn_wrap {
  594. display: flex;
  595. align-items: center;
  596. background: #ddd;
  597. padding: 6px;
  598. border-radius: 30px;
  599. .mg {
  600. margin-right: 6px;
  601. }
  602. .open {
  603. width: 67px;
  604. height: 35px;
  605. border-radius: 18px;
  606. background: #06518b;
  607. display: flex;
  608. align-items: center;
  609. justify-content: center;
  610. font-family: Source Han Sans CN;
  611. font-size: 14px;
  612. font-weight: 500;
  613. letter-spacing: 0.1em;
  614. color: #ffffff;
  615. }
  616. .success {
  617. background: #1ad66e;
  618. }
  619. .close {
  620. width: 67px;
  621. height: 35px;
  622. border-radius: 18px;
  623. background: #ffffff;
  624. display: flex;
  625. align-items: center;
  626. justify-content: center;
  627. font-family: Source Han Sans CN;
  628. font-size: 14px;
  629. font-weight: 500;
  630. letter-spacing: 0.1em;
  631. color: #282727;
  632. }
  633. }
  634. }
  635. .update_wrap {
  636. padding: 0 17px 0 17px;
  637. justify-content: space-between;
  638. .btn_wrap {
  639. width: 150px;
  640. height: 45px;
  641. border-radius: 23px;
  642. background: #06518b;
  643. display: flex;
  644. align-items: center;
  645. justify-content: center;
  646. font-family: Source Han Sans CN;
  647. font-size: 14px;
  648. font-weight: 500;
  649. letter-spacing: 0.1em;
  650. color: #ffffff;
  651. }
  652. }
  653. .info_wrap {
  654. padding: 0 32px 0 17px;
  655. justify-content: space-between;
  656. .title {
  657. font-family: Source Han Sans CN;
  658. font-size: 20px;
  659. font-weight: 500;
  660. letter-spacing: 0.06em;
  661. color: #000000;
  662. width: 57px;
  663. white-space: nowrap;
  664. }
  665. .info {
  666. font-family: Source Han Sans CN;
  667. font-size: 18px;
  668. font-weight: 500;
  669. letter-spacing: 0.1em;
  670. color: #06518b;
  671. }
  672. }
  673. }
  674. </style>