You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
5.0 KiB
167 lines
5.0 KiB
<template>
|
|
<div style="padding: 0 20px">
|
|
<lx-header icon="md-apps" style="margin-bottom: 10px; border: 0px; margin-top: 15px" text="实际使用金额">
|
|
<div slot="content"></div>
|
|
<slot>
|
|
<div class="selects">
|
|
<!-- <div>
|
|
<span style="padding: 0 6px; word-break: keep-all"> 关键字 </span>
|
|
<Input
|
|
v-model="select.keyword"
|
|
placeholder="请输入关键字"
|
|
style="width: 180px"
|
|
></Input>
|
|
</div>
|
|
|
|
<Button style="margin-left: 10px" type="primary" @click=""
|
|
>重置
|
|
</Button>
|
|
<Button style="margin-left: 10px" type="primary" @click="getList"
|
|
>查询</Button
|
|
> -->
|
|
<Button style="margin-left: 10px" type="primary" @click="
|
|
($refs['addActual'].type = 'add'), $refs['addActual'].show()
|
|
">新增</Button>
|
|
</div>
|
|
</slot>
|
|
</lx-header>
|
|
|
|
<xy-table :list="list" :table-item="table">
|
|
<template #btns>
|
|
<el-table-column :fixed="$store.getters.device === 'mobile'?false:'right'" label="操作" align="left" width="200">
|
|
<template #default="{ row }">
|
|
<div style="display: flex;align-items: flex-start;">
|
|
<Button style="margin-right: 4px;" v-if="calculateTotalUseMoney(row.plan_act_links)<=parseFloat(row.money)" ghost size="small" type="primary" @click="execute(row)">确认执行</Button>
|
|
<Button style="margin-right: 4px;" ghost size="small" type="primary" @click="
|
|
($refs['addActual'].id = row.id),
|
|
($refs['addActual'].type = 'editor'),
|
|
$refs['addActual'].show()
|
|
">编辑</Button>
|
|
<Poptip :transfer="true" confirm placement="bottom"
|
|
:title="row.plan_act_links.length>0?'已有执行记录,确认要连同执行记录一同删除?':'确认要删除吗?'" @on-ok="destroy(row)">
|
|
<Button size="small" type="error" ghost>删除</Button>
|
|
</Poptip>
|
|
</div>
|
|
</template>
|
|
</el-table-column>
|
|
</template>
|
|
</xy-table>
|
|
|
|
<div style="display: flex; justify-content: flex-end">
|
|
<Page :total="total" @on-change="e => {
|
|
select.page = e;
|
|
getList()
|
|
}" show-elevator show-sizer @on-page-size-change="e => {
|
|
select.page = 1;
|
|
select.page_size = e;
|
|
getList();
|
|
}" />
|
|
</div>
|
|
|
|
<addActual :plan_department_ids="depts" ref="addActual" @refresh="getList"></addActual>
|
|
<exeActual ref="exeActual" @refresh="getList"></exeActual>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
getActual,
|
|
delActual,
|
|
} from "@/api/budget/actual";
|
|
import addActual from "./components/addActual.vue";
|
|
import exeActual from "./components/exeActual.vue";
|
|
export default {
|
|
components: {
|
|
addActual,
|
|
exeActual
|
|
},
|
|
data() {
|
|
return {
|
|
depts: [],
|
|
select: {
|
|
page: 1,
|
|
page_size: 10,
|
|
},
|
|
visible: false,
|
|
total: 0,
|
|
table: [{
|
|
label: "资金来源所属年份",
|
|
prop: "plan.year",
|
|
width: 120,
|
|
},
|
|
{
|
|
label: "事由",
|
|
prop: "reason",
|
|
width: 180,
|
|
align: 'left'
|
|
},
|
|
{
|
|
label: "资金来源",
|
|
prop: "plan.name",
|
|
align: 'left'
|
|
// width: 180,
|
|
},
|
|
{
|
|
label: "金额",
|
|
prop: "money",
|
|
width: 180,
|
|
},
|
|
{
|
|
label: "已使用金额",
|
|
prop: "use_money",
|
|
width: 180,
|
|
formatter: (row, v2, value) => {
|
|
return this.calculateTotalUseMoney(row.plan_act_links)
|
|
}
|
|
}
|
|
],
|
|
list: [],
|
|
};
|
|
},
|
|
methods: {
|
|
async getList() {
|
|
const res = await getActual(this.select);
|
|
this.list = res.data;
|
|
this.total = res.total || 0;
|
|
},
|
|
calculateTotalUseMoney(plan_act_links) {
|
|
let total = 0;
|
|
for (let i = 0; i < plan_act_links.length; i++) {
|
|
const useMoney = parseFloat(plan_act_links[i].use_money);
|
|
if (!isNaN(useMoney)) {
|
|
total += useMoney;
|
|
}
|
|
}
|
|
return parseFloat(total).toFixed(2);
|
|
},
|
|
destroy(row) {
|
|
delActual({
|
|
id: row.id
|
|
}).then(res => {
|
|
this.$message({
|
|
type: 'success',
|
|
message: '删除成功'
|
|
})
|
|
this.getList()
|
|
})
|
|
},
|
|
execute(row) {
|
|
this.$refs.exeActual.setForm(row.id,row.plan_act_links)
|
|
this.$refs.exeActual.isShow = true
|
|
}
|
|
},
|
|
computed: {},
|
|
created() {
|
|
this.getList();
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.selects {
|
|
display: flex;
|
|
align-items: center;
|
|
flex-wrap: wrap;
|
|
}
|
|
</style>
|