Commit 6fb64619 authored by 许珑标's avatar 许珑标

Merge branch 'feat/tax' into test

parents 4d21037c c21f1419
...@@ -83,3 +83,42 @@ export function updateInvoiceStatus(data) { ...@@ -83,3 +83,42 @@ export function updateInvoiceStatus(data) {
data: data data: data
}) })
} }
// 通过外部付款卡号获取销售方开票信息
export function getSellerInvoiceInfo(cardNo) {
return request({
url: `/business/laborSign/getSellerInvoiceInfo/${cardNo}`,
method: 'get',
})
}
// 一键开票
export function onlineInvoicing(data) {
return request({
url: '/business/invoiceApply/onlineGen',
method: 'post',
data: data
})
}
//获取人脸登录二维码
export function getFaceLoginCode(query) {
console.log('获取人脸登录二维码:', query)
return request({
url: '/business/invoiceApply/getFaceLoginQrCode',
method: 'get',
params: query
})
}
// 获取人脸识别登录结果
export function getFaceLoginStatus(query) {
console.log('获取人脸识别登录结果:', query)
return request({
url: '/business/invoiceApply/getFaceLoginStatus',
method: 'get',
params: query
})
}
import request from '@/utils/request'
// 查询办税人信息列表
export function listLoginUser(query) {
return request({
url: '/business/loginUser/list',
method: 'get',
params: query
})
}
// 查询办税人信息所有列表
export function listAllLoginUser(query) {
return request({
url: '/business/loginUser/listAll',
method: 'get',
params: query
})
}
// 查询办税人信息详细
export function getLoginUser(id) {
return request({
url: '/business/loginUser/getInfo/' + id,
method: 'get'
})
}
// 新增办税人信息
export function addLoginUser(data) {
return request({
url: '/business/loginUser/add',
method: 'post',
data: data
})
}
// 修改办税人信息
export function updateLoginUser(data) {
return request({
url: '/business/loginUser/edit',
method: 'post',
data: data
})
}
// 删除办税人信息
export function delLoginUser(id) {
return request({
url: '/business/loginUser/remove/' + id,
method: 'get'
})
}
...@@ -201,6 +201,7 @@ export default { ...@@ -201,6 +201,7 @@ export default {
/** 查询付款主体信息列表 */ /** 查询付款主体信息列表 */
getList() { getList() {
this.loading = true; this.loading = true;
this.queryParams.bindType = 1
listCompanyInfo(this.queryParams).then(response => { listCompanyInfo(this.queryParams).then(response => {
this.companyInfoList = response.rows; this.companyInfoList = response.rows;
this.total = response.total; this.total = response.total;
......
...@@ -155,6 +155,13 @@ ...@@ -155,6 +155,13 @@
v-hasPermi="['business:invoiceApply:uploadInvoiceFile']" v-hasPermi="['business:invoiceApply:uploadInvoiceFile']"
@click="uploadInvoiceDailog(scope.row)" @click="uploadInvoiceDailog(scope.row)"
>上传发票</el-button> >上传发票</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-s-help"
v-hasPermi="['business:invoiceApply:uploadInvoiceFile']"
@click="onlineInvoice(scope.row)"
>一键开票</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
...@@ -426,7 +433,47 @@ ...@@ -426,7 +433,47 @@
<el-button @click="uploadInvoiceOpen = false">取 消</el-button> <el-button @click="uploadInvoiceOpen = false">取 消</el-button>
</span> </span>
</el-dialog> </el-dialog>
<!-- 一键发票对话框 -->
<el-dialog title="自助开票" :visible.sync="onlineInvoiceForm.panel">
<el-form :model="onlineInvoiceForm" ref="onlineInvoiceForm" size="small" label-width="100px">
<el-select v-model="onlineInvoiceForm.taxpayerId" placeholder="请选择开票员" clearable>
<el-option v-for="item in taxpayerList" :key="item.loginUserIdCard" :label="item.loginName" :value="item.id" />
</el-select>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="onlineGen">确 定</el-button>
<el-button @click="onlineInvoiceForm.panel = false">取 消</el-button>
</span>
</el-dialog>
<el-dialog title="人脸识别二维码" :visible.sync="faceCodeForm.panel" width="30%">
<el-tabs value="first" @tab-click="codeCheckClick">
<el-tab-pane label="个人所得税App" name="first">
<el-span>请打开个人所得税App扫码进行人脸验证,验证完成后请点按下方按钮。</el-span>
<el-image style="width:100%" :src="faceCodeForm.faceQRCode" fit="fill"/>
<el-row>
<el-col :span="14" style="text-align: right;">
<el-button type="success" round @click="refreshThisPage()">我已完成</el-button>
</el-col>
<el-col :span="10" style="text-align: right;">
<el-button type="primary" icon="el-icon-refresh-right" @click="getFaceLoginCode()" circle></el-button>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="当地电子税局App" name="second">
<el-span>请打开当地电子税局App扫码进行人脸验证,验证完成后请点按下方按钮。</el-span>
<el-image style="width:100%" :src="faceCodeForm.faceQRCode" fit="fill"/>
<el-row>
<el-col :span="14" style="text-align: right;">
<el-button type="success" round @click="refreshThisPage()">我已完成</el-button>
</el-col>
<el-col :span="10" style="text-align: right;">
<el-button type="primary" icon="el-icon-refresh-right" @click="getFaceLoginCode()" circle></el-button>
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>
</el-dialog>
</div> </div>
</template> </template>
...@@ -437,11 +484,12 @@ import { ...@@ -437,11 +484,12 @@ import {
delInvoiceApply, delInvoiceApply,
addInvoiceApply, addInvoiceApply,
updateInvoiceApply, updateInvoiceApply,
uploadInvoiceFile, updateInvoiceStatus, getInvoiceApplyDetail uploadInvoiceFile, updateInvoiceStatus, getInvoiceApplyDetail, onlineInvoicing, getFaceLoginCode, getFaceLoginStatus
} from '@/api/business/invoiceApply' } from '@/api/business/invoiceApply'
import { listCompanyInfo } from '@/api/business/companyInfo' import { listCompanyInfo } from '@/api/business/companyInfo'
import fa from 'element-ui/src/locale/lang/fa' import fa from 'element-ui/src/locale/lang/fa'
import { laborSign, querySignList } from '@/api/business/unitInfo' import { laborSign, querySignList } from '@/api/business/unitInfo'
import { listAllLoginUser } from '@/api/business/taxUser'
export default { export default {
name: "InvoiceApply", name: "InvoiceApply",
...@@ -453,6 +501,20 @@ export default { ...@@ -453,6 +501,20 @@ export default {
dicts: ['invoice_status', 'tax_invoice_type'], dicts: ['invoice_status', 'tax_invoice_type'],
data() { data() {
return { return {
// 人脸识别弹窗表单
faceCodeForm: {
panel: false,
faceQRCode: null,
},
// 一键开票
onlineInvoiceForm: {
panel: false,
taxpayerId: null,
invoiceApplyId: null,
smsCode: null,
verifyAppType: null
},
verifyAppType: 2,
//上传发票 //上传发票
applyInvoiceId: null, applyInvoiceId: null,
viewInvoiceFileOpen : false, viewInvoiceFileOpen : false,
...@@ -586,7 +648,8 @@ export default { ...@@ -586,7 +648,8 @@ export default {
invocieUrl: [ invocieUrl: [
{ required: true, message: "发票文件地址不能为空", trigger: "blur" } { required: true, message: "发票文件地址不能为空", trigger: "blur" }
], ],
} },
taxpayerList: [],
}; };
}, },
created() { created() {
...@@ -816,6 +879,111 @@ export default { ...@@ -816,6 +879,111 @@ export default {
this.form = response.data; this.form = response.data;
}); });
}, },
onlineInvoice(row) {
let taxpayerQuery = {
// companyType: 2,
// companyId: row.taxCompanyId
}
listAllLoginUser(taxpayerQuery).then(resp => {
if (200 === resp.code) {
this.taxpayerList = resp.data
}
})
this.onlineInvoiceForm = {
panel: true,
taxpayerId: null,
invoiceApplyId: row.id,
smsCode: null,
verifyAppType: null
}
},
onlineGen() {
this.$prompt('请输入返回值', '操作提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({ value }) => {
let testData = {
code: value
}
this.invoicingAfter(testData)
})
// onlineInvoicing(this.onlineInvoiceForm).then(resp => {
// if (200 === resp.code) {
// this.invoicingAfter(resp.data)
// }
// })
},
invoicingAfter(data) {
let code = data.code
if (code == 200) {
this.$modal.msgSuccess('开具成功')
this.getList()
} else if (code == 202) {
this.$modal.msgWarning('本次开票需要进行人脸识别验证。')
this.faceCodeForm = {
faceQRCode: data.base64,
panel: true
}
} else if (code == 201) {
this.$modal.msgWarning('本次开票需要短信验证')
this.$prompt('请输入短信验证码', '操作提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({ value }) => {
// todo 重新发起
this.onlineInvoiceForm.smsCode = value
// this.onlineGen()
this.$message({
type: 'success',
message: '你输入的短信验证码是: ' + value
});
console.log('一键开票请求参数:', this.onlineInvoiceForm)
})
} else if (code == 500) {
this.$modal.msgError(data.msg)
}
},
// 获取新的扫脸二维码
getFaceLoginCode(fn) {
const loading = this.$loading({
lock: true,
text: '正在获取中请稍等...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
let params = {
verifyAppType: this.verifyAppType,
taxpayerId: this.onlineInvoiceForm.taxpayerId
}
getFaceLoginCode(params).then(res => {
if (res.code == 200) {
if (fn && typeof fn === 'function') {
fn()
}
this.faceCodeForm.faceQRCode = res.data;
}
}).finally(() => {
loading.close()
})
},
// 查询人脸识别状态
refreshThisPage() {
getFaceLoginStatus({
taxpayerId: this.onlineInvoiceForm.taxpayerId
}).then(res => {
if (res.data) {
this.faceCodeForm.panel = false;
this.$modal.msgSuccess('验证成功')
} else {
this.$alert('查询人脸识别结果为失败,请刷新二维码后重新操作', '操作提示', {
});
}
})
},
codeCheckClick(tab) {
this.verifyAppType = tab.name === "second" ? 1 : 2 //1:电子税局 App(当地使用的) 2:个人所得税 App
this.getFaceLoginCode();
},
}, },
}; };
</script> </script>
......
This diff is collapsed.
...@@ -257,7 +257,8 @@ export default { ...@@ -257,7 +257,8 @@ export default {
bankAccount: [ bankAccount: [
{ required: true, message: "开户账号不能为空", trigger: "blur" }, { required: true, message: "开户账号不能为空", trigger: "blur" },
{ {
pattern: /^[1-9]{1}[0-9]{14}$|^[1-9]{1}[0-9]{16}([0-9]|[xX])$/, //银行账号校验 16-19位
pattern: /^\d{16,19}$/,
message: "请输入正确的开户账号", message: "请输入正确的开户账号",
trigger: "blur" trigger: "blur"
} }
...@@ -400,7 +401,7 @@ export default { ...@@ -400,7 +401,7 @@ export default {
getListgetCompanyList() { getListgetCompanyList() {
this.loading = true; this.loading = true;
const queryParams = { const queryParams = {
bindType: '1', // bindType: '1',
pageNum: 1, pageNum: 1,
pageSize: 1000 pageSize: 1000
} }
......
...@@ -154,7 +154,7 @@ ...@@ -154,7 +154,7 @@
</el-form-item>--> </el-form-item>-->
<el-form-item label="服务时间" prop="serviceTime"> <el-form-item label="服务时间" prop="serviceTime">
<el-date-picker clearable placeholder="请选择服务时间" v-model="form.serviceTimeArr" @change="changeServiceTime" <el-date-picker clearable placeholder="请选择服务时间" v-model="form.serviceTimeArr" @change="changeServiceTime"
type="datetimerange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="零工人数" prop="needNum"> <el-form-item label="零工人数" prop="needNum">
...@@ -288,9 +288,7 @@ export default { ...@@ -288,9 +288,7 @@ export default {
releaseTime: null, releaseTime: null,
}, },
// 表单参数 // 表单参数
form: { form: {},
serviceTimeArr: [],
},
// 表单校验 // 表单校验
rules: { rules: {
id: [ id: [
...@@ -459,6 +457,7 @@ export default { ...@@ -459,6 +457,7 @@ export default {
araeCode: null, araeCode: null,
area: null, area: null,
address: null, address: null,
serviceTimeArr: [],
serviceTime: null, serviceTime: null,
serviceTimeStart: null, serviceTimeStart: null,
serviceTimeEnd: null, serviceTimeEnd: null,
...@@ -472,7 +471,6 @@ export default { ...@@ -472,7 +471,6 @@ export default {
batchPayOrderId: null, batchPayOrderId: null,
releaseTime: null, releaseTime: null,
}; };
this.form.serviceTimeArr = [];
this.resetForm("form"); this.resetForm("form");
}, },
/** 搜索按钮操作 */ /** 搜索按钮操作 */
......
...@@ -61,7 +61,11 @@ ...@@ -61,7 +61,11 @@
<el-table-column type="selection" width="55" align="center"/> <el-table-column type="selection" width="55" align="center"/>
<el-table-column label="企业名称" align="center" prop="unitName" fixed/> <el-table-column label="企业名称" align="center" prop="unitName" fixed/>
<el-table-column label="信用代码" align="center" prop="unitCode" fixed/> <el-table-column label="信用代码" align="center" prop="unitCode" fixed/>
<el-table-column label="所属行业" align="center" prop="sectorDictDataVal"/> <el-table-column label="所属行业" align="center" prop="sectorDictDataVal">
<template slot-scope="scope">
<dict-tag :options="dict.type.unit_business_type" :value="scope.row.sectorDictDataVal"/>
</template>
</el-table-column>
<el-table-column label="法人姓名" align="center" prop="legalPersonName"/> <el-table-column label="法人姓名" align="center" prop="legalPersonName"/>
<el-table-column label="法人联系电话" align="center" prop="legalPersonMobile"/> <el-table-column label="法人联系电话" align="center" prop="legalPersonMobile"/>
<el-table-column label="所属地址" align="center" prop="address"/> <el-table-column label="所属地址" align="center" prop="address"/>
...@@ -162,7 +166,7 @@ import { listUnitInfo, delUnitInfo, getUnitTaxCategories, updateUnitInfo } from ...@@ -162,7 +166,7 @@ import { listUnitInfo, delUnitInfo, getUnitTaxCategories, updateUnitInfo } from
export default { export default {
name: 'UnitInfo', name: 'UnitInfo',
dicts: ['tax_invoice_status', 'tax_invoice_type'], dicts: ['tax_invoice_status', 'tax_invoice_type', 'unit_business_type'],
data() { data() {
return { return {
taxCategoryPanel: { taxCategoryPanel: {
......
This diff is collapsed.
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
<div class="bottom clearfix"> <div class="bottom clearfix">
<el-pagination layout="prev, pager, next" v-show="pending.total > 0" :total="pending.total" <el-pagination layout="prev, pager, next" v-show="pending.total > 0" :total="pending.total"
:page.sync="pending.params.pageNum" :limit.sync="pending.params.pageSize" :page.sync="pending.params.pageNum" :limit.sync="pending.params.pageSize"
@pagination="getPendingTable" /> @current-change="handleCurrentChange" />
</div> </div>
</el-card> </el-card>
</el-col> </el-col>
...@@ -69,6 +69,11 @@ export default { ...@@ -69,6 +69,11 @@ export default {
this.getPendingTable() this.getPendingTable()
}, },
methods: { methods: {
handleCurrentChange(val) {
this.pending.params.pageNum = val
this.getPendingTable()
// console.log(`当前页: ${val}`);
},
getPendingTable() { getPendingTable() {
listPending(this.pending.params).then(resp => { listPending(this.pending.params).then(resp => {
if (200 === resp.code) { if (200 === resp.code) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment