明树Git Lab

Commit c76a6f19 authored by zhanghan's avatar zhanghan

11

parent b320c6a1
Pipeline #108731 passed with stage
in 20 seconds
...@@ -53,6 +53,7 @@ ...@@ -53,6 +53,7 @@
:align="col.align || 'left'" :align="col.align || 'left'"
> >
<template #default="scope"> <template #default="scope">
<!-- Input 类型 -->
<template v-if="col.type === 'input'"> <template v-if="col.type === 'input'">
<el-input <el-input
v-model="scope.row[col.prop]" v-model="scope.row[col.prop]"
...@@ -62,7 +63,8 @@ ...@@ -62,7 +63,8 @@
/> />
</template> </template>
<template v-else-if="col.type == 'textarea'"> <!-- Textarea 类型(修复:改为 ===) -->
<template v-else-if="col.type === 'textarea'">
<el-input <el-input
v-model="scope.row[col.prop]" v-model="scope.row[col.prop]"
type="textarea" type="textarea"
...@@ -71,8 +73,11 @@ ...@@ -71,8 +73,11 @@
:rows="col.rows || 3" :rows="col.rows || 3"
:maxlength="col.maxlength" :maxlength="col.maxlength"
:show-word-limit="col.showWordLimit || false" :show-word-limit="col.showWordLimit || false"
style="width: 100%"
/> />
</template> </template>
<!-- Select 类型 -->
<template v-else-if="col.type === 'select'"> <template v-else-if="col.type === 'select'">
<el-select <el-select
v-model="scope.row[col.prop]" v-model="scope.row[col.prop]"
...@@ -80,7 +85,6 @@ ...@@ -80,7 +85,6 @@
:disabled="disabled || col.disabled" :disabled="disabled || col.disabled"
:multiple="col.multiple || false" :multiple="col.multiple || false"
> >
<!-- 优先用合并后的选项,无数据时提示 -->
<el-option <el-option
v-for="item in mergedSelectOptions[col.optionKey] || []" v-for="item in mergedSelectOptions[col.optionKey] || []"
:key="item.key || item.value" :key="item.key || item.value"
...@@ -95,7 +99,8 @@ ...@@ -95,7 +99,8 @@
/> />
</el-select> </el-select>
</template> </template>
<!-- 其他类型(number/radio/date等)保持不变 -->
<!-- Number 类型 -->
<template v-else-if="col.type === 'number'"> <template v-else-if="col.type === 'number'">
<el-input <el-input
v-model.number="scope.row[col.prop]" v-model.number="scope.row[col.prop]"
...@@ -107,6 +112,8 @@ ...@@ -107,6 +112,8 @@
:max="col.max" :max="col.max"
/> />
</template> </template>
<!-- Radio 类型 -->
<template v-else-if="col.type === 'radio'"> <template v-else-if="col.type === 'radio'">
<el-radio-group <el-radio-group
v-model="scope.row[col.prop]" v-model="scope.row[col.prop]"
...@@ -120,11 +127,13 @@ ...@@ -120,11 +127,13 @@
> >
{{ item.name || item.label }} {{ item.name || item.label }}
</el-radio> </el-radio>
<span v-if="!mergedSelectOptions[col.optionKey]?.length" <span v-if="!mergedSelectOptions[col.optionKey]?.length">
>暂无可选数据</span 暂无可选数据
> </span>
</el-radio-group> </el-radio-group>
</template> </template>
<!-- Date/DateTime 类型 -->
<template <template
v-else-if="col.type === 'date' || col.type === 'datetime'" v-else-if="col.type === 'date' || col.type === 'datetime'"
> >
...@@ -143,7 +152,7 @@ ...@@ -143,7 +152,7 @@
</el-table-column> </el-table-column>
</template> </template>
<!-- 单级表头渲染 --> <!-- 单级表头渲染(核心修复:新增 textarea 分支) -->
<el-table-column <el-table-column
v-else v-else
v-for="col in columns" v-for="col in columns"
...@@ -154,6 +163,7 @@ ...@@ -154,6 +163,7 @@
:align="col.align || 'left'" :align="col.align || 'left'"
> >
<template #default="scope"> <template #default="scope">
<!-- Input 类型 -->
<template v-if="col.type === 'input'"> <template v-if="col.type === 'input'">
<el-input <el-input
v-model="scope.row[col.prop]" v-model="scope.row[col.prop]"
...@@ -162,6 +172,22 @@ ...@@ -162,6 +172,22 @@
:maxlength="col.maxlength" :maxlength="col.maxlength"
/> />
</template> </template>
<!-- 核心修复:新增 Textarea 类型分支 -->
<template v-else-if="col.type === 'textarea'">
<el-input
v-model="scope.row[col.prop]"
type="textarea"
:placeholder="col.placeholder || '请输入内容'"
:disabled="disabled || col.disabled"
:rows="col.rows || 3"
:maxlength="col.maxlength"
:show-word-limit="col.showWordLimit || false"
style="width: 100%"
/>
</template>
<!-- Select 类型 -->
<template v-else-if="col.type === 'select'"> <template v-else-if="col.type === 'select'">
<el-select <el-select
v-model="scope.row[col.prop]" v-model="scope.row[col.prop]"
...@@ -183,7 +209,8 @@ ...@@ -183,7 +209,8 @@
/> />
</el-select> </el-select>
</template> </template>
<!-- 其他类型(number/radio/date等)保持不变 -->
<!-- Number 类型 -->
<template v-else-if="col.type === 'number'"> <template v-else-if="col.type === 'number'">
<el-input <el-input
v-model.number="scope.row[col.prop]" v-model.number="scope.row[col.prop]"
...@@ -195,6 +222,8 @@ ...@@ -195,6 +222,8 @@
:max="col.max" :max="col.max"
/> />
</template> </template>
<!-- Radio 类型 -->
<template v-else-if="col.type === 'radio'"> <template v-else-if="col.type === 'radio'">
<el-radio-group <el-radio-group
v-model="scope.row[col.prop]" v-model="scope.row[col.prop]"
...@@ -208,11 +237,13 @@ ...@@ -208,11 +237,13 @@
> >
{{ item.name || item.label }} {{ item.name || item.label }}
</el-radio> </el-radio>
<span v-if="!mergedSelectOptions[col.optionKey]?.length" <span v-if="!mergedSelectOptions[col.optionKey]?.length">
>暂无可选数据</span 暂无可选数据
> </span>
</el-radio-group> </el-radio-group>
</template> </template>
<!-- Date/DateTime 类型 -->
<template v-else-if="col.type === 'date' || col.type === 'datetime'"> <template v-else-if="col.type === 'date' || col.type === 'datetime'">
<el-date-picker <el-date-picker
v-model="scope.row[col.prop]" v-model="scope.row[col.prop]"
...@@ -369,6 +400,12 @@ const headerColumnGroups = computed(() => { ...@@ -369,6 +400,12 @@ const headerColumnGroups = computed(() => {
const handleAdd = () => { const handleAdd = () => {
try { try {
const newRow = { ...props.defaultRow }; const newRow = { ...props.defaultRow };
// 初始化textarea字段为空字符串,避免undefined导致绑定异常
props.columns.forEach((col) => {
if (col.type === "textarea" && !newRow[col.prop]) {
newRow[col.prop] = "";
}
});
const newData = [...props.modelValue, newRow]; const newData = [...props.modelValue, newRow];
emit("update:modelValue", newData); emit("update:modelValue", newData);
emit("add", newRow); emit("add", newRow);
...@@ -448,6 +485,12 @@ const handleCustomOperation = (btn, scope) => { ...@@ -448,6 +485,12 @@ const handleCustomOperation = (btn, scope) => {
--el-table-row-hover-bg-color: #f8f9fa; --el-table-row-hover-bg-color: #f8f9fa;
} }
/* 确保textarea宽度100%,高度适配rows */
:deep(.el-input__textarea) {
width: 100%;
resize: vertical; /* 允许垂直调整高度 */
}
:deep(.el-upload), :deep(.el-upload),
:deep(.el-textarea), :deep(.el-textarea),
:deep(.el-date-picker) { :deep(.el-date-picker) {
......
...@@ -74,24 +74,26 @@ ...@@ -74,24 +74,26 @@
</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-input <el-input
v-model="formData.hpjpjjg" v-model="formData.hpjpjjg"
placeholder="请输入评价结果" placeholder="请输入总体评价结果"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="问题整改" name="问题整改"> <el-collapse-item
title="存在的问题主要简述"
name="存在的问题主要简述"
>
<DynamicTable <DynamicTable
v-model="formData.tzhpjwtzgs" v-model="formData.tzhpjwtzgs"
:columns="problemColumns" :columns="problemColumns"
:default-row="problemDefaultRow" :default-row="problemDefaultRow"
:select-options="selectOptions" :select-options="selectOptions"
:show-import-export="true" :show-import-export="true"
export-name="问题整改数据"
:scrollbar-always-on="true" :scrollbar-always-on="true"
:disabled="isPreview" :disabled="isPreview"
/> />
...@@ -135,10 +137,10 @@ ...@@ -135,10 +137,10 @@
</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-input <el-input
v-model="formData.qsmpjjg" v-model="formData.qsmpjjg"
placeholder="请输入评价结果" placeholder="请输入总体评价结果"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -180,11 +182,11 @@ const activeCollapse = ref([ ...@@ -180,11 +182,11 @@ const activeCollapse = ref([
"项目信息", "项目信息",
"项目公司自查报告", "项目公司自查报告",
"投资后评价报告", "投资后评价报告",
"问题整改", "存在的问题主要简述",
"全生命周期评价报告", "全生命周期评价报告",
]); ]);
// ========== 问题整改表格配置 ========== // ========== 存在的问题主要简述表格配置 ==========
// 列配置(包含input、textarea、datetime、radio类型) // 列配置(包含input、textarea、datetime、radio类型)
const problemColumns = ref([ const problemColumns = ref([
{ {
...@@ -251,7 +253,7 @@ const problemColumns = ref([ ...@@ -251,7 +253,7 @@ const problemColumns = ref([
}, },
]); ]);
// 问题整改默认行数据 // 存在的问题主要简述默认行数据
const problemDefaultRow = ref({ const problemDefaultRow = ref({
ccwt: "", ccwt: "",
wtxs: "", wtxs: "",
...@@ -277,7 +279,7 @@ const formData = reactive({ ...@@ -277,7 +279,7 @@ const formData = reactive({
xmgszcbg: [], xmgszcbg: [],
hpjbg: [], hpjbg: [],
qsmzqpj: [], qsmzqpj: [],
// 问题整改列表(由DynamicTable自动维护) // 存在的问题主要简述列表(由DynamicTable自动维护)
tzhpjwtzgs: [], tzhpjwtzgs: [],
}); });
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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