明树Git Lab

Commit 7a7b7aa7 authored by zhanghan's avatar zhanghan

投资后评价

parent f034cb1c
import * as XLSX from "xlsx";
// 导入excel文件显示到前端页面
const importTableFile = async (file) => {
const getTableFileData = async (file, tableColumns) => {
const data = await readFile(file.raw);
// 使用 xlsx 解析
let workbook = XLSX.read(data, {
......@@ -8,7 +8,24 @@ const importTableFile = async (file) => {
cellDates: true,
cellStyles: true
});
console.log(workbook);
const sheetName = workbook.SheetNames[0];
const sheet = workbook.Sheets[sheetName];
const rawData = XLSX.utils.sheet_to_json(sheet, {
header: 1,
defval: ""
});
let list = [];
const [head, ...fileData] = rawData;
fileData && fileData.map(item => {
let obj = {};
tableColumns.map(column => {
let index = head.indexOf(column.label);
let def = column.type === "number" ? null : "";
obj[column.prop] = index != -1 ? item[index] || def : def;
})
list.push(obj)
})
return list;
};
const readFile = (file) => {
return new Promise((resolve, reject) => {
......@@ -23,7 +40,7 @@ const exportTableFile = (tableData, tableColumns, title, fileName) => {
const wb = XLSX.utils.book_new()
// 2. 准备数据
let wsData = [[title], []]
let wsData = title ? [[title]] : []
// 添加表头
if (tableColumns && tableColumns.length > 0) {
......@@ -64,9 +81,11 @@ const exportTableFile = (tableData, tableColumns, title, fileName) => {
ws['!cols'] = colWidths
}
// 合并标题单元格
if (title) {
ws['!merges'] = [
XLSX.utils.decode_range('A1:Q1') // 合并第一行的 A-E 列
]
}
// 5. 将工作表添加到工作簿
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1')
......@@ -88,6 +107,6 @@ const formatCellValue = (value, formatter) => {
return value
}
export{
importTableFile,
getTableFileData,
exportTableFile
}
\ No newline at end of file
......@@ -4,7 +4,7 @@
<div class="manage-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="primary" @click="constructionAdd">新增</el-button>
<el-button type="primary" @click="evaluateAdd">新增</el-button>
</div>
</div>
<div class="manage-content" v-loading="loading">
......@@ -68,6 +68,22 @@ let tableColumns = ref([
label: "项目信息",
showOverflowTooltip: true,
},
{
prop: "xmgszcbgLen",
label: "项目公司自查报告",
showOverflowTooltip: true,
},
{
prop: "hpjbgLen",
label: "后评价报告",
showOverflowTooltip: true,
},
{
prop: "qsmzqpjLen",
label: "全生命评价结果",
showOverflowTooltip: true,
},
{
prop: "operations",
......@@ -86,15 +102,21 @@ let pageSize = ref(10);
const getStatementData = () => {
loading.value = true;
proxy.$post({
url: "/api/project/getJsqtzjcList",
url: "/api/project/getTzhpjList",
data: {
page: currentPage.value,
pagesize: pageSize.value,
},
callback: (data) => {
console.log(data, "data");
tableData.value = data.rows.map((it) => {
return {
...it,
tableData.value = data.rows;
xmgszcbgLen: it.xmgszcbg?.length + "个",
hpjbgLen: it.hpjbg?.length + "个",
qsmzqpjLen: it.qsmzqpj?.length + "个",
};
});
total.value = data.count;
loading.value = false;
},
......@@ -110,12 +132,12 @@ const handleCurrentPageChange = (page) => {
currentPage.value = page;
getStatementData();
};
const constructionAdd = () => {
router.push("/constructionAdd");
const evaluateAdd = () => {
router.push("/evaluateAdd");
};
const editStatement = (item) => {
router.push({
name: "constructionAdd",
name: "evaluateAdd",
query: {
id: item.id,
},
......@@ -123,7 +145,7 @@ const editStatement = (item) => {
};
const previewStatement = (item) => {
router.push({
name: "constructionAdd",
name: "evaluateAdd",
query: {
isPreview: true,
id: item.id,
......@@ -138,7 +160,7 @@ const deleteStatement = (item) => {
})
.then(() => {
proxy.$post({
url: "/api/project/deleteJsqtzjc",
url: "/api/project/deleteTzhpj",
data: {
id: item.id,
},
......
This diff is collapsed.
......@@ -4,7 +4,7 @@
<div class="manage-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="primary" @click="constructionAdd">新增</el-button>
<el-button type="primary" @click="runningPeriodAdd">新增</el-button>
</div>
</div>
<div class="manage-content" v-loading="loading">
......@@ -110,12 +110,12 @@ const handleCurrentPageChange = (page) => {
currentPage.value = page;
getStatementData();
};
const constructionAdd = () => {
router.push("/constructionAdd");
const runningPeriodAdd = () => {
router.push("/runningPeriodAdd");
};
const editStatement = (item) => {
router.push({
name: "constructionAdd",
name: "runningPeriodAdd",
query: {
id: item.id,
},
......@@ -123,7 +123,7 @@ const editStatement = (item) => {
};
const previewStatement = (item) => {
router.push({
name: "constructionAdd",
name: "runningPeriodAdd",
query: {
isPreview: true,
id: item.id,
......
......@@ -80,12 +80,12 @@
name="投资(成本)分析会资料"
>
<div class="tab-handle">
<el-button type="primary" @click="addjsqtzjcTzfxs"
<el-button type="primary" @click="addyyqtzjcTzfxs"
>新增</el-button
>
</div>
<el-table
:data="jsqtzjcTzfxsList"
:data="yyqtzjcTzfxsList"
style="width: 100%"
empty-text="暂无数据"
border
......@@ -143,7 +143,7 @@
link
type="danger"
size="small"
@click="deletejsqtzjcTzfxs(scope.$index)"
@click="deleteyyqtzjcTzfxs(scope.$index)"
>删除</el-button
>
</template>
......@@ -154,12 +154,12 @@
<!-- 专项检查 -->
<el-collapse-item title="专项检查" name="专项检查">
<div class="tab-handle">
<el-button type="primary" @click="addJsqtzjcZxjcs"
<el-button type="primary" @click="addyyqtzjcZxjcs"
>新增</el-button
>
</div>
<el-table
:data="jsqtzjcZxjcsList"
:data="yyqtzjcZxjcsList"
style="width: 100%"
empty-text="暂无数据"
border
......@@ -210,7 +210,7 @@
link
type="danger"
size="small"
@click="deleteJsqtzjcZxjcs(scope.$index)"
@click="deleteyyqtzjcZxjcs(scope.$index)"
>删除</el-button
>
</template>
......@@ -259,34 +259,34 @@ const projectList = ref([]);
const rcCgqyglId = ref(route.query.id || "");
// 投资(成本)分析会资料列表
const jsqtzjcTzfxsList = ref([]);
const yyqtzjcTzfxsList = ref([]);
// 专项检查列表
const jsqtzjcZxjcsList = ref([]);
const yyqtzjcZxjcsList = ref([]);
// ========== 投资(成本)分析会资料 操作方法 ==========
const addjsqtzjcTzfxs = () => {
jsqtzjcTzfxsList.value.push({
const addyyqtzjcTzfxs = () => {
yyqtzjcTzfxsList.value.push({
jd: "",
ycztz: "",
zbjnbsyl: "",
jsqtzjcTzfxs: [],
yyqtzjcTzfxs: [],
});
};
const deletejsqtzjcTzfxs = (index) => {
const deleteyyqtzjcTzfxs = (index) => {
ElMessageBox.confirm("确认删除该项?", "提示", {
confirmButtonText: "确认",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
jsqtzjcTzfxsList.value.splice(index, 1);
yyqtzjcTzfxsList.value.splice(index, 1);
ElMessage.success("删除成功");
});
};
// ========== 专项检查 操作方法 ==========
const addJsqtzjcZxjcs = () => {
jsqtzjcZxjcsList.value.push({
const addyyqtzjcZxjcs = () => {
yyqtzjcZxjcsList.value.push({
zxjcfl: "",
jcjg: "",
zgcsqd: "",
......@@ -294,13 +294,13 @@ const addJsqtzjcZxjcs = () => {
});
};
const deleteJsqtzjcZxjcs = (index) => {
const deleteyyqtzjcZxjcs = (index) => {
ElMessageBox.confirm("确认删除该项?", "提示", {
confirmButtonText: "确认",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
jsqtzjcZxjcsList.value.splice(index, 1);
yyqtzjcZxjcsList.value.splice(index, 1);
ElMessage.success("删除成功");
});
};
......@@ -343,8 +343,8 @@ const getJsqtzjcDetail = () => {
// 赋值基础表单数据
Object.assign(formData, data);
// 赋值列表数据
jsqtzjcTzfxsList.value = data.jsqtzjcTzfxs || [];
jsqtzjcZxjcsList.value = data.jsqtzjcZxjcs || [];
yyqtzjcTzfxsList.value = data.yyqtzjcTzfxs || [];
yyqtzjcZxjcsList.value = data.yyqtzjcZxjcs || [];
},
});
};
......@@ -372,8 +372,8 @@ const saveClick = () => {
const submitData = {
...formData,
projectId: formData.projectId + "", // 确保为字符串类型
jsqtzjcTzfxs: jsqtzjcTzfxsList.value,
jsqtzjcZxjcs: jsqtzjcZxjcsList.value,
yyqtzjcTzfxs: yyqtzjcTzfxsList.value,
yyqtzjcZxjcs: yyqtzjcZxjcsList.value,
};
proxy.$post({
......
......@@ -107,6 +107,23 @@
<el-col :span="24">
<el-form-item label="风险处置情况" :label-width="100"></el-form-item>
<div class="tab-handle">
<el-button type="primary" size="small"
@click="exportTableData" :disabled="!fxczqkData.length"
>导出</el-button>
<el-upload
ref="uploadRef"
class="upload-demo"
action=""
:auto-upload="false"
:on-change="importTableData"
:show-file-list="false"
>
<template #trigger>
<el-button type="primary" size="small"
style="margin: 0 12px;"
>导入</el-button>
</template>
</el-upload>
<el-button type="primary" size="small" @click="addFxczqk">新增</el-button>
</div>
<el-table :data="fxczqkData" style="width: 100%" empty-text="暂无数据" border>
......@@ -228,6 +245,7 @@
import { useRouter, useRoute } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus";
import { useUserStore } from "@/stores/user.js";
import { getTableFileData, exportTableFile } from "../../common/tableFileHandle";
const userStore = useUserStore();
const router = useRouter();
const route = useRoute();
......@@ -329,6 +347,67 @@
fxczqkData.value.splice(index, 1);
})
}
const tableColumns = [
{
prop: "nd",
label: "年度"
},
{
prop: "mbfj",
label: "目标分解"
},
{
prop: "jzqk",
label: "进展情况"
},
{
prop: "fxdj",
label: "风险等级"
},
{
prop: "fxfl",
label: "风险分类"
},
{
prop: "fxgk",
label: "风险概况"
},
{
prop: "kzcs",
label: "控制措施"
},
{
prop: "czjz",
label: "处置进展"
},
{
prop: "yjzgwcsj",
label: "预计整改完成时间"
},
{
prop: "fxsjje",
label: "风险涉及金额",
type: "number"
},
{
prop: "cxgl",
label: "出险概率"
},
{
prop: "fxfxfs",
label: "风险发现方式"
}
];
const importTableData = (file) => {
getTableFileData(file, tableColumns).then(res => {
fxczqkData.value = fxczqkData.value.concat(res);
});
}
const exportTableData = () => {
exportTableFile(fxczqkData.value, tableColumns, "", "风险处置情况")
};
const backClick = () => {
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