Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
薪
薪瑞通-前端
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
许珑标
薪瑞通-前端
Commits
6fb64619
Commit
6fb64619
authored
Apr 29, 2025
by
许珑标
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feat/tax' into test
parents
4d21037c
c21f1419
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
1131 additions
and
150 deletions
+1131
-150
src/api/business/invoiceApply.js
src/api/business/invoiceApply.js
+39
-0
src/api/business/taxUser.js
src/api/business/taxUser.js
+53
-0
src/views/business/companyInfo/merchant.vue
src/views/business/companyInfo/merchant.vue
+1
-0
src/views/business/invoiceApply/index.vue
src/views/business/invoiceApply/index.vue
+170
-2
src/views/business/invoiceApply/ready.vue
src/views/business/invoiceApply/ready.vue
+490
-138
src/views/business/invoiceInfo/index.vue
src/views/business/invoiceInfo/index.vue
+3
-2
src/views/business/onlineTaskInfo/index.vue
src/views/business/onlineTaskInfo/index.vue
+3
-5
src/views/business/taxUnit/index.vue
src/views/business/taxUnit/index.vue
+6
-2
src/views/business/taxUser/index.vue
src/views/business/taxUser/index.vue
+360
-0
src/views/index.vue
src/views/index.vue
+6
-1
No files found.
src/api/business/invoiceApply.js
View file @
6fb64619
...
@@ -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
})
}
src/api/business/taxUser.js
0 → 100644
View file @
6fb64619
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
'
})
}
src/views/business/companyInfo/merchant.vue
View file @
6fb64619
...
@@ -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
;
...
...
src/views/business/invoiceApply/index.vue
View file @
6fb64619
...
@@ -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
>
...
...
src/views/business/invoiceApply/ready.vue
View file @
6fb64619
This diff is collapsed.
Click to expand it.
src/views/business/invoiceInfo/index.vue
View file @
6fb64619
...
@@ -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
}
}
...
...
src/views/business/onlineTaskInfo/index.vue
View file @
6fb64619
...
@@ -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=
"date
time
range"
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
"
);
},
},
/** 搜索按钮操作 */
/** 搜索按钮操作 */
...
...
src/views/business/taxUnit/index.vue
View file @
6fb64619
...
@@ -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
:
{
...
...
src/views/business/taxUser/index.vue
0 → 100644
View file @
6fb64619
This diff is collapsed.
Click to expand it.
src/views/index.vue
View file @
6fb64619
...
@@ -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=
"getPendingTabl
e"
/>
@
current-change=
"handleCurrentChang
e"
/>
</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
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment