shoppingCart.vue 21 KB

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