明树Git Lab

Commit 91b35f0b authored by zhanghan's avatar zhanghan

删除log

parent c5950ad7
Pipeline #106921 passed with stage
in 19 seconds
...@@ -389,7 +389,6 @@ onMounted(() => { ...@@ -389,7 +389,6 @@ onMounted(() => {
} }
} catch (e) { } catch (e) {
options.value = {}; options.value = {};
console.warn("解析resourceData失败:", e);
} }
if (rcCgqyglId.value) { if (rcCgqyglId.value) {
......
...@@ -156,52 +156,58 @@ ...@@ -156,52 +156,58 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="是否国家中长期规划重大项目(A1)"> <el-form-item label="是否国家中长期规划重大项目(A1)">
<el-radio-group v-model="formData.sfgjzcqghzdxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.sfgjzcqghzdxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="是否国家有关部门下达的重点项目(A2)"> <el-form-item label="是否国家有关部门下达的重点项目(A2)">
<el-radio-group v-model="formData.sfgjygbmxddzdxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.sfgjygbmxddzdxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="大规模设备更新(A3)"> <el-form-item label="大规模设备更新(A3)">
<el-radio-group v-model="formData.dgmsbgx"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.dgmsbgx"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="战略性新兴产业百大工程(A4)"> <el-form-item label="战略性新兴产业百大工程(A4)">
<el-radio-group v-model="formData.zlxxxcybdgc"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.zlxxxcybdgc"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item <el-form-item
label="列入央企产业焕新和未来产业启航行动的项目(A5)" label="列入央企产业焕新和未来产业启航行动的项目(A5)"
> >
<el-radio-group v-model="formData.lryqcyhxhwlcyqhxddxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.lryqcyhxhwlcyqhxddxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="强链补链重点项目(A6)"> <el-form-item label="强链补链重点项目(A6)">
<el-radio-group v-model="formData.qlblzdxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.qlblzdxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
...@@ -230,44 +236,49 @@ ...@@ -230,44 +236,49 @@
<el-form-item <el-form-item
label="列入企业发展战略性新兴产业工作方案的项目(B1)" label="列入企业发展战略性新兴产业工作方案的项目(B1)"
> >
<el-radio-group v-model="formData.lrqyfzzlxxxcygzfadxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.lrqyfzzlxxxcygzfadxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="粮食、能源、矿产资源保障项目(B2)"> <el-form-item label="粮食、能源、矿产资源保障项目(B2)">
<el-radio-group v-model="formData.lsnykczybzxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.lsnykczybzxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item <el-form-item
label="传统产业高端化、智能化、绿色化转型升级项目(B3)" label="传统产业高端化、智能化、绿色化转型升级项目(B3)"
> >
<el-radio-group v-model="formData.ctcygdh"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.ctcygdh"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="支撑企业发展的重点项目(B4)"> <el-form-item label="支撑企业发展的重点项目(B4)">
<el-radio-group v-model="formData.zcqyfzdddxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.zcqyfzdddxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="制造业技术改造项目"> <el-form-item label="制造业技术改造项目">
<el-radio-group v-model="formData.zzyjsgzxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.zzyjsgzxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -278,58 +289,65 @@ ...@@ -278,58 +289,65 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="对外并购类投资项目(C1)"> <el-form-item label="对外并购类投资项目(C1)">
<el-radio-group v-model="formData.dwbgltzxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.dwbgltzxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="特别监管类项目(C2)"> <el-form-item label="特别监管类项目(C2)">
<el-radio-group v-model="formData.tbjglxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.tbjglxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="境外特别关注类项目(C3)"> <el-form-item label="境外特别关注类项目(C3)">
<el-radio-group v-model="formData.jwtbgzlxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.jwtbgzlxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="对外参股类投资项目(C4)"> <el-form-item label="对外参股类投资项目(C4)">
<el-radio-group v-model="formData.dwcglxtzxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.dwcglxtzxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="房地产投资项目(C5)"> <el-form-item label="房地产投资项目(C5)">
<el-radio-group v-model="formData.fdctzxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.fdctzxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="PPP投资项目(C6)"> <el-form-item label="PPP投资项目(C6)">
<el-radio-group v-model="formData.ppptzxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.ppptzxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="两高项目(C7)"> <el-form-item label="两高项目(C7)">
<el-radio-group v-model="formData.lgxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.lgxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -340,50 +358,56 @@ ...@@ -340,50 +358,56 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="非主业投资项目(D1)"> <el-form-item label="非主业投资项目(D1)">
<el-radio-group v-model="formData.fzytzxm"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.fzytzxm"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="持牌金融机构(D2)"> <el-form-item label="持牌金融机构(D2)">
<el-radio-group v-model="formData.zpjrjg"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.zpjrjg"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="类金融机构(D3)"> <el-form-item label="类金融机构(D3)">
<el-radio-group v-model="formData.ljrjg"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.ljrjg"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="其他金融机构(D4)"> <el-form-item label="其他金融机构(D4)">
<el-radio-group v-model="formData.qtjrjg"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.qtjrjg"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="基金及基金管理公司(D5)"> <el-form-item label="基金及基金管理公司(D5)">
<el-radio-group v-model="formData.jjjjjglgs"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.jjjjjglgs"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="创业投资基金(D6)"> <el-form-item label="创业投资基金(D6)">
<el-radio-group v-model="formData.cytzjj"> <CommonSelector
<el-radio label="0"></el-radio> :radio="true"
<el-radio label="1"></el-radio> v-model="formData.cytzjj"
</el-radio-group> dictName="sf"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -779,27 +803,52 @@ ...@@ -779,27 +803,52 @@
</template> </template>
<script setup> <script setup>
import { reactive, ref, onMounted, getCurrentInstance } from "vue"; import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import annualPlan from "./annualPlan.vue"; import annualPlan from "./annualPlan.vue";
import DynamicTable from "@/components/FormDynamicTable/index.vue"; import DynamicTable from "@/components/FormDynamicTable/index.vue";
// ========== 年度计划子组件专属时间列表【核心:父子唯一统一,不与可研混用】 ========== // ========== 年度计划子组件专属时间列表【核心:适配任意年份,父子唯一统一】 ==========
const annualDynamicTimeList = ref([ const annualDynamicTimeList = ref([]);
"2025及以前",
"2026", // ========== 【核心通用方法1】从表格数据自动解析基准年(适配2022/2023/任意年回显) ==========
"2026-小记", // 解析锚点:匹配数据中的「XX-小记」字段,提取XX作为基准年,无则兜底用【系统年+1】(贴合原有新增逻辑)
"2026-一季度", const getBaseYearFromTableData = (tableData) => {
"2026-二季度", if (!Array.isArray(tableData) || tableData.length === 0) {
"2026-三季度", return new Date().getFullYear() + 1;
"2026-四季度", }
"2027", const firstRowKeys = Object.keys(tableData[0]);
"2028", const matchKey = firstRowKeys.find((key) => key.includes("-小记"));
"2029", if (matchKey) {
"2030", const baseYear = Number(matchKey.split("-")[0]);
"2031", return baseYear;
]); }
return new Date().getFullYear() + 1;
};
// ========== 【核心通用方法2】根据基准年生成时间列表(保留原有字段结构,支持传参) ==========
// 新增模式:传系统年+1;编辑模式:传解析出的基准年(2022/2023/任意)
const getCurrentYearTimeList = (baseYear) => {
const targetYear = baseYear || new Date().getFullYear() + 1;
const preYear = targetYear - 1;
const timeList = [
`${preYear}及以前`,
`${targetYear}`,
`${targetYear}-小记`,
`${targetYear}-一季度`,
`${targetYear}-二季度`,
`${targetYear}-三季度`,
`${targetYear}-四季度`,
`${targetYear + 1}`,
`${targetYear + 2}`,
`${targetYear + 3}`,
`${targetYear + 4}`,
`${targetYear + 5}`,
];
annualDynamicTimeList.value = timeList;
};
// ========== 动态表格列配置(参股单位出资修正) ========== // ========== 动态表格列配置(参股单位出资修正) ==========
const transferColumns = ref([ const transferColumns = ref([
{ {
...@@ -1189,7 +1238,6 @@ const initAnnualPlanTable = () => { ...@@ -1189,7 +1238,6 @@ const initAnnualPlanTable = () => {
), ),
})); }));
formData.xmndjh = tableData; formData.xmndjh = tableData;
console.log("新增模式初始化xmndjh:", formData.xmndjh);
}; };
// ========== 【专属方法】可研/决策信息表格:单行合计计算(独立) ========== // ========== 【专属方法】可研/决策信息表格:单行合计计算(独立) ==========
...@@ -1246,7 +1294,6 @@ const handleFinancialChange = (currentRow) => { ...@@ -1246,7 +1294,6 @@ const handleFinancialChange = (currentRow) => {
const handleAnnualPlanTableChange = (newData) => { const handleAnnualPlanTableChange = (newData) => {
if (isPreview.value) return; if (isPreview.value) return;
formData.xmndjh = newData; formData.xmndjh = newData;
console.log("子组件回调更新xmndjh:", formData.xmndjh);
}; };
// ========== 可研表格动态时间生成:仅可研用,与年度计划无关 ========== // ========== 可研表格动态时间生成:仅可研用,与年度计划无关 ==========
...@@ -1292,7 +1339,6 @@ const fillFinancialTable = (backfillData) => { ...@@ -1292,7 +1339,6 @@ const fillFinancialTable = (backfillData) => {
// 2. 年度计划表格:专属回填【核心:用子组件的annualDynamicTimeList,不与可研混用】 // 2. 年度计划表格:专属回填【核心:用子组件的annualDynamicTimeList,不与可研混用】
const fillAnnualPlanTable = (backfillData) => { const fillAnnualPlanTable = (backfillData) => {
if (!Array.isArray(backfillData) || backfillData.length === 0) return; if (!Array.isArray(backfillData) || backfillData.length === 0) return;
console.log("接口返回的xmndjh回填数据:", backfillData);
// 按唯一id匹配回填,保留所有原有字段,仅更新数字字段 // 按唯一id匹配回填,保留所有原有字段,仅更新数字字段
formData.xmndjh.forEach((frontRow) => { formData.xmndjh.forEach((frontRow) => {
const backfillRow = backfillData.find((item) => item.id === frontRow.id); const backfillRow = backfillData.find((item) => item.id === frontRow.id);
...@@ -1305,7 +1351,6 @@ const fillAnnualPlanTable = (backfillData) => { ...@@ -1305,7 +1351,6 @@ const fillAnnualPlanTable = (backfillData) => {
backfillRow[time] !== undefined ? Number(backfillRow[time]) || 0 : 0; backfillRow[time] !== undefined ? Number(backfillRow[time]) || 0 : 0;
}); });
}); });
console.log("回填后的xmndjh(保留所有字段):", formData.xmndjh);
}; };
// ========== 业务方法:获取项目列表(通用) ========== // ========== 业务方法:获取项目列表(通用) ==========
...@@ -1345,20 +1390,20 @@ const changeProject = (val) => { ...@@ -1345,20 +1390,20 @@ const changeProject = (val) => {
if (selectItem) formData.projectName = selectItem.projectName; if (selectItem) formData.projectName = selectItem.projectName;
}; };
// ========== 获取详情(编辑/预览):核心修复【不覆盖接口返回的xmndjh,不混用时间列表】 ========== // ========== 获取详情(编辑/预览):核心整合【自动解析基准年+生成时间列表+回填】 ==========
const getJsqtzjcDetail = () => { const getJsqtzjcDetail = () => {
if (!rcCgqyglId.value) return; if (!rcCgqyglId.value) return;
loading.value = true; loading.value = true;
proxy.$post({ proxy.$post({
url: "/api/project/getTzjh", url: "/api/project/getTzjh",
data: { id: rcCgqyglId.value }, data: { id: rcCgqyglId.value },
callback: (data) => { callback: async (data) => {
loading.value = false; loading.value = false;
if (!data) return ElMessage.error("未查询到数据"); if (!data) return ElMessage.error("未查询到数据");
console.log("接口返回完整数据:", data);
// 1. 回填基础字段,保留xmndjh的完整结构 // 1. 回填基础字段,保留xmndjh的完整结构
Object.assign(formData, data); Object.assign(formData, data);
// 2. 可研表格:初始化时间+回填(与年度计划无关) // 2. 可研表格:初始化时间+回填(与年度计划无关)
if (data.kyjcxx && Array.isArray(data.kyjcxx) && data.kyjcxx.length > 0) { if (data.kyjcxx && Array.isArray(data.kyjcxx) && data.kyjcxx.length > 0) {
dynamicTimeList.value = Object.keys(data.kyjcxx[0]).filter((key) => dynamicTimeList.value = Object.keys(data.kyjcxx[0]).filter((key) =>
...@@ -1370,10 +1415,12 @@ const getJsqtzjcDetail = () => { ...@@ -1370,10 +1415,12 @@ const getJsqtzjcDetail = () => {
initFinancialTable(); initFinancialTable();
if (data.kyjcxx) fillFinancialTable(data.kyjcxx); if (data.kyjcxx) fillFinancialTable(data.kyjcxx);
// 3. 年度计划表格:【核心】直接使用接口返回的xmndjh,不重新初始化/覆盖 // 3. 年度计划核心:自动解析基准年 → 生成匹配时间列表 → 等待DOM更新 → 回填
if (data.xmndjh && Array.isArray(data.xmndjh) && data.xmndjh.length > 0) { if (data.xmndjh && Array.isArray(data.xmndjh) && data.xmndjh.length > 0) {
formData.xmndjh = data.xmndjh; // 保留接口返回的所有字段 const baseYear = getBaseYearFromTableData(data.xmndjh);
fillAnnualPlanTable(data.xmndjh); // 仅更新数字字段,不改变结构 getCurrentYearTimeList(baseYear);
await nextTick(); // 强制等待时间列表生成完成,避免字段不匹配
fillAnnualPlanTable(data.xmndjh); // 此时时间列表已就绪,安全回填
} }
}, },
error: () => { error: () => {
...@@ -1383,7 +1430,7 @@ const getJsqtzjcDetail = () => { ...@@ -1383,7 +1430,7 @@ const getJsqtzjcDetail = () => {
}); });
}; };
// ========== 保存表单:核心修复【移除xmndjh的字段过滤,传递完整数据】 ========== // ========== 保存表单:保留原有逻辑【直接传递完整xmndjh,不过滤】 ==========
const saveClick = () => { const saveClick = () => {
if (!formData.projectId) return ElMessage.warning("请选择项目信息"); if (!formData.projectId) return ElMessage.warning("请选择项目信息");
loading.value = true; loading.value = true;
...@@ -1406,10 +1453,9 @@ const saveClick = () => { ...@@ -1406,10 +1453,9 @@ const saveClick = () => {
dynamicTimeList.value.forEach((time) => (filterRow[time] = row[time])); dynamicTimeList.value.forEach((time) => (filterRow[time] = row[time]));
return filterRow; return filterRow;
}), }),
// 年度计划表格:【关键修复】直接传完整的xmndjh,不做map过滤! // 年度计划表格:直接传完整的xmndjh,不做map过滤
xmndjh: formData.xmndjh, xmndjh: formData.xmndjh,
}; };
console.log("提交的xmndjh(完整字段):", submitData.xmndjh);
proxy.$post({ proxy.$post({
url: url, url: url,
...@@ -1431,16 +1477,17 @@ const backClick = () => router.back(-1); ...@@ -1431,16 +1477,17 @@ const backClick = () => router.back(-1);
const tableCellStyle = ({ row }) => const tableCellStyle = ({ row }) =>
row.isTotal ? { background: "#f5f7fa", fontWeight: "bold" } : {}; row.isTotal ? { background: "#f5f7fa", fontWeight: "bold" } : {};
// ========== 页面初始化:新增/编辑分离,不覆盖接口数据 ========== // ========== 页面初始化:新增/编辑分离,严格保障执行顺序 ==========
onMounted(() => { onMounted(() => {
getProjectData(); getProjectData();
if (rcCgqyglId.value) { if (rcCgqyglId.value) {
// 编辑/预览:从接口获取完整数据,不执行本地初始化 // 编辑/预览:拉取接口数据,内部自动解析基准年+生成时间列表,不执行本地初始化
setTimeout(() => getJsqtzjcDetail(), 100); setTimeout(() => getJsqtzjcDetail(), 100);
} else { } else {
// 新增模式:分别初始化两个表格,互不影响 // 新增模式:先生成时间列表(系统年+1)→ 再初始化两个表格,互不影响
generateDynamicTime(); // 可研表格时间 getCurrentYearTimeList(); // 无参=系统年+1,贴合原有逻辑
initAnnualPlanTable(); // 年度计划表格初始化 generateDynamicTime(); // 可研表格时间初始化
initAnnualPlanTable(); // 年度计划表格本地初始化
} }
}); });
</script> </script>
......
...@@ -113,11 +113,11 @@ ...@@ -113,11 +113,11 @@
border border
:cell-style="tableCellStyle" :cell-style="tableCellStyle"
:row-style="{ height: '48px' }" :row-style="{ height: '48px' }"
:header-row-style="{ height: '48px' }" :header-row-style="{ height: '48px', background: '#f5f7fa' }"
> >
<el-table-column <el-table-column
v-for="time in validDynamicTimeList" v-for="time in validDynamicTimeList"
:key="time" :key="`time-col-${time}`"
:label="time" :label="time"
width="160" width="160"
align="center" align="center"
...@@ -131,6 +131,7 @@ ...@@ -131,6 +131,7 @@
@change="() => handleChange(row)" @change="() => handleChange(row)"
:disabled="isPreview" :disabled="isPreview"
style="width: 100%" style="width: 100%"
:value="isNaN(Number(row[time])) ? 0 : Number(row[time])"
/> />
</template> </template>
</el-table-column> </el-table-column>
...@@ -140,13 +141,20 @@ ...@@ -140,13 +141,20 @@
</template> </template>
<script setup> <script setup>
// 修复1:删除错误的deepClone导入,Vue无此API import {
import { defineProps, computed, defineEmits, watch, onMounted, ref } from "vue"; defineProps,
computed,
defineEmits,
watch,
onMounted,
ref,
nextTick,
} from "vue";
// 1. 定义props和emit(保持不变) // 1. 定义props和emit(保持不变)
const props = defineProps({ const props = defineProps({
modelValue: { type: Array, default: () => [] }, modelValue: { type: Array, default: () => [] },
dynamicTimeList: { type: Array, default: () => [] }, dynamicTimeList: { type: Array, default: () => [] }, // 父组件必须传
isPreview: { type: Boolean, default: false }, isPreview: { type: Boolean, default: false },
}); });
...@@ -158,8 +166,14 @@ const emit = defineEmits([ ...@@ -158,8 +166,14 @@ const emit = defineEmits([
// 2. 核心:组件内部响应式数据,隔离props循环 // 2. 核心:组件内部响应式数据,隔离props循环
const tableData = ref([]); const tableData = ref([]);
// 3. 处理时间列表 - 去重+非空+去除隐形空白字符(保持原有逻辑 // 3. 处理时间列表 - 去重+非空+去除隐形空白字符+**兜底默认值**(关键修复
const validDynamicTimeList = computed(() => { const validDynamicTimeList = computed(() => {
if (
!Array.isArray(props.dynamicTimeList) ||
props.dynamicTimeList.length === 0
) {
return ["2025及以前", "2026", "2026-小记"]; // 兜底,保证列能渲染
}
return [...new Set(props.dynamicTimeList)] return [...new Set(props.dynamicTimeList)]
.map((time) => { .map((time) => {
return typeof time === "string" ? time.trim() : ""; return typeof time === "string" ? time.trim() : "";
...@@ -188,9 +202,10 @@ const initRowTimeField = (row) => { ...@@ -188,9 +202,10 @@ const initRowTimeField = (row) => {
// 工具方法:计算行合计【仅读取年份字段,不碰其他字段】 // 工具方法:计算行合计【仅读取年份字段,不碰其他字段】
const calcRowTotal = (row) => { const calcRowTotal = (row) => {
if (!row || typeof row !== "object") return 0; if (!row || typeof row !== "object") return 0;
return validDynamicTimeList.value.reduce((sum, time) => { const total = validDynamicTimeList.value.reduce((sum, time) => {
return sum + (Number(row[time]) || 0); return sum + (Number(row[time]) || 0);
}, 0); }, 0);
return total;
}; };
// 工具方法:深拷贝+数据处理【强制保留所有原有字段,仅新增/更新total、处理年份】 // 工具方法:深拷贝+数据处理【强制保留所有原有字段,仅新增/更新total、处理年份】
...@@ -205,14 +220,15 @@ const handleTableData = (sourceData) => { ...@@ -205,14 +220,15 @@ const handleTableData = (sourceData) => {
return newData; return newData;
}; };
// 监听props.modelValue变化,仅同步到内部tableData,不emit【打印日志调试字段是否丢失 // 监听props.modelValue变化,仅同步到内部tableData,不emit【修复:nextTick确保时间列表先处理
watch( watch(
() => props.modelValue, () => props.modelValue,
(newVal) => { async (newVal) => {
console.log("父组件传递的原始modelValue:", newVal); // 调试:看父组件传的是否有id/名称字段
if (newVal.length > 0) { if (newVal.length > 0) {
console.log("父组件传的第一行字段:", Object.keys(newVal[0])); // 关键调试:看是否丢失字段 console.log(Object.keys(newVal[0]), "值:", newVal[0]);
} }
// 关键修复:等待validDynamicTimeList计算完成后再处理数据
await nextTick();
const newData = handleTableData(newVal); const newData = handleTableData(newVal);
tableData.value = newData; // 只更新内部数据,不emit tableData.value = newData; // 只更新内部数据,不emit
}, },
...@@ -237,7 +253,6 @@ const emitDataChange = (newData) => { ...@@ -237,7 +253,6 @@ const emitDataChange = (newData) => {
const emitData = JSON.parse(JSON.stringify(newData)); // 深拷贝保留所有字段 const emitData = JSON.parse(JSON.stringify(newData)); // 深拷贝保留所有字段
emit("update:modelValue", emitData); emit("update:modelValue", emitData);
emit("handleAnnualPlanChange", emitData); emit("handleAnnualPlanChange", emitData);
console.log("子组件emit的完整数据:", emitData); // 调试:看emit的是否有所有字段
}; };
// 7. 获取对应行的合计值 - 从内部tableData取值 // 7. 获取对应行的合计值 - 从内部tableData取值
...@@ -260,19 +275,13 @@ const tableCellStyle = ({ row }) => ...@@ -260,19 +275,13 @@ const tableCellStyle = ({ row }) =>
// 调试日志(打印内部数据字段,确认是否保留) // 调试日志(打印内部数据字段,确认是否保留)
onMounted(() => { onMounted(() => {
console.log("处理后的有效时间字段:", validDynamicTimeList.value);
console.log("子组件内部tableData:", tableData.value);
if (tableData.value.length > 0) { if (tableData.value.length > 0) {
console.log(
"子组件tableData第一行所有字段:",
Object.keys(tableData.value[0]),
);
} }
}); });
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
// 所有样式保持不变 // 所有样式保持不变,仅优化input样式,确保能看见
.annual-plan-wrap { .annual-plan-wrap {
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;
...@@ -313,10 +322,12 @@ onMounted(() => { ...@@ -313,10 +322,12 @@ onMounted(() => {
font-weight: 500; font-weight: 500;
background-color: #f5f7fa; background-color: #f5f7fa;
} }
// 样式优化:移除不必要的隐藏,确保元素可见
:deep(.el-table) { :deep(.el-table) {
--el-table-border-color: #ebeef5; --el-table-border-color: #ebeef5;
--el-table-row-height: 48px !important; --el-table-row-height: 48px !important;
border-left: 0; // 移除border-left:0,避免表格左边无框看似没渲染
border-left: 1px solid #ebeef5 !important;
} }
:deep(.el-table__header tr), :deep(.el-table__header tr),
:deep(.el-table__body tr) { :deep(.el-table__body tr) {
...@@ -328,6 +339,7 @@ onMounted(() => { ...@@ -328,6 +339,7 @@ onMounted(() => {
vertical-align: middle; vertical-align: middle;
box-sizing: border-box; box-sizing: border-box;
} }
// 确保输入框完全显示
:deep(.el-input-number) { :deep(.el-input-number) {
width: 100%; width: 100%;
display: flex; display: flex;
...@@ -337,9 +349,13 @@ onMounted(() => { ...@@ -337,9 +349,13 @@ onMounted(() => {
:deep(.el-input-number__input) { :deep(.el-input-number__input) {
text-align: right; text-align: right;
padding-right: 25px; padding-right: 25px;
width: 90%; width: 100% !important; // 改为100%,确保填满单元格
} }
.flex { .flex {
display: flex; display: flex;
} }
// 右侧表格容器加最小宽度,避免挤压
.right-table {
min-width: calc(160px * 12); // 按12列计算最小宽度
}
</style> </style>
...@@ -134,7 +134,6 @@ onMounted(() => { ...@@ -134,7 +134,6 @@ onMounted(() => {
options.value = JSON.parse(sessionStorage.getItem("resourceData")) || {}; options.value = JSON.parse(sessionStorage.getItem("resourceData")) || {};
} catch (e) { } catch (e) {
options.value = {}; options.value = {};
console.warn("解析resourceData失败:", e);
} }
// 编辑/预览模式,加载详情数据 // 编辑/预览模式,加载详情数据
if (rcCgqyglId.value) { if (rcCgqyglId.value) {
......
...@@ -154,7 +154,6 @@ onMounted(() => { ...@@ -154,7 +154,6 @@ onMounted(() => {
options.value = JSON.parse(sessionStorage.getItem("resourceData")) || {}; options.value = JSON.parse(sessionStorage.getItem("resourceData")) || {};
} catch (e) { } catch (e) {
options.value = {}; options.value = {};
console.warn("解析resourceData失败:", e);
} }
// 编辑/预览模式,加载详情数据 // 编辑/预览模式,加载详情数据
if (rcCgqyglId.value) { if (rcCgqyglId.value) {
......
...@@ -170,7 +170,6 @@ const saveClick = () => { ...@@ -170,7 +170,6 @@ const saveClick = () => {
loading.value = true; loading.value = true;
// 投委会管理专属新增/编辑接口 // 投委会管理专属新增/编辑接口
console.log(rcTwhglId.value, "rcTwhglId.value");
const url = rcTwhglId.value const url = rcTwhglId.value
? "/api/project/updateTwhgl" ? "/api/project/updateTwhgl"
......
...@@ -277,7 +277,6 @@ ...@@ -277,7 +277,6 @@
dsjngjjw: res.dsjngjjw ? res.dsjngjjw.toString() : undefined, dsjngjjw: res.dsjngjjw ? res.dsjngjjw.toString() : undefined,
xmlx: res.xmlx ? res.xmlx.toString() : undefined, xmlx: res.xmlx ? res.xmlx.toString() : undefined,
}); });
console.log(formData);
szjList.value = jnwList.filter(item => item.key == res.jnw)[0]?.children || []; szjList.value = jnwList.filter(item => item.key == res.jnw)[0]?.children || [];
dsgjList.value = szjList.value.filter(item => item.key == res.sjnzjjw)[0]?.children || []; dsgjList.value = szjList.value.filter(item => item.key == res.sjnzjjw)[0]?.children || [];
Object.assign(fxczqkData.value, res.zdfxczs); Object.assign(fxczqkData.value, res.zdfxczs);
......
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