Files
klp-oa/klp-ui/src/views/mes/dv/specialEquipment/specialEquipment.vue
JR 2bcc11f81c feat(mes): 添加特种设备管理功能
- 新增特种设备管理相关的数据模型、控制器、服务接口和实现类
- 开发了特种设备的查询、添加、修改和删除功能
- 优化了用户界面,调整了部分字段的显示和输入方式
2025-08-21 11:08:50 +08:00

478 lines
17 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="设备编码" prop="equipmentCode">
<el-input
v-model="queryParams.equipmentCode"
placeholder="请输入设备编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="设备名称" prop="equipmentName">
<el-input
v-model="queryParams.equipmentName"
placeholder="请输入设备名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="规格型号" prop="specificationModel">
<el-input
v-model="queryParams.specificationModel"
placeholder="请输入规格型号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="制造单位" prop="manufacturer">
<el-input
v-model="queryParams.manufacturer"
placeholder="请输入制造单位"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>-->
<!-- <el-form-item label="制造日期" prop="productionDate">
<el-date-picker clearable
v-model="queryParams.productionDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择制造日期">
</el-date-picker>
</el-form-item>
<el-form-item label="安装日期" prop="installationDate">
<el-date-picker clearable
v-model="queryParams.installationDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择安装日期">
</el-date-picker>
</el-form-item>-->
<el-form-item label="使用日期" prop="useStartDate">
<el-date-picker clearable
v-model="queryParams.useStartDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择投入使用日期">
</el-date-picker>
</el-form-item>
<!-- <el-form-item label="注册编号" prop="registrationNo">
<el-input
v-model="queryParams.registrationNo"
placeholder="请输入特种设备注册编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>-->
<el-form-item label="负责人" prop="safetyManager">
<el-input
v-model="queryParams.safetyManager"
placeholder="请输入安全负责人"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="当前状态" prop="currentStatus">
<el-select v-model="queryParams.currentStatus" placeholder="请选择当前状态" clearable>
<el-option
v-for="dict in dict.type.special_equipment_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="specialEquipmentList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="设备ID" align="center" prop="equipmentId" v-if="false"/>
<el-table-column label="设备编码" align="center" prop="equipmentCode" />
<el-table-column label="设备名称" align="center" prop="equipmentName" />
<el-table-column label="规格型号" align="center" prop="specificationModel" />
<el-table-column label="制造单位" align="center" prop="manufacturer" />
<!-- <el-table-column label="制造日期" align="center" prop="productionDate" width="98">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.productionDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="安装日期" align="center" prop="installationDate" width="98">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.installationDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>-->
<el-table-column label="投入使用日期" align="center" prop="useStartDate" width="98">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.useStartDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="注册编号" align="center" prop="registrationNo" />
<el-table-column label="安全负责人" align="center" prop="safetyManager" />
<!-- <el-table-column label="附件路径" align="center" prop="attachment" />-->
<el-table-column label="检验周期" align="center" prop="inspectionCycle" />
<el-table-column label="上次检验时间" align="center" prop="lastInspectionTime" width="98">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.lastInspectionTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="下次检验时间" align="center" prop="nextInspectionTime" width="98">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.nextInspectionTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>-->
<el-table-column label="当前状态" align="center" prop="currentStatus">
<template slot-scope="scope">
<dict-tag :options="dict.type.special_equipment_type" :value="scope.row.currentStatus"/>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改特种设备包含锅炉压力管道电梯等特种设备信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="设备编码" prop="equipmentCode">
<el-input v-model="form.equipmentCode" placeholder="请输入设备编码" />
</el-form-item>
<el-form-item label="设备名称" prop="equipmentName">
<el-input v-model="form.equipmentName" placeholder="请输入设备名称" />
</el-form-item>
<el-form-item label="规格型号" prop="specificationModel">
<el-input v-model="form.specificationModel" placeholder="请输入规格型号" />
</el-form-item>
<el-form-item label="制造单位" prop="manufacturer">
<el-input v-model="form.manufacturer" placeholder="请输入制造单位" />
</el-form-item>
<el-form-item label="制造日期" prop="productionDate">
<el-date-picker clearable
v-model="form.productionDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择制造日期">
</el-date-picker>
</el-form-item>
<el-form-item label="安装日期" prop="installationDate">
<el-date-picker clearable
v-model="form.installationDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择安装日期">
</el-date-picker>
</el-form-item>
<el-form-item label="使用日期" prop="useStartDate">
<el-date-picker clearable
v-model="form.useStartDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择投入使用日期">
</el-date-picker>
</el-form-item>
<el-form-item label="注册编号" prop="registrationNo">
<el-input v-model="form.registrationNo" placeholder="请输入特种设备注册编号" />
</el-form-item>
<el-form-item label="检验周期" prop="inspectionCycle">
<el-input v-model="form.inspectionCycle" placeholder="请输入检验周期" />
</el-form-item>
<el-form-item label="负责人" prop="safetyManager">
<el-input v-model="form.safetyManager" placeholder="请输入安全负责人" />
</el-form-item>
<el-form-item label="上次检验时间" prop="lastInspectionTime" label-width="107px">
<el-date-picker clearable
v-model="form.lastInspectionTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择上次检验时间">
</el-date-picker>
</el-form-item>
<el-form-item label="下次检验时间" prop="nextInspectionTime" label-width="107px">
<el-date-picker clearable
v-model="form.nextInspectionTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择下次检验时间">
</el-date-picker>
</el-form-item>
<el-form-item label="附件" prop="attachment">
<file-upload v-model="form.attachment" :limit="1" :fileType="fileType" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="当前状态" prop="currentStatus">
<el-radio-group v-model="form.currentStatus">
<el-radio
v-for="dict in dict.type.special_equipment_type"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listSpecialEquipment, getSpecialEquipment, delSpecialEquipment, addSpecialEquipment, updateSpecialEquipment } from "@/api/mes/dv/specialEquipment";
export default {
name: "SpecialEquipment",
dicts: ['special_equipment_type'],
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 特种设备(包含锅炉、压力管道、电梯等特种设备信息)表格数据
specialEquipmentList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
equipmentCode: undefined,
equipmentName: undefined,
specificationModel: undefined,
manufacturer: undefined,
productionDate: undefined,
installationDate: undefined,
useStartDate: undefined,
registrationNo: undefined,
safetyManager: undefined,
attachment: undefined,
inspectionCycle: undefined,
lastInspectionTime: undefined,
nextInspectionTime: undefined,
currentStatus: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
equipmentCode: [
{ required: true, message: "设备编码不能为空", trigger: "blur" }
],
equipmentName: [
{ required: true, message: "设备名称不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询特种设备(包含锅炉、压力管道、电梯等特种设备信息)列表 */
getList() {
this.loading = true;
listSpecialEquipment(this.queryParams).then(response => {
this.specialEquipmentList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
equipmentId: undefined,
equipmentCode: undefined,
equipmentName: undefined,
specificationModel: undefined,
manufacturer: undefined,
productionDate: undefined,
installationDate: undefined,
useStartDate: undefined,
registrationNo: undefined,
safetyManager: undefined,
attachment: undefined,
inspectionCycle: undefined,
lastInspectionTime: undefined,
nextInspectionTime: undefined,
currentStatus: undefined,
remark: undefined,
delFlag: undefined,
createBy: undefined,
createTime: undefined,
updateBy: undefined,
updateTime: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.equipmentId)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加特种设备";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const equipmentId = row.equipmentId || this.ids
getSpecialEquipment(equipmentId).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改特种设备";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.equipmentId != null) {
updateSpecialEquipment(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addSpecialEquipment(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const equipmentIds = row.equipmentId || this.ids;
this.$modal.confirm('是否确认删除特种设备编号为"' + equipmentIds + '"的数据项?').then(() => {
this.loading = true;
return delSpecialEquipment(equipmentIds);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('mes/specialEquipment/export', {
...this.queryParams
}, `specialEquipment_${new Date().getTime()}.xlsx`)
}
}
};
</script>