Pay.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778
  1. <template>
  2. <div class="pay-order">
  3. <BaseHeader></BaseHeader>
  4. <!-- LOGO 步骤条 -->
  5. <div class="width_1200 logo">
  6. <div>
  7. <router-link to="/"><img :src="logoImg" alt="lili shop" title="lilishop"></router-link>
  8. <div>结算页</div>
  9. </div>
  10. <div class="cart-steps">
  11. <span :class="stepIndex==1?'active':''">1.我的购物车</span>
  12. <Icon :class="stepIndex==1?'active-arrow':''" custom="icomoon icon-next"></Icon>
  13. <span :class="stepIndex==1?'active':''">2.填写订单信息</span>
  14. <Icon :class="stepIndex==1?'active-arrow':''" custom="icomoon icon-next"></Icon>
  15. <span :class="stepIndex==2?'active':''">3.成功提交订单</span>
  16. </div>
  17. </div>
  18. <Divider />
  19. <div class="content width_1200">
  20. <!-- 收货地址 -->
  21. <div class="address">
  22. <div class="card-head">
  23. <span>收货人信息</span>
  24. <span @click="goAddressManage">管理收货人地址</span>
  25. </div>
  26. <div class="address-manage">
  27. <div class="address-item" v-show="moreAddr ? true : index < 3" :class="selectedAddress.id === item.id?'border-red':''" @mouseenter="showEditBtn = index" @mouseleave="showEditBtn = ''" @click="selectAddress(item)" v-for="(item,index) in addressList" :key="index">
  28. <div>
  29. <span>{{item.name}}</span>
  30. <Tag class="ml_10" v-if="item.isDefault" color="red">默认</Tag>
  31. <Tag class="ml_10" v-if="item.alias" color="warning">{{item.alias}}</Tag>
  32. </div>
  33. <div>{{item.mobile}}</div>
  34. <div>{{ item.consigneeAddressPath | unitAddress }} {{item.detail}}</div>
  35. <div class="edit-btn" v-show="showEditBtn === index">
  36. <span @click.stop="editAddress(item.id)">修改</span>
  37. <span class="ml_10" v-if="!item.isDefault" @click.stop="delAddress(item)">删除</span>
  38. </div>
  39. <div class="corner-icon" v-show="selectedAddress.id === item.id">
  40. <div></div>
  41. <Icon type="md-checkmark" />
  42. </div>
  43. </div>
  44. <div class="add-address" @click="editAddress('')">
  45. <Icon type="ios-add-circle-outline" />
  46. <div>添加新地址</div>
  47. </div>
  48. </div>
  49. <div class="more-addr" @click="moreAddr = !moreAddr" v-if="addressList.length>3">
  50. {{moreAddr ? '收起地址' : '更多地址'}}
  51. <Icon v-show="!moreAddr" type="md-arrow-dropdown" />
  52. <Icon v-show="moreAddr" type="md-arrow-dropup" />
  53. </div>
  54. </div>
  55. <!-- 商品信息 -->
  56. <div class="goods-content">
  57. <div class="card-head mt_20 mb_20">
  58. <span>商品信息</span>
  59. <span @click="$router.push('/cart')">返回购物车</span>
  60. </div>
  61. <div class="goods-msg" v-for="(shop,shopIndex) in goodsList" :key="shopIndex">
  62. <div class="shop-name">
  63. <span>
  64. <span class="hover-color" @click="goShopPage(shop.storeId)">{{shop.storeName}}</span>&nbsp;&nbsp;
  65. </span>
  66. <!-- <span>
  67. <p style="width:120px">配送方式:</p>
  68. <Select v-model="shop.deliveryMethod" size="small">
  69. <Option v-for="item in deliveryList" :value="item.value" :key="item.value">{{ item.label }}</Option>
  70. </Select>
  71. </span> -->
  72. </div>
  73. <div class="goods-list">
  74. <div class="goods-item" v-for="(goods,goodsIndex) in shop.skuList" :key="goodsIndex">
  75. <span class="hover-color" @click="goGoodsDetail(goods.goodsSku.id, goods.goodsSku.goodsId)">
  76. <img :src="goods.goodsSku.thumbnail" alt="">
  77. <span style="vertical-align:top;">{{goods.goodsSku.goodsName}}</span>
  78. </span>
  79. <span class="goods-price">{{goods.goodsSku.price | unitPrice('¥')}}</span>
  80. <span>x{{goods.num}}</span>
  81. <span>{{goods.goodsSku.quantity > 0 ? '有货' : '无货'}}</span>
  82. <span class="goods-price">{{goods.goodsSku.price * goods.num | unitPrice('¥')}}</span>
  83. </div>
  84. </div>
  85. <div class="order-mark">
  86. <Input type="textarea" maxlength="60" v-model="shop.remark" show-word-limit placeholder="订单备注" />
  87. <span style="font-size:12px;color:#999;">提示:请勿填写有关支付、收货、发票方面的信息</span>
  88. </div>
  89. </div>
  90. </div>
  91. <!-- 发票信息 -->
  92. <div class="invoice">
  93. <div class="card-head mt_20 mb_20">
  94. <span class="relative">发票信息<span class="inv-tips"><Icon type="ios-alert-outline" />开企业抬头发票须填写纳税人识别号,以免影响报销</span></span>
  95. </div>
  96. <div class="inovice-content">
  97. <span>{{invoiceData.receiptTitle}}</span>
  98. <span>{{invoiceData.receiptContent}}</span>
  99. <span @click="editInvoice">编辑</span>
  100. </div>
  101. </div>
  102. <!-- 优惠券 -->
  103. <div class="invoice">
  104. <div class="card-head mt_20 mb_20">
  105. <span class="relative">优惠券</span>
  106. </div>
  107. <div v-if="couponList.length === 0">
  108. 无可用优惠券
  109. </div>
  110. <ul v-else class="coupon-list">
  111. <li v-for="(item, index) in couponList" class="coupon-item" :key="index">
  112. <div class="c-left">
  113. <div>
  114. <span v-if="item.couponType === 'PRICE'" class="fontsize_12 global_color">¥<span class="price">{{item.price | unitPrice}}</span></span>
  115. <span v-if="item.couponType === 'DISCOUNT'" class="fontsize_12 global_color"><span class="price">{{item.couponDiscount}}</span>折</span>
  116. <span class="describe">满{{item.consumeThreshold}}元可用</span>
  117. </div>
  118. <p>使用范围:{{useScope(item.scopeType)}}</p>
  119. <p>有效期:{{item.endTime}}</p>
  120. </div>
  121. <b></b>
  122. <a class="c-right" @click="useCoupon(item.id)">立即使用</a>
  123. <i class="circle-top"></i>
  124. <i class="circle-bottom"></i>
  125. </li>
  126. </ul>
  127. </div>
  128. <!-- 其他信息 -->
  129. <div class="other" v-if="$route.query.way === 'POINT'">
  130. <div class="card-head mt_20 mb_20">
  131. <span>其他信息</span>
  132. </div>
  133. <div>
  134. <div>
  135. <span>使用积分:</span><Input type="text" style="width:100px;" v-model.number="otherMsgForm.point" placeholder="请输入使用积分" /> <span style="color:#999;">您当前的可用积分为 {{otherMsgForm.totalPoint}} ,本订单最多可以使用{{otherMsgForm.availablePoint}}</span>
  136. </div>
  137. </div>
  138. </div>
  139. <!-- 订单价格 -->
  140. <div class="order-price">
  141. <div>
  142. <span>{{totalNum}}件商品,总商品金额:</span><span>{{priceDetailDTO.goodsPrice | unitPrice('¥')}}</span>
  143. </div>
  144. <div>
  145. <span>运费:</span><span>{{ priceDetailDTO.freightPrice | unitPrice('¥')}}</span>
  146. </div>
  147. <div>
  148. <span>优惠金额:</span><span>-{{ priceDetailDTO.discountPrice + priceDetailDTO.couponPrice + priceDetailDTO.updatePrice | unitPrice('¥')}}</span>
  149. </div>
  150. <div>
  151. <span>应付金额:</span><span class='actrual-price'>{{priceDetailDTO.billPrice | unitPrice('¥')}}</span>
  152. </div>
  153. </div>
  154. </div>
  155. <!-- 底部支付栏 -->
  156. <div class="order-footer width_1200">
  157. <div class="pay ml_20" @click="pay">提交订单</div>
  158. <div class="pay-address" v-if="addressList.length">配送至:{{ selectedAddress.consigneeAddressPath | unitAddress }} {{selectedAddress.detail}}&nbsp;&nbsp;收货人:{{selectedAddress.name}}&nbsp;&nbsp;{{selectedAddress.mobile}}</div>
  159. </div>
  160. <BaseFooter></BaseFooter>
  161. <!-- 添加发票模态框 -->
  162. <invoice-modal ref="invModal" @change="getInvMsg" />
  163. <!-- 选择地址模态框 -->
  164. <address-manage ref="address" :id="addrId" @change="addrChange"></address-manage>
  165. </div>
  166. </template>
  167. <script>
  168. import invoiceModal from '@/components/invoiceModal';
  169. import addressManage from '@/components/addressManage';
  170. import {memberAddress, delMemberAddress} from '@/api/address';
  171. import {cartGoodsPay, createTrade, selectAddr, shippingMethod, receiptSelect, selectCoupon, couponNum} from '@/api/cart';
  172. import { canUseCouponList } from '@/api/member.js';
  173. import {getLogo} from '@/api/common.js'
  174. export default {
  175. name: 'Pay',
  176. components: { invoiceModal, addressManage },
  177. data () {
  178. return {
  179. stepIndex: 1, // 顶部步骤条状态
  180. invoiceAvailable: false, // 发票编辑按钮
  181. showEditBtn: '', // 鼠标移入显示编辑按钮
  182. orderMark: '', // 订单备注
  183. invoiceData: { // 发票数据
  184. receiptTitle: '个人',
  185. receiptContent: '不开发票'
  186. },
  187. otherMsgForm: { // 其他信息模块数据
  188. point: 0,
  189. availablePoint: 10,
  190. totalPoint: 100,
  191. noGoods: 0
  192. },
  193. deliveryList: [ // 物流
  194. // {value: 'SELF_PICK_UP', label: '自提'},
  195. {value: 'LOGISTICS', label: '物流'}
  196. // {value: 'LOCAL_TOWN_DELIVERY', label: '同城配送'}
  197. ],
  198. addressList: [], // 地址列表
  199. selectedAddress: {}, // 所选地址
  200. goodsList: [], // 商品列表
  201. priceDetailDTO: {}, // 商品价格
  202. totalNum: 0, // 购买数量
  203. addrId: '', // 编辑地址传入的id
  204. moreAddr: false, // 更多地址
  205. canUseCouponNum: 0, // 可用优惠券数量
  206. couponList: [], // 可用优惠券列表
  207. logoImg: '' // 平台logo
  208. };
  209. },
  210. mounted () {
  211. this.init();
  212. if (!this.Cookies.getItem('logo')) {
  213. getLogo().then(res => {
  214. if (res.success) {
  215. let logoObj = JSON.parse(res.result.settingValue)
  216. this.Cookies.setItem('logo', logoObj.buyerSideLogo)
  217. }
  218. })
  219. } else {
  220. this.logoImg = this.Cookies.getItem('logo')
  221. }
  222. },
  223. methods: {
  224. init () {
  225. this.getGoodsDetail();
  226. },
  227. goAddressManage () { // 跳转地址管理页面
  228. this.$router.push('/home/MyAddress');
  229. },
  230. getAddress () { // 获取收货地址列表
  231. memberAddress().then(res => {
  232. if (res.success) {
  233. this.addressList = res.result.records;
  234. this.addressList.forEach((e, index) => {
  235. if (e.id === this.selectedAddress.id && index > 2) {
  236. this.moreAddr = true
  237. }
  238. });
  239. }
  240. });
  241. },
  242. getGoodsDetail () { // 订单商品详情
  243. this.$Spin.show();
  244. cartGoodsPay({way: this.$route.query.way}).then(res => {
  245. this.$Spin.hide();
  246. if (res.success) {
  247. this.goodsList = res.result.cartList;
  248. this.priceDetailDTO = res.result.priceDetailDTO;
  249. this.skuList = res.result.skuList;
  250. let notSupArea = res.result.notSupportFreight
  251. if (notSupArea) {
  252. let content = [];
  253. let title = ''
  254. notSupArea.forEach(e => {
  255. title = e.errorMessage
  256. content.push(e.goodsSku.goodsName)
  257. })
  258. this.$Modal.warning({
  259. title: '以下商品超出配送区域' || title,
  260. content: content.toString()
  261. })
  262. }
  263. if (res.result.memberAddress) {
  264. this.selectedAddress = res.result.memberAddress
  265. }
  266. this.getAddress()
  267. this.totalNum = 0;
  268. for (let i = 0; i < this.skuList.length; i++) {
  269. this.totalNum += this.skuList[i].num;
  270. }
  271. this.getCouponNum()
  272. }
  273. }).catch(() => { this.$Spin.hide() });
  274. },
  275. getCouponNum () { // 获取可用优惠券数量
  276. couponNum({way: this.$route.query.way}).then(res => {
  277. this.canUseCouponNum = res.result
  278. if (res.result) {
  279. let storeArr = []
  280. let skuArr = []
  281. this.goodsList.forEach(e => {
  282. storeArr.push(e.storeId)
  283. e.skuList.forEach(i => {
  284. skuArr.push(i.goodsSku.id)
  285. })
  286. })
  287. let params = {
  288. pageNumber: 1,
  289. pageSize: 100,
  290. memberCouponStatus: 'NEW',
  291. scopeId: skuArr.toString(),
  292. storeId: storeArr.toString(),
  293. totalPrice: this.priceDetailDTO.goodsPrice
  294. }
  295. canUseCouponList(params).then(res => {
  296. if (res.success) this.couponList = res.result.records
  297. })
  298. }
  299. })
  300. },
  301. selectAddress (item) { // 选择地址
  302. let params = {
  303. way: this.$route.query.way,
  304. shippingAddressId: item.id
  305. };
  306. selectAddr(params).then(res => {
  307. if (res.success) {
  308. this.$Message.success('选择收货地址成功');
  309. this.selectedAddress = item;
  310. this.getGoodsDetail();
  311. }
  312. });
  313. },
  314. editAddress (id) { // 编辑地址
  315. this.addrId = id;
  316. this.$refs.address.show();
  317. },
  318. addrChange (item) { // 添加,编辑地址回显
  319. this.getAddress();
  320. },
  321. delAddress (item) {
  322. // 删除地址
  323. this.$Modal.confirm({
  324. title: '提示',
  325. content: '你确定删除这个收货地址',
  326. onOk: () => {
  327. delMemberAddress(item.id).then((res) => {
  328. if (res.success) {
  329. this.$Message.success('删除成功');
  330. this.getAddress();
  331. }
  332. });
  333. },
  334. onCancel: () => {}
  335. });
  336. },
  337. goGoodsDetail (skuId, goodsId) { // 跳转商品详情
  338. let routeUrl = this.$router.resolve({
  339. path: '/goodsDetail',
  340. query: { skuId, goodsId }
  341. });
  342. window.open(routeUrl.href, '_blank');
  343. },
  344. // 跳转店铺首页
  345. goShopPage (id) {
  346. let routeUrl = this.$router.resolve({
  347. path: '/Merchant',
  348. query: {id: id}
  349. });
  350. window.open(routeUrl.href, '_blank');
  351. },
  352. selectDelivery (delivery) { // 选择配送方式
  353. let params = {
  354. way: this.$route.query.way,
  355. shippingMethod: delivery.value
  356. };
  357. shippingMethod(params).then(res => {
  358. });
  359. },
  360. useCoupon (id) { // 使用优惠券
  361. let params = {
  362. way: this.$route.query.way,
  363. memberCouponId: id,
  364. used: true
  365. }
  366. selectCoupon(params).then(res => {
  367. if (res.success) {
  368. this.init()
  369. }
  370. })
  371. },
  372. editInvoice () { // 编辑发票信息
  373. this.$refs.invModal.invoiceAvailable = true;
  374. },
  375. getInvMsg (item) { // 获取发票信息
  376. console.log(item);
  377. this.invoiceData = item;
  378. this.selectReceipt(item.id)
  379. },
  380. selectReceipt (id) { // 选择发票
  381. let params = {
  382. way: this.$route.query.way,
  383. receiptId: id
  384. }
  385. receiptSelect(params).then(res => {
  386. })
  387. },
  388. pay () { // 结算
  389. const params = {
  390. client: 'PC',
  391. remark: [],
  392. way: this.$route.query.way
  393. };
  394. this.goodsList.forEach(e => {
  395. if (e.remark) {
  396. params.remark.push({
  397. remark: e.remark,
  398. storeId: e.storeId
  399. })
  400. }
  401. })
  402. if (!params.remark.length) delete params.remark;
  403. this.$Spin.show();
  404. createTrade(params).then(res => {
  405. this.$Spin.hide();
  406. if (res.success) {
  407. this.$router.push({path: '/payment', query: {orderType: 'TRADE', sn: res.result.sn}});
  408. }
  409. }).catch(() => {
  410. this.$Spin.hide()
  411. });
  412. },
  413. useScope (type) {
  414. let goods = '全部商品'
  415. switch (type) {
  416. case 'ALL':
  417. goods = '全部商品'
  418. break;
  419. case 'PORTION_GOODS':
  420. goods = '部分商品'
  421. break;
  422. case 'PORTION_GOODS_CATEGORY':
  423. goods = '部分分类商品'
  424. break;
  425. }
  426. return `${goods}可用`
  427. }
  428. }
  429. };
  430. </script>
  431. <style scoped lang="scss">
  432. @import '../../assets/styles/coupon.scss';
  433. /** logo start */
  434. .logo {
  435. height: 40px;
  436. display: flex;
  437. justify-content: space-between;
  438. align-items: center;
  439. margin: 20px auto 0;
  440. div:nth-child(1){
  441. display: flex;
  442. justify-content: space-between;
  443. align-items: center;
  444. img{
  445. width: 150px;
  446. height:auto;
  447. cursor: pointer;
  448. }
  449. div:nth-child(2){
  450. width: 200px;
  451. color: #999;
  452. font-size: 16px;
  453. margin: 0 20px;
  454. span{
  455. color: $theme_color;
  456. }
  457. }
  458. }
  459. }
  460. .cart-steps{
  461. height: 30px;
  462. display: flex;
  463. align-items: center;
  464. span{
  465. @include content_color($light_content_color);
  466. height: 30px;
  467. text-align: center;
  468. line-height: 30px;
  469. display: inline-block;
  470. padding: 0 15px;
  471. }
  472. .ivu-icon{
  473. @include content_color($light_content_color);
  474. font-size: 20px;
  475. margin:0 15px;
  476. }
  477. .active{
  478. border-radius: 50px;
  479. background-color:#ff8f23;
  480. color: #fff;
  481. }
  482. .active-arrow{
  483. color: #ff8f23;
  484. }
  485. }
  486. /** logo end */
  487. /** content start */
  488. .content {
  489. margin: 20px auto;
  490. background-color: #fff;
  491. min-height: 200px;
  492. padding: 15px 25px;
  493. }
  494. /** 地址管理 */
  495. .address-manage{
  496. display: flex;
  497. flex-wrap: wrap;
  498. >div {
  499. border:1px dotted #949494;
  500. width: 265px;
  501. height: 120px;
  502. margin:20px 20px 0 0;
  503. padding: 10px;
  504. cursor: pointer;
  505. color: #999;
  506. }
  507. .add-address{
  508. display: flex;
  509. align-items: center;
  510. justify-content: center;
  511. flex-direction: column;
  512. .ivu-icon{
  513. font-size: 24px;
  514. }
  515. }
  516. .address-item{
  517. position: relative;
  518. font-size: 12px;
  519. >div:nth-child(1){
  520. margin-bottom: 10px;
  521. span{
  522. margin-right: 10px;
  523. }
  524. >span:nth-child(1){
  525. color: #000000;
  526. font-size: 14px;
  527. }
  528. }
  529. .edit-btn{
  530. font-size: 12px;
  531. position: absolute;
  532. top: 15px;
  533. right: 20px;
  534. color: $theme_color;
  535. span:hover{
  536. border-bottom: 1px solid $theme_color;
  537. }
  538. }
  539. .corner-icon{
  540. position: absolute;
  541. right: -1px;
  542. bottom: -1px;
  543. div{
  544. width: 0;
  545. border-top: 20px solid transparent;
  546. border-right: 20px solid $theme_color;
  547. }
  548. .ivu-icon{
  549. font-size: 12px;
  550. position: absolute;
  551. bottom: 0;
  552. right: 1px;
  553. transform: rotate(-15deg);
  554. color: #fff;
  555. }
  556. }
  557. }
  558. .border-red{
  559. border-color: $theme_color;
  560. }
  561. }
  562. /** 购买商品列表 start */
  563. .shop-name{
  564. display: flex;
  565. justify-content: space-between;
  566. >span:nth-child(1){
  567. font-weight: bold;
  568. .ivu-icon{
  569. color: #ff8f23;
  570. &:hover {color: $theme_color;}
  571. }
  572. }
  573. >span:nth-child(2){
  574. color: #999;
  575. position: relative;
  576. display: flex;
  577. width: 200px;
  578. }
  579. .delivery-list{
  580. position: absolute;
  581. right: 0;
  582. top: 20px;
  583. background-color: #f3fafe;
  584. box-shadow: 0px 0px 5px #b9b2b2;
  585. display: flex;
  586. flex-wrap: wrap;
  587. width: 200px;
  588. min-height: 100px;
  589. padding: 10px;
  590. li{
  591. width: 90px;
  592. height: 30px;
  593. text-align: center;
  594. &:hover{
  595. cursor: pointer;
  596. }
  597. }
  598. }
  599. }
  600. .goods-list{
  601. background-color: #f8f8f8;
  602. margin: 10px 0 20px 0;
  603. .goods-item{
  604. display: flex;
  605. align-items: center;
  606. justify-content: space-between;
  607. padding: 20px 0;
  608. margin: 0 20px;
  609. border-bottom: 1px dotted #999;
  610. &:last-child{border:none;}
  611. img{
  612. width: 48px;
  613. height: 48px;
  614. }
  615. >span{
  616. text-align: center;
  617. width: 100px;
  618. }
  619. >span:nth-child(1) {
  620. font-size: 12px;
  621. flex: 1;
  622. text-align: left;
  623. }
  624. >span:last-child{
  625. color: $theme_color;
  626. font-weight: bold;
  627. }
  628. .goods-price{
  629. font-size: 16px;
  630. }
  631. }
  632. }
  633. .order-mark{
  634. width: 500px;
  635. }
  636. /** 购买商品列表 end */
  637. /** 发票信息 start */
  638. .invoice{
  639. .inv-tips{
  640. position: absolute;
  641. border: 1px solid #ddd;
  642. width: 310px;
  643. padding: 3px;
  644. margin: 0 0 0 10px;
  645. font-size: 12px!important;
  646. box-shadow: 0 0 3px rgba(0,0,0,.15);
  647. &::before{
  648. content: '';
  649. display: inline-block;
  650. width: 12px;
  651. height: 17px;
  652. background:url(../../assets/images/arrow-left.png) 0 0 no-repeat;
  653. background-color:#fff;
  654. position: absolute;
  655. left: -9px;
  656. }
  657. .ivu-icon{
  658. color: #ff8f23;
  659. margin-right: 3px;
  660. font-size: 16px;
  661. font-weight: bold;
  662. }
  663. }
  664. .inovice-content{
  665. >span {
  666. margin-right: 10px;
  667. }
  668. >span:last-child{
  669. color: $theme_color;
  670. cursor: pointer;
  671. &:hover{border-bottom: 1px solid $theme_color;}
  672. }
  673. }
  674. }
  675. /** 发票信息 end */
  676. /** 订单价格 */
  677. .order-price{
  678. text-align: right;
  679. margin-top: 30px;
  680. font-size: 16px;
  681. color: #999;
  682. >div>span:nth-child(2){
  683. width: 130px;
  684. text-align: right;
  685. display: inline-block;
  686. margin-top: 10px;
  687. }
  688. .actrual-price{
  689. color: $theme_color;
  690. font-weight: bold;
  691. font-size: 20px;
  692. }
  693. }
  694. /** content end */
  695. /** 底部支付栏 */
  696. .order-footer {
  697. height: 50px;
  698. @include background_color($light_white_background_color);
  699. @include title_color($title_color);
  700. display: flex;
  701. align-items: center;
  702. flex-direction: row-reverse;
  703. border-top: 1px solid #ddd;
  704. margin: 10px auto;
  705. div{
  706. text-align: center;
  707. }
  708. position: sticky;
  709. bottom: 0;
  710. .pay {
  711. background-color: $theme_color;
  712. width: 150px;
  713. font-size: 20px;
  714. color: #fff;
  715. height: 100%;
  716. line-height: 50px;
  717. cursor: pointer;
  718. }
  719. }
  720. /** 公共表头 */
  721. .card-head {
  722. display: flex;
  723. align-items: center;
  724. justify-content: space-between;
  725. border-bottom: 1px solid #dddddd;
  726. height: 40px;
  727. span:nth-child(1){
  728. font-size: 18px;
  729. }
  730. span:nth-child(2){
  731. font-size: 12px;
  732. color: #438cde;
  733. cursor: pointer;
  734. &:hover{
  735. color: $theme_color;
  736. }
  737. }
  738. }
  739. .ivu-divider {
  740. background: $theme_color;
  741. height: 2px;
  742. }
  743. .pay-address{font-size: 12px;}
  744. .more-addr{
  745. cursor: pointer;
  746. margin-top: 10px;
  747. display: inline-block;
  748. }
  749. .coupon-item {
  750. width: 260px;
  751. height: 125px;
  752. margin-right: 10px;
  753. margin-bottom: 10px;
  754. .c-right{
  755. width: 30px;
  756. padding: 10px 7px;
  757. }
  758. b{
  759. background: url('../../assets/images/small-circle.png') top left repeat-y;
  760. right: 28px;
  761. }
  762. .circle-top,.circle-bottom{
  763. right: 22px;
  764. }
  765. }
  766. </style>