<template> <view class="invoice"> <view class="invoice-goods" v-if="orderDetail"> <view class="b" v-if="orderDetail"> <view class="r">订单编号:{{orderDetail.order_no}}<text @click="handleCopy(orderDetail.order_no)">复制</text> </view> <view class="r">开票金额:{{orderDetail.pay_price}}</view> </view> </view> <view class="invoice-info"> <view class="b"> <view class="item"> <view class="l">发票类型:</view> <view class="r"> <picker :value="arrayIndex" :range="array" @change="bindPickerChange"> <view class="lx" style="color: #888;" v-if="!arrayName">请选择发票类型</view> <view class="lx" v-else>{{arrayName}}</view> </picker> </view> </view> <view class="item"> <view class="l">发票类型:</view> <view class="r"> <view class="li" :class="tabIndex == 1?'li-on':''" @click="tabItem(1)">个人</view> <view class="li" :class="tabIndex == 2?'li-on':''" @click="tabItem(2)">单位</view> </view> </view> <view class="item"> <view class="l">发票抬头:</view> <view class="r"> <input type="text" disabled v-model="obj.header" placeholder="单位名称" /> <view class="tt" @click="bindPickerChange1" style="color: rgb(58, 134, 255;">选择发票抬头</view> </view> </view> <view class="item" v-if="tabIndex == 2"> <view class="l">单位税号:</view> <view class="r"> <input type="text" v-model="obj.duty_no" disabled placeholder="纳税人识别号" /> </view> </view> </view> </view> <view class="invoice-company" v-if="tabIndex == 2"> <view class="a">选填内容(开户银行、银行账号等) <text :class="toggleIndex?'on':''" @click="toggleItem()">{{toggleIndex?"收起":"展开"}}</text> </view> <view class="b" v-if="toggleIndex"> <view class="item"> <view class="l">开户银行:</view> <view class="r"> <input type="text" disabled v-model="obj.bank_name" placeholder="开户银行名称" /> </view> </view> <view class="item"> <view class="l">银行账号:</view> <view class="r"> <input type="number" disabled v-model="obj.bank_no" placeholder="银行账号" /> </view> </view> <view class="item"> <view class="l">单位地址:</view> <view class="r"> <input type="text" disabled v-model="obj.address" placeholder="单位地址" /> </view> </view> <view class="item"> <view class="l">单位电话:</view> <view class="r"> <input type="number" disabled v-model="obj.phone" placeholder="单位电话" /> </view> </view> </view> </view> <view class="invoice-fd" @click="toDetail()"> 申请发票 </view> <u-modal v-model="show" :content="content" :show-cancel-button="true" :show-title="false" confirm-color="#F55349"></u-modal> </view> </template> <script> import * as InvoiceApi from '@/api/invoice' export default { data() { return { content: "确认您的发票信息无误后再提交", show: true, toggleIndex: true, arrayIndex: 0, arrayName: '', array: ['普通增值税发票'], tabIndex: 2, orderDetail: '', obj: { header: '', gongsi: '', duty_no: '', bank_name: '', bank_no: '', address: '', phone: '', type: '', source: 2 } }; }, onLoad(op) { let app = this; this.orderDetail = uni.getStorageSync("orderInfor"); if (op.source == 1) { let detail = op.detail ? JSON.parse(op.detail) : ''; app.arrayIndex = detail.type - 1; app.arrayName = app.array[app.arrayIndex] app.tabIndex = detail.source == 0 ? 1 : 2 app.obj = detail } console.log(app.obj, this.orderDetail) }, methods: { // 获取当前订单信息 toDetail(canReset = false) { const app = this if (!app.arrayName) { uni.showToast({ title: '请选择发票类型', icon: 'none', duration: 2000 }) return } if (!app.obj.header) { uni.showToast({ title: '请选择发票抬头', icon: 'none', duration: 2000 }) return } app.isLoading = true; let parames = { order_id: app.orderDetail.order_id, invoice_id: app.obj.id } InvoiceApi.invoicingAdd(parames).then(result => { if (result.status == 200) { uni.showToast({ title: result.message, icon: 'none', duration: 2000 }) uni.navigateTo({ url: "/pages/invoice/indexset" }) } else { uni.showToast({ title: result.message, icon: 'none', duration: 2000 }) } }) // 相应全局事件订阅: 刷新上级页面数据 canReset && uni.$emit('syncRefresh', true, true) }, // 复制指定内容 handleCopy(value) { const app = this uni.setClipboardData({ data: value, success: () => app.$toast('复制成功'), fail: ({ errMsg }) => app.$toast('复制失败 ' + errMsg) }) }, tabItem(i) { this.tabIndex = i; }, toggleItem(i) { this.toggleIndex = !this.toggleIndex; this.pamres.invoiceUnit = this.toggleIndex }, bindPickerChange(e) { this.arrayIndex = e.detail.value; this.arrayName = this.array[e.detail.value] }, bindPickerChange1() { uni.navigateTo({ url: "/pages/invoice/index" }) } } } </script> <style lang="scss" scoped> page { margin-bottom: 50rpx; } .invoice { &-goods { padding: 0 20rpx 0 40rpx; overflow: hidden; background-color: #fff; padding: 30rpx; box-sizing: border-box; display: flex; align-items: center; .a { width: 145rpx; height: 135rpx; margin-right: 20rpx; image { width: 100%; height: 100%; border-radius: 10rpx; } } .b { flex: 1; overflow: hidden; .l { white-space: nowrap; text-overflow: ellipsis; font-size: 32rpx; font-family: PingFang SC, PingFang SC; font-weight: 500; color: #262626; overflow: hidden; } .r { font-size: 30rpx; font-family: PingFang SC, PingFang SC; font-weight: 400; color: #838383; display: flex; align-items: center; justify-content: space-between; margin-top: 20rpx; text { display: block; width: 104rpx; line-height: 60rpx; background: #FFFFFF; border-radius: 4rpx; text-align: center; border: 1px solid #CACACA; font-size: 28rpx; color: #555; } } } } &-info { margin-top: 20rpx; background-color: #fff; overflow: hidden; .a { display: flex; align-items: center; justify-content: space-between; padding: 20rpx 30rpx 20rpx 60rpx; box-sizing: border-box; border-bottom: 1px solid #F3F3F3; font-size: 32rpx; font-weight: 500; color: #262626; text { color: #006AFF; padding-right: 40rpx; position: relative; &::after { content: ""; width: 16rpx; height: 16rpx; border-top: 1px solid #006AFF; border-left: 1px solid #006AFF; position: absolute; right: 0; top: 14rpx; z-index: 1; transform: rotate(135deg); } } } .b { padding: 0 30rpx 0 45rpx; box-sizing: border-box; overflow: hidden; .item { padding: 30rpx 0; display: flex; align-items: center; justify-content: space-between; box-sizing: border-box; border-top: 1px solid #F3F3F3; font-size: 32rpx; font-weight: 500; color: #262626; overflow: hidden; &:first-child { border-top-color: #fff; } .l { width: 180rpx; font-size: 32rpx; font-weight: 400; color: #656565; } .r { flex: 1; display: flex; align-items: center; font-size: 32rpx; font-weight: 400; color: #262626; .li { width: 150rpx; height: 78rpx; background: #F3F3F3; border-radius: 8rpx; text-align: center; line-height: 78rpx; font-size: 32rpx; font-weight: 400; color: #262626; margin-right: 12rpx; &-on { background: #FDF4F4; background: url(/static/invoice/select-active.png) center top no-repeat; background-size: contain; } } input { flex: 1; } picker { flex: 1; .tt { width: 180rpx; position: relative; color: #4894FF; text-align: right; &::after { content: ""; width: 16rpx; height: 16rpx; border-top: 1px solid #4894FF; border-left: 1px solid #4894FF; position: absolute; right: -50rpx; top: 14rpx; z-index: 1; transform: rotate(135deg); } } .lx { width: 100%; position: relative; &::after { content: ""; width: 16rpx; height: 16rpx; border-top: 1px solid #B8B8B8; border-left: 1px solid #B8B8B8; position: absolute; right: 20rpx; top: 14rpx; z-index: 1; transform: rotate(135deg); } } } } } } } &-fd { width: 664rpx; height: 104rpx; background: #F55349; border-radius: 8rpx; text-align: center; margin: 0 auto; margin-top: 60rpx; font-size: 32rpx; font-weight: 500; color: #FFFFFF; display: flex; align-items: center; justify-content: center; } &-company { overflow: hidden; .a { padding: 35rpx 50rpx; font-size: 32rpx; font-weight: 400; display: flex; align-items: center; justify-content: space-between; color: #262626; text { width: 70rpx; color: #888888; margin-right: 30rpx; position: relative; &::after { content: ""; width: 16rpx; height: 16rpx; border-top: 1px solid #888888; border-left: 1px solid #888888; position: absolute; right: -30rpx; top: 10rpx; z-index: 1; transform: rotate(225deg); } &.on { &::after { content: ""; width: 16rpx; height: 16rpx; border-top: 1px solid #888888; border-left: 1px solid #888888; position: absolute; right: -30rpx; top: 20rpx; z-index: 1; transform: rotate(45deg); } } } } .b { padding: 0 30rpx 0 45rpx; box-sizing: border-box; background-color: #fff; overflow: hidden; .item { padding: 30rpx 0; display: flex; align-items: center; justify-content: space-between; box-sizing: border-box; border-top: 1px solid #F3F3F3; font-size: 32rpx; font-weight: 500; color: #262626; overflow: hidden; &:first-child { border-top-color: #fff; } .l { width: 180rpx; font-size: 32rpx; font-weight: 400; color: #656565; } .r { flex: 1; display: flex; align-items: center; font-size: 32rpx; font-weight: 400; color: #262626; input { flex: 1; } } } } } } </style>