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) {
})
}
// 查询商户付款账户列表-无部门过滤
export function listLaborAcc(query) {
return request({
url: '/business/accInfo/labor/accList',
method: 'get',
params: query
})
}
// 查询商户付款账户所有列表
export function listAllAccInfo(query) {
return request({
......@@ -74,20 +83,31 @@ export function getTaxAccAliInfo(cardNo) {
})
}
// 代理商获取名下客户的自有支付宝账本信息
export function agentPrivateList(query) {
// 代理商获取名下客户的支付宝账本信息
export function agentAccList(query) {
return request({
url: '/business/accInfo/agent/privateList',
url: '/business/accInfo/agent/accList',
method: 'get',
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({
url: '/business/accInfo/agent/outList',
url: `/business/accInfo/recharge/rule/get/${rechargeType}`,
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) {
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) {
......@@ -59,12 +75,20 @@ export function agreeSign(id) {
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({
url: '/business/unitInfo/acc/give/' + laborId,
method: 'post'
url: '/business/unitInfo/acc/give',
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) {
})
}
// 废弃支付任务
export function repealOrder(batchId) {
return request({
url: '/business/payOrder/repeal/' + batchId,
method: 'post',
})
}
// 发起支付
export function doPay(batchId) {
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) {
uuid
}
return request({
url: '/loginBySmsCode',
url: '/login',
headers: {
isToken: false
},
......
......@@ -98,7 +98,7 @@ export default {
type: 'warning'
}).then(() => {
this.$store.dispatch('LogOut').then(() => {
this.$router.push('/index')
this.$router.push('/login')
})
}).catch(() => {});
}
......
......@@ -17,14 +17,20 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="账本卡号" prop="alipayCardNo">
<el-form-item label="卡号" prop="alipayCardNo">
<el-input
v-model="queryParams.alipayCardNo"
placeholder="请输入账本外卡卡号"
placeholder="请输入卡号"
clearable
@keyup.enter.native="handleQuery"
/>
</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-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>
......@@ -43,20 +49,28 @@
<!-- </el-col>-->
<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
<!-- </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-column type="selection" width="55" align="center" />
<el-table-column label="所属企业" align="center" prop="companyName" />
<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">
<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 label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
......@@ -66,6 +80,13 @@
icon="el-icon-info"
@click="viewDetail(scope.row)"
>账户详情</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
size="mini"
type="text"
......@@ -129,11 +150,28 @@
<el-button type="primary" @click="configRateSubmit">确 定</el-button>
</div>
</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>
</template>
<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 {
name: "Post",
......@@ -165,7 +203,8 @@ export default {
pageSize: 10,
companyName: undefined,
accName: undefined,
alipayCardNo: undefined
alipayCardNo: undefined,
bindType: null
},
// 账户详情
accDetail: {
......@@ -190,6 +229,7 @@ export default {
toAlipayRate: 0,
toBankRate: 0
},
sysPayChannelMap: null,
configRateFormRules: {
toAlipayRate: [
{ required: true, message: '请输入转账到支付宝的费率', trigger: 'blur' }
......@@ -197,6 +237,13 @@ export default {
toBankRate: [
{ required: true, message: '请输入转账到银行卡的费率', trigger: 'blur' }
],
},
ex: {
panel: false,
payAccNo: null,
timeRange: null,
timeLimitStart: null,
timeLimitEnd: null
}
};
},
......@@ -205,20 +252,21 @@ export default {
},
methods: {
/** 查询岗位列表 */
getList() {
this.loading = true;
if (this.tabPosition === 'private') {
agentPrivateList(this.queryParams).then(response => {
this.alipayAccList = response.rows;
this.total = response.total;
this.loading = false;
});
} else {
agentGetOutAccInfo(this.queryParams).then(response => {
async getList() {
this.$modal.loading();
try {
if (!this.sysPayChannelMap) {
await listAllPayChannel().then(resp => {
this.sysPayChannelMap = new Map(resp.data.map(value => [value.channelCode, value.channelName]));
})
}
await agentAccList(this.queryParams).then(response => {
this.alipayAccList = response.rows;
this.total = response.total;
this.loading = false;
});
} finally {
this.$modal.closeLoading()
}
},
/** 搜索按钮操作 */
......@@ -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>
......@@ -71,14 +71,9 @@
<el-table-column label="信用代码" align="center" prop="companyCode" />
<el-table-column label="法人姓名" align="center" prop="legalName" />
<el-table-column label="法人电话" align="center" prop="legalPhone" />
<el-table-column label="绑定类型" align="center" prop="bindType" >
<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" prop="deptName" v-if="tableFiledDeptName"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-if="scope.row.signetId == null"
size="mini"
......@@ -110,6 +105,13 @@
@click="handleDelete(scope.row)"
v-hasPermi="['business:companyInfo:remove']"
>删除</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>
</el-table-column>
</el-table>
......@@ -150,12 +152,14 @@
import { listCompanyInfo, getCompanyInfo, delCompanyInfo, addCompanyInfo, updateCompanyInfo } from "@/api/business/companyInfo";
import { deptTreeSelect } from '@/api/system/user';
import {makeSealPreCheck} from "@/api/business/sealCompanyInfo";
import auth from '@/plugins/auth'
export default {
name: "CompanyInfo",
dicts: ['payer_acc_bind_type'],
data() {
return {
tableFiledDeptName: auth.hasPermi('business:companyPayChannel:station'),
// 部门树选项
deptOptions: undefined,
cascaderProps: {
......@@ -208,6 +212,7 @@ export default {
};
},
created() {
console.log(auth.hasPermi('business:companyPayChannel:station'))
this.getList();
this.getDeptTree();
},
......@@ -260,12 +265,12 @@ export default {
},
/** 新增按钮操作 */
handleAdd() {
this.$router.push({ path: '/business/payerCompanyFOrm' })
this.$router.push({ path: '/business/payerCompanyForm' })
},
/** 修改按钮操作 */
handleUpdate(row) {
const id = row.id
this.$router.push({ path: '/business/payerCompanyFOrm', query: { id: id } })
this.$router.push({ path: '/business/payerCompanyForm', query: { id: id } })
},
/** 提交按钮 */
submitForm() {
......@@ -323,6 +328,14 @@ export default {
viewSealInfo(row) {
const type = "hr";
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 @@
<image-upload v-model="form.businessLicense" :limit="1"></image-upload>
</el-form-item>
</el-col>
<el-col :span="10">
<el-col :span="10" v-if="!this.form.id">
<el-form-item label="邀请码" prop="invitationCode">
<el-input v-model="form.invitationCode" placeholder="请填写入驻邀请码" />
</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 @@
<el-form-item label="流水号" prop="batchNo">
<el-input v-model="queryParams.batchNo" placeholder="流水号" clearable @keyup.enter.native="handleQuery" />
</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-input v-model="queryParams.batchPayName" placeholder="请输入支付名称" clearable
@keyup.enter.native="handleQuery" />
......@@ -46,7 +55,12 @@
<el-table v-loading="loading" :data="payOrderList" height="700px">
<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">
<template slot-scope="scope">
......@@ -86,10 +100,17 @@
<!-- <el-table-column label="支付备注" align="center" prop="payRemark" />-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<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 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>
<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"
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>
</el-table-column>
</el-table>
......@@ -107,7 +128,7 @@
</template>
<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'
export default {
......@@ -142,12 +163,14 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
dataSource: null,
batchPayName: null,
payerCompanyId: null,
payerAccName: null,
payerAccNo: null,
batchNo: null,
outBatchNo: null,
importBatchNo: null,
payTitle: null,
payRemark: null,
transactionTime: null,
......@@ -213,6 +236,18 @@ export default {
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) {
if (row && row.id) {
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 @@
</el-dialog>
<!-- 点击签约后查看合同 -->
<el-dialog title="签约合同" :visible.sync="signContractPanelVisible" append-to-body width="45%" center>
<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:500px"></iframe>
<el-steps :active="active" finish-status="success" simple style="margin-top: 20px">
<el-step title="1、签订合同"></el-step>
<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">
<el-button type="primary" @click="signContractPaneSubmit">确 定</el-button>
<el-button @click="signContractPanelCancel">取 消</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
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 { signContractFile } from '@/api/business/onlineTaskInfo'
export default {
name: "taxSignComponent",
......@@ -85,6 +101,11 @@ export default {
},
data() {
return {
// 合同url
contractUrl: '',
// 步骤条
active: 1,
payerCompanyArr: [],
signForm: {
taxUnitId: null,
......@@ -178,7 +199,48 @@ export default {
this.signContractPanelVisible = false;
},
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 @@
<el-table-column label="月开票额度" align="center" prop="invoiceLimit" />
<el-table-column label="可开票类型" align="center" prop="invoiceTypes">
<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" />
</template>
</el-table-column>
......@@ -110,6 +110,13 @@
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['business:unitInfo:remove']">删除
</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>
</el-table-column>
</el-table>
......@@ -316,6 +323,14 @@ export default {
viewSealInfo(row) {
const type = "hr";
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 @@
<el-dialog title="绑定账户" :visible.sync="bindAcc.panel" width="300">
<el-form label-width="80px">
<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-select>
</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>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitBind">确定</el-button>
......@@ -343,6 +350,7 @@ import { formatDate } from '@/utils'
import QrCodeComponent from '@/components/QrCode.vue'
import TaxSignComponent from '@/views/business/salaryAccount/taxSignComponent.vue'
import { bindUnitAcc, listAllHasNoOpenInfo, listAllUnitAccInfo, listAllUnitInfo } from '@/api/business/unitInfo'
import { listAllCompanyPayChannel, signChannel } from '@/api/business/companyPayChannel'
export default {
name: 'SalaryAccount',
components: { TaxSignComponent, QrCodeComponent, AccSelect },
......@@ -354,6 +362,7 @@ export default {
taxUnitList: [],
codePanel: false,
codeUrl: '',
channelCode: ''
},
billPanel: false,
qrPayPanel: {
......@@ -431,7 +440,8 @@ export default {
billTotal: 0,
userInfoName: null,
accountCollection: [],
loading: false
loading: false,
companyPayChannelList: null,
}
},
created() {
......@@ -604,7 +614,10 @@ export default {
})
},
goRegister() {
listAllHasNoOpenInfo().then(resp => {
this.bindAcc.companyId = null;
this.bindAcc.channelCode = null;
this.companyPayChannelList = [];
listAllUnitInfo().then(resp => {
if (200 === resp.code) {
this.bindAcc.taxUnitList = resp.data
}
......@@ -613,16 +626,30 @@ export default {
})
},
submitBind() {
const singForm = {
companyId: this.bindAcc.companyId,
unitType: 2,
channelCode: this.bindAcc.channelCode
}
this.$modal.loading()
bindUnitAcc(this.bindAcc.companyId).then(resp => {
if (200 === resp.code) {
this.bindAcc.codeUrl = resp.data
signChannel(singForm).then(resp => {
this.bindAcc.codePanel = true
}
this.bindAcc.codeUrl = resp.data
}).finally(() => {
this.$modal.closeLoading()
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 @@
v-if="scope.row.signStatus && 1 === scope.row.signStatus" v-hasPermi="['business:laborSign:add']">签约合约
</el-button>
<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-hasPermi="['business:unitInfo:add']">分配账户
v-if="scope.row.signStatus && 2 === scope.row.signStatus"
v-hasPermi="['business:laborSign:add']">代发账户
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 点击签约后查看合同 -->
<el-dialog title="签约合同" :visible.sync="doAgreePanelVisible" width="58%" center>
<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>
<iframe :src=this.contractUrl frameborder="0" style="width: 100%;height:600px"></iframe>
<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>
</div>
</el-dialog>
......@@ -67,13 +65,16 @@
<script>
import { querySignList } from '@/api/business/unitInfo'
import { agreeSign, giveAccToLabor } from '@/api/business/laborSign'
import { agreeSeal, agreeSign, confirmSignContract, giveAccToLabor } from '@/api/business/laborSign'
export default {
name: 'signList',
dicts: ['tax_labor_sign_status'],
data() {
return {
// 合同url
contractUrl: '',
// 遮罩层
loading: true,
// 显示搜索条件
......@@ -127,8 +128,62 @@ export default {
},
doAgree(row) {
this.doAgreeData = row
this.contractUrl = row.contractUrl
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() {
this.$confirm(`确认签订与${this.doAgreeData.inviterName}的合约吗?`, '操作提示', {
confirmButtonText: '确定',
......@@ -148,33 +203,7 @@ export default {
this.doAgreePanelVisible = false
},
givePayAcc(row) {
this.$confirm(`确认给[${row.inviterName}]分配付款专户吗?`, '操作提示', {
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.$router.push({ path: '/business/laborAcc', query: { signId: row.id } })
}
}
}
......
This diff is collapsed.
......@@ -11,13 +11,13 @@
</el-form-item>
<el-form-item prop="password">
<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" />
</el-input>
</el-form-item>
<el-form-item prop="code" v-if="captchaEnabled">
<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" />
</el-input>
<div class="login-code">
......@@ -37,7 +37,7 @@
<el-checkbox v-model="loginForm.rememberMe" style="margin:12px 0px 25px 0px;">记住密码</el-checkbox>
<el-form-item 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-else>登 录 中...</span>
</el-button>
......@@ -236,7 +236,7 @@ export default {
// this.loginRules.smsCode = [{ required: true, trigger: "change", message: "请输入短信验证码" }]
// this.$refs.loginForm.validate(valid => {
// if (valid) {
this.loginForm.smsCode = code
// this.loginForm.smsCode = code
this.loading = true;
if (this.loginForm.rememberMe) {
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