You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

987 lines
26 KiB

3 months ago
  1. <template>
  2. <view :data-theme="theme">
  3. <!-- #ifndef APP-PLUS-->
  4. <view v-if="productType==='video'" class='cart_nav'>
  5. <nav-bar :navTitle='navTitle' @getNavH='getNavH'></nav-bar>
  6. </view>
  7. <!-- #endif -->
  8. <view class='order-submission' :style="'margin-top:'+(marTop)+'rpx;'">
  9. <view class="allAddress" :style="store_self_mention ? '':'padding-top:0;'">
  10. <view class="nav acea-row">
  11. <view class="item font_color" :class="shippingType == 0 ? 'on' : 'on2'" @tap="addressType(0)"
  12. v-if='store_self_mention'></view>
  13. <view class="item font_color" :class="shippingType == 1 ? 'on' : 'on2'" @tap="addressType(1)"
  14. v-if='store_self_mention'></view>
  15. </view>
  16. <view class='address acea-row row-between-wrapper' @tap='onAddress' v-if='shippingType == 0'
  17. :style="store_self_mention ? '':'border-top-left-radius: 14rpx;border-top-right-radius: 14rpx;'">
  18. <view class='addressCon' v-if="addressInfo.realName">
  19. <view class='name'>{{addressInfo.realName}}
  20. <text class='phone'>{{addressInfo.phone}}</text>
  21. </view>
  22. <view class="acea-row">
  23. <text class='default font_color' v-if="addressInfo.isDefault">[默认]</text>
  24. <text
  25. class="line2">{{addressInfo.province}}{{addressInfo.city}}{{addressInfo.district}}{{addressInfo.detail}}</text>
  26. </view>
  27. </view>
  28. <view class='addressCon' v-else>
  29. <view class='setaddress'>设置收货地址</view>
  30. </view>
  31. <view class='iconfont icon-jiantou'></view>
  32. </view>
  33. <view class='address acea-row row-between-wrapper' v-else @tap="showStoreList">
  34. <block v-if="storeList.length>0">
  35. <view class='addressCon'>
  36. <view class='name'>{{system_store.name}}
  37. <text class='phone'>{{system_store.phone}}</text>
  38. </view>
  39. <view class="line1"> {{system_store.address}}{{", " + system_store.detailedAddress}}
  40. </view>
  41. </view>
  42. <view class='iconfont icon-jiantou'></view>
  43. </block>
  44. <block v-else>
  45. <view>暂无门店信息</view>
  46. </block>
  47. </view>
  48. <view class='line'>
  49. <image :src="urlDomain+'crmebimage/perset/staticImg/line.jpg'"></image>
  50. </view>
  51. </view>
  52. <view class="pad30">
  53. <orderGoods :cartInfo="cartInfo" :orderProNum="orderProNum"></orderGoods>
  54. <view class='wrapper borRadius14'>
  55. <view class='item acea-row row-between-wrapper' @tap='couponTap'
  56. v-if="!orderInfoVo.bargainId && !orderInfoVo.combinationId && !orderInfoVo.seckillId && productType==='normal'">
  57. <view>优惠券</view>
  58. <view class='discount'>{{couponTitle}}
  59. <text class='iconfont icon-jiantou'></text>
  60. </view>
  61. </view>
  62. <view class='item acea-row row-between-wrapper'
  63. v-if="!orderInfoVo.bargainId && !orderInfoVo.combinationId && !orderInfoVo.seckillId && productType==='normal'">
  64. <view>积分抵扣</view>
  65. <view class='discount acea-row row-middle'>
  66. <view> {{useIntegral ? "剩余积分":"当前积分"}}
  67. <text
  68. class='num font_color'>{{useIntegral ? orderInfoVo.surplusIntegral : orderInfoVo.userIntegral || 0}}</text>
  69. </view>
  70. <checkbox-group @change="ChangeIntegral">
  71. <checkbox :checked='useIntegral ? true : false'
  72. :disabled="orderInfoVo.userIntegral==0 && !useIntegral" />
  73. </checkbox-group>
  74. </view>
  75. </view>
  76. <!-- <view class='item acea-row row-between-wrapper'
  77. v-if="priceGroup.vipPrice > 0 && userInfo.vip && !pinkId && !BargainId && !combinationId && !seckillId">
  78. <view>会员优惠</view>
  79. <view class='discount'>-{{priceGroup.vipPrice}}</view>
  80. </view> -->
  81. <view class='item acea-row row-between-wrapper' v-if='shippingType==0'>
  82. <view>快递费用</view>
  83. <view class='discount' v-if='parseFloat(orderInfoVo.freightFee) > 0'>
  84. +{{orderInfoVo.freightFee}}
  85. </view>
  86. <view class='discount' v-else>免运费</view>
  87. </view>
  88. <view v-else>
  89. <view class="item acea-row row-between-wrapper">
  90. <view>联系人</view>
  91. <view class="discount textR">
  92. <input type="text" placeholder="请填写您的联系姓名" placeholder-style="color:#ccc;"
  93. placeholder-class="placeholder" @blur='realName' maxlength="20"></input>
  94. </view>
  95. </view>
  96. <view class="item acea-row row-between-wrapper">
  97. <view>联系电话</view>
  98. <view class="discount textR">
  99. <input type="number" placeholder="请填写您的联系电话" placeholder-style="color:#ccc;"
  100. placeholder-class="placeholder" @blur='phone' maxlength="11"></input>
  101. </view>
  102. </view>
  103. </view>
  104. <!-- <view class='item acea-row row-between-wrapper' wx:else>
  105. <view>自提门店</view>
  106. <view class='discount'>{{system_store.name}}</view>
  107. </view> -->
  108. <view class='item' v-if="textareaStatus">
  109. <view class="flex justify-between">
  110. <view>备注信息</view>
  111. <view>
  112. <text style="color:#666;">{{markNum ? markNum : 0}}</text>/<text>150</text>
  113. </view>
  114. </view>
  115. <textarea v-if="coupon.coupon===false" placeholder-class='placeholder' @input='bindHideKeyboard'
  116. :maxlength="150" value="" name="mark" placeholder='请添加备注(150字以内)'></textarea>
  117. </view>
  118. </view>
  119. <view class='moneyList borRadius14'>
  120. <view class='item acea-row row-between-wrapper'>
  121. <view>商品总价</view>
  122. <view class='money'>{{orderInfoVo.proTotalFee || 0}}</view>
  123. </view>
  124. <view class='item acea-row row-between-wrapper' v-if="orderInfoVo.couponFee > 0">
  125. <view>优惠券抵扣</view>
  126. <view class='money'>-{{orderInfoVo.couponFee}}</view>
  127. </view>
  128. <view class='item acea-row row-between-wrapper' v-if="orderInfoVo.deductionPrice > 0">
  129. <view>积分抵扣</view>
  130. <view class='money'>-{{orderInfoVo.deductionPrice}}</view>
  131. </view>
  132. <view class='item acea-row row-between-wrapper' v-if="orderInfoVo.freightFee > 0">
  133. <view>运费</view>
  134. <view class='money'>+{{orderInfoVo.freightFee}}</view>
  135. </view>
  136. </view>
  137. <view style='height:120rpx;'></view>
  138. </view>
  139. <view class='footer acea-row row-between-wrapper'>
  140. <view>合计:
  141. <text class='price_color'>{{orderInfoVo.payFee || 0}}</text>
  142. </view>
  143. <view class='settlement' style='z-index:100' @tap="SubOrder">提交订单</view>
  144. </view>
  145. </view>
  146. <view class="alipaysubmit" v-html="formContent"></view>
  147. <couponListWindow :coupon='coupon' @ChangCouponsClone="ChangCouponsClone" :openType='openType'
  148. @ChangCoupons="ChangCoupons" :orderShow="orderShow"></couponListWindow>
  149. </view>
  150. </template>
  151. <script>
  152. import {
  153. getCouponsOrderPrice,
  154. orderCreate,
  155. postOrderComputed,
  156. orderPay,
  157. wechatQueryPayResult,
  158. loadPreOrderApi
  159. } from '@/api/order.js';
  160. import {
  161. getAddressDetail,
  162. getAddressDefault
  163. } from '@/api/user.js';
  164. import {
  165. openPaySubscribe,
  166. openOrderSubscribe
  167. } from '@/utils/SubscribeMessage.js';
  168. import {
  169. storeListApi
  170. } from '@/api/store.js';
  171. import {
  172. CACHE_LONGITUDE,
  173. CACHE_LATITUDE
  174. } from '@/config/cache.js';
  175. import couponListWindow from '@/components/couponListWindow';
  176. import orderGoods from '@/components/orderGoods';
  177. import navBar from '@/components/navBar';
  178. import {
  179. toLogin
  180. } from '@/libs/login.js';
  181. import {
  182. mapGetters
  183. } from "vuex";
  184. import {
  185. Debounce
  186. } from '@/utils/validate.js'
  187. let app = getApp();
  188. export default {
  189. components: {
  190. navBar,
  191. couponListWindow,
  192. orderGoods,
  193. },
  194. onReady() {
  195. this.$nextTick(function() {
  196. // #ifdef MP
  197. const menuButton = uni.getMenuButtonBoundingClientRect();
  198. const query = uni.createSelectorQuery().in(this);
  199. query
  200. .select('#home')
  201. .boundingClientRect(data => {
  202. this.homeTop = menuButton.top * 2 + menuButton.height - data.height;
  203. })
  204. .exec();
  205. // #endif
  206. });
  207. },
  208. data() {
  209. return {
  210. urlDomain: this.$Cache.get("imgHost"),
  211. marTop: 0,
  212. navTitle: '提交订单',
  213. homeTop: 20,
  214. orderShow: 'orderShow', //下单页面使用优惠券组件不展示tab切换页
  215. textareaStatus: true,
  216. //支付方式
  217. cartArr: [{
  218. "name": "微信支付",
  219. "icon": "icon-weixin2",
  220. value: 'weixin',
  221. title: '微信快捷支付',
  222. // #ifdef APP
  223. payStatus: 0,
  224. // #endif
  225. // #ifndef APP
  226. payStatus: 1,
  227. // #endif
  228. },
  229. {
  230. "name": "余额支付",
  231. "icon": "icon-yuezhifu",
  232. value: 'yue',
  233. title: '可用余额:',
  234. payStatus: 1,
  235. }
  236. ],
  237. payType: 'weixin', //支付方式
  238. openType: 1, //优惠券打开方式 1=使用
  239. active: 0, //支付方式切换
  240. coupon: {
  241. coupon: false,
  242. list: [],
  243. statusTile: '立即使用'
  244. }, //优惠券组件
  245. addressInfo: {}, //地址信息
  246. addressId: 0, //地址id
  247. couponId: 0, //优惠券id
  248. cartId: '', //购物车id
  249. userInfo: {}, //用户信息
  250. mark: '', //备注信息
  251. couponTitle: '请选择', //优惠券
  252. coupon_price: 0, //优惠券抵扣金额
  253. useIntegral: false, //是否使用积分
  254. integral_price: 0, //积分抵扣金额
  255. integral: 0,
  256. ChangePrice: 0, //使用积分抵扣变动后的金额
  257. formIds: [], //收集formid
  258. status: 0,
  259. is_address: false,
  260. toPay: false, //修复进入支付时页面隐藏从新刷新页面
  261. shippingType: 0,
  262. system_store: {},
  263. storePostage: 0,
  264. contacts: '',
  265. contactsTel: '',
  266. mydata: {},
  267. storeList: [],
  268. store_self_mention: false,
  269. cartInfo: [],
  270. priceGroup: {},
  271. animated: false,
  272. totalPrice: 0,
  273. integralRatio: "0",
  274. orderKey: "",
  275. // usableCoupon: {},
  276. offlinePostage: "",
  277. payChannel: '',
  278. news: true,
  279. again: false,
  280. addAgain: false,
  281. bargain: false, //是否是砍价
  282. combination: false, //是否是拼团
  283. secKill: false, //是否是秒杀
  284. orderInfoVo: {},
  285. addressList: [], //地址列表数据
  286. orderProNum: 0,
  287. preOrderNo: '', //预下单订单号
  288. theme: app.globalData.theme,
  289. formContent: '',
  290. addressChangeId: 0,
  291. orderNo: '' //下单订单号
  292. };
  293. },
  294. computed: {
  295. ...mapGetters(['isLogin', 'systemPlatform', 'productType']),
  296. markNum() {
  297. if (this.mark) {
  298. return this.mark.length
  299. }
  300. }
  301. },
  302. watch: {
  303. isLogin: {
  304. handler: function(newV, oldV) {
  305. if (newV) {
  306. this.getloadPreOrder();
  307. }
  308. },
  309. deep: true
  310. }
  311. },
  312. onLoad(options) {
  313. // #ifdef H5
  314. this.payChannel = this.$wechat.isWeixin() ? 'public' : 'weixinh5';
  315. // #endif
  316. // #ifdef MP
  317. this.payChannel = 'routine';
  318. // #endif
  319. // #ifdef APP-PLUS
  320. this.payChannel = this.systemPlatform === 'ios' ? 'weixinAppIos' : 'weixinAppAndroid';
  321. // #endif
  322. // if (!options.cartId) return this.$util.Tips({
  323. // title: '请选择要购买的商品'
  324. // }, {
  325. // tab: 3,
  326. // url: 1
  327. // });
  328. this.preOrderNo = options.preOrderNo || 0;
  329. this.addressChangeId = options.addressId || 0;
  330. this.is_address = options.is_address ? true : false;
  331. if (this.isLogin) {
  332. this.getloadPreOrder();
  333. } else {
  334. toLogin();
  335. }
  336. },
  337. /**
  338. * 生命周期函数--监听页面显示
  339. */
  340. onShow: function() {
  341. let _this = this
  342. // wx.getLaunchOptionsSync
  343. this.textareaStatus = true;
  344. uni.$on("handClick", res => {
  345. if (res) {
  346. _this.system_store = res.address
  347. }
  348. // 清除监听
  349. uni.$off('handClick');
  350. })
  351. },
  352. methods: {
  353. getNavH(marTop) {
  354. this.marTop = marTop;
  355. },
  356. // 订单详情
  357. getloadPreOrder: function() {
  358. loadPreOrderApi(this.preOrderNo).then(res => {
  359. let orderInfoVo = res.data.orderInfoVo;
  360. this.orderInfoVo = orderInfoVo;
  361. if (orderInfoVo.addressId && this.addressChangeId === 0) {
  362. this.addressId = orderInfoVo.addressId;
  363. } else {
  364. this.addressId = this.addressChangeId;
  365. if (orderInfoVo.addressId != this.addressChangeId) this.computedPrice();
  366. }
  367. this.cartInfo = orderInfoVo.orderDetailList;
  368. this.orderProNum = orderInfoVo.orderProNum;
  369. this.cartArr[1].title = '可用余额:' + orderInfoVo.userBalance;
  370. this.cartArr[1].payStatus = parseInt(res.data.yuePayStatus) === 1 ? 1 : 2;
  371. this.cartArr[0].payStatus = parseInt(res.data.payWeixinOpen) === 1 ? 1 : 0;
  372. this.getaddressInfo();
  373. // #ifdef H5
  374. if (this.$wechat.isWeixin()) this.cartArr.pop();
  375. // #endif
  376. this.store_self_mention = res.data.storeSelfMention == '1' && this
  377. .productType ===
  378. 'normal' ? true : false;
  379. }).catch(err => {
  380. uni.navigateTo({
  381. url: '/pages/users/order_list/index'
  382. });
  383. })
  384. },
  385. /**
  386. * 获取门店列表数据
  387. */
  388. getList: function() {
  389. let longitude = uni.getStorageSync("user_longitude") ? uni.getStorageSync("user_longitude") : ''; //经度
  390. let latitude = uni.getStorageSync("user_latitude") ? uni.getStorageSync("user_latitude") : ''; //纬度
  391. let data = {
  392. latitude: latitude, //纬度
  393. longitude: longitude, //经度
  394. page: 1,
  395. limit: 10
  396. }
  397. storeListApi(data).then(res => {
  398. let list = res.data.list || [];
  399. this.$set(this, 'storeList', list);
  400. this.$set(this, 'system_store', list[0]);
  401. }).catch(err => {
  402. return this.$util.Tips({
  403. title: err
  404. });
  405. })
  406. },
  407. /*
  408. * 跳转门店列表
  409. */
  410. showStoreList: function() {
  411. if (this.storeList.length > 0) {
  412. uni.navigateTo({
  413. url: '/pages/goods/goods_details_store/index'
  414. })
  415. }
  416. },
  417. // 计算订单价格
  418. computedPrice: function() {
  419. let shippingType = this.shippingType;
  420. postOrderComputed({
  421. addressId: this.addressId,
  422. useIntegral: this.useIntegral ? true : false,
  423. couponId: this.couponId,
  424. shippingType: parseInt(shippingType) + 1,
  425. preOrderNo: this.preOrderNo
  426. }).then(res => {
  427. let data = res.data;
  428. this.orderInfoVo.couponFee = data.couponFee;
  429. //赋值操作,userIntegral 当前积分,surplusIntegral 剩余积分
  430. this.orderInfoVo.userIntegral = data.surplusIntegral;
  431. this.orderInfoVo.deductionPrice = data.deductionPrice;
  432. this.orderInfoVo.freightFee = data.freightFee;
  433. this.orderInfoVo.payFee = data.payFee;
  434. this.orderInfoVo.proTotalFee = data.proTotalFee;
  435. this.orderInfoVo.useIntegral = data.useIntegral;
  436. this.orderInfoVo.usedIntegral = data.usedIntegral;
  437. this.orderInfoVo.surplusIntegral = data.surplusIntegral;
  438. //this.orderInfoVo.userIntegral = data.userIntegral;
  439. }).catch(err => {
  440. return this.$util.Tips({
  441. title: err
  442. });
  443. });
  444. },
  445. //选择地址还是门店自提
  446. addressType: function(e) {
  447. let index = e;
  448. this.shippingType = parseInt(index);
  449. this.computedPrice();
  450. //调起获取定位信息
  451. if (index == 1) {
  452. this.getList();
  453. this.$util.$L.getLocation();
  454. }
  455. },
  456. bindPickerChange: function(e) {
  457. let value = e.detail.value;
  458. this.shippingType = value;
  459. this.computedPrice();
  460. },
  461. ChangCouponsClone: function() {
  462. this.$set(this.coupon, 'coupon', false);
  463. },
  464. /**
  465. * 处理点击优惠券后的事件
  466. *
  467. */
  468. ChangCoupons: function(e) {
  469. // this.usableCoupon = e
  470. // this.coupon.coupon = false
  471. let index = e,
  472. list = this.coupon.list,
  473. couponTitle = '请选择',
  474. couponId = 0;
  475. for (let i = 0, len = list.length; i < len; i++) {
  476. if (i != index) {
  477. list[i].use_title = '';
  478. list[i].isUse = 0;
  479. }
  480. }
  481. if (list[index].isUse) {
  482. //不使用优惠券
  483. list[index].use_title = '';
  484. list[index].isUse = 0;
  485. } else {
  486. //使用优惠券
  487. list[index].use_title = '不使用';
  488. list[index].isUse = 1;
  489. couponTitle = list[index].name;
  490. couponId = list[index].id;
  491. }
  492. this.couponTitle = couponTitle;
  493. this.couponId = couponId;
  494. this.$set(this.coupon, 'coupon', false);
  495. this.$set(this.coupon, 'list', list);
  496. this.computedPrice();
  497. },
  498. /**
  499. * 使用积分抵扣
  500. */
  501. ChangeIntegral: function() {
  502. this.useIntegral = !this.useIntegral;
  503. this.computedPrice();
  504. },
  505. bindHideKeyboard: function(e) {
  506. this.mark = e.detail.value;
  507. },
  508. /**
  509. * 获取当前金额可用优惠券
  510. *
  511. */
  512. getCouponList: function() {
  513. getCouponsOrderPrice(this.preOrderNo).then(res => {
  514. this.$set(this.coupon, 'list', res.data);
  515. this.openType = 1;
  516. });
  517. },
  518. /*
  519. * 获取默认收货地址或者获取某条地址信息
  520. */
  521. getaddressInfo: function() {
  522. if (this.addressId) {
  523. getAddressDetail(this.addressId).then(res => {
  524. if (res.data) {
  525. res.data.isDefault = res.data.isDefault;
  526. this.addressInfo = res.data || {};
  527. }
  528. })
  529. }
  530. },
  531. payItem: function(e) {
  532. let that = this;
  533. let active = e;
  534. that.active = active;
  535. that.animated = true;
  536. that.payType = that.cartArr[active].value;
  537. // #ifdef H5
  538. if (that.payType == 'alipay' && this.$wechat.isWeixin() == true) {
  539. that.payChannel = 'public';
  540. } else if (that.payType == 'alipay' && this.$wechat.isWeixin() == false) {
  541. that.payChannel = 'weixinh5';
  542. }
  543. // #endif
  544. // #ifdef APP-PLUS
  545. if (that.payType == 'alipay') {
  546. that.payChannel = 'appAliPay';
  547. }
  548. // #endif
  549. //that.computedPrice();
  550. setTimeout(function() {
  551. that.car();
  552. }, 500);
  553. },
  554. couponTap: function() {
  555. this.coupon.coupon = true;
  556. if (!this.coupon.list.length) this.getCouponList();
  557. },
  558. car: function() {
  559. let that = this;
  560. that.animated = false;
  561. },
  562. onAddress: function() {
  563. uni.redirectTo({
  564. url: '/pages/users/user_address_list/index?preOrderNo=' + this.preOrderNo
  565. });
  566. },
  567. realName: function(e) {
  568. this.contacts = e.detail.value;
  569. },
  570. phone: function(e) {
  571. this.contactsTel = e.detail.value;
  572. },
  573. payment: function(data) {
  574. let that = this;
  575. // #ifdef MP
  576. uni.checkBeforeAddOrder({
  577. success(res) {
  578. console.log("下单前置检查 成功:", JSON.stringify(res));
  579. const traceId = res.data.traceId;
  580. data.traceId = traceId;
  581. that.onCreate(data);
  582. },
  583. fail(res) {
  584. console.log("下单前置检查 失败:", JSON.stringify(res));
  585. }
  586. });
  587. // #endif
  588. // #ifndef MP
  589. that.onCreate(data);
  590. // #endif
  591. },
  592. onCreate(data) {
  593. let that = this
  594. orderCreate(data).then(res => {
  595. this.orderNo = res.data.orderNo;
  596. console.log(res.data.orderNo);
  597. uni.navigateTo({
  598. url:`/pages/order/order_payment/index?orderNo=${this.orderNo}&payPrice=${this.orderInfoVo.payFee}`
  599. })
  600. }).catch(err => {
  601. uni.hideLoading();
  602. return that.$util.Tips({
  603. title: err
  604. }, '/pages/users/order_list/index');
  605. });
  606. },
  607. SubOrder(e) {
  608. let that = this,
  609. data = {};
  610. if (!that.addressId && !that.shippingType) return that.$util.Tips({
  611. title: '请选择收货地址'
  612. });
  613. if (that.shippingType == 1) {
  614. if (that.contacts == "" || that.contactsTel == "") {
  615. return that.$util.Tips({
  616. title: '请填写联系人及联系人电话'
  617. });
  618. }
  619. if (!/^1(3|4|5|7|8|9|6)\d{9}$/.test(that.contactsTel)) {
  620. return that.$util.Tips({
  621. title: '请填写正确的手机号'
  622. });
  623. }
  624. if (!/^[\u4e00-\u9fa5\w]{2,16}$/.test(that.contacts)) {
  625. return that.$util.Tips({
  626. title: '请填写您的真实姓名'
  627. });
  628. }
  629. if (that.storeList.length == 0) return that.$util.Tips({
  630. title: '暂无门店,请选择其他方式'
  631. });
  632. }
  633. data = {
  634. realName: that.contacts,
  635. phone: that.contactsTel,
  636. addressId: that.addressId,
  637. couponId: that.couponId,
  638. useIntegral: that.useIntegral,
  639. preOrderNo: that.preOrderNo,
  640. mark: that.mark,
  641. storeId: that.system_store.id || 0,
  642. shippingType: that.$util.$h.Add(that.shippingType, 1),
  643. };
  644. // #ifdef MP
  645. openPaySubscribe().then(() => {
  646. that.payment(data);
  647. });
  648. // #endif
  649. // #ifndef MP
  650. that.payment(data);
  651. // #endif
  652. }
  653. }
  654. }
  655. </script>
  656. <style lang="scss" scoped>
  657. .font_color {
  658. @include main_color(theme);
  659. }
  660. .price_color {
  661. @include price_color(theme);
  662. }
  663. .line2 {
  664. width: 504rpx;
  665. }
  666. .textR {
  667. text-align: right;
  668. }
  669. .order-submission .line {
  670. width: 100%;
  671. height: 3rpx;
  672. }
  673. .order-submission .line image {
  674. width: 100%;
  675. height: 100%;
  676. display: block;
  677. }
  678. .order-submission .address {
  679. padding: 28rpx;
  680. background-color: #fff;
  681. box-sizing: border-box;
  682. }
  683. .order-submission .address .addressCon {
  684. width: 596rpx;
  685. font-size: 26rpx;
  686. color: #666;
  687. }
  688. .order-submission .address .addressCon .name {
  689. font-size: 30rpx;
  690. color: #282828;
  691. font-weight: bold;
  692. margin-bottom: 10rpx;
  693. }
  694. .order-submission .address .addressCon .name .phone {
  695. margin-left: 50rpx;
  696. }
  697. .order-submission .address .addressCon .default {
  698. margin-right: 12rpx;
  699. }
  700. .order-submission .address .addressCon .setaddress {
  701. color: #333;
  702. font-size: 28rpx;
  703. }
  704. .order-submission .address .iconfont {
  705. font-size: 35rpx;
  706. color: #707070;
  707. }
  708. .order-submission .allAddress {
  709. width: 100%;
  710. @include index-gradient(theme);
  711. padding: 110rpx 30rpx 0 30rpx;
  712. }
  713. .order-submission .allAddress .nav {
  714. width: 690rpx;
  715. margin: 0 auto;
  716. }
  717. .order-submission .allAddress .nav .item {
  718. width: 334rpx;
  719. }
  720. .order-submission .allAddress .nav .item.on {
  721. position: relative;
  722. width: 230rpx;
  723. }
  724. .order-submission .allAddress .nav .item.on::before {
  725. position: absolute;
  726. bottom: 0;
  727. content: "快递配送";
  728. font-size: 28rpx;
  729. display: block;
  730. height: 0;
  731. width: 336rpx;
  732. border-width: 0 20rpx 80rpx 0;
  733. border-style: none solid solid;
  734. border-color: transparent transparent #fff;
  735. z-index: 2;
  736. border-radius: 14rpx 36rpx 0 0;
  737. text-align: center;
  738. line-height: 80rpx;
  739. }
  740. .order-submission .allAddress .nav .item:nth-of-type(2).on::before {
  741. content: "到店自提";
  742. border-width: 0 0 80rpx 20rpx;
  743. border-radius: 36rpx 14rpx 0 0;
  744. }
  745. .order-submission .allAddress .nav .item.on2 {
  746. position: relative;
  747. }
  748. .order-submission .allAddress .nav .item.on2::before {
  749. position: absolute;
  750. bottom: 0;
  751. content: "到店自提";
  752. font-size: 28rpx;
  753. display: block;
  754. height: 0;
  755. width: 401rpx;
  756. border-width: 0 0 60rpx 60rpx;
  757. border-style: none solid solid;
  758. border-color: transparent transparent rgba(255, 255, 255, 0.6);
  759. border-radius: 36rpx 14rpx 0 0;
  760. text-align: center;
  761. line-height: 60rpx;
  762. }
  763. .order-submission .allAddress .nav .item:nth-of-type(1).on2::before {
  764. content: "快递配送";
  765. border-width: 0 60rpx 60rpx 0;
  766. border-radius: 14rpx 36rpx 0 0;
  767. }
  768. .order-submission .allAddress .address {
  769. width: 690rpx;
  770. max-height: 180rpx;
  771. margin: -2rpx auto 0 auto;
  772. }
  773. .order-submission .allAddress .line {
  774. width: 100%;
  775. margin: 0 auto;
  776. }
  777. .order-submission .wrapper .item .discount .placeholder {
  778. color: #ccc;
  779. }
  780. .order-submission .wrapper {
  781. background-color: #fff;
  782. margin-top: 15rpx;
  783. }
  784. .order-submission .wrapper .item {
  785. padding: 27rpx 24rpx;
  786. font-size: 30rpx;
  787. color: #333333;
  788. border-bottom: 1px solid #F5F5F5;
  789. }
  790. .order-submission .wrapper .item .discount {
  791. font-size: 30rpx;
  792. color: #333;
  793. }
  794. .order-submission .wrapper .item .discount .iconfont {
  795. color: #515151;
  796. font-size: 30rpx;
  797. margin-left: 15rpx;
  798. }
  799. .order-submission .wrapper .item .discount .num {
  800. font-size: 32rpx;
  801. margin-right: 20rpx;
  802. }
  803. .order-submission .wrapper .item .shipping {
  804. font-size: 30rpx;
  805. color: #999;
  806. position: relative;
  807. padding-right: 58rpx;
  808. }
  809. .order-submission .wrapper .item .shipping .iconfont {
  810. font-size: 35rpx;
  811. color: #707070;
  812. position: absolute;
  813. right: 0;
  814. top: 50%;
  815. transform: translateY(-50%);
  816. margin-left: 30rpx;
  817. }
  818. .order-submission .wrapper .item textarea {
  819. background-color: #f9f9f9;
  820. width: auto !important;
  821. height: 140rpx;
  822. border-radius: 14rpx;
  823. margin-top: 30rpx;
  824. padding: 15rpx;
  825. box-sizing: border-box;
  826. font-weight: 400;
  827. }
  828. .order-submission .wrapper .item .placeholder {
  829. color: #ccc;
  830. }
  831. .order-submission .wrapper .item .list {
  832. margin-top: 35rpx;
  833. }
  834. .order-submission .wrapper .item .list .payItem {
  835. border: 1px solid #eee;
  836. border-radius: 14rpx;
  837. height: 86rpx;
  838. width: 100%;
  839. box-sizing: border-box;
  840. margin-top: 20rpx;
  841. font-size: 28rpx;
  842. color: #282828;
  843. }
  844. .order-submission .wrapper .item .list .payItem.on {
  845. // border-color: #fc5445;
  846. @include coupons_border_color(theme);
  847. color: $theme-color;
  848. }
  849. .order-submission .wrapper .item .list .payItem .name {
  850. width: 50%;
  851. text-align: center;
  852. border-right: 1px solid #eee;
  853. }
  854. .order-submission .wrapper .item .list .payItem .name .iconfont {
  855. width: 44rpx;
  856. height: 44rpx;
  857. border-radius: 50%;
  858. text-align: center;
  859. line-height: 44rpx;
  860. background-color: #fe960f;
  861. color: #fff;
  862. font-size: 30rpx;
  863. margin-right: 15rpx;
  864. }
  865. .order-submission .wrapper .item .list .payItem .name .iconfont.icon-weixin2 {
  866. background-color: #41b035;
  867. }
  868. .order-submission .wrapper .item .list .payItem .name .iconfont.icon-zhifubao {
  869. background-color: #00AAEA;
  870. }
  871. .order-submission .wrapper .item .list .payItem .tip {
  872. width: 49%;
  873. text-align: center;
  874. font-size: 26rpx;
  875. color: #aaa;
  876. }
  877. .order-submission .moneyList {
  878. margin-top: 15rpx;
  879. background-color: #fff;
  880. padding: 30rpx;
  881. margin-bottom: calc(constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
  882. margin-bottom: calc(env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
  883. }
  884. .order-submission .moneyList .item {
  885. font-size: 28rpx;
  886. color: #282828;
  887. }
  888. .order-submission .moneyList .item~.item {
  889. margin-top: 20rpx;
  890. }
  891. .order-submission .moneyList .item .money {
  892. color: #666666;
  893. }
  894. .order-submission .footer {
  895. width: 100%;
  896. height: 100rpx;
  897. background-color: #fff;
  898. padding: 0 30rpx;
  899. font-size: 28rpx;
  900. color: #333;
  901. box-sizing: border-box;
  902. position: fixed;
  903. bottom: 0;
  904. left: 0;
  905. height: calc(100rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
  906. height: calc(100rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
  907. }
  908. .order-submission .footer .settlement {
  909. font-size: 30rpx;
  910. color: #fff;
  911. width: 240rpx;
  912. height: 70rpx;
  913. @include main_bg_color(theme);
  914. border-radius: 50rpx;
  915. text-align: center;
  916. line-height: 70rpx;
  917. }
  918. .footer .transparent {
  919. opacity: 0
  920. }
  921. /deep/ checkbox .uni-checkbox-input.uni-checkbox-input-checked {
  922. @include main_bg_color(theme);
  923. border: none !important;
  924. color: #fff !important
  925. }
  926. /deep/ checkbox .wx-checkbox-input.wx-checkbox-input-checked {
  927. @include main_bg_color(theme);
  928. border: none !important;
  929. color: #fff !important;
  930. margin-right: 0 !important;
  931. }
  932. </style>