提交 4e81094e authored 作者: 赵世杰's avatar 赵世杰

账单开发

上级 f2f45377
......@@ -54,4 +54,37 @@ export function billCollect(query) {
method: 'post',
data: query,
})
}
// 查询发薪账单列表
export function payBillList(query) {
return request({
url: "/djl-salary/salary/pay/bill/l",
method: 'get',
params: query,
})
}
// 查询发薪账单明细
export function payBillBatchList(query) {
return request({
url: "/djl-salary/salary/pay/bill/batch/l",
method: 'get',
params: query,
})
}
// 发薪账单结算
export function payBillSettle(query) {
return request({
url: "/djl-salary/salary/pay/bill/settle",
method: 'post',
data: query,
})
}
// 发薪账单收款
export function payBillPayment(query) {
return request({
url: "/djl-salary/salary/pay/bill/collect",
method: 'post',
data: query,
})
}
\ No newline at end of file
......@@ -64,7 +64,7 @@ export const constantRoutes = [
"hidden": true,
"component": () => import('@/views/dispatch/salary_advance_interval'),
"meta": {
"title": "预支工资设置",
"title": "费用设置",
"icon": "online",
"preTitle":"客户(派遣公司)管理",
"activeMenu":"/dispatch"
......@@ -154,6 +154,7 @@ export const constantRoutes = [
path: '/',
component: Layout,
redirect: '/bill',
meta: { title: '账单管理', icon: 'redis' },
children: [
{
path: 'bill',
......@@ -172,6 +173,12 @@ export const constantRoutes = [
"activeMenu":"/bill"
}
},
{
path: 'salaryStatement',
component: () => import('@/views/bill/salaryStatement/index'),
name: 'salaryStatement',
meta: { title: '发薪账单', icon: 'form' }
},
]
}
// {
......
<template>
<div class="electronicContractBill">
<el-form :model="queryParams" ref="queryRef" :inline="true">
<el-form-item label="账单年月" prop="billDate">
<el-date-picker v-model="queryParams.billDate" type="month" placeholder="账单年月" value-format="YYYY-MM" />
</el-form-item>
<el-form-item label="派遣" prop="baseCode">
<el-select
v-model="queryParams.baseCode"
placeholder="请选择"
style="width: 240px"
filterable
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="list">
<el-table-column label="账单年月" prop="billYM" />
<el-table-column label="累计发放人次" prop="totalPerson" />
<el-table-column label="服务费总额" prop="totalFee" />
<el-table-column label="状态" align="center">
<template #default="{ row }">
<el-tag type="warning" v-if="row.state == 'none'">未结算</el-tag>
<el-tag v-if="row.state == 'settle'">已结算</el-tag>
<el-tag type="success" v-if="row.state == 'payment'">已付款</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="240" align="center">
<template #default="{ row }">
<el-button v-if="row.state == 'none'" link type="primary" icon="Memo"
@click="handleSettle(row)">结算</el-button>
<el-button v-if="row.state == 'settle'" link type="primary" icon="Tickets"
@click="handlePayment(row)">收款</el-button>
<el-button link type="primary" icon="Edit" @click="handleDetails(row)">明细</el-button>
<el-button link type="primary" icon="Download" @click="exportData(row)">导出</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.page" v-model:limit="queryParams.limit"
@pagination="getList" />
<el-dialog v-model="dialogFormVisible" title="明细" width="1000">
<el-form :inline="true">
<el-form-item label="批次号" prop="batch">
<el-input v-model="detailQueryParams.batch" placeholder="请输入批次号" style="width: 220px"
@keyup.enter="getDetailList" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="getDetailList">搜索</el-button>
<el-button icon="Refresh" @click="resetDetailQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="detailLoading" :data="detailList">
<el-table-column label="账单年月" align="center" prop="billYM" />
<el-table-column label="批次号" align="center" prop="batch" />
<el-table-column label="发薪人数" align="center" prop="totalPerson" />
<el-table-column label="服务费" align="center" prop="totalFee" />
</el-table>
<div style="position: relative;">
<pagination v-show="detailTotal > 0" :total="detailTotal" v-model:page="detailQueryParams.page"
v-model:limit="detailQueryParams.limit" @pagination="getDetailList" />
</div>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="dialogFormVisible = false">确定</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref } from "vue";
import { payBillList, payBillBatchList, payBillPayment, payBillSettle,queryAllDispatch } from "@/api/bill"
const { proxy } = getCurrentInstance();
const options = ref([]); // 派遣下拉
const list = ref([{}]);
const loading = ref(false);
const total = ref(0); // 分页
const queryParams = ref({
billDate: '',
baseCode: '',
page: 1,
limit: 10
}); // 查询参数
const detailList = ref([]);
const detailLoading = ref(false);
const dialogFormVisible = ref(false); // 弹窗
const detailTotal = ref(0);
const detailQueryParams = ref({
page: 1,
limit: 10,
baseCode: '',
billDate: '',
batch: '',
}) // 弹窗列表查询条件
/** 查询明细 */
function handleDetails(row) {
dialogFormVisible.value = true;
detailLoading.value = true;
detailTotal.value = 0;
detailList.value = [];
detailQueryParams.value.page = 1;
detailQueryParams.value.limit = 10;
detailQueryParams.value.baseCode = row.baseCode;
detailQueryParams.value.billDate = row.billYM;
detailQueryParams.value.batch = '';
getDetailList()
}
/** 查询明细 */
function getDetailList() {
payBillBatchList(detailQueryParams.value).then(res => {
detailLoading.value = false;
detailTotal.value = res.count;
detailList.value = res.data;
})
}
// 重置弹窗明细查询条件
function resetDetailQuery() {
detailQueryParams.value.name = '';
detailQueryParams.value.idNo = '';
getDetailList()
}
// 导出
function exportData(row) {
proxy.download("/djl-salary/advance/salary/bill/export", { billDate: row.billYM }, `发薪账单导出结果.xlsx`);
}
// 结算
function handleSettle(row) {
proxy.$modal.confirm('是否确认结算当前账单?').then(function () {
return payBillSettle({
id: row.id,
});
}).then((res) => {
getList();
proxy.$modal.msgSuccess(res.code);
}).catch(() => { });
}
// 收款
function handlePayment(row) {
proxy.$modal.confirm('是否确认收款?').then(function () {
return payBillPayment({
id: row.id,
});
}).then((res) => {
getList();
proxy.$modal.msgSuccess(res.code);
}).catch(() => { });
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.page = 1;
queryParams.value.limit = 10;
getList();
}
/** 重置按钮操作 */
function resetQuery() {
queryParams.value = {
billDate: '',
page: 1,
limit: 10
}
handleQuery();
}
/** 查询预支工资账单列表 */
function getList() {
loading.value = true;
payBillList(queryParams.value).then(response => {
list.value = response.data;
total.value = response.count;
loading.value = false;
});
}
function getqueryAllDispatch() {
queryAllDispatch().then(res => {
res.data = res.data || []
options.value = res.data.map(item => {
return {
value: item.baseCode,
label: item.name
}
});
})
}
getqueryAllDispatch();
getList();
</script>
<style lang="scss">
.electronicContractBill {
padding: 20px;
}
</style>
\ No newline at end of file
......@@ -76,7 +76,7 @@
<el-button link type="primary" @click="handleEdit(row)" icon="EditPen">编辑</el-button>
<el-button v-if="row.line_contract==1" link type="primary" @click="handleContract(row,'stop')" icon="TurnOff">停用电子合同</el-button>
<el-button v-else link type="primary" @click="handleContract(row,'start')" icon="Open">启用电子合同</el-button>
<el-button link type="primary" @click="handleSalaryAdvance(row)" icon="Setting">预支工资设置</el-button>
<el-button link type="primary" @click="handleSalaryAdvance(row)" icon="Setting">费用设置</el-button>
</template>
</el-table-column>
</el-table>
......
......@@ -33,7 +33,16 @@
</el-form-item>
<div style="height: 10px;"></div>
</div>
<div class="box">
<el-form-item label="发薪账单手续费" prop="salaryBillFee">
<el-input v-model="formLabelAlign.salaryBillFee" type="number" style="width: 300px;" />
</el-form-item>
<br/>
<el-form-item label="合同账单手续费" prop="contractBillFee">
<el-input v-model="formLabelAlign.contractBillFee" type="number" style="width: 300px;" />
</el-form-item>
<div style="height: 10px;"></div>
</div>
<div class="box">
<div class="boxTitle">平台与客户分成比例</div>
<el-form-item label="比例" style="width: 1080px;" prop="ratio">
......@@ -142,6 +151,14 @@ const data = reactive({
settle_day: [{ required: true, message: "请输入系统结算日", trigger: ['blur', 'change']},
{ pattern : /^\d+$/, message: "请输入正整数", trigger: ['blur', 'change']},
{ validator: validateNumber, trigger: ['blur', 'change']}],
salaryBillFee: [
{ required: true, message: "请输入发薪账单手续费", trigger: ['blur', 'change']},
{ pattern : /^\d+$/, message: "请输入正整数", trigger: ['blur', 'change']}
],
contractBillFee: [
{ required: true, message: "请输入合同账单手续费", trigger: ['blur', 'change']},
{ pattern : /^\d+$/, message: "请输入正整数", trigger: ['blur', 'change']}
],
},
feeRules:{
minAmount: [{required: true,message:"请输入最小次数",trigger:"blur"}],
......@@ -438,6 +455,8 @@ function getSalaryAdvanceInterval(){
formLabelAlign.value.ratio = res.data.salaryAdvanceIntervalList;
formLabelAlign.value.bill_day = res.data.billDay;
formLabelAlign.value.settle_day = res.data.settleDay;
formLabelAlign.value.contractBillFee = res.data.contractBillFee;
formLabelAlign.value.salaryBillFee = res.data.salaryBillFee;
if(res.data.salaryAdvanceIntervalList.length>0){
action.value = "update";
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论