|
@@ -8,8 +8,8 @@
|
|
|
<el-form-item label="报修名称" prop="name">
|
|
|
<el-input v-model="queryParams.name" placeholder="请输入报修名称" clearable @keyup.enter="handleQuery" />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="报修单号" prop="name">
|
|
|
- <el-input v-model="queryParams.id" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
|
|
|
+ <el-form-item label="报修单号" prop="sn">
|
|
|
+ <el-input v-model="queryParams.sn" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
|
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
|
<el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button>
|
|
@@ -23,24 +23,13 @@
|
|
|
<el-card shadow="never">
|
|
|
<template #header>
|
|
|
<el-row :gutter="10" class="mb8">
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button type="primary" plain icon="Plus" @click="handleAdd"> 新增 </el-button>
|
|
|
- </el-col>
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"> 修改
|
|
|
- </el-button>
|
|
|
- </el-col>
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"> 删除
|
|
|
- </el-button>
|
|
|
- </el-col>
|
|
|
<right-toolbar v-model:showSearch="showSearch" @query-table="getList" />
|
|
|
</el-row>
|
|
|
</template>
|
|
|
|
|
|
<el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange">
|
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
|
- <el-table-column label="报修单号" align="center" show-overflow-tooltip prop="id" width="150" />
|
|
|
+ <el-table-column label="报修单号" align="center" show-overflow-tooltip prop="sn" width="150" />
|
|
|
<el-table-column label="报修名称" align="center" show-overflow-tooltip prop="name" width="150" />
|
|
|
<el-table-column label="报修人" align="center" show-overflow-tooltip prop="creator" width="150" />
|
|
|
<el-table-column label="报修部门" align="center" show-overflow-tooltip prop="creatorDept" width="150" />
|
|
@@ -56,99 +45,77 @@
|
|
|
<el-table-column label="工单完工时间" align="center" show-overflow-tooltip prop="completeDate" width="150" />
|
|
|
<el-table-column label="操作" align="center" width="100" fixed="right" class-name="small-padding fixed-width">
|
|
|
<template #default="scope">
|
|
|
- <el-button size="small" link type="primary" @click="handleDelete(scope.row)">详情</el-button>
|
|
|
+ <el-button size="small" link type="primary" @click="handleDetail(scope.row)">详情</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
<pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
|
|
|
:total="total" @pagination="getList" />
|
|
|
</el-card>
|
|
|
- <!-- 添加或修改对话框 -->
|
|
|
- <el-dialog v-model="dialog.visible" :title="dialog.title" width="950px" append-to-body>
|
|
|
- <el-form ref="addFormRef" :model="form" label-width="110px">
|
|
|
- <el-row :gutter="20">
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="计划名称" prop="name" :rules="[{ required: true, message: '计划名称不能为空', trigger: 'blur' }]">
|
|
|
- <el-input v-model="form.name" placeholder="请输入计划名称" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="计划开始时间" prop="startTime"
|
|
|
- :rules="[{ required: true, message: '计划开始时间不能为空', trigger: 'change' }]">
|
|
|
- <el-date-picker v-model="form.startTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
|
|
|
- type="datetime" placeholder="请选择开始时间" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="计划结束时间" prop="endTime"
|
|
|
- :rules="[{ required: true, message: '计划结束时间不能为空', trigger: 'change' }]">
|
|
|
- <el-date-picker v-model="form.endTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
|
|
|
- type="datetime" placeholder="请选择结束时间" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="巡检类型" prop="inspectionType"
|
|
|
- :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
|
|
|
- <el-select v-model="form.inspectionType" clearable placeholder="请选择巡检类型" @change="inspectionTypeChange">
|
|
|
- <el-option v-for="dict in inspection_type" :key="dict.value" :label="dict.label"
|
|
|
- :value="dict.value"></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="巡检周期(天)" prop="inspectionCycle"
|
|
|
- :rules="[{ required: true, message: '巡检周期不能为空', trigger: 'blur' }]">
|
|
|
- <el-input-number v-model="form.inspectionCycle" :disabled="cycleDisabled" style="width:100%" :min="1" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="巡检范围" prop="inspectionRange"
|
|
|
- :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
|
|
|
- <el-select v-model="form.inspectionRange" clearable placeholder="请选择巡检范围">
|
|
|
- <el-option label="按设备" :value="1"></el-option>
|
|
|
- <el-option label="按道路点位" :value="2"></el-option>
|
|
|
- <el-option label="按项目" :value="3"></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="巡检员" prop="inspectionPersonId"
|
|
|
- :rules="[{ required: true, message: '巡检员不能为空', trigger: 'change' }]">
|
|
|
- <el-cascader v-model="form.inspectionPersonId" :props="{ emitPath: false }" :options="userOptions"
|
|
|
- placeholder="请选择巡检员" clearable :show-all-levels="false" @change="setUserInfo" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="联系电话" prop="ext1.phone">
|
|
|
- <el-input v-model="form.ext1.phone" disabled placeholder="选巡检员带出" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="8">
|
|
|
- <el-form-item label="备注" prop="remark">
|
|
|
- <el-input v-model="form.remark" placeholder="请输入备注" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </el-form>
|
|
|
- <template #footer>
|
|
|
- <div class="dialog-footer">
|
|
|
- <el-button :loading="buttonLoading" type="primary" @click="submitForm"> 确 定 </el-button>
|
|
|
- <el-button @click="cancel"> 取 消 </el-button>
|
|
|
+ <el-drawer v-model="detailDrawer" class="customDrawer" size="60%">
|
|
|
+ <template #header>
|
|
|
+ <div class="drawer-title">
|
|
|
+ <div class="title-name">维修工单详情</div>
|
|
|
+ <el-descriptions title="" direction="vertical" :column="6">
|
|
|
+ <el-descriptions-item align="center" label="报修单号">{{ curRow.sn }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item align="center" label="报修名称">{{ curRow.name }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item align="center" label="报修部门">{{ curRow.creatorDept }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item align="center" label="报修人">{{ curRow.creator }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item align="center" label="设备名称">{{ curRow.deviceName }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item align="center" label="设备编号">{{ curRow.deviceNo }}</el-descriptions-item>
|
|
|
+ </el-descriptions>
|
|
|
</div>
|
|
|
</template>
|
|
|
- </el-dialog>
|
|
|
+ <div>
|
|
|
+ <el-tabs v-model="detailTab">
|
|
|
+ <el-tab-pane label="故障信息" name="1">
|
|
|
+ <el-descriptions class="detail-descriptions" :column="2" border>
|
|
|
+ <el-descriptions-item label-align="center" label="故障发生时间">{{ curRow.faultCreateTime
|
|
|
+ }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="center" label="故障等级">{{ curRow.faultLevel }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="center" label="故障类型">故障类型一</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="center" label="是否停机">{{ curRow.isStop }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="center" label="故障描述">发生故障</el-descriptions-item>
|
|
|
+ </el-descriptions>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="维修信息" name="2">
|
|
|
+ <SubTitle title="维修工单" style="margin-bottom: 10px; " />
|
|
|
+ <el-descriptions class="detail-descriptions" :column="2" border>
|
|
|
+ <el-descriptions-item label-align="center" label="工单名称">{{ curRow.name }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="center" label="工单编号">{{ curRow.sn }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="center" label="分派人员">故障类型一</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="center" label="维修班组">维修班组一</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="center" label="维修负责人">李斯</el-descriptions-item>
|
|
|
+ </el-descriptions>
|
|
|
+ <SubTitle title="处理情况" style="margin: 10px 0; " />
|
|
|
+ <el-descriptions class="detail-descriptions" :column="2" border>
|
|
|
+ <el-descriptions-item label-align="center" label="故障原因">电力故障</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="center" label="处理方式">现场维修</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="center" label="维修人员">刘晨</el-descriptions-item>
|
|
|
+ <el-descriptions-item label-align="center" label="维修时间">2024-12-21</el-descriptions-item>
|
|
|
+ </el-descriptions>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane label="处理进度" name="3">
|
|
|
+ <el-table :data="curRow.dealProgress" max-height="300">
|
|
|
+ <el-table-column label="节点名称" align="center" prop="name">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="耗时(分钟)" align="center" prop="time">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作人" align="center" prop="person">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作时间" align="center" show-overflow-tooltip prop="date">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="状态" align="center" show-overflow-tooltip prop="status">
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
+ </div>
|
|
|
+ </el-drawer>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
-<script setup name="PatrolPlan" lang="ts">
|
|
|
-import { listInspectionTeam, listInspectionItem, listInspectionTask, getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask } from '@/api/deviceCheck/index';
|
|
|
-import {
|
|
|
- listDeviceType,
|
|
|
- getDeviceTypeDetailList
|
|
|
-} from '@/api/deviceManage/deviceType';
|
|
|
-import {
|
|
|
- listDevice,
|
|
|
-} from '@/api/deviceManage/device';
|
|
|
+<script setup name="Record" lang="ts">
|
|
|
import { deepClone } from '@/utils';
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
const tableList = ref([]);
|
|
@@ -165,6 +132,9 @@ const dialog = reactive<DialogOption>({
|
|
|
visible: false,
|
|
|
title: ''
|
|
|
});
|
|
|
+const detailDrawer = ref(false);
|
|
|
+const detailTab = ref('1');
|
|
|
+const curRow = ref({} as any);
|
|
|
const initFormData = {
|
|
|
id: undefined,
|
|
|
name: undefined,
|
|
@@ -194,19 +164,11 @@ const formData = reactive({
|
|
|
pageNum: 1,
|
|
|
pageSize: 10,
|
|
|
name: undefined,
|
|
|
- status: undefined,
|
|
|
+ sn: undefined,
|
|
|
params: {}
|
|
|
}
|
|
|
});
|
|
|
-const cycleDisabled = ref(false)
|
|
|
const { queryParams, form } = toRefs(formData);
|
|
|
-const { inspection_type } = toRefs<any>(proxy?.useDict('inspection_type'));
|
|
|
-const { inspection_status } = toRefs<any>(proxy?.useDict('inspection_status'));
|
|
|
-const dictGroup = reactive({
|
|
|
- deviceTypeOptions: [],
|
|
|
- inspectionItemOptions: []
|
|
|
-})
|
|
|
-const userOptions = ref([])
|
|
|
/** 查询列表 */
|
|
|
const getList = async () => {
|
|
|
loading.value = true;
|
|
@@ -219,7 +181,7 @@ const getList = async () => {
|
|
|
tableList.value = [
|
|
|
{
|
|
|
name: '设备一报修',
|
|
|
- id: 1002301,
|
|
|
+ sn: 1002301,
|
|
|
creator: '王乐',
|
|
|
creatorDept: '生产一部',
|
|
|
faultCreateTime: '2024-12-19 12:05:00',
|
|
@@ -236,7 +198,7 @@ const getList = async () => {
|
|
|
},
|
|
|
{
|
|
|
name: '设备二报修',
|
|
|
- id: 1002302,
|
|
|
+ sn: 1002302,
|
|
|
creator: '王乐',
|
|
|
creatorDept: '生产一部',
|
|
|
faultCreateTime: '2024-12-19 12:05:00',
|
|
@@ -253,7 +215,7 @@ const getList = async () => {
|
|
|
},
|
|
|
{
|
|
|
name: '设备三报修',
|
|
|
- id: 1002303,
|
|
|
+ sn: 1002303,
|
|
|
creator: '王乐',
|
|
|
creatorDept: '生产一部',
|
|
|
faultCreateTime: '2024-12-19 12:05:00',
|
|
@@ -266,7 +228,58 @@ const getList = async () => {
|
|
|
repairDate: '2024-12-21',
|
|
|
assignPerson: '王武',
|
|
|
assignDate: '2024-12-19',
|
|
|
- completeDate: '2024-12-22'
|
|
|
+ completeDate: '2024-12-22'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '设备四报修',
|
|
|
+ sn: 1002304,
|
|
|
+ creator: '王成',
|
|
|
+ creatorDept: '生产一部',
|
|
|
+ faultCreateTime: '2024-12-19 12:05:00',
|
|
|
+ createTime: '2024-12-19 12:13:02',
|
|
|
+ faultLevel: '紧急',
|
|
|
+ isStop: '是',
|
|
|
+ deviceName: '设备四',
|
|
|
+ deviceNo: '21244',
|
|
|
+ repairPerson: '刘晨',
|
|
|
+ repairDate: '2024-12-21',
|
|
|
+ assignPerson: '王武',
|
|
|
+ assignDate: '2024-12-19',
|
|
|
+ status: '正常'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '设备五报修',
|
|
|
+ sn: 1002305,
|
|
|
+ creator: '王成',
|
|
|
+ creatorDept: '生产一部',
|
|
|
+ faultCreateTime: '2024-12-19 12:05:00',
|
|
|
+ createTime: '2024-12-19 12:13:02',
|
|
|
+ faultLevel: '紧急',
|
|
|
+ isStop: '是',
|
|
|
+ deviceName: '设备五',
|
|
|
+ deviceNo: '21242',
|
|
|
+ repairPerson: '刘晨',
|
|
|
+ repairDate: '2024-12-21',
|
|
|
+ assignPerson: '王武',
|
|
|
+ assignDate: '2024-12-19',
|
|
|
+ status: '过期未执行'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '设备六报修',
|
|
|
+ sn: 1002306,
|
|
|
+ creator: '王成',
|
|
|
+ creatorDept: '生产一部',
|
|
|
+ faultCreateTime: '2024-12-19 12:05:00',
|
|
|
+ createTime: '2024-12-19 12:13:02',
|
|
|
+ faultLevel: '紧急',
|
|
|
+ isStop: '是',
|
|
|
+ deviceName: '设备六',
|
|
|
+ deviceNo: '21243',
|
|
|
+ repairPerson: '刘晨',
|
|
|
+ repairDate: '2024-12-21',
|
|
|
+ assignPerson: '王武',
|
|
|
+ assignDate: '2024-12-19',
|
|
|
+ status: '正常'
|
|
|
},
|
|
|
|
|
|
]
|
|
@@ -303,39 +316,41 @@ const handleSelectionChange = (selection) => {
|
|
|
single.value = selection.length != 1;
|
|
|
multiple.value = !selection.length;
|
|
|
};
|
|
|
-/** 新增按钮操作 */
|
|
|
-const handleAdd = () => {
|
|
|
- reset();
|
|
|
- // dialog.visible = true;
|
|
|
- dialog.title = '新增故障类型';
|
|
|
-};
|
|
|
-/** 修改按钮操作 */
|
|
|
-const handleUpdate = (row) => {
|
|
|
- reset();
|
|
|
- const _id = row?.id || ids.value[0];
|
|
|
- getInspectionTask(_id).then(({ data }) => {
|
|
|
- data.ext1 = data.ext1 && JSON.parse(data.ext1);
|
|
|
- data.inspectionItem = data.inspectionItem && JSON.parse(data.inspectionItem);
|
|
|
- Object.assign(form.value, data);
|
|
|
- });
|
|
|
- // dialog.visible = true;
|
|
|
- dialog.title = '修改故障类型';
|
|
|
-};
|
|
|
|
|
|
-/** 提交按钮 */
|
|
|
-const submitForm = () => {
|
|
|
- addFormRef.value?.validate(async (valid: boolean) => {
|
|
|
- if (valid) {
|
|
|
- }
|
|
|
- });
|
|
|
-};
|
|
|
-/** 删除按钮操作 */
|
|
|
-const handleDelete = async (row) => {
|
|
|
- // const _ids = row?.id || ids.value;
|
|
|
- // await proxy?.$modal.confirm('是否确认删除?').finally(() => (loading.value = false));
|
|
|
- // await delInspectionTask(_ids);
|
|
|
- // proxy?.$modal.msgSuccess('删除成功');
|
|
|
- // await getList();
|
|
|
+const handleDetail = async (row) => {
|
|
|
+ detailDrawer.value = true;
|
|
|
+ detailTab.value = '1';
|
|
|
+ Object.assign(curRow.value, row)
|
|
|
+ curRow.value.dealProgress = [
|
|
|
+ {
|
|
|
+ name:'故障提报',
|
|
|
+ time:'20',
|
|
|
+ person:'王成',
|
|
|
+ date:'2024-12-19 13:30',
|
|
|
+ status:'已完成',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name:'维修派工',
|
|
|
+ time:'5',
|
|
|
+ person:'李斯',
|
|
|
+ date:'2024-12-19 13:40',
|
|
|
+ status:'已完成',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name:'维修接单',
|
|
|
+ time:'--',
|
|
|
+ person:'--',
|
|
|
+ date:'--',
|
|
|
+ status:'未完成',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name:'维修完成',
|
|
|
+ time:'--',
|
|
|
+ person:'--',
|
|
|
+ date:'--',
|
|
|
+ status:'未完成',
|
|
|
+ },
|
|
|
+ ]
|
|
|
};
|
|
|
onMounted(() => {
|
|
|
getList();
|
|
@@ -352,4 +367,54 @@ onMounted(() => {
|
|
|
cursor: pointer;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+.drawer-title {
|
|
|
+ :deep(.el-descriptions__body) {
|
|
|
+ margin-top: 10px;
|
|
|
+ background-color: #F4F5F7;
|
|
|
+ border-radius: 2px;
|
|
|
+ padding: 10px 10px 0 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(.el-descriptions__label) {
|
|
|
+ padding-bottom: 5px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .title-name {
|
|
|
+ color: #000;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|
|
|
+<style lang="scss">
|
|
|
+.customDrawer {
|
|
|
+ .el-drawer__header {
|
|
|
+ align-items: flex-start !important;
|
|
|
+ margin-bottom: 10px;
|
|
|
+
|
|
|
+ .drawer-title {
|
|
|
+ .el-descriptions__body {
|
|
|
+ margin-top: 10px;
|
|
|
+ background-color: #F4F5F7;
|
|
|
+ border-radius: 2px;
|
|
|
+ padding: 10px 10px 0 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-descriptions__label {
|
|
|
+ padding-bottom: 5px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .title-name {
|
|
|
+ color: #000;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-drawer__body {
|
|
|
+ padding-top: 0;
|
|
|
+
|
|
|
+ .el-collapse-item__content {
|
|
|
+ padding-bottom: 8px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|