明树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
5c1a28a5
Commit
5c1a28a5
authored
Mar 24, 2026
by
zhanghan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
工期
parent
b3b1feaf
Pipeline
#108779
passed with stage
in 20 seconds
Changes
6
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
433 additions
and
121 deletions
+433
-121
index.vue
src/components/FileUploader/index.vue
+142
-22
index.vue
src/components/FormDynamicTable/index.vue
+93
-22
runningPeriodAdd.vue
src/views/castbehind/runningPeriodAdd.vue
+38
-55
bigIssues.vue
src/views/investingManage/bigIssues.vue
+5
-5
bigIssuesAdd.vue
src/views/investingManage/bigIssuesAdd.vue
+89
-10
constructionAdd.vue
src/views/investingManage/constructionAdd.vue
+66
-7
No files found.
src/components/FileUploader/index.vue
View file @
5c1a28a5
...
...
@@ -35,6 +35,90 @@
>
<el-table-column
type=
"selection"
width=
"55"
:disabled=
"disabled"
/>
<el-table-column
prop=
"originalname"
label=
"文件名"
/>
<!-- 新增:自定义可配置列 -->
<template
v-for=
"(col, index) in customColumns"
:key=
"`custom-col-$
{index}`"
>
<el-table-column
:prop=
"col.prop"
:label=
"col.label"
:width=
"col.width"
:fixed=
"col.fixed"
:align=
"col.align || 'left'"
>
<template
#
default=
"
{ row, $index }">
<!-- 输入框 -->
<el-input
v-if=
"col.type === 'input'"
v-model=
"row[col.prop]"
:disabled=
"disabled || col.disabled"
:placeholder=
"col.placeholder || `请输入$
{col.label}`"
size="small"
@change="handleCustomColChange(row, col.prop, $index)"
/>
<el-input
v-else-if=
"col.type === 'textarea'"
v-model=
"row[col.prop]"
:disabled=
"disabled || col.disabled"
:placeholder=
"col.placeholder || `请输入$
{col.label}`"
:rows="col.rows || 2"
type="textarea"
size="small"
@change="handleCustomColChange(row, col.prop, $index)"
/>
<!-- 日期选择器 -->
<el-date-picker
v-else-if=
"col.type === 'date'"
v-model=
"row[col.prop]"
:disabled=
"disabled || col.disabled"
:format=
"col.format || 'YYYY-MM-DD'"
:value-format=
"col.valueFormat || 'YYYY-MM-DD'"
:placeholder=
"col.placeholder || `请选择$
{col.label}`"
size="small"
@change="handleCustomColChange(row, col.prop, $index)"
/>
<!-- 日期时间选择器 -->
<el-date-picker
v-else-if=
"col.type === 'datetime'"
v-model=
"row[col.prop]"
:disabled=
"disabled || col.disabled"
type=
"datetime"
:format=
"col.format || 'YYYY-MM-DD HH:mm:ss'"
:value-format=
"col.valueFormat || 'YYYY-MM-DD HH:mm:ss'"
:placeholder=
"col.placeholder || `请选择$
{col.label}`"
size="small"
@change="handleCustomColChange(row, col.prop, $index)"
/>
<!-- 下拉选择器 -->
<el-select
v-else-if=
"col.type === 'select'"
v-model=
"row[col.prop]"
:disabled=
"disabled || col.disabled"
:placeholder=
"col.placeholder || `请选择$
{col.label}`"
size="small"
@change="handleCustomColChange(row, col.prop, $index)"
>
<el-option
v-for=
"option in col.options || []"
:key=
"option.value"
:label=
"option.label"
:value=
"option.value"
/>
</el-select>
<!-- 自定义插槽(最高优先级) -->
<slot
v-else
:name=
"`custom-col-$
{col.prop}`"
:row="row"
:index="$index"
>
<!-- 默认显示字段值 -->
<span>
{{
row
[
col
.
prop
]
||
"-"
}}
</span>
</slot>
</
template
>
</el-table-column>
</template>
<el-table-column
prop=
"updatedAt"
label=
"上传时间"
>
<
template
#
default=
"{ row }"
>
<span>
{{
formatDate
(
row
.
updatedAt
)
}}
</span>
...
...
@@ -45,6 +129,8 @@
<span>
{{
row
.
size
}}
MB
</span>
</
template
>
</el-table-column>
<!-- 操作列 -->
<el-table-column
fixed=
"right"
label=
"操作"
width=
"100"
>
<
template
#
default=
"{ row, $index }"
>
<span
class=
"download-btn"
@
click=
"handleDownload(row)"
>
下载
</span>
...
...
@@ -144,12 +230,12 @@ import { ElMessageBox, ElMessage } from "element-plus";
import
moment
from
"moment"
;
import
windowConfig
from
"@/window"
;
// 引入需要的图标
import
{
Document
,
Download
,
Delete
,
ArrowDown
}
from
"@element-plus/icons-vue"
;
// 补充缺失的 ArrowDown 图标
import
{
Document
,
Download
,
Delete
,
ArrowDown
}
from
"@element-plus/icons-vue"
;
// 定义组件 props(
放宽类型限制,增加兼容性
)
// 定义组件 props(
新增 customColumns 配置
)
const
props
=
defineProps
({
modelValue
:
{
type
:
[
Array
,
String
,
Number
],
// 兼容更多类型
type
:
[
Array
,
String
,
Number
],
default
:
()
=>
[],
required
:
true
,
},
...
...
@@ -173,21 +259,42 @@ const props = defineProps({
Authorization
:
sessionStorage
.
getItem
(
"authToken"
)
||
""
,
}),
},
// 是否禁用(预览模式)- 默认值:false
disabled
:
{
type
:
Boolean
,
default
:
false
,
},
// 下载接口前缀 - 默认值:系统配置的baseUrl
downloadBaseUrl
:
{
type
:
String
,
default
:
()
=>
{
return
windowConfig
.
baseUrl
||
""
;
},
},
// 新增:自定义列配置
customColumns
:
{
type
:
Array
,
default
:
()
=>
[],
/**
* 列配置项说明:
* @param {string} prop - 字段名(必填)
* @param {string} label - 列标题(必填)
* @param {string} type - 组件类型:input/date/datetime/select(默认显示文本)
* @param {number} width - 列宽度
* @param {string} fixed - 是否固定列:left/right
* @param {string} align - 对齐方式:left/center/right
* @param {boolean} disabled - 是否禁用该列编辑
* @param {string} placeholder - 占位提示
* @param {string} format - 日期格式化(仅date/datetime)
* @param {string} valueFormat - 日期值格式化(仅date/datetime)
* @param {Array} options - 下拉选项(仅select),格式:[{label: '选项1', value: '1'}, ...]
*/
},
});
const
emit
=
defineEmits
([
"update:modelValue"
]);
const
emit
=
defineEmits
([
"update:modelValue"
,
// 新增:自定义列值变化事件
"custom-col-change"
,
]);
const
selectedIds
=
ref
([]);
const
popoverVisible
=
ref
(
false
);
...
...
@@ -195,11 +302,9 @@ const popoverVisible = ref(false);
// 核心:安全处理文件列表,将非数组值转为空数组
const
safeFileList
=
computed
({
get
()
{
// 校验:如果是数组则直接返回,否则转为空数组
return
Array
.
isArray
(
props
.
modelValue
)
?
props
.
modelValue
:
[];
},
set
(
value
)
{
// 向外发射的值始终是数组,保证数据类型统一
emit
(
"update:modelValue"
,
Array
.
isArray
(
value
)
?
value
:
[]);
},
});
...
...
@@ -212,7 +317,7 @@ const formatDate = (date) => {
// 文件上传成功处理
const
handleUploadSuccess
=
(
res
)
=>
{
if
(
res
&&
res
.
data
)
{
safeFileList
.
value
=
[...
safeFileList
.
value
,
res
.
data
];
// 改用 safeFileList
safeFileList
.
value
=
[...
safeFileList
.
value
,
res
.
data
];
console
.
log
(
"上传成功:"
,
res
.
data
);
ElMessage
.
success
(
"文件上传成功"
);
popoverVisible
.
value
=
false
;
...
...
@@ -255,10 +360,9 @@ const handleDelete = (index) => {
type
:
"warning"
,
})
.
then
(()
=>
{
const
newList
=
[...
safeFileList
.
value
];
// 改用 safeFileList
const
newList
=
[...
safeFileList
.
value
];
newList
.
splice
(
index
,
1
);
safeFileList
.
value
=
newList
;
// 改用 safeFileList
// 删除后关闭popover
safeFileList
.
value
=
newList
;
popoverVisible
.
value
=
false
;
})
.
catch
(()
=>
{});
...
...
@@ -273,21 +377,31 @@ const handleMultiDelete = () => {
})
.
then
(()
=>
{
const
newList
=
safeFileList
.
value
.
filter
(
// 改用 safeFileList
(
item
)
=>
!
selectedIds
.
value
.
includes
(
item
.
id
),
);
safeFileList
.
value
=
newList
;
// 改用 safeFileList
safeFileList
.
value
=
newList
;
selectedIds
.
value
=
[];
})
.
catch
(()
=>
{});
};
// 监听外部文件列表变化(改为监听 safeFileList,无需额外处理)
// 新增:自定义列值变化处理
const
handleCustomColChange
=
(
row
,
prop
,
index
)
=>
{
// 触发自定义列变化事件,向外传递修改后的数据
emit
(
"custom-col-change"
,
{
row
,
// 整行数据
prop
,
// 修改的字段名
value
:
row
[
prop
],
// 修改后的值
index
,
// 行索引
});
// 更新文件列表(保证响应式)
safeFileList
.
value
=
[...
safeFileList
.
value
];
};
// 监听外部文件列表变化
watch
(
()
=>
safeFileList
.
value
,
(
newVal
)
=>
{
// 空监听,仅保证响应式(safeFileList 已处理类型兼容)
},
(
newVal
)
=>
{},
{
deep
:
true
},
);
...
...
@@ -307,10 +421,6 @@ watch(
width: 100%;
}
// ::v-deep .el-form-item__label {
// font-weight: 600;
// color: #509eff !important;
// }
.multi-delete-btn {
margin-left: 10px;
}
...
...
@@ -484,4 +594,14 @@ watch(
:deep(.file-list::-webkit-scrollbar-thumb:hover) {
background: #a8a8a8;
}
// 新增:自定义列组件样式优化
:deep(.el-table .el-input),
:deep(.el-table .el-date-picker),
:deep(.el-table .el-select) {
width: 100%;
}
:deep(.el-table .el-input__wrapper) {
padding: 0 8px;
}
</
style
>
src/components/FormDynamicTable/index.vue
View file @
5c1a28a5
...
...
@@ -60,10 +60,11 @@
:placeholder=
"col.placeholder"
:disabled=
"disabled || col.disabled"
:maxlength=
"col.maxlength"
size=
"small"
/>
</
template
>
<!-- Textarea 类型
(修复:改为 ===)
-->
<!-- Textarea 类型 -->
<
template
v-else-if=
"col.type === 'textarea'"
>
<el-input
v-model=
"scope.row[col.prop]"
...
...
@@ -74,6 +75,7 @@
:maxlength=
"col.maxlength"
:show-word-limit=
"col.showWordLimit || false"
style=
"width: 100%"
size=
"small"
/>
</
template
>
...
...
@@ -110,6 +112,7 @@
:precision=
"col.precision"
:min=
"col.min"
:max=
"col.max"
size=
"small"
/>
</
template
>
...
...
@@ -145,6 +148,15 @@
:placeholder=
"col.placeholder"
:disabled=
"disabled || col.disabled"
style=
"width: 100%"
size=
"small"
/>
</
template
>
<!-- Upload 上传类型(核心适配) -->
<
template
v-else-if=
"col.type === 'upload'"
>
<FileUploader
v-model=
"scope.row[col.prop]"
:isInline=
"col.isInline ?? true"
/>
</
template
>
</template>
...
...
@@ -152,7 +164,7 @@
</el-table-column>
</template>
<!-- 单级表头渲染(核心
修复:新增 textarea 分支
) -->
<!-- 单级表头渲染(核心) -->
<el-table-column
v-else
v-for=
"col in columns"
...
...
@@ -170,10 +182,11 @@
:placeholder=
"col.placeholder"
:disabled=
"disabled || col.disabled"
:maxlength=
"col.maxlength"
size=
"small"
/>
</
template
>
<!--
核心修复:新增 Textarea 类型分支
-->
<!--
Textarea 类型
-->
<
template
v-else-if=
"col.type === 'textarea'"
>
<el-input
v-model=
"scope.row[col.prop]"
...
...
@@ -184,10 +197,11 @@
:maxlength=
"col.maxlength"
:show-word-limit=
"col.showWordLimit || false"
style=
"width: 100%"
size=
"small"
/>
</
template
>
<!-- Select 类型 -->
<!-- Select 类型
(适配全局下拉选项)
-->
<
template
v-else-if=
"col.type === 'select'"
>
<el-select
v-model=
"scope.row[col.prop]"
...
...
@@ -220,6 +234,7 @@
:precision=
"col.precision"
:min=
"col.min"
:max=
"col.max"
size=
"small"
/>
</
template
>
...
...
@@ -253,6 +268,15 @@
:placeholder=
"col.placeholder"
:disabled=
"disabled || col.disabled"
style=
"width: 100%"
size=
"small"
/>
</
template
>
<!-- Upload 上传类型(核心适配你的业务) -->
<
template
v-else-if=
"col.type === 'upload'"
>
<FileUploader
v-model=
"scope.row[col.prop]"
:isInline=
"col.isInline ?? true"
/>
</
template
>
</template>
...
...
@@ -307,17 +331,29 @@
</template>
<
script
setup
>
import
{
defineProps
,
defineEmits
,
ref
,
computed
,
onMounted
}
from
"vue"
;
import
{
defineProps
,
defineEmits
,
ref
,
computed
,
onMounted
,
getCurrentInstance
,
}
from
"vue"
;
import
{
ElMessageBox
,
ElMessage
}
from
"element-plus"
;
// 引入文件上传组件(适配你的项目路径)
import
FileUploader
from
"@/components/FileUploader/index.vue"
;
// 获取全局实例(用于接口请求/全局配置)
const
{
proxy
}
=
getCurrentInstance
();
// 定义Props
(移除selectOptions的默认值,改为空对象)
// 定义Props
const
props
=
defineProps
({
modelValue
:
{
type
:
Array
,
required
:
true
,
default
:
()
=>
[]
},
columns
:
{
type
:
Array
,
required
:
true
,
default
:
()
=>
[]
},
defaultRow
:
{
type
:
Object
,
default
:
()
=>
({})
},
addButtonText
:
{
type
:
String
,
default
:
"新增"
},
disabled
:
{
type
:
Boolean
,
default
:
false
},
selectOptions
:
{
type
:
Object
,
default
:
()
=>
({})
},
// 父组件
可选传
selectOptions
:
{
type
:
Object
,
default
:
()
=>
({})
},
// 父组件
自定义下拉选项
scrollbarAlwaysOn
:
{
type
:
Boolean
,
default
:
false
},
showAddButton
:
{
type
:
Boolean
,
default
:
true
},
showDeleteButton
:
{
type
:
Boolean
,
default
:
true
},
...
...
@@ -337,27 +373,38 @@ const emit = defineEmits([
"import-success"
,
]);
//
1. 从sessionStorage读取全局选项(组件内部兜底
)
//
全局下拉选项(从sessionStorage读取,适配你的业务
)
const
globalOptions
=
ref
({});
// 默认上传配置(适配你的项目接口)
const
defaultUploadUrl
=
ref
(
""
);
const
defaultUploadHeaders
=
ref
({});
const
defaultDownloadUrl
=
ref
(
""
);
// 初始化全局配置
onMounted
(()
=>
{
try
{
//
读取并解析sessionStorage中的resourceData
//
1. 读取全局下拉选项
const
storageData
=
sessionStorage
.
getItem
(
"resourceData"
);
globalOptions
.
value
=
storageData
?
JSON
.
parse
(
storageData
)
:
{};
// 可选:打印日志,方便调试
console
.
log
(
"从sessionStorage读取的全局选项:"
,
globalOptions
.
value
);
// 2. 初始化默认上传配置(适配你的项目)
const
baseUrl
=
proxy
?.
$config
?.
baseUrl
||
""
;
defaultUploadUrl
.
value
=
`
${
baseUrl
}
/api/file/upload`
;
defaultDownloadUrl
.
value
=
baseUrl
;
defaultUploadHeaders
.
value
=
{
Authorization
:
sessionStorage
.
getItem
(
"authToken"
)
||
""
,
};
}
catch
(
e
)
{
console
.
error
(
"
解析sessionStorage中的resourceData
失败:"
,
e
);
console
.
error
(
"
初始化全局配置
失败:"
,
e
);
globalOptions
.
value
=
{};
}
});
//
2. 合并选项:父组件传递的selectOptions 优先级 > 组件内部的globalOptions
//
合并下拉选项:父组件传入 > 全局配置
const
mergedSelectOptions
=
computed
(()
=>
{
// 深合并,避免覆盖
return
{
...
globalOptions
.
value
,
// 兜底数据
...
props
.
selectOptions
,
// 父组件自定义数据(覆盖兜底)
...
globalOptions
.
value
,
...
props
.
selectOptions
,
};
});
...
...
@@ -396,13 +443,25 @@ const headerColumnGroups = computed(() => {
return
result
;
});
// 新增行
// 新增行
(适配默认行数据,初始化upload字段为数组)
const
handleAdd
=
()
=>
{
try
{
const
newRow
=
{
...
props
.
defaultRow
};
// 初始化
textarea字段为空字符串,避免undefined导致绑定异常
// 初始化
各类型字段默认值
props
.
columns
.
forEach
((
col
)
=>
{
if
(
col
.
type
===
"textarea"
&&
!
newRow
[
col
.
prop
])
{
// Textarea 初始化为空字符串
if
(
col
.
type
===
"textarea"
&&
newRow
[
col
.
prop
]
===
undefined
)
{
newRow
[
col
.
prop
]
=
""
;
}
// Upload 初始化为空数组
if
(
col
.
type
===
"upload"
&&
newRow
[
col
.
prop
]
===
undefined
)
{
newRow
[
col
.
prop
]
=
[];
}
// Select/Input 初始化为空字符串
if
(
[
"input"
,
"select"
,
"number"
].
includes
(
col
.
type
)
&&
newRow
[
col
.
prop
]
===
undefined
)
{
newRow
[
col
.
prop
]
=
""
;
}
});
...
...
@@ -454,6 +513,7 @@ const handleCustomOperation = (btn, scope) => {
<
style
scoped
lang=
"less"
>
.dynamic-table-container {
width: 100%;
margin-bottom: 16px;
}
.tab-handle {
...
...
@@ -483,17 +543,28 @@ const handleCustomOperation = (btn, scope) => {
:deep(.el-table) {
--el-table-header-text-color: #303133;
--el-table-row-hover-bg-color: #f8f9fa;
--el-table-border-color: #ebeef5;
}
/*
确保textarea宽度100%,高度适配rows
*/
/*
适配各组件样式
*/
:deep(.el-input__textarea) {
width: 100%;
resize: vertical;
/* 允许垂直调整高度 */
resize: vertical;
}
:deep(.el-upload),
:deep(.el-textarea),
:deep(.el-date-picker) {
:deep(.el-date-picker),
:deep(.el-select) {
width: 100%;
}
/* 小尺寸组件适配 */
:deep(.el-input--small) {
--el-input-height: 32px;
}
:deep(.el-table-cell) {
padding: 8px 0;
}
</
style
>
src/views/castbehind/runningPeriodAdd.vue
View file @
5c1a28a5
...
...
@@ -5,7 +5,11 @@
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
:disabled=
"isPreview"
>
<el-form
:model=
"formData"
label-width=
"160px"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<!-- 基本信息 -->
<el-collapse-item
title=
"基本信息"
name=
"基本信息"
>
...
...
@@ -51,10 +55,6 @@
add-button-text=
"新增"
:default-row=
"zxjcDefaultRow"
:disabled=
"isPreview"
:select-options=
"
{
construction_classify:
options?.construction_classify || [],
}"
/>
</el-collapse-item>
</el-collapse>
...
...
@@ -97,15 +97,21 @@ const tzcbfxhzlColumns = ref([
},
{
prop
:
"ycztz"
,
label
:
"当期预测总投资"
,
label
:
"当期预测总投资
(万元)
"
,
type
:
"input"
,
placeholder
:
"请输入当期预测总投资"
,
placeholder
:
"请输入当期预测总投资
(万元)
"
,
},
{
prop
:
"zbjnbsyl"
,
label
:
"资本金内部收益率(%)"
,
label
:
"
项目
资本金内部收益率(%)"
,
type
:
"number"
,
placeholder
:
"请输入资本金内部收益率(%)"
,
placeholder
:
"请输入项目资本金内部收益率(%)"
,
},
{
prop
:
"wfzbjnbsyl"
,
label
:
"我方资本金内部收益率(%)"
,
type
:
"number"
,
placeholder
:
"请输入我方资本金内部收益率(%)"
,
},
{
prop
:
"tzcbfxhzl"
,
...
...
@@ -128,17 +134,36 @@ const zxjcColumns = ref([
optionKey
:
"construction_classify"
,
placeholder
:
"请选择专项检查类型"
,
},
{
prop
:
"jcmc"
,
label
:
"检查名称"
,
type
:
"input"
,
placeholder
:
"请输入请输入检查名称"
,
},
{
prop
:
"jcsj"
,
label
:
"检查时间"
,
type
:
"date"
,
placeholder
:
"请输入请输入检查时间"
,
},
{
prop
:
"jcjg"
,
label
:
"检查
结果
"
,
label
:
"检查
揭示的主要问题或结论
"
,
type
:
"input"
,
placeholder
:
"请输入
检查结果
"
,
placeholder
:
"请输入
请输入检查揭示的主要问题或结论
"
,
},
{
prop
:
"zgcsqd"
,
label
:
"整改措施清单"
,
type
:
"input"
,
placeholder
:
"请输入整改措施清单"
,
type
:
"upload"
,
placeholder
:
""
,
},
{
prop
:
"jcbg"
,
label
:
"检查报告"
,
type
:
"upload"
,
placeholder
:
""
,
},
{
prop
:
"fjcl"
,
...
...
@@ -179,48 +204,6 @@ const yyqtzjcTzfxsList = ref([]);
// 专项检查列表
const
yyqtzjcZxjcsList
=
ref
([]);
// ========== 投资(成本)分析会资料 操作方法 ==========
const
addyyqtzjcTzfxs
=
()
=>
{
yyqtzjcTzfxsList
.
value
.
push
({
jd
:
""
,
ycztz
:
""
,
zbjnbsyl
:
""
,
yyqtzjcTzfxs
:
[],
});
};
const
deleteyyqtzjcTzfxs
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(()
=>
{
yyqtzjcTzfxsList
.
value
.
splice
(
index
,
1
);
ElMessage
.
success
(
"删除成功"
);
});
};
// ========== 专项检查 操作方法 ==========
const
addyyqtzjcZxjcs
=
()
=>
{
yyqtzjcZxjcsList
.
value
.
push
({
zxjcfl
:
""
,
jcjg
:
""
,
zgcsqd
:
""
,
fjcl
:
[],
});
};
const
deleteyyqtzjcZxjcs
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(()
=>
{
yyqtzjcZxjcsList
.
value
.
splice
(
index
,
1
);
ElMessage
.
success
(
"删除成功"
);
});
};
// ========== 通用方法 ==========
// 获取项目列表
const
getProjectData
=
(
params
=
{})
=>
{
...
...
src/views/investingManage/bigIssues.vue
View file @
5c1a28a5
...
...
@@ -129,11 +129,11 @@ const getProjectData = (params = {}) => {
tableData
.
value
=
data
.
rows
.
map
((
it
)
=>
{
return
{
...
it
,
htNum
:
it
.
qylht
?.
length
+
it
.
jjlht
?.
length
,
zjNum
:
it
.
zjwj
?.
length
+
it
.
ybfspwj
?.
length
,
spNum
:
it
.
bgsp
?.
length
,
gsNum
:
it
.
gqjg
?.
length
+
it
.
cwjr
?.
length
,
qtNum
:
it
.
qt
?.
length
,
htNum
:
it
.
qylht
?.
length
+
it
.
jjlht
?.
length
||
0
,
zjNum
:
it
.
zjwj
?.
length
+
it
.
ybfspwj
?.
length
||
0
,
spNum
:
it
.
bgsp
?.
length
||
0
,
gsNum
:
it
.
gqjg
?.
length
+
it
.
cwjr
?.
length
||
0
,
qtNum
:
it
.
qt
?.
length
||
0
,
};
});
total
.
value
=
data
.
count
;
...
...
src/views/investingManage/bigIssuesAdd.vue
View file @
5c1a28a5
...
...
@@ -5,7 +5,11 @@
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
:disabled=
"isPreview"
>
<el-form
:model=
"formData"
label-width=
"160px"
:disabled=
"isPreview"
>
<!-- 项目信息选择 -->
<el-row
:gutter=
"20"
style=
"margin-bottom: 20px"
>
<el-col
:span=
"12"
>
...
...
@@ -35,13 +39,50 @@
<!-- 权益类合同 -->
<el-col
:span=
"24"
>
<el-form-item
label=
"权益类合同"
>
<FileUploader
v-model=
"formData.qylht"
/>
<FileUploader
v-model=
"formData.qylht"
:custom-columns=
"[
{
prop: 'jfqdsj',
label: '甲方签订时间',
type: 'date',
width: 180,
format: 'YYYY-MM-DD',
},
{
prop: 'yfqdsj',
label: '乙方签订时间',
type: 'date',
width: 180,
format: 'YYYY-MM-DD',
},
]"
@custom-col-change="handleCustomColChange"
/>
</el-form-item>
</el-col>
<!-- 经济类合同 -->
<el-col
:span=
"24"
>
<el-form-item
label=
"经济类合同"
>
<FileUploader
v-model=
"formData.jjlht"
/>
<FileUploader
:custom-columns=
"[
{
prop: 'jfqdsj',
label: '甲方签订时间',
type: 'date',
width: 180,
format: 'YYYY-MM-DD',
},
{
prop: 'yfqdsj',
label: '乙方签订时间',
type: 'date',
width: 180,
format: 'YYYY-MM-DD',
},
]"
v-model="formData.jjlht"
/>
</el-form-item>
</el-col>
</el-row>
...
...
@@ -52,14 +93,37 @@
<el-row
:gutter=
"20"
>
<!-- 造价文件 -->
<el-col
:span=
"24"
>
<el-form-item
label=
"造价文件"
>
<FileUploader
v-model=
"formData.zjwj"
/>
<el-form-item
label=
"决策文件"
>
<FileUploader
v-model=
"formData.juecewj"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"估算文件"
>
<FileUploader
v-model=
"formData.gusuanwj"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"概算文件"
>
<FileUploader
v-model=
"formData.gaisuanwj"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"预算文件"
>
<FileUploader
v-model=
"formData.yswj"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"调概文件"
>
<FileUploader
v-model=
"formData.tgwj"
/>
</el-form-item>
</el-col>
<!-- 动用预备费审批文件 -->
<el-col
:span=
"24"
>
<el-form-item
label=
"动用预备费审批文件"
>
<FileUploader
v-model=
"formData.ybfspwj"
/>
<FileUploader
:custom-columns=
"customColumnsJs"
v-model=
"formData.ybfspwj"
/>
</el-form-item>
</el-col>
</el-row>
...
...
@@ -71,7 +135,10 @@
<!-- 变更索赔文件 -->
<el-col
:span=
"24"
>
<el-form-item
label=
"变更索赔文件"
>
<FileUploader
v-model=
"formData.bgsp"
/>
<FileUploader
v-model=
"formData.bgsp"
:custom-columns=
"customColumnsJs"
/>
</el-form-item>
</el-col>
</el-row>
...
...
@@ -85,17 +152,20 @@
<el-form-item
label=
"股权结构、资金来源及构成发生重大变化的报告及审批文件"
>
<FileUploader
v-model=
"formData.gqjg"
/>
<FileUploader
v-model=
"formData.gqjg"
:custom-columns=
"customColumnsJs"
/>
</el-form-item>
</el-col>
<!-- 接入财务金融部资本金出资台账,台账更新,系统上跟着更新 -->
<el-col
:span=
"24"
>
<
!--
<
el-col
:span=
"24"
>
<el-form-item
label=
"接入财务金融部资本金出资台账,台账更新,系统上跟着更新"
>
<FileUploader
v-model=
"formData.cwjr"
/>
</el-form-item>
</el-col>
</el-col>
-->
</el-row>
</el-tab-pane>
...
...
@@ -139,6 +209,15 @@ const router = useRouter();
const
route
=
useRoute
();
const
{
proxy
}
=
getCurrentInstance
();
const
customColumnsJs
=
[
{
prop
:
"js"
,
label
:
"介绍"
,
type
:
"textarea"
,
width
:
180
,
format
:
"YYYY-MM-DD"
,
},
];
// 标签页默认激活项
const
pageActiveName
=
ref
(
"合同类"
);
...
...
src/views/investingManage/constructionAdd.vue
View file @
5c1a28a5
...
...
@@ -99,23 +99,37 @@
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"ycztz"
label=
"当期预测总投资"
>
<el-table-column
prop=
"ycztz"
label=
"当期预测总投资(万元)"
>
<
template
#
default=
"scope"
>
<el-input
type=
"number"
v-model
.
number=
"scope.row.ycztz"
placeholder=
"请输入当期预测总投资"
placeholder=
"请输入当期预测总投资
(万元)
"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"zbjnbsyl"
label=
"资本金内部收益率(%)"
label=
"
项目
资本金内部收益率(%)"
>
<
template
#
default=
"scope"
>
<el-input
v-model
.
number=
"scope.row.zbjnbsyl"
placeholder=
"请输入资本金内部收益率(%)"
placeholder=
"请输入项目资本金内部收益率(%)"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"wfzbjnbsyl"
label=
"我方资本金内部收益率(%)"
>
<
template
#
default=
"scope"
>
<el-input
v-model
.
number=
"scope.row.wfzbjnbsyl"
placeholder=
"请输入我方资本金内部收益率(%)"
/>
</
template
>
</el-table-column>
...
...
@@ -173,22 +187,63 @@
</el-select>
</
template
>
</el-table-column>
<el-table-column
prop=
"jcjg"
label=
"检查结果"
>
<el-table-column
prop=
"jcmc"
label=
"检查名称"
>
<
template
#
default=
"scope"
>
<el-input
v-model
.
number=
"scope.row.jcmc"
placeholder=
"请输入检查名称"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"jcsj"
label=
"检查时间"
>
<
template
#
default=
"scope"
>
<el-date-picker
v-model=
"scope.row.jcsj"
type=
"date"
placeholder=
"请选择检查时间"
format=
"YYYY-MM-DD"
value-format=
"YYYY-MM-DD"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"jcjg"
label=
"检查揭示的主要问题或结论"
>
<
template
#
default=
"scope"
>
<el-input
v-model
.
number=
"scope.row.jcjg"
placeholder=
"请输入检查
结果
"
placeholder=
"请输入检查
揭示的主要问题或结论
"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"zgcsqd"
label=
"整改措施清单"
>
<
!-- <
el-table-column prop="zgcsqd" label="整改措施清单">
<template #default="scope">
<el-input
v-model.number="scope.row.zgcsqd"
placeholder="请输入整改措施清单"
/>
</template>
</el-table-column> -->
<el-table-column
prop=
"zgcsqd"
label=
"整改措施清单"
>
<
template
#
default=
"scope"
>
<FileUploader
v-model=
"scope.row.zgcsqd"
:isInline=
"true"
></FileUploader>
</
template
>
</el-table-column>
<el-table-column
prop=
"jcbg"
label=
"检查报告"
>
<
template
#
default=
"scope"
>
<FileUploader
v-model=
"scope.row.jcbg"
:isInline=
"true"
></FileUploader>
</
template
>
</el-table-column>
<el-table-column
prop=
"fjcl"
label=
"附件材料"
>
<
template
#
default=
"scope"
>
<FileUploader
...
...
@@ -293,6 +348,10 @@ const addJsqtzjcZxjcs = () => {
zxjcfl
:
null
,
jcjg
:
null
,
zgcsqd
:
null
,
jcsj
:
null
,
jcmc
:
null
,
zgcsqd
:
[],
jcbg
:
[],
fjcl
:
[],
});
};
...
...
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