明树Git Lab

Commit d87fef15 authored by zhanghan's avatar zhanghan

bug修改

parent 7a5a6319
Pipeline #108167 passed with stage
in 20 seconds
......@@ -17,139 +17,6 @@
<el-collapse v-model="activeCollapse">
<!-- 基本信息:字段完全对齐数据库 -->
<el-collapse-item title="基本信息" name="基本信息">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="项目名称" required>
<el-select
v-model="formData.projectId"
placeholder="请选择项目名称"
no-data-text="暂无数据"
@change="changeProject"
>
<el-option
v-for="item in projectList"
:key="item.id"
:label="item.projectName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目外文名称">
<el-input
v-model="formData.projectForeignName"
placeholder="请输入项目外文名称"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申报单位">
<el-input
v-model="formData.sbdw"
placeholder="请输入申报单位"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属二级企业">
<el-input
v-model="formData.ssejqy"
placeholder="请输入所属二级企业"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目预计起始时间">
<el-date-picker
v-model="formData.xmkgsjyj"
type="date"
placeholder="请选择项目预计起始时间"
value-format="YYYY-MM-DD"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目公司名称">
<el-input
v-model="formData.xmgsmc"
placeholder="请输入项目公司名称"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目预计完成时间">
<el-date-picker
v-model="formData.xmjgsjyj"
type="date"
placeholder="请选择项目预计完成时间"
value-format="YYYY-MM-DD"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="填报人">
<el-input
v-model="formData.tbr"
placeholder="请输入填报人"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="填报人联系电话">
<el-input
v-model="formData.tbrlxdh"
placeholder="请输入填报人联系电话"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目建设期 (月)">
<el-input
v-model="formData.xmjsqy"
:min="0"
placeholder="请输入项目建设期 (月)"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目流转状态(审批状态)">
<CommonSelector
v-model="formData.projectLzType"
dictName="xmlzzt"
></CommonSelector>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目阶段">
<CommonSelector
v-model="formData.xmjd"
dictName="xmjd"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="运营年限(年)">
<el-input
v-model="formData.yynxn"
:min="0"
placeholder="请输入运营年限(年)"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="建成后成效">
<el-input
v-model="formData.jchcx"
type="textarea"
:rows="3"
placeholder="请输入建成后成效"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="项目信息" required>
......
......@@ -70,7 +70,7 @@ let tableColumns = ref([
},
{
prop: "nd",
label: "报送年度",
label: "编制年度",
showOverflowTooltip: true,
},
......
......@@ -18,7 +18,7 @@
<el-row :gutter="20">
<!-- 文件名称 → 绑定wjmc -->
<el-col :span="12">
<el-form-item label="文件名称">
<el-form-item label="文件名称" required>
<el-input
v-model="formData.wjmc"
placeholder="请输入文件名称"
......@@ -28,7 +28,7 @@
<!-- 编制年度 → 绑定nd -->
<el-col :span="12">
<el-form-item label="编制年度">
<el-form-item label="编制年度" required>
<el-date-picker
v-model="formData.nd"
type="year"
......
......@@ -36,7 +36,7 @@
</el-col>
<!-- 编制年度 -->
<el-col :span="12">
<el-form-item label="编制年度">
<el-form-item label="编制年度" required>
<el-date-picker
v-model="formData.planYear"
type="year"
......@@ -88,7 +88,7 @@
</el-col>
<!-- 填报时间 -->
<el-col :span="12">
<el-form-item label="填报时间">
<el-form-item label="填报时间" required>
<el-date-picker
v-model="formData.creatorTime"
type="datetime"
......@@ -221,7 +221,7 @@ const saveClick = () => {
callback: () => {
loading.value = false;
ElMessage.success(
rcTzghId.value ? "投资规划编辑成功" : "投资规划新增成功"
rcTzghId.value ? "投资规划编辑成功" : "投资规划新增成功",
);
router.back(-1);
},
......
......@@ -38,7 +38,7 @@
</el-col>
<!-- 档案分类:绑定后端archiveCategory(非空),保留通用选择器 -->
<el-col :span="12">
<el-form-item label="档案分类">
<el-form-item label="档案分类" required>
<CommonSelector
v-model="formData.archiveCategory"
dictName="dafl"
......@@ -48,7 +48,7 @@
<!-- 档案名称:绑定后端archiveName(非空),修正原重复的qc绑定 -->
<el-col :span="12">
<el-form-item label="档案名称">
<el-form-item label="档案名称" required>
<el-input
v-model="formData.archiveName"
placeholder="请输入档案名称"
......@@ -68,7 +68,7 @@
<!-- 档案日期:绑定后端archiveDate,保留时间选择器 -->
<el-col :span="12">
<el-form-item label="档案日期">
<el-form-item label="档案日期" required>
<el-date-picker
v-model="formData.archiveDate"
type="date"
......
......@@ -96,8 +96,10 @@
label="项目资本金总额(亿元)"
>
<el-input
type="number"
v-model.number="formData.xmzbjze"
placeholder="请输入项目资本金总额(亿元)"
step="0.01"
/>
</el-form-item>
</el-col>
......@@ -107,8 +109,10 @@
label="公司资本金应出资总额(亿元)"
>
<el-input
type="number"
v-model.number="formData.gszbjyczze"
placeholder="请输入公司资本金应出资总额(亿元)"
step="0.01"
/>
</el-form-item>
</el-col>
......@@ -120,8 +124,10 @@
label="公司当前应出资额(亿元)"
>
<el-input
type="number"
v-model.number="formData.gsdqycze"
placeholder="请输入公司当前应出资额(亿元)"
step="0.01"
/>
</el-form-item>
</el-col>
......@@ -131,8 +137,10 @@
label="公司当前已出资额(亿元)"
>
<el-input
type="number"
v-model.number="formData.gsdqyjcze"
placeholder="请输入公司当前已出资额(亿元)"
step="0.01"
/>
</el-form-item>
</el-col>
......@@ -144,8 +152,10 @@
label="公司当前应出未出金额(亿元)"
>
<el-input
type="number"
v-model.number="formData.gsdqycwcje"
placeholder="请输入公司当前应出未出金额(亿元)"
step="0.01"
/>
</el-form-item>
</el-col>
......@@ -155,8 +165,10 @@
label="公司当前剩余出资额(亿元)"
>
<el-input
type="number"
v-model.number="formData.gsdqsycze"
placeholder="请输入公司当前剩余出资额(亿元)"
step="0.01"
/>
</el-form-item>
</el-col>
......@@ -256,8 +268,10 @@
<el-col :span="12">
<el-form-item label="累计获取分红(万元)">
<el-input
type="number"
v-model.number="formData.ljhqfh"
placeholder="请输入累计获取分红(万元)"
step="0.01"
/>
</el-form-item>
</el-col>
......@@ -268,16 +282,20 @@
<el-col :span="12">
<el-form-item label="应投入资金(万元)">
<el-input
type="number"
v-model.number="formData.ytrzj"
placeholder="请输入应投入资金(万元)"
step="0.01"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="累计投入资金(万元)">
<el-input
type="number"
v-model.number="formData.ljtrzj"
placeholder="请输入累计投入资金(万元)"
step="0.01"
/>
</el-form-item>
</el-col>
......@@ -286,8 +304,10 @@
<el-col :span="12">
<el-form-item label="尚需投入资金(万元)">
<el-input
type="number"
v-model.number="formData.sxtrzj"
placeholder="请输入尚需投入资金(万元)"
step="0.01"
/>
</el-form-item>
</el-col>
......@@ -339,16 +359,20 @@
<el-table-column prop="htje" label="合同金额(万元)">
<template #default="scope">
<el-input
type="number"
v-model.number="scope.row.htje"
placeholder="请输入合同金额(万元)"
step="0.01"
/>
</template>
</el-table-column>
<el-table-column prop="ywlr" label="业务利润(万元)">
<template #default="scope">
<el-input
type="number"
v-model.number="scope.row.ywlr"
placeholder="请输入业务利润(万元)"
step="0.01"
/>
</template>
</el-table-column>
......@@ -391,8 +415,10 @@
<el-table-column prop="fhje" label="分红金额(万元)">
<template #default="scope">
<el-input
type="number"
v-model.number="scope.row.fhje"
placeholder="请输入分红金额"
step="0.01"
/>
</template>
</el-table-column>
......@@ -419,16 +445,20 @@
<el-col :span="12">
<el-form-item label="静态">
<el-input
type="number"
v-model.number="formData.jt"
placeholder="请输入静态"
step="0.01"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="折现(3.5%)">
<el-input
type="number"
v-model.number="formData.zx"
placeholder="请输入折现(3.5%)"
step="0.01"
/>
</el-form-item>
</el-col>
......@@ -478,7 +508,6 @@ import { reactive, ref, onMounted, getCurrentInstance, h, computed } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus";
import { useUserStore } from "@/stores/user.js";
import { number } from "echarts";
// 初始化全局变量
const userStore = useUserStore();
......@@ -486,7 +515,7 @@ const router = useRouter();
const route = useRoute();
const { proxy } = getCurrentInstance();
const token = ref(
userStore.authToken || sessionStorage.getItem("authToken") || ""
userStore.authToken || sessionStorage.getItem("authToken") || "",
);
// 小记金额
......@@ -515,7 +544,7 @@ const activeCollapse = ref([
"分红情况",
]);
// 表单数据
// 表单数据 - 数值字段初始化为数字类型(0)
const formData = reactive({
projectName: "",
qc: "",
......@@ -523,12 +552,12 @@ const formData = reactive({
nbtzglzt: "",
xmscjd: "",
gqjg: "",
xmzbjze: "",
gszbjyczze: "",
gsdqycze: "",
gsdqyjcze: "",
gsdqycwcje: "",
gsdqsycze: "",
xmzbjze: 0,
gszbjyczze: 0,
gsdqycze: 0,
gsdqyjcze: 0,
gsdqycwcje: 0,
gsdqsycze: 0,
cgbczqk: "",
wfqyhttkyd: "",
qyhqjz: "",
......@@ -536,12 +565,12 @@ const formData = reactive({
dbqk: "",
lrfp: "",
sfddlrfptj: "",
ljhqfh: "",
ytrzj: "",
ljtrzj: "",
sxtrzj: "",
jt: "",
zx: "",
ljhqfh: 0,
ytrzj: 0,
ljtrzj: 0,
sxtrzj: 0,
jt: 0,
zx: 0,
lxr: "",
lxfs: "",
bz: "",
......@@ -632,7 +661,8 @@ const rcCgqyglId = ref(route.query.id || "");
let wtyys = ref([]);
const addPfyjlsqk = () => {
wtyys.value.push({});
// 新增行时数值字段初始化为0
wtyys.value.push({ htje: 0, ywlr: 0 });
};
const deletePfyjlsqk = (index) => {
ElMessageBox.confirm("确认删除该项?", "提示", {
......@@ -647,7 +677,8 @@ const deletePfyjlsqk = (index) => {
let tzfhs = ref([]);
// 新增
const addTzfhs = () => {
tzfhs.value.push({});
// 新增行时数值字段初始化为0
tzfhs.value.push({ fhje: 0 });
};
// 删除
const deleteTzfhs = (index) => {
......@@ -694,15 +725,45 @@ const getRcCgqyglDetail = () => {
data: { id: rcCgqyglId.value },
callback: (data) => {
loading.value = false;
Object.assign(formData, {
...data,
// 处理数值字段,确保为数字类型
const formatNumberFields = (obj) => {
const numberFields = [
"xmzbjze",
"gszbjyczze",
"gsdqycze",
"gsdqyjcze",
"gsdqycwcje",
"gsdqsycze",
"ljhqfh",
"ytrzj",
"ljtrzj",
"sxtrzj",
"jt",
"zx",
];
numberFields.forEach((field) => {
obj[field] = Number(obj[field]) || 0;
});
return obj;
};
Object.assign(formData, formatNumberFields(data));
// 处理wtyys数组的数值字段
if (data.wtyys) {
Object.assign(wtyys.value, data.wtyys);
wtyys.value = data.wtyys.map((item) => ({
...item,
htje: Number(item.htje) || 0,
ywlr: Number(item.ywlr) || 0,
}));
}
// 新增:加载
// 处理tzfhs数组的数值字段
if (data.tzfhs) {
Object.assign(tzfhs.value, data.tzfhs);
tzfhs.value = data.tzfhs.map((item) => ({
...item,
fhje: Number(item.fhje) || 0,
}));
}
},
});
......@@ -726,13 +787,49 @@ const saveClick = () => {
? "/api/project/updateCgqygl"
: "/api/project/createCgqygl";
// 处理空数字字段:空值转为null,避免提交空字符串
const submitData = {
// 处理空数字字段:确保所有数值字段为数字类型
const formatSubmitData = (data) => {
const numberFields = [
"xmzbjze",
"gszbjyczze",
"gsdqycze",
"gsdqyjcze",
"gsdqycwcje",
"gsdqsycze",
"ljhqfh",
"ytrzj",
"ljtrzj",
"sxtrzj",
"jt",
"zx",
];
numberFields.forEach((field) => {
data[field] = Number(data[field]) || 0;
});
// 处理数组中的数值字段
data.wtyys = data.wtyys.map((item) => ({
...item,
htje: Number(item.htje) || 0,
ywlr: Number(item.ywlr) || 0,
}));
data.tzfhs = data.tzfhs.map((item) => ({
...item,
fhje: Number(item.fhje) || 0,
}));
return data;
};
// 组装提交数据
const submitData = formatSubmitData({
...formData,
projectId: formData.projectId + "",
wtyys: wtyys.value,
tzfhs: tzfhs.value,
};
});
proxy.$post({
url: url,
......
......@@ -24,10 +24,10 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="颁布时间">
<el-form-item label="颁布时间" required>
<el-date-picker
v-model="formData.bbsj"
type="year"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="请选择颁布时间"
......
......@@ -17,7 +17,7 @@
<el-row :gutter="20">
<!-- 会议编号(必填、唯一) -->
<el-col :span="12">
<el-form-item label="会议编号">
<el-form-item label="会议编号" required>
<el-input
v-model="formData.meetingCode"
placeholder="请输入会议编号(如:TWH202601)"
......@@ -26,7 +26,7 @@
</el-col>
<!-- 会议名称(必填) -->
<el-col :span="12">
<el-form-item label="会议名称">
<el-form-item label="会议名称" required>
<el-input
v-model="formData.meetingName"
placeholder="请输入会议名称"
......@@ -35,7 +35,7 @@
</el-col>
<!-- 会议时间(必填) -->
<el-col :span="12">
<el-form-item label="会议时间">
<el-form-item label="会议时间" required>
<el-date-picker
v-model="formData.meetingDate"
type="date"
......
......@@ -1542,6 +1542,7 @@ const spyjColumns = ref([
// 10. 债权融资列配置
const debtFinancingColumns = ref([
{
disabled: true,
prop: "amount",
label: "金额(万元)",
type: "input",
......
......@@ -273,12 +273,123 @@
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="资金构成" name="资金构成"
>资金构成资金构成资金构成资金构成
<!-- 资金构成 -->
<el-collapse-item title="资金构成" name="资金构成">
<el-table
:data="formData.zjgc"
border
style="width: 100%"
size="small"
>
<el-table-column
prop="index"
label="序号"
width="80"
align="center"
/>
<el-table-column
prop="label"
label="指标"
min-width="300"
/>
<el-table-column
prop="unit"
label="单位"
width="100"
align="center"
/>
<el-table-column
prop="value"
label="人民币计价"
align="right"
min-width="200"
>
<template #default="{ row }">
<el-input
v-if="row.editable && !isPreview"
v-model="row.value"
:precision="2"
controls-position="right"
placeholder="0.00"
type="number"
style="width: 100%"
@change="handleZjgcChange(row)"
/>
<span v-else>{{ row.value || "-" }}</span>
</template>
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item title="财务评价指标" name="财务评价指标"
>财务评价指标</el-collapse-item
<!-- 财务评价指标 -->
<el-collapse-item title="财务评价指标" name="财务评价指标">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="决策:项目投资内部收益率(税前):">
<el-input
v-model="formData.jcxmtznbsylsq"
:precision="2"
:disabled="isPreview"
placeholder="0.00"
type="number"
suffix="%"
@change="handleFinancialIndexChange('jcxmtznbsylsq')"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目资本金内部收益率:">
<el-input
v-model="formData.xmzbjnbsyl"
:precision="2"
:disabled="isPreview"
placeholder="0.00"
type="number"
suffix="%"
@change="handleFinancialIndexChange('xmzbjnbsyl')"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目投资回收期(税前):">
<el-input
v-model="formData.xmtzhsq"
:disabled="isPreview"
placeholder="0.00"
suffix="年"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item
label="实际:预测项目全投资内部收益率(税前):"
>
<el-input
v-model="formData.sjycxmqtznbsylsq"
:precision="2"
:disabled="isPreview"
placeholder="0.00"
type="number"
suffix="%"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="预测项目资本金内部收益率(税后):">
<el-input
v-model="formData.ycxmzbjnbsylsh"
:precision="2"
:disabled="isPreview"
placeholder="0.00"
type="number"
suffix="%"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<!-- 项目中止内容 -->
<el-collapse-item
v-if="formData.djlx == 1"
......@@ -293,6 +404,7 @@
type="textarea"
rows="2"
placeholder="请输入中止原因"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -303,6 +415,7 @@
type="textarea"
rows="3"
placeholder="请输入中止详细原因"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -313,18 +426,23 @@
type="textarea"
rows="3"
placeholder="请输入其他说明"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="中止报告">
<FileUploader v-model="formData.xmzzbg"></FileUploader>
<FileUploader
v-model="formData.xmzzbg"
:disabled="isPreview"
></FileUploader>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="其他相关支撑材料">
<FileUploader
v-model="formData.qtxgzccl"
:disabled="isPreview"
></FileUploader>
</el-form-item>
</el-col>
......@@ -332,6 +450,7 @@
<el-form-item label="报批报备文件">
<FileUploader
v-model="formData.bpbbwjlj"
:disabled="isPreview"
></FileUploader>
</el-form-item>
</el-col>
......@@ -352,6 +471,7 @@
type="date"
placeholder="请选择计划重启时间"
value-format="YYYY-MM-DD"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -362,6 +482,7 @@
type="textarea"
rows="2"
placeholder="请输入重启原因"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -372,23 +493,31 @@
type="textarea"
rows="3"
placeholder="请输入其他说明"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="重启报告">
<FileUploader v-model="formData.xmcqbg"></FileUploader>
<FileUploader
v-model="formData.xmcqbg"
:disabled="isPreview"
></FileUploader>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="决策文件">
<FileUploader v-model="formData.jcwj"></FileUploader>
<FileUploader
v-model="formData.jcwj"
:disabled="isPreview"
></FileUploader>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="报批报备文件">
<FileUploader
v-model="formData.bpbbwjlj"
:disabled="isPreview"
></FileUploader>
</el-form-item>
</el-col>
......@@ -409,6 +538,7 @@
type="textarea"
rows="2"
placeholder="请输入终止原因"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -419,6 +549,7 @@
type="textarea"
rows="3"
placeholder="请输入终止原因详细分析"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -429,6 +560,7 @@
type="textarea"
rows="3"
placeholder="请输入项目实施现状"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -439,6 +571,7 @@
type="textarea"
rows="3"
placeholder="请输入可能发生的法律纠纷和经济损失"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -449,6 +582,7 @@
type="textarea"
rows="3"
placeholder="请输入其他说明"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -456,6 +590,7 @@
<el-form-item label="终止报告">
<FileUploader
v-model="formData.xmzhongzbg"
:disabled="isPreview"
></FileUploader>
</el-form-item>
</el-col>
......@@ -463,6 +598,7 @@
<el-form-item label="其他相关支撑材料">
<FileUploader
v-model="formData.qtxgzccl"
:disabled="isPreview"
></FileUploader>
</el-form-item>
</el-col>
......@@ -470,6 +606,7 @@
<el-form-item label="报批报备文件">
<FileUploader
v-model="formData.bpbbwjlj"
:disabled="isPreview"
></FileUploader>
</el-form-item>
</el-col>
......@@ -490,6 +627,8 @@
:min="0"
:precision="2"
placeholder="0.00"
type="number"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -500,6 +639,8 @@
:min="0"
:precision="2"
placeholder="0.00"
type="number"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -510,6 +651,8 @@
:min="0"
:precision="2"
placeholder="0.00"
type="number"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -520,6 +663,7 @@
type="textarea"
rows="3"
placeholder="请输入存在的问题"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -530,6 +674,7 @@
type="textarea"
rows="3"
placeholder="请输入下一步工作措施"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -540,6 +685,7 @@
type="textarea"
rows="2"
placeholder="请输入退出原因"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -550,6 +696,7 @@
type="textarea"
rows="3"
placeholder="请输入退出原因详细分析"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -560,6 +707,7 @@
type="textarea"
rows="3"
placeholder="请输入项目实施现状"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -570,6 +718,7 @@
type="textarea"
rows="3"
placeholder="请输入可能发生的法律纠纷和经济损失"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -580,6 +729,7 @@
type="textarea"
rows="3"
placeholder="请输入其他说明"
:disabled="isPreview"
/>
</el-form-item>
</el-col>
......@@ -595,7 +745,7 @@
</template>
<script setup>
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { reactive, ref, onMounted, getCurrentInstance, watch } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import DynamicTable from "@/components/FormDynamicTable/index.vue";
......@@ -606,6 +756,7 @@ const transferColumns = ref([
prop: "njfcgbl",
label: "审批时",
type: "input",
disabled: true,
headerGroup: "投资总额(万元)",
placeholder: "请输入审批时金额",
},
......@@ -619,6 +770,7 @@ const transferColumns = ref([
{
prop: "njfcgblqk_nt",
label: "审批时",
disabled: true,
type: "input",
headerGroup: "我方资本金出资(万元)",
placeholder: "请填写审批时",
......@@ -632,6 +784,7 @@ const transferColumns = ref([
},
{
prop: "jjcgbl",
disabled: true,
label: "审批时",
type: "input",
headerGroup: "项目全投资内部收益率(税前)%",
......@@ -648,6 +801,7 @@ const transferColumns = ref([
{
prop: "jjcgbl2",
label: "审批时",
disabled: true,
type: "input",
headerGroup: "项目全投资内部收益率(税后)%",
placeholder: "请填写预计",
......@@ -684,10 +838,10 @@ const isPreview = ref(!!route.query.isPreview);
const projectList = ref([]);
const rcCgqyglId = ref(route.query.id || "");
// ========== 表单数据(仅保留核心使用的字段) ==========
// ========== 表单数据(完全适配原有后端字段) ==========
const formData = reactive({
// 原有字段
xmtzxy: [{}],
// 动态表格数据
projectGdxxs: [
{
njfcgbl: "",
......@@ -700,34 +854,144 @@ const formData = reactive({
njfglmc2: "",
},
],
// 基础字段
projectId: "",
projectName: "",
djlx: "", // 登记类型
xmbh: "", // 项目编号
sfLht: "", // 是否联合体
sbdw: "", // 申报单位
ssejqy: "", // 所属二级企业
yjFl: "", // 一级分类
ejFl: "", // 二级分类
tzBk: "", // 投资板块
xfBk: "", // 细分板块
xmgsmc: "", // 项目公司全称
xmPfsj: "", // 项目批复时间
bbsj: "", // 报备时间
xmkgsjyj: "", // 项目预计起始时间
xmjgsjyj: "", // 项目预计完成时间
tcSqrq: "", // 退出申请日期
sqrq: "", // 申请日期
xmjsqy: 0, // 项目建设期(月)
yynxn: 0, // 运营年限(年)
tbr: "", // 填报人
tbrlxdh: "", // 填报人联系电话
zqRz: 0.0, // 当前净资产
xmJsContent: "", // 项目主要建设内容
cgRatio: "", // 我方出资人及持股比例
djlx: "",
projectCode: "",
sfybb: "",
sbdw: "",
ssejqy: "",
tzsxyjfl: "",
tzsxejfl: "",
tzbk: "",
jnw: "",
cwbblx: "",
xmgsqc: "",
xmjsqy: 0,
yynxn: 0,
xmkgsjyj: "",
xmjgsjyj: "",
tcsqrq: "",
tcrq: "",
yjwcsj: "",
tblxr: "",
tblxrdh: "",
dqjzc: 0.0,
jsnrjgm: "",
cgRatio: "",
// 资金构成(使用原有zjgc字段,默认初始化表格结构)
zjgc: [
{ index: "—", label: "项目资金构成", unit: "", value: "", editable: false },
{
index: "1",
label: "项目资本金",
unit: "万元",
value: "",
editable: true,
},
{
index: "1.1",
label: "能建方出资",
unit: "万元",
value: "",
editable: true,
},
{
index: "1.2",
label: "外部股东",
unit: "万元",
value: "",
editable: true,
},
{ index: "2", label: "贷款", unit: "万元", value: "", editable: true },
{
index: "2.1",
label: "其中: 非并表项目我方贷款/担保额",
unit: "万元",
value: "",
editable: true,
},
{ index: "3", label: "其他出资", unit: "万元", value: "", editable: true },
{
index: "3.1",
label: "其中: 能建方出资",
unit: "万元",
value: "",
editable: true,
},
{ index: "", label: "批复总投资", unit: "万元", value: "", editable: true },
],
// 财务评价指标(使用原有字段)
jcxmtznbsylsq: "",
xmzbjnbsyl: "",
xmtzhsq: "",
sjycxmqtznbsylsq: "",
ycxmzbjnbsylsh: "",
// 项目中止
zzyy: "",
zzxxyy: "",
qtsm: "",
xmzzbg: [],
qtxgzccl: [],
bpbbwjlj: [],
// 项目重启
jhcqsj: "",
cqyy: "",
xmcqbg: [],
jcwj: [],
// 项目终止
zhongzyy: "",
zhongzyyxxfx: "",
xmssxz: "",
knfsdfljfhjjss: "",
xmzhongzbg: [],
// 项目退出
zmjz: 0.0,
tcphsr: 0.0,
ysdtcphzj: 0.0,
czdwt: "",
xxbgzcs: "",
tcyy: "",
tcyyxxfx: "",
});
// ========== 新增:资金构成变更处理方法 ==========
const handleZjgcChange = (row) => {
// 1. 批复总投资变更 → 同步到投资总额(万元)-审批时
if (row.label === "批复总投资" && row.value !== "") {
// 确保xmtzxy有数据行
if (!formData.xmtzxy[0]) formData.xmtzxy[0] = {};
formData.xmtzxy[0].njfcgbl = row.value;
}
// 2. 项目资本金变更 → 同步到我方资本金出资(万元)-审批时
if (row.label === "项目资本金" && row.value !== "") {
if (!formData.xmtzxy[0]) formData.xmtzxy[0] = {};
formData.xmtzxy[0].njfcgblqk_nt = row.value;
}
};
// ========== 新增:财务指标变更处理方法 ==========
const handleFinancialIndexChange = (field) => {
if (!formData.xmtzxy[0]) formData.xmtzxy[0] = {};
// 1. 决策:项目投资内部收益率(税前) → 同步到项目全投资内部收益率(税前)%-审批时
if (field === "jcxmtznbsylsq" && formData.jcxmtznbsylsq !== "") {
formData.xmtzxy[0].jjcgbl = formData.jcxmtznbsylsq;
}
// 2. 项目资本金内部收益率 → 同步到项目全投资内部收益率(税后)%-审批时
if (field === "xmzbjnbsyl" && formData.xmzbjnbsyl !== "") {
formData.xmtzxy[0].jjcgbl2 = formData.xmzbjnbsyl;
}
};
// ========== 业务方法:获取项目列表 ==========
const getProjectData = () => {
proxy.$post({
......@@ -742,19 +1006,22 @@ const getProjectData = () => {
// ========== 选择项目同步名称及相关信息 ==========
const changeProject = (val) => {
loading.value = true;
proxy.$post({
url: "/api/project/getProjectFinalInfo",
data: { id: val },
callback: (data) => {
loading.value = false;
if (!data) return;
// 回填基础信息
formData.projectName = data.projectName || "";
formData.sbdw = data.sbdw || "";
formData.xmgsmc = data.xmgsmc || "";
formData.xmgsqc = data.xmgsqc || "";
formData.xmkgsjyj = data.xmkgsjyj || "";
formData.xmjgsjyj = data.xmjgsjyj || "";
formData.xmjd = data.xmjd || "";
formData.yynxn = data.yynxn || "";
formData.xmjsqy = data.xmjsqy || "";
formData.yynxn = data.yynxn || 0;
formData.xmjsqy = data.xmjsqy || 0;
// 回填项目投资效益表格数据
formData.projectGdxxs[0].njfcgblqk_nt =
......@@ -763,6 +1030,21 @@ const changeProject = (val) => {
data.projectXmtzzes?.at(2)?.rmbjj || "";
formData.projectGdxxs[0].jjcgbl = data.projectCwpjzbs?.at(0)?.num || "";
formData.projectGdxxs[0].jjcgbl2 = data.projectCwpjzbs?.at(1)?.num || "";
// 回填资金构成(兼容后端返回的zjgc数据)
if (data.zjgc && Array.isArray(data.zjgc)) {
formData.zjgc = data.zjgc.map((item) => ({
...item,
editable: item.editable !== false,
}));
}
// 回填财务评价指标
formData.jcxmtznbsylsq = data.jcxmtznbsylsq || "";
formData.xmzbjnbsyl = data.xmzbjnbsyl || "";
formData.xmtzhsq = data.xmtzhsq || "";
formData.sjycxmqtznbsylsq = data.sjycxmqtznbsylsq || "";
formData.ycxmzbjnbsylsh = data.ycxmzbjnbsylsh || "";
},
error: () => {
loading.value = false;
......@@ -783,10 +1065,82 @@ const getJsqtzjcDetail = () => {
callback: async (data) => {
loading.value = false;
if (!data) return ElMessage.error("未查询到数据");
// 回填表单数据(自动适配所有原有字段)
Object.assign(formData, data);
// 确保资金构成字段是数组格式
if (!Array.isArray(formData.zjgc)) {
formData.zjgc = [
{
index: "—",
label: "项目资金构成",
unit: "",
value: "",
editable: false,
},
{
index: "1",
label: "项目资本金",
unit: "万元",
value: "",
editable: true,
},
{
index: "1.1",
label: "能建方出资",
unit: "万元",
value: "",
editable: true,
},
{
index: "1.2",
label: "外部股东",
unit: "万元",
value: "",
editable: true,
},
{
index: "2",
label: "贷款",
unit: "万元",
value: "",
editable: true,
},
{
index: "2.1",
label: "其中: 非并表项目我方贷款/担保额",
unit: "万元",
value: "",
editable: true,
},
{
index: "3",
label: "其他出资",
unit: "万元",
value: "",
editable: true,
},
{
index: "3.1",
label: "其中: 能建方出资",
unit: "万元",
value: "",
editable: true,
},
{
index: "",
label: "批复总投资",
unit: "万元",
value: "",
editable: true,
},
];
}
},
error: () => {
loading.value = false;
ElMessage.error("获取详情失败");
},
});
};
......@@ -799,7 +1153,7 @@ const saveClick = () => {
? "/api/project/updateXmtc"
: "/api/project/createXmtc";
// 组装提交数据
// 组装提交数据(完全使用原有字段,不新增)
const submitData = {
...formData,
projectId: String(formData.projectId),
......@@ -834,4 +1188,59 @@ onMounted(() => {
<style scoped lang="less">
@import "@/styles/verticalManages.less";
.add-project-container {
width: 100%;
height: 100%;
padding: 20px;
box-sizing: border-box;
}
.add-project-content {
background: #fff;
border-radius: 8px;
padding: 20px;
height: 100%;
overflow-y: auto;
}
.add-project-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 1px solid #e6e6e6;
}
.header-right {
display: flex;
gap: 10px;
}
.tabs-content {
width: 100%;
}
.project-tab-content {
width: 100%;
}
.tab-content {
width: 100%;
}
.el-collapse {
--el-collapse-header-text-color: #303133;
--el-collapse-header-font-size: 16px;
}
.el-table {
--el-table-row-hover-bg-color: #f8f9fa;
margin-bottom: 10px;
}
.el-input-number {
width: 100%;
}
</style>
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