index.vue 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359
  1. <template>
  2. <view :data-theme="theme">
  3. <!-- #ifndef APP-PLUS -->
  4. <view class='cart_nav'>
  5. <nav-bar :navTitle='navTitle' iconColor='#fff' :isBackgroundColor="true" ref="navBarRef"></nav-bar>
  6. </view>
  7. <!-- #endif -->
  8. <view class='order-submission' @touchstart="touchStart">
  9. <!-- 拼团切换样式 -->
  10. <view class="allAddress" v-if="Number(orderInfoVo.secondType)<5 && Number(orderInfoVo.secondType)!==2&&orderInfoVo.type==2">
  11. <view class="h-96 relative" v-if="orderInfoVo.merchantInfoList[0].deliveryMethodMer.split(',').length==2">
  12. <view class="w-full abs-lb rd-t-24rpx flex bg--w111-fff">
  13. <view class="flex-center w-50p h-76 fs-28 rd-lt-24rpx z-2" :class="shippingType == 1 ? 'bg--w111-fff font_color' : 'bg-primary-light'"
  14. @tap="addressType(1)">商家配送</view>
  15. <view class="flex-center w-50p h-76 fs-28 rd-rt-24rpx z-2" :class="shippingType == 2 ? 'bg--w111-fff font_color' : 'bg-primary-light'"
  16. @tap="addressType(2)">到店自提</view>
  17. </view>
  18. <view class="w-50p rd-t-24rpx bg--w111-fff h-96" :class="shippingType == 1 ? 'abs-lt' : 'abs-rt'">
  19. <view class="w-full h-full relative active-card"></view>
  20. </view>
  21. </view>
  22. <view class='address group acea-row row-between-wrapper' :class="orderInfoVo.merchantInfoList[0].deliveryMethodMer.split(',').length == 1?'bd-r-14':'' "
  23. @tap='onAddress' v-if='shippingType == 1'>
  24. <view class='addressCon' v-if="addressInfo.realName">
  25. <view class='name acea-row'>
  26. <view class="line1 select-name">{{addressInfo.realName}}</view>
  27. <view class='phone'>{{addressInfo.phone}}</view>
  28. </view>
  29. <view class="acea-row">
  30. <view class="line1"><text class='default font_color' v-if="addressInfo.isDefault">[默认]</text>{{addressInfo.province}}{{addressInfo.city}}{{addressInfo.district}}{{ addressInfo.street}}{{addressInfo.detail}}</view>
  31. </view>
  32. </view>
  33. <view class='addressCon' v-else>
  34. <view class='setaddress'>设置收货地址</view>
  35. </view>
  36. <view class='iconfont icon-jiantou mt30'></view>
  37. </view>
  38. <view class='address group acea-row row-between-wrapper' v-if='shippingType == 2' :class="orderInfoVo.merchantInfoList[0].deliveryMethodMer.split(',').length == 1?'bd-r-14':'' ">
  39. <view class='addressCon' v-for="(item, index) in merchantOrderVoList" :key="index" @click="goMap(item)">
  40. <view class='name acea-row'>
  41. <view class="line1 select-name">{{item.merName}}</view>
  42. <view class='phone'>{{item.phone}}</view>
  43. </view>
  44. <view class="acea-row">
  45. <view class="line1">{{item.addressDetail}}</view>
  46. </view>
  47. </view>
  48. <view class='iconfont icon-jiantou mt30'></view>
  49. </view>
  50. <view class='line'>
  51. <image src='../static/images/line.png'></image>
  52. </view>
  53. </view>
  54. <view v-if="Number(orderInfoVo.secondType)<5 && Number(orderInfoVo.secondType)!==2&&orderInfoVo.type!=2" class="allAddress">
  55. <view class='address acea-row row-between-wrapper' @tap='onAddress'>
  56. <view class='addressCon' v-if="addressInfo.realName">
  57. <view class='name'>{{addressInfo.realName}}
  58. <text class='phone'>{{addressInfo.phone}}</text>
  59. </view>
  60. <view class="acea-row line2">
  61. <text class='default font_color' v-if="addressInfo.isDefault">[默认]</text>
  62. <text>{{addressInfo.province}}{{addressInfo.city}}{{addressInfo.district}}{{ addressInfo.street}}{{addressInfo.detail}}</text>
  63. </view>
  64. </view>
  65. <view class='addressCon' v-else>
  66. <view class='setaddress'>设置收货地址</view>
  67. </view>
  68. <view class='iconfont icon-jiantou'></view>
  69. </view>
  70. <view class='line'>
  71. <image src='../static/images/line.png'></image>
  72. </view>
  73. </view>
  74. <view class="borderPad">
  75. <view v-for="(item, index) in merchantOrderVoList" :key="index" class='wrapper borRadius14'>
  76. <orderGoods :cartInfo="item.orderInfoList" :orderInfo="item" :secondType="secondType" :orderProNum="orderProNum"
  77. :isShowBtn="false">
  78. </orderGoods>
  79. <view v-show="Number(orderInfoVo.secondType)===0&&orderInfoVo.type!=2" class="boxs">
  80. <view class='item acea-row row-between-wrapper'>
  81. <view>配送方式</view>
  82. <view v-if="item.deliveryMethodMer.length===3 && item.takeTheirSwitch" class='discount acea-row row-middle'>
  83. <text @tap="openShowBox(item,index)">{{item.shippingType === 1 ? '商家配送' : '到店自提'}}</text>
  84. <text @tap="openShowBox(item,index)" class='iconfont icon-jiantou'></text>
  85. </view>
  86. <view v-else class='discount'>
  87. {{item.shippingType === 1 ? '商家配送' : '到店自提'}}
  88. </view>
  89. </view>
  90. <view v-if="item.shippingType == 2 && item.takeTheirSwitch" class="store-address acea-row">
  91. <view>
  92. <view class="name phone">{{item.phone}}</view>
  93. <view class="name w-480px">{{item.addressDetail}}</view>
  94. </view>
  95. <view class="map" @click="goMap(item)">
  96. <text class="iconfont icon-chakanditu"></text>
  97. <view class="map_text">查看地图</view>
  98. </view>
  99. </view>
  100. </view>
  101. <view v-show="item.shippingType === 1 && Number(orderInfoVo.secondType)===0" class='item acea-row row-between-wrapper'>
  102. <view>快递费用</view>
  103. <view v-if='!item.freightFee || item.freightFee == 0' class="noCoupon">免运费</view>
  104. <view v-else class='money'>¥{{item.freightFee}}</view>
  105. </view>
  106. <view v-show="item.svipDiscountPrice != 0&&orderInfoVo.type!=2" class='item acea-row row-between-wrapper'>
  107. <view>会员优惠</view>
  108. <view class='money'>-¥{{item.svipDiscountPrice}}</view>
  109. </view>
  110. <view v-if="isProductType" class='item acea-row row-between-wrapper'>
  111. <view>店铺优惠</view>
  112. <view v-if="item.merCouponUserList && item.merCouponUserList.length" @tap='couponTap(item.merCouponUserList,item.merId, index)'>
  113. <view class='discount acea-row row-between-wrapper'>
  114. <text class="couponTitle line1">{{item.couponFee==0?`有${item.merCouponUserList.length}张优惠券可选`:`-¥${item.couponFee}`}}</text>
  115. <text class='iconfont icon-jiantou'></text>
  116. </view>
  117. </view>
  118. <view v-else class="noCoupon">暂无优惠券</view>
  119. </view>
  120. <view class='item acea-row row-between-wrapper' v-if="textareaStatus" style="height: auto;">
  121. <view>买家留言</view>
  122. <input placeholder-class='placeholder' value="" name="mark" placeholder='选填买家留言' v-model="item.remark" @input='bindHideKeyboard(item.remark,index)'
  123. style="width: 484rpx;text-align: right;"></input>
  124. </view>
  125. </view>
  126. <!--商品关联系统表单-->
  127. <view v-if="orderInfoVo.systemFormValue && orderInfoVo.systemFormValue.length" class='wrapper borRadius14'>
  128. <systemFrom v-model="orderInfoVo.systemFormValue"></systemFrom>
  129. <!-- <systemFrom :orderForm="orderInfoVo.systemFormValue" ></systemFrom>-->
  130. </view>
  131. <view class='moneyList borRadius14'>
  132. <view v-show="secondType !== ProductTypeEnum.Integral" class='item acea-row row-between-wrapper'>
  133. <view>商品总价</view>
  134. <view class='money'>¥{{orderInfoVo.proTotalFee || 0}}</view>
  135. </view>
  136. <view class='item acea-row row-between-wrapper' v-if="parseInt(orderInfoVo.freightFee) > 0">
  137. <view>运费:</view>
  138. <view class='money'>+¥{{orderInfoVo.freightFee}}</view>
  139. </view>
  140. <view v-show="orderInfoVo.svipDiscountPrice != 0 &&orderInfoVo.type!=2" class='item acea-row row-between-wrapper'>
  141. <view>会员优惠</view>
  142. <view class='money'>-¥{{orderInfoVo.svipDiscountPrice}}</view>
  143. </view>
  144. <view class='item acea-row row-between-wrapper' v-if="parseInt(merCouponFee) > 0 && isProductType">
  145. <view>店铺优惠</view>
  146. <view class='money'>-¥{{merCouponFee}}</view>
  147. </view>
  148. <view v-if="isProductType" class='item acea-row row-between-wrapper'>
  149. <view>平台优惠</view>
  150. <view v-if="orderInfoVo.platCouponUserList && orderInfoVo.platCouponUserList.length" class='discount acea-row row-between-wrapper'
  151. @tap='couponTap(orderInfoVo.platCouponUserList,0)'>
  152. <text class="couponTitle line1">{{platCouponFee==0?`有${orderInfoVo.platCouponUserList.length}张优惠券可选`:`-¥${platCouponFee}`}}</text>
  153. <text class='iconfont icon-jiantou'></text>
  154. </view>
  155. <view v-else class="noCoupon">暂无优惠券</view>
  156. </view>
  157. <view class='item acea-row row-between-wrapper' v-if="orderInfoVo.integralDeductionSwitch && isProductType">
  158. <view>积分抵扣</view>
  159. <view class='discount acea-row row-middle'>
  160. <view class="mr14"> {{isUseIntegral ? "使用积分":"当前积分"}}
  161. <text class='num font_color'>{{ isUseIntegral ? orderInfoVo.surplusIntegral : orderInfoVo.userIntegral}}</text>
  162. </view>
  163. <checkbox-group @change="ChangeIntegral">
  164. <checkbox :checked='isUseIntegral ? true : false' :disabled="orderInfoVo.userIntegral==0 && !isUseIntegral" />
  165. </checkbox-group>
  166. </view>
  167. </view>
  168. <view class='item acea-row row-between-wrapper' v-if="Number(orderInfoVo.deductionPrice) > 0">
  169. <view>抵扣金额</view>
  170. <view class='money'>-¥{{orderInfoVo.deductionPrice}}</view>
  171. </view>
  172. </view>
  173. <view style='height:120rpx;'></view>
  174. </view>
  175. <view class='footer acea-row row-between-wrapper'>
  176. <view class="acea-row row-middle">合计:
  177. <!-- 积分价格 -->
  178. <PointsPrice v-if="orderInfoVo.secondType === ProductTypeEnum.Integral" :pointsPrice="orderInfoVo"
  179. :pointsGoodsStyle="hotPointsStyle"></PointsPrice>
  180. <!-- 其他价格 -->
  181. <text v-else class='price_color'>¥{{orderInfoVo.payFee || 0}}</text>
  182. </view>
  183. <view class='settlement' style='z-index:100' @tap="SubOrder">
  184. {{secondType === ProductTypeEnum.Integral?"确认兑换":"立即下单"}}
  185. </view>
  186. </view>
  187. </view>
  188. <couponListWindow :coupon='coupon' @ChangCouponsClone="ChangCouponsClone" :openType='openType' @ChangCoupons="ChangCoupons"
  189. :orderShow="orderShow" :surplusFee="surplusFee"></couponListWindow>
  190. <view v-if="isShowBox">
  191. <checkDelivery :isShowBox="isShowBox" :activeObj="activeObj" @close="boxClose" @confirmBtn="getShippingType">
  192. </checkDelivery>
  193. </view>
  194. <!-- 满员提示 -->
  195. <uni-popup ref="sh_popup" background-color="#fff" borderRadius="10px">
  196. <view class="sh_popup-content">
  197. <view class="sh_popup_title">
  198. 提示
  199. </view>
  200. <view class="sh_popup_text">
  201. 该团已拼成,是否自行开团?
  202. </view>
  203. <view class="sh_popup_btn">
  204. <view class="no_btn btn font_color" @click="popupClose">返回首页</view>
  205. <view class="yes_btn btn" @click="toAudit">去开团</view>
  206. </view>
  207. </view>
  208. </uni-popup>
  209. </view>
  210. </template>
  211. <script>
  212. // +----------------------------------------------------------------------
  213. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  214. // +----------------------------------------------------------------------
  215. // | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
  216. // +----------------------------------------------------------------------
  217. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  218. // +----------------------------------------------------------------------
  219. // | Author: CRMEB Team <admin@crmeb.com>
  220. // +----------------------------------------------------------------------
  221. import {
  222. getCouponsOrderPrice,
  223. orderCreate,
  224. postOrderComputed,
  225. loadPreOrderApi
  226. } from '@/api/order.js';
  227. import {
  228. getAddressDetail,
  229. getAddressDefault
  230. } from '@/api/user.js';
  231. // import {
  232. // openPaySubscribe
  233. // } from '@/utils/SubscribeMessage.js';
  234. import {
  235. takeTheirApi
  236. } from '@/api/merchant.js';
  237. import {
  238. CACHE_LONGITUDE,
  239. CACHE_LATITUDE
  240. } from '@/config/cache.js';
  241. import dayjs from "@/plugin/dayjs/dayjs.min.js";
  242. import couponListWindow from '../components/couponListWindow';
  243. import orderGoods from '../components/orderGoods'
  244. import navBar from '@/components/navBar';
  245. import checkDelivery from '../components/checkDelivery/index.vue';
  246. import systemFrom from '../components/systemFrom/index.vue';
  247. import PointsPrice from '@/components/PointsPrice.vue';
  248. import {
  249. toLogin
  250. } from '@/libs/login.js';
  251. import {
  252. mapGetters
  253. } from "vuex";
  254. import {
  255. Debounce
  256. } from '@/utils/validate.js'
  257. import {
  258. ProductTypeEnum,
  259. ProductMarketingTypeEnum
  260. } from "../../../enums/productEnums";
  261. import orderPay from "@/mixins/OrderPay.js";
  262. let app = getApp();
  263. /**
  264. * 积分商品推荐样式
  265. */
  266. const hotPointsStyle = {
  267. iconStyle: {
  268. width: '28rpx',
  269. height: '28rpx'
  270. },
  271. priceStyle: {
  272. fontSize: '28rpx',
  273. },
  274. unitStyle: {
  275. fontSize: '26rpx',
  276. },
  277. }
  278. export default {
  279. mixins: [orderPay],
  280. components: {
  281. navBar,
  282. couponListWindow,
  283. orderGoods,
  284. checkDelivery,
  285. systemFrom,
  286. PointsPrice
  287. },
  288. computed: {
  289. // 是否可以使用优惠券、积分抵扣。 基础订单/云盘订单,卡密,虚拟,可以使用优惠券、积分抵扣
  290. isProductType() {
  291. return this.type === ProductMarketingTypeEnum.Normal && this.secondType !== this.ProductTypeEnum
  292. .Integral && this.secondType !== this.ProductTypeEnum.Video
  293. },
  294. ...mapGetters(['productType', 'isLogin'])
  295. },
  296. data() {
  297. return {
  298. hotPointsStyle: hotPointsStyle,
  299. ProductMarketingTypeEnum: ProductMarketingTypeEnum,
  300. ProductTypeEnum: ProductTypeEnum,
  301. navTitle: '提交订单',
  302. homeTop: 20,
  303. orderShow: 'orderShow', //下单页面使用优惠券组件不展示tab切换页
  304. textareaStatus: true,
  305. openType: 1, //优惠券打开方式 1=使用
  306. couponShow: false,
  307. coupon: {
  308. coupon: false,
  309. list: [], //商户优惠券
  310. statusTile: '立即使用',
  311. couponMoney: 0
  312. }, //优惠券组件
  313. addressInfo: {}, //地址信息
  314. addressId: 0, //地址id
  315. orderMerchantRequestList: [], //商户属性集合
  316. cartId: '', //购物车id
  317. userInfo: {}, //用户信息
  318. mark: '', //买家留言
  319. couponFee: '请选择', //优惠券
  320. coupon_price: 0, //优惠券抵扣金额
  321. isUseIntegral: false, //是否使用积分
  322. integral_price: 0, //积分抵扣金额
  323. integral: 0,
  324. ChangePrice: 0, //使用积分抵扣变动后的金额
  325. formIds: [], //收集formid
  326. status: 0,
  327. is_address: false,
  328. toPay: false, //修复进入支付时页面隐藏从新刷新页面
  329. shippingType: 1,
  330. storePostage: 0,
  331. contacts: '',
  332. contactsTel: '',
  333. mydata: {},
  334. merchantOrderVoList: [],
  335. priceGroup: {},
  336. animated: false,
  337. totalPrice: 0,
  338. integralRatio: "0",
  339. orderKey: "",
  340. // usableCoupon: {},
  341. offlinePostage: "",
  342. news: true,
  343. again: false,
  344. addAgain: false,
  345. bargain: false, //是否是砍价
  346. combination: false, //是否是拼团
  347. secKill: false, //是否是秒杀
  348. orderInfoVo: {},
  349. addressList: [], //地址列表数据
  350. orderProNum: 0,
  351. orderNo: '', //预下单订单号
  352. theme: app.globalData.theme,
  353. addressChangeId: 0,
  354. isShowBox: false,
  355. activeObj: {},
  356. activeIndex: 0, // 选中店铺索引
  357. type: 0, // 0-基础订单,1-秒杀订单,2-拼团订单
  358. secondType: 0, //订单二级类型:0-普通订单,1-积分订单,2-虚拟订单,4-视频号订单,5-云盘订单,6-卡密订单
  359. merId: 0, //商户id,用于判断商户优惠券还是平台优惠券,平台优惠券商户id为0
  360. platUserCouponObj: {}, //平台优惠券对象,用于缓存数据使用
  361. platUserCouponId: 0, //平台优惠券id
  362. platCouponFee: '', //平台优惠券金额
  363. merCouponFee: '', //店铺优惠券总金额
  364. surplusFee: 0, //商品总金额-商户优惠券金额=平台端可使用优惠券的门槛
  365. merUserCouponId: 0, //店铺使用优惠券的id
  366. tempCouponObj: {}, //临时优惠券数据
  367. merchangtInfo: {}, //商户信息
  368. orderForm: [], //系统表单配置的数据
  369. orderExtend: {}, //提交接口表单的数据
  370. productId: '',
  371. groupActivityId: ''
  372. };
  373. },
  374. watch: {
  375. isLogin: {
  376. handler: function(newV, oldV) {
  377. if (newV) {
  378. this.getloadPreOrder();
  379. }
  380. },
  381. deep: true
  382. },
  383. },
  384. onLoad(options) {
  385. this.orderNo = options.orderNo || 0;
  386. this.addressChangeId = parseInt(options.addressId) || 0;
  387. this.is_address = options.is_address ? true : false;
  388. if (this.isLogin) {
  389. this.getloadPreOrder();
  390. } else {
  391. toLogin();
  392. }
  393. },
  394. /**
  395. * 生命周期函数--监听页面显示
  396. */
  397. onShow: function() {
  398. let _this = this
  399. this.textareaStatus = true;
  400. },
  401. methods: {
  402. //滚动
  403. touchStart() {
  404. this.$refs.navBarRef.currentPage = false;
  405. },
  406. popupClose() {
  407. this.$refs.sh_popup.close()
  408. uni.switchTab({
  409. url: '/pages/index/index'
  410. });
  411. },
  412. //去开团
  413. toAudit() {
  414. this.$refs.sh_popup.close()
  415. uni.navigateTo({
  416. url: `/pages/goods/goods_details/index?id=${this.productId}&mt=2&gd=${this.groupActivityId}`
  417. })
  418. },
  419. addressType(type) {
  420. this.merchantOrderVoList[0].shippingType = type
  421. this.getShippingType(this.merchantOrderVoList[0])
  422. if (type == 2) {
  423. setTimeout(() => {
  424. this.shippingType = type
  425. }, 300)
  426. } else {
  427. this.shippingType = type
  428. }
  429. },
  430. //选择配送方式回调
  431. getShippingType(item) {
  432. this.orderMerchantRequestList[this.activeIndex].shippingType = item.shippingType;
  433. this.$set(this.merchantOrderVoList[this.activeIndex], 'shippingType', item.shippingType);
  434. if (item.shippingType === 2) this.getTakeTheir(item.merId);
  435. this.computedPrice();
  436. this.isShowBox = false;
  437. },
  438. getTakeTheir(id) {
  439. takeTheirApi(id).then(res => {
  440. this.merchangtInfo = res.data; //商户信息
  441. this.$set(this.merchantOrderVoList[this.activeIndex], 'addressDetail', res.data.addressDetail);
  442. this.$set(this.merchantOrderVoList[this.activeIndex], 'phone', res.data.phone);
  443. this.$set(this.merchantOrderVoList[this.activeIndex], 'latitude', res.data.latitude);
  444. this.$set(this.merchantOrderVoList[this.activeIndex], 'longitude', res.data.longitude);
  445. }).catch(err => {
  446. return this.$util.Tips({
  447. title: err
  448. });
  449. })
  450. },
  451. //查看内置地图
  452. goMap(item) {
  453. let that = this;
  454. //#ifdef H5
  455. if (that.$wechat.isWeixin() === true) {
  456. that.$wechat.seeLocation({
  457. latitude: parseFloat(this.merchantOrderVoList[this.activeIndex].latitude),
  458. longitude: parseFloat(this.merchantOrderVoList[this.activeIndex].longitude),
  459. name: item.merName,
  460. address: item.addressDetail ? item.addressDetail : '',
  461. }).then(res => {
  462. console.log('success');
  463. })
  464. } else {
  465. //#endif
  466. uni.openLocation({
  467. latitude: parseFloat(this.merchantOrderVoList[this.activeIndex].latitude),
  468. longitude: parseFloat(this.merchantOrderVoList[this.activeIndex].longitude),
  469. scale: 8,
  470. name: item.merName,
  471. address: item.addressDetail ? item.addressDetail : '',
  472. success: function(res) {
  473. that.go_map = true
  474. },
  475. });
  476. // #ifdef H5
  477. }
  478. //#endif
  479. },
  480. // 打开配送方式弹窗
  481. openShowBox(item, index) {
  482. this.activeObj = item
  483. this.activeIndex = index
  484. this.isShowBox = true
  485. },
  486. boxClose() {
  487. this.isShowBox = false
  488. },
  489. // 订单详情
  490. getloadPreOrder: function() {
  491. loadPreOrderApi(this.orderNo).then(res => {
  492. let orderInfoVo = res.data;
  493. if (orderInfoVo.merchantInfoList[0].orderInfoList[0].groupBuyActivityId) {
  494. this.groupActivityId = orderInfoVo.merchantInfoList[0].orderInfoList[0].groupBuyActivityId
  495. this.productId = orderInfoVo.merchantInfoList[0].orderInfoList[0].productId
  496. }
  497. if (orderInfoVo.merchantInfoList[0].deliveryMethodMer.split(',').length == 1) {
  498. this.shippingType = orderInfoVo.merchantInfoList[0].deliveryMethodMer
  499. }
  500. this.orderInfoVo = {
  501. ...orderInfoVo,
  502. systemFormValue: orderInfoVo.systemFormValue ? this.$util.objToArr(JSON.parse(
  503. orderInfoVo.systemFormValue)) : []
  504. };
  505. console.log(orderInfoVo.merchantInfoList, '0000000000000000000000000000000')
  506. this.merchantOrderVoList = orderInfoVo.merchantInfoList; //商户端数据
  507. this.platCouponFee = orderInfoVo.platCouponFee; //平台优惠券总金额
  508. this.platUserCouponId = orderInfoVo.platUserCouponId;
  509. this.merCouponFee = orderInfoVo.merCouponFee; //店铺优惠券总金额
  510. orderInfoVo.merchantInfoList.map(item => {
  511. this.orderMerchantRequestList.push({
  512. shippingType: item.shippingType,
  513. merId: item.merId,
  514. remark: '',
  515. userCouponId: item.userCouponId
  516. })
  517. if (item.shippingType === 2) this.getTakeTheir(item.merId)
  518. item.addressDetail = this.merchangtInfo.addressDetail;
  519. item.phone = this.merchangtInfo.phone;
  520. item.latitude = this.merchangtInfo.latitude;
  521. item.longitude = this.merchangtInfo.longitude;
  522. });
  523. this.type = orderInfoVo.type; //订单类型
  524. this.secondType = orderInfoVo
  525. .secondType; //订单二级类型:0-普通订单,1-积分订单,2-虚拟订单,4-视频号订单,5-云盘订单,6-卡密订单
  526. this.orderProNum = orderInfoVo.orderProNum;
  527. if (orderInfoVo.addressId && this.addressChangeId === 0) {
  528. this.addressId = orderInfoVo.addressId;
  529. } else {
  530. this.addressId = this.addressChangeId;
  531. if (orderInfoVo.addressId != this.addressChangeId && this.addressChangeId > 0)
  532. this.computedPrice();
  533. }
  534. this.getaddressInfo();
  535. }).catch(err => {
  536. uni.navigateTo({
  537. url: '/pages/goods/order_list/index'
  538. });
  539. })
  540. },
  541. // 计算订单价格
  542. computedPrice: function() {
  543. uni.showLoading({
  544. title: '加载中...'
  545. });
  546. let shippingType = this.shippingType;
  547. postOrderComputed({
  548. addressId: this.addressId,
  549. isUseIntegral: this.isUseIntegral,
  550. orderMerchantRequestList: this.orderMerchantRequestList,
  551. preOrderNo: this.orderNo,
  552. platUserCouponId: this.platUserCouponId
  553. }).then(res => {
  554. let data = res.data;
  555. //usedIntegral 使用的积分,surplusIntegral 剩余积分
  556. data.merOrderResponseList.map((item, i) => {
  557. this.merchantOrderVoList[i].freightFee = item.freightFee
  558. this.merchantOrderVoList[i].couponFee = item.couponFee
  559. });
  560. this.orderInfoVo.platCouponUserList = data.platCouponUserList; //平台优惠券数据
  561. this.merCouponFee = data.merCouponFee; //店铺优惠券总金额
  562. this.orderInfoVo.couponFee = data.couponFee; //优惠券优惠金额
  563. this.orderInfoVo.userIntegral = data.surplusIntegral; //使用的积分
  564. this.orderInfoVo.deductionPrice = data.deductionPrice;
  565. this.orderInfoVo.freightFee = data.freightFee;
  566. this.orderInfoVo.payFee = data.payFee;
  567. this.orderInfoVo.proTotalFee = data.proTotalFee;
  568. this.orderInfoVo.surplusIntegral = data.usedIntegral; //剩余积分
  569. this.platCouponFee = data.platCouponFee; //平台优惠金额
  570. this.orderInfoVo.integralDeductionSwitch = data.integralDeductionSwitch //积分抵扣开关
  571. //选中商户优惠券的值
  572. this.merchantOrderVoList[this.activeIndex].merCouponUserList = data.merOrderResponseList[
  573. this.activeIndex].merCouponUserList; //商户数据
  574. this.merUserCouponId = data.merOrderResponseList[this.activeIndex]
  575. .userCouponId //店铺使用优惠券的id
  576. uni.hideLoading();
  577. }).catch(err => {
  578. uni.hideLoading();
  579. return this.$util.Tips({
  580. title: err
  581. });
  582. });
  583. },
  584. bindPickerChange: function(e) {
  585. let value = e.detail.value;
  586. this.shippingType = value;
  587. this.computedPrice();
  588. },
  589. /**
  590. * 使用积分抵扣
  591. */
  592. ChangeIntegral: function() {
  593. this.isUseIntegral = !this.isUseIntegral;
  594. this.computedPrice();
  595. },
  596. bindHideKeyboard: function(e, i) {
  597. this.orderMerchantRequestList[i].remark = e;
  598. },
  599. /*
  600. * 获取默认收货地址或者获取某条地址信息
  601. */
  602. getaddressInfo: function() {
  603. if (this.addressId) {
  604. getAddressDetail(this.addressId).then(res => {
  605. if (res.data) {
  606. res.data.isDefault = res.data.isDefault;
  607. this.addressInfo = res.data || {};
  608. }
  609. })
  610. }
  611. },
  612. //关闭优惠券弹窗
  613. ChangCouponsClone: function(coupon) {
  614. this.coupon.list = [];
  615. this.coupon.coupon = false;
  616. },
  617. //点击优惠券弹窗确定后
  618. ChangCoupons: function(item) {
  619. this.coupon.list = [];
  620. if (item.merId === 0) {
  621. this.platUserCouponId = item.isChecked ? item.id : 0;
  622. } else {
  623. this.$set(this.orderMerchantRequestList[this.activeIndex], 'userCouponId', item.isChecked ? item
  624. .id : 0);
  625. }
  626. this.coupon.coupon = false;
  627. this.computedPrice();
  628. },
  629. /**
  630. * 选择优惠券
  631. * @param {Object} item优惠券对象
  632. * @param {Number} merId商户id
  633. * @param {Number} index索引
  634. */
  635. couponTap: function(item, merId, index) {
  636. this.$set(this.coupon, 'list', item);
  637. this.$set(this.coupon, 'couponMoney', item);
  638. this.coupon.coupon = true;
  639. this.merId = merId; //商户id
  640. if (merId !== 0) this.activeIndex = index;
  641. this.coupon.loading = false;
  642. },
  643. /**
  644. * 获取当前金额可用优惠券
  645. *
  646. */
  647. getCouponList: function(item, merId) {
  648. this.$set(this.coupon, 'list', item);
  649. this.openType = 1;
  650. uni.hideLoading();
  651. },
  652. onAddress: function() {
  653. uni.navigateTo({
  654. url: '/pages/address/user_address_list/index?orderNo=' + this.orderNo
  655. });
  656. },
  657. realName: function(e) {
  658. this.contacts = e.detail.value;
  659. },
  660. phone: function(e) {
  661. this.contactsTel = e.detail.value;
  662. },
  663. payment: function(data) {
  664. let that = this;
  665. // #ifdef MP
  666. uni.checkBeforeAddOrder({
  667. success(res) {
  668. console.log("下单前置检查 成功:", JSON.stringify(res));
  669. const traceId = res.data.traceId;
  670. data.traceId = traceId;
  671. that.onCreate(data);
  672. },
  673. fail(res) {
  674. console.log("下单前置检查 失败:", JSON.stringify(res));
  675. }
  676. });
  677. // #endif
  678. // #ifndef MP
  679. that.onCreate(data);
  680. // #endif
  681. },
  682. onCreate(data) {
  683. orderCreate(data).then(res => {
  684. if (res.data.groupBuyIsFull == 1) {
  685. uni.hideLoading();
  686. return this.$refs.sh_popup.open('center')
  687. }
  688. if (this.secondType === this.ProductTypeEnum.Integral && this.orderInfoVo.payFee == 0) {
  689. // 积分商品并且支付金额为0时,直接默认走余额支付的逻辑,订单支付成功跳转到支付结果页
  690. this.changeOrderPay(res.data.orderNo, 'yue', 'yue', 'integral', 'integral', '0')
  691. } else {
  692. // 其他商品走正常流程,去支付收银台页面
  693. this.getToPayment(this.secondType, res.data)
  694. }
  695. uni.hideLoading();
  696. }).catch(err => {
  697. uni.hideLoading();
  698. return this.$util.Tips({
  699. title: err
  700. });
  701. });
  702. },
  703. //立即下单
  704. SubOrder: Debounce(function(e) {
  705. let that = this,
  706. data = {};
  707. let flag = false;
  708. that.orderMerchantRequestList.map(function(v) {
  709. if (v.shippingType === 1 && !that.addressId && that.orderInfoVo.secondType !== 2) {
  710. flag = true;
  711. }
  712. });
  713. if (flag) {
  714. that.$util.Tips({
  715. title: '请选择收货地址'
  716. });
  717. return;
  718. }
  719. let systemFormValue = Array.from(this.orderInfoVo.systemFormValue)
  720. let systemFormData = []
  721. for (var i = 0; i < systemFormValue.length; i++) {
  722. let curdata = systemFormValue[i]
  723. if (['radios'].indexOf(curdata.name) == -1 && (curdata.titleShow.val || (['uploadPicture',
  724. 'dateranges'
  725. ].indexOf(curdata.name) == -1 && curdata.value && curdata.value.trim()))) {
  726. if ((curdata.name === 'texts' && curdata.valConfig.tabVal == 0) || ['dates', 'times',
  727. 'selects', 'citys', 'checkboxs'
  728. ].indexOf(curdata.name) != -1) {
  729. if (!curdata.value || (curdata.value && !curdata.value.trim())) {
  730. return that.$util.Tips({
  731. title: `请填写${curdata.titleConfig.val}`
  732. });
  733. }
  734. }
  735. if (curdata.name === 'timeranges') {
  736. if (!curdata.value) {
  737. return that.$util.Tips({
  738. title: `请选择${curdata.titleConfig.val}`
  739. });
  740. }
  741. }
  742. if (curdata.name === 'dateranges') {
  743. if (!curdata.value.length) {
  744. return that.$util.Tips({
  745. title: `请选择${curdata.titleConfig.val}`
  746. });
  747. }
  748. }
  749. if (curdata.name === 'texts' && curdata.valConfig.tabVal == 4) {
  750. if (curdata.value <= 0) {
  751. return that.$util.Tips({
  752. title: `请填写大于0的${curdata.titleConfig.val}`
  753. });
  754. }
  755. }
  756. if (curdata.name === 'texts' && curdata.valConfig.tabVal == 3) {
  757. if (!/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(curdata.value)) {
  758. return that.$util.Tips({
  759. title: `请填写正确的${curdata.titleConfig.val}`
  760. });
  761. }
  762. }
  763. if (curdata.name === 'texts' && curdata.valConfig.tabVal == 1) {
  764. if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(curdata.value)) {
  765. return that.$util.Tips({
  766. title: `请填写正确的${curdata.titleConfig.val}`
  767. });
  768. }
  769. }
  770. if (curdata.name === 'texts' && curdata.valConfig.tabVal == 2) {
  771. if (!
  772. /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/i
  773. .test(curdata.value)) {
  774. return that.$util.Tips({
  775. title: `请填写正确的${curdata.titleConfig.val}`
  776. });
  777. }
  778. }
  779. if (curdata.name === 'uploadPicture') {
  780. if (!curdata.value.length) {
  781. return that.$util.Tips({
  782. title: `请上传${curdata.titleConfig.val}`
  783. });
  784. }
  785. }
  786. }
  787. this.orderExtend[curdata.key] = curdata.value
  788. systemFormData.push({
  789. title: curdata.titleConfig.val,
  790. value: curdata.value,
  791. })
  792. }
  793. data = {
  794. addressId: that.addressId,
  795. orderMerchantRequestList: that.orderMerchantRequestList,
  796. isUseIntegral: that.isUseIntegral,
  797. preOrderNo: that.orderNo,
  798. platUserCouponId: this.platUserCouponId,
  799. systemFormId: this.orderInfoVo.systemFormId,
  800. orderExtend: JSON.stringify(systemFormData)
  801. };
  802. uni.showLoading({
  803. title: '订单提交中'
  804. });
  805. that.payment(data);
  806. //// #ifdef MP
  807. // openPaySubscribe().then(() => {
  808. // that.payment(data);
  809. // });
  810. // // #endif
  811. // // #ifndef MP
  812. // that.payment(data);
  813. // // #endif
  814. })
  815. }
  816. }
  817. </script>
  818. <style lang="scss" scoped>
  819. .w-480px {
  820. width: 480rpx;
  821. }
  822. .noCoupon {
  823. color: #999999;
  824. }
  825. .icon-jiantou {
  826. font-size: 26rpx;
  827. color: #515151;
  828. margin-left: 14rpx;
  829. }
  830. .mr14 {
  831. margin-right: 14rpx;
  832. }
  833. .couponTitle {
  834. width: 430rpx;
  835. display: inline-block;
  836. text-align: right;
  837. @include main_color(theme);
  838. }
  839. .store-address {
  840. padding: 20rpx;
  841. margin: 0 24rpx;
  842. background: #F6F6F6;
  843. border-radius: 8rpx;
  844. font-size: 24rpx;
  845. /*垂直居中*/
  846. -webkit-box-align: center;
  847. /*旧版本*/
  848. -moz-box-align: center;
  849. /*旧版本*/
  850. -ms-flex-align: center;
  851. /*混合版本*/
  852. -webkit-align-items: center;
  853. /*新版本*/
  854. align-items: center;
  855. /*新版本*/
  856. .phone {
  857. margin-bottom: 10rpx;
  858. color: #282828;
  859. font-weight: bold;
  860. }
  861. .name {
  862. padding-right: 20rpx;
  863. }
  864. .info {
  865. flex: 1;
  866. }
  867. .line2 {
  868. width: 456rpx !important;
  869. }
  870. .map {
  871. text-align: center;
  872. padding-left: 36rpx;
  873. position: relative;
  874. @include main_color(theme);
  875. &::before {
  876. content: '';
  877. display: inline-block;
  878. width: 2rpx;
  879. height: 42rpx;
  880. background-color: #DDDDDD;
  881. position: absolute;
  882. left: 0;
  883. top: 18rpx;
  884. }
  885. .iconfont {
  886. color: var(--view-theme);
  887. }
  888. .map_text {
  889. color: var(--view-theme);
  890. }
  891. }
  892. }
  893. .font_color {
  894. @include main_color(theme);
  895. }
  896. .price_color {
  897. @include price_color(theme);
  898. }
  899. .line2 {
  900. width: 624rpx;
  901. }
  902. .textR {
  903. text-align: right;
  904. }
  905. .order-submission .line {
  906. width: 100%;
  907. height: 3rpx;
  908. }
  909. .order-submission .line image {
  910. width: 100%;
  911. height: 100%;
  912. display: block;
  913. }
  914. .order-submission .address {
  915. padding: 40rpx 24rpx;
  916. background-color: #fff;
  917. box-sizing: border-box;
  918. }
  919. .order-submission .address .addressCon {
  920. width: 596rpx;
  921. font-size: 26rpx;
  922. color: #666;
  923. }
  924. .order-submission .address .addressCon .name {
  925. font-size: 30rpx;
  926. color: #282828;
  927. font-weight: bold;
  928. // margin-bottom: 10rpx;
  929. }
  930. .order-submission .address .addressCon .name .phone {
  931. margin-left: 50rpx;
  932. }
  933. .order-submission .address .addressCon .default {
  934. margin-right: 12rpx;
  935. }
  936. .order-submission .address .addressCon .setaddress {
  937. color: #333;
  938. font-size: 28rpx;
  939. }
  940. .order-submission .address .iconfont {
  941. color: #707070;
  942. }
  943. .order-submission .allAddress {
  944. width: 100%;
  945. @include index-gradient(theme);
  946. padding: 30rpx 24rpx 0 24rpx;
  947. }
  948. .order-submission .allAddress .address.group {
  949. border-radius: 0;
  950. }
  951. .order-submission .allAddress .address {
  952. max-height: 180rpx;
  953. margin: -2rpx auto 0 auto;
  954. border-radius: 14rpx 14rpx 0 0;
  955. }
  956. .order-submission .allAddress .line {
  957. width: 100%;
  958. margin: 0 auto;
  959. }
  960. .order-submission .wrapper .item .discount .placeholder {
  961. color: #ccc;
  962. }
  963. .order-submission .wrapper {
  964. background-color: #fff;
  965. margin-top: 24rpx;
  966. }
  967. .order-submission .wrapper .item {
  968. padding: 28rpx 24rpx;
  969. font-size: 30rpx;
  970. color: #333333;
  971. }
  972. .order-submission .wrapper .item .discount {
  973. font-size: 30rpx;
  974. color: #333;
  975. }
  976. .order-submission .wrapper .item .discount .iconfont {
  977. color: #515151;
  978. }
  979. .order-submission .wrapper .item .discount .num {
  980. font-size: 32rpx;
  981. margin-right: 20rpx;
  982. }
  983. .order-submission .wrapper .item .shipping {
  984. font-size: 30rpx;
  985. color: #999;
  986. position: relative;
  987. padding-right: 58rpx;
  988. }
  989. .order-submission .wrapper .item .shipping .iconfont {
  990. font-size: 35rpx;
  991. color: #707070;
  992. position: absolute;
  993. right: 0;
  994. top: 50%;
  995. transform: translateY(-50%);
  996. margin-left: 30rpx;
  997. }
  998. .order-submission .wrapper .item textarea {
  999. background-color: #f9f9f9;
  1000. width: auto !important;
  1001. height: 140rpx;
  1002. border-radius: 14rpx;
  1003. margin-top: 30rpx;
  1004. padding: 15rpx;
  1005. box-sizing: border-box;
  1006. font-weight: 400;
  1007. }
  1008. .order-submission .wrapper .item .placeholder {
  1009. color: #ccc;
  1010. }
  1011. .order-submission .wrapper .item .list {
  1012. margin-top: 35rpx;
  1013. }
  1014. .order-submission .wrapper .item .list .payItem {
  1015. border: 1px solid #eee;
  1016. border-radius: 14rpx;
  1017. height: 86rpx;
  1018. width: 100%;
  1019. box-sizing: border-box;
  1020. margin-top: 20rpx;
  1021. font-size: 28rpx;
  1022. color: #282828;
  1023. }
  1024. .order-submission .wrapper .item .list .payItem.on {
  1025. // border-color: #fc5445;
  1026. @include coupons_border_color(theme);
  1027. color: $theme-color;
  1028. }
  1029. .order-submission .wrapper .item .list .payItem .name {
  1030. width: 50%;
  1031. text-align: center;
  1032. border-right: 1px solid #eee;
  1033. }
  1034. .order-submission .wrapper .item .list .payItem .name .iconfont {
  1035. width: 44rpx;
  1036. height: 44rpx;
  1037. border-radius: 50%;
  1038. text-align: center;
  1039. line-height: 44rpx;
  1040. background-color: #fe960f;
  1041. color: #fff;
  1042. font-size: 30rpx;
  1043. margin-right: 15rpx;
  1044. }
  1045. .order-submission .wrapper .item .list .payItem .name .iconfont.icon-weixin2 {
  1046. background-color: #41b035;
  1047. }
  1048. .order-submission .wrapper .item .list .payItem .name .iconfont.icon-zhifubao {
  1049. background-color: #00AAEA;
  1050. }
  1051. .order-submission .wrapper .item .list .payItem .tip {
  1052. width: 49%;
  1053. text-align: center;
  1054. font-size: 26rpx;
  1055. color: #aaa;
  1056. }
  1057. .order-submission .moneyList {
  1058. margin-top: 15rpx;
  1059. background-color: #fff;
  1060. padding: 0 30rpx;
  1061. margin-bottom: calc(constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
  1062. margin-bottom: calc(env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
  1063. }
  1064. .order-submission .moneyList .item {
  1065. font-size: 30rpx;
  1066. color: #282828;
  1067. height: 96rpx;
  1068. }
  1069. .order-submission .moneyList .item~.item {
  1070. // margin-top: 20rpx;
  1071. }
  1072. .order-submission .moneyList .item .money {
  1073. color: #666666;
  1074. }
  1075. .order-submission .footer {
  1076. width: 100%;
  1077. height: 100rpx;
  1078. background-color: #fff;
  1079. padding: 0 30rpx;
  1080. font-size: 28rpx;
  1081. color: #333;
  1082. box-sizing: border-box;
  1083. position: fixed;
  1084. bottom: 0;
  1085. left: 0;
  1086. height: calc(100rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
  1087. height: calc(100rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
  1088. z-index: 999;
  1089. }
  1090. .order-submission .footer .settlement {
  1091. background-color: #fff;
  1092. font-size: 30rpx;
  1093. color: #fff;
  1094. width: 240rpx;
  1095. height: 70rpx;
  1096. @include main_bg_color(theme);
  1097. border-radius: 50rpx;
  1098. text-align: center;
  1099. line-height: 70rpx;
  1100. }
  1101. .footer .transparent {
  1102. opacity: 0
  1103. }
  1104. /deep/ checkbox .uni-checkbox-input.uni-checkbox-input-checked {
  1105. @include main_bg_color(theme);
  1106. border: none !important;
  1107. color: #fff !important
  1108. }
  1109. /deep/ checkbox .wx-checkbox-input.wx-checkbox-input-checked {
  1110. @include main_bg_color(theme);
  1111. border: none !important;
  1112. color: #fff !important;
  1113. margin-right: 0 !important;
  1114. }
  1115. // 切换
  1116. /deep/.uni-date-x--border {
  1117. border: 0;
  1118. }
  1119. /deep/.uni-icons {
  1120. font-size: 0 !important;
  1121. }
  1122. /deep/.uni-date-x {
  1123. color: #999;
  1124. font-size: 15px;
  1125. }
  1126. /deep/.uni-date__x-input {
  1127. font-size: 15px;
  1128. }
  1129. /deep/uni-checkbox[disabled] .uni-checkbox-input {
  1130. background-color: #eee;
  1131. }
  1132. .abs-lt .active-card {
  1133. &:after {
  1134. right: -67rpx;
  1135. }
  1136. }
  1137. .abs-rt .active-card {
  1138. &:after {
  1139. left: -67rpx;
  1140. -moz-transform: scaleX(-1);
  1141. -webkit-transform: scaleX(-1);
  1142. -o-transform: scaleX(-1);
  1143. transform: scaleX(-1);
  1144. }
  1145. }
  1146. .active-card {
  1147. &:after {
  1148. content: "";
  1149. width: 67rpx;
  1150. height: 76rpx;
  1151. background-image: url('../static/images/nav_circle_left.png');
  1152. background-size: contain;
  1153. background-repeat: no-repeat;
  1154. position: absolute;
  1155. bottom: 0;
  1156. z-index: 4;
  1157. }
  1158. }
  1159. .line {
  1160. width: 680rpx;
  1161. margin: auto;
  1162. height: 3rpx;
  1163. }
  1164. .line image {
  1165. width: 100%;
  1166. height: 100%;
  1167. display: block;
  1168. }
  1169. .address {
  1170. background-color: #fff;
  1171. box-sizing: border-box;
  1172. }
  1173. .footer .transparent {
  1174. opacity: 0
  1175. }
  1176. .w-322 {
  1177. width: 322rpx;
  1178. }
  1179. .w-450 {
  1180. width: 450rpx;
  1181. }
  1182. .w-50p {
  1183. width: 50%;
  1184. }
  1185. .h-auto {
  1186. height: auto;
  1187. }
  1188. .bd-r-14 {
  1189. border-radius: 14rpx 14rpx 0 0 !important;
  1190. }
  1191. .mt30 {
  1192. margin-top: 30rpx;
  1193. }
  1194. .bg-primary-light {
  1195. @include main_rgba_color(theme);
  1196. }
  1197. .rd-lt-24rpx {
  1198. border-radius: 24rpx 0 0 0;
  1199. }
  1200. .rd-rt-24rpx {
  1201. border-radius: 0 24rpx 0 0;
  1202. }
  1203. .z-2 {
  1204. z-index: 2;
  1205. }
  1206. .gold {
  1207. color: #DCA658;
  1208. }
  1209. .select-name {
  1210. max-width: 300rpx;
  1211. }
  1212. .font-color {
  1213. font-weight: 500 !important;
  1214. }
  1215. /deep/ .uni-popup__wrapper {
  1216. background: #FFFFFF;
  1217. border-radius: 32rpx;
  1218. }
  1219. .sh_popup-content {
  1220. padding: 40rpx;
  1221. .sh_popup_title {
  1222. font-weight: 500;
  1223. font-size: 32rpx;
  1224. color: #333333;
  1225. text-align: center;
  1226. }
  1227. .sh_popup_text {
  1228. font-weight: 400;
  1229. font-size: 30rpx;
  1230. color: #666666;
  1231. text-align: center;
  1232. margin-top: 36rpx;
  1233. }
  1234. .sh_popup_btn {
  1235. display: flex;
  1236. margin-top: 60rpx;
  1237. justify-content: space-between;
  1238. .btn {
  1239. width: 244rpx;
  1240. height: 72rpx;
  1241. border-radius: 50rpx;
  1242. text-align: center;
  1243. line-height: 72rpx;
  1244. }
  1245. .no_btn {
  1246. @include coupons_border_color(theme);
  1247. color: $theme-color;
  1248. margin-right: 32rpx;
  1249. }
  1250. .yes_btn {
  1251. @include main_bg_color(theme);
  1252. color: #FFFFFF;
  1253. }
  1254. }
  1255. }
  1256. </style>