明树Git Lab

Commit bf028b85 authored by zhanghan's avatar zhanghan

进度条处理

parent ee354647
Pipeline #111015 passed with stage
in 19 seconds
......@@ -3,16 +3,32 @@
<!-- 上传按钮区域 -->
<div class="uploadFlex">
<el-upload
:timeout="300000"
:action="uploadUrl"
:headers="headers"
:show-file-list="false"
multiple
:disabled="disabled"
:disabled="disabled || uploading"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
:before-upload="beforeUpload"
:on-progress="handleProgress"
>
<el-button type="default" :disabled="disabled">上传</el-button>
<el-button type="default" :disabled="disabled || uploading">
<span v-if="uploading">上传中...</span>
<span v-else>上传</span>
</el-button>
</el-upload>
<!-- 进度条 -->
<div v-if="showProgress" class="progress-container">
<el-progress
:percentage="uploadPercentage"
stroke-width="6"
size="small"
/>
</div>
<el-button
v-if="!isInline"
type="default"
......@@ -24,6 +40,7 @@
</el-button>
<slot name="actions"></slot>
</div>
<!-- 文件列表表格 -->
<el-table
v-if="!isInline"
......@@ -311,6 +328,11 @@ const emit = defineEmits([
const selectedIds = ref([]);
const popoverVisible = ref(false);
// ========== 上传进度 & loading 状态 ==========
const uploading = ref(false); // 上传中
const uploadPercentage = ref(0); // 进度百分比
const showProgress = ref(false); // 是否显示进度条
// 核心:安全处理文件列表,将非数组值转为空数组
const safeFileList = computed({
get() {
......@@ -326,19 +348,42 @@ const formatDate = (date) => {
return date ? moment(date).format("YYYY-MM-DD HH:mm:SS") : "";
};
// 上传前
const beforeUpload = (file) => {
uploading.value = true;
uploadPercentage.value = 0;
showProgress.value = true;
return true;
};
// 上传进度
const handleProgress = (event, file, fileList) => {
uploadPercentage.value = Math.floor(event.percent);
};
// 文件上传成功处理
const handleUploadSuccess = (res) => {
if (res && res.data) {
safeFileList.value = [...safeFileList.value, res.data];
console.log("上传成功:", res.data);
ElMessage.success("文件上传成功");
popoverVisible.value = false;
}
finishUpload();
};
const beforeUpload = (file) => {
// 可添加文件类型、大小等校验逻辑
return true;
// 上传失败
const handleUploadError = () => {
ElMessage.error("文件上传失败");
finishUpload();
};
// 结束上传
const finishUpload = () => {
uploading.value = false;
uploadPercentage.value = 100;
setTimeout(() => {
showProgress.value = false;
}, 500);
};
// 选择文件变化
......@@ -438,7 +483,9 @@ watch(
}
.uploadFlex {
display: flex;
align-items: center;
margin-bottom: 16px;
gap: 12px;
}
.inline {
display: flex;
......@@ -450,6 +497,12 @@ watch(
}
}
// 进度条容器
.progress-container {
flex: 1;
max-width: 200px;
}
.inline-file-wrapper {
flex: 1;
margin-left: 10px;
......
......@@ -64,7 +64,10 @@
<el-col :span="12">
<el-form-item label="项目名称">
<el-input v-model="formData.projectName" :disabled="projectDisabled" />
<el-input
v-model="formData.projectName"
:disabled="projectDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -583,66 +586,7 @@
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="策划文件">
<el-upload
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers="{ Authorization: token }"
:show-file-list="false"
multiple
:disabled="isPreview"
:on-success="addChwjFile"
>
<el-button :disabled="isPreview" type="default"
>上传</el-button
>
</el-upload>
<el-button
type="default"
@click="multiDeleteChwj"
:disabled="!chwjSelectIds.length"
>删除选中文件</el-button
>
</el-form-item>
<el-form-item label=" ">
<el-table
:data="chwjData"
style="width: 100%"
empty-text="暂无数据"
border
@selection-change="chwjSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="originalname" label="文件名" />
<el-table-column prop="updatedAt" label="上传时间">
<template #default="{ row }">
<span>{{
moment(row.updatedAt).format(
"YYYY-MM-DD HH:mm:SS"
)
}}</span>
</template>
</el-table-column>
<el-table-column prop="size" label="大小">
<template #default="{ row }">
<span>{{ row.size }} MB</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="100">
<template #default="{ row, index }">
<span
class="always-click"
@click="downloadFile(row)"
>下载</span
>
<el-button
link
type="danger"
size="small"
@click="deleteChwj(index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<FileUploader v-model="chwjData" />
</el-form-item>
</el-col>
</el-row>
......@@ -659,64 +603,7 @@
>
<el-col :span="24">
<el-form-item label="责任书文件">
<el-upload
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers="{ Authorization: token }"
:show-file-list="false"
multiple
:on-success="addZrsFile"
>
<el-button type="default">上传</el-button>
</el-upload>
<el-button
type="default"
@click="multiDeleteZrs"
:disabled="!zrsSelectIds.length"
>删除选中文件</el-button
>
</el-form-item>
<el-form-item label="">
<el-table
:data="zrsData"
style="width: 100%"
empty-text="暂无数据"
border
@selection-change="zrsSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="originalname" label="文件名" />
<el-table-column prop="updatedAt" label="上传时间">
<template #default="{ row, index }">
<span>{{
moment(row.updatedAt).format(
"YYYY-MM-DD HH:mm:SS"
)
}}</span>
</template>
</el-table-column>
<el-table-column prop="size" label="大小">
<template #default="{ row }">
<span>{{ row.size }} MB</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="100">
<template #default="{ row, index }">
<span
class="always-click"
@click="downloadFile(row)"
>下载</span
>
<el-button
link
type="danger"
size="small"
@click="deleteZrs(index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<FileUploader v-model="zrsData" />
</el-form-item>
</el-col>
</el-form>
......@@ -849,7 +736,7 @@ watch(
} else {
selectedFullPath.value = "";
}
}
},
);
// 构建节点映射表
const nodeMap = new Map();
......@@ -928,7 +815,7 @@ const getStatementInfo = () => {
...item,
sfsy: item.sfsy && item.sfsy.toString(),
};
})
}),
);
Object.assign(chwjData.value, res.chwj);
Object.assign(pfyjlsqkData.value, res.tzmbzrsPfyjs);
......@@ -1001,7 +888,7 @@ const multiDeleteZrs = () => {
})
.then(() => {
zrsData.value = zrsData.value.filter(
(item) => !zrsSelectIds.value.includes(item.id)
(item) => !zrsSelectIds.value.includes(item.id),
);
})
.catch(() => {});
......@@ -1584,7 +1471,7 @@ const multiDeleteChwj = () => {
})
.then(() => {
chwjData.value = chwjData.value.filter(
(item) => !chwjSelectIds.value.includes(item.id)
(item) => !chwjSelectIds.value.includes(item.id),
);
})
.catch(() => {});
......@@ -1616,7 +1503,7 @@ const multiDeleteQdfj = () => {
})
.then(() => {
qdfjData.value = qdfjData.value.filter(
(item) => !qdfjSelectIds.value.includes(item.id)
(item) => !qdfjSelectIds.value.includes(item.id),
);
})
.catch(() => {});
......@@ -1690,7 +1577,11 @@ const exportStatement = () => {
{ prop: "zbmc", label: "指标名称" },
{ prop: "zbmbz", label: "指标目标值" },
{ prop: "khjzf", label: "考核基准分" },
{ prop: "sfsy", label: "是否适用", formatter: (v) => v === "1" ? "是" : "否" },
{
prop: "sfsy",
label: "是否适用",
formatter: (v) => (v === "1" ? "是" : "否"),
},
{ prop: "khsm", label: "考核说明" },
],
colWidths: [35, 15, 12, 10, 30],
......@@ -1700,10 +1591,20 @@ const exportStatement = () => {
type: "table",
data: pfyjlsqkData.value,
columns: [
{ prop: "lx", label: "类型", formatter: (v) => pfyjlxList.find((l) => l.key === v)?.name || v || "" },
{
prop: "lx",
label: "类型",
formatter: (v) =>
pfyjlxList.find((l) => l.key === v)?.name || v || "",
},
{ prop: "pfyj", label: "批复意见" },
{ prop: "jzf", label: "基准分" },
{ prop: "lsqk", label: "落实情况", formatter: (v) => lsqkList.find((l) => l.key === v)?.name || v || "" },
{
prop: "lsqk",
label: "落实情况",
formatter: (v) =>
lsqkList.find((l) => l.key === v)?.name || v || "",
},
{ prop: "lssj", label: "落实时间" },
{ prop: "lsqkjtsm", label: "落实情况具体说明" },
],
......
......@@ -1259,289 +1259,29 @@
</el-table-column>
</el-table>
<el-form-item label="里程碑计划审批表" :label-width="130">
<el-upload
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers="{ Authorization: token }"
:show-file-list="false"
multiple
:on-success="addLcbspFile"
>
<el-button type="default">上传</el-button>
</el-upload>
<el-button
type="default"
@click="multiDeleteLcbsp"
:disabled="!lcbspSelectIds.length"
>删除选中文件</el-button
>
<FileUploader v-model="lcbspData" />
</el-form-item>
<el-table
:data="lcbspData"
style="width: 100%"
empty-text="暂无数据"
border
@selection-change="lcbspSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="originalname" label="文件名" />
<el-table-column prop="updatedAt" label="上传时间" />
<el-table-column prop="size" label="大小">
<template #default="{ row }">
<span>{{ row.size }} MB</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="100">
<template #default="{ row, $index }">
<span class="always-click" @click="downloadFile(row)"
>下载</span
>
<el-button
link
type="danger"
size="small"
@click="deleteLcbsp($index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item title="投评决策资料" name="投评决策资料">
<el-form-item label="可研材料">
<el-upload
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers="{ Authorization: token }"
:show-file-list="false"
multiple
:on-success="addKyclFile"
>
<el-button type="default">上传</el-button>
</el-upload>
<el-button
type="default"
@click="multiDeleteKycl"
:disabled="!kyclSelectIds.length"
>删除选中文件</el-button
>
<FileUploader v-model="kyclData" />
</el-form-item>
<el-table
:data="kyclData"
style="width: 100%"
empty-text="暂无数据"
border
@selection-change="kyclSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="originalname" label="文件名" />
<el-table-column prop="updatedAt" label="上传时间" />
<el-table-column prop="size" label="大小">
<template #default="{ row }">
<span>{{ row.size }} MB</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="100">
<template #default="{ row, $index }">
<span class="always-click" @click="downloadFile(row)"
>下载</span
>
<el-button
link
type="danger"
size="small"
@click="deleteKycl($index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<el-form-item label="经济指标初步测算资料">
<el-upload
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers="{ Authorization: token }"
:show-file-list="false"
multiple
:on-success="addJjzbcsFile"
>
<el-button type="default">上传</el-button>
</el-upload>
<el-button
type="default"
@click="multiDeleteJjzbcs"
:disabled="!jjzbcsSelectIds.length"
>删除选中文件</el-button
>
<FileUploader v-model="jjzbcsData" />
</el-form-item>
<el-table
:data="jjzbcsData"
style="width: 100%"
empty-text="暂无数据"
border
@selection-change="jjzbcsSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="originalname" label="文件名" />
<el-table-column prop="updatedAt" label="上传时间" />
<el-table-column prop="size" label="大小">
<template #default="{ row }">
<span>{{ row.size }} MB</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="100">
<template #default="{ row, $index }">
<span class="always-click" @click="downloadFile(row)"
>下载</span
>
<el-button
link
type="danger"
size="small"
@click="deleteJjzbcs($index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<el-form-item label="补充相关支撑材料">
<el-upload
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers="{ Authorization: token }"
:show-file-list="false"
multiple
:on-success="addTpbczcclFile"
>
<el-button type="default">上传</el-button>
</el-upload>
<el-button
type="default"
@click="multiDeleteTpbczccl"
:disabled="!tpbczcclSelectIds.length"
>删除选中文件</el-button
>
<FileUploader v-model="tpbczcclData" />
</el-form-item>
<el-table
:data="tpbczcclData"
style="width: 100%"
empty-text="暂无数据"
border
@selection-change="tpbczcclSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="originalname" label="文件名" />
<el-table-column prop="updatedAt" label="上传时间" />
<el-table-column prop="size" label="大小">
<template #default="{ row }">
<span>{{ row.size }} MB</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="100">
<template #default="{ row, $index }">
<span class="always-click" @click="downloadFile(row)"
>下载</span
>
<el-button
link
type="danger"
size="small"
@click="deleteTpbczccl($index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<el-form-item label="其他相关支撑材料">
<el-upload
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers="{ Authorization: token }"
:show-file-list="false"
multiple
:on-success="addTpzcclFile"
>
<el-button type="default">上传</el-button>
</el-upload>
<el-button
type="default"
@click="multiDeleteTpzccl"
:disabled="!tpzcclSelectIds.length"
>删除选中文件</el-button
>
<FileUploader v-model="tpzcclData" />
</el-form-item>
<el-table
:data="tpzcclData"
style="width: 100%"
empty-text="暂无数据"
border
@selection-change="tpzcclSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="originalname" label="文件名" />
<el-table-column prop="updatedAt" label="上传时间" />
<el-table-column prop="size" label="大小">
<template #default="{ row }">
<span>{{ row.size }} MB</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="100">
<template #default="{ row, $index }">
<span class="always-click" @click="downloadFile(row)"
>下载</span
>
<el-button
link
type="danger"
size="small"
@click="deleteTpzccl($index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<el-form-item label="上会议案">
<el-upload
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers="{ Authorization: token }"
:show-file-list="false"
multiple
:on-success="addShyaFile"
>
<el-button type="default">上传</el-button>
</el-upload>
<el-button
type="default"
@click="multiDeleteShya"
:disabled="!shyaSelectIds.length"
>删除选中文件</el-button
>
<FileUploader v-model="shyaData" />
</el-form-item>
<el-table
:data="shyaData"
style="width: 100%"
empty-text="暂无数据"
border
@selection-change="shyaSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="originalname" label="文件名" />
<el-table-column prop="updatedAt" label="上传时间" />
<el-table-column prop="size" label="大小">
<template #default="{ row }">
<span>{{ row.size }} MB</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="100">
<template #default="{ row, $index }">
<span class="always-click" @click="downloadFile(row)"
>下载</span
>
<el-button
link
type="danger"
size="small"
@click="deleteShya($index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-collapse-item>
</el-collapse>
</el-form>
......@@ -1552,6 +1292,7 @@
<script setup>
import { inject } from "vue";
import CommonSelector from "@/components/CommonSelector.vue";
import FileUploader from "@/components/FileUploader/index.vue";
const {
jcFormData,
......
......@@ -38,10 +38,7 @@
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item
title="财务评价指标"
name="财务评价指标"
>
<el-collapse-item title="财务评价指标" name="财务评价指标">
<el-table
:data="cwpjzbData"
style="width: 100%"
......@@ -50,10 +47,7 @@
>
<el-table-column prop="name" label="指标" />
<el-table-column prop="unit" label="" width="70" />
<el-table-column
prop="tzpgjdpfz"
label="投资评估阶段批复值"
>
<el-table-column prop="tzpgjdpfz" label="投资评估阶段批复值">
<template #default="scope">
<el-input
v-model="scope.row.num"
......@@ -65,15 +59,9 @@
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item
title="核心边界条件"
name="核心边界条件"
>
<el-collapse-item title="核心边界条件" name="核心边界条件">
<div class="tab-handle">
<el-button
type="primary"
size="small"
@click="addHxbjtj"
<el-button type="primary" size="small" @click="addHxbjtj"
>新增</el-button
>
</div>
......@@ -84,11 +72,7 @@
border
>
<el-table-column type="index" width="50" />
<el-table-column
prop="type"
label="业务类型"
width="130"
>
<el-table-column prop="type" label="业务类型" width="130">
<template #default="scope">
<CommonSelector
v-model="scope.row.type"
......@@ -97,11 +81,7 @@
</template>
</el-table-column>
<el-table-column label="单位工程造价">
<el-table-column
prop="dwgczjSz"
label="数值"
width="180"
>
<el-table-column prop="dwgczjSz" label="数值" width="180">
<template #default="scope">
<el-input
v-model="scope.row.dwgczjSz"
......@@ -111,11 +91,7 @@
/>
</template>
</el-table-column>
<el-table-column
prop="dwgczjDw"
label="单位"
width="130"
>
<el-table-column prop="dwgczjDw" label="单位" width="130">
<template #default="scope">
<CommonSelector
v-model="scope.row.dwgczjDw"
......@@ -125,11 +101,7 @@
</el-table-column>
</el-table-column>
<el-table-column label="销售/服务能力">
<el-table-column
prop="xsfwnlSz"
label="数值"
width="180"
>
<el-table-column prop="xsfwnlSz" label="数值" width="180">
<template #default="scope">
<el-input
v-model="scope.row.xsfwnlSz"
......@@ -139,18 +111,10 @@
/>
</template>
</el-table-column>
<el-table-column
prop="xsfwnlDw"
label="单位"
width="60"
/>
<el-table-column prop="xsfwnlDw" label="单位" width="60" />
</el-table-column>
<el-table-column label="年均负荷率">
<el-table-column
prop="njfhlSz"
label="数值"
width="180"
>
<el-table-column prop="njfhlSz" label="数值" width="180">
<template #default="scope">
<el-input
v-model="scope.row.njfhlSz"
......@@ -160,18 +124,10 @@
/>
</template>
</el-table-column>
<el-table-column
prop="njfhlDw"
label="单位"
width="60"
/>
<el-table-column prop="njfhlDw" label="单位" width="60" />
</el-table-column>
<el-table-column label="单位生产/服务总成本">
<el-table-column
prop="dwscfwzcbSz"
label="数值"
width="180"
>
<el-table-column prop="dwscfwzcbSz" label="数值" width="180">
<template #default="scope">
<el-input
v-model="scope.row.dwscfwzcbSz"
......@@ -181,18 +137,10 @@
/>
</template>
</el-table-column>
<el-table-column
prop="dwscfwzcbDw"
label="单位"
width="60"
/>
<el-table-column prop="dwscfwzcbDw" label="单位" width="60" />
</el-table-column>
<el-table-column label="单位售价(含税)">
<el-table-column
prop="dwsjSz"
label="数值"
width="180"
>
<el-table-column prop="dwsjSz" label="数值" width="180">
<template #default="scope">
<el-input
v-model="scope.row.dwsjSz"
......@@ -202,22 +150,14 @@
/>
</template>
</el-table-column>
<el-table-column
prop="dwsjDw"
label="单位"
width="90"
>
<el-table-column prop="dwsjDw" label="单位" width="90">
<template #default="scope">
<el-input v-model="scope.row.dwsjDw" />
</template>
</el-table-column>
</el-table-column>
<el-table-column label="盈亏平衡点">
<el-table-column
prop="ykphdlx"
label="类型"
width="130"
>
<el-table-column prop="ykphdlx" label="类型" width="130">
<template #default="scope">
<CommonSelector
v-model="scope.row.ykphdlx"
......@@ -225,11 +165,7 @@
/>
</template>
</el-table-column>
<el-table-column
prop="ykphdsz"
label="数值"
width="180"
>
<el-table-column prop="ykphdsz" label="数值" width="180">
<template #default="scope">
<el-input
v-model="scope.row.ykphdsz"
......@@ -239,11 +175,7 @@
/>
</template>
</el-table-column>
<el-table-column
prop="ykphddw"
label="单位"
width="60"
/>
<el-table-column prop="ykphddw" label="单位" width="60" />
</el-table-column>
<el-table-column
prop="bcsm"
......@@ -251,17 +183,10 @@
width="180"
>
<template #default="scope">
<el-input
v-model="scope.row.bcsm"
type="textarea"
/>
<el-input v-model="scope.row.bcsm" type="textarea" />
</template>
</el-table-column>
<el-table-column
label="操作"
width="60"
fixed="right"
>
<el-table-column label="操作" width="60" fixed="right">
<template #default="scope">
<el-button
link
......@@ -274,25 +199,16 @@
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item
title="项目立项信息"
name="项目立项信息"
>
<el-collapse-item title="项目立项信息" name="项目立项信息">
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="其他会议审议情况">
<el-input
v-model="formData.qthysyqk"
type="textarea"
/>
<el-input v-model="formData.qthysyqk" type="textarea" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="立项最终审批意见">
<CommonSelector
v-model="formData.lxzzpfyj"
dictName="spyj"
/>
<CommonSelector v-model="formData.lxzzpfyj" dictName="spyj" />
</el-form-item>
</el-col>
<el-col :span="8">
......@@ -311,77 +227,13 @@
</el-col>
<el-col :span="24">
<el-form-item label="未通过主要原因与要求">
<el-input
v-model="formData.wtgzyyyyyq"
type="textarea"
/>
<el-input v-model="formData.wtgzyyyyyq" type="textarea" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item
label="立项批复文件"
:label-width="100"
>
<el-upload
:action="
windowConfig.baseUrl + '/api/file/upload'
"
:headers="{ Authorization: token }"
:show-file-list="false"
multiple
:on-success="addLxpfFile"
>
<el-button type="default">上传</el-button>
</el-upload>
<el-button
type="default"
@click="multiDeleteLxpf"
:disabled="!lxpfSelectIds.length"
>删除选中文件</el-button
>
<el-form-item label="立项批复文件" :label-width="100">
<FileUploader v-model="lxpfwjData" />
</el-form-item>
<el-table
:data="lxpfwjData"
style="width: 100%"
empty-text="暂无数据"
border
@selection-change="lxpfSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column
prop="originalname"
label="文件名"
/>
<el-table-column
prop="updatedAt"
label="上传时间"
/>
<el-table-column prop="size" label="大小">
<template #default="{ row }">
<span>{{ row.size }} MB</span>
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="100"
>
<template #default="{ row, $index }">
<span
class="always-click"
@click="downloadFile(row)"
>下载</span
>
<el-button
link
type="danger"
size="small"
@click="deleteLxpf($index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
</el-collapse-item>
......@@ -392,66 +244,8 @@
:columns="spyjColumns"
/>
<el-form-item label="相关上会材料" :label-width="100">
<el-upload
:action="
windowConfig.baseUrl + '/api/file/upload'
"
:headers="{ Authorization: token }"
:show-file-list="false"
multiple
:on-success="addShclFile"
>
<el-button type="default">上传</el-button>
</el-upload>
<el-button
type="default"
@click="multiDeleteShcl"
:disabled="!shclSelectIds.length"
>删除选中文件</el-button
>
<FileUploader v-model="shclData" />
</el-form-item>
<el-table
:data="shclData"
style="width: 100%"
empty-text="暂无数据"
border
@selection-change="shclSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column
prop="originalname"
label="文件名"
/>
<el-table-column
prop="updatedAt"
label="上传时间"
/>
<el-table-column prop="size" label="大小">
<template #default="{ row }">
<span>{{ row.size }} MB</span>
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="100"
>
<template #default="{ row, $index }">
<span
class="always-click"
@click="downloadFile(row)"
>下载</span
>
<el-button
link
type="danger"
size="small"
@click="deleteShcl($index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-collapse-item>
</el-collapse>
</el-form>
......@@ -463,22 +257,45 @@
import { inject } from "vue";
import CommonSelector from "@/components/CommonSelector.vue";
import FormDynamicTable from "@/components/FormDynamicTable/index.vue";
import FileUploader from "@/components/FileUploader/index.vue";
const {
formData, isPreview, activeCollapse,
tzzeqkjData, cwpjzbData, hxbjtjData,
lxpfwjData, lxpfSelectIds,
spyjTableData, shclData, shclSelectIds,
downloadFile, ElMessageBox,
addHxbjtj, deleteHxbjtj,
addLxpfFile, deleteLxpf, lxpfSelectionChange, multiDeleteLxpf,
addShclFile, deleteShcl, shclSelectionChange, multiDeleteShcl,
windowConfig, token,
formData,
isPreview,
activeCollapse,
tzzeqkjData,
cwpjzbData,
hxbjtjData,
lxpfwjData,
lxpfSelectIds,
spyjTableData,
shclData,
shclSelectIds,
downloadFile,
ElMessageBox,
addHxbjtj,
deleteHxbjtj,
addLxpfFile,
deleteLxpf,
lxpfSelectionChange,
multiDeleteLxpf,
addShclFile,
deleteShcl,
shclSelectionChange,
multiDeleteShcl,
windowConfig,
token,
} = inject("lxShared");
// 审批意见表格列配置
const spyjColumns = [
{ prop: "lx", label: "类型", type: "select", optionKey: "yjlx", minWidth: 130 },
{
prop: "lx",
label: "类型",
type: "select",
optionKey: "yjlx",
minWidth: 130,
},
{ prop: "pfyj", label: "批复意见", type: "textarea" },
{ prop: "pfyjsj", label: "批复意见时间", type: "date" },
];
......
......@@ -11,10 +11,7 @@
"
>
<el-collapse v-model="activeCollapse">
<el-collapse-item
title="项目基本信息"
name="项目基本信息"
>
<el-collapse-item title="项目基本信息" name="项目基本信息">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="项目名称">
......@@ -28,9 +25,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="项目外文名称">
<el-input
v-model="formData.projectForeignName"
/>
<el-input v-model="formData.projectForeignName" />
</el-form-item>
</el-col>
<el-col :span="8">
......@@ -59,10 +54,7 @@
<el-col :span="12">
<el-form-item label="主业/非主业">
<CommonSelector
v-model="formData.zyfzy"
dictName="zyfzy"
/>
<CommonSelector v-model="formData.zyfzy" dictName="zyfzy" />
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -90,18 +82,12 @@
</el-col>
<el-col :span="12">
<el-form-item label="项目阶段">
<CommonSelector
v-model="formData.xmjd"
dictName="xmjd"
/>
<CommonSelector v-model="formData.xmjd" dictName="xmjd" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="财务报表类型">
<CommonSelector
v-model="formData.cwbblx"
dictName="cwbblx"
/>
<CommonSelector v-model="formData.cwbblx" dictName="cwbblx" />
</el-form-item>
</el-col>
<el-col :span="24">
......@@ -163,10 +149,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="项目区域">
<CommonSelector
v-model="formData.xmqy"
dictName="xmqy"
/>
<CommonSelector v-model="formData.xmqy" dictName="xmqy" />
</el-form-item>
</el-col>
<el-col :span="8">
......@@ -314,10 +297,7 @@
/>
</el-form-item>
<el-form-item label="四新分类">
<CommonSelector
v-model="formData.sxfl"
dictName="sxfl"
/>
<CommonSelector v-model="formData.sxfl" dictName="sxfl" />
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -384,10 +364,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item
label-width="300px"
label="是否国家领导见签"
>
<el-form-item label-width="300px" label="是否国家领导见签">
<CommonSelector
:radio="true"
v-model="formData.sfgjldjq"
......@@ -396,10 +373,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item
label-width="300px"
label="是否境内特别监管类"
>
<el-form-item label-width="300px" label="是否境内特别监管类">
<CommonSelector
:radio="true"
v-model="formData.sfjntbjgl"
......@@ -414,10 +388,7 @@
name="建设规模(实物量指标)"
>
<div class="tab-handle">
<el-button
type="primary"
size="small"
@click="addSwlzb"
<el-button type="primary" size="small" @click="addSwlzb"
>新增</el-button
>
</div>
......@@ -433,11 +404,7 @@
<el-input v-model="scope.row.name" />
</template>
</el-table-column>
<el-table-column
prop="num"
label="数量"
width="180"
>
<el-table-column prop="num" label="数量" width="180">
<template #default="scope">
<el-input
v-model="scope.row.num"
......@@ -454,10 +421,7 @@
</el-table-column>
<el-table-column prop="bcsm" label="补充说明">
<template #default="scope">
<el-input
v-model="scope.row.bcsm"
type="textarea"
/>
<el-input v-model="scope.row.bcsm" type="textarea" />
</template>
</el-table-column>
<el-table-column label="操作" width="60">
......@@ -475,10 +439,7 @@
</el-collapse-item>
<el-collapse-item title="股东信息" name="股东信息">
<div class="tab-handle">
<el-button
type="primary"
size="small"
@click="addGdxx"
<el-button type="primary" size="small" @click="addGdxx"
>新增</el-button
>
</div>
......@@ -493,11 +454,7 @@
width="50"
:index="gdxxIndexMethod"
/>
<el-table-column
prop="gdlx"
label="股东类型"
width="130"
>
<el-table-column prop="gdlx" label="股东类型" width="130">
<template #default="scope">
<CommonSelector
v-if="scope.$index < gdxxData.length - 1"
......@@ -506,11 +463,7 @@
@change="changeGdxxSums"
/>
<div v-else class="sums-column">
<div
class=""
v-for="(value, key) in gdxxSums"
:key="key"
>
<div class="" v-for="(value, key) in gdxxSums" :key="key">
{{ value.name }}
</div>
<div>合计</div>
......@@ -526,11 +479,7 @@
<div v-else></div>
</template>
</el-table-column>
<el-table-column
prop="cgbl"
label="持股比例(%)"
width="180"
>
<el-table-column prop="cgbl" label="持股比例(%)" width="180">
<template #default="scope">
<el-input
v-if="scope.$index < gdxxData.length - 1"
......@@ -541,22 +490,14 @@
@blur="changeGdxxSums"
/>
<div v-else class="sums-column">
<div
class=""
v-for="(value, key) in gdxxSums"
:key="key"
>
<div class="" v-for="(value, key) in gdxxSums" :key="key">
{{ value.cgbl }}%
</div>
<div>{{ getObjSums(gdxxSums, "cgbl") }}%</div>
</div>
</template>
</el-table-column>
<el-table-column
prop="cze"
label="出资额(万元)"
width="180"
>
<el-table-column prop="cze" label="出资额(万元)" width="180">
<template #default="scope">
<el-input
v-if="scope.$index < gdxxData.length - 1"
......@@ -567,16 +508,10 @@
@blur="changeGdxxSums"
/>
<div v-else class="sums-column">
<div
class=""
v-for="(value, key) in gdxxSums"
:key="key"
>
<div class="" v-for="(value, key) in gdxxSums" :key="key">
{{ value.cze }}万元
</div>
<div>
{{ getObjSums(gdxxSums, "cze") }}万元
</div>
<div>{{ getObjSums(gdxxSums, "cze") }}万元</div>
</div>
</template>
</el-table-column>
......@@ -595,16 +530,10 @@
@blur="changeGdxxSums"
/>
<div v-else class="sums-column">
<div
class=""
v-for="(value, key) in gdxxSums"
:key="key"
>
<div class="" v-for="(value, key) in gdxxSums" :key="key">
{{ value.yjzczb }}万元
</div>
<div>
{{ getObjSums(gdxxSums, "yjzczb") }}万元
</div>
<div>{{ getObjSums(gdxxSums, "yjzczb") }}万元</div>
</div>
</template>
</el-table-column>
......@@ -623,16 +552,10 @@
@blur="changeGdxxSums"
/>
<div v-else class="sums-column">
<div
class=""
v-for="(value, key) in gdxxSums"
:key="key"
>
<div class="" v-for="(value, key) in gdxxSums" :key="key">
{{ value.ycxmzbj }}万元
</div>
<div>
{{ getObjSums(gdxxSums, "ycxmzbj") }}万元
</div>
<div>{{ getObjSums(gdxxSums, "ycxmzbj") }}万元</div>
</div>
</template>
</el-table-column>
......@@ -694,73 +617,11 @@
:autosize="{ minRows: 2, maxRows: 5 }"
/>
</el-form-item>
<!-- <el-form-item label="其他说明">
<el-input v-model="formData.qtsm" type="textarea" />
</el-form-item> -->
</el-collapse-item>
<el-collapse-item title="立项资料" name="立项资料">
<el-form-item label="相关支撑材料" :label-width="100">
<el-upload
:action="
windowConfig.baseUrl + '/api/file/upload'
"
:headers="{ Authorization: token }"
:show-file-list="false"
multiple
:on-success="addZcclFile"
>
<el-button type="default">上传</el-button>
</el-upload>
<el-button
type="default"
@click="multiDeleteZccl"
:disabled="!zcclSelectIds.length"
>删除选中文件</el-button
>
<FileUploader v-model="zcclData" />
</el-form-item>
<el-table
:data="zcclData"
style="width: 100%"
empty-text="暂无数据"
border
@selection-change="zcclSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column
prop="originalname"
label="文件名"
/>
<el-table-column
prop="updatedAt"
label="上传时间"
/>
<el-table-column prop="size" label="大小">
<template #default="{ row }">
<span>{{ row.size }} MB</span>
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="100"
>
<template #default="{ row, $index }">
<!-- 需要在查看表单disabled时保持允许下载 -->
<span
class="always-click"
@click="downloadFile(row)"
>下载</span
>
<el-button
link
type="danger"
size="small"
@click="deleteZccl($index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-collapse-item>
</el-collapse>
</el-form>
......@@ -771,20 +632,48 @@
<script setup>
import { inject } from "vue";
import CommonSelector from "@/components/CommonSelector.vue";
import FileUploader from "@/components/FileUploader/index.vue";
const {
formData, isPreview, activeCollapse,
swlzbData, gdxxData, gdxxSums,
zcclData, zcclSelectIds,
downloadFile, ElMessageBox,
changeJnw, changeSzj, changeDsgj,
changeTzsxyjfl, changeTzsxtzbk, changeTzmdyjfl, changeTzznyjfl,
addSwlzb, deleteSwlzb, addGdxx, deleteGdxx, changeGdxxSums, getObjSums, gdxxIndexMethod,
addZcclFile, deleteZccl, zcclSelectionChange, multiDeleteZccl,
szjList, dsgjList, qxgjList,
tzsxejflList, tzsxxfbkList,
tzmdejflList, tzznejflList,
gmjjhyList, gmjjhyProps,
windowConfig, token,
formData,
isPreview,
activeCollapse,
swlzbData,
gdxxData,
gdxxSums,
zcclData,
zcclSelectIds,
downloadFile,
ElMessageBox,
changeJnw,
changeSzj,
changeDsgj,
changeTzsxyjfl,
changeTzsxtzbk,
changeTzmdyjfl,
changeTzznyjfl,
addSwlzb,
deleteSwlzb,
addGdxx,
deleteGdxx,
changeGdxxSums,
getObjSums,
gdxxIndexMethod,
addZcclFile,
deleteZccl,
zcclSelectionChange,
multiDeleteZccl,
szjList,
dsgjList,
qxgjList,
tzsxejflList,
tzsxxfbkList,
tzmdejflList,
tzznejflList,
gmjjhyList,
gmjjhyProps,
windowConfig,
token,
uploadDialogVisible,
} = inject("lxShared");
</script>
......@@ -50,9 +50,9 @@ export function useJueceData(jcFormData, gdlxListRef) {
obj[item.gdlx].lrfpbl = new Decimal(
Number(obj[item.gdlx].lrfpbl || 0),
).plus(new Decimal(Number(item.lrfpbl || 0)));
obj[item.gdlx].cze = new Decimal(
Number(obj[item.gdlx].cze || 0),
).plus(new Decimal(Number(item.cze || 0)));
obj[item.gdlx].cze = new Decimal(Number(obj[item.gdlx].cze || 0)).plus(
new Decimal(Number(item.cze || 0)),
);
obj[item.gdlx].yjzczb = new Decimal(
Number(obj[item.gdlx].yjzczb || 0),
).plus(new Decimal(Number(item.yjzczb || 0)));
......@@ -539,25 +539,86 @@ export function useJueceData(jcFormData, gdlxListRef) {
return {
jcRadioClick,
jcSwlzbData, addJcSwlzb, deleteJcSwlzb,
jcGdxxData, addJcGdxx, deleteJcGdxx, jcgdxxSums, changeJcGdxxSums, jcgdxxIndexMethod,
dbzqData, addDbzq, deleteDbzq,
fxglData, addFxgl, deleteFxgl,
lcbjdData, addLcbjd, deleteLcbjd,
lcbspData, addLcbspFile, deleteLcbsp, lcbspSelectIds, lcbspSelectionChange, multiDeleteLcbsp,
kyclData, addKyclFile, deleteKycl, kyclSelectIds, kyclSelectionChange, multiDeleteKycl,
jjzbcsData, addJjzbcsFile, deleteJjzbcs, jjzbcsSelectIds, jjzbcsSelectionChange, multiDeleteJjzbcs,
tpbczcclData, addTpbczcclFile, deleteTpbczccl, tpbczcclSelectIds, tpbczcclSelectionChange, multiDeleteTpbczccl,
tpzcclData, addTpzcclFile, deleteTpzccl, tpzcclSelectIds, tpzcclSelectionChange, multiDeleteTpzccl,
shyaData, addShyaFile, deleteShya, shyaSelectIds, shyaSelectionChange, multiDeleteShya,
jcSwlzbData,
addJcSwlzb,
deleteJcSwlzb,
jcGdxxData,
addJcGdxx,
deleteJcGdxx,
jcgdxxSums,
changeJcGdxxSums,
jcgdxxIndexMethod,
dbzqData,
addDbzq,
deleteDbzq,
fxglData,
addFxgl,
deleteFxgl,
lcbjdData,
addLcbjd,
deleteLcbjd,
lcbspData,
addLcbspFile,
deleteLcbsp,
lcbspSelectIds,
lcbspSelectionChange,
multiDeleteLcbsp,
kyclData,
addKyclFile,
deleteKycl,
kyclSelectIds,
kyclSelectionChange,
multiDeleteKycl,
jjzbcsData,
addJjzbcsFile,
deleteJjzbcs,
jjzbcsSelectIds,
jjzbcsSelectionChange,
multiDeleteJjzbcs,
tpbczcclData,
addTpbczcclFile,
deleteTpbczccl,
tpbczcclSelectIds,
tpbczcclSelectionChange,
multiDeleteTpbczccl,
tpzcclData,
addTpzcclFile,
deleteTpzccl,
tpzcclSelectIds,
tpzcclSelectionChange,
multiDeleteTpzccl,
shyaData,
addShyaFile,
deleteShya,
shyaSelectIds,
shyaSelectionChange,
multiDeleteShya,
jcTzzeqkjData,
jcCwpjzbData,
jcHxbjtjData, addJchxbjtj, deleteJchxbjtj,
jcztshqkData, addJcztshqk, deleteJcztshqk, addJcztshqkFile, deleteJcztshqkFile,
tzztshqkData, addTzztshqk, deleteTzztshqk, addTzztshqkFile, deleteTzztshqkFile,
jcspyjData, addJcspyj, deleteJcspyj, addJcspyjFile, deleteRowFile,
jcHxbjtjData,
addJchxbjtj,
deleteJchxbjtj,
jcztshqkData,
addJcztshqk,
deleteJcztshqk,
addJcztshqkFile,
deleteJcztshqkFile,
tzztshqkData,
addTzztshqk,
deleteTzztshqk,
addTzztshqkFile,
deleteTzztshqkFile,
jcspyjData,
addJcspyj,
deleteJcspyj,
addJcspyjFile,
deleteRowFile,
bhqkData,
jxjlData, addJxjl, deleteJxjl,
jlrData, addJlr, deleteJlr,
jxjlData,
addJxjl,
deleteJxjl,
jlrData,
addJlr,
deleteJlr,
};
}
......@@ -12,6 +12,7 @@ export function useLixiangData(formData, gdlxListRef) {
delete formData[key];
}
};
let uploadDialogVisible = ref(false);
// 建设规模(实物量指标)
let swlzbData = reactive([]);
......@@ -41,7 +42,8 @@ export function useLixiangData(formData, gdlxListRef) {
if (item.gdlx) {
if (!obj[item.gdlx]) {
obj[item.gdlx] = {
name: gdlxListRef.filter((gdlx) => gdlx.key == item.gdlx)[0].value,
name: gdlxListRef.filter((gdlx) => gdlx.key == item.gdlx)[0]
.value,
};
}
obj[item.gdlx].cgbl = new Decimal(
......@@ -73,6 +75,7 @@ export function useLixiangData(formData, gdlxListRef) {
// 支撑材料
let zcclData = ref([]);
const addZcclFile = (res, file) => {
uploadDialogVisible.value = false;
zcclData.value.push(res.data);
};
const deleteZccl = (index) => {
......@@ -273,14 +276,42 @@ export function useLixiangData(formData, gdlxListRef) {
return {
radioClick,
swlzbData, addSwlzb, deleteSwlzb,
gdxxData, addGdxx, deleteGdxx, gdxxSums, changeGdxxSums, gdxxIndexMethod, getObjSums,
zcclData, addZcclFile, deleteZccl, zcclSelectIds, zcclSelectionChange, multiDeleteZccl,
swlzbData,
addSwlzb,
deleteSwlzb,
gdxxData,
addGdxx,
deleteGdxx,
gdxxSums,
changeGdxxSums,
gdxxIndexMethod,
getObjSums,
zcclData,
addZcclFile,
deleteZccl,
zcclSelectIds,
zcclSelectionChange,
multiDeleteZccl,
tzzeqkjData,
cwpjzbData,
hxbjtjData, addHxbjtj, deleteHxbjtj,
lxpfwjData, addLxpfFile, deleteLxpf, lxpfSelectIds, lxpfSelectionChange, multiDeleteLxpf,
spyjTableData, addSpyj, deleteSpyj,
shclData, addShclFile, deleteShcl, shclSelectIds, shclSelectionChange, multiDeleteShcl,
hxbjtjData,
addHxbjtj,
deleteHxbjtj,
lxpfwjData,
addLxpfFile,
deleteLxpf,
lxpfSelectIds,
lxpfSelectionChange,
multiDeleteLxpf,
spyjTableData,
addSpyj,
deleteSpyj,
shclData,
addShclFile,
deleteShcl,
shclSelectIds,
shclSelectionChange,
multiDeleteShcl,
uploadDialogVisible,
};
}
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