parent
0c01b91b86
commit
6cd29f6392
@ -1,240 +1,413 @@
|
||||
<template>
|
||||
<div style="padding: 0 20px;">
|
||||
<lx-header icon="md-apps" text="付款登记" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
|
||||
<div style="padding: 0 20px">
|
||||
<lx-header
|
||||
icon="md-apps"
|
||||
text="付款登记"
|
||||
style="margin-bottom: 10px; border: 0px; margin-top: 15px"
|
||||
>
|
||||
<div slot="content"></div>
|
||||
<slot>
|
||||
<span style="padding: 0 6px;word-break: keep-all;">创建日期</span>
|
||||
<span style="padding: 0 6px; word-break: keep-all">创建日期</span>
|
||||
<span>
|
||||
<DatePicker :value="selectDate" placeholder="请选择日期" type="date" placement="bottom-start" style="width: 180px"
|
||||
@on-change="(e)=>selectDate = e"></DatePicker>
|
||||
<DatePicker
|
||||
:value="selectDate"
|
||||
placeholder="请选择日期"
|
||||
type="date"
|
||||
placement="bottom-start"
|
||||
style="width: 180px"
|
||||
@on-change="(e) => (selectDate = e)"
|
||||
></DatePicker>
|
||||
</span>
|
||||
|
||||
<span style="padding: 0 6px;word-break: keep-all;">关键字</span>
|
||||
<span style="padding: 0 6px; word-break: keep-all">关键字</span>
|
||||
<span>
|
||||
<Input v-model="keywords" placeholder="请输入关键字" style="width: 180px"></Input>
|
||||
<Input
|
||||
v-model="keywords"
|
||||
placeholder="请输入关键字"
|
||||
style="width: 180px"
|
||||
></Input>
|
||||
</span>
|
||||
<span style="padding: 0 6px;word-break: keep-all;">
|
||||
状态
|
||||
</span>
|
||||
<Select v-model="status" clearable placeholder="请选择" style="width:100px;">
|
||||
<Option v-for="item in [{label:'待审核',value:0},{label:'已审核',value:1}]" :key="item.value" :value="item.value">
|
||||
<span style="padding: 0 6px; word-break: keep-all"> 状态 </span>
|
||||
<Select
|
||||
v-model="status"
|
||||
clearable
|
||||
placeholder="请选择"
|
||||
style="width: 100px"
|
||||
>
|
||||
<Option
|
||||
v-for="item in [
|
||||
{ label: '待审核', value: 0 },
|
||||
{ label: '已审核', value: 1 },
|
||||
]"
|
||||
:key="item.value"
|
||||
:value="item.value"
|
||||
>
|
||||
{{ item.label }}
|
||||
</Option>
|
||||
</Select>
|
||||
<Button type="primary" style="margin-left: 10px" ghost
|
||||
@click="contractId = '',pageIndex = 1,keywords = '',selectDate = ''">重置</Button>
|
||||
<Button type="primary" style="margin-left: 10px" @click="getFundLogs">查询</Button>
|
||||
<Button
|
||||
type="primary"
|
||||
style="margin-left: 10px"
|
||||
ghost
|
||||
@click="
|
||||
(contractId = ''),
|
||||
(pageIndex = 1),
|
||||
(keywords = ''),
|
||||
(selectDate = '')
|
||||
"
|
||||
>重置</Button
|
||||
>
|
||||
<Button type="primary" style="margin-left: 10px" @click="getFundLogs"
|
||||
>查询</Button
|
||||
>
|
||||
</slot>
|
||||
</lx-header>
|
||||
|
||||
<xy-table :list="list" :table-item="table">
|
||||
<template v-slot:btns>
|
||||
<el-table-column label="操作" fixed="right" width="200" header-align="center">
|
||||
<el-table-column
|
||||
label="操作"
|
||||
fixed="right"
|
||||
width="200"
|
||||
header-align="center"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<template v-if="scope.row.status === 0&&type==1">
|
||||
<Poptip placement="bottom" confirm :transfer="true" title="确认要删除吗" @on-ok="deleteFundLog(scope.row)">
|
||||
<Button size="small" type="error" style="margin-left: 10px;margin-bottom: 4px" ghost>删除</Button>
|
||||
<template v-if="scope.row.status === 0 && type == 1">
|
||||
<Poptip
|
||||
placement="bottom"
|
||||
confirm
|
||||
:transfer="true"
|
||||
title="确认要删除吗"
|
||||
@on-ok="deleteFundLog(scope.row)"
|
||||
>
|
||||
<Button
|
||||
size="small"
|
||||
type="error"
|
||||
style="margin-left: 10px; margin-bottom: 4px"
|
||||
ghost
|
||||
>删除</Button
|
||||
>
|
||||
</Poptip>
|
||||
|
||||
<Button size="small" type="primary" style="margin-left: 10px;margin-bottom: 4px"
|
||||
@click="$refs['detailPaymentRegistration'].getFundLog(scope.row.id),$refs['detailPaymentRegistration'].isShow = true">编辑</Button>
|
||||
<Button
|
||||
size="small"
|
||||
type="primary"
|
||||
style="margin-left: 10px; margin-bottom: 4px"
|
||||
@click="
|
||||
$refs['detailPaymentRegistration'].getFundLog(scope.row.id),
|
||||
($refs['detailPaymentRegistration'].isShow = true)
|
||||
"
|
||||
>编辑</Button
|
||||
>
|
||||
</template>
|
||||
<Button v-if='false' size="small" type="primary" style="margin-left: 10px;margin-bottom: 4px"
|
||||
@click="$refs['printRegistration'].getDetailFundLog(scope.row.id),$refs['printRegistration'].isShow = true">打印</Button>
|
||||
<Button
|
||||
v-if="false"
|
||||
size="small"
|
||||
type="primary"
|
||||
style="margin-left: 10px; margin-bottom: 4px"
|
||||
@click="
|
||||
$refs['printRegistration'].getDetailFundLog(scope.row.id),
|
||||
($refs['printRegistration'].isShow = true)
|
||||
"
|
||||
>打印</Button
|
||||
>
|
||||
<Button
|
||||
v-if="!scope.row.flow_id"
|
||||
size="small"
|
||||
type="primary"
|
||||
style="margin-left: 10px; margin-bottom: 4px"
|
||||
@click="toOutPay(scope.row)"
|
||||
>
|
||||
提交
|
||||
</Button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
</xy-table>
|
||||
|
||||
<div style="display: flex;justify-content: flex-end;">
|
||||
<Page :total="total" show-elevator @on-change="pageChange" show-sizer @on-page-size-change="pageSizeChange" />
|
||||
<div style="display: flex; justify-content: flex-end">
|
||||
<Page
|
||||
:total="total"
|
||||
show-elevator
|
||||
@on-change="pageChange"
|
||||
show-sizer
|
||||
@on-page-size-change="pageSizeChange"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<printRegistration ref="printRegistration"></printRegistration>
|
||||
|
||||
<detailPaymentRegistration ref="detailPaymentRegistration" @success="getFundLogs"></detailPaymentRegistration>
|
||||
<detailPaymentRegistration
|
||||
ref="detailPaymentRegistration"
|
||||
@success="getFundLogs"
|
||||
></detailPaymentRegistration>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
getFundLog,
|
||||
delFundLog
|
||||
} from "@/api/paymentRegistration/fundLog"
|
||||
import {
|
||||
parseTime
|
||||
} from "@/utils"
|
||||
import {
|
||||
Message
|
||||
} from "element-ui";
|
||||
import { detailContract } from "@/api/contract/contract";
|
||||
import { fundlogFlow } from "@/api/out";
|
||||
import { getFundLog, delFundLog } from "@/api/paymentRegistration/fundLog";
|
||||
import { parseTime } from "@/utils";
|
||||
import { Message } from "element-ui";
|
||||
|
||||
import printRegistration from "./components/printRegistration";
|
||||
import detailPaymentRegistration from "./components/detailPaymentRegistration";
|
||||
export default {
|
||||
components: {
|
||||
printRegistration,
|
||||
detailPaymentRegistration
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
selectDate: '',
|
||||
keywords: '',
|
||||
list: [],
|
||||
contractId: '',
|
||||
total: 0,
|
||||
pageIndex: 1,
|
||||
pageSize: 10,
|
||||
is_auth: 1,
|
||||
status: "",
|
||||
table: [{
|
||||
label: "项目名称",
|
||||
minWidth: 250,
|
||||
prop: 'contract.name',
|
||||
align: 'left',
|
||||
fixed: 'left'
|
||||
import printRegistration from "./components/printRegistration";
|
||||
import detailPaymentRegistration from "./components/detailPaymentRegistration";
|
||||
export default {
|
||||
components: {
|
||||
printRegistration,
|
||||
detailPaymentRegistration,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
window: {
|
||||
width: 0,
|
||||
height: 0,
|
||||
top: 0,
|
||||
left: 0,
|
||||
},
|
||||
selectDate: "",
|
||||
keywords: "",
|
||||
list: [],
|
||||
contractId: "",
|
||||
total: 0,
|
||||
pageIndex: 1,
|
||||
pageSize: 10,
|
||||
is_auth: 1,
|
||||
status: "",
|
||||
table: [
|
||||
{
|
||||
label: "项目名称",
|
||||
minWidth: 250,
|
||||
prop: "contract.name",
|
||||
align: "left",
|
||||
fixed: "left",
|
||||
},
|
||||
{
|
||||
label: "付款申请金额(元)",
|
||||
prop: "apply_money",
|
||||
align: "right",
|
||||
width: 180,
|
||||
formatter: (v1, v2, value) => {
|
||||
return Number(value)
|
||||
.toFixed(2)
|
||||
.replace(/(\d)(?=(\d{3})+\.)/g, "$1,");
|
||||
},
|
||||
{
|
||||
label: "付款申请金额(元)",
|
||||
prop: "apply_money",
|
||||
align: 'right',
|
||||
width: 180,
|
||||
formatter: (v1, v2, value) => {
|
||||
return Number(value).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,')
|
||||
}
|
||||
},
|
||||
{
|
||||
label: "实际支付金额(元)",
|
||||
prop: "act_money",
|
||||
align: "right",
|
||||
width: 180,
|
||||
formatter: (v1, v2, value) => {
|
||||
return Number(value)
|
||||
.toFixed(2)
|
||||
.replace(/(\d)(?=(\d{3})+\.)/g, "$1,");
|
||||
},
|
||||
{
|
||||
label: '实际支付金额(元)',
|
||||
prop: "act_money",
|
||||
align: 'right',
|
||||
width: 180,
|
||||
formatter: (v1, v2, value) => {
|
||||
return Number(value).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,')
|
||||
},
|
||||
{
|
||||
label: "款项类型",
|
||||
prop: "type",
|
||||
width: 120,
|
||||
},
|
||||
{
|
||||
label: "预算计划",
|
||||
width: 320,
|
||||
align: "left",
|
||||
customFn: (row) => {
|
||||
if (row.act_plan_link.length > 0) {
|
||||
return row.act_plan_link.map((item) => {
|
||||
return (
|
||||
<div>
|
||||
[{item.plan?.year}] - {item.plan?.name}
|
||||
<br />
|
||||
[使用金额] {item.use_money}元{" "}
|
||||
</div>
|
||||
);
|
||||
});
|
||||
}
|
||||
},
|
||||
{
|
||||
label: "款项类型",
|
||||
prop: "type",
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
prop: "status",
|
||||
label: "状态",
|
||||
width: 120,
|
||||
formatter: (cell, data, value) => {
|
||||
if (value === 0) return "待审核";
|
||||
else return "已审核";
|
||||
},
|
||||
{
|
||||
label: "预算计划",
|
||||
width: 320,
|
||||
align: "left",
|
||||
customFn: (row) => {
|
||||
if (row.act_plan_link.length > 0) {
|
||||
return row.act_plan_link.map(item => {
|
||||
return (
|
||||
<div>
|
||||
[{item.plan?.year}] - {item.plan?.name}
|
||||
<br/>
|
||||
[使用金额] {item.use_money}元 </div>
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
label: "次数",
|
||||
prop: "pay_count",
|
||||
width: 95,
|
||||
formatter: (cell, data, value) => {
|
||||
return value + 1;
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "是否为最后一笔",
|
||||
prop: "is_end",
|
||||
width: 145,
|
||||
formatter: (cell, data, value) => {
|
||||
return value == 1 ? "是" : "否";
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "经办人",
|
||||
minWidth: 160,
|
||||
prop: "admin.name",
|
||||
align: "center",
|
||||
},
|
||||
{
|
||||
label: "业务科室",
|
||||
minWidth: 160,
|
||||
prop: "department.name",
|
||||
align: "center",
|
||||
},
|
||||
{
|
||||
label: "备注",
|
||||
minWidth: 460,
|
||||
prop: "remark",
|
||||
align: "left",
|
||||
},
|
||||
{
|
||||
label: "创建信息",
|
||||
prop: "created_at",
|
||||
width: 160,
|
||||
formatter: (cell, data, value) => {
|
||||
return parseTime(new Date(value), "{y}-{m}-{d}");
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
async toOutPay(row) {
|
||||
let payments = [];
|
||||
const actNumsTotal = () => {
|
||||
let total = 0;
|
||||
payments.map((item) => {
|
||||
if (Number(item.act_money)) {
|
||||
total++;
|
||||
}
|
||||
});
|
||||
return total;
|
||||
};
|
||||
const totalMoney = () => {
|
||||
let total = 0.0;
|
||||
payments.map((item) => {
|
||||
total += Number(item.act_money);
|
||||
});
|
||||
return total.toFixed(2);
|
||||
};
|
||||
const contract = await detailContract({ id: row.contract_id });
|
||||
payments =
|
||||
(
|
||||
await getFundLog({
|
||||
contract_id: row.contract_id,
|
||||
})
|
||||
)?.data || [];
|
||||
console.log(contract);
|
||||
let typeMap = new Map([
|
||||
["货物", "货物采购"],
|
||||
["服务", "服务采购"],
|
||||
["其他", "其他项目"],
|
||||
]);
|
||||
let baseInfo = {
|
||||
title: contract?.name,
|
||||
xiangmuleibie: typeMap.get(
|
||||
[
|
||||
{
|
||||
prop: 'status',
|
||||
label: '状态',
|
||||
width: 120,
|
||||
formatter: (cell, data, value) => {
|
||||
if (value === 0) return '待审核'
|
||||
else return '已审核'
|
||||
}
|
||||
},
|
||||
{
|
||||
label: "次数",
|
||||
prop: "pay_count",
|
||||
width: 95,
|
||||
formatter: (cell, data, value) => {
|
||||
return value + 1;
|
||||
}
|
||||
},
|
||||
{
|
||||
label: "是否为最后一笔",
|
||||
prop: "is_end",
|
||||
width: 145,
|
||||
formatter: (cell, data, value) => {
|
||||
return value == 1 ? "是" : "否"
|
||||
}
|
||||
},
|
||||
{
|
||||
label: "经办人",
|
||||
minWidth: 160,
|
||||
prop: 'admin.name',
|
||||
align: 'center'
|
||||
label: "服务",
|
||||
value: 1,
|
||||
},
|
||||
{
|
||||
label: "业务科室",
|
||||
minWidth: 160,
|
||||
prop: 'department.name',
|
||||
align: 'center'
|
||||
label: "货物",
|
||||
value: 2,
|
||||
},
|
||||
{
|
||||
label: "备注",
|
||||
minWidth: 460,
|
||||
prop: 'remark',
|
||||
align: 'left'
|
||||
label: "工程",
|
||||
value: 3,
|
||||
},
|
||||
{
|
||||
label: "创建信息",
|
||||
prop: "created_at",
|
||||
width: 160,
|
||||
formatter: (cell, data, value) => {
|
||||
return parseTime(new Date(value), '{y}-{m}-{d}')
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
pageSizeChange(e) {
|
||||
this.pageSize = e;
|
||||
this.pageIndex = 1;
|
||||
this.getFundLogs()
|
||||
},
|
||||
pageChange(e) {
|
||||
this.pageIndex = e
|
||||
this.getFundLogs()
|
||||
},
|
||||
].find((item) => {
|
||||
return item.value === contract.type;
|
||||
})?.label
|
||||
),
|
||||
things: contract?.name,
|
||||
hetongbianhao: contract?.number,
|
||||
out_pay_id: row?.id,
|
||||
reason: row?.remark,
|
||||
yizhifucishu: actNumsTotal(),
|
||||
yizhifujine: totalMoney(),
|
||||
zongjia: contract?.money,
|
||||
zhifucishu: payments.length,
|
||||
total: row?.discount_money,
|
||||
//"承包商\\供应商":row.supply
|
||||
};
|
||||
let url = `${
|
||||
process.env.VUE_APP_OUT_OLD
|
||||
}?s=/flow/add/modid/24&auth_token=${
|
||||
this.$store.getters.oa_token
|
||||
}&out_contract_id=${row.id}&contract_json=${JSON.stringify(baseInfo)}`;
|
||||
let signProcess = window.open(
|
||||
url,
|
||||
"signProcess",
|
||||
`top=${this.window.top},left=${this.window.left},width=${this.window.width},height=${this.window.height},location=0`
|
||||
);
|
||||
},
|
||||
|
||||
async getFundLogs() {
|
||||
const res = await getFundLog({
|
||||
page_size: this.pageSize,
|
||||
page: this.pageIndex,
|
||||
contract_id: this.contractId,
|
||||
keyword: this.keywords,
|
||||
date: this.selectDate,
|
||||
is_auth: this.is_auth,
|
||||
status: this.status,
|
||||
})
|
||||
this.list = res.data
|
||||
this.total = res.total
|
||||
},
|
||||
pageSizeChange(e) {
|
||||
this.pageSize = e;
|
||||
this.pageIndex = 1;
|
||||
this.getFundLogs();
|
||||
},
|
||||
pageChange(e) {
|
||||
this.pageIndex = e;
|
||||
this.getFundLogs();
|
||||
},
|
||||
|
||||
deleteFundLog(row) {
|
||||
delFundLog({
|
||||
id: row.id
|
||||
}).then(res => {
|
||||
Message({
|
||||
type: 'success',
|
||||
message: '操作成功'
|
||||
})
|
||||
this.getFundLogs()
|
||||
})
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.contractId = this.$route.query.contractId
|
||||
async getFundLogs() {
|
||||
await fundlogFlow();
|
||||
const res = await getFundLog({
|
||||
page_size: this.pageSize,
|
||||
page: this.pageIndex,
|
||||
contract_id: this.contractId,
|
||||
keyword: this.keywords,
|
||||
date: this.selectDate,
|
||||
is_auth: this.is_auth,
|
||||
status: this.status,
|
||||
});
|
||||
this.list = res.data;
|
||||
this.total = res.total;
|
||||
},
|
||||
|
||||
this.getFundLogs()
|
||||
},
|
||||
created() {
|
||||
let type = parseInt(this.$route.path.split("_")[1]);
|
||||
this.type = this.is_auth = type;
|
||||
}
|
||||
}
|
||||
deleteFundLog(row) {
|
||||
delFundLog({
|
||||
id: row.id,
|
||||
}).then((res) => {
|
||||
Message({
|
||||
type: "success",
|
||||
message: "操作成功",
|
||||
});
|
||||
this.getFundLogs();
|
||||
});
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.window.width = screen.availWidth * 0.95;
|
||||
this.window.height = screen.availHeight * 0.95;
|
||||
this.window.top = (window.screen.height - 30 - this.window.height) / 2;
|
||||
this.window.left = (window.screen.width - 10 - this.window.width) / 2;
|
||||
this.contractId = this.$route.query.contractId;
|
||||
|
||||
this.getFundLogs();
|
||||
},
|
||||
created() {
|
||||
let type = parseInt(this.$route.path.split("_")[1]);
|
||||
this.type = this.is_auth = type;
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
</style>
|
||||
<style scoped lang="scss"></style>
|
||||
|
||||
Loading…
Reference in new issue