| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778 |
- <template>
- <div class="pay-order">
- <BaseHeader></BaseHeader>
- <!-- LOGO 步骤条 -->
- <div class="width_1200 logo">
- <div>
- <router-link to="/"><img :src="logoImg" alt="lili shop" title="lilishop"></router-link>
- <div>结算页</div>
- </div>
- <div class="cart-steps">
- <span :class="stepIndex==1?'active':''">1.我的购物车</span>
- <Icon :class="stepIndex==1?'active-arrow':''" custom="icomoon icon-next"></Icon>
- <span :class="stepIndex==1?'active':''">2.填写订单信息</span>
- <Icon :class="stepIndex==1?'active-arrow':''" custom="icomoon icon-next"></Icon>
- <span :class="stepIndex==2?'active':''">3.成功提交订单</span>
- </div>
- </div>
- <Divider />
- <div class="content width_1200">
- <!-- 收货地址 -->
- <div class="address">
- <div class="card-head">
- <span>收货人信息</span>
- <span @click="goAddressManage">管理收货人地址</span>
- </div>
- <div class="address-manage">
- <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">
- <div>
- <span>{{item.name}}</span>
- <Tag class="ml_10" v-if="item.isDefault" color="red">默认</Tag>
- <Tag class="ml_10" v-if="item.alias" color="warning">{{item.alias}}</Tag>
- </div>
- <div>{{item.mobile}}</div>
- <div>{{ item.consigneeAddressPath | unitAddress }} {{item.detail}}</div>
- <div class="edit-btn" v-show="showEditBtn === index">
- <span @click.stop="editAddress(item.id)">修改</span>
- <span class="ml_10" v-if="!item.isDefault" @click.stop="delAddress(item)">删除</span>
- </div>
- <div class="corner-icon" v-show="selectedAddress.id === item.id">
- <div></div>
- <Icon type="md-checkmark" />
- </div>
- </div>
- <div class="add-address" @click="editAddress('')">
- <Icon type="ios-add-circle-outline" />
- <div>添加新地址</div>
- </div>
- </div>
- <div class="more-addr" @click="moreAddr = !moreAddr" v-if="addressList.length>3">
- {{moreAddr ? '收起地址' : '更多地址'}}
- <Icon v-show="!moreAddr" type="md-arrow-dropdown" />
- <Icon v-show="moreAddr" type="md-arrow-dropup" />
- </div>
- </div>
- <!-- 商品信息 -->
- <div class="goods-content">
- <div class="card-head mt_20 mb_20">
- <span>商品信息</span>
- <span @click="$router.push('/cart')">返回购物车</span>
- </div>
- <div class="goods-msg" v-for="(shop,shopIndex) in goodsList" :key="shopIndex">
- <div class="shop-name">
- <span>
- <span class="hover-color" @click="goShopPage(shop.storeId)">{{shop.storeName}}</span>
- </span>
- <!-- <span>
- <p style="width:120px">配送方式:</p>
- <Select v-model="shop.deliveryMethod" size="small">
- <Option v-for="item in deliveryList" :value="item.value" :key="item.value">{{ item.label }}</Option>
- </Select>
- </span> -->
- </div>
- <div class="goods-list">
- <div class="goods-item" v-for="(goods,goodsIndex) in shop.skuList" :key="goodsIndex">
- <span class="hover-color" @click="goGoodsDetail(goods.goodsSku.id, goods.goodsSku.goodsId)">
- <img :src="goods.goodsSku.thumbnail" alt="">
- <span style="vertical-align:top;">{{goods.goodsSku.goodsName}}</span>
- </span>
- <span class="goods-price">{{goods.goodsSku.price | unitPrice('¥')}}</span>
- <span>x{{goods.num}}</span>
- <span>{{goods.goodsSku.quantity > 0 ? '有货' : '无货'}}</span>
- <span class="goods-price">{{goods.goodsSku.price * goods.num | unitPrice('¥')}}</span>
- </div>
- </div>
- <div class="order-mark">
- <Input type="textarea" maxlength="60" v-model="shop.remark" show-word-limit placeholder="订单备注" />
- <span style="font-size:12px;color:#999;">提示:请勿填写有关支付、收货、发票方面的信息</span>
- </div>
- </div>
- </div>
- <!-- 发票信息 -->
- <div class="invoice">
- <div class="card-head mt_20 mb_20">
- <span class="relative">发票信息<span class="inv-tips"><Icon type="ios-alert-outline" />开企业抬头发票须填写纳税人识别号,以免影响报销</span></span>
- </div>
- <div class="inovice-content">
- <span>{{invoiceData.receiptTitle}}</span>
- <span>{{invoiceData.receiptContent}}</span>
- <span @click="editInvoice">编辑</span>
- </div>
- </div>
- <!-- 优惠券 -->
- <div class="invoice">
- <div class="card-head mt_20 mb_20">
- <span class="relative">优惠券</span>
- </div>
- <div v-if="couponList.length === 0">
- 无可用优惠券
- </div>
- <ul v-else class="coupon-list">
- <li v-for="(item, index) in couponList" class="coupon-item" :key="index">
- <div class="c-left">
- <div>
- <span v-if="item.couponType === 'PRICE'" class="fontsize_12 global_color">¥<span class="price">{{item.price | unitPrice}}</span></span>
- <span v-if="item.couponType === 'DISCOUNT'" class="fontsize_12 global_color"><span class="price">{{item.couponDiscount}}</span>折</span>
- <span class="describe">满{{item.consumeThreshold}}元可用</span>
- </div>
- <p>使用范围:{{useScope(item.scopeType)}}</p>
- <p>有效期:{{item.endTime}}</p>
- </div>
- <b></b>
- <a class="c-right" @click="useCoupon(item.id)">立即使用</a>
- <i class="circle-top"></i>
- <i class="circle-bottom"></i>
- </li>
- </ul>
- </div>
- <!-- 其他信息 -->
- <div class="other" v-if="$route.query.way === 'POINT'">
- <div class="card-head mt_20 mb_20">
- <span>其他信息</span>
- </div>
- <div>
- <div>
- <span>使用积分:</span><Input type="text" style="width:100px;" v-model.number="otherMsgForm.point" placeholder="请输入使用积分" /> <span style="color:#999;">您当前的可用积分为 {{otherMsgForm.totalPoint}} ,本订单最多可以使用{{otherMsgForm.availablePoint}}</span>
- </div>
- </div>
- </div>
- <!-- 订单价格 -->
- <div class="order-price">
- <div>
- <span>{{totalNum}}件商品,总商品金额:</span><span>{{priceDetailDTO.goodsPrice | unitPrice('¥')}}</span>
- </div>
- <div>
- <span>运费:</span><span>{{ priceDetailDTO.freightPrice | unitPrice('¥')}}</span>
- </div>
- <div>
- <span>优惠金额:</span><span>-{{ priceDetailDTO.discountPrice + priceDetailDTO.couponPrice + priceDetailDTO.updatePrice | unitPrice('¥')}}</span>
- </div>
- <div>
- <span>应付金额:</span><span class='actrual-price'>{{priceDetailDTO.billPrice | unitPrice('¥')}}</span>
- </div>
- </div>
- </div>
- <!-- 底部支付栏 -->
- <div class="order-footer width_1200">
- <div class="pay ml_20" @click="pay">提交订单</div>
- <div class="pay-address" v-if="addressList.length">配送至:{{ selectedAddress.consigneeAddressPath | unitAddress }} {{selectedAddress.detail}} 收货人:{{selectedAddress.name}} {{selectedAddress.mobile}}</div>
- </div>
- <BaseFooter></BaseFooter>
- <!-- 添加发票模态框 -->
- <invoice-modal ref="invModal" @change="getInvMsg" />
- <!-- 选择地址模态框 -->
- <address-manage ref="address" :id="addrId" @change="addrChange"></address-manage>
- </div>
- </template>
- <script>
- import invoiceModal from '@/components/invoiceModal';
- import addressManage from '@/components/addressManage';
- import {memberAddress, delMemberAddress} from '@/api/address';
- import {cartGoodsPay, createTrade, selectAddr, shippingMethod, receiptSelect, selectCoupon, couponNum} from '@/api/cart';
- import { canUseCouponList } from '@/api/member.js';
- import {getLogo} from '@/api/common.js'
- export default {
- name: 'Pay',
- components: { invoiceModal, addressManage },
- data () {
- return {
- stepIndex: 1, // 顶部步骤条状态
- invoiceAvailable: false, // 发票编辑按钮
- showEditBtn: '', // 鼠标移入显示编辑按钮
- orderMark: '', // 订单备注
- invoiceData: { // 发票数据
- receiptTitle: '个人',
- receiptContent: '不开发票'
- },
- otherMsgForm: { // 其他信息模块数据
- point: 0,
- availablePoint: 10,
- totalPoint: 100,
- noGoods: 0
- },
- deliveryList: [ // 物流
- // {value: 'SELF_PICK_UP', label: '自提'},
- {value: 'LOGISTICS', label: '物流'}
- // {value: 'LOCAL_TOWN_DELIVERY', label: '同城配送'}
- ],
- addressList: [], // 地址列表
- selectedAddress: {}, // 所选地址
- goodsList: [], // 商品列表
- priceDetailDTO: {}, // 商品价格
- totalNum: 0, // 购买数量
- addrId: '', // 编辑地址传入的id
- moreAddr: false, // 更多地址
- canUseCouponNum: 0, // 可用优惠券数量
- couponList: [], // 可用优惠券列表
- logoImg: '' // 平台logo
- };
- },
- mounted () {
- this.init();
- if (!this.Cookies.getItem('logo')) {
- getLogo().then(res => {
- if (res.success) {
- let logoObj = JSON.parse(res.result.settingValue)
- this.Cookies.setItem('logo', logoObj.buyerSideLogo)
- }
- })
- } else {
- this.logoImg = this.Cookies.getItem('logo')
- }
- },
- methods: {
- init () {
- this.getGoodsDetail();
- },
- goAddressManage () { // 跳转地址管理页面
- this.$router.push('/home/MyAddress');
- },
- getAddress () { // 获取收货地址列表
- memberAddress().then(res => {
- if (res.success) {
- this.addressList = res.result.records;
- this.addressList.forEach((e, index) => {
- if (e.id === this.selectedAddress.id && index > 2) {
- this.moreAddr = true
- }
- });
- }
- });
- },
- getGoodsDetail () { // 订单商品详情
- this.$Spin.show();
- cartGoodsPay({way: this.$route.query.way}).then(res => {
- this.$Spin.hide();
- if (res.success) {
- this.goodsList = res.result.cartList;
- this.priceDetailDTO = res.result.priceDetailDTO;
- this.skuList = res.result.skuList;
- let notSupArea = res.result.notSupportFreight
- if (notSupArea) {
- let content = [];
- let title = ''
- notSupArea.forEach(e => {
- title = e.errorMessage
- content.push(e.goodsSku.goodsName)
- })
- this.$Modal.warning({
- title: '以下商品超出配送区域' || title,
- content: content.toString()
- })
- }
- if (res.result.memberAddress) {
- this.selectedAddress = res.result.memberAddress
- }
- this.getAddress()
- this.totalNum = 0;
- for (let i = 0; i < this.skuList.length; i++) {
- this.totalNum += this.skuList[i].num;
- }
- this.getCouponNum()
- }
- }).catch(() => { this.$Spin.hide() });
- },
- getCouponNum () { // 获取可用优惠券数量
- couponNum({way: this.$route.query.way}).then(res => {
- this.canUseCouponNum = res.result
- if (res.result) {
- let storeArr = []
- let skuArr = []
- this.goodsList.forEach(e => {
- storeArr.push(e.storeId)
- e.skuList.forEach(i => {
- skuArr.push(i.goodsSku.id)
- })
- })
- let params = {
- pageNumber: 1,
- pageSize: 100,
- memberCouponStatus: 'NEW',
- scopeId: skuArr.toString(),
- storeId: storeArr.toString(),
- totalPrice: this.priceDetailDTO.goodsPrice
- }
- canUseCouponList(params).then(res => {
- if (res.success) this.couponList = res.result.records
- })
- }
- })
- },
- selectAddress (item) { // 选择地址
- let params = {
- way: this.$route.query.way,
- shippingAddressId: item.id
- };
- selectAddr(params).then(res => {
- if (res.success) {
- this.$Message.success('选择收货地址成功');
- this.selectedAddress = item;
- this.getGoodsDetail();
- }
- });
- },
- editAddress (id) { // 编辑地址
- this.addrId = id;
- this.$refs.address.show();
- },
- addrChange (item) { // 添加,编辑地址回显
- this.getAddress();
- },
- delAddress (item) {
- // 删除地址
- this.$Modal.confirm({
- title: '提示',
- content: '你确定删除这个收货地址',
- onOk: () => {
- delMemberAddress(item.id).then((res) => {
- if (res.success) {
- this.$Message.success('删除成功');
- this.getAddress();
- }
- });
- },
- onCancel: () => {}
- });
- },
- goGoodsDetail (skuId, goodsId) { // 跳转商品详情
- let routeUrl = this.$router.resolve({
- path: '/goodsDetail',
- query: { skuId, goodsId }
- });
- window.open(routeUrl.href, '_blank');
- },
- // 跳转店铺首页
- goShopPage (id) {
- let routeUrl = this.$router.resolve({
- path: '/Merchant',
- query: {id: id}
- });
- window.open(routeUrl.href, '_blank');
- },
- selectDelivery (delivery) { // 选择配送方式
- let params = {
- way: this.$route.query.way,
- shippingMethod: delivery.value
- };
- shippingMethod(params).then(res => {
- });
- },
- useCoupon (id) { // 使用优惠券
- let params = {
- way: this.$route.query.way,
- memberCouponId: id,
- used: true
- }
- selectCoupon(params).then(res => {
- if (res.success) {
- this.init()
- }
- })
- },
- editInvoice () { // 编辑发票信息
- this.$refs.invModal.invoiceAvailable = true;
- },
- getInvMsg (item) { // 获取发票信息
- console.log(item);
- this.invoiceData = item;
- this.selectReceipt(item.id)
- },
- selectReceipt (id) { // 选择发票
- let params = {
- way: this.$route.query.way,
- receiptId: id
- }
- receiptSelect(params).then(res => {
- })
- },
- pay () { // 结算
- const params = {
- client: 'PC',
- remark: [],
- way: this.$route.query.way
- };
- this.goodsList.forEach(e => {
- if (e.remark) {
- params.remark.push({
- remark: e.remark,
- storeId: e.storeId
- })
- }
- })
- if (!params.remark.length) delete params.remark;
- this.$Spin.show();
- createTrade(params).then(res => {
- this.$Spin.hide();
- if (res.success) {
- this.$router.push({path: '/payment', query: {orderType: 'TRADE', sn: res.result.sn}});
- }
- }).catch(() => {
- this.$Spin.hide()
- });
- },
- useScope (type) {
- let goods = '全部商品'
- switch (type) {
- case 'ALL':
- goods = '全部商品'
- break;
- case 'PORTION_GOODS':
- goods = '部分商品'
- break;
- case 'PORTION_GOODS_CATEGORY':
- goods = '部分分类商品'
- break;
- }
- return `${goods}可用`
- }
- }
- };
- </script>
- <style scoped lang="scss">
- @import '../../assets/styles/coupon.scss';
- /** logo start */
- .logo {
- height: 40px;
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin: 20px auto 0;
- div:nth-child(1){
- display: flex;
- justify-content: space-between;
- align-items: center;
- img{
- width: 150px;
- height:auto;
- cursor: pointer;
- }
- div:nth-child(2){
- width: 200px;
- color: #999;
- font-size: 16px;
- margin: 0 20px;
- span{
- color: $theme_color;
- }
- }
- }
- }
- .cart-steps{
- height: 30px;
- display: flex;
- align-items: center;
- span{
- @include content_color($light_content_color);
- height: 30px;
- text-align: center;
- line-height: 30px;
- display: inline-block;
- padding: 0 15px;
- }
- .ivu-icon{
- @include content_color($light_content_color);
- font-size: 20px;
- margin:0 15px;
- }
- .active{
- border-radius: 50px;
- background-color:#ff8f23;
- color: #fff;
- }
- .active-arrow{
- color: #ff8f23;
- }
- }
- /** logo end */
- /** content start */
- .content {
- margin: 20px auto;
- background-color: #fff;
- min-height: 200px;
- padding: 15px 25px;
- }
- /** 地址管理 */
- .address-manage{
- display: flex;
- flex-wrap: wrap;
- >div {
- border:1px dotted #949494;
- width: 265px;
- height: 120px;
- margin:20px 20px 0 0;
- padding: 10px;
- cursor: pointer;
- color: #999;
- }
- .add-address{
- display: flex;
- align-items: center;
- justify-content: center;
- flex-direction: column;
- .ivu-icon{
- font-size: 24px;
- }
- }
- .address-item{
- position: relative;
- font-size: 12px;
- >div:nth-child(1){
- margin-bottom: 10px;
- span{
- margin-right: 10px;
- }
- >span:nth-child(1){
- color: #000000;
- font-size: 14px;
- }
- }
- .edit-btn{
- font-size: 12px;
- position: absolute;
- top: 15px;
- right: 20px;
- color: $theme_color;
- span:hover{
- border-bottom: 1px solid $theme_color;
- }
- }
- .corner-icon{
- position: absolute;
- right: -1px;
- bottom: -1px;
- div{
- width: 0;
- border-top: 20px solid transparent;
- border-right: 20px solid $theme_color;
- }
- .ivu-icon{
- font-size: 12px;
- position: absolute;
- bottom: 0;
- right: 1px;
- transform: rotate(-15deg);
- color: #fff;
- }
- }
- }
- .border-red{
- border-color: $theme_color;
- }
- }
- /** 购买商品列表 start */
- .shop-name{
- display: flex;
- justify-content: space-between;
- >span:nth-child(1){
- font-weight: bold;
- .ivu-icon{
- color: #ff8f23;
- &:hover {color: $theme_color;}
- }
- }
- >span:nth-child(2){
- color: #999;
- position: relative;
- display: flex;
- width: 200px;
- }
- .delivery-list{
- position: absolute;
- right: 0;
- top: 20px;
- background-color: #f3fafe;
- box-shadow: 0px 0px 5px #b9b2b2;
- display: flex;
- flex-wrap: wrap;
- width: 200px;
- min-height: 100px;
- padding: 10px;
- li{
- width: 90px;
- height: 30px;
- text-align: center;
- &:hover{
- cursor: pointer;
- }
- }
- }
- }
- .goods-list{
- background-color: #f8f8f8;
- margin: 10px 0 20px 0;
- .goods-item{
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 20px 0;
- margin: 0 20px;
- border-bottom: 1px dotted #999;
- &:last-child{border:none;}
- img{
- width: 48px;
- height: 48px;
- }
- >span{
- text-align: center;
- width: 100px;
- }
- >span:nth-child(1) {
- font-size: 12px;
- flex: 1;
- text-align: left;
- }
- >span:last-child{
- color: $theme_color;
- font-weight: bold;
- }
- .goods-price{
- font-size: 16px;
- }
- }
- }
- .order-mark{
- width: 500px;
- }
- /** 购买商品列表 end */
- /** 发票信息 start */
- .invoice{
- .inv-tips{
- position: absolute;
- border: 1px solid #ddd;
- width: 310px;
- padding: 3px;
- margin: 0 0 0 10px;
- font-size: 12px!important;
- box-shadow: 0 0 3px rgba(0,0,0,.15);
- &::before{
- content: '';
- display: inline-block;
- width: 12px;
- height: 17px;
- background:url(../../assets/images/arrow-left.png) 0 0 no-repeat;
- background-color:#fff;
- position: absolute;
- left: -9px;
- }
- .ivu-icon{
- color: #ff8f23;
- margin-right: 3px;
- font-size: 16px;
- font-weight: bold;
- }
- }
- .inovice-content{
- >span {
- margin-right: 10px;
- }
- >span:last-child{
- color: $theme_color;
- cursor: pointer;
- &:hover{border-bottom: 1px solid $theme_color;}
- }
- }
- }
- /** 发票信息 end */
- /** 订单价格 */
- .order-price{
- text-align: right;
- margin-top: 30px;
- font-size: 16px;
- color: #999;
- >div>span:nth-child(2){
- width: 130px;
- text-align: right;
- display: inline-block;
- margin-top: 10px;
- }
- .actrual-price{
- color: $theme_color;
- font-weight: bold;
- font-size: 20px;
- }
- }
- /** content end */
- /** 底部支付栏 */
- .order-footer {
- height: 50px;
- @include background_color($light_white_background_color);
- @include title_color($title_color);
- display: flex;
- align-items: center;
- flex-direction: row-reverse;
- border-top: 1px solid #ddd;
- margin: 10px auto;
- div{
- text-align: center;
- }
- position: sticky;
- bottom: 0;
- .pay {
- background-color: $theme_color;
- width: 150px;
- font-size: 20px;
- color: #fff;
- height: 100%;
- line-height: 50px;
- cursor: pointer;
- }
- }
- /** 公共表头 */
- .card-head {
- display: flex;
- align-items: center;
- justify-content: space-between;
- border-bottom: 1px solid #dddddd;
- height: 40px;
- span:nth-child(1){
- font-size: 18px;
- }
- span:nth-child(2){
- font-size: 12px;
- color: #438cde;
- cursor: pointer;
- &:hover{
- color: $theme_color;
- }
- }
- }
- .ivu-divider {
- background: $theme_color;
- height: 2px;
- }
- .pay-address{font-size: 12px;}
- .more-addr{
- cursor: pointer;
- margin-top: 10px;
- display: inline-block;
- }
- .coupon-item {
- width: 260px;
- height: 125px;
- margin-right: 10px;
- margin-bottom: 10px;
- .c-right{
- width: 30px;
- padding: 10px 7px;
- }
- b{
- background: url('../../assets/images/small-circle.png') top left repeat-y;
- right: 28px;
- }
- .circle-top,.circle-bottom{
- right: 22px;
- }
- }
- </style>
|