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.

250 lines
9.8 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>
<div class="headerbox">
<el-form size="small" :inline="true" label-width="7rem">
<el-row style="margin-top: 1rem;">
<el-col :span="6">
<el-form-item label="关键要素" style="width: 100%;">
<el-input placeholder="请输入关键要素" clearable style="width: 14rem;" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="具体指标" style="width: 100%;">
<el-input placeholder="请输入具体指标" clearable style="width: 14rem;" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item style="margin-left: 2.5rem;">
<el-button type="primary" icon="el-icon-search" size="mini">查询</el-button>
<el-button icon="el-icon-refresh" size="mini">重置</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="tablebox" style="margin: .5rem;">
<el-button type="primary" icon="el-icon-plus" @click="dialogVisible = true; resetForm()">新增要素</el-button>
<div v-for="(category, categoryName) in tableData" :key="categoryName">
<div v-for="(items, itemName) in category" :key="itemName" class="tablebox">
<div class="boxheader">
<div class="headerone">
<div>{{ categoryName }}</div>
<div>{{ itemName }}</div>
</div>
<div class="headertwo">
<el-button type="primary" icon="el-icon-edit" size="mini"
@click="handleUpdate(items[0])">编辑要素</el-button>
<el-button type="primary" icon="el-icon-edit"
@click="showAddIndicatorDialog">新增指标</el-button>
</div>
</div>
<el-table :data="items" style="width: 100%">
<el-table-column prop="id" label="序号" width="180"></el-table-column>
<el-table-column prop="jtzb" label="具体指标" width="180"></el-table-column>
<el-table-column prop="xxyq" label="详细要求" width="950"></el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']">编辑</el-button>
<el-button size="mini" type="text" @click="handleDelete(scope.row)" style="color: #F25353;"
v-hasPermi="['system:post:remove']">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
<!-- 新增要素//编辑要素弹窗 -->
<el-dialog :title="form.id ? '编辑要素' : '新增要素'" :visible.sync="dialogVisible" width="30%">
<el-form :model="form" label-width="80px">
<el-form-item label="类型">
<el-select v-model="form.type" placeholder="请选择类型">
<el-option label="关键" value="关键要素"></el-option>
<el-option label="重要" value="重要要素"></el-option>
</el-select>
</el-form-item>
<el-form-item label="名称">
<el-input v-model="form.name" placeholder="请输入名称"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleAddElement">确 定</el-button>
</span>
</el-dialog>
<!-- 新增指标弹窗 -->
<el-dialog title="新增指标" :visible.sync="indicatorDialogVisible" width="30%">
<el-form :model="indicatorForm" label-width="80px">
<el-form-item label="指标名称">
<el-input v-model="indicatorForm.name" placeholder="请输入指标名称"></el-input>
</el-form-item>
<el-form-item label="指标类型">
<el-select v-model="indicatorForm.type" placeholder="请选择类型">
<el-option label="关键指标" value="关键指标"></el-option>
<el-option label="重要指标" value="重要指标"></el-option>
</el-select>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="indicatorDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleAddIndicator"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getAllElements, addElement, editElemention } from '@/api/ManageApi/index';
export default {
data() {
return {
tableData: {
关键要素: {
环保安全: [],
安全: []
},
重要要素: {
设备: [],
设备载重: []
}
},
dialogVisible: false, // 新增/编辑要素弹窗
indicatorDialogVisible: false, // 新增指标弹窗
form: {
id: '',
type: '',
name: ''
},
indicatorForm: {
name: '',
type: ''
}
}
},
mounted() {
this.fetchData();
},
methods: {
// 获取数据
async fetchData() {
try {
const response = await getAllElements();
if (response.code === 200) {
this.tableData = response.data;
} else {
console.error('获取数据失败', response.msg);
}
} catch (error) {
console.error('请求错误', error);
}
},
// 显示新增指标弹窗
showAddIndicatorDialog() {
this.indicatorForm = { name: '', type: '' }; // 重置表单
this.indicatorDialogVisible = true; // 显示弹窗
},
// 处理新增指标
handleAddIndicator() {
addElement(this.indicatorForm).then(response => {
if (response.code === 200) {
this.$message.success('新增指标成功');
this.indicatorDialogVisible = false; // 关闭弹窗
this.fetchData(); // 刷新数据
} else {
this.$message.error('新增指标失败:' + response.msg);
}
}).catch(error => {
this.$message.error('请求错误:' + error.message);
});
},
// 处理新增/编辑要素
handleAddElement() {
if (this.form.id) {
// 编辑操作
editElemention(this.form).then(response => {
if (response.code === 200) {
this.$message.success('编辑成功');
this.dialogVisible = false; // 关闭弹窗
this.fetchData(); // 刷新数据
} else {
this.$message.error('编辑失败:' + response.msg);
}
});
} else {
// 新增操作
addElement(this.form).then(response => {
if (response.code === 200) {
this.$message.success('新增成功');
this.dialogVisible = false; // 关闭弹窗
this.fetchData(); // 刷新数据
} else {
this.$message.error('新增失败:' + response.msg);
}
});
}
},
// 编辑操作
handleUpdate(row) {
this.form = { ...row }; // 将当前行的数据填充到表单中
this.dialogVisible = true; // 显示弹窗
},
// 删除操作
handleDelete(row) {
this.$confirm('确定删除该要素吗?', '提示', {
type: 'warning'
}).then(() => {
// 在这里添加删除逻辑
this.$message.success('删除成功');
}).catch(() => {
this.$message.info('已取消删除');
});
},
// 重置表单
resetForm() {
this.form = {
id: '',
type: '',
name: ''
};
}
}
}
</script>
<style scoped>
.headerbox {
background-color: #fff;
border-radius: 0.5rem;
margin: 0.5rem;
border: 1px solid #eee;
}
.tablebox {
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem;
margin: 0.5rem;
border: 1px solid #eee;
}
.boxheader {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: .5rem;
background-color: #F5F7FE;
}
.headerone {
color: #000000;
font-weight: bold;
display: flex;
}
.headertwo {
display: flex;
}
</style>