You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

230 lines
6.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="container">
<!-- 顶部信息 -->
<div class="containertop">
<div class="topleft">
<img src="@/assets/images/detailsicon/1.png" alt="">
<span>五要素模型信息</span>
</div>
<div class="topright" v-if="action === 'fill' || !action || action === 'okay'">
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="toggleEditAll">
<img src="@/assets/images/detailsicon/icon-bj@2x.png" alt="编辑"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
{{ isEditingAll ? '保存' : '编辑' }}
</el-button>
</div>
</div>
<!-- 内容区 -->
<div class="content">
<div class="descriptionsdiv">
<div>
<table class="custom-table">
<tr v-for="(row, rowIndex) in form" :key="rowIndex" style="border: 1px solid #E5E5E5;">
<td class="left-column">{{ row.ysmc }}</td>
<td class="right-columns" v-for="(item, itemIndex) in row.list" :key="itemIndex">
<div v-if="item.isEditing">
<span class="label-color">{{ item.zdname || '暂无指标' }}</span>
<!-- 使用下拉框el-select渲染第一个数据集的所有字段其他数据集使用输入框el-input -->
<el-select v-if="rowIndex === 0" v-model="item.zdinfor" size="small"
style="width: 12rem;">
<el-option v-for="option in getOptionsForItem(rowIndex, itemIndex)"
:key="option.value" :label="option.label" :value="option.value">
</el-option>
</el-select>
<el-input v-else v-model="item.zdinfor" size="small" style="width: 12rem;"
:disabled="item.zdname === '暂无指标'"
:placeholder="item.zdname === '暂无指标' ? '暂无数据' : '请输入内容'">
</el-input>
</div>
<div v-else>
<span class="label-color">{{ item.zdname || '' }}</span> {{ item.zdinfor ||
'' }}
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "Models",
props: {
wysmxInfo: {
type: Array,
required: true,
},
action: {
type: String,
required: true
}
},
data() {
return {
isEditingAll: false,
form: [],
optionsMap: {
'0-0': [
{ value: '一级', label: '一级' },
{ value: '二级', label: '二级' },
{ value: '三级', label: '三级' },
{ value: '四级', label: '四级' },
],
'0-1': [
{ value: '甲', label: '甲' },
{ value: '乙', label: '乙' },
{ value: '丙', label: '丙' },
{ value: '丁', label: '丁' },
{ value: '戊', label: '戊' },
],
'0-2': [
{ value: '有', label: '有' },
{ value: '无', label: '无' },
],
}
};
},
watch: {
wysmxInfo: {
immediate: true,
handler(newVal) {
this.form = newVal.map(item => ({
xmId: item.xmId,
ysmc: item.ysmc,
list: item.list.map(subItem => ({
id: subItem.id,
zdname: subItem.zdname || '暂无指标',
zdinfor: subItem.zdinfor || '',
isEditing: false
}))
}));
}
}
},
methods: {
toggleEditAll() {
if (this.isEditingAll) {
const cleanedForm = this.form.map(row => ({
ysmc: row.ysmc,
xmId: row.xmId,
list: row.list.map(item => ({
id: item.id,
zdname: item.zdname,
zdinfor: item.zdinfor,
}))
}));
this.$emit('updata-data', cleanedForm);
} else {
this.form.forEach(row => {
row.list.forEach(item => {
item.isEditing = true;
});
});
}
this.isEditingAll = !this.isEditingAll;
},
getOptionsForItem(rowIndex, itemIndex) {
return this.optionsMap[`${rowIndex}-${itemIndex}`] || [];
}
},
created() {
}
};
</script>
<style scoped>
.container {
display: flex;
flex-direction: column;
width: 100%;
background-color: #FFFFFF;
box-shadow: 0rem 0.13rem 0.63rem 0rem rgba(177, 177, 177, 0.1);
border-radius: 0.5rem 0.5rem 0.5rem 0.5rem;
}
.content {
padding: 1rem;
display: flex;
}
.containertop {
height: auto;
display: flex;
justify-content: space-between;
padding: .5rem;
border-bottom: 1px solid #E5E5E5;
}
.topleft {
height: 2rem;
width: auto;
display: flex;
gap: 0.4rem;
align-items: center;
}
.topleft img {
width: 0.81rem;
height: 0.81rem;
}
.topleft span {
width: auto;
height: 1rem;
font-family: aliregular;
font-weight: 500;
font-size: 1rem;
color: #3D424C;
line-height: 1rem;
text-align: right;
font-style: normal;
text-transform: none;
}
.picturediv {
width: 18.31rem;
height: 25.31rem;
background-color: lightblue;
}
.descriptionsdiv {
width: 100%;
margin-left: 1rem;
height: auto;
}
.two-row-item {
height: 20rem;
}
.custom-table {
width: 100%;
border-collapse: collapse;
border: 1px solid #E6EAF2;
}
.custom-table th,
.custom-table td {
padding: 8px;
text-align: left;
border-top: 1px solid #E6EAF2;
border-bottom: 1px solid #E6EAF2;
}
.left-column {
border-right: 1px solid #E6EAF2;
background-color: #F4F7FE;
}
.right-columns {
border-right: none;
}
.label-color {
color: #808080;
}
</style>