This commit is contained in:
‘937886381’
2025-03-17 14:18:07 +08:00
parent 97acb4faac
commit e823dee9ff
55 changed files with 4835 additions and 645 deletions

View File

@@ -331,7 +331,7 @@ export default {
queryParams: {
lineId: null,
factoryId: null,
recordTime: [],
recordTime: undefined,
},
// 表单参数
form: {},
@@ -410,15 +410,13 @@ export default {
this.queryParams.factoryId = payload.factoryId || null;
this.queryParams.lineId = payload.lineId || null;
if (0 == payload.dateFilterType) {
this.queryParams.recordTime = payload.timerange;
this.queryParams.recordTime = payload.timerange ? payload.timerange :undefined
} else if (1 == payload.dateFilterType) {
this.queryParams.recordTime = [
`${payload.timeday} 00:00:00`,
`${payload.timeday} 23:59:59`,
];
}
} else {
this.queryParams.recordTime = null;
}
this.getList();
},

View File

@@ -39,13 +39,6 @@
@close="cancel"
@cancel="cancel"
@confirm="submitForm">
<!-- <DialogForm
v-if="open"
ref="form"
v-model="form"
:disabled="mode == 'detail'"
:has-files="false"
:rows="rows" /> -->
<AddOrUpdate
v-if="open"
ref="addOrUpdate"
@@ -119,22 +112,22 @@ export default {
// : undefined,
].filter((v) => v),
tableProps: [
{ prop: 'productionLine', label: '产线', width: 120, showOverflowtooltip: true },
{ prop: 'workshopSection', label: '工段', width: 120, showOverflowtooltip: true },
{ prop: 'equipment', label: '设备名称', width: 120, showOverflowtooltip: true },
{ prop: 'productionLine', label: '产线', showOverflowtooltip: true },
{ prop: 'workshopSection', label: '工段',showOverflowtooltip: true },
{ prop: 'equipment', label: '设备名称', showOverflowtooltip: true },
{
prop: 'alarmGrade',
label: '报警级别',
filter: publicFormatter(this.DICT_TYPE.EQU_ALARM_LEVEL),
},
{ prop: 'createTime', label: '报警时间', filter: timeFilter, width: 150, showOverflowtooltip: true },
{ prop: 'alarmCode', label: '设备报警码', width: 180, showOverflowtooltip: true },
{ prop: 'alarmContent', label: '报警内容', width: 150, showOverflowtooltip: true },
{ prop: 'createTime', label: '报警时间', filter: timeFilter, showOverflowtooltip: true },
{ prop: 'alarmCode', label: '设备报警码', showOverflowtooltip: true },
{ prop: 'alarmContent', label: '报警内容', showOverflowtooltip: true },
this.$auth.hasPermiAnd([
'monitoring:equipment-alarm-log:query',
'base:equipment-alarm-hand:query'
]) ?
{ prop: 'opt1', label: '处理记录', name: '查看', subcomponent: btn } : undefined,
{ prop: 'opt1', label: '处理记录', name: '查看', subcomponent: btn } : '',
this.$auth.hasPermiAnd([
'monitoring:equipment-alarm-log:query',
'base:equipment-alarm-hand:query',
@@ -143,7 +136,7 @@ export default {
'base:equipment-alarm-hand:update',
'monitoring:equipment-alarm-log:update'
]) ?
{ prop: 'opt2', label: '处理', name: '报警处理', subcomponent: btn } : undefined,
{ prop: 'opt2', label: '处理', name: '报警处理', subcomponent: btn } : '',
// { prop: 'remark', label: '备注' },
],
searchBarFormConfig: [

View File

@@ -168,7 +168,8 @@ export default {
pageSize: 20,
maintainPlanId: null,
startTime: null,
special: false,
special: false,
name:undefined,
status: 1,
},
// 表单参数
@@ -196,7 +197,7 @@ export default {
methods: {
/** 批量确认 */
async handleSearchBarBtnClick(btn) {
console.log(11111);
console.log(btn);
switch (btn.btnName) {
case 'batchConfirm':
@@ -263,6 +264,8 @@ export default {
.catch(() => { });
break;
case 'search':
console.log(btn);
this.queryParams.name = btn.name || null;
this.getList()
break;
case 'add':

View File

@@ -101,6 +101,7 @@ export default {
addOrUpdateVisible: false,
addOrEditTitle: '',
queryParams: {
logId:null,
pageNo:1,
pageSize:10,
planId:null,
@@ -124,8 +125,10 @@ export default {
methods: {
getDataList(id) {
this.dataListLoading = true;
this.queryParams.planId = id
this.urlOptions.getDataListURL(this.listQuery).then(response => {
console.log(id);
this.queryParams.logId = id
this.urlOptions.getDataListURL(this.queryParams).then(response => {
this.tableData = response.data.list;
// this.listQuery.total = response.data.total;
this.dataListLoading = false
@@ -147,6 +150,8 @@ export default {
init(obj) {
this.drawer = true
this.dataForm = obj
console.log(obj.id);
this.getDataList(obj.id)
}
},

View File

@@ -44,8 +44,8 @@
<el-input oninput="value=value.replace(/[^\-\d.]/g, '')" v-model="dataForm.minValue" placeholder="请输入最小值" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-col :span="4" style="text-align: center;">
</el-col>
<el-col :span="9">
<el-form-item prop="maxValue" label-width="20">

View File

@@ -186,7 +186,7 @@ export default {
handleDetail(row) {
this.showDetailVisible = true
this.$nextTick(() => {
this.$refs.showDetail.init(row.id)
this.$refs.showDetail.init(row.equipmentTypeId)
})
// alert('跳转到 保养记录')
// console.log(row)

View File

@@ -103,9 +103,17 @@ export default {
this.tableData[val._pageIndex - 1][val.prop] = val[val.prop]
// console.log(this.tableData)
},
getDataList(id) {
handleCancel() {
this.$refs.addOrUpdate.formClear()
this.addOrUpdateVisible = false
this.addOrEditTitle = ''
},
successSubmit() {
this.handleCancel()
this.getDataList()
},
getDataList() {
this.dataListLoading = true;
this.queryParams.mainId = id
this.urlOptions.getDataListURL(this.queryParams).then(response => {
this.tableData = response.data.list;
this.queryParams.total = response.data.total;
@@ -121,7 +129,8 @@ export default {
},
init(id) {
this.drawer = true
this.getDataList(id)
this.queryParams.mainId = id || ''
this.getDataList()
}
},
}

View File

@@ -8,10 +8,7 @@
<template>
<!-- <el-drawer :visible.sync="visible" :show-close="false" :wrapper-closable="disabled" class="drawer"
custom-class="mes-drawer" size="50%" @closed="$emit('destroy')"> -->
<el-dialog
:visible.sync="visible"
width="50%"
:before-close="closed">
<el-dialog :visible.sync="visible" width="50%" :before-close="closed">
<small-title slot="title" :no-padding="true">
详情
<!-- {{ disabled ? '查看详情' : !dataForm.maintenanceStatus ? '修改' : '完成' }} -->
@@ -20,55 +17,73 @@
<div class="drawer-body__content">
<div>
<el-row :gutter="20">
<el-col :span="6">
<div class="blodTip">维修单号</div>
<div class="lightTip">{{ dataForm.repairOrderNumber }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">产线名</div>
<div class="lightTip">{{ dataForm.lineName }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">工段名</div>
<div class="lightTip">{{ dataForm.sectionName }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">故障发生时间</div>
<div class="lightTip">{{ parseTime(dataForm.faultTime) }}</div>
</el-col>
</el-row>
<el-row :gutter="20">
<!-- <el-col :span="6">
<div class="blodTip">故障发生时间</div>
<div class="lightTip">{{ parseTime(dataForm.faultTime) }}</div>
</el-col> -->
<el-col :span="6">
<div class="blodTip">设备名</div>
<div class="lightTip">{{ dataForm.equipmentName }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">维修时长</div>
<div class="lightTip">{{ dataForm.maintenanceDuration }}</div>
</el-col>
<!-- <el-col :span="6">
<div class="blodTip">故障级别</div>
<div class="lightTip">{{ getDictDataLabel('fault-level', dataForm.faultLevel) }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">故障类型</div>
<div class="lightTip">{{ getDictDataLabel('fault-type', dataForm.faultType) }}</div>
</el-col>
</el-col> -->
<el-col :span="6">
<div class="blodTip">维修工</div>
<div class="lightTip">{{ dataForm.repairman }}</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<div class="blodTip">联系方式</div>
<div class="lightTip">{{ dataForm.repairmanPhone }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">维修方式</div>
<div class="lightTip">{{ getDictDataLabel('repair-mode', dataForm.repairMode) }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">创建时间</div>
<div class="lightTip">{{ parseTime(dataForm.createTime) }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">创建人</div>
<div class="lightTip">{{ dataForm.creator }}</div>
</el-col>
</el-row>
<el-row>
<div class="blodTip">备注</div>
<div class="lightTip">{{ dataForm.remark }}</div>
<el-row :gutter="20">
<el-col :span="6">
<div class="blodTip">备注</div>
<div class="lightTip">{{ dataForm.remark }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">故障明细</div>
<div class="lightTip">{{ dataForm.faultDetail.replace(/<\/?p>/g, '') }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">维修明细</div>
<div class="lightTip">{{ dataForm.maintenanceDetail.replace(/<\/?p>/g, '') }}</div>
</el-col>
</el-row>
<el-row>
<div class="blodTip">维修附件</div>
<div v-if="dataForm.files && dataForm.files.length > 0">
<uploadedFile
class="file"
v-for="file in dataForm.files"
:file="file"
:key="file.fileUrl"
:disabled="disabled"
@delete="!disabled && handleDeleteFile(file, col.prop)" />
<uploadedFile class="file" v-for="file in dataForm.files" :file="file" :key="file.fileUrl"
:disabled="disabled" @delete="!disabled && handleDeleteFile(file, col.prop)" />
</div>
<p v-else>暂无附件</p>
</el-row>
@@ -170,65 +185,65 @@ import { getDictDataLabel } from '@/utils/dict';
import tupleImg from '@/assets/images/tuple.png';
const uploadedFile = {
name: 'UploadedFile',
props: ['file', 'disabled'],
data() {
return {};
},
methods: {
handleDelete() {
this.$emit('delete', this.file);
},
async handleDownload() {
const data = await this.$axios({
url: this.file.fileUrl,
method: 'get',
responseType: 'blob',
});
name: 'UploadedFile',
props: ['file', 'disabled'],
data() {
return {};
},
methods: {
handleDelete() {
this.$emit('delete', this.file);
},
async handleDownload() {
const data = await this.$axios({
url: this.file.fileUrl,
method: 'get',
responseType: 'blob',
});
await this.$message.success('开始下载');
// create download link
const url = window.URL.createObjectURL(data);
const link = document.createElement('a');
link.href = url;
link.download = this.file.fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
},
},
mounted() {
},
render: function (h) {
return (
<div
title={this.file.fileName}
onClick={this.handleDownload}
style={{
background: `url(${tupleImg}) no-repeat`,
backgroundSize: '14px',
backgroundPosition: '0 55%',
paddingLeft: '20px',
paddingRight: '24px',
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
overflow: 'hidden',
cursor: 'pointer',
display: 'inline-block',
}}>
{this.file.fileName}
{!this.disabled && (
<el-button
type="text"
icon="el-icon-close"
style="float: right; position: relative; top: 2px; left: 8px; z-index: 100"
class="dialog__upload_component__close"
onClick={this.handleDelete}
/>
)}
</div>
);
},
await this.$message.success('开始下载');
// create download link
const url = window.URL.createObjectURL(data);
const link = document.createElement('a');
link.href = url;
link.download = this.file.fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
},
},
mounted() {
},
render: function (h) {
return (
<div
title={this.file.fileName}
onClick={this.handleDownload}
style={{
background: `url(${tupleImg}) no-repeat`,
backgroundSize: '14px',
backgroundPosition: '0 55%',
paddingLeft: '20px',
paddingRight: '24px',
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
overflow: 'hidden',
cursor: 'pointer',
display: 'inline-block',
}}>
{this.file.fileName}
{!this.disabled && (
<el-button
type="text"
icon="el-icon-close"
style="float: right; position: relative; top: 2px; left: 8px; z-index: 100"
class="dialog__upload_component__close"
onClick={this.handleDelete}
/>
)}
</div>
);
},
};
export default {
@@ -392,18 +407,20 @@ export default {
justify-content: flex-end;
padding: 18px;
}
.blodTip {
height: 16px;
font-size: 14px;
font-weight: 600;
color: rgba(0,0,0,0.85);
margin-bottom: 8px;
height: 16px;
font-size: 14px;
font-weight: 600;
color: rgba(0, 0, 0, 0.85);
margin-bottom: 8px;
}
.lightTip {
/* height: 16px; */
font-size: 14px;
font-weight: 400;
color: rgba(102,102,102,0.75);
margin-bottom: 12px;
/* height: 16px; */
font-size: 14px;
font-weight: 400;
color: rgba(102, 102, 102, 0.75);
margin-bottom: 12px;
}
</style>

View File

@@ -63,106 +63,6 @@
value-format="timestamp" format="yyyy-MM-dd HH:mm:ss" clearable @change="$emit('update', form)" />
</el-form-item>
</el-col>
<!-- 故障级别 -->
<!-- <el-col :span="8">
<el-form-item
label="故障级别"
prop="faultLevel"
:rules="[
{
required: true,
message: '故障级别不能为空',
trigger: 'blur',
},
]">
<el-select
v-model="form.faultLevel"
placeholder="故障级别"
:disabled="disabled"
@change="$emit('update', form)">
<el-option
v-for="opt in getDictDatas(DICT_TYPE.FAULT_LEVEL)"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col> -->
<!-- 故障类型 - 数据字典 -->
<!-- <el-col :span="8">
<el-form-item
label="故障类型"
prop="faultType"
:rules="[
{
required: true,
message: '故障类型不能为空',
trigger: 'blur',
},
]">
<el-select
v-model="form.faultType"
placeholder="故障类型"
:disabled="disabled"
@change="$emit('update', form)">
<el-option
v-for="opt in getDictDatas(DICT_TYPE.FAULT_TYPE)"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col> -->
<!-- 维修开始时间 -->
<!-- <el-col :span="8">
<el-form-item
label="维修开始时间"
prop="maintenanceStartTime"
:rules="[
{
required: true,
message: '维修开始时间不能为空',
trigger: 'blur',
},
]">
<el-date-picker
v-model="form.maintenanceStartTime"
type="datetime"
:disabled="disabled"
:placeholder="`请选择维修开始时间`"
value-format="timestamp"
format="yyyy-MM-dd HH:mm:ss"
clearable
@change="$emit('update', form)" />
</el-form-item>
</el-col> -->
<!-- 维修结束时间 -->
<!-- <el-col :span="8">
<el-form-item
label="维修结束时间"
prop="maintenanceFinishTime"
:rules="[
{
required: true,
message: '维修结束时间不能为空',
trigger: 'blur',
},
]">
<el-date-picker
v-model="form.maintenanceFinishTime"
type="datetime"
:disabled="disabled"
:placeholder="`请选择维修结束时间`"
value-format="timestamp"
format="yyyy-MM-dd HH:mm:ss"
clearable
@change="$emit('update', form)" />
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="维修时长(h)" prop="maintenanceDuration">
<el-input-number v-model="dataForm.maintenanceDuration" :min="0" controls-position="right" style="width: 100%"
@@ -433,8 +333,8 @@ export default {
sectionOptions: [],
lineOptions: [],
uploadOpen: false,
uploadUrl: process.env.VUE_APP_BASE_API + '/admin-api/infra/file/upload', // 上传有关的headersurl都是固定的
uploadHeaders: { Authorization: 'Bearer ' + getAccessToken() },
uploadHeaders: { Authorization: 'Bearer ' + getAccessToken() },
uploadUrl: process.env.VUE_APP_BASE_API + '/admin-api/infra/file/upload', // 上传有关的headersurl都是固定的
};
},
watch: {
@@ -633,17 +533,17 @@ export default {
handleUploadSuccess(response, file, prop) {
console.log('response', response);
if (response.code != 0) {
this.$modal.msgError('上传失败: ', response.msg || '-');
return;
}
this.form.files.push({
fileName: file.name,
fileUrl: response.data,
fileType: prop == 'files' ? 2 : 1,
});
this.$modal.msgSuccess('上传成功');
this.$emit('update', this.form);
// if (response.code != 0) {
// this.$modal.msgError('上传失败: ', response.msg || '-');
// return;
// }
this.form.files.push({
fileName: file.name,
fileUrl: response.data,
fileType: prop == 'files' ? 2 : 1,
});
this.$modal.msgSuccess('上传成功');
this.$emit('update', this.form);
},
handleDeleteFile(file, prop) {

View File

@@ -0,0 +1,53 @@
<!--
* @Author: zhp
* @Date: 2023-11-08 14:00:52
* @LastEditTime: 2023-12-01 10:12:27
* @LastEditors: DY
* @Description:
-->
<template>
<div>
<el-button type="text" @click="handleDetail">查看更多</el-button>
<CustomDialogForm v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getList" />
</div>
</template>
<script>
import CustomDialogForm from './CustomDialogForm.vue';
export default {
name: 'EquipmentRepairDetail',
components: { CustomDialogForm },
props: {
injectData: {
type: Object,
default: () => ({})
}
},
data() {
return {
addOrUpdateVisible:false,
}
},
mounted() {
this.getContent()
},
methods: {
handleDetail() {
// this.reset();
// const id = row.id;
// this.info({ id }).then((response) => {
// this.form = response.data;
// // this.form.repairman = this.form.repairman.split(',')
// this.open = true;
// this.title = '修改维修记录';
// });
this.addOrUpdateVisible = true
this.$nextTick(() => {
this.$refs.addOrUpdate.init({ id: this.injectData.id });
});
},
}
}
</script>

View File

@@ -0,0 +1,421 @@
<!--
filename: dialogForm.vue
author: liubin
date: 2023-10-31 15:55:13
description:
-->
<template>
<!-- <el-drawer :visible.sync="visible" :show-close="false" :wrapper-closable="disabled" class="drawer"
custom-class="mes-drawer" size="50%" @closed="$emit('destroy')"> -->
<el-dialog :visible.sync="visible" width="50%" :before-close="closed">
<small-title slot="title" :no-padding="true">
详情
<!-- {{ disabled ? '查看详情' : !dataForm.maintenanceStatus ? '修改' : '完成' }} -->
</small-title>
<div class="drawer-body flex">
<div class="drawer-body__content">
<div>
<el-row :gutter="20">
<el-col :span="6">
<div class="blodTip">维修单号</div>
<div class="lightTip">{{ dataForm.repairOrderNumber }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">产线名</div>
<div class="lightTip">{{ dataForm.lineName }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">工段名</div>
<div class="lightTip">{{ dataForm.sectionName }}</div>
</el-col>
<!-- <el-col :span="6">
<div class="blodTip">维修工</div>
<div class="lightTip">{{ dataForm.repairman }}</div>
</el-col> -->
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<div class="blodTip">故障发生时间</div>
<div class="lightTip">{{ parseTime(dataForm.faultTime) }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">故障级别</div>
<div class="lightTip">{{ getDictDataLabel('fault-level', dataForm.faultLevel) }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">故障类型</div>
<div class="lightTip">{{ getDictDataLabel('fault-type', dataForm.faultType) }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">维修工</div>
<div class="lightTip">{{ dataForm.repairman }}</div>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<div class="blodTip">联系方式</div>
<div class="lightTip">{{ dataForm.repairmanPhone }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">维修方式</div>
<div class="lightTip">{{ getDictDataLabel('repair-mode', dataForm.repairMode) }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">创建时间</div>
<div class="lightTip">{{ parseTime(dataForm.createTime) }}</div>
</el-col>
<el-col :span="6">
<div class="blodTip">创建人</div>
<div class="lightTip">{{ dataForm.creator }}</div>
</el-col>
</el-row>
<el-row>
<div class="blodTip">备注</div>
<div class="lightTip">{{ dataForm.remark }}</div>
</el-row>
<el-row>
<div class="blodTip">维修附件</div>
<div v-if="dataForm.files && dataForm.files.length > 0">
<uploadedFile class="file" v-for="file in dataForm.files" :file="file" :key="file.fileUrl"
:disabled="disabled" @delete="!disabled && handleDeleteFile(file, col.prop)" />
</div>
<p v-else>暂无附件</p>
</el-row>
</div>
<!-- <el-divider style="margin-top: -10px" />
<small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
{{ '设备维修信息' }}
</small-title> -->
<!-- <el-form ref="form" :model="dataForm" label-width="100px" label-position="top" v-loading="formLoading">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="维修开始时间" prop="maintenanceStartTime"
:rules="[{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }]">
<el-date-picker v-model="dataForm.maintenanceStartTime" type="datetime" :disabled="disabled"
placeholder="请选择维修开始时间" value-format="timestamp" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="维修结束时间" prop="maintenanceFinishTime"
:rules="[{ required: true, message: '维修结束时间不能为空', trigger: 'blur' }]">
<el-date-picker v-model="dataForm.maintenanceFinishTime" type="datetime" :disabled="disabled"
placeholder="请选择维修开始时间" value-format="timestamp" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="维修方式" prop="repairMode"
:rules="[{ required: true, message: '维修方式不能为空', trigger: 'blur' }]">
<el-select :disabled="disabled" v-model="dataForm.repairMode" placeholder="请选择维修方式">
<el-option v-for="opt in getDictDatas('repair-mode')" :key="opt.value" :label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="故障类型" prop="faultType">
<el-select :disabled="disabled" v-model="dataForm.faultType" placeholder="请选择故障类型">
<el-option v-for="opt in getDictDatas('fault-type')" :key="opt.value" :label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col>
<el-form-item label="故障明细" prop="faultDetail"
:rules="[{ required: true, message: '故障明细不能为空', trigger: 'blur' }]">
<editor v-model="dataForm.faultDetail" :read-only="disabled" :min-height="150" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col>
<el-form-item label="维修记录" prop="maintenanceDetail">
<editor v-model="dataForm.maintenanceDetail" :read-only="disabled" :min-height="150" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col>
<el-form-item label="维修附件" prop="file">
<FileUpload v-model="file" :limit="1" :f-name="fileName" :disabled="disabled" @name="setFileName" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" :placeholder="`请输入备注`" :disabled="disabled" />
</el-form-item>
</el-col>
</el-row>
</el-form> -->
<!-- <div v-if="!disabled" class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
</div> -->
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false"> </el-button>
</span>
</el-dialog>
<!-- </el-drawer> -->
</template>
<script>
import SmallTitle from '../../base/alarm/Record/SmallTitle.vue';
import { getEqRepair, updateEqRepair } from '@/api/equipment/base/repair'
import Editor from "@/components/Editor";
// import FileUpload from "@/components/FileUpload";
import { getDictDatas } from "@/utils/dict";
import { parseTime } from '@/utils/ruoyi'
import { getDictDataLabel } from '@/utils/dict';
import tupleImg from '@/assets/images/tuple.png';
const uploadedFile = {
name: 'UploadedFile',
props: ['file', 'disabled'],
data() {
return {};
},
methods: {
handleDelete() {
this.$emit('delete', this.file);
},
async handleDownload() {
const data = await this.$axios({
url: this.file.fileUrl,
method: 'get',
responseType: 'blob',
});
await this.$message.success('开始下载');
// create download link
const url = window.URL.createObjectURL(data);
const link = document.createElement('a');
link.href = url;
link.download = this.file.fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
},
},
mounted() {
},
render: function (h) {
return (
<div
title={this.file.fileName}
onClick={this.handleDownload}
style={{
background: `url(${tupleImg}) no-repeat`,
backgroundSize: '14px',
backgroundPosition: '0 55%',
paddingLeft: '20px',
paddingRight: '24px',
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
overflow: 'hidden',
cursor: 'pointer',
display: 'inline-block',
}}>
{this.file.fileName}
{!this.disabled && (
<el-button
type="text"
icon="el-icon-close"
style="float: right; position: relative; top: 2px; left: 8px; z-index: 100"
class="dialog__upload_component__close"
onClick={this.handleDelete}
/>
)}
</div>
);
},
};
export default {
name: 'DialogForm',
model: {
prop: 'dataForm',
event: 'update',
},
emits: ['update'],
components: { SmallTitle, Editor, uploadedFile },
props: {
// dataForm: {
// type: Object,
// default: () => ({}),
// },
// disabled: {
// type: Boolean,
// default: false
// },
},
data() {
return {
formLoading: true,
visible: false,
disabled: false,
dataForm: {},
file: '',
fileName: ''
};
},
mounted() { },
methods: {
closed() {
this.$emit('destroy')
},
setFileName(val) {
this.fileName = val
},
goback() {
this.$emit('refreshDataList');
this.visible = false;
},
goEdit() {
this.disabled = false;
},
/** 模拟透传 ref */
validate(cb) {
return this.$refs.form.validate(cb);
},
resetFields(args) {
return this.$refs.form.resetFields(args);
},
initData() {
this.file = ''
this.fileName = ''
},
init(row, isdetail) {
this.initData();
this.disabled = isdetail || false;
this.dataForm.id = row.id || undefined;
this.visible = true;
this.$nextTick(() => {
// this.$refs['form'].resetFields();
if (this.dataForm.id) {
// 获取设备维修
getEqRepair(this.dataForm.id).then(response => {
this.formLoading = false
this.dataForm = response.data;
// this.dataForm.maintenanceStatus = row.maintenanceStatus || 0
// if (this.dataForm.files.length > 0) {
// this.file = this.dataForm.files[0].fileUrl
// this.fileName = this.dataForm.files[0].fileName
// }
});
} else {
// if (this.urlOptions.isGetCode) {
// this.getCode()
// }
}
});
},
// 表单提交
dataFormSubmit() {
this.$refs["form"].validate((valid) => {
if (!valid) {
return false;
}
// 修改的提交
if (this.file) {
const temp = this.file.split(',') // 获取文件个数
let arry = []
temp.forEach(item => {
arry.push({
fileName: this.fileName,
fileType: 2,
fileUrl: item
})
})
this.dataForm.files = arry
}
if (this.dataForm.id) {
updateEqRepair(this.dataForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.visible = false;
this.$emit("refreshDataList");
});
return;
}
// 添加的提交
// this.urlOptions.createURL(this.dataForm).then(response => {
// this.$modal.msgSuccess("新增成功");
// this.visible = false;
// this.$emit("refreshDataList");
// });
});
},
},
};
</script>
<style scoped>
.drawer>>>.el-drawer {
border-radius: 8px 0 0 8px;
}
.drawer>>>.el-drawer__header {
margin: 0;
padding: 32px 32px 24px;
border-bottom: 1px solid #dcdfe6;
margin-bottom: 0px;
}
.small-title::before {
content: '';
display: inline-block;
vertical-align: top;
width: 4px;
height: 22px;
border-radius: 1px;
margin-right: 8px;
background-color: #0b58ff;
}
.drawer-body {
display: flex;
flex-direction: column;
height: 100%;
}
.drawer-body__content {
flex: 1;
/* background: #eee; */
padding: 5px 10px;
overflow-y: auto;
}
.drawer-body__footer {
display: flex;
justify-content: flex-end;
padding: 18px;
}
.blodTip {
height: 16px;
font-size: 14px;
font-weight: 600;
color: rgba(0, 0, 0, 0.85);
margin-bottom: 8px;
}
.lightTip {
/* height: 16px; */
font-size: 14px;
font-weight: 400;
color: rgba(102, 102, 102, 0.75);
margin-bottom: 12px;
}
</style>

View File

@@ -1,54 +1,26 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<SearchBar
:formConfigs="searchBarFormConfig"
ref="search-bar"
@headBtnClick="handleSearchBarBtnClick" />
<div class="app-container">
<!-- 搜索工作栏 -->
<SearchBar :formConfigs="searchBarFormConfig" ref="search-bar" @headBtnClick="handleSearchBarBtnClick" />
<!-- 列表 -->
<base-table
:table-props="tableProps"
:page="queryParams.pageNo"
:limit="queryParams.pageSize"
:table-data="list"
@emitFun="handleEmitFun"
:max-height="tableH">
<method-btn
v-if="tableBtn.length"
slot="handleBtn"
label="操作"
:width="90"
:method-list="tableBtn"
@clickBtn="handleTableBtnClick" />
</base-table>
<!-- 列表 -->
<base-table :table-props="tableProps" :page="queryParams.pageNo" :limit="queryParams.pageSize" :table-data="list"
@emitFun="handleEmitFun" :max-height="tableH">
<method-btn v-if="tableBtn.length" slot="handleBtn" label="操作" :width="90" :method-list="tableBtn"
@clickBtn="handleTableBtnClick" />
</base-table>
<!-- 分页组件 -->
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- 对话框(添加 / 修改) -->
<base-dialog
:dialogTitle="title"
:dialogVisible="open"
@close="cancel"
@cancel="cancel"
@confirm="submitForm">
<DialogForm
v-if="open"
ref="form"
v-model="form"
:disabled="mode == 'detail'" />
</base-dialog>
<CustomDialogForm
v-if="addOrUpdateVisible"
ref="addOrUpdate"
@refreshDataList="getList" />
</div>
<!-- 对话框(添加 / 修改) -->
<base-dialog :dialogTitle="title" :dialogVisible="open" @close="cancel" @cancel="cancel" @confirm="submitForm">
<DialogForm v-if="open" ref="form" v-model="form" :disabled="mode === 'detail'" />
</base-dialog>
<CustomDialogForm v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getList" />
<!-- <detail v-if="detailOrUpdateVisible" ref="detailOrUpdate" @refreshDataList="getList" /> -->
</div>
</template>
<script>
@@ -57,26 +29,31 @@ import basicPageMixin from '@/mixins/lb/basicPageMixin';
import CustomDialogForm from './CustomDialogForm.vue';
import { deleteRepair, exportRepairLogExcel } from '@/api/equipment/base/repair'
import { parseTime } from '@/utils/ruoyi'
import detailBtn from './detail-btn.vue'
import htmls from './htmls.vue'
// import detail from './detail.vue'
import DialogForm from './Repair--add.vue';
import tableHeightMixin from '@/mixins/tableHeightMixin';
// const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss');
export default {
name: 'EquipmentRepair',
components: { CustomDialogForm, DialogForm },
components: { CustomDialogForm, DialogForm },
mixins: [basicPageMixin, tableHeightMixin],
data() {
return {
addOrUpdateVisible: false,
addOrUpdateVisible: false,
detailOrUpdateVisible:false,
searchBarKeys: ['maintenanceResult', 'createTime', 'equipmentId'],
tableBtn: [
this.$auth.hasPermi('equipment:repair:query')
? {
type: 'detail',
btnName: '详情',
}
: undefined,
// this.$auth.hasPermi('equipment:repair:query')
// ? {
// type: 'detail',
// btnName: '详情',
// }
// : undefined,
// this.$auth.hasPermi('equipment:repair:finish')
// ? {
// type: 'finish',
@@ -108,31 +85,33 @@ export default {
{ prop: 'lineName', label: '产线名', width: 120, showOverflowtooltip: true },
{ prop: 'sectionName', label: '工段名', width: 120, showOverflowtooltip: true },
{ prop: 'equipmentName', label: '设备名称', minWidth: 100, showOverflowtooltip: true },
{ prop: 'faultDetail', label: '故障明细', subcomponent: htmls, width: 180, showOverflowtooltip: true },
{ prop: 'faultDetail', label: '故障明细', subcomponent: htmls, width: 180, showOverflowtooltip: true },
// { prop: 'maintenanceDetail', label: '维修明细', subcomponent: htmls, minWidth: 100, showOverflowtooltip: true },
{
prop: 'maintenanceStartTime',
label: '维修开始时间',
width: 150,
filter: parseTime,
},
{
prop: 'maintenanceFinishTime',
label: '维修结束时间',
prop: 'faultTime',
label: '故障开始时间',
width: 150,
filter: parseTime,
},
// {
// prop: 'maintenanceFinishTime',
// label: '维修结束时间',
// width: 150,
// filter: parseTime,
// },
// { prop: 'maintenanceStartTime', label: '开始时间', filter: parseTime },
{
prop: 'maintenanceResult',
label: '维修结果',
filter: (v) => (v != null ? ['成功', '失败'][v] : ''),
},
// { prop: 'maintenanceDuration', label: '维修时长(h)' },
{ prop: 'maintenanceDetail', label: '维修描述', subcomponent: htmls }, // 没有参数
// {
// prop: 'maintenanceResult',
// label: '维修结果',
// filter: (v) => (v != null ? ['成功', '失败'][v] : ''),
// },
{ prop: 'maintenanceDuration', label: '维修时长()' },//
{ prop: 'maintenanceDetail', label: '维修描述', subcomponent: htmls }, // 没有参数
// { prop: 'repairman', label: '维修工', minWidth: 100, showOverflowtooltip: true },
// { prop: 'repairmanPhone', label: '联系方式', minWidth: 100, showOverflowtooltip: true },
{ prop: 'remark', label: '备注', minWidth: 90, showOverflowtooltip: true }
{ prop: 'remark', label: '备注', minWidth: 90, showOverflowtooltip: true },
{ prop: 'detail', label: '查看详情', subcomponent: detailBtn }, // 没有参数
],
searchBarFormConfig: [
{
@@ -142,16 +121,16 @@ export default {
param: 'equipmentId',
filterable: true,
},
{
type: 'select',
label: '维修结果',
placeholder: '请选择状态',
param: 'maintenanceResult',
selectOptions: [
{ name: '成功', id: '0' },
{ name: '失败', id: '1' }
],
},
// {
// type: 'select',
// label: '维修结果',
// placeholder: '请选择状态',
// param: 'maintenanceResult',
// selectOptions: [
// { name: '成功', id: '0' },
// { name: '失败', id: '1' }
// ],
// },
// 时间段
{
type: 'datePicker',
@@ -214,7 +193,7 @@ export default {
// 表单参数
form: {},
basePath: '/base/equipment-repair-log',
mode: null
mode: 'add'
};
},
created() {
@@ -249,7 +228,7 @@ export default {
/** 取消按钮 */
cancel() {
this.open = false;
this.mode = null;
// this.mode = null;
this.reset();
},
/** 表单重置 */
@@ -369,9 +348,9 @@ export default {
.catch(() => {});
},
handleDetail({ id }) {
this.addOrUpdateVisible = true
this.detailOrUpdateVisible = true
this.$nextTick(() => {
this.$refs.addOrUpdate.init({id: id}, true);
this.$refs.detailOrUpdate.init({id: id}, true);
});
},
/** 导出按钮操作 */

View File

@@ -1,8 +1,8 @@
<!--
<!--
filename: dialogForm.vue
author: liubin
date: 2023-10-31 15:55:13
description:
description:
-->
<template>
@@ -41,11 +41,11 @@
</el-col>
</el-row>
<el-form-item label="描述" prop="description">
<div v-html="dataForm.description" style="padding: 5px; margin: 0; border: 1px solid #dfdfdf" />
<div v-html="dataForm.description" style="padding: 5px; margin: 0; border: 1px solid #dfdfdf;" />
<!-- <editor v-model="dataForm.description" read-only :min-height="200"/> -->
</el-form-item>
</el-form>
<div>
<small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
{{ '备品备件' }}
@@ -78,7 +78,7 @@
:limit.sync="listQuery.pageSize"
:page-sizes="[5, 10, 15]"
@pagination="getList" />
</div>
</div>
<div v-if="!disabled" class="drawer-body__footer">
<el-button type="primary" @click="goback()">关闭</el-button>

View File

@@ -297,7 +297,7 @@ export default {
},
}).then(({ code, data }) => {
if (code == 0) {
this.searchBarFormConfig[2].defaultSelect = null
this.searchBarFormConfig[1].defaultSelect = null
this.searchBarFormConfig[1].selectOptions = data.map((item) => {
return {
name: item.name,