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