checkAfterScanning.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
  1. <template>
  2. <view class="checkAfterScanning">
  3. <view class="checkAfterScanning_title">标本核对</view>
  4. <view class="page_item_cont">
  5. <view class="page_item_cont_T">
  6. <view class="page_item_cont_title">
  7. <view> 工单单号 </view>
  8. <view class="text_big">{{info.gdCode}}</view>
  9. </view>
  10. <view class="page_item_cont_title">
  11. <view class="text_title"> 科室名称 </view>
  12. <view class="text_big">{{info.LCDept}}</view>
  13. </view>
  14. <view class="page_item_cont_title">
  15. <view> 扫描标本数量 </view>
  16. <view class="text_big" @click="goToSpeDetail()"><text class="underline">{{info.total}}</text>只</view>
  17. </view>
  18. <view class="page_item_cont_title2">
  19. 检验科室标本数量:
  20. </view>
  21. <view class="page_item_cont_title" v-for="(item, i) in info.data" :key="i">
  22. <uni-collapse :border="false">
  23. <uni-collapse-item titleBorder="none">
  24. <template v-slot:title>
  25. <view class="page_item_cont_title_coll">
  26. <view>{{item.deptName}}</view>
  27. <view class="text_big" @click.stop="goToSpeDetail(item.deptName,item.deptQrCode)"><text class="underline">{{item.speCount}}</text>只</view>
  28. </view>
  29. </template>
  30. <view class="content">
  31. <view class="list" v-for="x in item.tubeTypeData" @click="viewSpe(item.deptName,item.deptQrCode,x.tubeTypeId)">
  32. {{x.tubeTypeName}}:<text class="underline-item">{{x.speCount}}</text>
  33. </view>
  34. </view>
  35. </uni-collapse-item>
  36. </uni-collapse>
  37. </view>
  38. </view>
  39. </view>
  40. <view class="foot_btn_spe" v-if="enterDynamicDigitalKey==0">
  41. <view class="btn1" @click="Scanning_complete('scan')">核对完成</view>
  42. <view class="btn3" @click="goBack">返回</view>
  43. </view>
  44. <view class="foot_btn_spe" v-if="enterDynamicDigitalKey==1">
  45. <view class="btn1" @click="Scanning_complete('scan')">扫码交接</view>
  46. <view class="btn1" @click="isShowKey()">数字交接</view>
  47. <view class="btn3" @click="goBack">返回</view>
  48. </view>
  49. <!-- 弹窗 -->
  50. <showModel :title="models.title" :icon="models.icon" :disjunctor="models.disjunctor" :content="models.content"
  51. @ok="ok" @cancel="cancel" :operate="models.operate"></showModel>
  52. <!-- 弹窗 -->
  53. <showModel :title="models2.title" :icon="models2.icon" :disjunctor="models2.disjunctor" :content="models2.content"
  54. @ok="ok2" @know="know2" @cancel="cancel2" :operate="models2.operate"></showModel>
  55. <!-- 动态密钥 -->
  56. <numberKeyModel v-if="showKey" :keyArr="keyArr" @cancel="showKey = false" @confirm="confirmKey($event)"></numberKeyModel>
  57. </view>
  58. </template>
  59. <script>
  60. import {
  61. get,
  62. post,
  63. SM,
  64. webHandle
  65. } from "../../http/http.js";
  66. import numberKeyModel from "../../components/numberKeyModel/numberKeyModel.vue";
  67. export default {
  68. data() {
  69. return {
  70. handoverId: undefined,
  71. handoverDeptId: undefined,
  72. info: {},
  73. wcFlag: false,
  74. queryObj: {}, //路由传递过来的数据
  75. // 弹窗model
  76. models: {
  77. disjunctor: false,
  78. },
  79. // 完成扫描弹窗model1
  80. models2: {
  81. disjunctor: false,
  82. },
  83. showKey:false,
  84. keyNum:4, //密钥位数
  85. isNumberKey:false, //是否开启动态密钥
  86. keyArr: [],
  87. enterDynamicDigitalKey:null,
  88. keyType:null,
  89. contentData:null,
  90. };
  91. },
  92. components: {
  93. numberKeyModel
  94. },
  95. methods: {
  96. viewSpe(deptName, qrCode, id){
  97. uni.navigateTo({
  98. url: `../viewSpe/viewSpe?deptName=${deptName}&workOrderId=${encodeURIComponent(JSON.stringify([this.queryObj.id]))}&deptCode=${qrCode}&tubeTypeId=${id}&isScan=1&specimensCheck=1`,
  99. });
  100. },
  101. confirmKey(data){
  102. this.Scanning_complete('key')
  103. this.contentData = data
  104. this.showKey = false
  105. },
  106. isShowKey(){
  107. this.showKey = true
  108. },
  109. // 获取配置
  110. getConfig() {
  111. // 判断开关
  112. const userData = uni.getStorageSync("userData");
  113. let postData = {
  114. idx: 0,
  115. sum: 9999,
  116. hospitalConfig:{
  117. hosId:userData.user.currentHospital.id,
  118. model:"all"
  119. }
  120. };
  121. post("/simple/data/fetchDataList/hospitalConfig",postData).then((result) => {
  122. if (result.status == 200) {
  123. this.keyArr = []
  124. for(let i of result.list){
  125. if(i.key=='digitalSecretKey'){
  126. if(i.value==1){
  127. this.isNumberKey = true
  128. }else{
  129. this.isNumberKey = false
  130. }
  131. }else if(i.key=='numberDigitalSecretKey'){
  132. this.keyNum = Number(i.value)
  133. }
  134. }
  135. for(let i = 0; i < this.keyNum; i++){
  136. this.keyArr.push({
  137. value:null
  138. })
  139. }
  140. }
  141. });
  142. uni.showLoading({
  143. title: "加载中",
  144. mask: true,
  145. });
  146. // 查询标本配送业务
  147. post("/simple/data/fetchDataList/taskType",{
  148. "idx": 0,
  149. "sum": 10,
  150. "taskType": {
  151. "simpleQuery": true,
  152. "hosId": {
  153. "id": userData.user.currentHospital.id
  154. },
  155. "associationType": {
  156. "key": "association_types",
  157. "value": "specimen"
  158. }
  159. }
  160. }).then((res) => {
  161. if (res.status == 200) {
  162. let taskTypeDTO = res.list[0];
  163. if(taskTypeDTO){
  164. // 查询业务页面控制-标本
  165. post("/simple/data/fetchDataList/taskTypeConfig",{
  166. "idx": 0,
  167. "sum": 10,
  168. "taskTypeConfig": {
  169. taskTypeDTO,
  170. }
  171. }).then((res) => {
  172. if (res.status == 200) {
  173. let data = res.list[0];
  174. uni.hideLoading();
  175. if(data){
  176. // 输入动态数字密钥
  177. this.enterDynamicDigitalKey = data.enterDynamicDigitalKey
  178. console.log(55555,this.enterDynamicDigitalKey)
  179. }
  180. } else {
  181. uni.hideLoading();
  182. uni.showToast({
  183. icon: "none",
  184. title: res.msg || "接口获取数据失败!",
  185. });
  186. }
  187. });
  188. }else{
  189. uni.hideLoading();
  190. }
  191. } else {
  192. uni.hideLoading();
  193. uni.showToast({
  194. icon: "none",
  195. title: res.msg || "接口获取数据失败!",
  196. });
  197. }
  198. });
  199. },
  200. // 获取核对信息
  201. getInfo(gdId){
  202. uni.showLoading({
  203. title: '加载中',
  204. mask: true
  205. });
  206. post("/api/specimensCheck", {gdIds:gdId}).then((res) => {
  207. uni.hideLoading();
  208. if (res.status == 200) {
  209. console.log(res)
  210. res.LCDept = res.LCDept.join(',');
  211. this.info = res;
  212. } else {
  213. uni.showToast({
  214. icon: "none",
  215. title: res.msg || "接口获取数据失败!",
  216. });
  217. }
  218. })
  219. },
  220. // 返回
  221. goBack() {
  222. uni.navigateBack();
  223. },
  224. // 业务页面控制-标本-收取时需扫描二维码
  225. beforeScanning(fn) {
  226. this.handoverId = undefined;//扫动态码或静态码,后端会返回交接人,核对完成接口传过去
  227. this.handoverDeptId = undefined;//扫动态码或静态码,后端会返回科室,核对完成接口传过去
  228. // 判断开关
  229. const userData = uni.getStorageSync("userData");
  230. console.log('userData', userData);
  231. uni.showLoading({
  232. title: "加载中",
  233. mask: true,
  234. });
  235. // 查询标本配送业务
  236. post("/simple/data/fetchDataList/taskType",{
  237. "idx": 0,
  238. "sum": 10,
  239. "taskType": {
  240. "simpleQuery": true,
  241. "hosId": {
  242. "id": userData.user.currentHospital.id
  243. },
  244. "associationType": {
  245. "key": "association_types",
  246. "value": "specimen"
  247. }
  248. }
  249. }).then((res) => {
  250. if (res.status == 200) {
  251. let taskTypeDTO = res.list[0];
  252. if(taskTypeDTO){
  253. // 查询业务页面控制-标本
  254. post("/simple/data/fetchDataList/taskTypeConfig",{
  255. "idx": 0,
  256. "sum": 10,
  257. "taskTypeConfig": {
  258. taskTypeDTO,
  259. }
  260. }).then((res) => {
  261. if (res.status == 200) {
  262. let data = res.list[0];
  263. if(data){
  264. // 收取时需扫描二维码
  265. if(data.arriveScanCode == 1){
  266. // 扫描科室二维码
  267. uni.hideLoading();
  268. if(this.keyType=='key'){
  269. let postData = {
  270. code: this.contentData,
  271. type: 'specimen',
  272. hosId: userData.user.currentHospital.id,
  273. orderId: +this.queryObj.id,
  274. };
  275. console.log(postData)
  276. uni.showLoading({
  277. title: "加载中",
  278. mask: true,
  279. });
  280. post("/workerOrder/arriveScanCheck", postData).then((res) => {
  281. uni.hideLoading();
  282. if (res.state == 200) {
  283. this.handoverId = res.handover;//扫动态码或静态码,后端会返回交接人,核对完成接口传过去
  284. this.handoverDeptId = res.handoverDeptId;//扫动态码或静态码,后端会返回科室,核对完成接口传过去
  285. fn();
  286. } else {
  287. uni.showToast({
  288. icon: "none",
  289. title: res.msg || "接口获取数据失败!",
  290. });
  291. }
  292. })
  293. }else{
  294. SM().then((content) => {
  295. let postData = {
  296. code: content,
  297. type: 'specimen',
  298. hosId: userData.user.currentHospital.id,
  299. orderId: +this.queryObj.id,
  300. };
  301. console.log(postData)
  302. uni.showLoading({
  303. title: "加载中",
  304. mask: true,
  305. });
  306. post("/workerOrder/arriveScanCheck", postData).then((res) => {
  307. uni.hideLoading();
  308. if (res.state == 200) {
  309. this.handoverId = res.handover;//扫动态码或静态码,后端会返回交接人,核对完成接口传过去
  310. this.handoverDeptId = res.handoverDeptId;//扫动态码或静态码,后端会返回科室,核对完成接口传过去
  311. fn();
  312. } else {
  313. uni.showToast({
  314. icon: "none",
  315. title: res.msg || "接口获取数据失败!",
  316. });
  317. }
  318. })
  319. }).catch(err => {
  320. });
  321. }
  322. }else{
  323. uni.hideLoading();
  324. fn();
  325. }
  326. }else{
  327. uni.hideLoading();
  328. fn();
  329. }
  330. } else {
  331. uni.hideLoading();
  332. uni.showToast({
  333. icon: "none",
  334. title: res.msg || "接口获取数据失败!",
  335. });
  336. }
  337. });
  338. }else{
  339. uni.hideLoading();
  340. uni.showToast({
  341. icon: "none",
  342. title: "未查询到标本配送业务!",
  343. });
  344. }
  345. } else {
  346. uni.hideLoading();
  347. uni.showToast({
  348. icon: "none",
  349. title: res.msg || "接口获取数据失败!",
  350. });
  351. }
  352. });
  353. },
  354. // 完成核对
  355. Scanning_complete(type) {
  356. this.keyType = type
  357. this.beforeScanning(() => {
  358. if (
  359. this.queryObj.type1 == "plan-spe-ddd-2" ||
  360. this.queryObj.type1 == "spe-ddd-2"
  361. ) {
  362. this.wcFlag = true;
  363. this.models = {
  364. disjunctor: true,
  365. title: "提示",
  366. content: "是否确定标本已核对完成?",
  367. icon: "warn",
  368. operate: {
  369. ok: "确定",
  370. cancel: "取消",
  371. },
  372. };
  373. } else if (
  374. this.queryObj.type1 == "plan-spe-dsd-2" ||
  375. this.queryObj.type1 == "plan-spe-dsd-3" ||
  376. this.queryObj.type1 == "spe-dsd-2" ||
  377. this.queryObj.type1 == "spe-dsd-3"
  378. ) {
  379. this.wcFlag = false;
  380. this.models = {
  381. disjunctor: true,
  382. title: "提示",
  383. content: "是否确定标本已核对完成?",
  384. icon: "warn",
  385. operate: {
  386. ok: "确定",
  387. cancel: "取消",
  388. },
  389. };
  390. } else {
  391. this.gotoOver();
  392. }
  393. });
  394. },
  395. // 跳转完成工单页面
  396. gotoOver() {
  397. uni.navigateTo({
  398. url: `../scanning/scanning?type=${this.queryObj.type}&type1=${
  399. this.queryObj.type1
  400. }&id=${encodeURIComponent(JSON.stringify([this.queryObj.id]))}&deptCode=${
  401. this.queryObj.deptCode
  402. }&dept=${this.queryObj.dept}&speNum=${this.queryObj.speNum}&content=${this.queryObj.content}`,
  403. });
  404. },
  405. // 确定
  406. ok() {
  407. this.models.disjunctor = false;
  408. let postData = {
  409. ids: [this.queryObj.id],
  410. sign: true,
  411. deptQrCode: this.queryObj.deptCode
  412. };
  413. uni.showLoading({
  414. title: '加载中',
  415. mask: true
  416. });
  417. post("/workerOrder/expectedAndActual", postData).then((ress) => {
  418. uni.hideLoading();
  419. if (ress.status == 200) {
  420. if (this.wcFlag) {
  421. //正常完成扫描
  422. this.overFinish()
  423. } else {
  424. this.gotoOver();
  425. }
  426. } else if (ress.status == 1000035) {
  427. let content = '';
  428. if (this.queryObj.type1 === 'spe-ddd-2' || this.queryObj.type1 === 'plan-spe-ddd-2') {
  429. //待到达
  430. content =
  431. `系统内预计标本<strong class="red">${ress.expectReceiveNum}</strong>只,您扫描收取标本<strong class="red">${ress.actualReceiveNum}</strong>只,其中<strong class="red">${ress.notReceiveNum}</strong>只未扫描;`;
  432. } else {
  433. //待送达
  434. this.content =
  435. `本工单已签到<strong class="red">${ress.scanSet?ress.scanSet.join('、'):''}</strong>,剩余需签到科室<strong class="red">${ress.notScanSet?ress.notScanSet.join('、'):''}</strong>,总签收<strong class="red">${ress.totalAcceptance}</strong>只,剩余<strong class="red">${ress.notAcceptance}</strong>只未签收,您确定完成工单吗?`;
  436. content =
  437. `您在<strong class="red">${ress.deptName}</strong>检验科扫描了<strong class="red">${ress.deptScanNum}</strong>个标本,还需扫描<strong class="red">${ress.deptNotScanNum}</strong>标本。`;
  438. }
  439. // 取消弹窗 2022年10月10日
  440. this.ok2();
  441. // this.models2 = {
  442. // disjunctor: true,
  443. // title: "提示",
  444. // content,
  445. // icon: "warn",
  446. // operate: {
  447. // ok: "确定",
  448. // cancel: "取消",
  449. // },
  450. // };
  451. } else {
  452. uni.showToast({
  453. icon: "none",
  454. title: ress.msg || "接口获取数据失败!",
  455. });
  456. }
  457. })
  458. },
  459. // 取消
  460. cancel() {
  461. this.models.disjunctor = false;
  462. },
  463. // 确定
  464. ok2() {
  465. this.models2.disjunctor = false;
  466. let postData = {
  467. ids: [this.queryObj.id],
  468. deptQrCode: this.queryObj.deptCode
  469. };
  470. uni.showLoading({
  471. title: '加载中',
  472. mask: true
  473. });
  474. post("/workerOrder/expectedAndActual", postData).then((ress) => {
  475. uni.hideLoading();
  476. if (ress.status == 200) {
  477. if (this.wcFlag) {
  478. this.overFinish()
  479. } else {
  480. this.gotoOver();
  481. }
  482. } else {
  483. uni.showToast({
  484. icon: "none",
  485. title: ress.msg || "接口获取数据失败!",
  486. });
  487. }
  488. })
  489. },
  490. // 取消
  491. cancel2() {
  492. this.models2.disjunctor = false;
  493. },
  494. know2() {
  495. this.models2.disjunctor = false;
  496. uni.navigateTo({
  497. url: "../receiptpage/receiptpage",
  498. });
  499. },
  500. // 正常完成扫描
  501. overFinish() {
  502. let data = {
  503. type: this.queryObj.type1,
  504. ids: [this.queryObj.id],
  505. };
  506. //只要是标本轮巡1对多或者多对多
  507. // plan-spe-dsd-2 1对多
  508. // plan-spe-dsd-3 多对多
  509. if (
  510. this.queryObj.type1 === "plan-spe-ddd-2" ||
  511. this.queryObj.type1 === "plan-spe-dsd-2" ||
  512. this.queryObj.type1 === "plan-spe-dsd-3"
  513. ) {
  514. post("/workerOrder/finishPlanSpes", data).then((res) => {
  515. // uni.hideLoading()
  516. if (res.status == 200) {
  517. this.models2 = {
  518. disjunctor: true,
  519. title: "提示",
  520. content: `完成扫描成功`,
  521. icon: "success",
  522. operate: {
  523. know: "返回",
  524. },
  525. };
  526. } else {
  527. uni.showToast({
  528. icon: "none",
  529. title: res.msg || "接口获取数据失败!",
  530. });
  531. }
  532. });
  533. } else {
  534. data.handover = this.handoverId || undefined;
  535. data.handoverDeptId = this.handoverDeptId || undefined;
  536. post("/workerOrder/finishSpes", data).then((res) => {
  537. // uni.hideLoading()
  538. if (res.status == 200) {
  539. uni.navigateTo({
  540. url: "../receiptpage/receiptpage",
  541. });
  542. } else {
  543. uni.showToast({
  544. icon: "none",
  545. title: res.msg || "接口获取数据失败!",
  546. });
  547. }
  548. });
  549. }
  550. },
  551. // 跳转到已扫描标本详情页
  552. goToSpeDetail(deptName='', qrCode=''){
  553. uni.navigateTo({
  554. url: `../noScanSpecimen/noScanSpecimen?deptName=${deptName}&workOrderId=${encodeURIComponent(JSON.stringify([this.queryObj.id]))}&deptCode=${qrCode}&isScan=1&specimensCheck=1`,
  555. });
  556. }
  557. },
  558. onLoad(options) {
  559. console.log(options);
  560. this.queryObj = options;
  561. this.getInfo(this.queryObj.id);
  562. this.getConfig();
  563. // #ifdef APP-PLUS
  564. webHandle("no", "app");
  565. // #endif
  566. // #ifdef H5
  567. webHandle("no", "wx");
  568. // #endif
  569. },
  570. };
  571. </script>
  572. <style lang="less" scoped>
  573. /deep/ .uni-collapse-item--border{
  574. border-bottom-color: #fff !important;
  575. }
  576. /deep/ .uni-collapse-item__title-arrow{
  577. margin-right: 0 !important;
  578. }
  579. .checkAfterScanning {
  580. .checkAfterScanning_title {
  581. padding: 50rpx 0;
  582. font-size: 46rpx;
  583. font-weight: 550;
  584. text-align: center;
  585. // border-bottom: 1px solid #ccc;
  586. }
  587. .page_item_cont {
  588. height: 73vh;
  589. overflow-y: auto;
  590. padding: 0 20rpx;
  591. text-align: left;
  592. position: relative;
  593. .text_title{
  594. flex-shrink: 0;
  595. margin-right: 16rpx;
  596. }
  597. .text_big {
  598. font-size: 32rpx;
  599. font-weight: 700;
  600. margin-top: 10rpx;
  601. }
  602. .underline{
  603. text-decoration: underline;
  604. }
  605. .underline-item{
  606. // text-decoration: underline;
  607. // margin-right: 40rpx;
  608. }
  609. .page_item_cont_T {
  610. padding-top: 28rpx;
  611. padding-bottom: 28rpx;
  612. font-size: 28rpx;
  613. background: #fff;
  614. border: 1px solid #CBCBCB;
  615. border-radius: 10rpx;
  616. padding: 20rpx;
  617. .page_item_cont_title {
  618. height: 100%;
  619. font-size: 32rpx;
  620. display: flex;
  621. justify-content: space-between;
  622. align-items: center;
  623. .content{
  624. display: flex;
  625. flex-wrap: wrap;
  626. .list{
  627. font-size: 28rpx;
  628. height: 60rpx;
  629. line-height: 60rpx;
  630. width: 50%;
  631. border-bottom: 1rpx solid #E6E6E6;
  632. &:last-child{
  633. border-bottom: none;
  634. }
  635. }
  636. }
  637. }
  638. .page_item_cont_title2{
  639. margin-top: 36rpx;
  640. margin-bottom: 18rpx;
  641. height: 100%;
  642. font-size: 32rpx;
  643. font-weight: bold;
  644. display: flex;
  645. align-items: center;
  646. }
  647. }
  648. .page_item_cont_title_coll{
  649. display: flex;
  650. justify-content: space-between;
  651. align-items: center;
  652. margin-right: 8rpx;
  653. }
  654. .page_item_cont_B {
  655. padding-top: 28rpx;
  656. margin-bottom: 28rpx;
  657. .page_item_cont_title {
  658. font-size: 32rpx;
  659. display: flex;
  660. justify-content: space-between;
  661. }
  662. .page_item_cont_title1 {
  663. height: 60rpx;
  664. line-height: 60rpx;
  665. font-size: 32rpx;
  666. padding-left: 64rpx;
  667. }
  668. }
  669. }
  670. .foot_btn {
  671. line-height: 88rpx;
  672. height: 100rpx;
  673. margin-top: 40rpx;
  674. display: flex;
  675. justify-content: center;
  676. .btn1,
  677. .btn2,
  678. .btn3 {
  679. height: 88rpx;
  680. flex: 1;
  681. margin: 0 1%;
  682. background-image: linear-gradient(to right, #72c172, #3bb197);
  683. color: #fff;
  684. border-radius: 8rpx;
  685. font-size: 32rpx;
  686. margin-top: 16rpx;
  687. text-align: center;
  688. }
  689. }
  690. .foot_btn_spe {
  691. line-height: 88rpx;
  692. height: 100rpx;
  693. margin-top: 40rpx;
  694. text-align: center;
  695. display: flex;
  696. justify-content: space-between;
  697. flex-wrap: wrap;
  698. &::after {
  699. content: '';
  700. flex: 1;
  701. }
  702. view {
  703. height: 88rpx;
  704. width: 48%;
  705. margin: 0 1%;
  706. background-image: linear-gradient(to right, #72c172, #3bb197);
  707. color: #fff;
  708. border-radius: 8rpx;
  709. font-size: 32rpx;
  710. margin-top: 16rpx;
  711. }
  712. }
  713. }
  714. </style>