提交 019d2cfe authored 作者: 赵世杰's avatar 赵世杰

账单开发

上级 4e81094e
...@@ -87,4 +87,36 @@ export function payBillPayment(query) { ...@@ -87,4 +87,36 @@ export function payBillPayment(query) {
method: 'post', method: 'post',
data: query, data: query,
}) })
}
// 合同账单主列表
export function contractBillList(query) {
return request({
url: "/djl-contract/contract/bill/query/list",
method: 'get',
params: query,
})
}
// 合同账单主列表
export function proContractBillList(query) {
return request({
url: "/djl-contract/pro/contract/bill/query/list",
method: 'get',
params: query,
})
}
// 合同账单结算
export function contractBillSettle(query) {
return request({
url: "/djl-contract/contract/bill/settle",
method: 'post',
data: query,
})
}
// 合同账单收款
export function contractBillPayment(query) {
return request({
url: "/djl-contract/contract/bill/collect",
method: 'post',
data: query,
})
} }
\ No newline at end of file
...@@ -179,6 +179,12 @@ export const constantRoutes = [ ...@@ -179,6 +179,12 @@ export const constantRoutes = [
name: 'salaryStatement', name: 'salaryStatement',
meta: { title: '发薪账单', icon: 'form' } meta: { title: '发薪账单', icon: 'form' }
}, },
{
path: 'electronicContractBill',
component: () => import('@/views/bill/electronicContractBill/index'),
name: 'electronicContractBill',
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="totalTimes" />
<el-table-column label="服务费总额" prop="totalFee" />
<el-table-column label="操作" 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 == 'payment' && row.platState == '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>
<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="project" />
<el-table-column label="签订合同人数" align="center" prop="totalTimes" />
<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 { contractBillList, proContractBillList, contractBillPayment, contractBillSettle, queryAllDispatch } from "@/api/bill"
const { proxy } = getCurrentInstance();
const list = ref([{}]);
const loading = ref(false);
const options = ref([]); // 派遣下拉
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: '',
}) // 弹窗列表查询条件
/** 查询明细 */
function handleDetails(row) {
dialogFormVisible.value = true;
detailLoading.value = true;
detailTotal.value = 0;
detailList.value = [];
detailQueryParams.value.page = 1;
detailQueryParams.value.limit = 10;
detailQueryParams.value.billDate = row.billYM;
detailQueryParams.value.baseCode = row.baseCode;
getDetailList()
}
/** 查询明细 */
function getDetailList() {
proContractBillList(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-contract/contract/bill/export", { billYM: row.billYM }, `合同账单导出结果.xlsx`);
}
// 结算
function handleSettle(row) {
proxy.$modal.confirm('是否确认结算当前账单?').then(function () {
return contractBillSettle({
id: row.id,
baseCode: row.baseCode,
});
}).then((res) => {
getList();
proxy.$modal.msgSuccess(res.code);
}).catch(() => { });
}
// 收款
function handlePayment(row) {
proxy.$modal.confirm('是否确认收款?').then(function () {
return contractBillPayment({
id: row.id,
baseCode: row.baseCode,
});
}).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;
contractBillList(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
...@@ -5,20 +5,20 @@ ...@@ -5,20 +5,20 @@
<el-date-picker v-model="queryParams.billDate" type="month" placeholder="账单年月" value-format="YYYY-MM" /> <el-date-picker v-model="queryParams.billDate" type="month" placeholder="账单年月" value-format="YYYY-MM" />
</el-form-item> </el-form-item>
<el-form-item label="派遣" prop="baseCode"> <el-form-item label="派遣" prop="baseCode">
<el-select <el-select
v-model="queryParams.baseCode" v-model="queryParams.baseCode"
placeholder="请选择" placeholder="请选择"
style="width: 240px" style="width: 240px"
filterable filterable
> >
<el-option <el-option
v-for="item in options" v-for="item in options"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
...@@ -39,8 +39,7 @@ ...@@ -39,8 +39,7 @@
<template #default="{ row }"> <template #default="{ row }">
<el-button v-if="row.state == 'none'" link type="primary" icon="Memo" <el-button v-if="row.state == 'none'" link type="primary" icon="Memo"
@click="handleSettle(row)">结算</el-button> @click="handleSettle(row)">结算</el-button>
<el-button v-if="row.state == 'settle'" link type="primary" icon="Tickets" <el-button v-if="row.state == 'payment' && row.platState == 'settle'" link type="primary" icon="Tickets" @click="handlePayment(row)">收款</el-button>
@click="handlePayment(row)">收款</el-button>
<el-button link type="primary" icon="Edit" @click="handleDetails(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> <el-button link type="primary" icon="Download" @click="exportData(row)">导出</el-button>
</template> </template>
...@@ -139,6 +138,7 @@ function handleSettle(row) { ...@@ -139,6 +138,7 @@ function handleSettle(row) {
proxy.$modal.confirm('是否确认结算当前账单?').then(function () { proxy.$modal.confirm('是否确认结算当前账单?').then(function () {
return payBillSettle({ return payBillSettle({
id: row.id, id: row.id,
baseCode: row.baseCode,
}); });
}).then((res) => { }).then((res) => {
getList(); getList();
...@@ -150,6 +150,7 @@ function handlePayment(row) { ...@@ -150,6 +150,7 @@ function handlePayment(row) {
proxy.$modal.confirm('是否确认收款?').then(function () { proxy.$modal.confirm('是否确认收款?').then(function () {
return payBillPayment({ return payBillPayment({
id: row.id, id: row.id,
baseCode: row.baseCode,
}); });
}).then((res) => { }).then((res) => {
getList(); getList();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论