master
xy 2 years ago
parent cd74e047b1
commit 37ea7438ee

@ -9,7 +9,7 @@
:rules="rules" :rules="rules"
@submit="submit" @submit="submit"
> >
<template v-slot:plan_id> <template v-slot:project_id>
<div class="xy-table-item"> <div class="xy-table-item">
<div class="xy-table-item-label"> <div class="xy-table-item-label">
<span style="color: red; font-weight: 600; padding-right: 4px" <span style="color: red; font-weight: 600; padding-right: 4px"
@ -111,21 +111,11 @@
@on-change="(e) => (budgetSelect.year = e)" @on-change="(e) => (budgetSelect.year = e)"
></DatePicker> ></DatePicker>
<Select
v-model="budgetSelect.type"
clearable
placeholder="选择预算类型"
style="width: 130px"
>
<Option v-for="item in moneyWay" :key="item.id" :value="item.id">{{
item.value
}}</Option>
</Select>
<Select <Select
placeholder="科室选择" placeholder="科室选择"
clearable clearable
v-model="budgetSelect.department" v-model="budgetSelect.department_id"
style="width: 160px" style="width: 160px"
> >
<Option <Option
@ -136,7 +126,9 @@
</Option> </Option>
</Select> </Select>
<Button style="float: right;" type="primary" @click="budgetSelect.page=1,getBudgets()" <Input v-model="budgetSelect.keyword" placeholder="关键词" clearable style="width: 160px"></Input>
<Button style="float: right;" type="primary" @click="budgetSelect.page=1,getContract()"
>查询</Button >查询</Button
> >
</div> </div>
@ -152,12 +144,13 @@
<div style="padding: 10px 0; display: flex; justify-content: center"> <div style="padding: 10px 0; display: flex; justify-content: center">
<Page <Page
:page-size="20"
:total="budgetTotal" :total="budgetTotal"
show-elevator show-elevator
@on-change=" @on-change="
(e) => { (e) => {
budgetSelect.page = e; budgetSelect.page = e;
getBudgets(); getContract();
} }
" "
/> />
@ -167,6 +160,7 @@
</template> </template>
<script> <script>
import { getContract } from "@/api/contract/contract"
import { getBudget } from "@/api/budget/budget"; import { getBudget } from "@/api/budget/budget";
import { show, save, store } from "@/api/propertyPlan"; import { show, save, store } from "@/api/propertyPlan";
import { moneyFormatter, parseTime } from "@/utils"; import { moneyFormatter, parseTime } from "@/utils";
@ -174,6 +168,7 @@ import { getparameter } from "@/api/system/dictionary";
import {listdeptNoAuth} from "@/api/system/department"; import {listdeptNoAuth} from "@/api/system/department";
export default { export default {
props: { props: {
departments: Array,
role: { role: {
type: Number, type: Number,
default: 0, default: 0,
@ -196,6 +191,8 @@ export default {
customFn: (row) => { customFn: (row) => {
return ( return (
<el-select <el-select
filterable={true}
allow-create={true}
placeholder="评审内容" placeholder="评审内容"
readonly={this.role == 1} readonly={this.role == 1}
style="width: 100%;" style="width: 100%;"
@ -222,7 +219,7 @@ export default {
customFn: (row) => { customFn: (row) => {
return ( return (
<el-date-picker <el-date-picker
type="money" type="month"
placeholder="计划评审时间" placeholder="计划评审时间"
readonly={this.role == 1} readonly={this.role == 1}
style="width: 100%;" style="width: 100%;"
@ -288,7 +285,7 @@ export default {
rowName: "", rowName: "",
tempRow: {}, tempRow: {},
form: { form: {
plan_id: "", project_id: "",
state: 0, state: 0,
item_list: [], item_list: [],
content_list: [], content_list: [],
@ -324,87 +321,121 @@ export default {
], ],
}, },
departments: [],
moneyWay: [], moneyWay: [],
budgets: [], budgets: [],
budgetTotal: 0, budgetTotal: 0,
budgetSelect: { budgetSelect: {
department: '', keyword: '',
type: '', department_id: '',
year: '', year: '',
page: 1, page: 1,
page_size: 20, page_size: 20,
purchase_type_id: 1
}, },
budgetTable: [ budgetTable: [
{ {
title: "项目名称", title: "名称",
key: "name",
width: 200, width: 200,
align: "left", align: "left",
key: "name",
fixed: "left", fixed: "left",
}, },
{ {
title: "预算类型", title: "采购形式",
width: 120,
align: "center",
render: (h, { row, column }) =>
h("span", row?.purchase_type?.value || "无"),
},
{
title: "项目类型",
width: 120,
key: "type", key: "type",
width: 115, align: "center",
render: (h, { row }) => { render: (h, { row }) => {
return h( let map = new Map([
"span", [1, "服务"],
this.moneyWay.find((item) => { [2, "货物"],
return item.id === row.type; [3, "工程"],
})?.value || "未知" ]);
); return h("span", map.get(row.type) || "无");
}, },
}, },
{ {
title: "所属年份", title: "采购方式",
key: "year", width: 120,
width: 105, align: "center",
render: (h, { row, column }) =>
h("span", row?.purchase_way?.value || "无"),
}, },
{ {
title: "相关科室", title: "资金来源",
key: "plan_department.name", width: 120,
width: 110, align: "center",
render: (h, { row }) => { render: (h, { row }) =>
return h("span", row.plan_department?.name); h("div", [
}, row.money_way_detail.map((item) => h("span", item.value)),
]),
}, },
{ {
title: "年初预算金额(元)", title: "已申请金额(元)",
key: "money", key: "apply_money_total",
width: 140,
align: "right", align: "right",
width: 180, render: (h, { row }) =>
render: (h, { row }) => { h(
return h("span", row.money == 0 ? "--" : moneyFormatter(row.money)); "span",
}, Number(row.apply_money_total || 0)
.toFixed(2)
.replace(/(\d)(?=(\d{3})+\.)/g, "$1,")
),
}, },
{ {
title: "调整后预算金额(元)", title: "已付金额(元)",
key: "update_money", key: "fund_log_total",
width: 140,
align: "right", align: "right",
width: 200, render: (h, { row }) =>
render: (h, { row }) => { h(
return h("span", moneyFormatter(row.update_money)); "span",
}, Number(row.fund_log_total || 0)
.toFixed(2)
.replace(/(\d)(?=(\d{3})+\.)/g, "$1,")
),
}, },
{ {
title: "创建信息", title: "合同预算价(元)",
key: "created_at", key: "plan_price",
width: 180, width: 140,
formatter: (cell, data, value) => { align: "right",
return parseTime(new Date(value), "{y}-{m}-{d}"); render: (h, { row }) =>
}, h(
"span",
Number(row.plan_price || 0)
.toFixed(2)
.replace(/(\d)(?=(\d{3})+\.)/g, "$1,")
),
}, },
{ {
title: "描述", title: "合同签订价(元)",
minWidth: 300, key: "money",
key: "content", width: 140,
align: "left", align: "right",
render: (h, { row }) =>
h(
"span",
Number(row.money || 0)
.toFixed(2)
.replace(/(\d)(?=(\d{3})+\.)/g, "$1,")
),
}, },
], ],
}; };
}, },
methods: { methods: {
showModal () {
this.isShowModal = true
},
show() { show() {
this.isShow = true; this.isShow = true;
}, },
@ -458,7 +489,7 @@ export default {
console.log(res.item.find((i) => i.id === this.id)); console.log(res.item.find((i) => i.id === this.id));
this.$integrateData(this.form, res); this.$integrateData(this.form, res);
console.log(this.form) console.log(this.form)
this.rowName = res.plan?.name; this.rowName = res.project?.name;
this.form.item_list = res.item?.map((i) => { this.form.item_list = res.item?.map((i) => {
return { return {
content: i.content || '', content: i.content || '',
@ -513,8 +544,8 @@ export default {
// }); // });
}, },
async getBudgets() { async getContract() {
const res = await getBudget(this.budgetSelect); const res = await getContract(this.budgetSelect);
this.budgets = res.list.data; this.budgets = res.list.data;
this.budgetTotal = res.list.total; this.budgetTotal = res.list.total;
}, },
@ -526,15 +557,12 @@ export default {
this.moneyWay = res.detail; this.moneyWay = res.detail;
}, },
getDepartment() {
listdeptNoAuth().then((res) => {
this.departments = res;
});
},
rowPick(row) { rowPick(row) {
this.form.plan_id = row.id; if (this.isShow) {
this.form.project_id = row.id;
this.rowName = row.name; this.rowName = row.name;
}
this.$emit('rowPick', row)
}, },
}, },
watch: { watch: {
@ -555,8 +583,7 @@ export default {
}, },
created() { created() {
this.getMoneyWay(); this.getMoneyWay();
this.getBudgets(); this.getContract();
this.getDepartment();
}, },
}; };
</script> </script>

@ -7,18 +7,50 @@
> >
<div slot="content"></div> <div slot="content"></div>
<slot> <slot>
<span style="padding: 0 6px; word-break: keep-all">关键字</span> <span style="padding: 0 6px; word-break: keep-all">部门</span>
<span>
<Select
placeholder="科室选择"
clearable
v-model="select.department_id"
style="width: 160px"
>
<Option v-for="item in departments" :value="item.id" :key="item.id"
>{{ item.name }}
</Option>
</Select>
</span>
<span style="padding: 0 6px; word-break: keep-all">项目</span>
<span> <span>
<Input <Input
v-model="select.keyword" :value="select.projectName"
placeholder="请输入关键字" readonly
style="width: 180px" clearable
placeholder="项目选择"
style="width: 200px"
@on-clear="select.project_id = ''"
@on-focus="$refs['addPropertyPlan'].showModal()"
></Input> ></Input>
</span> </span>
<Button type="primary" style="margin-left: 10px" ghost @click=""
<Button
type="primary"
style="margin-left: 10px"
ghost
@click="
select = {
page: 1,
page_size: 10,
department_id: '',
projectName: '',
project_id: '',
}
"
>重置</Button >重置</Button
> >
<Button type="primary" style="margin-left: 10px" @click="getList"></Button> <Button type="primary" style="margin-left: 10px" @click="getList"
>查询</Button
>
<Button <Button
v-if="role === 0" v-if="role === 0"
type="primary" type="primary"
@ -32,27 +64,75 @@
</slot> </slot>
</lx-header> </lx-header>
<xy-table :show-index="false" :list="list" :table-item="table" :object-span-method="objectSpanMethod"> <xy-table
:show-index="false"
:list="list"
:table-item="table"
:object-span-method="objectSpanMethod"
>
<template #btns> <template #btns>
<el-table-column label="操作" prop="more" header-align="center" align="left" v-if="role === 1 || role === 0" > <el-table-column
label="操作"
prop="more"
header-align="center"
align="left"
v-if="role === 1 || role === 0"
>
<template #default="{ row }"> <template #default="{ row }">
<Button size="small" type="primary" @click="$refs['file'].setId(row.pid),$refs['file'].show()"> <Button
size="small"
type="primary"
@click="$refs['file'].setId(row.pid), $refs['file'].show()"
>附件
</Button> </Button>
<Button size="small" type="primary" @click="$refs['remark'].setId(row.pid),$refs['remark'].show()"> <Button
size="small"
type="primary"
@click="$refs['remark'].setId(row.pid), $refs['remark'].show()"
>备注
</Button> </Button>
<Button ghost size="small" type="primary" @click="$refs['addPropertyPlan'].setType('editor'),$refs['addPropertyPlan'].pid = row.pid,$refs['addPropertyPlan'].setId(row.id),$refs['addPropertyPlan'].show()">编辑 <Button
ghost
size="small"
type="primary"
@click="
$refs['addPropertyPlan'].setType('editor'),
($refs['addPropertyPlan'].pid = row.pid),
$refs['addPropertyPlan'].setId(row.id),
$refs['addPropertyPlan'].show()
"
>编辑
</Button> </Button>
<Poptip v-if="role === 0" transfer confirm placement="bottom" title="确认要删除吗" <Poptip
@on-ok="destroy(row)"> v-if="role === 0"
<Button style="margin-left: 4px;" ghost size="small" type="error">删除 transfer
confirm
placement="bottom"
title="确认要删除吗"
@on-ok="destroy(row)"
>
<Button style="margin-left: 4px" ghost size="small" type="error"
>删除
</Button> </Button>
</Poptip> </Poptip>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column v-else label="操作" prop="more" header-align="center" align="center" width="100"> <el-table-column
v-else
label="操作"
prop="more"
header-align="center"
align="center"
width="100"
>
<template #default="{ row }"> <template #default="{ row }">
<Button size="small" type="primary" @click="$refs['file'].setId(row.pid),$refs['file'].show()"></Button> <Button
size="small"
type="primary"
@click="$refs['file'].setId(row.pid), $refs['file'].show()"
>附件查看</Button
>
</template> </template>
</el-table-column> </el-table-column>
</template> </template>
@ -71,7 +151,18 @@
/> />
</div> </div>
<addPropertyPlan ref="addPropertyPlan" :role="role" @refresh="getList"></addPropertyPlan> <addPropertyPlan
ref="addPropertyPlan"
:departments="departments"
:role="role"
@refresh="getList"
@rowPick="
(row) => {
select.project_id = row.id;
select.projectName = row.name;
}
"
></addPropertyPlan>
<remark ref="remark"></remark> <remark ref="remark"></remark>
<file :role="role" ref="file"></file> <file :role="role" ref="file"></file>
</div> </div>
@ -84,6 +175,7 @@ import { index, destroy, save } from "@/api/propertyPlan";
import addPropertyPlan from "@/views/finance/components/addPropertyPlan.vue"; import addPropertyPlan from "@/views/finance/components/addPropertyPlan.vue";
import remark from "./components/remark.vue"; import remark from "./components/remark.vue";
import file from "./components/file.vue"; import file from "./components/file.vue";
import { listdeptNoAuth } from "@/api/system/department";
export default { export default {
components: { components: {
file, file,
@ -92,16 +184,21 @@ export default {
}, },
data() { data() {
return { return {
role: -1,//01 role: -1, //01
select: { select: {
page: 1, page: 1,
page_size: 10, page_size: 10,
department_id: "",
projectName: "",
project_id: "",
}, },
departments: [],
originalList: [], originalList: [],
list: [], list: [],
table: [ table: [
{ {
prop: 'index', prop: "index",
width: 60, width: 60,
sortable: false, sortable: false,
}, },
@ -109,20 +206,21 @@ export default {
label: "项目名称", label: "项目名称",
minWidth: 220, minWidth: 220,
align: "left", align: "left",
prop: 'plan.name' prop: "project.name",
}, },
{ {
prop: "content", prop: "content",
label: "评审内容", label: "评审内容",
minWidth: 220, width: 220,
align: 'left'
}, },
{ {
prop: "plan_date", prop: "plan_date",
label: "计划评审时间", label: "计划评审时间",
width: 170, width: 170,
formatter: (cell, data, value) => { formatter: (cell, data, value) => {
return value ? this.$moment(new Date(value)).format("YYYY年MM月") : '未完成'; return value
? this.$moment(new Date(value)).format("YYYY年MM月")
: "未完成";
}, },
}, },
{ {
@ -130,7 +228,9 @@ export default {
label: "实际评审时间", label: "实际评审时间",
width: 170, width: 170,
formatter: (cell, data, value) => { formatter: (cell, data, value) => {
return value ? this.$moment(new Date(value)).format("YYYY年MM月DD") : '未完成'; return value
? this.$moment(new Date(value)).format("YYYY年MM月DD")
: "未完成";
}, },
}, },
], ],
@ -138,52 +238,58 @@ export default {
}; };
}, },
methods: { methods: {
destroy (row) { getDepartment() {
console.log(row) listdeptNoAuth().then((res) => {
this.departments = res;
});
},
destroy(row) {
console.log(row);
destroy({ destroy({
id: row.pid id: row.pid,
}).then(res => { }).then((res) => {
this.$message({ this.$message({
type: 'success', type: "success",
message: '删除成功' message: "删除成功",
}) });
this.getList() this.getList();
}) });
}, },
async getList() { async getList() {
const res = await index(this.select); const res = await index(this.select);
this.originalList = res.data; this.originalList = res.data;
this.total = res.total; this.total = res.total;
let list = []; let list = [];
res.data.forEach((i,index) => { res.data.forEach((i, index) => {
if (i.item && i.item.length > 0) { if (i.item && i.item.length > 0) {
i.item.forEach(item => { i.item.forEach((item) => {
list.push({ list.push({
type: 0, type: 0,
index: index+1, index: index + 1,
plan: i.plan, project: i.project,
pid: i.id, pid: i.id,
...item ...item,
}) });
}) });
} else { } else {
list.push({ list.push({
pid: i.id, pid: i.id,
index: index+1, index: index + 1,
type: 1, type: 1,
...i ...i,
}) });
} }
}) });
this.list = mergeTableRow({ this.list = mergeTableRow({
data: list, data: list,
mergeColNames: ['index','plan.name','more'], mergeColNames: ["index", "project.name", "more"],
firstMergeColNames: ['index',"pid",'pid'], // firstMerge firstMergeColNames: ["index", "pid", "pid"], // firstMerge
firstMerge: "index", firstMerge: "index",
}) });
console.log(this.list) console.log(this.list);
}, },
// //
objectSpanMethod({ row, column, rowIndex, columnIndex }) { objectSpanMethod({ row, column, rowIndex, columnIndex }) {
@ -195,11 +301,15 @@ export default {
}, },
computed: {}, computed: {},
created() { created() {
this.getDepartment();
this.getList(); this.getList();
}, },
beforeRouteEnter(to, from, next) { beforeRouteEnter(to, from, next) {
next((vm) => { next((vm) => {
vm.role = (to.path.split("_")[1] && !isNaN(Number(to.path.split("_")[1]))) ? Number(to.path.split("_")[1]) : -1; vm.role =
to.path.split("_")[1] && !isNaN(Number(to.path.split("_")[1]))
? Number(to.path.split("_")[1])
: -1;
}); });
}, },
}; };

@ -34,7 +34,18 @@
style="width: 180px" style="width: 180px"
></Input> ></Input>
</span> </span>
<Button type="primary" style="margin-left: 10px" ghost @click="" <Button
type="primary"
style="margin-left: 10px"
ghost
@click="
select = {
department_id: '',
page: 1,
page_size: 10,
keyword: '',
}
"
>重置</Button >重置</Button
> >
<Button type="primary" style="margin-left: 10px" @click="getList" <Button type="primary" style="margin-left: 10px" @click="getList"
@ -56,7 +67,6 @@
:cell-style="cellStyle" :cell-style="cellStyle"
:list="list" :list="list"
:table-item="table" :table-item="table"
@editor=" @editor="
(e) => { (e) => {
$refs['addGovPlane'].setType('editor'); $refs['addGovPlane'].setType('editor');
@ -82,24 +92,28 @@
/> />
</div> </div>
<addGovPlane ref="addGovPlane" :role="type" @refresh="getList"></addGovPlane> <addGovPlane
ref="addGovPlane"
:role="type"
@refresh="getList"
></addGovPlane>
</div> </div>
</template> </template>
<script> <script>
import addGovPlane from "@/views/statisticalReport/components/addGovPlane.vue"; import addGovPlane from "@/views/statisticalReport/components/addGovPlane.vue";
import { index, destroy } from "@/api/govPlane"; import { index, destroy } from "@/api/govPlane";
import {listdeptNoAuth} from "@/api/system/department"; import { listdeptNoAuth } from "@/api/system/department";
export default { export default {
components: { components: {
addGovPlane, addGovPlane,
}, },
data() { data() {
return { return {
type: -1,//01 type: -1, //01
departments: [], departments: [],
select: { select: {
department_id: '', department_id: "",
page: 1, page: 1,
page_size: 10, page_size: 10,
keyword: "", keyword: "",
@ -116,7 +130,7 @@ export default {
prop: "name", prop: "name",
label: "项目名称", label: "项目名称",
width: 180, width: 180,
align: 'left' align: "left",
}, },
{ {
prop: "content", prop: "content",
@ -138,7 +152,9 @@ export default {
label: "采购意向公开计划时间", label: "采购意向公开计划时间",
width: 190, width: 190,
formatter: (cell, data, value) => { formatter: (cell, data, value) => {
return value ? this.$moment(new Date(value)).format("YYYY年MM月") : '未完成'; return value
? this.$moment(new Date(value)).format("YYYY年MM月")
: "未完成";
}, },
}, },
{ {
@ -146,7 +162,9 @@ export default {
label: "采购意向公开实际时间", label: "采购意向公开实际时间",
width: 190, width: 190,
formatter: (cell, data, value) => { formatter: (cell, data, value) => {
return value ? this.$moment(new Date(value)).format("YYYY年MM月DD") : '未完成'; return value
? this.$moment(new Date(value)).format("YYYY年MM月DD")
: "未完成";
}, },
}, },
{ {
@ -154,7 +172,9 @@ export default {
label: "招标文件挂网计划时间", label: "招标文件挂网计划时间",
width: 190, width: 190,
formatter: (cell, data, value) => { formatter: (cell, data, value) => {
return value ? this.$moment(new Date(value)).format("YYYY年MM月") : '未完成'; return value
? this.$moment(new Date(value)).format("YYYY年MM月")
: "未完成";
}, },
}, },
{ {
@ -162,7 +182,9 @@ export default {
label: "招标文件挂网实际时间", label: "招标文件挂网实际时间",
width: 190, width: 190,
formatter: (cell, data, value) => { formatter: (cell, data, value) => {
return value ? this.$moment(new Date(value)).format("YYYY年MM月DD") : '未完成'; return value
? this.$moment(new Date(value)).format("YYYY年MM月DD")
: "未完成";
}, },
}, },
{ {
@ -170,7 +192,9 @@ export default {
label: "项目开标计划时间", label: "项目开标计划时间",
width: 180, width: 180,
formatter: (cell, data, value) => { formatter: (cell, data, value) => {
return value ? this.$moment(new Date(value)).format("YYYY年MM月") : '未完成'; return value
? this.$moment(new Date(value)).format("YYYY年MM月")
: "未完成";
}, },
}, },
{ {
@ -178,34 +202,36 @@ export default {
label: "项目开标实际时间", label: "项目开标实际时间",
width: 180, width: 180,
formatter: (cell, data, value) => { formatter: (cell, data, value) => {
return value ? this.$moment(new Date(value)).format("YYYY年MM月DD") : '未完成'; return value
? this.$moment(new Date(value)).format("YYYY年MM月DD")
: "未完成";
}, },
}, },
{ {
prop: 'plan.name', prop: "plan.name",
label: '关联计划', label: "关联计划",
width: 220, width: 220,
align: 'left' align: "left",
}, },
{ {
prop: 'department.name', prop: "department.name",
label: '部门', label: "部门",
width: 150 width: 150,
} },
], ],
}; };
}, },
methods: { methods: {
cellStyle ({ column }) { cellStyle({ column }) {
if (/计划时间/g.test(column.label)) { if (/计划时间/g.test(column.label)) {
return { return {
background: 'rgba(200,0,0,.1)' background: "rgba(200,0,0,.1)",
} };
} }
if (/实际时间/g.test(column.label)) { if (/实际时间/g.test(column.label)) {
return { return {
background: 'rgba(0,200,0,.1)' background: "rgba(0,200,0,.1)",
} };
} }
}, },
@ -222,27 +248,27 @@ export default {
}); });
}, },
destroy (row) { destroy(row) {
destroy({ id: row.id }).then(res => { destroy({ id: row.id }).then((res) => {
this.$message({ this.$message({
type: 'success', type: "success",
message: '删除成功' message: "删除成功",
}) });
this.getList() this.getList();
}) });
} },
}, },
computed: {}, computed: {},
created() { created() {
this.getDepartment(); this.getDepartment();
this.getList(); this.getList();
}, },
beforeRouteEnter (to, from , next) { beforeRouteEnter(to, from, next) {
let type = to.path.split('_')[1] let type = to.path.split("_")[1];
next(vm => { next((vm) => {
vm.type = !isNaN(Number(type)) ? Number(type) : -1 vm.type = !isNaN(Number(type)) ? Number(type) : -1;
}) });
} },
}; };
</script> </script>

Loading…
Cancel
Save