shoppingCart.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871
  1. <template>
  2. <view>
  3. <nav-logo title="购物车"></nav-logo>
  4. <view v-show="isLogin">
  5. <view v-if="!list.length"
  6. ><u-empty text="购物车为空" margin-top="500" mode="car"></u-empty
  7. ></view>
  8. <view v-else>
  9. <view class="shop_list">
  10. <uni-swipe-action>
  11. <u-checkbox-group @change="checkboxGroupChange" placement="column">
  12. <view>
  13. <!-- :show="item.show" -->
  14. <uni-swipe-action-item
  15. :autoClose="false"
  16. @change="swipeChange($event, item)"
  17. v-for="(item, index) in list"
  18. :key="index"
  19. >
  20. <view class="goods-item">
  21. <view class="item-wrap">
  22. <view class="goods-msg">
  23. <u-checkbox
  24. :disabled="item.disabled"
  25. style="width: 100%"
  26. v-model="item.checked"
  27. @change="checkboxChange"
  28. shape="circle"
  29. :name="item.id"
  30. >
  31. <view class="flex">
  32. <view class="goods-img">
  33. <image
  34. :src="$method.splitImgHost(item.coverUrl, true)"
  35. ></image>
  36. </view>
  37. <view class="flex__auto">
  38. <view class="goods-title">{{
  39. item.goodsName
  40. }}</view>
  41. <view class="priceTag"
  42. >¥ {{ item.standPrice }}</view
  43. >
  44. <view
  45. class="priceTag"
  46. v-if="item.goodsStatus == 0"
  47. >该商品已下架</view
  48. >
  49. </view>
  50. </view>
  51. </u-checkbox>
  52. </view>
  53. <view
  54. class="goods-select"
  55. v-if="
  56. item.templateType != null &&
  57. item.goodsType == 1 &&
  58. !item.disabled
  59. "
  60. >
  61. <u-line color="#D6D6DB" />
  62. <view
  63. class="goods-select__type"
  64. v-if="item.templateType == 'class'"
  65. @click="openPopup(0, item, index)"
  66. >
  67. <view style="color: #666666; font-size: 24rpx">{{
  68. !item.gradObj.className
  69. ? "选择班级"
  70. : item.gradObj.className
  71. }}</view>
  72. <view
  73. ><u-icon
  74. name="arrow-right"
  75. color="#999999"
  76. size="28"
  77. ></u-icon
  78. ></view>
  79. </view>
  80. <view
  81. v-if="item.gradObj.gradeId"
  82. style="padding: 0 100rpx 0 15rpx"
  83. >
  84. <Class-time-tip
  85. :classInfo="item.gradObj"
  86. ></Class-time-tip>
  87. </view>
  88. <view
  89. class="goods-select__type"
  90. v-if="item.templateType == 'apply'"
  91. @click="openPopup(1, item, index)"
  92. >
  93. <view style="color: #666666; font-size: 24rpx">
  94. {{
  95. !item.applyAreas.areaName
  96. ? "报考地区"
  97. : item.examDate.examineName +
  98. "-" +
  99. item.applyAreas.areaName +
  100. "-" +
  101. item.applyAreas.cityName
  102. }}
  103. </view>
  104. <view
  105. ><u-icon
  106. name="arrow-right"
  107. color="#999999"
  108. size="28"
  109. ></u-icon
  110. ></view>
  111. </view>
  112. </view>
  113. </view>
  114. </view>
  115. <template v-slot:right>
  116. <view class="operate" @click="delItem(item)">
  117. <view><text>删除</text></view>
  118. </view>
  119. </template>
  120. </uni-swipe-action-item>
  121. </view>
  122. </u-checkbox-group>
  123. </uni-swipe-action>
  124. </view>
  125. </view>
  126. <u-popup v-model="show" mode="bottom" border-radius="40">
  127. <view class="popup_box">
  128. <view style="margin-bottom: 20rpx">
  129. <view class="line1"></view>
  130. <view class="grade">选择班级</view>
  131. </view>
  132. <u-line color="#D6D6DB" />
  133. <view>
  134. <scroll-view scroll-y="true" style="height: 536rpx">
  135. <view>
  136. <u-radio-group v-model="gradeValue">
  137. <view v-for="(item, index) in gradeList" :key="index">
  138. <view
  139. style="display: flex; align-items: center; padding: 20rpx"
  140. >
  141. <view>
  142. <u-radio shape="circle" :name="index">
  143. <view
  144. :class="
  145. index == gradeValue
  146. ? 'white-box blue-box'
  147. : 'white-box'
  148. "
  149. >
  150. <view>
  151. <view class="blackTxt">{{ item.className }}</view>
  152. <Class-time-tip
  153. :classInfo="item"
  154. ></Class-time-tip>
  155. </view>
  156. </view>
  157. </u-radio>
  158. </view>
  159. </view>
  160. </view>
  161. </u-radio-group>
  162. </view>
  163. </scroll-view>
  164. </view>
  165. <view class="confrim-btn"
  166. ><view class="okBtn" @click="okPopup(0)">确定</view></view
  167. >
  168. </view>
  169. </u-popup>
  170. <u-popup v-model="show1" mode="bottom" border-radius="40">
  171. <view class="popup_box">
  172. <view style="margin-bottom: 20rpx">
  173. <view class="line1"></view>
  174. <view class="grade">选择考期/地区</view>
  175. </view>
  176. <u-line color="#D6D6DB" />
  177. <view style="display: flex; height: 536rpx">
  178. <view style="width: 50%">
  179. <view class="topTxt">考期</view>
  180. <view>
  181. <picker-view
  182. :indicator-style="indicatorStyle"
  183. :value="value"
  184. @change="bindChangeE"
  185. class="picker-view"
  186. >
  187. <picker-view-column>
  188. <view
  189. class="picker-item"
  190. v-for="(item, index) in examine"
  191. :key="index"
  192. >{{ item.examineName }}</view
  193. >
  194. </picker-view-column>
  195. </picker-view>
  196. </view>
  197. </view>
  198. <view style="width: 50%">
  199. <view class="topTxt">地区</view>
  200. <view>
  201. <picker-view
  202. :indicator-style="indicatorStyle"
  203. :value="value"
  204. @change="bindChange"
  205. class="picker-view"
  206. >
  207. <picker-view-column>
  208. <view
  209. class="picker-item"
  210. v-for="(item, index) in provinceList"
  211. :key="index"
  212. >{{ item.areaName }}</view
  213. >
  214. </picker-view-column>
  215. <picker-view-column>
  216. <view
  217. class="picker-item"
  218. v-for="(item, index) in cityList"
  219. :key="index"
  220. >{{ item.areaName }}</view
  221. >
  222. </picker-view-column>
  223. </picker-view>
  224. </view>
  225. </view>
  226. </view>
  227. <view class="confrim-btn"
  228. ><view class="okBtn" @click="okPopup(1)">确定</view></view
  229. >
  230. </view>
  231. </u-popup>
  232. </view>
  233. <view v-show="!isLogin">
  234. <view
  235. style="
  236. display: flex;
  237. align-items: center;
  238. flex-direction: column;
  239. margin-top: 40%;
  240. font-size: 32rpx;
  241. "
  242. >
  243. <view style="color: #999999">您还没有登录哦~</view>
  244. <view style="margin-top: 30rpx"
  245. ><u-button type="primary" @click="login">去登录</u-button></view
  246. >
  247. </view>
  248. </view>
  249. <view class="bottomBox" v-if="!hideBuyState">
  250. <view class="bottons_all">
  251. <view class="check_alls">
  252. <u-checkbox
  253. label="all"
  254. name="all"
  255. shape="circle"
  256. @change="checkboxAllChange"
  257. v-model="allChecked"
  258. ></u-checkbox>
  259. <text class="checkall">全选</text>
  260. <!-- <text class="rmb">¥</text> -->
  261. <view class="all_sum">结算:</view>
  262. <view class="priceTag">¥ {{ toFixed(totalPrice) }}</view>
  263. </view>
  264. <view style="display: flex; align-items: center">
  265. <!-- <view style="color: #999999;margin-right: 8rpx;">合计</view> -->
  266. <view
  267. style="display: flex; color: #ffffff; align-items: center"
  268. @click="goBuy()"
  269. >
  270. <view class="btn2">结算</view>
  271. <!-- <u-icon name="arrow-right" color="#fff" size="30"></u-icon> -->
  272. </view>
  273. </view>
  274. </view>
  275. </view>
  276. </view>
  277. </template>
  278. <script>
  279. import { mapGetters } from "vuex";
  280. import ClassTimeTip from "../../components/common/ClassTimeTip.vue";
  281. import navLogo from "../../components/nav-bar/nav-logo.vue";
  282. export default {
  283. data() {
  284. return {
  285. gradeValue: -1,
  286. isLogin: false,
  287. checkboxValue1: [],
  288. list: [],
  289. value: "",
  290. show: false,
  291. show1: false,
  292. allChecked: false,
  293. isOld: false,
  294. gradeList: [],
  295. examine: [],
  296. provinceList: [],
  297. cityList: [],
  298. detail: {},
  299. detailIndex: -1,
  300. applyObj: {
  301. applyAreasJson: null,
  302. examDateJson: null,
  303. },
  304. pAreaIndex: 0,
  305. cAreaIndex: 0,
  306. examIndex: 0,
  307. current: 3,
  308. indicatorStyle: `height: 50px;`,
  309. };
  310. },
  311. computed: {
  312. ...mapGetters(["userInfo", "hideBuyState", "config"]),
  313. totalPrice() {
  314. let price = 0;
  315. this.checkList.forEach((e) => (price += e.standPrice));
  316. return price;
  317. },
  318. canCheckList() {
  319. return this.list.filter((e) => e.status == 1 && e.goodsStatus == 1);
  320. },
  321. checkList() {
  322. return this.canCheckList.filter((e) => e.checked == true);
  323. },
  324. selectGreadeId() {
  325. if (this.detail.gradObj) {
  326. return this.detail.gradObj.gradeId;
  327. }
  328. return "";
  329. },
  330. },
  331. onLoad(option) {
  332. // console.log(option,987)
  333. },
  334. onShow() {
  335. this.isLogin = this.$method.isLogin();
  336. if (this.isLogin) {
  337. if (uni.getStorageSync("updateCart") || !this.isOld) {
  338. this.isOld = true;
  339. this.cartList();
  340. uni.removeStorageSync("updateCart"); //消费购物车刷新事件
  341. }
  342. }
  343. },
  344. methods: {
  345. toFixed(num) {
  346. return num.toFixed(2);
  347. },
  348. bindChangeE(e) {
  349. this.examIndex = e.detail.value[0];
  350. },
  351. bindChange(e) {
  352. const val = e.detail.value;
  353. if (this.pAreaIndex != e.detail.value[0]) {
  354. this.pAreaIndex = e.detail.value[0];
  355. this.getCityList(this.provinceList[this.pAreaIndex].areaId);
  356. }
  357. if (this.cAreaIndex != e.detail.value[1]) {
  358. this.cAreaIndex = e.detail.value[1];
  359. }
  360. },
  361. checkAreaData() {
  362. if (this.examine.length == 0) {
  363. uni.showModal({
  364. title: "提示",
  365. content: "请选择考期",
  366. showCancel: false,
  367. });
  368. return false;
  369. }
  370. return true;
  371. },
  372. checkData() {
  373. if (this.detail.templateType == "class") {
  374. if (this.gradeValue < 0) {
  375. uni.showModal({
  376. title: "提示",
  377. content: "请选择班级",
  378. showCancel: false,
  379. });
  380. return false;
  381. }
  382. } else if (this.detail.templateType == "apply") {
  383. if (!this.applyObj.examDateJson) {
  384. uni.showModal({
  385. title: "提示",
  386. content: "请选择考期",
  387. showCancel: false,
  388. });
  389. return false;
  390. }
  391. }
  392. return true;
  393. },
  394. //弹出框确定
  395. okPopup(index) {
  396. if (index == 0) {
  397. if (!this.checkData()) {
  398. return;
  399. }
  400. this.gradeIndex = this.gradeValue;
  401. this.list[this.detailIndex].gradObj = this.gradeList[this.gradeIndex]; //商品赋值选中班级
  402. // this.$set(
  403. // this.list[this.detailIndex],
  404. // "gradObj",
  405. // this.gradeList[this.gradeIndex]
  406. // );
  407. this.show = false;
  408. } else {
  409. if (!this.checkAreaData()) {
  410. return;
  411. }
  412. this.examDate = this.examine[this.examIndex];
  413. let pData = this.provinceList[this.pAreaIndex];
  414. let cData = this.cityList[this.cAreaIndex];
  415. this.applyAreas = {
  416. areaName: pData.areaName,
  417. areaId: pData.areaId,
  418. cityId: cData.areaId,
  419. cityName: cData.areaName,
  420. };
  421. // this.applyObj.applyAreasJson = JSON.stringify(this.applyAreas)
  422. // this.applyObj.examDateJson = JSON.stringify(this.examDate)
  423. this.list[this.detailIndex].examDate = this.examDate; //商品赋值选中考期地区
  424. this.list[this.detailIndex].applyAreas = this.applyAreas; //商品赋值选中考期地区
  425. this.show1 = false;
  426. }
  427. },
  428. getExamine(id) {
  429. let self = this;
  430. this.$api.getExamine({ projectId: id }).then((res) => {
  431. if (res.data.code == 200) {
  432. self.examine = res.data.rows;
  433. }
  434. });
  435. },
  436. getCityList(id) {
  437. let self = this;
  438. this.$api.getCityList({ parentId: id }).then((res) => {
  439. if (res.data.code == 200) {
  440. self.cityList = res.data.rows;
  441. }
  442. });
  443. },
  444. getProvinceList() {
  445. let self = this;
  446. if (self.provinceList.length > 0) {
  447. return;
  448. }
  449. this.$api.getProvinceList().then((res) => {
  450. if (res.data.code == 200) {
  451. self.provinceList = res.data.rows;
  452. if (self.provinceList.length > 0) {
  453. self.getCityList(self.provinceList[0].areaId);
  454. }
  455. }
  456. });
  457. },
  458. goodsGradeList(goodsId) {
  459. let self = this;
  460. this.$api.goodsGradeList({ goodsId: goodsId }).then((res) => {
  461. if (res.data.code == 200) {
  462. self.gradeList = res.data.rows;
  463. if (self.gradeList.length == 0) {
  464. let item = {
  465. className: "系统分班",
  466. gradeId: 0,
  467. };
  468. self.gradeList.push(item);
  469. }
  470. this.gradeValue = self.gradeList.findIndex(
  471. (e) => e.gradeId == this.selectGreadeId
  472. );
  473. }
  474. });
  475. },
  476. openPopup(index, item, itemIndex) {
  477. this.detail = item;
  478. console.log(this.detail, 798);
  479. this.detailIndex = itemIndex;
  480. if (index == 0) {
  481. this.show = true;
  482. this.goodsGradeList(item.goodsId);
  483. } else {
  484. this.applyObj = {
  485. applyAreasJson: null,
  486. examDateJson: null,
  487. };
  488. this.pAreaIndex = 0;
  489. this.cAreaIndex = 0;
  490. this.examIndex = 0;
  491. this.show1 = true;
  492. this.getProvinceList();
  493. this.getExamine(item.projectId);
  494. }
  495. },
  496. checkboxGroupChange(e) {
  497. this.allChecked = this.canCheckList.length === this.checkList.length;
  498. },
  499. checkboxChange(e) {
  500. this.updateCartCheckStatus([e.name], e.value);
  501. },
  502. login() {
  503. uni.navigateTo({ url: "/pages4/login/login" });
  504. },
  505. cartList() {
  506. let self = this;
  507. this.$api.cartList().then((res) => {
  508. let { code, rows } = res.data;
  509. if (code == 200) {
  510. for (const item of rows) {
  511. let {
  512. choiceStatus,
  513. goodsStatus,
  514. status,
  515. gradeList,
  516. templateType,
  517. goodsType,
  518. } = item;
  519. item.gradObj = {};
  520. item.show = false;
  521. item.applyAreas = {};
  522. item.examDate = {};
  523. if (status != 1 || goodsStatus != 1) {
  524. item.disabled = true;
  525. } else {
  526. item.disabled = false;
  527. item.checked = choiceStatus == 1;
  528. if (templateType === "class" && goodsType == 1) {
  529. // 无返回就默认系统分班
  530. if (gradeList || gradeList.length === 0) {
  531. gradeList = [
  532. {
  533. className: "系统分班",
  534. gradeId: 0,
  535. },
  536. ];
  537. }
  538. item.gradObj = item.gradeList[0];
  539. }
  540. }
  541. }
  542. self.list = res.data.rows;
  543. this.checkboxGroupChange();
  544. }
  545. });
  546. },
  547. updateCartCheckStatus(ids, check) {
  548. let data = {
  549. ids,
  550. choiceStatus: check ? 1 : 0,
  551. };
  552. this.$api.updateCartCheckStatus(data).then((res) => {});
  553. },
  554. delItem(item) {
  555. let self = this;
  556. this.$api.deleteCart(item.id).then((res) => {
  557. if (res.data.code == 200) {
  558. self.cartList();
  559. }
  560. });
  561. },
  562. swipeChange(e, item) {
  563. item.show = e;
  564. },
  565. goBuy() {
  566. if (this.checkList.length == 0) {
  567. uni.showModal({
  568. title: "提示",
  569. content: "请选择商品",
  570. showCancel: false,
  571. });
  572. return;
  573. }
  574. this.checkList.forEach((item) => {
  575. if (item.templateType == "class" && item.goodsType == 1) {
  576. if (!item.gradObj.className) {
  577. uni.showModal({
  578. title: "提示",
  579. content: "请选择班级",
  580. showCancel: false,
  581. });
  582. return false;
  583. }
  584. }
  585. if (item.templateType == "apply" && item.goodsType == 1) {
  586. // if (!item.applyAreas.areaName) {
  587. // uni.showModal({
  588. // title: '提示',
  589. // content: '请选择报考地区',
  590. // showCancel: false
  591. // });
  592. // return false;
  593. // }
  594. }
  595. });
  596. this.$store.commit("setShoppingCartList", {
  597. shoppingCartList: this.checkList,
  598. });
  599. this.$navTo.togo("/pages2/order/confirm_pay?fromCart=true");
  600. },
  601. checkboxAllChange(n) {
  602. let ids = [];
  603. this.canCheckList.forEach((e) => {
  604. e.checked = n.value;
  605. ids.push(e.id);
  606. });
  607. this.updateCartCheckStatus(ids, n.value);
  608. },
  609. },
  610. components: { ClassTimeTip, navLogo },
  611. };
  612. </script>
  613. <style>
  614. page {
  615. background-color: #eaeef1;
  616. }
  617. </style>
  618. <style scoped lang="scss">
  619. .shop_list {
  620. padding: 16rpx 16rpx 180rpx 16rpx;
  621. // padding-bottom: 98rpx;
  622. }
  623. .operate {
  624. background-color: #ff3b30;
  625. color: #ffffff;
  626. border-top-right-radius: 16rpx;
  627. border-bottom-right-radius: 16rpx;
  628. margin-bottom: 20rpx;
  629. display: flex;
  630. align-items: center;
  631. justify-content: center;
  632. padding: 0 20rpx;
  633. }
  634. .picker-item {
  635. height: 50px;
  636. align-items: center;
  637. justify-content: center;
  638. text-align: center;
  639. }
  640. .picker-view {
  641. width: 100%;
  642. height: 420rpx;
  643. text-align: center;
  644. }
  645. .topTxt {
  646. font-size: 30rpx;
  647. color: #666666;
  648. text-align: center;
  649. padding: 20rpx 0;
  650. }
  651. .blackTxt {
  652. font-size: 30rpx;
  653. font-family: PingFang SC;
  654. font-weight: bold;
  655. color: #333333;
  656. }
  657. .blue-box {
  658. background: #ebf5ff;
  659. }
  660. .white-box {
  661. width: 646rpx;
  662. border-radius: 24rpx;
  663. align-items: center;
  664. display: flex;
  665. padding-left: 15rpx;
  666. }
  667. .okBtn {
  668. width: 200rpx;
  669. height: 64rpx;
  670. background: linear-gradient(0deg, #015eea, #00c0fa);
  671. border-radius: 32rpx;
  672. color: #ffffff;
  673. text-align: center;
  674. line-height: 64rpx;
  675. }
  676. .confrim-btn {
  677. border-top: 1px solid #eeeeee;
  678. height: 98rpx;
  679. width: 100%;
  680. display: flex;
  681. align-items: center;
  682. justify-content: center;
  683. }
  684. .grade {
  685. height: 23rpx;
  686. font-size: 24rpx;
  687. color: #999999;
  688. margin: 0 auto;
  689. margin-top: 15rpx;
  690. text-align: center;
  691. }
  692. .line1 {
  693. width: 80rpx;
  694. height: 8rpx;
  695. background: #999999;
  696. border-radius: 4rpx;
  697. margin: 0 auto;
  698. margin-top: 15rpx;
  699. }
  700. .popup_box {
  701. height: 700rpx;
  702. box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
  703. border-radius: 32rpx 32rpx 0rpx 0rpx;
  704. }
  705. .goods-item {
  706. width: 100%;
  707. background: #ffffff;
  708. border-radius: 24rpx;
  709. margin-bottom: 12rpx;
  710. padding: 15rpx 0;
  711. display: flex;
  712. .item-wrap {
  713. width: 100%;
  714. .goods-msg {
  715. padding: 0rpx 0rpx 0rpx 22rpx;
  716. display: flex;
  717. align-items: center;
  718. .flex {
  719. display: flex;
  720. padding-bottom: 15rpx;
  721. width: 630rpx;
  722. .goods-img {
  723. overflow: hidden;
  724. width: 204rpx;
  725. height: 120rpx;
  726. border-radius: 22rpx;
  727. margin-left: 22rpx;
  728. margin-right: 24rpx;
  729. image {
  730. display: block;
  731. // width: 278rpx;
  732. // height: 156rpx;
  733. width: 100%;
  734. height: 100%;
  735. }
  736. }
  737. &__auto {
  738. flex: 1;
  739. .goods-title {
  740. color: #333333;
  741. font-size: 28rpx;
  742. font-weight: bold;
  743. text-align: right;
  744. width: 378rpx;
  745. overflow: hidden;
  746. text-overflow: ellipsis;
  747. white-space: nowrap;
  748. }
  749. .priceTag {
  750. font-size: 32rpx;
  751. font-family: PingFang SC;
  752. font-weight: bold;
  753. color: #fc3f3f;
  754. display: flex;
  755. // flex-direction: row-reverse;
  756. margin-right: 8rpx;
  757. margin-top: 25rpx;
  758. }
  759. }
  760. }
  761. }
  762. .goods-select {
  763. &__type {
  764. display: flex;
  765. justify-content: space-between;
  766. align-items: center;
  767. height: 50rpx;
  768. padding: 0 15rpx;
  769. }
  770. }
  771. }
  772. }
  773. .btn2 {
  774. font-size: 32rpx;
  775. font-weight: 500;
  776. color: #ffffff;
  777. margin-right: 8rpx;
  778. width: 232rpx;
  779. height: 92rpx;
  780. line-height: 92rpx;
  781. text-align: center;
  782. background: #fc3f3f;
  783. border-radius: 120rpx;
  784. }
  785. .bottomBox {
  786. position: fixed;
  787. bottom: 0rpx;
  788. width: 100%;
  789. left: 0;
  790. height: 132rpx;
  791. background-color: #ffffff;
  792. display: flex;
  793. justify-content: space-between;
  794. align-items: center;
  795. padding: 0 32rpx;
  796. box-shadow: 0px -2px 6px 0px rgba(0, 0, 0, 0.1);
  797. z-index: 9999;
  798. .bottons_all {
  799. // width: 674rpx;
  800. // height: 104rpx;
  801. // background: #007AFF;
  802. // border-radius: 52rpx;
  803. width: 100%;
  804. display: flex;
  805. align-items: center;
  806. justify-content: space-between;
  807. // padding: 0rpx 26rpx 0rpx 23rpx;
  808. }
  809. .priceTag {
  810. font-size: 32rpx;
  811. font-family: PingFang SC;
  812. font-weight: bold;
  813. color: #fc3f3f;
  814. display: flex;
  815. flex-direction: row-reverse;
  816. margin-right: 20rpx;
  817. }
  818. .check_alls {
  819. display: flex;
  820. align-items: center;
  821. color: #969696;
  822. // .rmb {
  823. // // margin-right: 9rpx;
  824. // // margin-left: 35rpx;
  825. // // font-size: 20rpx;
  826. // // position: relative;
  827. // // top: -14rpx;
  828. // // left: 0rpx;
  829. // }
  830. }
  831. .all_sum {
  832. font-size: 28rpx;
  833. font-weight: 800;
  834. color: #303030;
  835. margin-left: 35rpx;
  836. }
  837. .checkall {
  838. font-weight: 500;
  839. color: #969696;
  840. font-size: 28rpx;
  841. }
  842. }
  843. .half_circle {
  844. position: fixed;
  845. bottom: 0rpx;
  846. width: 100%;
  847. left: 0;
  848. height: 20rpx;
  849. border: 1rpx solid;
  850. display: flex;
  851. justify-content: center;
  852. .bulge {
  853. width: 110rpx;
  854. height: 55rpx;
  855. border-radius: 55px 55px 0px 0px;
  856. background-color: #fff;
  857. }
  858. }
  859. </style>