1854 lines
52 KiB
Vue
1854 lines
52 KiB
Vue
<template>
|
||
<view class="content">
|
||
<view class="titletop flex-start" @click="addfourshow = !addfourshow">
|
||
<text class="titletoptext">数电票类型</text>
|
||
<view class="flex-center titletopone" style="margin-left: 16rpx">
|
||
<view>
|
||
{{ form.typename ? form.typename : '请选择' }}
|
||
</view>
|
||
<image src="https://czg-invoicing.oss-cn-beijing.aliyuncs.com/static/electric/type1.png" mode=""></image>
|
||
<!-- <u-icon name="arrow-rightward" color="#F39D52" size="14"></u-icon> -->
|
||
</view>
|
||
</view>
|
||
<view class="titletop flex-start">
|
||
<text class="titletoptext">购买方信息</text>
|
||
<view class="flex-center">
|
||
<u-checkbox-group class="titletopcheckbox">
|
||
<u-checkbox v-model="form.user_type"></u-checkbox>
|
||
</u-checkbox-group>
|
||
<text style="font-family: Source Han Sans CN, Source Han Sans CN; font-weight: 400; font-size: 28rpx; color: #666666">开票给自然人</text>
|
||
</view>
|
||
</view>
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left" style="position: relative">
|
||
<input type="text" placeholder="请输入购方名称" v-model="form.user_name" @input="onInput" />
|
||
<view class="position" v-if="subCategoryList.length != 0">
|
||
<view class="positionitem" v-for="(item, index) in subCategoryList" :key="index" @click="categorySubClick(item)">
|
||
{{ item.companyName }}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="text" v-model="form.user_duty" placeholder="请输入统一社会信用代码/纳税人识别号" />
|
||
</view>
|
||
</view>
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="text" v-model="form.c_address" placeholder="请输入购买方地址" />
|
||
</view>
|
||
</view>
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="number" v-model="form.c_phone" placeholder="请输电话" />
|
||
</view>
|
||
</view>
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="text" v-model="form.c_bank_name" placeholder="请输入购方开户行" />
|
||
</view>
|
||
</view>
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="number" v-model="form.c_bank_account" placeholder="请输入银行账号" />
|
||
</view>
|
||
</view>
|
||
<view class="titletop flex-start">
|
||
<text class="titletoptext">销售方信息</text>
|
||
<view class="flex-center" style="margin-left: 16rpx">
|
||
<u-icon name="reload" color="#7db5fe" size="14"></u-icon>
|
||
</view>
|
||
</view>
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="text" v-model="form.title" disabled style="background: #f6f6f6; height: 100%" />
|
||
</view>
|
||
</view>
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="text" v-model="form.nsrsbh" disabled style="background: #f6f6f6; height: 100%" />
|
||
</view>
|
||
</view>
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="text" v-model="form.xfdz" placeholder="请输入销售方地址" />
|
||
</view>
|
||
</view>
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="number" v-model="form.xflxdh" placeholder="请输电话" />
|
||
</view>
|
||
</view>
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="text" v-model="form.xfkhh" placeholder="请输入销售开户行" />
|
||
</view>
|
||
</view>
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="number" v-model="form.xfyhzh" placeholder="请入销售银行账号" />
|
||
</view>
|
||
</view>
|
||
<view class="titletop flex-start">
|
||
<text class="titletoptext">收票方式</text>
|
||
<!-- <view class="flex-center" style="margin-left: 16rpx;">
|
||
<u-icon name="question-circle" color="#585858" size="14" @click="clickicon">
|
||
</u-icon>
|
||
</view> -->
|
||
</view>
|
||
<!-- <view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="text" v-model="form.mobile" placeholder="请输入手机号" />
|
||
</view>
|
||
</view> -->
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="text" v-model="form.email" placeholder="请输入邮箱地址" />
|
||
</view>
|
||
</view>
|
||
<view class="titletop flex-start">
|
||
<text class="titletoptext">开票商品({{ `${form.is_tax ? '含税' : '不含税'}` }})</text>
|
||
<view class="flex-start" style="margin-right: 10rpx">
|
||
<text style="font-family: Source Han Sans CN, Source Han Sans CN; font-weight: 400; font-size: 28rpx; color: #333333; margin-right: 16rpx"></text>
|
||
<u-switch v-model="form.is_tax" @change="changetexatx" size="18"></u-switch>
|
||
</view>
|
||
</view>
|
||
<view class="includingtax">
|
||
<view class="includingtaxbetween flex-between">
|
||
<text>商品</text>
|
||
<text>单价</text>
|
||
<text>数量</text>
|
||
<text>金额</text>
|
||
<text>税率</text>
|
||
</view>
|
||
<view class="includingtaxitem flex-between" v-for="(item, index) in form.mxListes" :key="index" @click.stop="clickmxList(item, index)">
|
||
<text :style="item.fphxz == 1 ? 'color: red;' : ''">{{ item.spmc }}</text>
|
||
<text>{{ item.dj }}</text>
|
||
<text>{{ item.spsl }}</text>
|
||
<text :style="item.fphxz == 1 ? 'color: red;' : ''">{{ item.fphxz == 1 ? '-' : '' }}{{ item.je }}</text>
|
||
<text :style="item.fphxz == 1 ? 'color: red;' : ''">{{ item.sl }}%</text>
|
||
<text v-if="item.fphxz != 2" @click.stop="clickdelete(item, index)" class="absolutetext">删除</text>
|
||
</view>
|
||
|
||
<view class="includingtaxbox flex-between">
|
||
<view class="flex-start">
|
||
<text style="color: #d6444c">金额:</text>
|
||
<text>¥{{ amountes.toFixed(2) }}</text>
|
||
</view>
|
||
<view>
|
||
<text style="color: #d6444c">税额:</text>
|
||
<text>¥{{ taxamountes.toFixed(2) }}</text>
|
||
</view>
|
||
</view>
|
||
<view class="includingtaxadd" @click="invoicegoodslist()">+新增商品</view>
|
||
</view>
|
||
<view class="titletop flex-start">
|
||
<text class="titletoptext">备注信息</text>
|
||
</view>
|
||
<view class="listinput flex-between">
|
||
<view class="listinput_left">
|
||
<input type="text" v-model="form.notes" placeholder="请输入备注" />
|
||
</view>
|
||
</view>
|
||
<view class="people flex-center">
|
||
<view class="peopleitem">
|
||
<view class="flex-colum">
|
||
<text>收款人</text>
|
||
<input type="text" v-model="form.skr" placeholder="请输入" />
|
||
</view>
|
||
</view>
|
||
<view class="peopleitem">
|
||
<view class="flex-colum">
|
||
<text>复核人</text>
|
||
<input type="text" v-model="form.fhr" placeholder="请输入" />
|
||
</view>
|
||
</view>
|
||
<view class="peopleitem">
|
||
<view class="flex-colum">
|
||
<text>开票人</text>
|
||
<input type="text" v-model="form.dlzhname" disabled style="background: #f6f6f6" placeholder="请输入" />
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="Issued" @click="clickIssued">开具</view>
|
||
<u-popup :show="addshow" @close="addshow = false" mode="center" :round="16">
|
||
<view class="popupaddclass">
|
||
<view class="addshowtop">
|
||
<text @click="addviewshow = !addviewshow" :class="addviewshow ? 'select' : ''">选择商品</text>
|
||
<text @click="addviewshow = !addviewshow" :class="addviewshow ? '' : 'select'">新增商品</text>
|
||
</view>
|
||
<view class="addshowbox" v-if="addviewshow">
|
||
<view class="addshowinput flex-start">
|
||
<u-icon name="search" color="#666666" size="20"></u-icon>
|
||
<input type="text" placeholder="请输入商品名称" v-model="invoicegoodslikeanme" @input="$u.throttle(invoicegoodslist, 500)" />
|
||
</view>
|
||
<view class="boxaddshowitem">
|
||
<u-checkbox-group v-model="checkboxtianjia" placement="column">
|
||
<view class="addshowitem flex-start" v-for="(item, index) in invoicegoodslistdata" :key="index">
|
||
<u-checkbox :key="index" :name="index"></u-checkbox>
|
||
<view class="addshowitembox flex-colum-start">
|
||
<text class="addshowitemboxtext">*{{ item.abbreviation }}*{{ item.title }}</text>
|
||
<view class="flex-start">
|
||
<text>商品税率:{{ item.tax_rate }}</text>
|
||
<text>商品单价:{{ item.unit_price }}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</u-checkbox-group>
|
||
</view>
|
||
<view class="tianjia" @click="changetianjia">添加</view>
|
||
</view>
|
||
<view class="addshowbox" v-else>
|
||
<view class="addshowboxinput flex-colum-start">
|
||
<text class="addshowboxinputtext">*商品编码</text>
|
||
<view class="addshowboxinput_inp">
|
||
<input type="text" placeholder="请选择" v-model="addform.spbm" disabled style="background: #f6f6f6" />
|
||
<view class="absolute" @click="clickspbm">选择商品名称</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="addshowboxinput flex-colum-start">
|
||
<text class="addshowboxinputtext">编码简称</text>
|
||
<view class="addshowboxinput_inp">
|
||
<input type="text" placeholder="请选择" v-model="addform.abbreviation" disabled style="background: #f6f6f6" />
|
||
</view>
|
||
</view>
|
||
<view class="addshowboxinput flex-colum-start">
|
||
<text class="addshowboxinputtext">*商品名称</text>
|
||
<view class="addshowboxinput_inp">
|
||
<input type="text" placeholder="请输入" v-model="addform.title" />
|
||
<view class="absolute" @click="titlecoding">赋码</view>
|
||
</view>
|
||
</view>
|
||
<view class="addshowboxinput flex-colum-start">
|
||
<text class="addshowboxinputtext">规格型号</text>
|
||
<view class="addshowboxinput_inp">
|
||
<input type="text" placeholder="请输入" v-model="addform.spec" />
|
||
</view>
|
||
</view>
|
||
<view class="addshowboxinput flex-colum-start">
|
||
<text class="addshowboxinputtext">计量单位</text>
|
||
<view class="addshowboxinput_inp">
|
||
<input type="text" placeholder="请输入" v-model="addform.unit" />
|
||
</view>
|
||
</view>
|
||
<view class="addshowboxinput flex-colum-start">
|
||
<text class="addshowboxinputtext">单价(元)</text>
|
||
<view class="addshowboxinput_inp flex-between">
|
||
<input style="width: auto" type="text" placeholder="请输入" v-model="addform.unit_price" />
|
||
<!-- <view class="flex-start" style="margin-right: 10rpx;">
|
||
<text
|
||
style="font-family: Source Han Sans CN, Source Han Sans CN;font-weight: 400;font-size: 28rpx;color: #333333;margin-right: 16rpx;">含税</text>
|
||
<u-switch v-model="addform.priceswitch" size="18"></u-switch>
|
||
</view> -->
|
||
</view>
|
||
</view>
|
||
<view class="addshowboxinput flex-colum-start" @click="selectshowlslbs = !selectshowlslbs">
|
||
<text class="addshowboxinputtext">免税类型</text>
|
||
<view class="addshowboxinput_inp flex-between">
|
||
<view class="listinput_leftrelative">
|
||
<text class="leftrelativetext">{{ addform.lslbsname }}</text>
|
||
<u-icon style="padding-right: 16rpx" :name="selectshowlslbs ? 'arrow-up' : 'arrow-down'" color="#999999" size="14"></u-icon>
|
||
<view class="listinput_leftabsolute" v-if="selectshowlslbs">
|
||
<view
|
||
v-for="(item, index) in lslbslist.lslbs"
|
||
:key="index"
|
||
:class="addform.lslbs == item.id ? 'class' : ''"
|
||
@click="taxexempttype(item, index)"
|
||
>
|
||
{{ item.name }}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="addshowboxinput flex-colum-start" @click="taxrateselectionshow = !taxrateselectionshow">
|
||
<text class="addshowboxinputtext">*税率</text>
|
||
<view class="addshowboxinput_inp flex-between">
|
||
<view class="listinput_leftrelative">
|
||
<text class="leftrelativetext">{{ addform.tax_ratename }}</text>
|
||
<u-icon style="padding-right: 16rpx" :name="taxrateselectionshow ? 'arrow-up' : 'arrow-down'" color="#999999" size="14"></u-icon>
|
||
<view class="listinput_leftabsolute" v-if="taxrateselectionshow">
|
||
<view
|
||
v-for="(item, index) in lslbslist.taxrateselection"
|
||
:key="index"
|
||
:class="addform.tax_rate == item.id ? 'class' : ''"
|
||
@click="taxrateselectiontype(item, index)"
|
||
>
|
||
{{ item.name }}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="addshowboxinput flex-colum-start" @click="zzstsglshow = !zzstsglshow">
|
||
<text class="addshowboxinputtext">优惠政策类型</text>
|
||
<view class="addshowboxinput_inp flex-between">
|
||
<view class="listinput_leftrelative">
|
||
<text class="leftrelativetext">{{ addform.zzstsgl }}</text>
|
||
<u-icon style="padding-right: 16rpx" :name="zzstsglshow ? 'arrow-up' : 'arrow-down'" color="#999999" size="14"></u-icon>
|
||
<view class="listinput_leftabsolute" v-if="zzstsglshow">
|
||
<view
|
||
v-for="(item, index) in lslbslist.zzstsgl"
|
||
:key="index"
|
||
:class="addform.zzstsgl == item.id ? 'class' : ''"
|
||
@click="zzstsgltype(item, index)"
|
||
>
|
||
{{ item.name }}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="flex-start" style="margin-top: 48rpx">
|
||
<u-checkbox-group>
|
||
<u-checkbox @change="addform.addcheckbox = !addform.addcheckbox" v-model="addform.addcheckbox"></u-checkbox>
|
||
</u-checkbox-group>
|
||
<text style="font-family: Source Han Sans CN, Source Han Sans CN; font-weight: 400; font-size: 28rpx; color: #666666">保存至我的“开票商品”</text>
|
||
</view>
|
||
<view
|
||
style="
|
||
margin: 32rpx 0 32rpx auto;
|
||
width: 112rpx;
|
||
height: 56rpx;
|
||
background: #318afe;
|
||
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #ffffff;
|
||
line-height: 56rpx;
|
||
text-align: center;
|
||
"
|
||
@click="addinvoicegoods"
|
||
>
|
||
添加
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</u-popup>
|
||
|
||
<u-popup :show="addtowshow" @close="addtowshow = false" mode="bottom" :round="16">
|
||
<view class="addtowshowclass">
|
||
<view class="addtowshowclasstop">
|
||
<!-- <text class="addtowshowclassabsolute">x</text> -->
|
||
商品编码(税局)选择
|
||
<u-icon
|
||
class="addtowshowclassabsolutelet"
|
||
v-if="this.selectencodinglists.length > 1"
|
||
@click="selectencodingicon"
|
||
name="arrow-left"
|
||
color="#999999"
|
||
size="20"
|
||
></u-icon>
|
||
<u-icon @click="addtowshow = false" class="addtowshowclassabsolute" name="close" color="#999999" size="20"></u-icon>
|
||
</view>
|
||
<view v-if="selectencodingitem.tax_rate">
|
||
<view class="addtowshowpositionitem flex-between">
|
||
<view>商品编码</view>
|
||
<view style="color: #999999">
|
||
{{ selectencodingitem.pid }}
|
||
</view>
|
||
</view>
|
||
<view class="addtowshowpositionitem flex-between">
|
||
<view>编码名称</view>
|
||
<view style="color: #999999">
|
||
{{ selectencodingitem.catalog_name }}
|
||
</view>
|
||
</view>
|
||
<view class="addtowshowpositionitem flex-between">
|
||
<view>编码简称</view>
|
||
<view style="color: #999999">
|
||
{{ selectencodingitem.catalog_name_short }}
|
||
</view>
|
||
</view>
|
||
<view class="addtowshowpositionitem flex-between">
|
||
<view>商品税率</view>
|
||
<view style="color: #999999">
|
||
{{ selectencodingitem.tax_rate }}
|
||
</view>
|
||
</view>
|
||
<view class="selecconfirm" @click="selecconfirm">确认选择</view>
|
||
</view>
|
||
<view v-else class="addtowshowpositionitem flex-between" v-for="(item, index) in selectencodinglist" :key="index" @click="selectencoding(item, index)">
|
||
<view>
|
||
{{ item.catalog_name }}
|
||
</view>
|
||
<view class="flex-start">
|
||
{{ item.tax_rate ? item.tax_rate : '' }}
|
||
<u-icon name="arrow-right" color="#999999" size="18"></u-icon>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</u-popup>
|
||
<u-popup :show="addthereshow" @close="addthereshow = false" mode="center" :round="16">
|
||
<view class="addthereshowclass">
|
||
<view class="addthereshowclasstop flex-between">
|
||
<text>开票商品信息修改</text>
|
||
<u-icon name="close" color="#999999" size="20" @click="addthereshow = false"></u-icon>
|
||
</view>
|
||
<view class="addthereshowclassbox">
|
||
<view class="addthereshowclassboxitem flex-between">
|
||
<view class="addthereshowclassboxitemone">商品简称</view>
|
||
<view class="addthereshowclassboxitemtow">
|
||
<input type="text" style="background: rgb(246, 246, 246)" placeholder="请输入商品简称" v-model="mxListform.abbreviation" disabled />
|
||
</view>
|
||
</view>
|
||
<view class="addthereshowclassboxitem flex-between">
|
||
<view class="addthereshowclassboxitemone">商品名称</view>
|
||
<view class="addthereshowclassboxitemtow">
|
||
<input type="text" placeholder="请输入商品名称" v-model="mxListform.spmc" />
|
||
</view>
|
||
</view>
|
||
<view class="addthereshowclassboxitem flex-between">
|
||
<view class="addthereshowclassboxitemone">含税单价</view>
|
||
<view class="addthereshowclassboxitemtow">
|
||
<input type="text" placeholder="请输入含税单价" v-model="mxListform.dj" @input="clickmxListformdj" />
|
||
</view>
|
||
</view>
|
||
<view class="addthereshowclassboxitem flex-between">
|
||
<view class="addthereshowclassboxitemone">商品数量</view>
|
||
<view class="addthereshowclassboxitemtow">
|
||
<input type="number" placeholder="请输入商品数量" v-model="mxListform.spsl" @input="handleInputChange" />
|
||
</view>
|
||
</view>
|
||
<view class="addthereshowclassboxitem flex-between">
|
||
<view class="addthereshowclassboxitemone">商品规格</view>
|
||
<view class="addthereshowclassboxitemtow">
|
||
<input type="text" placeholder="请输入商品规格" v-model="mxListform.ggxh" />
|
||
</view>
|
||
</view>
|
||
<view class="addthereshowclassboxitem flex-between">
|
||
<view class="addthereshowclassboxitemone">计量单位</view>
|
||
<view class="addthereshowclassboxitemtow">
|
||
<input type="text" placeholder="请输入计量单位" v-model="mxListform.dw" />
|
||
</view>
|
||
</view>
|
||
<view class="addthereshowclassboxitem flex-between">
|
||
<view class="addthereshowclassboxitemone">商品税率</view>
|
||
<view class="addthereshowclassboxitemtow" @click="mxListformslshow = !mxListformslshow">
|
||
<view class="listinput_leftrelative">
|
||
<text class="leftrelativetext">{{ mxListform.slname }}</text>
|
||
<u-icon style="padding-right: 16rpx" :name="mxListformslshow ? 'arrow-up' : 'arrow-down'" color="#999999" size="14"></u-icon>
|
||
<view class="listinput_leftabsolute" v-if="mxListformslshow">
|
||
<view
|
||
v-for="(item, index) in lslbslist.taxrateselection"
|
||
:key="index"
|
||
:class="mxListform.sl == item.id ? 'class' : ''"
|
||
@click="mxListformslshowtype(item, index)"
|
||
>
|
||
{{ item.name }}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="addthereshowclassboxitem flex-between">
|
||
<view class="addthereshowclassboxitemone">商品折扣</view>
|
||
<view class="addthereshowclassboxitemtow flex-start">
|
||
<input type="number" placeholder="请输入商品折扣" v-model.number="mxListform.fphxzshow" />
|
||
%
|
||
</view>
|
||
</view>
|
||
<view class="addthereshowclassboxitem flex-between">
|
||
<view class="addthereshowclassboxitemone">含税金额</view>
|
||
<view class="addthereshowclassboxitemtow">
|
||
<input type="text" placeholder="请输入含税金额" v-model="mxListform.je" @input="inputmxListformje" />
|
||
</view>
|
||
</view>
|
||
<view class="addthereshowclassboxitem flex-between">
|
||
<view class="addthereshowclassboxitemone">合计税额</view>
|
||
<view class="addthereshowclassboxitemtow">
|
||
<input style="background: rgb(246, 246, 246)" type="text" placeholder="请输入合计税额" v-model="mxListform.se" disabled />
|
||
</view>
|
||
</view>
|
||
<view class="addtheredetermine" @click="addthereshowclick">确定</view>
|
||
</view>
|
||
</view>
|
||
</u-popup>
|
||
<u-popup :show="addfourshow" @close="addfourshow = false" mode="right" :round="16">
|
||
<view class="addfourclass">
|
||
<view class="addfourclassclasstop flex-between">
|
||
<text>开票类型选择</text>
|
||
<u-icon name="close" color="#999999" size="20" @click="addfourshow = false"></u-icon>
|
||
</view>
|
||
<view class="addfourclassclassbox">
|
||
<view class="addfourclassclassboxitem">*发票类型</view>
|
||
<view class="addfourclassclassboxitemone flex-start" @click="addfourshowupicker = !addfourshowupicker">
|
||
<view style="padding: 0 16rpx">{{ form.typename }}</view>
|
||
<u-icon class="icon" name="arrow-right" color="#999999" size="18"></u-icon>
|
||
</view>
|
||
<view class="addfourclassclassboxitemtow flex-start">
|
||
<u-switch v-model="defaultvalue" size="20"></u-switch>
|
||
<text style="margin-left: 10rpx">设置为默认发票类型</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</u-popup>
|
||
<u-picker :show="addfourshowupicker" :columns="columns" keyName="label" @confirm="addfourupickerconfirm" @cancel="addfourshowupicker = false"></u-picker>
|
||
<button style="visibility: hidden" @click="cwWQLgyqWKIcOoLRGnJD"></button>
|
||
<button style="visibility: hidden" @click="dLrVqgyqfuxJxVkLuANy"></button>
|
||
<button style="visibility: hidden" @click="fgudsDlTgyqWZCSNCrFe"></button>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
data() {
|
||
return {
|
||
defaultvalue: false,
|
||
checkboxtianjia: [],
|
||
addviewshow: true, //切换选择和增加商品
|
||
addtowshow: false, //行业搜索显示
|
||
addthereshow: false,
|
||
addfourshow: false,
|
||
addfourshowupicker: false,
|
||
addshow: false, //新增点击切换
|
||
selectshowlslbs: false, //免税类型
|
||
taxrateselectionshow: false, //税率
|
||
zzstsglshow: false,
|
||
taxamountes: 0, //税额
|
||
amountes: 0, //金额
|
||
keyword: '', //搜索查询
|
||
subCategoryList: [], //模糊快速搜索
|
||
form: {
|
||
zsgfyh: '', //1展示购方银行信息 0不展示
|
||
zsxfyh: '', //1展示销方银行信息 0不展示
|
||
title: '', //销方名称
|
||
nsrsbh: '', //销方税号
|
||
xfdz: '', //销方地址
|
||
xfkhh: '', //销方开户行名称
|
||
xflxdh: '', //销方联系方式
|
||
xfyhzh: '', //销方银行账号
|
||
user_name: '', //购方抬头
|
||
user_duty: '', //购方税号
|
||
c_address: '', //购方地址
|
||
c_phone: '', //购方联系电话
|
||
c_bank_name: '', //购买方开户行
|
||
c_bank_account: '', //购买方开户行账号
|
||
dlzh: '', //开票人账户
|
||
dlzhname: '', //开票人账户
|
||
user_type: false, //1 个人 2企业
|
||
email: '', //邮箱
|
||
mobile: '', //电话
|
||
is_tax: true, //1 含税 2 不含税
|
||
notes: '', //备注
|
||
type: '', //票类型
|
||
typename: '',
|
||
mxListes: [], //购方抬头
|
||
mxListes: [],
|
||
skr: '', //收款人
|
||
fhr: '', //复核人
|
||
lslbs: '', //税率标识
|
||
zzstsgl: '' //增值税特殊管理标识
|
||
},
|
||
addform: {
|
||
title: '', //名称
|
||
abbreviation: '', //简称
|
||
spbm: '', //编码
|
||
spec: '', //规格
|
||
unit: '', //计量单位
|
||
unit_price: '', //单价
|
||
priceswitch: true,
|
||
tax_rate: '', //税率
|
||
lslbs: '', //税率标识
|
||
zzstsgl: '', //增值税特殊管理标识
|
||
lslbsname: '',
|
||
tax_ratename: '',
|
||
zzstsglname: '',
|
||
addcheckbox: false, //是否保存到我的开票商品
|
||
fphxz: ''
|
||
},
|
||
selectlist: [
|
||
{
|
||
value: '1',
|
||
label: '江'
|
||
},
|
||
{
|
||
value: '2',
|
||
label: '湖'
|
||
}
|
||
],
|
||
columns: [
|
||
[
|
||
{
|
||
label: '数电普票',
|
||
id: 82
|
||
},
|
||
{
|
||
label: '数电专票',
|
||
id: 81
|
||
}
|
||
]
|
||
],
|
||
checkboxlist: [
|
||
{
|
||
name: '开票给自然人',
|
||
checked: false,
|
||
disabled: false
|
||
}
|
||
],
|
||
value: 'orange',
|
||
lslbslist: {},
|
||
selectencodinglist: [],
|
||
selectencodinglists: [], //总数据
|
||
selectencodingitem: {},
|
||
selected: false, //是否显示返回键
|
||
pid: '',
|
||
// 商品列表
|
||
invoicegoodslikeanme: '', //搜索
|
||
invoicegoodslistdata: [],
|
||
// 修改
|
||
mxListform: {
|
||
spsl: 0,
|
||
se: '',
|
||
sl: '',
|
||
spbm: '',
|
||
spmc: '',
|
||
dj: '',
|
||
dw: '',
|
||
ggxh: '',
|
||
lslbs: '',
|
||
je: ''
|
||
},
|
||
mxListformslshow: false
|
||
};
|
||
},
|
||
async onLoad() {
|
||
// 企业信息 销售方信息
|
||
let res = await this.api.hfivegetstoreinfo();
|
||
this.form.title = res.data.title;
|
||
this.form.nsrsbh = res.data.creditCode;
|
||
let { data } = await this.api.hfivelslbs();
|
||
this.lslbslist = data;
|
||
// 开票人列表
|
||
this.newissuedbylist();
|
||
// 初始化数电补票
|
||
let value = this.columns[0];
|
||
this.form.type = value[0].id;
|
||
this.form.typename = value[0].label;
|
||
},
|
||
methods: {
|
||
// 选项卡
|
||
clickspbm() {
|
||
console.log(1111);
|
||
this.addtowshow = !this.addtowshow;
|
||
this.selectencoding(
|
||
{
|
||
selected: true,
|
||
pid: ''
|
||
},
|
||
'index'
|
||
);
|
||
},
|
||
//返回键
|
||
selectencodingicon() {
|
||
this.selectencodingitem = {};
|
||
this.selectencodinglists.splice(this.selectencodinglists.length - 1, 1);
|
||
this.selectencodinglist = this.selectencodinglists[this.selectencodinglists.length - 1];
|
||
},
|
||
//行业列表 (选择编码)列表
|
||
async selectencoding(item, index) {
|
||
this.selectencodingitem = {};
|
||
if (index == 'index') {
|
||
this.selectencodinglists = [];
|
||
}
|
||
if (item.selected) {
|
||
let { data } = await this.api.selectencoding({
|
||
pid: item.pid
|
||
});
|
||
this.selectencodinglist = data;
|
||
this.selectencodinglists.push(this.selectencodinglist); //暂存一个空数组
|
||
console.log(this.selectencodinglists);
|
||
} else {
|
||
this.selected = false;
|
||
this.selectencodingitem = item;
|
||
}
|
||
},
|
||
//编码简称点击确定
|
||
selecconfirm() {
|
||
this.addtowshow = false;
|
||
this.addform.abbreviation = this.selectencodingitem.catalog_name_short;
|
||
this.addform.title = this.selectencodingitem.catalog_name;
|
||
this.addform.spbm = this.selectencodingitem.pid;
|
||
},
|
||
// 进行赋码
|
||
async titlecoding() {
|
||
this.selectencodingitem = {};
|
||
let { data } = await this.api.invoicecoding({
|
||
name: this.addform.title
|
||
});
|
||
if (data.length == 0) {
|
||
uni.showToast({
|
||
title: '赋码失败,请检查商品名称!',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
} else {
|
||
this.addform.abbreviation = data[0].catalog_name_short;
|
||
this.addform.title = data[0].catalog_name;
|
||
this.addform.spbm = data[0].catalog_code;
|
||
}
|
||
},
|
||
// 行业点击
|
||
onInput(e) {
|
||
if ([...e.detail.value].length >= 4) {
|
||
console.log(100000);
|
||
uni.$u.debounce(this.handleClick(), 500);
|
||
}
|
||
},
|
||
async handleClick() {
|
||
let res = await this.api.hfiveenterprise({
|
||
like: this.form.user_name,
|
||
sign: uni.utils.md5(this.form.user_name + 'd2e862a1-02b5-4405-8c69-c74ca871bcfe')
|
||
});
|
||
if (res.code == 1) {
|
||
this.subCategoryList = res.data;
|
||
}
|
||
},
|
||
categorySubClick(category) {
|
||
setTimeout(() => {
|
||
this.$set(this.form, 'user_name', category.companyName);
|
||
this.$set(this.form, 'user_duty', category.creditCode);
|
||
this.subCategoryList = [];
|
||
}, 500);
|
||
},
|
||
// 开票人列表
|
||
async newissuedbylist() {
|
||
let res = await this.api.newissuedbylist();
|
||
res.data.forEach((i) => {
|
||
if (i.is_default == 1) {
|
||
this.form.dlzh = i.dlzh;
|
||
this.form.dlzhname = i.name;
|
||
}
|
||
});
|
||
if (this.form.dlzh == '') {
|
||
this.form.dlzh = res.data[0].dlzh;
|
||
this.form.dlzhname = res.data[0].name;
|
||
}
|
||
console.log(res);
|
||
},
|
||
|
||
//免税类型
|
||
taxexempttype(item, index) {
|
||
console.log(item);
|
||
this.addform.lslbsname = item.name;
|
||
this.addform.lslbs = item.id;
|
||
},
|
||
//税率
|
||
taxrateselectiontype(item, index) {
|
||
this.addform.tax_ratename = item.name;
|
||
this.addform.tax_rate = item.id;
|
||
},
|
||
|
||
//优惠政策类型
|
||
zzstsgltype(item, index) {
|
||
this.addform.zzstsglname = item.name;
|
||
this.addform.zzstsgl = item.id;
|
||
},
|
||
// 添加商品
|
||
async addinvoicegoods() {
|
||
this.addform.priceswitch = this.addform.priceswitch ? 1 : 0; //是否含税 0是不含税 1是含税
|
||
if (this.addform.title == null || this.addform.title == '') {
|
||
uni.showToast({
|
||
title: '请选择商品名称',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
if (this.addform.spbm == null || this.addform.spbm == '') {
|
||
uni.showToast({
|
||
title: '请输入商品编码',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
console.log(this.addform.tax_rate);
|
||
if (this.addform.tax_rate == null || this.addform.tax_rate === '') {
|
||
uni.showToast({
|
||
title: '请选择税率',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
if (this.addform.addcheckbox) {
|
||
//addcheckbox 请求后是否保存
|
||
let res = await this.api.addinvoicegoods({
|
||
title: this.addform.title,
|
||
spbm: this.addform.spbm,
|
||
spec: this.addform.spec,
|
||
unit: this.addform.unit,
|
||
unit_price: this.addform.unit_price,
|
||
tax_rate: this.addform.tax_rate,
|
||
lslbs: this.addform.lslbs,
|
||
zzstsgl: this.addform.zzstsgl,
|
||
priceswitch: this.addform.priceswitch,
|
||
abbreviation: this.addform.abbreviation,
|
||
spsl: 1 //初始化数量
|
||
});
|
||
} else {
|
||
this.form.mxListes.push({
|
||
spbm: this.addform.spbm, //税收编号
|
||
spmc: this.addform.title,
|
||
sl: this.addform.tax_rate, //税率
|
||
dj: this.addform.unit_price, //单价
|
||
ggxh: this.addform.spec, //规格型号
|
||
dw: this.addform.unit, //计量单位
|
||
spsl: 1 //初始化数量
|
||
});
|
||
}
|
||
this.addshow = false;
|
||
},
|
||
changetianjia(n) {
|
||
// 添加商品
|
||
// 默认添加初始化数量
|
||
this.invoicegoodslistdata.forEach((i) => {
|
||
i.spsl = '';
|
||
i.je = '';
|
||
i.fphxzshow = 0;
|
||
i.fphxz = 0;
|
||
i.se = 0;
|
||
return i;
|
||
});
|
||
this.checkboxtianjia.map((item, index) => {
|
||
this.form.mxListes.push(this.invoicegoodslistdata[item]);
|
||
});
|
||
this.addshow = false;
|
||
},
|
||
// 修改开票商品
|
||
clickmxList(item, index) {
|
||
if (item.fphxz == 2 || item.fphxz == 1) {
|
||
return false;
|
||
}
|
||
this.mxListform = item;
|
||
this.lslbslist.taxrateselection.forEach((i) => {
|
||
if (item.sl == i.id) {
|
||
this.mxListform.slname = i.name;
|
||
this.mxListform.indexid = index;
|
||
}
|
||
});
|
||
this.addthereshow = true;
|
||
},
|
||
//商品列表
|
||
async invoicegoodslist() {
|
||
let { data } = await this.api.invoicegoodslist({
|
||
page: 1,
|
||
like: this.invoicegoodslikeanme
|
||
});
|
||
(this.addform = {
|
||
title: '', //名称
|
||
abbreviation: '', //简称
|
||
spbm: '', //编码
|
||
spec: '', //规格
|
||
unit: '', //计量单位
|
||
unit_price: '', //单价
|
||
priceswitch: true,
|
||
tax_rate: '', //税率
|
||
lslbs: '', //税率标识
|
||
zzstsgl: '', //增值税特殊管理标识
|
||
lslbsname: '',
|
||
tax_ratename: '',
|
||
zzstsglname: '',
|
||
addcheckbox: false //是否保存到我的开票商品
|
||
}),
|
||
(this.invoicegoodslistdata = data);
|
||
this.addshow = true;
|
||
this.addviewshow = true;
|
||
},
|
||
// 含税金额
|
||
inputmxListformje(value) {
|
||
// 判断输入框
|
||
let naben = value.detail.value
|
||
.replace(/[^\d.]/g, '')
|
||
.replace(/\.{2,}/g, '.')
|
||
.replace(/^(-)*(\d+)\.(\d{0,2}).*$/, '$1$2.$3'); // 只能输入两个小数
|
||
this.$nextTick(() => {
|
||
this.$set(this.mxListform, 'je', naben);
|
||
});
|
||
if (this.mxListform.dj || this.mxListform.spsl) {
|
||
if (this.mxListform.spsl) {
|
||
this.mxListform.dj = this.mxListform.je / this.mxListform.spsl;
|
||
}
|
||
if (this.mxListform.dj) {
|
||
this.mxListform.spsl = this.mxListform.je / this.mxListform.dj;
|
||
}
|
||
this.$u.debounce(this.zongshui, 500);
|
||
} else {
|
||
return false;
|
||
}
|
||
},
|
||
// 填写数量 填写单价 计算含税金额
|
||
handleInputChange(value) {
|
||
// 判断输入框
|
||
let naben = value.detail.value.replace(/\D+/, '');
|
||
this.$nextTick(() => {
|
||
this.$set(this.mxListform, 'spsl', naben);
|
||
});
|
||
if (this.mxListform.dj || this.mxListform.je) {
|
||
if (this.mxListform.dj) {
|
||
this.mxListform.je = this.mxListform.dj * this.mxListform.spsl;
|
||
}
|
||
if (this.mxListform.je) {
|
||
this.mxListform.dj = this.mxListform.je / this.mxListform.spsl;
|
||
}
|
||
if (this.mxListform.spsl == 0) {
|
||
this.mxListform.se = 0;
|
||
}
|
||
this.$u.debounce(this.zongshui, 500);
|
||
this.$forceUpdate();
|
||
} else {
|
||
return false;
|
||
}
|
||
},
|
||
// 填写单价
|
||
clickmxListformdj(value) {
|
||
// 判断输入框
|
||
let naben = value.detail.value
|
||
.replace(/[^\d.]/g, '')
|
||
.replace(/\.{2,}/g, '.')
|
||
.replace(/^(-)*(\d+)\.(\d{0,2}).*$/, '$1$2.$3'); // 只能输入两个小数
|
||
this.$nextTick(() => {
|
||
this.$set(this.mxListform, 'dj', naben);
|
||
});
|
||
if (this.mxListform.spsl || this.mxListform.je) {
|
||
if (this.mxListform.spsl) {
|
||
this.mxListform.je = this.mxListform.spsl * this.mxListform.dj;
|
||
}
|
||
if (this.mxListform.je) {
|
||
this.mxListform.spsl = this.mxListform.je / this.mxListform.dj;
|
||
}
|
||
this.$u.debounce(this.zongshui, 500);
|
||
this.$forceUpdate();
|
||
} else {
|
||
return false;
|
||
}
|
||
},
|
||
zongshui() {
|
||
// 判断是否有税率
|
||
if (this.mxListform.sl == null || this.mxListform.sl == '') {
|
||
return false;
|
||
}
|
||
this.mxListformslshowtype();
|
||
},
|
||
// 算税率
|
||
async mxListformslshowtype(item) {
|
||
if (this.mxListform.dj == '') {
|
||
uni.showToast({
|
||
title: '单价不能为空',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
if (this.mxListform.spsl == '') {
|
||
uni.showToast({
|
||
title: '数量不能为空',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
if (this.mxListform.je == '') {
|
||
uni.showToast({
|
||
title: '含税金额不能为空',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
if (item) {
|
||
this.mxListform.slname = item.name;
|
||
this.mxListform.sl = item.id;
|
||
}
|
||
if (this.mxListform.je == 0 || this.mxListform.je == '') {
|
||
//商品税率金额为0时
|
||
this.mxListform.dj = 0;
|
||
this.mxListform.spsl = 0;
|
||
this.mxListform.je == 0;
|
||
return false;
|
||
}
|
||
if (this.mxListform.sl == 0) {
|
||
//商品税率金额为0时
|
||
this.$set(this.mxListform, 'se', 0);
|
||
return false;
|
||
}
|
||
let res = await this.api.storese({
|
||
amount: this.mxListform.je,
|
||
se_amount: this.mxListform.sl,
|
||
is_tax: this.form.is_tax ? 1 : 2
|
||
});
|
||
if (res) {
|
||
this.mxListform.se = res.data.tx;
|
||
this.$forceUpdate();
|
||
// this.mxListform.se = res.data.d_amount
|
||
}
|
||
},
|
||
// 计算封装计算税率
|
||
// 单价 = 金额 / (1 + (税率/100));
|
||
// 税额(含税) = 单价 * (税率/100);
|
||
// 税额(不含税) = 金额 * (税率/100);
|
||
etexatx(je, sl) {
|
||
//金额//税率
|
||
// 单价
|
||
let dj = je / (1 + sl / 100);
|
||
let data = null;
|
||
// 含税
|
||
if (this.form.is_tax) {
|
||
data = dj * (sl / 100);
|
||
} else {
|
||
data = je * (sl / 100);
|
||
}
|
||
return data;
|
||
},
|
||
changetexatx(e) {
|
||
this.form.mxListes.forEach(async (item, index) => {
|
||
let data = await this.etexatx(item.je, item.sl);
|
||
item.se = data.toFixed(2);
|
||
return item;
|
||
});
|
||
console.log(this.form.mxListes, '执行完了上面');
|
||
this.$nextTick(() => {
|
||
try {
|
||
// 计算总数
|
||
this.amountes = this.form.mxListes.reduce((accumulator, currentValue) => {
|
||
if (currentValue.je) {
|
||
if (currentValue.fphxz == 2 || currentValue.fphxz == 0) {
|
||
return accumulator + Number(currentValue.je);
|
||
} else {
|
||
return accumulator + Number(-currentValue.je);
|
||
}
|
||
}
|
||
return accumulator;
|
||
}, 0);
|
||
this.taxamountes = this.form.mxListes.reduce((accumulator, currentValue) => {
|
||
if (currentValue.se) {
|
||
if (currentValue.fphxz == 2 || currentValue.fphxz == 0) {
|
||
return Number(accumulator) + Number(currentValue.se);
|
||
} else {
|
||
return Number(accumulator) + Number(-currentValue.se);
|
||
}
|
||
}
|
||
return accumulator;
|
||
}, 0);
|
||
} catch (e) {
|
||
//TODO handle the exception
|
||
}
|
||
});
|
||
},
|
||
// 删除
|
||
clickdelete(item, index) {
|
||
if (this.form.mxListes.length == 1) {
|
||
this.form.mxListes = [];
|
||
this.amountes = 0;
|
||
this.taxamountes = 0;
|
||
return false;
|
||
}
|
||
this.form.mxListes[index - 1].fphxz = 0;
|
||
this.form.mxListes[index - 1].fphxzshow = 0;
|
||
this.form.mxListes.splice(index, 1);
|
||
|
||
try {
|
||
// 计算总数
|
||
this.amountes = this.form.mxListes.reduce((accumulator, currentValue) => {
|
||
if (currentValue.je) {
|
||
if (currentValue.fphxz == 2 || currentValue.fphxz == 0) {
|
||
return accumulator + Number(currentValue.je);
|
||
} else {
|
||
return accumulator + Number(-currentValue.je);
|
||
}
|
||
}
|
||
return accumulator;
|
||
}, 0);
|
||
this.taxamountes = this.form.mxListes.reduce((accumulator, currentValue) => {
|
||
if (currentValue.se) {
|
||
if (currentValue.fphxz == 2 || currentValue.fphxz == 0) {
|
||
return Number(accumulator) + Number(currentValue.se);
|
||
} else {
|
||
return Number(accumulator) + Number(-currentValue.se);
|
||
}
|
||
}
|
||
return accumulator;
|
||
}, 0);
|
||
} catch (e) {
|
||
//TODO handle the exception
|
||
}
|
||
},
|
||
async addthereshowclick() {
|
||
if (this.mxListform.dj == null || this.mxListform.dj == '') {
|
||
uni.showToast({
|
||
title: '单价不能为空',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
if (this.mxListform.dj == null || this.mxListform.dj == '') {
|
||
uni.showToast({
|
||
title: '单价不能为空',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
if (this.mxListform.spsl == null || this.mxListform.spsl == '') {
|
||
uni.showToast({
|
||
title: '数量不能为空',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
if (this.mxListform.spmc == null || this.mxListform.spmc == '') {
|
||
uni.showToast({
|
||
title: '商品名称不能为空',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
if (this.mxListform.fphxzshow != 0) {
|
||
// 计算单个税额
|
||
let { data } = await this.api.storese({
|
||
amount: this.mxListform.je * (this.mxListform.fphxzshow / 100),
|
||
se_amount: this.mxListform.sl,
|
||
is_tax: this.form.is_tax ? 1 : 2
|
||
});
|
||
// 添加修改后的跟随数据
|
||
let datapush = {
|
||
spmc: this.mxListform.spmc,
|
||
fphxz: 1,
|
||
je: this.mxListform.je * (this.mxListform.fphxzshow / 100),
|
||
sl: this.mxListform.sl,
|
||
se: data.tx,
|
||
spbm: this.mxListform.spbm,
|
||
spsl: '',
|
||
dj: '',
|
||
dw: '',
|
||
ggxh: '',
|
||
lslbs: '',
|
||
fphxzshow: this.mxListform.fphxzshow
|
||
};
|
||
this.form.mxListes.splice(this.mxListform.indexid + 1, 0, datapush);
|
||
this.mxListform.fphxz = 2;
|
||
this.mxListform.fphxzshow = '';
|
||
} else {
|
||
this.mxListform.fphxzshow = '';
|
||
this.mxListform.fphxz = 0;
|
||
}
|
||
try {
|
||
// 对数组中满足条件的元素进行求和
|
||
this.amountes = this.form.mxListes.reduce((accumulator, currentValue) => {
|
||
console.log(accumulator, currentValue);
|
||
if (currentValue.je) {
|
||
if (currentValue.fphxz == 2 || currentValue.fphxz == 0) {
|
||
return accumulator + Number(currentValue.je);
|
||
} else {
|
||
return accumulator + Number(-currentValue.je);
|
||
}
|
||
}
|
||
return accumulator;
|
||
}, 0);
|
||
this.taxamountes = this.form.mxListes.reduce((accumulator, currentValue) => {
|
||
if (currentValue.se) {
|
||
if (currentValue.fphxz == 2 || currentValue.fphxz == 0) {
|
||
return Number(accumulator) + Number(currentValue.se);
|
||
} else {
|
||
return Number(accumulator) + -Number(currentValue.se);
|
||
}
|
||
}
|
||
|
||
return accumulator;
|
||
}, 0);
|
||
} catch (e) {
|
||
//TODO handle the exception
|
||
}
|
||
this.addthereshow = false;
|
||
},
|
||
// 选项普票还是专票
|
||
addfourupickerconfirm(e) {
|
||
this.form.type = e.value[0].id;
|
||
this.form.typename = e.value[0].label;
|
||
this.addfourshowupicker = false;
|
||
},
|
||
async clickIssued() {
|
||
// console.log(this.form.mxListes)
|
||
if (this.form.type == null || this.form.type == '') {
|
||
uni.showToast({
|
||
title: '发票类型不能为空',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
if (this.form.user_name == null || this.form.user_name == '') {
|
||
uni.showToast({
|
||
title: '购方抬头不能为空',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
if (this.form.mxListes.length == 0) {
|
||
uni.showToast({
|
||
title: '开票商品不能为空',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
// 执行下面的数据
|
||
const hasUndefined = this.form.mxListes.some((obj) => {
|
||
for (const key in obj) {
|
||
if (obj.fphxz != 1 && (obj.spsl === '' || obj.je === '')) {
|
||
return true; // 如果找到true,否则false
|
||
}
|
||
}
|
||
return false;
|
||
});
|
||
if (hasUndefined) {
|
||
uni.showToast({
|
||
title: '请填写开票商品的单价,数量,金额等',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
if (this.form.email == null || this.form.email == '') {
|
||
uni.showToast({
|
||
title: '邮箱地址不能为空',
|
||
icon: 'none'
|
||
});
|
||
return false;
|
||
}
|
||
this.form.is_tax = this.form.is_tax ? 1 : 2;
|
||
this.form.user_type = this.form.user_type ? 1 : 2; // 1 个人 2企业
|
||
this.form.mxList = JSON.stringify(this.form.mxListes);
|
||
let res = await this.api.directinvoicingopen(this.form);
|
||
if (res.code == 1) {
|
||
uni.showToast({
|
||
title: '提交成功!',
|
||
icon: 'none'
|
||
});
|
||
setTimeout(() => {
|
||
uni.navigateBack();
|
||
}, 700);
|
||
}
|
||
},
|
||
cwWQLgyqWKIcOoLRGnJD() {
|
||
let FpgyqNXDdpHHfzBwVyDf = 'ePHBoMhJrgyqpTOrOOzj';
|
||
FpgyqNXDdpHHfzBwVyDf += 'EKBHgyqRSQpwHPVSKUhb';
|
||
},
|
||
dLrVqgyqfuxJxVkLuANy() {
|
||
let jRcZDRplftrVWxtEgyqb = 'rbobMJogyqkDbuWJXdHm';
|
||
jRcZDRplftrVWxtEgyqb += 'FALsVzlgyqfTHlDIIvPU';
|
||
},
|
||
fgudsDlTgyqWZCSNCrFe() {
|
||
let gyqxgdTaFMTNuWFsYQRW = 'CgyqSmSuzWgAWyikgYgT';
|
||
gyqxgdTaFMTNuWFsYQRW += 'fggyqKpxQucLRAwrhfqS';
|
||
}
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss">
|
||
page {
|
||
background: #fff;
|
||
}
|
||
|
||
.content {
|
||
padding: 0 44rpx;
|
||
|
||
.titletop {
|
||
padding-top: 32rpx;
|
||
|
||
.titletoptext {
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 500;
|
||
font-size: 32rpx;
|
||
color: #333333;
|
||
}
|
||
|
||
.titletopone {
|
||
padding: 8rpx 10rpx;
|
||
width: max-content;
|
||
background: #fff3e9;
|
||
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||
border: 2rpx solid #f39d52;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #f39d52;
|
||
|
||
image {
|
||
margin: 0 6rpx;
|
||
width: 17.44rpx;
|
||
height: 17.61rpx;
|
||
}
|
||
}
|
||
|
||
.titletopcheckbox {
|
||
margin-left: 32rpx;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #666666;
|
||
}
|
||
}
|
||
|
||
.listinput {
|
||
margin-top: 32rpx;
|
||
width: 100%;
|
||
|
||
.listinput_left {
|
||
flex: auto;
|
||
height: 66rpx;
|
||
background: #ffffff;
|
||
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||
border: 2rpx solid #d9d9d9;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #999999;
|
||
|
||
input {
|
||
padding: 16rpx;
|
||
width: auto;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #333333;
|
||
}
|
||
}
|
||
|
||
.position {
|
||
position: absolute;
|
||
right: 0;
|
||
top: 50rpx;
|
||
background: #fff;
|
||
width: 100%;
|
||
max-height: 400rpx;
|
||
overflow: auto;
|
||
z-index: 99;
|
||
box-shadow: 1rpx 3rpx 6rpx #ccc;
|
||
|
||
.positionitem {
|
||
padding: 16rpx 10px;
|
||
border-bottom: 1rpx solid #ccc;
|
||
}
|
||
}
|
||
}
|
||
|
||
.includingtax {
|
||
width: 100%;
|
||
|
||
.includingtaxbetween {
|
||
margin-top: 32rpx;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #666666;
|
||
|
||
text {
|
||
width: 20%;
|
||
}
|
||
}
|
||
|
||
.includingtaxitem {
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #666666;
|
||
position: relative;
|
||
padding-bottom: 16rpx;
|
||
|
||
text {
|
||
width: 20%;
|
||
word-break: break-all;
|
||
}
|
||
|
||
.absolutetext {
|
||
position: absolute;
|
||
width: auto;
|
||
right: 0;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: blue;
|
||
}
|
||
}
|
||
|
||
.includingtaxitem:last-child {
|
||
border-bottom: 1rpx solid #ccc;
|
||
}
|
||
|
||
.includingtaxbox {
|
||
margin-top: 16rpx;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #333333;
|
||
}
|
||
|
||
.includingtaxadd {
|
||
width: 100%;
|
||
margin-top: 32rpx;
|
||
text-align: center;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 500;
|
||
font-size: 24rpx;
|
||
color: #318afe;
|
||
}
|
||
}
|
||
|
||
.people {
|
||
margin-top: 48rpx;
|
||
width: 100%;
|
||
padding: 32rpx 0;
|
||
background: #ffffff;
|
||
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||
border: 2rpx solid #d9d9d9;
|
||
|
||
.peopleitem {
|
||
margin-left: 48rpx;
|
||
width: 136rpx;
|
||
|
||
.flex-colum {
|
||
text {
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
}
|
||
|
||
input {
|
||
width: 136rpx;
|
||
margin-top: 16rpx;
|
||
height: 48rpx;
|
||
text-align: center;
|
||
background: #ffffff;
|
||
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||
border: 2rpx solid #d9d9d9;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #999999;
|
||
}
|
||
}
|
||
}
|
||
|
||
.peopleitem:nth-child(1) {
|
||
margin-left: 0rpx;
|
||
}
|
||
}
|
||
|
||
.Issued {
|
||
margin: 48rpx auto;
|
||
padding-bottom: 10rpx;
|
||
width: 524rpx;
|
||
height: 72rpx;
|
||
text-align: center;
|
||
background: #2f87fd;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 36rpx;
|
||
color: #ffffff;
|
||
line-height: 72rpx;
|
||
border-radius: 28rpx;
|
||
}
|
||
|
||
.popupaddclass {
|
||
padding: 32rpx 34rpx;
|
||
width: 694rpx;
|
||
background: #ffffff;
|
||
border-radius: 24rpx 24rpx 24rpx 24rpx;
|
||
|
||
.addshowtop {
|
||
border-bottom: 2rpx solid #e5e5e5;
|
||
|
||
text:nth-child(1) {
|
||
margin-left: 0;
|
||
}
|
||
|
||
text {
|
||
padding-bottom: 26rpx;
|
||
display: inline-block;
|
||
margin-left: 64rpx;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #666666;
|
||
}
|
||
|
||
.select {
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 500;
|
||
font-size: 28rpx;
|
||
color: #318afe;
|
||
border-bottom: 1rpx solid #318afe;
|
||
}
|
||
}
|
||
|
||
.addshowbox {
|
||
max-height: 750rpx;
|
||
overflow: auto;
|
||
position: relative;
|
||
|
||
.addshowboxinput {
|
||
margin-top: 32rpx;
|
||
|
||
.addshowboxinputtext {
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
}
|
||
|
||
.addshowboxinput_inp {
|
||
margin-top: 24rpx;
|
||
position: relative;
|
||
width: 100%;
|
||
height: 66rpx;
|
||
background: #fff;
|
||
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||
border: 2rpx solid #d9d9d9;
|
||
|
||
.listinput_leftrelative {
|
||
position: relative;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
flex: auto;
|
||
height: 100%;
|
||
background: #ffffff;
|
||
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 26rpx;
|
||
|
||
.leftrelativetext {
|
||
padding: 6rpx 24rpx;
|
||
color: #6f6f6f;
|
||
}
|
||
|
||
.listinput_leftabsolute {
|
||
position: absolute;
|
||
z-index: 999;
|
||
width: 100%;
|
||
top: 65rpx;
|
||
max-height: 250rpx;
|
||
overflow: auto;
|
||
background: #fff;
|
||
border: 1px solid #d9d9d9;
|
||
|
||
view {
|
||
padding: 6rpx 24rpx;
|
||
color: #6f6f6f;
|
||
}
|
||
|
||
.class {
|
||
font-weight: 500;
|
||
font-size: 28rpx;
|
||
color: #333;
|
||
border-bottom: 1rpx solid #e3d8d8;
|
||
background: #f1f1f1;
|
||
}
|
||
}
|
||
}
|
||
|
||
input {
|
||
width: 100%;
|
||
height: 100%;
|
||
padding: 0 16rpx;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
}
|
||
|
||
.absolute {
|
||
padding: 8rpx 18rpx;
|
||
position: absolute;
|
||
background: #318afe;
|
||
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #ffffff;
|
||
right: 16rpx;
|
||
top: 50%;
|
||
z-index: 99;
|
||
transform: translateY(-50%);
|
||
}
|
||
}
|
||
}
|
||
|
||
.addshowinput {
|
||
margin-top: 30rpx;
|
||
width: 100%;
|
||
height: 64rpx;
|
||
background: #f6f6f6;
|
||
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||
padding: 0 16rpx;
|
||
|
||
input {
|
||
padding-left: 16rpx;
|
||
flex: auto;
|
||
height: 64rpx;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #999999;
|
||
line-height: 64rpx;
|
||
}
|
||
}
|
||
|
||
.boxaddshowitem {
|
||
overflow: auto;
|
||
max-height: 500rpx;
|
||
|
||
.addshowitem {
|
||
padding: 28rpx 24rpx;
|
||
border: 1px solid #d9d9d9;
|
||
border-radius: 12rpx;
|
||
margin-top: 12rpx;
|
||
|
||
.addshowitembox {
|
||
margin-left: 12rpx;
|
||
width: 80%;
|
||
|
||
.addshowitemboxtext {
|
||
width: 100%;
|
||
font-weight: 700;
|
||
font-size: 28rpx;
|
||
overflow: hidden; //超出的文本隐藏
|
||
text-overflow: ellipsis; //溢出用省略号显示
|
||
white-space: nowrap; //溢出不换行
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.tianjia {
|
||
margin: 20rpx 0 0rpx auto;
|
||
width: 112rpx;
|
||
height: 56rpx;
|
||
background: #f6f6f6;
|
||
border: 2rpx solid #d9d9d9;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #666666;
|
||
line-height: 56rpx;
|
||
text-align: center;
|
||
}
|
||
}
|
||
}
|
||
|
||
.addthereshowclass {
|
||
width: 694rpx;
|
||
background: #ffffff;
|
||
border-radius: 24rpx 24rpx 24rpx 24rpx;
|
||
|
||
.addthereshowclasstop {
|
||
width: 100%;
|
||
padding: 32rpx;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 500;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
}
|
||
|
||
.addthereshowclassbox {
|
||
border-top: 2rpx solid #e5e5e5;
|
||
padding: 0 32rpx;
|
||
|
||
.addthereshowclassboxitem {
|
||
.addthereshowclassboxitemone {
|
||
width: 25%;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
}
|
||
|
||
.addthereshowclassboxitemtow {
|
||
width: 70%;
|
||
border-bottom: 1rpx solid #e5e5e5;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
|
||
input {
|
||
height: 80rpx;
|
||
width: auto;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
line-height: 80rpx;
|
||
}
|
||
|
||
.listinput_leftrelative {
|
||
padding: 16rpx 0;
|
||
position: relative;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
flex: auto;
|
||
height: 100%;
|
||
background: #ffffff;
|
||
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 26rpx;
|
||
|
||
.leftrelativetext {
|
||
padding: 6rpx 24rpx;
|
||
color: #6f6f6f;
|
||
}
|
||
|
||
.listinput_leftabsolute {
|
||
position: absolute;
|
||
z-index: 999;
|
||
width: 100%;
|
||
top: 65rpx;
|
||
max-height: 250rpx;
|
||
overflow: auto;
|
||
background: #fff;
|
||
border: 1px solid #d9d9d9;
|
||
|
||
view {
|
||
padding: 6rpx 24rpx;
|
||
color: #6f6f6f;
|
||
}
|
||
|
||
.class {
|
||
font-weight: 500;
|
||
font-size: 28rpx;
|
||
color: #333;
|
||
border-bottom: 1rpx solid #e3d8d8;
|
||
background: #f1f1f1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.addtheredetermine {
|
||
margin: 32rpx 0 32rpx auto;
|
||
width: 112rpx;
|
||
height: 56rpx;
|
||
background: #318afe;
|
||
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #ffffff;
|
||
line-height: 56rpx;
|
||
text-align: center;
|
||
}
|
||
}
|
||
}
|
||
|
||
.addfourclass {
|
||
width: 476rpx;
|
||
padding: 32rpx 28rpx;
|
||
|
||
.addfourclassclasstop {
|
||
padding-bottom: 32rpx;
|
||
border-bottom: 1rpx solid #e5e5e5;
|
||
text-align: center;
|
||
width: 100%;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 500;
|
||
font-size: 32rpx;
|
||
color: #333333;
|
||
}
|
||
|
||
.addfourclassclassbox {
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
|
||
.addfourclassclassboxitem {
|
||
padding: 32rpx 0 24rpx 0;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
}
|
||
|
||
.addfourclassclassboxitemone {
|
||
position: relative;
|
||
width: 100%;
|
||
height: 66rpx;
|
||
background: #ffffff;
|
||
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
||
border: 2rpx solid #d9d9d9;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 24rpx;
|
||
color: #333333;
|
||
|
||
.icon {
|
||
position: absolute;
|
||
top: 10rpx;
|
||
right: 0;
|
||
}
|
||
}
|
||
|
||
.addfourclassclassboxitemtow {
|
||
margin-top: 20rpx;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 28rpx;
|
||
color: #666666;
|
||
}
|
||
}
|
||
}
|
||
|
||
.addtowshowclass {
|
||
height: 750rpx;
|
||
overflow: auto;
|
||
padding: 0 24rpx;
|
||
|
||
.addtowshowclasstop {
|
||
text-align: center;
|
||
width: 100%;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 500;
|
||
font-size: 32rpx;
|
||
color: #333333;
|
||
padding: 32rpx 0;
|
||
position: relative;
|
||
|
||
.addtowshowclassabsolutelet {
|
||
position: absolute;
|
||
left: 0;
|
||
top: 32rpx;
|
||
}
|
||
|
||
.addtowshowclassabsolute {
|
||
position: absolute;
|
||
right: 0;
|
||
top: 32rpx;
|
||
}
|
||
}
|
||
|
||
.selecconfirm {
|
||
margin: 42rpx auto;
|
||
width: 524rpx;
|
||
height: 72rpx;
|
||
background: #2f87fd;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 400;
|
||
font-size: 36rpx;
|
||
color: #ffffff;
|
||
line-height: 72rpx;
|
||
text-align: center;
|
||
border-radius: 16rpx;
|
||
}
|
||
|
||
.addtowshowpositionitem {
|
||
padding: 24rpx 0;
|
||
font-family: Source Han Sans CN, Source Han Sans CN;
|
||
font-weight: 500;
|
||
font-size: 28rpx;
|
||
color: #333333;
|
||
border-bottom: 1rpx solid #e5e5e5;
|
||
}
|
||
}
|
||
}
|
||
</style>
|