明树Git Lab

Commit e4d2f02a authored by yangyajing's avatar yangyajing

财务评价数据对接

parent 323e4023
Pipeline #108301 passed with stage
in 21 seconds
...@@ -2524,6 +2524,219 @@ ...@@ -2524,6 +2524,219 @@
</el-form> </el-form>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="财务评价" name="财务评价">
<div class="tab-content">
<el-form :model="jcFormData" :label-width="150" :disabled="isPreview">
<el-collapse v-model="activeCollapse">
<el-collapse-item title="投决计划" name="投决计划">
<div class="tab-handle">
<el-button type="primary" size="small" @click="downloadTemplate('tjjh')">模板下载</el-button>
<el-upload
:action="windowConfig.baseUrl + '/api/template/importExcelTempData'"
:headers="{Authorization: token}"
:show-file-list="false"
:data="{tampName: 'tjjh', projectId: formData.id}"
:on-success="(res, file) => importTjjh(res.data, file)"
>
<el-button type="primary" size="small" style="margin-left: 12px;">导入数据</el-button>
</el-upload>
</div>
<el-table :data="jcTjjhData" style="width: 100%" empty-text="暂无数据" border>
<el-table-column v-for="(column, index) in tjglColumns" :key="index"
:prop="column.key" :label="column.label"
>
<el-table-column v-for="(col, ind) in column.children" :key="ind"
:prop="col.key" :label="col.label"
:width="ind === 1 ? 180 : null"
>
<template #default="scope">
<el-table-column v-if="col.children?.length" v-for="(col_, ind_) in col.children" :key="ind_"
:prop="col_.key.toString()" :label="col_.label.toString()"
width="180"
>
<template #default="scope_">
<!-- 去掉空白单元行 -->
<el-input-number v-if="scope_.row[col.children[1].key]"
v-model="scope_.row[col_.key.toString()]" :min="0" :max="99999999999.99999999"
controls-position="right"
/>
<span v-else></span>
</template>
</el-table-column>
<span v-else>{{ scope.row[col.key] }}</span>
</template>
</el-table-column>
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item title="项目投资资金流量表" name="项目投资资金流量表">
<div class="tab-handle">
<el-button type="primary" size="small" @click="downloadTemplate('xmtzzjll')">模板下载</el-button>
<el-upload
:action="windowConfig.baseUrl + '/api/template/importExcelTempData'"
:headers="{Authorization: token}"
:show-file-list="false"
:data="{tampName: 'xmtzzjll', projectId: formData.id}"
:on-success="(res, file) => importXmtzzjll(res.data, file)"
>
<el-button type="primary" size="small" style="margin-left: 12px;">导入数据</el-button>
</el-upload>
</div>
<el-table :data="xmtzzjllData" style="width: 100%" empty-text="暂无数据" border>
<el-table-column v-for="(column, index) in xmtzzjllColumns" :key="index"
:prop="column.key" :label="column.label"
>
<el-table-column v-for="(col, ind) in column.children" :key="ind"
:prop="col.key" :label="col.label"
:width="ind === 1 ? 180 : null"
>
<template #default="scope">
<el-table-column v-if="col.children?.length" v-for="(col_, ind_) in col.children" :key="ind_"
:prop="col_.key.toString()" :label="col_.label.toString()"
width="180"
>
<template #default="scope_">
<!-- 去掉空白单元行 -->
<el-input-number v-if="scope_.row[col.children[1].key]"
v-model="scope_.row[col_.key.toString()]" :min="0" :max="99999999999.99999999"
controls-position="right"
/>
<span v-else></span>
</template>
</el-table-column>
<span v-else>{{ scope.row[col.key] }}</span>
</template>
</el-table-column>
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item title="项目资本金现金流量表" name="项目资本金现金流量表">
<div class="tab-handle">
<el-button type="primary" size="small" @click="downloadTemplate('xmzbjxjll')">模板下载</el-button>
<el-upload
:action="windowConfig.baseUrl + '/api/template/importExcelTempData'"
:headers="{Authorization: token}"
:show-file-list="false"
:data="{tampName: 'xmzbjxjll', projectId: formData.id}"
:on-success="(res, file) => importXmzbjxjll(res.data, file)"
>
<el-button type="primary" size="small" style="margin-left: 12px;">导入数据</el-button>
</el-upload>
</div>
<el-table :data="xmzbjxjllData" style="width: 100%" empty-text="暂无数据" border>
<el-table-column v-for="(column, index) in xmzbjxjllColumns" :key="index"
:prop="column.key" :label="column.label"
>
<el-table-column v-for="(col, ind) in column.children" :key="ind"
:prop="col.key" :label="col.label"
:width="ind === 1 ? 180 : null"
>
<template #default="scope">
<el-table-column v-if="col.children?.length" v-for="(col_, ind_) in col.children" :key="ind_"
:prop="col_.key.toString()" :label="col_.label.toString()"
width="180"
>
<template #default="scope_">
<!-- 去掉空白单元行 -->
<el-input-number v-if="scope_.row[col.children[1].key]"
v-model="scope_.row[col_.key.toString()]" :min="0" :max="99999999999.99999999"
controls-position="right"
/>
<span v-else></span>
</template>
</el-table-column>
<span v-else>{{ scope.row[col.key] }}</span>
</template>
</el-table-column>
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item title="能建方现金流量表" name="能建方现金流量表">
<div class="tab-handle">
<el-button type="primary" size="small" @click="downloadTemplate('njfxjll')">模板下载</el-button>
<el-upload
:action="windowConfig.baseUrl + '/api/template/importExcelTempData'"
:headers="{Authorization: token}"
:show-file-list="false"
:data="{tampName: 'njfxjll', projectId: formData.id}"
:on-success="(res, file) => importNjfxjll(res.data, file)"
>
<el-button type="primary" size="small" style="margin-left: 12px;">导入数据</el-button>
</el-upload>
</div>
<el-table :data="njfxjllData" style="width: 100%" empty-text="暂无数据" border>
<el-table-column v-for="(column, index) in njfxjllColumns" :key="index"
:prop="column.key" :label="column.label"
>
<el-table-column v-for="(col, ind) in column.children" :key="ind"
:prop="col.key" :label="col.label"
:width="ind === 1 ? 180 : null"
>
<template #default="scope">
<el-table-column v-if="col.children?.length" v-for="(col_, ind_) in col.children" :key="ind_"
:prop="col_.key.toString()" :label="col_.label.toString()"
width="180"
>
<template #default="scope_">
<!-- 去掉空白单元行 -->
<el-input-number v-if="scope_.row[col.children[1].key]"
v-model="scope_.row[col_.key.toString()]" :min="0" :max="99999999999.99999999"
controls-position="right"
/>
<span v-else></span>
</template>
</el-table-column>
<span v-else>{{ scope.row[col.key] }}</span>
</template>
</el-table-column>
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item title="利润表" name="利润表">
<div class="tab-handle">
<el-button type="primary" size="small" @click="downloadTemplate('lrb')">模板下载</el-button>
<el-upload
:action="windowConfig.baseUrl + '/api/template/importExcelTempData'"
:headers="{Authorization: token}"
:show-file-list="false"
:data="{tampName: 'lrb', projectId: formData.id}"
:on-success="(res, file) => importLrb(res.data, file)"
>
<el-button type="primary" size="small" style="margin-left: 12px;">导入数据</el-button>
</el-upload>
</div>
<el-table :data="lrbData" style="width: 100%" empty-text="暂无数据" border>
<el-table-column v-for="(column, index) in lrbColumns" :key="index"
:prop="column.key" :label="column.label"
>
<el-table-column v-for="(col, ind) in column.children" :key="ind"
:prop="col.key" :label="col.label"
:width="ind === 1 ? 180 : null"
>
<template #default="scope">
<el-table-column v-if="col.children?.length" v-for="(col_, ind_) in col.children" :key="ind_"
:prop="col_.key.toString()" :label="col_.label.toString()"
width="180"
>
<template #default="scope_">
<!-- 去掉空白单元行 -->
<el-input-number v-if="scope_.row[col.children[1].key]"
v-model="scope_.row[col_.key.toString()]" :min="0" :max="99999999999.99999999"
controls-position="right"
/>
<span v-else></span>
</template>
</el-table-column>
<span v-else>{{ scope.row[col.key] }}</span>
</template>
</el-table-column>
</el-table-column>
</el-table>
</el-collapse-item>
</el-collapse>
</el-form>
</div>
</el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</el-tab-pane> </el-tab-pane>
...@@ -2585,7 +2798,8 @@ ...@@ -2585,7 +2798,8 @@
"建设规模(实物量指标)", "股东信息", "项目必要性及可行性", "立项资料", "项目投资总额(全口径)", "建设规模(实物量指标)", "股东信息", "项目必要性及可行性", "立项资料", "项目投资总额(全口径)",
"财务评价指标", "核心边界条件", "项目立项信息", "审批意见", "政府审批(核准、备案)情况", "财务评价指标", "核心边界条件", "项目立项信息", "审批意见", "政府审批(核准、备案)情况",
"我方担保及股权融资情况", "我方担保及债权融资情况", "工程带动情况", "项目内容及必要性", "风险管理", "里程碑节点", "投评决策资料", "我方担保及股权融资情况", "我方担保及债权融资情况", "工程带动情况", "项目内容及必要性", "风险管理", "里程碑节点", "投评决策资料",
"决策主体审核情况", "投资主体审核情况", "项目批复信息", "其他" "决策主体审核情况", "投资主体审核情况", "项目批复信息", "其他", "投决计划", "项目投资资金流量表", "项目资本金现金流量表",
"能建方现金流量表", "利润表"
]); ]);
let formData = reactive({}); let formData = reactive({});
let jcFormData = reactive({}); let jcFormData = reactive({});
...@@ -3259,6 +3473,228 @@ ...@@ -3259,6 +3473,228 @@
jcspyjData[index] = data; jcspyjData[index] = data;
}; };
// 财务评价
// 模板下载
const downloadTemplate = async (type) => {
fetch(proxy.windowConfig.baseUrl + "/api/template/getExcelTemplate2?tampName=" + type, {
headers: {
Authorization: token.value
}
}).then(res => res.blob()).then(blob => {
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
let name = type === "tjjh" ? "投决计划" : type === "xmtzzjll" ? "项目投资资金流量表"
: type === "xmzbjxjll" ? "项目资本金现金流量表" : type === "njfxjll" ? "能建方现金流量表"
: type === "lrb" ? "利润表" : "";
link.download = name + "模板.xlsx";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(url);
});
}
// 投决管理
let jcTjjhData = ref([]);
let tjglColumns = ref([]);
const importTjjh = (data, file) => {
if(data?.length > 3) {
tjglColumns.value = [{
label: data[0][0],
key: data[0][0],
children: [
{
label: data[1][0],
key: data[1][0]
},
{
label: data[1][1],
key: data[1][1]
},
{
label: data[1][2],
key: data[1][2],
children: data[2].slice(2).map(item => {
return {
label: item,
key: item
}
})
}
]
}];
let tableData = data.slice(3); // 从第四行开始是表格数据
let columnKeys = data.slice(2, 3)[0]; // 第三行是具体表头
jcTjjhData.value = tableData.map(item => {
let obj = {};
item.map((child, index) => {
obj[columnKeys[index]] = child;
})
return obj;
});
}
}
// 项目投资资金流量表
let xmtzzjllData = ref([]);
let xmtzzjllColumns = ref([]);
const importXmtzzjll = (data, file) => {
if(data?.length > 3) {
xmtzzjllColumns.value = [{
label: data[0][0],
key: data[0][0],
children: [
{
label: data[1][0],
key: data[1][0]
},
{
label: data[1][1],
key: data[1][1]
},
{
label: data[1][2],
key: data[1][2],
children: data[2].slice(2).map(item => {
return {
label: item,
key: item
}
})
}
]
}];
let tableData = data.slice(3); // 从第四行开始是表格数据
let columnKeys = data.slice(2, 3)[0]; // 第三行是具体表头
xmtzzjllData.value = tableData.map(item => {
let obj = {};
item.map((child, index) => {
obj[columnKeys[index]] = child;
})
return obj;
});
}
}
// 项目资本金现金流量表
let xmzbjxjllData = ref([]);
let xmzbjxjllColumns = ref([]);
const importXmzbjxjll = (data, file) => {
if(data?.length > 3) {
xmzbjxjllColumns.value = [{
label: data[0][0],
key: data[0][0],
children: [
{
label: data[1][0],
key: data[1][0]
},
{
label: data[1][1],
key: data[1][1]
},
{
label: data[1][2],
key: data[1][2],
children: data[2].slice(2).map(item => {
return {
label: item,
key: item
}
})
}
]
}];
let tableData = data.slice(3); // 从第四行开始是表格数据
let columnKeys = data.slice(2, 3)[0]; // 第三行是具体表头
xmzbjxjllData.value = tableData.map(item => {
let obj = {};
item.map((child, index) => {
obj[columnKeys[index]] = child;
})
return obj;
});
}
}
// 能建方现金流量表
let njfxjllData = ref([]);
let njfxjllColumns = ref([]);
const importNjfxjll = (data, file) => {
if(data?.length > 3) {
njfxjllColumns.value = [{
label: data[0][0],
key: data[0][0],
children: [
{
label: data[1][0],
key: data[1][0]
},
{
label: data[1][1],
key: data[1][1]
},
{
label: data[1][2],
key: data[1][2],
children: data[2].slice(2).map(item => {
return {
label: item,
key: item
}
})
}
]
}];
let tableData = data.slice(3); // 从第四行开始是表格数据
let columnKeys = data.slice(2, 3)[0]; // 第三行是具体表头
njfxjllData.value = tableData.map(item => {
let obj = {};
item.map((child, index) => {
obj[columnKeys[index]] = child;
})
return obj;
});
}
}
// 利润表
let lrbData = ref([]);
let lrbColumns = ref([]);
const importLrb = (data, file) => {
if(data?.length > 3) {
lrbColumns.value = [{
label: data[0][0],
key: data[0][0],
children: [
{
label: data[1][0],
key: data[1][0]
},
{
label: data[1][1],
key: data[1][1]
},
{
label: data[1][2],
key: data[1][2],
children: data[2].slice(2).map(item => {
return {
label: item,
key: item
}
})
}
]
}];
let tableData = data.slice(3); // 从第四行开始是表格数据
let columnKeys = data.slice(2, 3)[0]; // 第三行是具体表头
lrbData.value = tableData.map(item => {
let obj = {};
item.map((child, index) => {
obj[columnKeys[index]] = child;
})
return obj;
});
}
}
// 下载已上传文件 // 下载已上传文件
const downloadFile = (data) => { const downloadFile = (data) => {
let a = document.createElement("a"); let a = document.createElement("a");
...@@ -3487,6 +3923,11 @@ ...@@ -3487,6 +3923,11 @@
Object.assign(jcztshqkData, jcData.projectJczts); Object.assign(jcztshqkData, jcData.projectJczts);
Object.assign(tzztshqkData, jcData.projectTzzts); Object.assign(tzztshqkData, jcData.projectTzzts);
Object.assign(jcspyjData, jcData.projectSpyjs); Object.assign(jcspyjData, jcData.projectSpyjs);
importTjjh(jcData.tjjh);
importXmtzzjll(jcData.xmtzzjll);
importXmzbjxjll(jcData.xmzbjxjll);
importNjfxjll(jcData.njfxjll);
importLrb(jcData.lrb);
} }
// 关联筛选 // 关联筛选
jcSzjList.value = jnwList.filter(item => item.key == jcData.jnw)[0]?.children || []; jcSzjList.value = jnwList.filter(item => item.key == jcData.jnw)[0]?.children || [];
...@@ -3546,6 +3987,162 @@ ...@@ -3546,6 +3987,162 @@
// router.replace("/projectSetUp"); // router.replace("/projectSetUp");
// } // }
} }
// 获取动态表格数据
const getTjjhData = () => {
if (tjglColumns.value.length) {
let row1 = [];
let row2 = [];
let row3 = [];
tjglColumns.value[0].children.map(column => {
row1.push(tjglColumns.value[0].label);
row2.push(column.label);
if (column.children) {
column.children.map(item => {
row1.push(tjglColumns.value[0].label);
row2.push(column.label);
row3.push(item.label);
});
} else {
row3.push(column.label);
}
});
let rowData = [];
jcTjjhData.value.map(data => {
let arr = [];
row3.map(item => {
arr.push(data[item]);
});
rowData.push(arr);
});
return [row1, row2, row3, ...rowData];
} else {
return [];
}
}
const getXmtzzjllData = () => {
if (xmtzzjllColumns.value.length) {
let row1 = [];
let row2 = [];
let row3 = [];
xmtzzjllColumns.value[0].children.map(column => {
row1.push(xmtzzjllColumns.value[0].label);
row2.push(column.label);
if (column.children) {
column.children.map(item => {
row1.push(xmtzzjllColumns.value[0].label);
row2.push(column.label);
row3.push(item.label);
});
} else {
row3.push(column.label);
}
});
let rowData = [];
xmtzzjllData.value.map(data => {
let arr = [];
row3.map(item => {
arr.push(data[item]);
});
rowData.push(arr);
});
return [row1, row2, row3, ...rowData];
} else {
return [];
}
}
const getXmzbjxjllData = () => {
if (xmzbjxjllColumns.value.length) {
let row1 = [];
let row2 = [];
let row3 = [];
xmzbjxjllColumns.value[0].children.map(column => {
row1.push(xmzbjxjllColumns.value[0].label);
row2.push(column.label);
if (column.children) {
column.children.map(item => {
row1.push(xmzbjxjllColumns.value[0].label);
row2.push(column.label);
row3.push(item.label);
});
} else {
row3.push(column.label);
}
});
let rowData = [];
xmzbjxjllData.value.map(data => {
let arr = [];
row3.map(item => {
arr.push(data[item]);
});
rowData.push(arr);
});
return [row1, row2, row3, ...rowData];
} else {
return [];
}
}
const getNjfxjllData = () => {
if (njfxjllColumns.value.length) {
let row1 = [];
let row2 = [];
let row3 = [];
njfxjllColumns.value[0].children.map(column => {
row1.push(njfxjllColumns.value[0].label);
row2.push(column.label);
if (column.children) {
column.children.map(item => {
row1.push(njfxjllColumns.value[0].label);
row2.push(column.label);
row3.push(item.label);
});
} else {
row3.push(column.label);
}
});
let rowData = [];
njfxjllData.value.map(data => {
let arr = [];
row3.map(item => {
arr.push(data[item]);
});
rowData.push(arr);
});
return [row1, row2, row3, ...rowData];
} else {
return [];
}
}
const getLrbData = () => {
if (lrbColumns.value.length) {
let row1 = [];
let row2 = [];
let row3 = [];
lrbColumns.value[0].children.map(column => {
row1.push(lrbColumns.value[0].label);
row2.push(column.label);
if (column.children) {
column.children.map(item => {
row1.push(lrbColumns.value[0].label);
row2.push(column.label);
row3.push(item.label);
});
} else {
row3.push(column.label);
}
});
let rowData = [];
lrbData.value.map(data => {
let arr = [];
row3.map(item => {
arr.push(data[item]);
});
rowData.push(arr);
});
return [row1, row2, row3, ...rowData];
} else {
return [];
}
}
// 保存数据 // 保存数据
const saveClick = (type) => { const saveClick = (type) => {
if (!formData.projectLzType || formData.projectLzType.toString() === '1') { if (!formData.projectLzType || formData.projectLzType.toString() === '1') {
...@@ -3596,7 +4193,29 @@ ...@@ -3596,7 +4193,29 @@
projectBjtjs: jcHxbjtjData, projectBjtjs: jcHxbjtjData,
projectJczts: jcztshqkData, projectJczts: jcztshqkData,
projectTzzts: tzztshqkData, projectTzzts: tzztshqkData,
projectSpyjs: jcspyjData projectSpyjs: jcspyjData,
}
// 获取动态表格数据
let tjjhArr = getTjjhData();
if (tjjhArr.length) {
params.tjjh = tjjhArr;
}
let xmtzzjllArr = getXmtzzjllData();
if (xmtzzjllArr.length) {
params.xmtzzjll = xmtzzjllArr;
}
let xmzbjxjllArr = getXmzbjxjllData();
if ( xmzbjxjllArr.length) {
params. xmzbjxjll = xmzbjxjllArr;
}
let njfxjllArr = getNjfxjllData();
if (njfxjllArr.length) {
params.njfxjll = njfxjllArr;
}
let lrbArr = getLrbData();
if (lrbArr.length) {
params.lrb = lrbArr;
} }
proxy.$post({ proxy.$post({
url: "/api/project/" + url, url: "/api/project/" + url,
...@@ -3632,7 +4251,7 @@ ...@@ -3632,7 +4251,7 @@
...auditFormData.value ...auditFormData.value
}, },
callback: (data) => { callback: (data) => {
router.push("/message"); router.back(-1);
} }
}) })
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment