integral_order.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971
  1. <template>
  2. <view :style="colorStyle">
  3. <view class='order-submission'>
  4. <view class="allAddress" :style="store_self_mention ? '':'padding-top:10rpx'" v-if="!product_type">
  5. <view class='address acea-row row-between-wrapper' @tap='onAddress' v-if='shippingType == 0'>
  6. <view class='addressCon' v-if="addressInfo.real_name">
  7. <view class='name'>{{addressInfo.real_name}}
  8. <text class='phone'>{{addressInfo.phone}}</text>
  9. </view>
  10. <view class="line1">
  11. <text class='default font-num'
  12. v-if="addressInfo.is_default">[默认]</text>{{addressInfo.province}}{{addressInfo.city}}{{addressInfo.district}}{{addressInfo.detail}}
  13. </view>
  14. <!-- <view class='setaddress'>设置收货地址</view> -->
  15. </view>
  16. <view class='addressCon' v-else>
  17. <view class='setaddress'>设置收货地址</view>
  18. </view>
  19. <view class='iconfont icon-jiantou'></view>
  20. </view>
  21. <view class='line'>
  22. <image src='/static/images/line.jpg'></image>
  23. </view>
  24. </view>
  25. <view class="orderGoods" :class="product_type?'on':''">
  26. <view class='total'>共{{resData.num}}件商品</view>
  27. <view class='goodWrapper'>
  28. <view class='item acea-row row-between-wrapper' @click="jumpCon(cartInfo.product_id)">
  29. <view class='pictrue'>
  30. <image :src='cartInfo.image'></image>
  31. </view>
  32. <view class='text'>
  33. <view class='acea-row row-between-wrapper'>
  34. <view class='name line1'>{{cartInfo.store_name}}</view>
  35. <view class='num'>x {{resData.num}}</view>
  36. </view>
  37. <view class='attr line1' v-if="cartInfo.attrInfo">{{cartInfo.attrInfo.suk}}
  38. </view>
  39. <view class='money font-color'>
  40. {{cartInfo.price}}积分
  41. </view>
  42. </view>
  43. </view>
  44. </view>
  45. </view>
  46. <view class='wrapper' v-if="confirm.length">
  47. <view class='item acea-row row-between-wrapper' v-for="(item,index) in confirm" :key="index">
  48. <view class="name">
  49. <span class="asterisk" v-if="item.status">*</span>
  50. {{ item.title }}</view>
  51. <!-- text -->
  52. <view v-if="item.label=='text'" class="discount">
  53. <input type="text" :placeholder="'请填写'+item.title" placeholder-class="placeholder" v-model="item.value" />
  54. </view>
  55. <!-- number -->
  56. <view v-if="item.label=='number'" class="discount">
  57. <input type="number" :placeholder="'请填写'+item.title" placeholder-class="placeholder" v-model="item.value" />
  58. </view>
  59. <!-- email -->
  60. <view v-if="item.label=='email'" class="discount">
  61. <input type="text" :placeholder="'请填写'+item.title" placeholder-class="placeholder" v-model="item.value" />
  62. </view>
  63. <!-- data -->
  64. <view v-if="item.label=='data'" class="discount">
  65. <picker mode="date" :value="item.value" @change="bindDateChange($event,index)">
  66. <view class="acea-row row-between-wrapper">
  67. <view v-if="item.value == ''">请选择{{item.title}}</view>
  68. <view v-else>{{item.value}}</view>
  69. <text class='iconfont icon-jiantou'></text>
  70. </view>
  71. </picker>
  72. </view>
  73. <!-- time -->
  74. <view v-if="item.label=='time'" class="discount">
  75. <picker mode="time" :value="item.value"
  76. @change="bindTimeChange($event,index)" :placeholder="'请填写'+item.title" >
  77. <view class="acea-row row-between-wrapper">
  78. <view v-if="item.value == ''">请选择{{item.title}}</view>
  79. <view v-else>{{item.value}}</view>
  80. <text class='iconfont icon-jiantou'></text>
  81. </view>
  82. </picker>
  83. </view>
  84. <!-- id -->
  85. <view v-if="item.label=='id'" class="discount">
  86. <input type="idcard" :placeholder="'请填写'+item.title" placeholder-class="placeholder" v-model="item.value" />
  87. </view>
  88. <!-- phone -->
  89. <view v-if="item.label=='phone'" class="discount">
  90. <input type="tel" :placeholder="'请填写'+item.title" placeholder-class="placeholder" v-model="item.value" />
  91. </view>
  92. <!-- img -->
  93. <view v-if="item.label=='img'" class="confirmImg">
  94. <view class='upload acea-row row-middle'>
  95. <view class='pictrue' v-for="(items,indexs) in item.value" :key="indexs">
  96. <image :src='items' mode="aspectFill"></image>
  97. <view class='iconfont icon-guanbi1 font-num' @tap='DelPic(index,indexs)'></view>
  98. </view>
  99. <view class='pictrue acea-row row-center-wrapper row-column' @tap='uploadpic(index)'
  100. v-if="item.value.length < 8">
  101. <text class='iconfont icon-icon25201'></text>
  102. <view>上传图片</view>
  103. </view>
  104. </view>
  105. </view>
  106. </view>
  107. </view>
  108. <view class='wrapper'>
  109. <view class='item acea-row row-between-wrapper'>
  110. <view>可用积分</view>
  111. <view class='discount'>{{resData.integral}}
  112. </view>
  113. </view>
  114. <view class='item acea-row row-between-wrapper'>
  115. <view>快递费用</view>
  116. <view class='discount'>免运费
  117. </view>
  118. </view>
  119. <view class='item' v-if="textareaStatus">
  120. <view>备注信息</view>
  121. <textarea placeholder-class='placeholder' placeholder="请添加备注(150字以内)" v-if="!coupon.coupon"
  122. @input='bindHideKeyboard' :value="mark" :maxlength="150" name="mark">
  123. </textarea>
  124. </view>
  125. </view>
  126. <view style='height:120rpx;'></view>
  127. <view class='footer acea-row row-between-wrapper'>
  128. <view>合计:
  129. <text class='font-color'>{{resData.total_price || 0}}积分</text>
  130. </view>
  131. <view class='settlement' style='z-index:100' @tap="goPay">立即兑换</view>
  132. </view>
  133. </view>
  134. <view class="alipaysubmit" v-html="formContent"></view>
  135. <couponListWindow :coupon='coupon' @ChangCouponsClone="ChangCouponsClone" :openType='openType' :cartId='cartId'
  136. @ChangCoupons="ChangCoupons"></couponListWindow>
  137. <addressWindow ref="addressWindow" @changeTextareaStatus="changeTextareaStatus" :news='news' :address='address'
  138. :pagesUrl="pagesUrl" @OnChangeAddress="OnChangeAddress" @changeClose="changeClose"></addressWindow>
  139. <home v-show="!invShow && navigation"></home>
  140. </view>
  141. </template>
  142. <script>
  143. import {
  144. integralOrderConfirm,
  145. integralOrderCreate,
  146. } from '@/api/activity.js';
  147. import {
  148. getAddressDefault,
  149. getAddressDetail,
  150. invoiceList,
  151. invoiceOrder
  152. } from '@/api/user.js';
  153. import {
  154. storeListApi
  155. } from '@/api/store.js';
  156. import {
  157. CACHE_LONGITUDE,
  158. CACHE_LATITUDE
  159. } from '@/config/cache.js';
  160. import couponListWindow from '@/components/couponListWindow';
  161. import addressWindow from '@/components/addressWindow';
  162. import orderGoods from '@/components/orderGoods';
  163. import home from '@/components/home';
  164. import {
  165. toLogin
  166. } from '@/libs/login.js';
  167. import {
  168. mapGetters
  169. } from "vuex";
  170. import colors from "@/mixins/color";
  171. export default {
  172. components: {
  173. couponListWindow,
  174. addressWindow,
  175. orderGoods,
  176. home
  177. },
  178. mixins: [colors],
  179. data() {
  180. return {
  181. confirm:[],
  182. textareaStatus: true,
  183. //支付方式
  184. cartArr: [{
  185. "name": "微信支付",
  186. "icon": "icon-weixin2",
  187. value: 'weixin',
  188. title: '使用微信快捷支付',
  189. payStatus: 1,
  190. },
  191. {
  192. "name": "支付宝支付",
  193. "icon": "icon-zhifubao",
  194. value: 'alipay',
  195. title: '使用线上支付宝支付',
  196. payStatus: 1,
  197. },
  198. {
  199. "name": "余额支付",
  200. "icon": "icon-yuezhifu",
  201. value: 'yue',
  202. title: '可用余额:',
  203. payStatus: 1,
  204. },
  205. {
  206. "name": "线下支付",
  207. "icon": "icon-yuezhifu1",
  208. value: 'offline',
  209. title: '选择线下付款方式',
  210. payStatus: 2,
  211. }
  212. ],
  213. formContent: '',
  214. payType: 'weixin', //支付方式
  215. openType: 1, //优惠券打开方式 1=使用
  216. active: 0, //支付方式切换
  217. coupon: {
  218. coupon: false,
  219. list: [],
  220. statusTile: '立即使用'
  221. }, //优惠券组件
  222. address: {
  223. address: false
  224. }, //地址组件
  225. addressInfo: {}, //地址信息
  226. pinkId: 0, //拼团id
  227. addressId: 0, //地址id
  228. couponId: 0, //优惠券id
  229. cartId: '', //购物车id
  230. BargainId: 0,
  231. combinationId: 0,
  232. seckillId: 0,
  233. userInfo: {}, //用户信息
  234. mark: '', //备注信息
  235. couponTitle: '请选择', //优惠券
  236. coupon_price: 0, //优惠券抵扣金额
  237. useIntegral: false, //是否使用积分
  238. integral_price: 0, //积分抵扣金额
  239. integral: 0,
  240. ChangePrice: 0, //使用积分抵扣变动后的金额
  241. formIds: [], //收集formid
  242. status: 0,
  243. is_address: false,
  244. toPay: false, //修复进入支付时页面隐藏从新刷新页面
  245. shippingType: 0,
  246. system_store: {},
  247. storePostage: 0,
  248. contacts: '',
  249. contactsTel: '',
  250. mydata: {},
  251. storeList: [],
  252. store_self_mention: 0,
  253. cartInfo: {},
  254. priceGroup: {},
  255. animated: false,
  256. totalPrice: 0,
  257. integralRatio: "0",
  258. pagesUrl: "",
  259. orderKey: "",
  260. // usableCoupon: {},
  261. offlinePostage: "",
  262. isAuto: false, //没有授权的不会自动授权
  263. isShowAuth: false, //是否隐藏授权
  264. from: '',
  265. news: 1,
  266. invTitle: '不开发票',
  267. special_invoice: false,
  268. invoice_func: false,
  269. header_type: '',
  270. invShow: false,
  271. invList: [],
  272. invChecked: '',
  273. urlQuery: '',
  274. pay_close: false,
  275. resData: {},
  276. product_type:1,
  277. newImg: []
  278. };
  279. },
  280. computed: mapGetters(['isLogin']),
  281. onLoad: function(options) {
  282. // #ifdef H5
  283. this.from = this.$wechat.isWeixin() ? 'weixin' : 'weixinh5'
  284. // #endif
  285. // #ifdef MP
  286. this.from = 'routine'
  287. // #endif
  288. if (!options.unique) return this.$util.Tips({
  289. title: '请选择要购买的商品'
  290. }, {
  291. tab: 3,
  292. url: 1
  293. });
  294. this.unique = options.unique
  295. this.num = options.num
  296. this.couponId = options.couponId || 0;
  297. this.pinkId = options.pinkId ? parseInt(options.pinkId) : 0;
  298. this.addressId = options.addressId || 0;
  299. this.cartId = options.cartId;
  300. this.is_address = options.is_address ? true : false;
  301. this.news = !options.new || options.new === '0' ? 0 : 1;
  302. this.invChecked = options.invoice_id || '';
  303. this.header_type = options.header_type || '1';
  304. this.couponTitle = options.couponTitle || '请选择'
  305. // #ifndef APP-PLUS
  306. this.textareaStatus = true;
  307. // #endif
  308. if (this.isLogin && this.toPay == false) {
  309. this.getaddressInfo();
  310. this.getConfirm();
  311. this.$nextTick(function() {
  312. this.$refs.addressWindow.getAddressList();
  313. })
  314. } else {
  315. toLogin();
  316. }
  317. },
  318. /**
  319. * 生命周期函数--监听页面显示
  320. */
  321. onShow: function() {
  322. uni.removeStorageSync('form_type_cart');
  323. let _this = this
  324. uni.$on("handClick", res => {
  325. if (res) {
  326. _this.system_store = res.address
  327. }
  328. // 清除监听
  329. uni.$off('handClick');
  330. })
  331. },
  332. methods: {
  333. jumpCon: function(id) {
  334. uni.navigateTo({
  335. url: `/pages/goods_details/index?id=${id}`
  336. })
  337. },
  338. /**
  339. * 删除图片
  340. *
  341. */
  342. DelPic: function(index, indexs) {
  343. let that = this,
  344. pic = this.confirm[index].value;
  345. that.confirm[index].value.splice(indexs, 1);
  346. that.$set(that.confirm[index], 'value', that.confirm[index].value);
  347. },
  348. /**
  349. * 上传文件
  350. *
  351. */
  352. uploadpic: function(index) {
  353. let that = this;
  354. this.$util.uploadImageOne('upload/image', function(res) {
  355. that.newImg.push(res.data.url);
  356. that.$set(that.confirm[index], 'value', that.newImg);
  357. });
  358. },
  359. getInvoiceList() {
  360. uni.showLoading({
  361. title: '正在加载…'
  362. })
  363. invoiceList().then(res => {
  364. uni.hideLoading();
  365. this.invList = res.data.map(item => {
  366. item.id = item.id.toString();
  367. return item;
  368. });
  369. const result = this.invList.find(item => item.id == this.invChecked);
  370. if (result) {
  371. let name = '';
  372. name += result.header_type === 1 ? '个人' : '企业';
  373. name += result.type === 1 ? '普通' : '专用';
  374. name += '发票';
  375. this.invTitle = name;
  376. }
  377. }).catch(err => {
  378. uni.showToast({
  379. title: err,
  380. icon: 'none'
  381. });
  382. });
  383. },
  384. /**
  385. * 事件回调
  386. *
  387. */
  388. onChangeFun: function(e) {
  389. let opt = e;
  390. let action = opt.action || null;
  391. let value = opt.value != undefined ? opt.value : null;
  392. action && this[action] && this[action](value);
  393. },
  394. payClose: function() {
  395. this.pay_close = false;
  396. },
  397. goPay() {
  398. let that = this
  399. if (!that.addressId && !that.product_type) {
  400. return that.$util.Tips({
  401. title: '请选择收货地址'
  402. });
  403. }
  404. if (parseFloat(that.resData.integral) < parseFloat(that.cartInfo.price))
  405. return that.$util.Tips({
  406. title: '积分不足!'
  407. });
  408. for (var i = 0; i < that.confirm.length; i++) {
  409. let data = that.confirm[i]
  410. if (data.status) {
  411. if (data.label === 'text' || data.label === 'data' || data.label === 'time') {
  412. if (!data.value.trim()) {
  413. return that.$util.Tips({
  414. title: `请填写${data.title}`
  415. });
  416. }
  417. }
  418. if (data.label === 'number') {
  419. if (data.value <= 0) {
  420. return that.$util.Tips({
  421. title: `请填写${data.title}`
  422. });
  423. }
  424. }
  425. if (data.label === 'email') {
  426. if (!/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(data.value)) {
  427. return that.$util.Tips({
  428. title: `请填写正确的${data.title}`
  429. });
  430. }
  431. }
  432. if (data.label === 'phone') {
  433. if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(data.value)) {
  434. return that.$util.Tips({
  435. title: `请填写正确的${data.title}`
  436. });
  437. }
  438. }
  439. if (data.label === 'id') {
  440. if (!/^[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.test(data.value)) {
  441. return that.$util.Tips({
  442. title: `请填写正确的${data.title}`
  443. });
  444. }
  445. }
  446. if (data.label === 'img') {
  447. if (!data.value.length) {
  448. return that.$util.Tips({
  449. title: `请上传${data.title}`
  450. });
  451. }
  452. }
  453. }
  454. }
  455. let data = {
  456. custom_form: that.confirm,
  457. addressId: that.addressId,
  458. mark: that.mark,
  459. unique: this.cartInfo.unique,
  460. num: this.resData.num
  461. }
  462. integralOrderCreate(data).then(res => {
  463. uni.redirectTo({
  464. url: `/pages/points_mall/integral_order_status?order_id=${res.data.result.orderId}`
  465. })
  466. }).catch(err => {
  467. uni.hideLoading();
  468. return that.$util.Tips({
  469. title: err
  470. });
  471. });
  472. },
  473. // 关闭地址弹窗;
  474. changeClose: function() {
  475. this.$set(this.address, 'address', false);
  476. },
  477. computedPrice: function() {
  478. let shippingType = this.shippingType;
  479. postOrderComputed(this.orderKey, {
  480. addressId: this.addressId,
  481. useIntegral: this.useIntegral ? 1 : 0,
  482. couponId: this.couponId,
  483. shipping_type: parseInt(shippingType) + 1,
  484. payType: this.payType
  485. }).then(res => {
  486. let result = res.data.result;
  487. if (result) {
  488. this.totalPrice = result.pay_price;
  489. this.integral_price = result.deduction_price;
  490. this.coupon_price = result.coupon_price;
  491. this.integral = this.useIntegral ? result.SurplusIntegral : this.userInfo.integral;
  492. this.$set(this.priceGroup, 'storePostage', shippingType == 1 ? 0 : result.pay_postage);
  493. this.$set(this.priceGroup, 'storePostageDiscount', result.storePostageDiscount);
  494. }
  495. })
  496. },
  497. ChangCouponsClone: function() {
  498. this.$set(this.coupon, 'coupon', false);
  499. },
  500. changeTextareaStatus: function() {
  501. for (let i = 0, len = this.coupon.list.length; i < len; i++) {
  502. this.coupon.list[i].use_title = '';
  503. this.coupon.list[i].is_use = 0;
  504. }
  505. this.textareaStatus = true;
  506. this.status = 0;
  507. this.$set(this.coupon, 'list', this.coupon.list);
  508. },
  509. /**
  510. * 选择地址后改变事件
  511. * @param object e
  512. */
  513. OnChangeAddress: function(e) {
  514. this.textareaStatus = true;
  515. this.addressId = e;
  516. this.address.address = false;
  517. this.getaddressInfo();
  518. },
  519. bindHideKeyboard: function(e) {
  520. this.mark = e.detail.value;
  521. },
  522. /**
  523. * 获取当前订单详细信息
  524. *
  525. */
  526. getConfirm: function() {
  527. let that = this;
  528. // return;
  529. integralOrderConfirm({
  530. unique: this.unique,
  531. num: this.num
  532. }).then(res => {
  533. that.$set(that, 'confirm', res.data.custom_form);
  534. that.$set(that, 'product_type', parseInt(res.data.productInfo.product_type));
  535. that.$set(that, 'resData', res.data);
  536. that.$set(that, 'cartInfo', res.data.productInfo);
  537. }).catch(err => {
  538. return this.$util.Tips({
  539. title: err
  540. });
  541. });
  542. },
  543. bindDateChange: function(e, index) {
  544. this.confirm[index].value = e.target.value
  545. },
  546. bindTimeChange: function(e, index) {
  547. this.confirm[index].value = e.target.value
  548. },
  549. /*
  550. * 提取砍价和拼团id
  551. */
  552. getBargainId: function() {
  553. let that = this;
  554. let cartINfo = that.cartInfo;
  555. let BargainId = 0;
  556. let combinationId = 0;
  557. cartINfo.forEach(function(value, index, cartINfo) {
  558. BargainId = cartINfo[index].bargain_id,
  559. combinationId = cartINfo[index].combination_id
  560. })
  561. that.$set(that, 'BargainId', parseInt(BargainId));
  562. that.$set(that, 'combinationId', parseInt(combinationId));
  563. if (that.cartArr.length == 3 && (BargainId || combinationId || that.seckillId)) {
  564. that.cartArr[2].payStatus = 0;
  565. that.$set(that, 'cartArr', that.cartArr);
  566. }
  567. },
  568. /*
  569. * 获取默认收货地址或者获取某条地址信息
  570. */
  571. getaddressInfo: function() {
  572. let that = this;
  573. if (that.addressId) {
  574. getAddressDetail(that.addressId).then(res => {
  575. res.data.is_default = parseInt(res.data.is_default);
  576. that.addressInfo = res.data || {};
  577. that.addressId = res.data.id || 0;
  578. that.address.addressId = res.data.id || 0;
  579. })
  580. } else {
  581. getAddressDefault().then(res => {
  582. res.data.is_default = parseInt(res.data.is_default);
  583. that.addressInfo = res.data || {};
  584. that.addressId = res.data.id || 0;
  585. that.address.addressId = res.data.id || 0;
  586. })
  587. }
  588. },
  589. couponTap: function() {
  590. this.coupon.coupon = true;
  591. this.coupon.list.forEach((item, index) => {
  592. if (item.id == this.couponId) {
  593. item.is_use = 1
  594. } else {
  595. item.is_use = 0
  596. }
  597. })
  598. this.$set(this.coupon, 'list', this.coupon.list);
  599. },
  600. car: function() {
  601. let that = this;
  602. that.animated = false;
  603. },
  604. onAddress: function() {
  605. let that = this;
  606. that.textareaStatus = false;
  607. that.address.address = true;
  608. that.pagesUrl = `/pages/points_mall/user_address?unique=${this.unique}&num=${this.num}`
  609. },
  610. clickTextArea() {
  611. this.$nextTick(() => {
  612. this.$refs.getFocus.focus()
  613. })
  614. },
  615. }
  616. }
  617. </script>
  618. <style lang="scss" scoped>
  619. /deep/uni-checkbox[disabled] .uni-checkbox-input {
  620. background-color: #eee;
  621. }
  622. .confirmImg{
  623. width: 100%;
  624. }
  625. .confirmImg .upload {
  626. padding-bottom: 36rpx;
  627. }
  628. .confirmImg .upload .pictrue {
  629. margin: 22rpx 23rpx 0 0;
  630. width: 156rpx;
  631. height: 156rpx;
  632. position: relative;
  633. font-size: 24rpx;
  634. color: #bbb;
  635. }
  636. .confirmImg .upload .pictrue:nth-of-type(4n) {
  637. margin-right: 0;
  638. }
  639. .confirmImg .upload .pictrue image {
  640. width: 100%;
  641. height: 100%;
  642. border-radius: 3rpx;
  643. }
  644. .confirmImg .upload .pictrue .icon-guanbi1 {
  645. position: absolute;
  646. font-size: 45rpx;
  647. top: -10rpx;
  648. right: -10rpx;
  649. }
  650. .confirmImg .upload .pictrue .icon-icon25201 {
  651. color: #bfbfbf;
  652. font-size: 50rpx;
  653. }
  654. .confirmImg .upload .pictrue:nth-last-child(1) {
  655. border: 1rpx solid #ddd;
  656. box-sizing: border-box;
  657. }
  658. .goodWrapper{
  659. padding: 0 30rpx;
  660. }
  661. .alipaysubmit {
  662. display: none;
  663. }
  664. .order-submission .line {
  665. width: 100%;
  666. height: 3rpx;
  667. }
  668. .order-submission .line image {
  669. width: 100%;
  670. height: 100%;
  671. display: block;
  672. }
  673. .order-submission .address {
  674. padding: 28rpx 30rpx;
  675. background-color: #fff;
  676. box-sizing: border-box;
  677. }
  678. .order-submission .address .addressCon {
  679. width: 610rpx;
  680. font-size: 26rpx;
  681. color: #666;
  682. }
  683. .order-submission .address .addressCon .name {
  684. font-size: 30rpx;
  685. color: #282828;
  686. font-weight: bold;
  687. margin-bottom: 10rpx;
  688. }
  689. .order-submission .address .addressCon .name .phone {
  690. margin-left: 50rpx;
  691. }
  692. .order-submission .address .addressCon .default {
  693. margin-right: 12rpx;
  694. }
  695. .order-submission .address .addressCon .setaddress {
  696. color: #333;
  697. font-size: 28rpx;
  698. }
  699. .order-submission .address .iconfont {
  700. font-size: 35rpx;
  701. color: #707070;
  702. }
  703. .order-submission .allAddress {
  704. width: 100%;
  705. background: linear-gradient(to bottom, var(--view-theme) 0%, #f5f5f5 100%);
  706. padding-top: 100rpx;
  707. }
  708. .order-submission .allAddress .nav {
  709. width: 710rpx;
  710. margin: 0 auto;
  711. }
  712. .order-submission .allAddress .nav .item {
  713. width: 355rpx;
  714. }
  715. .order-submission .allAddress .nav .item.on {
  716. position: relative;
  717. width: 250rpx;
  718. }
  719. .order-submission .allAddress .nav .item.on::before {
  720. position: absolute;
  721. bottom: 0;
  722. content: "快递配送";
  723. font-size: 28rpx;
  724. display: block;
  725. height: 0;
  726. width: 336rpx;
  727. border-width: 0 20rpx 80rpx 0;
  728. border-style: none solid solid;
  729. border-color: transparent transparent #fff;
  730. z-index: 2;
  731. border-radius: 7rpx 30rpx 0 0;
  732. text-align: center;
  733. line-height: 80rpx;
  734. }
  735. .order-submission .allAddress .nav .item:nth-of-type(2).on::before {
  736. content: "到店自提";
  737. border-width: 0 0 80rpx 20rpx;
  738. border-radius: 30rpx 7rpx 0 0;
  739. }
  740. .order-submission .allAddress .nav .item.on2 {
  741. position: relative;
  742. }
  743. .order-submission .allAddress .nav .item.on2::before {
  744. position: absolute;
  745. bottom: 0;
  746. content: "到店自提";
  747. font-size: 28rpx;
  748. display: block;
  749. height: 0;
  750. width: 400rpx;
  751. border-width: 0 0 60rpx 60rpx;
  752. border-style: none solid solid;
  753. border-color: transparent transparent #f7c1bd;
  754. border-radius: 40rpx 6rpx 0 0;
  755. text-align: center;
  756. line-height: 60rpx;
  757. }
  758. .order-submission .allAddress .nav .item:nth-of-type(1).on2::before {
  759. content: "快递配送";
  760. border-width: 0 60rpx 60rpx 0;
  761. border-radius: 6rpx 40rpx 0 0;
  762. }
  763. .order-submission .allAddress .address {
  764. width: 710rpx;
  765. height: 150rpx;
  766. margin: 0 auto;
  767. }
  768. .order-submission .allAddress .line {
  769. width: 710rpx;
  770. margin: 0 auto;
  771. }
  772. .order-submission .wrapper .item .discount .placeholder {
  773. color: #ccc;
  774. }
  775. .placeholder-textarea {
  776. position: relative;
  777. .placeholder {
  778. position: absolute;
  779. color: #ccc;
  780. top: 26rpx;
  781. left: 30rpx;
  782. }
  783. }
  784. .order-submission .wrapper {
  785. background-color: #fff;
  786. margin-top: 13rpx;
  787. }
  788. .order-submission .wrapper .item .name{
  789. position: relative;
  790. }
  791. .order-submission .wrapper .item .asterisk{
  792. position: absolute;
  793. color:red;
  794. left:-15rpx
  795. }
  796. .order-submission .wrapper .item {
  797. padding: 27rpx 30rpx;
  798. font-size: 30rpx;
  799. color: #282828;
  800. border-bottom: 1px solid #f0f0f0;
  801. }
  802. .order-submission .wrapper .item .discount {
  803. font-size: 30rpx;
  804. color: #999;
  805. }
  806. .order-submission .wrapper .item .discount input {
  807. text-align: end;
  808. }
  809. .order-submission .wrapper .item .discount .iconfont {
  810. color: #515151;
  811. font-size: 30rpx;
  812. margin-left: 15rpx;
  813. }
  814. .order-submission .wrapper .item .discount .num {
  815. font-size: 32rpx;
  816. margin-right: 20rpx;
  817. }
  818. .order-submission .wrapper .item .shipping {
  819. font-size: 30rpx;
  820. color: #999;
  821. position: relative;
  822. padding-right: 58rpx;
  823. }
  824. .order-submission .wrapper .item .shipping .iconfont {
  825. font-size: 35rpx;
  826. color: #707070;
  827. position: absolute;
  828. right: 0;
  829. top: 50%;
  830. transform: translateY(-50%);
  831. margin-left: 30rpx;
  832. }
  833. .order-submission .wrapper .item textarea {
  834. background-color: #f9f9f9;
  835. width: 690rpx;
  836. height: 140rpx;
  837. border-radius: 3rpx;
  838. margin-top: 30rpx;
  839. padding: 25rpx 28rpx;
  840. box-sizing: border-box;
  841. }
  842. .order-submission .wrapper .item .placeholder {
  843. color: #ccc;
  844. }
  845. .order-submission .wrapper .item .list {
  846. margin-top: 35rpx;
  847. }
  848. .order-submission .moneyList {
  849. margin-top: 12rpx;
  850. background-color: #fff;
  851. padding: 30rpx;
  852. }
  853. .order-submission .moneyList .item {
  854. font-size: 28rpx;
  855. color: #282828;
  856. }
  857. .order-submission .moneyList .item~.item {
  858. margin-top: 20rpx;
  859. }
  860. .order-submission .moneyList .item .money {
  861. color: #868686;
  862. }
  863. .order-submission .footer {
  864. width: 100%;
  865. height: 100rpx;
  866. background-color: #fff;
  867. padding: 0 30rpx;
  868. font-size: 28rpx;
  869. color: #333;
  870. box-sizing: border-box;
  871. position: fixed;
  872. bottom: 0;
  873. left: 0;
  874. }
  875. .order-submission .footer .settlement {
  876. font-size: 30rpx;
  877. color: #fff;
  878. width: 240rpx;
  879. height: 70rpx;
  880. background-color: var(--view-theme);
  881. border-radius: 50rpx;
  882. text-align: center;
  883. line-height: 70rpx;
  884. }
  885. .footer .transparent {
  886. opacity: 0
  887. }
  888. .orderGoods {
  889. background-color: #fff;
  890. margin-top: 12rpx;
  891. &.on{
  892. margin-top: 0;
  893. }
  894. }
  895. .orderGoods .total {
  896. width: 100%;
  897. height: 86rpx;
  898. padding: 0 30rpx;
  899. border-bottom: 2rpx solid #f0f0f0;
  900. font-size: 30rpx;
  901. color: #282828;
  902. line-height: 86rpx;
  903. box-sizing: border-box;
  904. }
  905. .pictrue image {
  906. width: 130rpx;
  907. height: 130rpx;
  908. }
  909. </style>