Commit 13e59d7a authored by 许珑标's avatar 许珑标

Merge branch 'yx-test' into yx-master

# Conflicts:
#	src/views/business/salaryAccount/index.vue
parents 8d7f72fa efbb0f9a
...@@ -9,6 +9,15 @@ export function listAccInfo(query) { ...@@ -9,6 +9,15 @@ export function listAccInfo(query) {
}) })
} }
// 查询商户付款账户列表-无部门过滤
export function listLaborAcc(query) {
return request({
url: '/business/accInfo/labor/accList',
method: 'get',
params: query
})
}
// 查询商户付款账户所有列表 // 查询商户付款账户所有列表
export function listAllAccInfo(query) { export function listAllAccInfo(query) {
return request({ return request({
...@@ -74,20 +83,31 @@ export function getTaxAccAliInfo(cardNo) { ...@@ -74,20 +83,31 @@ export function getTaxAccAliInfo(cardNo) {
}) })
} }
// 代理商获取名下客户的自有支付宝账本信息 // 代理商获取名下客户的支付宝账本信息
export function agentPrivateList(query) { export function agentAccList(query) {
return request({ return request({
url: '/business/accInfo/agent/privateList', url: '/business/accInfo/agent/accList',
method: 'get', method: 'get',
params: query params: query
}) })
} }
// 代理商获取名下客户的外部支付宝账本信息 // 设置线下充值收付规则
export function agentGetOutAccInfo(query) { export function setOfflineRechargeInfo(data) {
return request({
url: '/business/accInfo/recharge/offline/rule',
method: 'post',
data: data
})
}
// 获取线下充值收付两方信息
export function getOfflineRechargeInfo(rechargeType, cardNo) {
return request({ return request({
url: '/business/accInfo/agent/outList', url: `/business/accInfo/recharge/rule/get/${rechargeType}`,
method: 'get', method: 'get',
params: query params: {
cardNo: cardNo
}
}) })
} }
import request from '@/utils/request'
// 查询企业支付通道列表
export function listCompanyPayChannel(query) {
return request({
url: '/business/companyPayChannel/list',
method: 'get',
params: query
})
}
// 查询企业支付通道所有列表
export function listAllCompanyPayChannel(query) {
return request({
url: '/business/companyPayChannel/listAll',
method: 'get',
params: query
})
}
// 查询企业支付通道详细
export function getCompanyPayChannel(id) {
return request({
url: '/business/companyPayChannel/getInfo/' + id,
method: 'get'
})
}
// 新增企业支付通道
export function addCompanyPayChannel(data) {
return request({
url: '/business/companyPayChannel/add',
method: 'post',
data: data
})
}
// 修改企业支付通道
export function updateCompanyPayChannel(data) {
return request({
url: '/business/companyPayChannel/edit',
method: 'post',
data: data
})
}
// 删除企业支付通道
export function delCompanyPayChannel(id) {
return request({
url: '/business/companyPayChannel/remove/' + id,
method: 'get'
})
}
// 商户通道签约
export function signChannel(data) {
return request({
url: '/business/companyPayChannel/sign',
method: 'post',
data: data
})
}
...@@ -34,6 +34,22 @@ export function addLaborSign(data) { ...@@ -34,6 +34,22 @@ export function addLaborSign(data) {
data: data data: data
}) })
} }
// 新增代发合约签订前--预览合同文件
export function applySignPreGenFile(data) {
return request({
url: '/business/laborSign/applySignPreGenFile',
method: 'post',
data: data
})
}
// 签订合同
export function confirmSignContract(data) {
return request({
url: '/business/laborSign/confirmSignContract',
method: 'post',
data: data
})
}
// 修改代发合约签订 // 修改代发合约签订
export function updateLaborSign(data) { export function updateLaborSign(data) {
...@@ -59,12 +75,20 @@ export function agreeSign(id) { ...@@ -59,12 +75,20 @@ export function agreeSign(id) {
method: 'post' method: 'post'
}) })
} }
export function agreeSeal(data) {
return request({
url: '/business/laborSign/agreeSeal',
method: 'post',
data: data
})
}
// 删除代发合约签订 // 分配代发账户
export function giveAccToLabor(laborId) { export function giveAccToLabor(data) {
return request({ return request({
url: '/business/unitInfo/acc/give/' + laborId, url: '/business/unitInfo/acc/give',
method: 'post' method: 'post',
data: data
}) })
} }
......
import request from '@/utils/request'
// 查询企业支付通道列表
export function listPayChannel(query) {
return request({
url: '/business/payChannel/list',
method: 'get',
params: query
})
}
// 查询企业支付通道所有列表
export function listAllPayChannel(query) {
return request({
url: '/business/payChannel/listAll',
method: 'get',
params: query
})
}
// 查询企业支付通道详细
export function getPayChannel(id) {
return request({
url: '/business/payChannel/getInfo/' + id,
method: 'get'
})
}
// 新增企业支付通道
export function addPayChannel(data) {
return request({
url: '/business/payChannel/add',
method: 'post',
data: data
})
}
// 修改企业支付通道
export function updatePayChannel(data) {
return request({
url: '/business/payChannel/edit',
method: 'post',
data: data
})
}
// 删除企业支付通道
export function delPayChannel(id) {
return request({
url: '/business/payChannel/remove/' + id,
method: 'get'
})
}
...@@ -44,6 +44,14 @@ export function addPayOrder(data) { ...@@ -44,6 +44,14 @@ export function addPayOrder(data) {
}) })
} }
// 废弃支付任务
export function repealOrder(batchId) {
return request({
url: '/business/payOrder/repeal/' + batchId,
method: 'post',
})
}
// 发起支付 // 发起支付
export function doPay(batchId) { export function doPay(batchId) {
return request({ return request({
......
import request from '@/utils/request'
// 查询税地企业来账收款卡信息列表
export function listUnitRechargeBank(query) {
return request({
url: '/business/unitRechargeBank/list',
method: 'get',
params: query
})
}
// 查询税地企业来账收款卡信息所有列表
export function listAllUnitRechargeBank(query) {
return request({
url: '/business/unitRechargeBank/listAll',
method: 'get',
params: query
})
}
// 查询税地企业来账收款卡信息详细
export function getUnitRechargeBank(id) {
return request({
url: '/business/unitRechargeBank/getInfo/' + id,
method: 'get'
})
}
// 新增税地企业来账收款卡信息
export function addUnitRechargeBank(data) {
return request({
url: '/business/unitRechargeBank/add',
method: 'post',
data: data
})
}
// 修改税地企业来账收款卡信息
export function updateUnitRechargeBank(data) {
return request({
url: '/business/unitRechargeBank/edit',
method: 'post',
data: data
})
}
// 删除税地企业来账收款卡信息
export function delUnitRechargeBank(id) {
return request({
url: '/business/unitRechargeBank/remove/' + id,
method: 'get'
})
}
...@@ -10,7 +10,7 @@ export function login(username, password, code, smsCode, uuid) { ...@@ -10,7 +10,7 @@ export function login(username, password, code, smsCode, uuid) {
uuid uuid
} }
return request({ return request({
url: '/loginBySmsCode', url: '/login',
headers: { headers: {
isToken: false isToken: false
}, },
......
...@@ -98,7 +98,7 @@ export default { ...@@ -98,7 +98,7 @@ export default {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.$store.dispatch('LogOut').then(() => { this.$store.dispatch('LogOut').then(() => {
this.$router.push('/index') this.$router.push('/login')
}) })
}).catch(() => {}); }).catch(() => {});
} }
......
...@@ -17,14 +17,20 @@ ...@@ -17,14 +17,20 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="账本卡号" prop="alipayCardNo"> <el-form-item label="卡号" prop="alipayCardNo">
<el-input <el-input
v-model="queryParams.alipayCardNo" v-model="queryParams.alipayCardNo"
placeholder="请输入账本外卡卡号" placeholder="请输入卡号"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="绑定类型" prop="bindType">
<el-select v-model="queryParams.bindType" placeholder="请选择" clearable>
<el-option label="自有账户" :value="1" />
<el-option label="代发账户" :value="2" />
</el-select>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
...@@ -43,20 +49,28 @@ ...@@ -43,20 +49,28 @@
<!-- </el-col>--> <!-- </el-col>-->
<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>--> <!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
<!-- </el-row>--> <!-- </el-row>-->
<el-row :gutter="0" class="mb8">
<el-col :span="1.5">
<el-radio-group v-model="tabPosition" @input="getList">
<el-radio-button label="private">自有账户</el-radio-button>
<el-radio-button label="out">代发账户</el-radio-button>
</el-radio-group>
</el-col>
</el-row>
<el-table v-loading="loading" :data="alipayAccList"> <el-table v-loading="loading" :data="alipayAccList">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="所属企业" align="center" prop="companyName" /> <el-table-column label="所属企业" align="center" prop="companyName" />
<el-table-column label="支付宝账本信息" align="center"> <el-table-column label="卡信息" align="center">
<el-table-column label="外卡卡号" align="center" prop="alipayCardNo" /> <el-table-column label="卡号/户名" align="center" prop="accName">
<el-table-column label="开户户名" align="center" prop="accName" /> <template slot-scope="scope">
<div>{{ scope.row.alipayCardNo}} </div>
<div>{{ scope.row.accName}} </div>
</template>
</el-table-column>
<el-table-column label="通道" align="center" prop="channelCode">
<template slot-scope="scope">
{{ sysPayChannelMap.get(scope.row.channelCode) }}
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="channelCode">
<template slot-scope="scope">
<span v-if="scope.row.channelCode
&& scope.row.channelCode.indexOf('ALIPAY_BOOK') > -1">
记账本名称: {{ scope.row.alipayBookNo }}
</span>
</template>
</el-table-column>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -66,6 +80,13 @@ ...@@ -66,6 +80,13 @@
icon="el-icon-info" icon="el-icon-info"
@click="viewDetail(scope.row)" @click="viewDetail(scope.row)"
>账户详情</el-button> >账户详情</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-download"
@click="exportBiz(scope.row.alipayCardNo)"
v-hasPermi="['business:payBiz:export']"
>导出交易明细</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
...@@ -129,11 +150,28 @@ ...@@ -129,11 +150,28 @@
<el-button type="primary" @click="configRateSubmit">确 定</el-button> <el-button type="primary" @click="configRateSubmit">确 定</el-button>
</div> </div>
</el-dialog> </el-dialog>
<!-- 导出交易明细-弹窗-->
<el-dialog title="导出交易明细" :visible.sync="ex.panel" width="30%" center>
<el-date-picker
v-model="ex.timeRange"
type="daterange"
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
<div slot="footer" class="dialog-footer">
<el-button @click="ex.panel = false">取 消</el-button>
<el-button type="primary" @click="handleExport">确 定</el-button>
</div>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { agentGetOutAccInfo, agentPrivateList, getAccAliInfo } from '@/api/business/accInfo' import { agentAccList, getAccAliInfo, listAllAccInfo } from '@/api/business/accInfo'
import { listAllPayChannel } from '@/api/business/payChannel'
export default { export default {
name: "Post", name: "Post",
...@@ -165,7 +203,8 @@ export default { ...@@ -165,7 +203,8 @@ export default {
pageSize: 10, pageSize: 10,
companyName: undefined, companyName: undefined,
accName: undefined, accName: undefined,
alipayCardNo: undefined alipayCardNo: undefined,
bindType: null
}, },
// 账户详情 // 账户详情
accDetail: { accDetail: {
...@@ -190,6 +229,7 @@ export default { ...@@ -190,6 +229,7 @@ export default {
toAlipayRate: 0, toAlipayRate: 0,
toBankRate: 0 toBankRate: 0
}, },
sysPayChannelMap: null,
configRateFormRules: { configRateFormRules: {
toAlipayRate: [ toAlipayRate: [
{ required: true, message: '请输入转账到支付宝的费率', trigger: 'blur' } { required: true, message: '请输入转账到支付宝的费率', trigger: 'blur' }
...@@ -197,6 +237,13 @@ export default { ...@@ -197,6 +237,13 @@ export default {
toBankRate: [ toBankRate: [
{ required: true, message: '请输入转账到银行卡的费率', trigger: 'blur' } { required: true, message: '请输入转账到银行卡的费率', trigger: 'blur' }
], ],
},
ex: {
panel: false,
payAccNo: null,
timeRange: null,
timeLimitStart: null,
timeLimitEnd: null
} }
}; };
}, },
...@@ -205,20 +252,21 @@ export default { ...@@ -205,20 +252,21 @@ export default {
}, },
methods: { methods: {
/** 查询岗位列表 */ /** 查询岗位列表 */
getList() { async getList() {
this.loading = true; this.$modal.loading();
if (this.tabPosition === 'private') { try {
agentPrivateList(this.queryParams).then(response => { if (!this.sysPayChannelMap) {
this.alipayAccList = response.rows; await listAllPayChannel().then(resp => {
this.total = response.total; this.sysPayChannelMap = new Map(resp.data.map(value => [value.channelCode, value.channelName]));
this.loading = false; })
}); }
} else { await agentAccList(this.queryParams).then(response => {
agentGetOutAccInfo(this.queryParams).then(response => {
this.alipayAccList = response.rows; this.alipayAccList = response.rows;
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
}); });
} finally {
this.$modal.closeLoading()
} }
}, },
/** 搜索按钮操作 */ /** 搜索按钮操作 */
...@@ -271,6 +319,22 @@ export default { ...@@ -271,6 +319,22 @@ export default {
} }
}) })
}, },
exportBiz(cardNo) {
this.ex.payAccNo = cardNo
this.ex.panel = true
},
/** 导出按钮操作 */
handleExport() {
if (!this.ex.timeRange) {
return this.$modal.msgWarning("请选择时间区间")
}
this.ex.timeLimitStart = this.ex.timeRange[0]
this.ex.timeLimitEnd = this.ex.timeRange[1]
this.ex.panel = false
this.download('business/payOrder/biz/export', {
...this.ex
}, `${this.ex.payAccNo}_${this.ex.timeLimitStart}_${this.ex.timeLimitEnd}.xlsx`)
},
} }
}; };
</script> </script>
...@@ -71,14 +71,9 @@ ...@@ -71,14 +71,9 @@
<el-table-column label="信用代码" align="center" prop="companyCode" /> <el-table-column label="信用代码" align="center" prop="companyCode" />
<el-table-column label="法人姓名" align="center" prop="legalName" /> <el-table-column label="法人姓名" align="center" prop="legalName" />
<el-table-column label="法人电话" align="center" prop="legalPhone" /> <el-table-column label="法人电话" align="center" prop="legalPhone" />
<el-table-column label="绑定类型" align="center" prop="bindType" > <el-table-column label="归属部门" align="center" prop="deptName" v-if="tableFiledDeptName"/>
<template slot-scope="scope">
<dict-tag :options="dict.type.payer_acc_bind_type" :value="scope.row.bindType"/>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-if="scope.row.signetId == null" v-if="scope.row.signetId == null"
size="mini" size="mini"
...@@ -110,6 +105,13 @@ ...@@ -110,6 +105,13 @@
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['business:companyInfo:remove']" v-hasPermi="['business:companyInfo:remove']"
>删除</el-button> >删除</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-platform-eleme"
@click="goPayChannel(scope.row)"
v-hasPermi="['business:companyPayChannel:station']"
>支付通道</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -150,12 +152,14 @@ ...@@ -150,12 +152,14 @@
import { listCompanyInfo, getCompanyInfo, delCompanyInfo, addCompanyInfo, updateCompanyInfo } from "@/api/business/companyInfo"; import { listCompanyInfo, getCompanyInfo, delCompanyInfo, addCompanyInfo, updateCompanyInfo } from "@/api/business/companyInfo";
import { deptTreeSelect } from '@/api/system/user'; import { deptTreeSelect } from '@/api/system/user';
import {makeSealPreCheck} from "@/api/business/sealCompanyInfo"; import {makeSealPreCheck} from "@/api/business/sealCompanyInfo";
import auth from '@/plugins/auth'
export default { export default {
name: "CompanyInfo", name: "CompanyInfo",
dicts: ['payer_acc_bind_type'], dicts: ['payer_acc_bind_type'],
data() { data() {
return { return {
tableFiledDeptName: auth.hasPermi('business:companyPayChannel:station'),
// 部门树选项 // 部门树选项
deptOptions: undefined, deptOptions: undefined,
cascaderProps: { cascaderProps: {
...@@ -208,6 +212,7 @@ export default { ...@@ -208,6 +212,7 @@ export default {
}; };
}, },
created() { created() {
console.log(auth.hasPermi('business:companyPayChannel:station'))
this.getList(); this.getList();
this.getDeptTree(); this.getDeptTree();
}, },
...@@ -260,12 +265,12 @@ export default { ...@@ -260,12 +265,12 @@ export default {
}, },
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd() { handleAdd() {
this.$router.push({ path: '/business/payerCompanyFOrm' }) this.$router.push({ path: '/business/payerCompanyForm' })
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
const id = row.id const id = row.id
this.$router.push({ path: '/business/payerCompanyFOrm', query: { id: id } }) this.$router.push({ path: '/business/payerCompanyForm', query: { id: id } })
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm() { submitForm() {
...@@ -323,6 +328,14 @@ export default { ...@@ -323,6 +328,14 @@ export default {
viewSealInfo(row) { viewSealInfo(row) {
const type = "hr"; const type = "hr";
this.$router.push({ path: '/seal/sealCompanyInfo', query: { bussinessId: row.id, bussinessType: type, showFlag:0 } }) this.$router.push({ path: '/seal/sealCompanyInfo', query: { bussinessId: row.id, bussinessType: type, showFlag:0 } })
},
goPayChannel(row) {
this.$router.push({ path: '/business/companyPayChannel',
query: {
companyId: row.id,
unitType: 1,
companyName: row.companyName
} })
} }
} }
}; };
......
This diff is collapsed.
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
<image-upload v-model="form.businessLicense" :limit="1"></image-upload> <image-upload v-model="form.businessLicense" :limit="1"></image-upload>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10" v-if="!this.form.id">
<el-form-item label="邀请码" prop="invitationCode"> <el-form-item label="邀请码" prop="invitationCode">
<el-input v-model="form.invitationCode" placeholder="请填写入驻邀请码" /> <el-input v-model="form.invitationCode" placeholder="请填写入驻邀请码" />
</el-form-item> </el-form-item>
......
This diff is collapsed.
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="80px">
<el-form-item label="通道标识" prop="channelCode">
<el-input
v-model="queryParams.channelCode"
placeholder="请输入通道唯一标识"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="通道名称" prop="channelName">
<el-input
v-model="queryParams.channelName"
placeholder="请输入通道名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['business:payChannel:add']"
>新增</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="payChannelList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键ID" align="center" prop="id" />
<el-table-column label="通道名称" align="center" prop="channelName" />
<el-table-column label="通道标识" align="center" prop="channelCode" />
<el-table-column label="通道状态" align="center" prop="status">
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
:active-value="1"
:inactive-value="2"
@change="handleStatusChange(scope.row)"
></el-switch>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['business:payChannel:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['business:payChannel:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改系统内置支付通道对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="通道名称" prop="channelName">
<el-input v-model="form.channelName" placeholder="请输入通道名称" />
</el-form-item>
<el-form-item label="通道标识" prop="channelCode">
<el-input v-model="form.channelCode" placeholder="请输入通道唯一标识" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listPayChannel, getPayChannel, delPayChannel, addPayChannel, updatePayChannel } from "@/api/business/payChannel";
export default {
name: "PayChannel",
data() {
return {
// 根路径
baseURL: process.env.VUE_APP_BASE_API,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 系统内置支付通道表格数据
payChannelList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
channelCode: null,
channelName: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
id: [
{ required: true, message: "主键ID不能为空", trigger: "blur" }
],
channelCode: [
{ required: true, message: "通道唯一标识不能为空", trigger: "blur" }
],
channelName: [
{ required: true, message: "通道名称不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询系统内置支付通道列表 */
getList() {
this.loading = true;
listPayChannel(this.queryParams).then(response => {
this.payChannelList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
channelCode: null,
channelName: null,
status: 1,
deptId: null,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加系统内置支付通道";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getPayChannel(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改系统内置支付通道";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updatePayChannel(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addPayChannel(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除系统内置支付通道编号为"' + ids + '"的数据项?').then(function() {
return delPayChannel(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('business/payChannel/export', {
...this.queryParams
}, `payChannel_${new Date().getTime()}.xlsx`)
},
// 通道状态修改
handleStatusChange(row) {
const _this = this;
let text = row.status === 1 ? "启用" : "停用";
_this.$modal.confirm('确认要"' + text + '""' + row.channelName + '"支付通道吗?').then(function() {
const updateForm = {
id: row.id,
status: row.status
}
updatePayChannel(updateForm).then(response => {
_this.getList()
});
}).then(() => {
_this.$modal.msgSuccess(text + "成功");
}).catch(function() {
row.status = row.status === 2 ? 1 : 2;
});
},
}
};
</script>
...@@ -4,6 +4,15 @@ ...@@ -4,6 +4,15 @@
<el-form-item label="流水号" prop="batchNo"> <el-form-item label="流水号" prop="batchNo">
<el-input v-model="queryParams.batchNo" placeholder="流水号" clearable @keyup.enter.native="handleQuery" /> <el-input v-model="queryParams.batchNo" placeholder="流水号" clearable @keyup.enter.native="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="业务单号" prop="importBatchNo">
<el-input v-model="queryParams.importBatchNo" placeholder="客户自有业务单号" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="数据来源" prop="dataSource">
<el-select v-model="queryParams.dataSource" placeholder="请选择数据来源" @change="handleQuery" clearable>
<el-option label="平台" :value="1" />
<el-option label="接口" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="业务名称" prop="batchPayName"> <el-form-item label="业务名称" prop="batchPayName">
<el-input v-model="queryParams.batchPayName" placeholder="请输入支付名称" clearable <el-input v-model="queryParams.batchPayName" placeholder="请输入支付名称" clearable
@keyup.enter.native="handleQuery" /> @keyup.enter.native="handleQuery" />
...@@ -46,7 +55,12 @@ ...@@ -46,7 +55,12 @@
<el-table v-loading="loading" :data="payOrderList" height="700px"> <el-table v-loading="loading" :data="payOrderList" height="700px">
<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="batchNo" /> <el-table-column label="流水号/业务单号" align="center" prop="batchNo">
<template slot-scope="scope">
{{ scope.row.batchNo }}
<div style="color: #1890ff">{{ scope.row.importBatchNo }}</div>
</template>
</el-table-column>
<el-table-column label="业务名称" align="center" prop="batchPayName" /> <el-table-column label="业务名称" align="center" prop="batchPayName" />
<el-table-column label="付款账户" align="center"> <el-table-column label="付款账户" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -86,10 +100,17 @@ ...@@ -86,10 +100,17 @@
<!-- <el-table-column label="支付备注" align="center" prop="payRemark" />--> <!-- <el-table-column label="支付备注" align="center" prop="payRemark" />-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="scope.row.payStatus && scope.row.payStatus === 1" size="mini" type="text" icon="el-icon-money" @click="doPay(scope.row)">确认支付</el-button> <el-button v-if="scope.row.payStatus && scope.row.payStatus === 1"
<el-button size="mini" type="text" icon="el-icon-s-order" @click="viewDetail(scope.row)">查看明细</el-button> size="mini" type="text" icon="el-icon-money"
<el-button v-if="scope.row.payStatus && scope.row.payStatus === 4 || scope.row.payStatus === 5" size="mini" @click="doPay(scope.row)">确认支付</el-button>
type="text" icon="el-icon-s-promotion" @click="doRepay(scope.row)">失败补发</el-button> <el-button v-if="scope.row.payStatus && scope.row.payStatus === 1"
size="mini" type="text" icon="el-icon-circle-close"
@click="repeal(scope.row)">订单作废</el-button>
<el-button size="mini" type="text" icon="el-icon-s-order"
@click="viewDetail(scope.row)">查看明细</el-button>
<el-button v-if="scope.row.payStatus && scope.row.payStatus === 4 || scope.row.payStatus === 5"
size="mini" type="text" icon="el-icon-s-promotion"
@click="doRepay(scope.row)">失败补发</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -107,7 +128,7 @@ ...@@ -107,7 +128,7 @@
</template> </template>
<script> <script>
import { addPayOrder, doPay, listPayOrder } from '@/api/business/payOrder' import { addPayOrder, doPay, listPayOrder, repealOrder } from '@/api/business/payOrder'
import RePay from '@/views/business/payDetail/rePay.vue' import RePay from '@/views/business/payDetail/rePay.vue'
export default { export default {
...@@ -142,12 +163,14 @@ export default { ...@@ -142,12 +163,14 @@ export default {
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
dataSource: null,
batchPayName: null, batchPayName: null,
payerCompanyId: null, payerCompanyId: null,
payerAccName: null, payerAccName: null,
payerAccNo: null, payerAccNo: null,
batchNo: null, batchNo: null,
outBatchNo: null, outBatchNo: null,
importBatchNo: null,
payTitle: null, payTitle: null,
payRemark: null, payRemark: null,
transactionTime: null, transactionTime: null,
...@@ -213,6 +236,18 @@ export default { ...@@ -213,6 +236,18 @@ export default {
this.getList() this.getList()
} }
}, },
repeal(row) {
this.$confirm('确定废弃该任务[' + row.batchNo + ":" + row.batchPayName + ']?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
repealOrder(row.id).then(resp => {
this.$modal.msgSuccess("操作成功");
this.getList()
})
}).catch(() => { });
},
doPay(row) { doPay(row) {
if (row && row.id) { if (row && row.id) {
this.$confirm('确定对该任务[' + row.batchNo + ":" + row.batchPayName + ']进行支付操作?', '提示', { this.$confirm('确定对该任务[' + row.batchNo + ":" + row.batchPayName + ']进行支付操作?', '提示', {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -62,21 +62,37 @@ ...@@ -62,21 +62,37 @@
</el-dialog> </el-dialog>
<!-- 点击签约后查看合同 --> <!-- 点击签约后查看合同 -->
<el-dialog title="签约合同" :visible.sync="signContractPanelVisible" append-to-body width="45%" center> <el-dialog title="签约合同" :visible.sync="signContractPanelVisible" append-to-body width="45%" center>
<iframe <el-steps :active="active" finish-status="success" simple style="margin-top: 20px">
src="http://admin.xinruit.com/stage-api/profile/upload/2025/04/17/2c90b129-f55c-48a7-9e13-86b48b3354ab.pdf" <el-step title="1、签订合同"></el-step>
frameborder="0" style="width: 100%;height:500px"></iframe> <el-step title="2、确认签约"></el-step>
</el-steps>
<div class="demo-form" v-if="active == 1">
<div style="margin: 20px;padding: 20px;">
<iframe :src=this.contractUrl style="width:100%;height:600px;" frameborder="0"></iframe>
</div>
<div slot="footer" class="dialog-footer" style="text-align: center;">
<el-button type="primary" @click.native="confirmSealContractFile">确认签订合同</el-button>
</div>
</div>
<div class="demo-form" v-if="active == 2">
<div style="margin: 20px;padding: 20px;">
<iframe :src=this.contractUrl style="width:100%;height:600px;" frameborder="0"></iframe>
</div>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="signContractPaneSubmit">确 定</el-button> <el-button type="primary" @click="signContractPaneSubmit">确 定</el-button>
<el-button @click="signContractPanelCancel">取 消</el-button> <el-button @click="signContractPanelCancel">取 消</el-button>
</div> </div>
</div>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { listToSignUnit } from '@/api/business/unitInfo' import { listToSignUnit } from '@/api/business/unitInfo'
import { addLaborSign } from '@/api/business/laborSign' import { addLaborSign, applySignPreGenFile, confirmSignContract } from '@/api/business/laborSign'
import { listAllCompanyInfo } from '@/api/business/companyInfo' import { listAllCompanyInfo } from '@/api/business/companyInfo'
import { signContractFile } from '@/api/business/onlineTaskInfo'
export default { export default {
name: "taxSignComponent", name: "taxSignComponent",
...@@ -85,6 +101,11 @@ export default { ...@@ -85,6 +101,11 @@ export default {
}, },
data() { data() {
return { return {
// 合同url
contractUrl: '',
// 步骤条
active: 1,
payerCompanyArr: [], payerCompanyArr: [],
signForm: { signForm: {
taxUnitId: null, taxUnitId: null,
...@@ -178,7 +199,48 @@ export default { ...@@ -178,7 +199,48 @@ export default {
this.signContractPanelVisible = false; this.signContractPanelVisible = false;
}, },
submitSignForm() { submitSignForm() {
this.signContractPanelVisible = true this.$modal.loading();
this.signForm.contractUrl = "pre";
applySignPreGenFile(this.signForm).then(resp => {
if (200 === resp.code) {
this.$modal.msgSuccess("操作成功!");
this.signContractPanelVisible = true;
this.contractUrl = resp.data;
this.signForm.contractUrl = resp.data;
}else {
this.$modal.msgError(resp.message);
}
}).catch(() => {
this.signContractPanelVisible = false;
this.signPanel = false
}).finally(() => {
this.$modal.closeLoading();
})
},
confirmSealContractFile() {
// TODO 确认框
// this.$modal.confirm('是否确认签订合同?').then(() => {
// 添加 loading 提示
this.$modal.loading("正在签订合同,请稍候...");
confirmSignContract(this.signForm).then(response => {
if (response.code === 200) {
this.$modal.msgSuccess("签订合同成功");
this.contractUrl = response.data;
this.signForm.contractUrl = response.data;
this.active = 2;
} else {
this.$modal.msgError("签订合同失败:" + (response.msg || "未知错误"));
}
}).catch(error => {
console.error("签订合同接口调用失败", error);
this.$modal.msgError("签订合同失败,请稍后再试");
}).finally(() => {
this.$modal.closeLoading()
});
// }).catch(() => {
// // 用户取消操作
// this.$modal.msgError("已取消签订合同");
// });
} }
}, },
}; };
......
This diff is collapsed.
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="80px">
<el-form-item label="关联企业" prop="companyId">
<el-select v-model="queryParams.companyId" placeholder="请选择关联企业" clearable>
<el-option v-for="item in unitInfoList" :key="item.companyId"
:label="item.companyName" :value="item.companyId" />
</el-select>
</el-form-item>
<el-form-item label="支付通道" prop="channelName">
<el-input
v-model="queryParams.channelName"
placeholder="请输入通道名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- <el-row :gutter="10" class="mb8">-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="warning"-->
<!-- icon="el-icon-download"-->
<!-- size="mini"-->
<!-- @click="handleExport"-->
<!-- v-hasPermi="['business:companyPayChannel:export']"-->
<!-- >导出</el-button>-->
<!-- </el-col>-->
<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
<!-- </el-row>-->
<el-table v-loading="loading" :data="companyPayChannelList">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="企业名称" align="center" prop="companyName" />
<el-table-column label="支付通道" align="center" prop="channelName" />
<el-table-column label="使用状态" align="center" prop="status">
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
:active-value="1"
:inactive-value="2"
@change="handleStatusChange(scope.row)"
></el-switch>
</template>
</el-table-column>
<el-table-column label="开通状态" align="center" prop="isEnter">
<template slot-scope="scope">
<dict-tag :options="dict.type.pay_channel_use_status" :value="scope.row.isEnter" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-help"
@click="signChannel(scope.row)"
v-if="scope.row.isEnter < 3"
>开通</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-setting"
@click="goChannelSet(scope.row)"
v-if="scope.row.isEnter === 3"
>参数配置</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog title="扫码签约" :visible.sync="bindAcc.codePanel" width="300px" style="text-align: center">
<h3>请使用</h3>
<h3><span style="color: #00afff">{{ bindAcc.companyName}}</span>的对公支付宝</h3>
<h3>扫描下方二维码</h3>
<qr-code-component :text="bindAcc.codeUrl" />
<h3>操作完成后大约5-10分钟</h3>
<h3>可刷新页面查看结果</h3>
<div slot="footer" class="dialog-footer">
<el-button @click="bindAcc.codePanel = false">关 闭</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
listCompanyPayChannel, signChannel,
updateCompanyPayChannel
} from '@/api/business/companyPayChannel'
import { listAllPayChannel } from '@/api/business/payChannel'
import { listAllUnitInfo } from '@/api/business/unitInfo'
import QrCodeComponent from '@/components/QrCode.vue'
export default {
name: "CompanyPayChannel",
components: { QrCodeComponent },
dicts: ['pay_channel_use_status'],
data() {
return {
// 根路径
baseURL: process.env.VUE_APP_BASE_API,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 企业支付通道表格数据
companyPayChannelList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
companyId: null,
unitType: 2,
channelCode: null,
channelName: null,
status: null,
deptId: null,
},
sysPayChannelList: [],
unitInfoList: [],
bindAcc: {
codePanel: false,
companyName: '',
codeUrl: '',
},
};
},
created() {
this.queryAllUnit()
this.getList();
},
methods: {
/** 查询企业支付通道列表 */
getList() {
this.loading = true;
this.queryParams.unitType = 2
listCompanyPayChannel(this.queryParams).then(response => {
this.companyPayChannelList = response.rows;
this.total = response.total;
this.loading = false;
});
},
queryAllUnit() {
listAllUnitInfo().then(resp => {
this.unitInfoList = resp.data.map(item => ({
'companyId': item['id'],
'companyName': item['unitName']
}));
})
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
companyId: null,
unitType: null,
channelCode: null,
channelName: null,
status: 0,
isEnter: null,
deptId: null,
};
this.resetForm("form");
},
sysPayChannelAll() {
listAllPayChannel().then(resp => {
this.sysPayChannelList = resp.data
if (this.sysPayChannelList && this.companyPayChannelList) {
this.sysPayChannelList.filter(item => {
if (this.companyPayChannelList.some(obj => obj.channelCode === item.channelCode)) {
item.disabled = true
}
})
}
})
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 通道状态修改
handleStatusChange(row) {
const _this = this;
let text = row.status === 1 ? "启用" : "停用";
_this.$modal.confirm('确认要"' + text + '""' + row.channelName + '"支付通道吗?').then(function() {
const updateForm = {
id: row.id,
status: row.status
}
updateCompanyPayChannel(updateForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).catch(() => {
row.status = row.status === 2 ? 1 : 2;
});
}).catch(function() {
row.status = row.status === 2 ? 1 : 2;
});
},
signChannel(row) {
this.$confirm('确认开通支付通道[' + row.channelName + ']?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.doSignChannel(row)
})
},
doSignChannel(row) {
const singForm = {
companyId: row.companyId,
unitType: 2,
channelCode: row.channelCode
}
this.$modal.loading()
signChannel(singForm).then(resp => {
this.bindAcc.codePanel = true
this.bindAcc.codeUrl = resp.data
this.bindAcc.companyName = row.companyName
}).finally(() => {
this.$modal.closeLoading()
})
},
goChannelSet(row) {
this.$router.push({ path: '/business/unitRechargeBank', query: {
companyId: row.companyId,
channelCode: row.channelCode
} })
}
}
};
</script>
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
<el-table-column label="月开票额度" align="center" prop="invoiceLimit" /> <el-table-column label="月开票额度" align="center" prop="invoiceLimit" />
<el-table-column label="可开票类型" align="center" prop="invoiceTypes"> <el-table-column label="可开票类型" align="center" prop="invoiceTypes">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag style="margin-top: 3px" v-for="(item, index) in scope.row.invoiceTypes.split(',')" :key="index" <dict-tag v-if="scope.row.invoiceTypes" style="margin-top: 3px" v-for="(item, index) in scope.row.invoiceTypes.split(',')" :key="index"
:options="dict.type.tax_invoice_type" :value="item" /> :options="dict.type.tax_invoice_type" :value="item" />
</template> </template>
</el-table-column> </el-table-column>
...@@ -110,6 +110,13 @@ ...@@ -110,6 +110,13 @@
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['business:unitInfo:remove']">删除 v-hasPermi="['business:unitInfo:remove']">删除
</el-button> </el-button>
<el-button
size="mini"
type="text"
icon="el-icon-platform-eleme"
@click="goPayChannel(scope.row)"
v-hasPermi="['business:companyPayChannel:station']"
>支付通道</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -316,6 +323,14 @@ export default { ...@@ -316,6 +323,14 @@ export default {
viewSealInfo(row) { viewSealInfo(row) {
const type = "hr"; const type = "hr";
this.$router.push({ path: '/seal/sealCompanyInfo', query: { bussinessId: row.id, bussinessType: type, showFlag:0 } }) this.$router.push({ path: '/seal/sealCompanyInfo', query: { bussinessId: row.id, bussinessType: type, showFlag:0 } })
},
goPayChannel(row) {
this.$router.push({ path: '/business/companyPayChannel',
query: {
companyId: row.id,
unitType: 2,
companyName: row.companyName
} })
} }
} }
} }
......
...@@ -310,10 +310,17 @@ ...@@ -310,10 +310,17 @@
<el-dialog title="绑定账户" :visible.sync="bindAcc.panel" width="300"> <el-dialog title="绑定账户" :visible.sync="bindAcc.panel" width="300">
<el-form label-width="80px"> <el-form label-width="80px">
<el-form-item label="账户主体"> <el-form-item label="账户主体">
<el-select v-model="bindAcc.companyId" placeholder="请选择账户对应的企业主体"> <el-select v-model="bindAcc.companyId" placeholder="请选择账户对应的企业主体" @change="selectSignCompany">
<el-option v-for="item in bindAcc.taxUnitList" :label="item.unitName" :value="item.id" /> <el-option v-for="item in bindAcc.taxUnitList" :label="item.unitName" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="支付通道">
<el-select v-model="bindAcc.channelCode" placeholder="请选择要开通的支付通道">
<el-option v-for="item in companyPayChannelList" :key="item.channelCode"
:label="item.channelName" :value="item.channelCode"
:disabled="!item.isEnter || item.isEnter > 2" />
</el-select>
</el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitBind">确定</el-button> <el-button type="primary" @click="submitBind">确定</el-button>
...@@ -343,6 +350,7 @@ import { formatDate } from '@/utils' ...@@ -343,6 +350,7 @@ import { formatDate } from '@/utils'
import QrCodeComponent from '@/components/QrCode.vue' import QrCodeComponent from '@/components/QrCode.vue'
import TaxSignComponent from '@/views/business/salaryAccount/taxSignComponent.vue' import TaxSignComponent from '@/views/business/salaryAccount/taxSignComponent.vue'
import { bindUnitAcc, listAllHasNoOpenInfo, listAllUnitAccInfo, listAllUnitInfo } from '@/api/business/unitInfo' import { bindUnitAcc, listAllHasNoOpenInfo, listAllUnitAccInfo, listAllUnitInfo } from '@/api/business/unitInfo'
import { listAllCompanyPayChannel, signChannel } from '@/api/business/companyPayChannel'
export default { export default {
name: 'SalaryAccount', name: 'SalaryAccount',
components: { TaxSignComponent, QrCodeComponent, AccSelect }, components: { TaxSignComponent, QrCodeComponent, AccSelect },
...@@ -354,6 +362,7 @@ export default { ...@@ -354,6 +362,7 @@ export default {
taxUnitList: [], taxUnitList: [],
codePanel: false, codePanel: false,
codeUrl: '', codeUrl: '',
channelCode: ''
}, },
billPanel: false, billPanel: false,
qrPayPanel: { qrPayPanel: {
...@@ -431,7 +440,8 @@ export default { ...@@ -431,7 +440,8 @@ export default {
billTotal: 0, billTotal: 0,
userInfoName: null, userInfoName: null,
accountCollection: [], accountCollection: [],
loading: false loading: false,
companyPayChannelList: null,
} }
}, },
created() { created() {
...@@ -604,7 +614,10 @@ export default { ...@@ -604,7 +614,10 @@ export default {
}) })
}, },
goRegister() { goRegister() {
listAllHasNoOpenInfo().then(resp => { this.bindAcc.companyId = null;
this.bindAcc.channelCode = null;
this.companyPayChannelList = [];
listAllUnitInfo().then(resp => {
if (200 === resp.code) { if (200 === resp.code) {
this.bindAcc.taxUnitList = resp.data this.bindAcc.taxUnitList = resp.data
} }
...@@ -613,16 +626,30 @@ export default { ...@@ -613,16 +626,30 @@ export default {
}) })
}, },
submitBind() { submitBind() {
const singForm = {
companyId: this.bindAcc.companyId,
unitType: 2,
channelCode: this.bindAcc.channelCode
}
this.$modal.loading() this.$modal.loading()
bindUnitAcc(this.bindAcc.companyId).then(resp => { signChannel(singForm).then(resp => {
if (200 === resp.code) {
this.bindAcc.codeUrl = resp.data
this.bindAcc.codePanel = true this.bindAcc.codePanel = true
} this.bindAcc.codeUrl = resp.data
}).finally(() => { }).finally(() => {
this.$modal.closeLoading() this.$modal.closeLoading()
this.bindAcc.panel = false; this.bindAcc.panel = false;
}) })
},
selectSignCompany(value) {
this.bindAcc.channelCode = null;
const channelQuery = {
unitType: 2,
companyId: value,
status: 1
}
listAllCompanyPayChannel(channelQuery).then(resp => {
this.companyPayChannelList = resp.data
})
} }
} }
} }
......
...@@ -44,19 +44,17 @@ ...@@ -44,19 +44,17 @@
v-if="scope.row.signStatus && 1 === scope.row.signStatus" v-hasPermi="['business:laborSign:add']">签约合约 v-if="scope.row.signStatus && 1 === scope.row.signStatus" v-hasPermi="['business:laborSign:add']">签约合约
</el-button> </el-button>
<el-button size="mini" type="text" icon="el-icon-lollipop" @click="givePayAcc(scope.row)" <el-button size="mini" type="text" icon="el-icon-lollipop" @click="givePayAcc(scope.row)"
v-if="scope.row.signStatus && 2 === scope.row.signStatus && !scope.row.payAccNo" v-if="scope.row.signStatus && 2 === scope.row.signStatus"
v-hasPermi="['business:unitInfo:add']">分配账户 v-hasPermi="['business:laborSign:add']">代发账户
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 点击签约后查看合同 --> <!-- 点击签约后查看合同 -->
<el-dialog title="签约合同" :visible.sync="doAgreePanelVisible" width="58%" center> <el-dialog title="签约合同" :visible.sync="doAgreePanelVisible" width="58%" center>
<iframe <iframe :src=this.contractUrl frameborder="0" style="width: 100%;height:600px"></iframe>
src="http://admin.xinruit.com/stage-api/profile/upload/2025/04/17/2c90b129-f55c-48a7-9e13-86b48b3354ab.pdf"
frameborder="0" style="width: 100%;height:600px"></iframe>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="doAgreePanelSubmit">确 定</el-button> <el-button type="primary" @click="confirmSealContractFile">确认盖章签约</el-button>
<el-button @click="doAgreePanelCancel">取 消</el-button> <el-button @click="doAgreePanelCancel">取 消</el-button>
</div> </div>
</el-dialog> </el-dialog>
...@@ -67,13 +65,16 @@ ...@@ -67,13 +65,16 @@
<script> <script>
import { querySignList } from '@/api/business/unitInfo' import { querySignList } from '@/api/business/unitInfo'
import { agreeSign, giveAccToLabor } from '@/api/business/laborSign' import { agreeSeal, agreeSign, confirmSignContract, giveAccToLabor } from '@/api/business/laborSign'
export default { export default {
name: 'signList', name: 'signList',
dicts: ['tax_labor_sign_status'], dicts: ['tax_labor_sign_status'],
data() { data() {
return { return {
// 合同url
contractUrl: '',
// 遮罩层 // 遮罩层
loading: true, loading: true,
// 显示搜索条件 // 显示搜索条件
...@@ -127,8 +128,62 @@ export default { ...@@ -127,8 +128,62 @@ export default {
}, },
doAgree(row) { doAgree(row) {
this.doAgreeData = row this.doAgreeData = row
this.contractUrl = row.contractUrl
this.doAgreePanelVisible = true this.doAgreePanelVisible = true
}, },
async confirmSealContractFile() {
const confirmResult = await this.$confirm(`确认签订与${this.doAgreeData.inviterName}的合约吗?`, '操作提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).catch(() => {
// 用户取消操作,不做任何处理
return false;
});
console.log("doAgreeData", JSON.stringify(this.doAgreeData))
if (!confirmResult) return;
this.$modal.loading("正在签订合同,请稍候...");
const signObj = {
contractUrl: this.doAgreeData.contractUrl,
inviterId: this.doAgreeData.inviterId,
taxUnitId: this.doAgreeData.taxUnitId,
};
try {
const response = await confirmSignContract(signObj);
if (response.code === 200) {
const contractUrl = response.data;
if (!contractUrl) {
this.$modal.msgError("签订合同失败:返回合同地址为空");
return;
}
this.$modal.msgSuccess("签订合同成功");
// this.contractUrl = contractUrl;
// this.doAgreeData.contractUrl = contractUrl;
const sealObj = {
id: this.doAgreeData.id,
contractUrl:contractUrl,
inviterId: this.doAgreeData.inviterId,
taxUnitId: this.doAgreeData.taxUnitId,
};
console.log("sealObj", JSON.stringify(sealObj))
const resp = await agreeSeal(sealObj);
if (resp.code === 200) {
this.$modal.msgSuccess("签订合同成功");
this.doAgreePanelVisible = false;
this.getList();
}else {
this.$modal.msgError("签订合同失败:" + (resp.msg || "未知错误"));
}
} else {
this.$modal.msgError("签订合同失败:" + (this.$options.filters.escapeHtml(response.msg) || "未知错误"));
}
} catch (error) {
console.error("签订合同接口调用失败", error);
this.$modal.msgError("签订合同失败,请稍后再试");
} finally {
this.$modal.closeLoading();
}
},
doAgreePanelSubmit() { doAgreePanelSubmit() {
this.$confirm(`确认签订与${this.doAgreeData.inviterName}的合约吗?`, '操作提示', { this.$confirm(`确认签订与${this.doAgreeData.inviterName}的合约吗?`, '操作提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
...@@ -148,33 +203,7 @@ export default { ...@@ -148,33 +203,7 @@ export default {
this.doAgreePanelVisible = false this.doAgreePanelVisible = false
}, },
givePayAcc(row) { givePayAcc(row) {
this.$confirm(`确认给[${row.inviterName}]分配付款专户吗?`, '操作提示', { this.$router.push({ path: '/business/laborAcc', query: { signId: row.id } })
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$modal.loading("处理中...")
giveAccToLabor(row.id).then(resp => {
if (200 === resp.code) {
if (200 === resp.data.code) {
this.$modal.msgSuccess("操作成功")
this.getList()
} else if (202 === resp.data.code) {
this.$confirm(row.taxUnitName + ':未签约支付协议,暂无法进行此操作', '操作提示', {
distinguishCancelAndClose: true,
confirmButtonText: '去签约',
cancelButtonText: '取消'
}).then(() => {
this.$router.push({ path: "/taxUnit/payAcc" });
}).catch(action => {
});
}
}
}).finally(() => {
this.$modal.closeLoading()
})
}).catch(() => { });
} }
} }
} }
......
This diff is collapsed.
...@@ -11,13 +11,13 @@ ...@@ -11,13 +11,13 @@
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码" <el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码"
@keyup.enter.native="getSmsCode"> @keyup.enter.native="handleLogin">
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="code" v-if="captchaEnabled"> <el-form-item prop="code" v-if="captchaEnabled">
<el-input v-model="loginForm.code" auto-complete="off" placeholder="数字验证码" style="width: 63%;" <el-input v-model="loginForm.code" auto-complete="off" placeholder="数字验证码" style="width: 63%;"
@keyup.enter.native="getSmsCode"> @keyup.enter.native="handleLogin">
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
</el-input> </el-input>
<div class="login-code"> <div class="login-code">
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
<el-checkbox v-model="loginForm.rememberMe" style="margin:12px 0px 25px 0px;">记住密码</el-checkbox> <el-checkbox v-model="loginForm.rememberMe" style="margin:12px 0px 25px 0px;">记住密码</el-checkbox>
<el-form-item style="width:100%;"> <el-form-item style="width:100%;">
<el-button :loading="loading" size="medium" type="primary" style="width:100%;" <el-button :loading="loading" size="medium" type="primary" style="width:100%;"
@click.native.prevent="getSmsCode"> @click.native.prevent="handleLogin">
<span v-if="!loading">登 录</span> <span v-if="!loading">登 录</span>
<span v-else>登 录 中...</span> <span v-else>登 录 中...</span>
</el-button> </el-button>
...@@ -236,7 +236,7 @@ export default { ...@@ -236,7 +236,7 @@ export default {
// this.loginRules.smsCode = [{ required: true, trigger: "change", message: "请输入短信验证码" }] // this.loginRules.smsCode = [{ required: true, trigger: "change", message: "请输入短信验证码" }]
// this.$refs.loginForm.validate(valid => { // this.$refs.loginForm.validate(valid => {
// if (valid) { // if (valid) {
this.loginForm.smsCode = code // this.loginForm.smsCode = code
this.loading = true; this.loading = true;
if (this.loginForm.rememberMe) { if (this.loginForm.rememberMe) {
Cookies.set("username", this.loginForm.username, { expires: 30 }); Cookies.set("username", this.loginForm.username, { expires: 30 });
......
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