inventory.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799
  1. <template>
  2. <!-- 盘点清单 -->
  3. <view class="">
  4. <uni-nav-bar fixed="true" statusBar="true" left-icon="back" @clickLeft="back" :title="`盘点清单`" v-if="navShow">
  5. <block slot="right">
  6. <view class="bc-btn" @click="selected">选择</view>
  7. </block>
  8. </uni-nav-bar>
  9. <!-- <view class="tab-title">
  10. <view v-for="[key, item] in Object.entries(tabList)" :key="key" class="tab-item" :class="{ active: active == key }" @click="changeChartsTab(key)">{{ key }}({{ item.num }})</view>
  11. </view> -->
  12. <view class="tab-main">
  13. <!-- <uni-search-bar @input="search" v-model="searchKey" cancelButton="none" placeholder="编码/名称/货位/批次"></uni-search-bar> -->
  14. <template v-if="list.length > 0">
  15. <view class="order-list" v-for="(item, index) in list" :key="index">
  16. <view class="s1">
  17. <view class="b1">{{ item.categoryName }}</view>
  18. <!-- <view class="b2">
  19. <template v-if="[5, 6, 7].includes(item.equStatus)">
  20. <view class="type" :style="styleClass(el.type)" v-for="el in ycEquStatus(item)">{{ dict.equStatus[el.type] }}({{ el.num }})</view>
  21. </template>
  22. <view class="type" :style="styleClass(item.equStatus)" v-else>
  23. {{ dict.equStatus[item.equStatus] }}
  24. </view>
  25. </view> -->
  26. </view>
  27. <view class="wrap">
  28. <view class="item">
  29. <view class="label">批次号</view>
  30. <view class="value">
  31. {{ item.batchNo }}
  32. </view>
  33. </view>
  34. </view>
  35. <view class="wrap">
  36. <view class="item w100">
  37. <view class="label">包装编码</view>
  38. <view class="value">
  39. {{ item.packageNo }}
  40. </view>
  41. </view>
  42. </view>
  43. <view class="wrap">
  44. <view class="item">
  45. <view class="label">包装数量</view>
  46. <view class="value">
  47. {{ item.info.packingCountBase }}
  48. </view>
  49. </view>
  50. <view class="item">
  51. <view class="label">包装单位</view>
  52. <view class="value">
  53. {{ item.info.packingUnit }}
  54. </view>
  55. </view>
  56. </view>
  57. <view class="wrap">
  58. <view class="item">
  59. <view class="label">重量</view>
  60. <view class="value">{{ item.info.weight }}</view>
  61. </view>
  62. <view class="item">
  63. <view class="label">重量单位</view>
  64. <view class="value">
  65. {{ item.info.weightUnit }}
  66. </view>
  67. </view>
  68. </view>
  69. <view class="wrap" style="padding-right: 100rpx">
  70. <view class="item" style="width: 100%">
  71. <view class="label">仓库</view>
  72. <view class="value">{{ item.info.warehouseName }}</view>
  73. </view>
  74. </view>
  75. <view class="wrap">
  76. <view class="item">
  77. <view class="label">盘点状态</view>
  78. <view class="value"><uni-data-select v-model="item.controlStatus" :localdata="range"></uni-data-select></view>
  79. </view>
  80. <view class="item">
  81. <view class="label">数量</view>
  82. <view class="value">
  83. <u-number-box button-size="70" :min="0" :max="9999" v-model="item.count"></u-number-box>
  84. </view>
  85. </view>
  86. </view>
  87. <view class="wrap_btn">
  88. <view class="bd-btn" @click="handlDelete(index)">移除</view>
  89. </view>
  90. <!-- <view class="wrap">
  91. <view class="item">
  92. <view class="label">
  93. 货位
  94. </view>
  95. <view class="value">
  96. {{item.warehouseName}}/{{item.reservoirName}}/{{item.goodsShelfName}}/{{item.goodsAllocationName}}
  97. </view>
  98. </view>
  99. </view> -->
  100. <!-- <template v-if="isExecute && (infoData.status == 1 || infoData.status == 6)">
  101. <template v-if="active == '待盘点'">
  102. <view class="bd-btn" @click="handlSdpd(item)" v-if="item.inventoryNum > 0">手动盘点</view>
  103. <view class="bd-btn" @click="handlQrpd(item)" v-else>标记已盘</view>
  104. </template>
  105. <view class="bd-btn" @click="handlDelete(item)" v-if="active == '已盘点' || active == '异常记录'">移除</view>
  106. </template> -->
  107. </view>
  108. </template>
  109. <u-empty v-else></u-empty>
  110. </view>
  111. <view class="fixed-bottom" v-if="status == 0">
  112. <view class="smpd" @click="handlStart">盘点报工</view>
  113. <!-- <view class="ycdj">扫码盘点</view> -->
  114. </view>
  115. <!-- <view class="fixed-bottom" v-if="isExecute && (infoData.status === 1 || infoData.status == 6)">
  116. <view class="ycdj" @click="handlYc">溢出登记</view>
  117. <view class="smpd" @click="handlscanCheck">扫码盘点</view>
  118. </view>
  119. <view class="fixed-bottom" v-if="isExecute && infoData.status === 0">
  120. <view class="kspd" @click="handlStart">开始盘点</view>
  121. </view> -->
  122. <InventoryDialog ref="InventoryDialogRef" @cancel="navShow = true" @success="inventoryConfirm" />
  123. <!-- <ScanCode @scancodedate="cbScancodedate" :model="'uni'"></ScanCode> -->
  124. </view>
  125. </template>
  126. <script>
  127. import { reportWork } from '@/api/warehouseManagement'
  128. import InventoryDialog from '../components/InventoryDialog'
  129. import { postJ, post, get } from '@/utils/api'
  130. let [page, size, isEnd] = [1, 20, true]
  131. import ScanCode from '@/components/ScanCode.vue'
  132. import _ from 'lodash'
  133. export default {
  134. components: {
  135. ScanCode,
  136. InventoryDialog
  137. },
  138. data() {
  139. return {
  140. range: [
  141. {
  142. text: '盘盈',
  143. value: '2'
  144. },
  145. {
  146. text: '丢失',
  147. value: '3'
  148. },
  149. {
  150. text: '破损',
  151. value: '4'
  152. }
  153. ],
  154. value1: '',
  155. value2: '',
  156. list: [],
  157. status: '',
  158. navShow: true,
  159. planOrderId: '',
  160. active: '待盘点',
  161. tabList: {
  162. 待盘点: {
  163. num: 0,
  164. type: [0],
  165. list: []
  166. },
  167. 已盘点: {
  168. num: 0,
  169. type: [4],
  170. list: []
  171. },
  172. 异常记录: {
  173. num: 0,
  174. type: [1, 2, 3, 5, 6, 7],
  175. list: []
  176. }
  177. },
  178. searchKey: '',
  179. /* 盘点工单id */
  180. workOrderId: '',
  181. // 工单编码
  182. workOrderCode: '',
  183. // 盘点类型,仓库内,仓库外
  184. BizType: '',
  185. // 工单详情
  186. infoData: '',
  187. dict: {
  188. equStatus: {
  189. 0: '待盘',
  190. 1: '丢失',
  191. 2: '破损',
  192. 3: '溢出',
  193. 4: '正常',
  194. 5: '异常'
  195. }
  196. },
  197. // 扫码条码信息
  198. qrContent: '',
  199. barType: '',
  200. ScanData: ''
  201. }
  202. },
  203. onLoad(data) {
  204. console.log(data)
  205. this.planOrderId = data.id
  206. this.status = data.status
  207. this.search = _.debounce(this.search, 1000)
  208. },
  209. onShow() {
  210. // this.initPagination()
  211. // this.getdata()
  212. // this.getNum()
  213. // this.getdetales()
  214. let _this = this
  215. uni.$off('scancodedate') // 每次进来先 移除全局自定义事件监听器
  216. uni.$on('scancodedate', function (data) {
  217. _this.cbScancodedate(data)
  218. })
  219. },
  220. onUnload() {
  221. uni.$off('scancodedate')
  222. },
  223. onHide() {
  224. uni.$off('scancodedate')
  225. },
  226. // onReachBottom() {
  227. // if (isEnd) {
  228. // return
  229. // }
  230. // this.getMoreLists()
  231. // console.log('触底')
  232. // },
  233. // onPullDownRefresh() {
  234. // this.initPagination()
  235. // this.getdata()
  236. // this.getNum()
  237. // console.log('下拉刷新')
  238. // },
  239. computed: {
  240. // 当前是否为执行人
  241. isExecute() {
  242. let userInfo = uni.getStorageSync('userInfo')
  243. // 当前登录人id
  244. let userId = userInfo.id
  245. console.log()
  246. // 审批人id
  247. let executeUserId = this.infoData.executeUserId
  248. if (executeUserId == userId) {
  249. return true
  250. } else {
  251. return false
  252. }
  253. }
  254. },
  255. methods: {
  256. changeChartsTab(key) {
  257. this.active = key
  258. this.initPagination()
  259. this.getdata()
  260. this.getNum()
  261. },
  262. search(e) {
  263. this.searchKey = e
  264. this.initPagination()
  265. this.getdata()
  266. },
  267. getdata() {
  268. uni.showLoading({
  269. title: '加载中'
  270. })
  271. let par = {
  272. size: size,
  273. page: page,
  274. workOrderId: this.workOrderId,
  275. equStatusList: this.tabList[this.active].type,
  276. searchKey: this.searchKey,
  277. bizType: Number(this.BizType)
  278. //bizType:2
  279. }
  280. //par = this.URLSearchParams(par)
  281. // postJ(this.apiUrl + '/repertoryCheck/getList', par).then(res => {
  282. // if (res.success) {
  283. // let list = this.tabList[this.active].list
  284. // this.tabList[this.active].list = [...list, ...res.data.records]
  285. // let pages = res.data.pages
  286. // if (page < pages) {
  287. // isEnd = false
  288. // } else {
  289. // isEnd = true
  290. // }
  291. // console.log(page, pages, isEnd)
  292. // setTimeout(() => {
  293. // uni.stopPullDownRefresh()
  294. // uni.hideLoading()
  295. // }, 1000)
  296. // }
  297. // })
  298. uni.hideLoading()
  299. },
  300. getMoreLists() {
  301. page++
  302. this.getdata()
  303. },
  304. // 初始化分页
  305. initPagination() {
  306. size = 10
  307. page = 1
  308. isEnd = true
  309. this.tabList[this.active].list = []
  310. },
  311. // 删除清单
  312. handlDelete(index) {
  313. this.list.splice(index, 1)
  314. // uni.showModal({
  315. // content: '是否移除已盘清单?',
  316. // success: res => {
  317. // if (res.confirm) {
  318. // // let par = {
  319. // // id: item.id
  320. // // }
  321. // // par = this.URLSearchParams(par)
  322. // // post(this.apiUrl + '/repertoryCheck/deleteInventory?' + par).then(res => {
  323. // // if (res.success) {
  324. // // uni.showToast({
  325. // // title: '已移除'
  326. // // })
  327. // // this.initPagination()
  328. // // this.getdata()
  329. // // this.getNum()
  330. // // }
  331. // // })
  332. // }
  333. // }
  334. // })
  335. },
  336. // 获取数量
  337. getNum() {
  338. let par = {
  339. workOrderId: this.workOrderId
  340. }
  341. par = this.URLSearchParams(par)
  342. // post(this.apiUrl + '/repertoryCheck/statistics?' + par).then(res => {
  343. // if (res.success) {
  344. // this.tabList['待盘点'].num = res.data.stayNum
  345. // this.tabList['已盘点'].num = res.data.yetNum
  346. // this.tabList['异常记录'].num = res.data.abnormalNum
  347. // }
  348. // })
  349. },
  350. selected() {
  351. this.navShow = false
  352. this.$refs.InventoryDialogRef.open(this.planOrderId)
  353. },
  354. inventoryConfirm(data) {
  355. this.list = data
  356. },
  357. // 跳转盘点详情
  358. handlBc() {
  359. let par = {
  360. workOrderId: this.workOrderId
  361. }
  362. par = this.URLSearchParams(par)
  363. uni.navigateTo({
  364. url: '/pages/warehouse/workOrder/details/details?' + par
  365. })
  366. },
  367. // 手动盘点
  368. handlSdpd(item) {
  369. let par = {
  370. workOrderId: this.workOrderId,
  371. planInventoryId: item.id,
  372. bizType: this.BizType,
  373. info: encodeURIComponent(JSON.stringify(item))
  374. }
  375. par = this.URLSearchParams(par)
  376. uni.navigateTo({
  377. url: '/pages/warehouse/workOrder/manualCheck/manualCheck?' + par
  378. })
  379. },
  380. // 扫码盘点
  381. handlscanCheck() {
  382. // this.Scancodedate(data.code)
  383. let _this = this
  384. uni.scanCode({
  385. success: function (res) {
  386. _this.Scancodedate(res.result)
  387. }
  388. })
  389. },
  390. // 溢出登记
  391. handlYc() {
  392. let par = {
  393. workOrderId: this.workOrderId
  394. }
  395. par = this.URLSearchParams(par)
  396. uni.navigateTo({
  397. url: '/pages/warehouse/workOrder/registerOverflow/registerOverflow?' + par
  398. })
  399. },
  400. // 获取工单详情
  401. getdetales() {
  402. let par = {
  403. workOrderId: this.workOrderId
  404. }
  405. // postJ(this.apiUrl + '/repertoryCheck/getCheckDetail', par).then(res => {
  406. // if (res.success) {
  407. // this.infoData = res.data
  408. // this.infoData.status = res.data.status.code
  409. // }
  410. // })
  411. },
  412. // 开始盘点
  413. handlStart() {
  414. if (this.list.length > 0) {
  415. let isBoolen = this.list.every(item => item.controlStatus > 0 && item.count > 0)
  416. if (!isBoolen) {
  417. uni.showToast({
  418. title: '请选择盘点状态和数量',
  419. icon: 'none'
  420. })
  421. return
  422. }
  423. let arr = this.list.map(item => {
  424. let key = null
  425. switch (item.controlStatus) {
  426. case '2':
  427. key = 'surplusQuantity'
  428. break
  429. case '3':
  430. key = 'loseQuantity'
  431. break
  432. case '4':
  433. key = 'wornQuantity'
  434. break
  435. }
  436. return {
  437. id: item.id,
  438. status: item.controlStatus,
  439. planOrderId: this.planOrderId,
  440. [key]: item.count
  441. }
  442. })
  443. uni.showLoading({
  444. title: '加载中'
  445. })
  446. reportWork(arr)
  447. .then(() => {
  448. uni.navigateTo({
  449. url: '/pages/warehouse/workOrder/index'
  450. })
  451. })
  452. .finally(() => {
  453. uni.hideLoading()
  454. })
  455. } else {
  456. uni.showToast({
  457. title: '请选择物品',
  458. icon: 'none'
  459. })
  460. return
  461. }
  462. // let par = this.URLSearchParams({
  463. // workOrderCode: this.workOrderCode
  464. // })
  465. // post(this.apiUrl + '/workOrder/execute?' + par).then(res => {
  466. // if (res.success) {
  467. // uni.showToast({
  468. // title: '操作成功'
  469. // })
  470. // this.getdetales()
  471. // }
  472. // })
  473. },
  474. // 异常的显示
  475. ycEquStatus(item) {
  476. let list = []
  477. if (item.loseNum) {
  478. list.push({
  479. type: 1,
  480. num: item.loseNum
  481. })
  482. }
  483. if (item.damageNum) {
  484. list.push({
  485. type: 2,
  486. num: item.damageNum
  487. })
  488. }
  489. if (item.normalNum) {
  490. list.push({
  491. type: 4,
  492. num: item.normalNum
  493. })
  494. }
  495. return list
  496. },
  497. styleClass(type) {
  498. switch (Number(type)) {
  499. case 0:
  500. case 4:
  501. return 'background-color: #70B603;color: #fff;'
  502. case 1:
  503. return 'background-color: #feeaeb;color: #555;'
  504. case 2:
  505. return 'background-color: #555;color: #fff;'
  506. case 3:
  507. return 'background-color: #dacde6;color: #fff;'
  508. default:
  509. break
  510. }
  511. },
  512. // 数量为0标记已盘
  513. handlQrpd(item) {
  514. uni.showModal({
  515. content: '该清单没有可盘项,是否标记已盘?',
  516. success: res => {
  517. if (res.confirm) {
  518. let par = {
  519. planInventoryId: item.id
  520. }
  521. par = this.URLSearchParams(par)
  522. // post(this.apiUrl + '/repertoryCheck/checkVerify?' + par).then(res => {
  523. // if (res.success) {
  524. // uni.showToast({
  525. // title: '操作成功'
  526. // })
  527. // this.initPagination()
  528. // this.getdata()
  529. // this.getNum()
  530. // }
  531. // })
  532. }
  533. }
  534. })
  535. },
  536. // 扫码枪扫码
  537. cbScancodedate(data) {
  538. this.Scancodedate(data.code)
  539. },
  540. async Scancodedate(code) {
  541. this.qrContent = code.trim()
  542. this.barType = this.setBarType(this.qrContent)
  543. await this.getScanData()
  544. let res = await this.getScanCheckMate()
  545. // 扫码失败
  546. if (!res.success) return
  547. if (res.message === 'false') {
  548. uni.showToast({
  549. title: '该资产不在盘点清单内',
  550. duration: 2000,
  551. icon: 'none'
  552. })
  553. return
  554. }
  555. let par = {
  556. workOrderId: this.workOrderId,
  557. info: encodeURIComponent(JSON.stringify(res.data)),
  558. bizType: this.BizType
  559. }
  560. par = this.URLSearchParams(par)
  561. uni.navigateTo({
  562. url: '/pages/warehouse/workOrder/scanCheck/scanCheck?' + par
  563. })
  564. },
  565. // 设置barType
  566. setBarType(val) {
  567. let index = val.indexOf('@_@')
  568. let result = 0
  569. if (index !== -1) {
  570. let item = val.substr(index + 3, 1)
  571. if (item) {
  572. result = Number(item)
  573. }
  574. }
  575. return result
  576. },
  577. // 获取扫码设备详情
  578. getScanData() {
  579. let par = {
  580. qrContent: this.qrContent,
  581. barType: this.barType
  582. }
  583. // return postJ(this.apiUrl + '/scan/getAssetInfo', par).then(res => {
  584. // this.ScanData = res.data
  585. // })
  586. },
  587. // 获取扫码盘点明细数据
  588. getScanCheckMate() {
  589. if (!this.ScanData.assetCode) {
  590. uni.showToast({
  591. title: '设备编码为空'
  592. })
  593. return
  594. }
  595. let par = {
  596. assetCode: this.ScanData.assetCode,
  597. bizType: this.BizType,
  598. workOrderId: this.workOrderId
  599. // assetCode: 'w05xing0002test0510050',
  600. // bizType: '1',
  601. // workOrderId: '9173'
  602. }
  603. console.log(par)
  604. // return postJ(this.apiUrl + '/repertoryCheck/scanCheckMate', par, true, false).catch(err => {
  605. // if (err.code === '222') {
  606. // uni.showModal({
  607. // title: '提示',
  608. // content: err.message,
  609. // confirmText: '确认', // 确认按钮的文字
  610. // showCancel: false, // 是否显示取消按钮,默认为 true
  611. // success: res => {}
  612. // })
  613. // }
  614. // })
  615. }
  616. }
  617. }
  618. </script>
  619. <style lang="scss" scoped>
  620. .bc-btn {
  621. height: 60rpx;
  622. line-height: 60rpx;
  623. background-color: #157a2c;
  624. font-size: 28rpx;
  625. color: #fff;
  626. padding: 0 30rpx;
  627. border-radius: 10rpx;
  628. }
  629. .tab-title {
  630. position: fixed;
  631. width: 100%;
  632. display: flex;
  633. justify-content: space-between;
  634. height: 82rpx;
  635. line-height: 82rpx;
  636. background-color: #ffffff;
  637. border-bottom: 1px solid #f2f2f2;
  638. z-index: 99;
  639. box-sizing: border-box;
  640. .tab-item {
  641. width: 50%;
  642. text-align: center;
  643. font-size: 32rpx;
  644. color: $uni-text-color-grey;
  645. }
  646. .tab-item.active {
  647. color: $j-primary-border-green;
  648. border-bottom: 1px solid $j-primary-border-green;
  649. }
  650. }
  651. .tab-main {
  652. padding-bottom: 82rpx;
  653. }
  654. .order-list {
  655. padding: 30rpx 20rpx;
  656. border-bottom: 1px solid #f2f2f2;
  657. position: relative;
  658. .s1 {
  659. display: flex;
  660. justify-content: space-between;
  661. align-items: center;
  662. .b1 {
  663. color: #555555;
  664. font-size: 30rpx;
  665. }
  666. .b2 {
  667. color: #000000;
  668. font-size: 28rpx;
  669. display: flex;
  670. width: 500rpx;
  671. justify-content: flex-end;
  672. }
  673. .type {
  674. font-size: 28rpx;
  675. height: 40rpx;
  676. padding: 0 10rpx;
  677. line-height: 40rpx;
  678. & + .type {
  679. margin-left: 10rpx;
  680. }
  681. &.yc {
  682. background-color: #dacde6;
  683. }
  684. &.ds {
  685. background-color: #feeaeb;
  686. }
  687. &.ps {
  688. background-color: #cbcbcb;
  689. }
  690. }
  691. }
  692. .wrap {
  693. display: flex;
  694. margin-top: 20rpx;
  695. .item {
  696. color: #555555;
  697. font-size: 28rpx;
  698. display: flex;
  699. width: 50%;
  700. .label {
  701. display: flex;
  702. align-items: center;
  703. justify-content: center;
  704. margin-right: 20rpx;
  705. }
  706. .value {
  707. display: flex;
  708. align-items: center;
  709. justify-content: center;
  710. }
  711. }
  712. .w100 {
  713. width: 100% !important;
  714. }
  715. }
  716. .wrap_btn {
  717. margin-top: 20rpx;
  718. width: 100%;
  719. display: flex;
  720. align-items: center;
  721. justify-content: flex-end;
  722. }
  723. }
  724. .bd-btn {
  725. height: 56rpx;
  726. padding: 0 20rpx;
  727. display: flex;
  728. justify-content: flex-end;
  729. align-items: center;
  730. color: #4b7902;
  731. font-size: 28rpx;
  732. border: 1px solid #4b7902;
  733. }
  734. .fixed-bottom {
  735. position: fixed;
  736. left: 0;
  737. bottom: 0;
  738. width: 100%;
  739. height: 80rpx;
  740. display: flex;
  741. border: 1px solid #157a2c;
  742. box-sizing: border-box;
  743. .ycdj {
  744. background-color: #fff;
  745. width: 200rpx;
  746. display: flex;
  747. justify-content: center;
  748. align-items: center;
  749. color: #157a2c;
  750. }
  751. .smpd {
  752. background-color: #157a2c;
  753. flex: 1;
  754. display: flex;
  755. justify-content: center;
  756. align-items: center;
  757. color: #fff;
  758. }
  759. }
  760. .kspd {
  761. height: 100%;
  762. width: 100%;
  763. display: flex;
  764. justify-content: center;
  765. align-items: center;
  766. background-color: #157a2c;
  767. color: #fff;
  768. font-size: 28rpx;
  769. }
  770. </style>