feat(生产模块-设备故障履历): 添加设备异常履历功能

This commit is contained in:
关博 2025-06-10 00:04:48 +08:00
parent 221649ef4c
commit e34933de4b
3 changed files with 816 additions and 0 deletions

View File

@ -0,0 +1,48 @@
import request from "@/router/axios";
import {iep} from "@/api/prefix";
// 获取设备故障代码列表
export function getAbnCodeList(obj) {
return request({
url: iep('/equipment-abn-history/getAbnCodeList'),
method: 'post',
data: obj,
})
}
// 获取设备故障代码列表
export function getEquipAbnHistoryPage(query) {
return request({
url: iep('/equipment-abn-history/page'),
method: 'get',
params: query,
})
}
// 查询班次
export function getShiftList(query) {
return request({
url: iep('/equipment-abn-history/getShiftList'),
method: 'get',
params: query,
})
}
// 查询班次
export function getResrceByCode(query) {
return request({
url: iep('/equipment-abn-history/getResrceByCode'),
method: 'get',
params: query,
})
}
// 保存
export function saveEquipAbnHistory(data) {
return request({
url: iep('/equipment-abn-history/'),
method: 'post',
data: data,
})
}

View File

@ -0,0 +1,733 @@
<template>
<div class="execution">
<!-- 设备 弹出框 -->
<input-select-dialog
:modal-obj="resrceDialogObj"
:modal-fetch-fun="resrceDialogObj.fetchFun"
:modal-show.sync="resrceDialogObj.visible"
:before-loading-fun="fetchFilterResrce"
@inputDialogSelected="(row) => {dialogSelected(row, 'resrce')}"
/>
<basic-container>
<!-- 搜索条件区域 -->
<el-form ref="formObj" :model="formObj" :rules="formRules" label-width="120px">
<!-- 第一行 -->
<el-row :gutter="24">
<!-- 设备编码 -->
<el-col :span="6">
<el-form-item label="设备编码:" required prop="resrce">
<el-input placeHolder="设备编码+" v-model="formObj.resrce" clearable>
<i slot="suffix" class="el-input__icon el-icon-copy-document" @click.stop="openDialog('resrce')"/>
</el-input>
</el-form-item>
</el-col>
<!-- 班次 -->
<el-col :span="6">
<el-form-item label="班次:" prop="shift">
<el-select v-model="formObj.shift" clearable>
<el-option v-for="item in shiftList" :key="item.userWorkShift" :label="item.userWorkShift"
:value="item.userWorkShift"/>
</el-select>
</el-form-item>
</el-col>
<!-- 异常代码 -->
<el-col :span="6">
<el-form-item label="异常代码:" prop="abnCode">
<el-select v-model="formObj.abnCode" clearable>
<el-option v-for="item in abnCodeSearchList" :key="item.reasonCode" :label="item.reasonCode"
:value="item.reasonCode"/>
</el-select>
</el-form-item>
</el-col>
<!-- 创建人 -->
<el-col :span="6">
<el-form-item label="创建人:" prop="creatorName">
<el-input placeHolder="创建人+" v-model="formObj.creatorName" clearable/>
</el-form-item>
</el-col>
</el-row>
<!-- 第二行 -->
<el-row :gutter="24">
<el-col :span="6">
<!-- 生产开始日期 -->
<el-form-item label="生产日期:" required prop="timeRange">
<el-date-picker
v-model="formObj.timeRange"
value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss"
type="datetimerange"
range-separator="至"
:default-time="['00:00:00', '23:59:59']"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 操作栏 -->
<c-top-bar :offset="50" style="margin-bottom: 10px">
<el-button type="text" icon="el-icon-search" @click="doRetrieve(true)">检索</el-button>
<el-divider direction="vertical"/>
<el-button type="text" icon="el-icon-save" @click="doSave">保存</el-button>
<el-divider direction="vertical"/>
<el-button type="text" icon="el-icon-circle-close" @click="doClear()">清除</el-button>
<el-divider direction="vertical"/>
<el-button type="text" icon="el-icon-document" @click="doExport">导出</el-button>
<el-divider style="margin-top: 0;"/>
</c-top-bar>
<!-- 按钮行 -->
<el-row>
<div class="mb8 w100">
<el-button type="primary" @click="doAdd">插入新项</el-button>
<el-button type="danger" @click="doRemoveSelected">移除选定项</el-button>
</div>
</el-row>
<!-- 表格内容 -->
<div>
<el-table
size="mini"
:data="equipmentAbnHistoryList"
@selection-change="selectionChangHandle"
border
style="width: 100%"
height="550"
highlight-current-row>
<el-table-column type="selection" width="40" align="center"/>
<!-- 序号 -->
<el-table-column align="center" type="index" fixed="left" label="序号" width="60" />
<el-table-column align="center" prop="equipmentCode" fixed="left" label="设备编码" show-overflow-tooltip/>
<el-table-column align="center" prop="equipmentCodeDesc" fixed="left" label="设备描述" show-overflow-tooltip/>
<el-table-column align="center" prop="shift" label="班次">
<template #default="scope">
<el-select v-model="scope.row.shift" clearable @change="handleShiftChange(scope.$index)">
<el-option v-for="item in shiftList" :key="item.userWorkShift" :label="item.userWorkShift"
:value="item.userWorkShift"/>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" prop="abnCodeGroup" label="异常代码组">
<template #default="scope">
<el-select v-model="scope.row.abnCodeGroup" clearable @change="handleAbnCodeGroupChange(scope.$index)">
<el-option v-for="item in abnCodeGroupList" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" prop="abnCode" label="异常代码" min-width="140">
<template #default="scope">
<el-select v-model="scope.row.abnCode" clearable @change="handleAbnCodeChange(scope.$index)">
<el-option v-for="item in scope.row.abnCodeFilterList" :key="item.reasonCode" :label="item.reasonCode"
:value="item.reasonCode"/>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" prop="abnCodeName" label="异常原因" show-overflow-tooltip/>
<el-table-column align="center" prop="countermeasure" label="处理对策" show-overflow-tooltip>
<template #default="scope">
<el-input v-model="scope.row.countermeasure"/>
</template>
</el-table-column>
<el-table-column align="center" prop="startTime" label="开始时间" min-width="140">
<template #default="scope">
<el-date-picker
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss"
:picker-options="pickerOptions"
style="width: 100%"
size="small"
@change="dateChange('START',scope.$index)"
v-model="scope.row.startTime"/>
</template>
</el-table-column>
<el-table-column align="center" prop="endTime" label="结束时间" min-width="140">
<template #default="scope">
<el-date-picker
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss"
:picker-options="pickerOptions"
style="width: 100%"
size="small"
@change="dateChange('END', scope.$index)"
v-model="scope.row.endTime"/>
</template>
</el-table-column>
<el-table-column align="center" prop="timeConsuming" label="耗时/min" show-overflow-tooltip/>
<el-table-column align="center" prop="creatorName" label="填写人" show-overflow-tooltip/>
</el-table>
<!-- 分页插件 -->
<div style="width: 100%;display: flex;flex-direction: column;align-items: center;justify-content: center;">
<el-pagination @current-change="handleCurrentChange"
@size-change="handleSizeChange"
:current-page.sync="page.current"
:page-sizes="[10, 20, 50, 100, 200]"
:page-size="page.size"
layout="total, sizes, prev, pager, next, jumper"
:total="page.total">
</el-pagination>
</div>
</div>
</basic-container>
</div>
</template>
<script>
import {hideLoading, showLoading} from '@/const/loading';
import {mapGetters} from 'vuex';
import {getStore} from "@/util/store";
import {fetchItemList as fetchDictList} from '@/api/admin/dict';
import {listByActivityId} from "@/api/admin/activity-option";
import {
initFormObj,
resrceInitDialogObj,
} from "@/views/mes/wip-nalinv/equipment-abn-history/init";
import {fetchSearchTextPage} from "@/api/wms/prd-code-status-query-report";
import {
getAbnCodeList,
getEquipAbnHistoryPage, getResrceByCode, getShiftList,
saveEquipAbnHistory
} from "@/api/mes/wip-nalinv/equipment-abn-history";
import {formatterDate} from "@/views/mes/wms/take-inventory/init";
export default {
// *****************************************************************************************************************
data() {
return {
selectObjs: [], // 多选ID集合
multiple: true, // 控制删除按钮是否禁用
formObj: {...initFormObj}, // 搜索条件对象
site: getStore({name: 'tenantId'}),
userName: getStore({name: 'userInfo'}).username,
name: getStore({name: 'userInfo'}).name,
fabNo: '', // 作业规则获取车间
resrceDialogObj: {...resrceInitDialogObj}, // 设备
shiftList: [], // 班组状态(字典)
abnCodeGroupList: [], // 异常代码组(选择)
abnCodeGroupStringList: [], // 异常代码组(字符串)
abnCodeList: [], // 异常代码
abnCodeFilterList: [], // 异常代码
abnCodeSearchList: [], // 异常代码(搜索框)
resrceStringList: [], // 设备(字符串)
equipmentAbnHistoryList: [], // 查询结果
isSecrecy: '', // 作业规则
// 分页参数
page: {
total: 0,
current: 1,
size: 20
},
formRules: {
resrce: [
{required: true, message: '请选择设备', trigger: ['change','blur']}
],
timeRange: [
{required: true, message: '请选择时间范围', trigger: 'change'}
],
},
// 时间查询参数
pickerOptions: {
disabledDate: time => {
if (!this.formObj.timeRange || this.formObj.timeRange.length !== 2) {
return false; // 没有设置时间范围则不禁用任何日期
}
const startDate = new Date(this.formObj.timeRange[0]).getTime();
const endDate = new Date(this.formObj.timeRange[1]).getTime();
const currentTime = time.getTime();
// 禁用不在范围内的日期
return currentTime < startDate || currentTime > endDate;
}
}
};
},
// *****************************************************************************************************************
created() {
let me = this
// 获取设备
if(me.$route.query.resrce){
me.formObj.resrce = me.$route.query.resrce
// 通过设备查询描述
getResrceByCode({equipmentCode:me.$route.query.resrce}).then((response) => {
if (response.data.code === 0) {
me.formObj.resrceDesc = response.data.data.description;
}
})
}
// 获取作业规则
let activityId = this.$route.query.ACTIVITY_ID
showLoading()
listByActivityId(activityId).then((response) => {
hideLoading();
if (response.data.code !== 0) {
return this.$message.error(response.data.msg)
}
let optionList = response.data.data
for (let i = 0; i < optionList.length; i++) {
// 车间
if (optionList[i].optionName === 'REASON_CODE_CATEGORY') {
let reasonCodeCategory = optionList[i].optionValue
// 通过分号截取 赋值给 abnCodeGroupList
// 先按分号分割字符串
me.abnCodeGroupStringList = reasonCodeCategory.split(';');
// 获取异常代码
getAbnCodeList(me.abnCodeGroupStringList).then((res) => {
me.abnCodeSearchList = res.data.data;
})
// 获取异常代码
const codes = reasonCodeCategory.split(';');
// 转换为包含value和label的对象数组
me.abnCodeGroupList = codes.map(code => ({
value: code.trim(),
label: code.trim()
}));
} else if (optionList[i].optionName === 'GET_RESOURCE') {
let equipmentCode = optionList[i].optionValue;
me.resrceStringList = equipmentCode.split(";")
}
}
}).catch((e) => {
hideLoading()
})
// 获取班次数据
getShiftList().then((response) => {
this.shiftList = response.data.data;
})
},
// *****************************************************************************************************************
computed: {
...mapGetters(['permissions']),
permissionList() {
return {};
}
},
// *****************************************************************************************************************
methods: {
// 过滤设备号
fetchFilterResrce(res) {
// 获取 作业规则中的 设备号 如果设备号不为空 则进行过滤
if (this.resrceStringList) {
// 对 records 进行过滤,只保留 resrce 在 resrceStringList 中的记录
res.data.data.records = res.data.data.records.filter(record => {
// 确保 record 和 record.resrce 存在
if (!record || !record.resrce) return false;
// 检查当前记录的 resrce 是否在允许的列表中
return this.resrceStringList.includes(record.resrce);
});
}
},
// 在methods中添加处理异常代码选择变化的方法
handleAbnCodeChange(rowIndex) {
// 获取选中的数据
const currentRow = this.equipmentAbnHistoryList[rowIndex];
if (!currentRow.abnCode) {
// 如果没有选择异常代码,清空相关字段
currentRow.abnCodeName = '';
return;
}
// 查找选中的异常代码对象
const selectedItem = currentRow.abnCodeFilterList.find(item =>
item.reasonCode === currentRow.abnCode
);
// 更新异常原因(假设 reasonDesc 是描述字段)
currentRow.abnCodeName = selectedItem.description;
},
// 在methods中添加处理异常代码组选择变化的方法
handleAbnCodeGroupChange(rowIndex) {
const selectedGroup = this.equipmentAbnHistoryList[rowIndex].abnCodeGroup;
if (!selectedGroup) {
// 如果没有选择组,清空异常代码
this.equipmentAbnHistoryList[rowIndex].abnCodeFilterList = [];
return;
}
// 更新 abnCodeList 集合
this.equipmentAbnHistoryList[rowIndex].abnCodeFilterList = this.abnCodeSearchList.filter(item => item.category === selectedGroup);
},
// 班次改变事件
handleShiftChange(rowIndex) {
// 获取当前行的数据
const currentRow = this.equipmentAbnHistoryList[rowIndex];
// 如果没有选择班次或者当前行不存在,直接返回
if (!currentRow || !currentRow.shift) return;
// 在 shiftList 中查找匹配的班次数据
const selectedShift = this.shiftList.find(item =>
item.userWorkShift === currentRow.shift
);
if (selectedShift) {
currentRow.shiftFrom = selectedShift.shiftFrom;
currentRow.shiftTo = selectedShift.shiftTo;
}
},
// 多选事件
selectionChangHandle(objs) {
// 使用 rowIndex 做为选中标识
this.selectObjs = objs.map(obj => obj.rowIndex);
this.multiple = !objs.length;
},
// 移除选定项
// doRemoveSelected() {
// // 检查是否有选中的行
// if (this.selectObjs.length === 0) {
// this.$message.warning('请先选择要移除的项');
// return;
// }
//
// this.$confirm('是否确认移除选中行', {
// confirmButtonText: '确认',
// cancelButtonText: '取消',
// type: 'warning'
// }).then(() => {
// // 使用 item.id 进行匹配(而不是 handle)
// this.equipmentAbnHistoryList = this.equipmentAbnHistoryList.filter(
// item => !this.selectObjs.includes(item.id)
// );
//
// // 重置多选状态
// this.selectObjs = [];
// this.multiple = true;
// }).catch(() => {
// // 用户点击取消时不做任何操作
// console.log('用户取消删除');
// });
// },
// 移除选定项
doRemoveSelected() {
if (this.selectObjs.length === 0) {
this.$message.warning('请先选择要移除的项');
return;
}
this.$confirm('是否确认移除选中行', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// 根据 rowIndex 排序后倒序删除(防止删除顺序影响索引)
const sortedIndexes = [...this.selectObjs].sort((a, b) => b - a);
sortedIndexes.forEach(rowIndex => {
this.equipmentAbnHistoryList.splice(rowIndex, 1);
});
// 更新剩余行的 rowIndex
this.equipmentAbnHistoryList = this.equipmentAbnHistoryList.map((row, index) => {
row.rowIndex = index;
return row;
});
// 清空选中状态
this.selectObjs = [];
this.multiple = true;
}).catch(() => {
// 用户取消
console.log('用户取消删除');
});
},
// 保存
doSave() {
let me = this;
let obj = {
site: me.site,
equipmentCode: me.formObj.resrce,
shift: me.formObj.shift,
creatorName: me.formObj.creatorName,
abnCode: me.formObj.abnCode,
startTimeStr: formatterDate(me.formObj.timeRange[0], 'yyyy-MM-dd hh:mm:ss'),
endTimeStr: formatterDate(me.formObj.timeRange[1], 'yyyy-MM-dd hh:mm:ss'),
equipmentAbnHistoryList: this.equipmentAbnHistoryList,
}
// 保存接口
saveEquipAbnHistory(obj).then((res) => {
if (res.data.code === 0) {
return this.$message.success('保存成功!')
}
this.doRetrieve(true);
})
},
// 添加
doAdd() {
if (!this.formObj.resrce) {
return this.$message.warning("请选择设备编码");
}
if (!this.formObj.timeRange) {
return this.$message.error("请选择生产日期");
}
this.equipmentAbnHistoryList.push({
handle: "",
site: this.site,
equipmentCode: this.formObj.resrce,
equipmentCodeDesc: this.formObj.resrceDesc,
shift: '',
abnCodeGroup: '',
abnCode: '',
abnCodeName: '',
countermeasure: '',
startTime: '',
endTime: '',
timeConsuming: '',
creator: this.userName,
creatorName: this.name,
shiftFrom: '',
shiftTo: '',
dateCreate: formatterDate(new Date(), 'yyyy-MM-dd hh:mm:ss'),
abnCodeFilterList: []
})
},
// 检查时间改变
dateChange(t, rowIndex) {
let me = this;
// 获取当前行的数据
const row = me.equipmentAbnHistoryList[rowIndex];
// 确保行存在
if (!row) return;
if (!row.shift) {
row.startTime = '';
row.endTime = '';
return me.$message.error('请先选择班次!');
}
let date1 = row.startTime ? new Date(row.startTime) : null;
let date2 = row.endTime ? new Date(row.endTime) : null;
// 获取班次时间段(时分格式)
const shiftFrom = row.shiftFrom; // 格式:"HH:mm"
const shiftTo = row.shiftTo; // 格式:"HH:mm"
// 将时间转换为分钟数进行比较
const [fromHour, fromMinute] = shiftFrom.split(':').map(Number);
const [toHour, toMinute] = shiftTo.split(':').map(Number);
const shiftFromMinutes = fromHour * 60 + fromMinute;
const shiftToMinutes = toHour * 60 + toMinute;
// 计算班次时间段总分钟数(可能跨天)
let shiftDurationMinutes;
if (shiftFromMinutes <= shiftToMinutes) {
shiftDurationMinutes = shiftToMinutes - shiftFromMinutes;
} else {
// 跨天情况,假设第二天
shiftDurationMinutes = (24 * 60 - shiftFromMinutes) + shiftToMinutes;
}
// 校验开始时间
if (t === 'START' && date1) {
const date1Minutes = date1.getHours() * 60 + date1.getMinutes();
if ((shiftFromMinutes <= shiftToMinutes &&
(date1Minutes < shiftFromMinutes || date1Minutes > shiftToMinutes)) ||
(shiftFromMinutes > shiftToMinutes &&
(date1Minutes < shiftFromMinutes && date1Minutes > shiftToMinutes))) {
row.startTime = '';
row.timeConsuming = '';
return me.$message.warning('请选择班次时间段内的开始时间');
}
// 新增:校验同一设备、同班次下后续记录的开始时间不能大于前一条记录的开始时间
// 查找同一设备、同班次的所有之前记录
const sameRecords = me.equipmentAbnHistoryList
.filter((item, index) =>
item.equipmentCode === row.equipmentCode &&
item.shift === row.shift &&
index < rowIndex // 只检查之前的记录
);
// 如果有之前的记录
if (sameRecords.length > 0) {
// 获取最后一条记录
const lastRecord = sameRecords[sameRecords.length - 1];
// 比较开始时间
if (lastRecord.endTime) {
const lastDate = new Date(lastRecord.endTime);
// 如果当前开始时间大于最后一条记录的开始时间
if (date1 < lastDate) {
row.startTime = '';
row.timeConsuming = '';
return me.$message.warning(`同一个设备【${me.equipmentAbnHistoryList[rowIndex].equipmentCode}】相同班次【${me.equipmentAbnHistoryList[rowIndex].shift}】相同时间段内不能维护多笔数据!`);
}
}
}
}
// 校验结束时间
if (t === 'END' && date2) {
const date2Minutes = date2.getHours() * 60 + date2.getMinutes();
if ((shiftFromMinutes <= shiftToMinutes
&& (date2Minutes < shiftFromMinutes || date2Minutes > shiftToMinutes)) ||
(shiftFromMinutes > shiftToMinutes &&
(date2Minutes < shiftFromMinutes && date2Minutes > shiftToMinutes))) {
row.endTime = '';
row.timeConsuming = '';
return me.$message.warning('请选择班次时间段内的结束时间');
}
}
// 如果是开始时间修改且两个时间都存在
if (t === 'START' && date1 && date2 && date1 > date2) {
row.startTime = '';
row.timeConsuming = '';
return me.$message.warning('开始时间不能大于结束时间');
}
// 如果是结束时间修改且两个时间都存在
if (t === 'END' && date1 && date2 && date1 > date2) {
row.endTime = '';
row.timeConsuming = '';
return me.$message.warning('结束时间不能小于开始时间');
}
// 新增:校验时间范围是否超过班次时间段限制
if (date1 && date2) {
const diffMs = Math.abs(date2 - date1);
const diffMinutes = Math.floor(diffMs / (1000 * 60));
if (diffMinutes > shiftDurationMinutes) {
row.startTime = '';
row.endTime = '';
row.timeConsuming = '';
return me.$message.warning(`开始时间和结束时间不能超过班次时间段限制`);
}
}
// 计算时间差(分钟)
if (date1 && date2) {
const diffMs = Math.abs(date2 - date1);
const diffMinutes = Math.floor(diffMs / (1000 * 60));
row.timeConsuming = diffMinutes.toString(); // 更新耗时字段
}
},
// 弹出框通用选择
dialogSelected(row, type) {
switch (type) {
case 'resrce':
this.formObj.resrce = row.resrce;
this.formObj.resrceDesc = row.resrceDesc;
break;
}
},
// 弹出框通用打开
openDialog(type) {
switch (type) {
case 'resrce':
this.resrceDialogObj.visible = true;
this.resrceDialogObj.fetchFun = fetchSearchTextPage;
break;
}
},
// 获取数据字典
getDataDictionary(dictType, list) {
fetchDictList({
current: "1",
size: "1000",
dictType: dictType,
}).then((response) => {
this[list] = response.data.data.records
});
},
// 页面大小改变
handleSizeChange(val) {
this.page.size = val;
this.page.current = 1;
this.doRetrieve();
},
//页面切换
handleCurrentChange(val) {
this.page.current = val;
this.doRetrieve();
},
// 【检索按钮】方法
doRetrieve(flag) {
let me = this;
if (flag) {
me.page.current = 1;
}
if (!me.formObj.resrce) {
return me.$message.error("请选择设备");
}
if (!me.formObj.timeRange) {
return me.$message.error("请选择生产日期");
}
let obj = {
site: me.site,
equipmentCode: me.formObj.resrce,
shift: me.formObj.shift,
creatorName: me.formObj.creatorName,
abnCode: me.formObj.abnCode,
startTimeStr: formatterDate(me.formObj.timeRange[0], 'yyyy-MM-dd hh:mm:ss'),
endTimeStr: formatterDate(me.formObj.timeRange[1], 'yyyy-MM-dd hh:mm:ss'),
};
showLoading();
getEquipAbnHistoryPage(Object.assign({
current: me.page.current,
size: me.page.size,
site: this.site
}, obj)).then(response => {
hideLoading();
if (!response.data.data || response.data.data.length === 0) {
this.$message.error('检索无数据');
this.doClear();
return false;
}
me.equipmentAbnHistoryList = response.data.data.records;
me.page.total = response.data.data.total;
me.page.current = response.data.data.current;
}).catch(() => {
hideLoading();
});
},
// 【清空按钮】方法
doClear() {
let me = this;
me.formObj = {};
me.equipmentAbnHistoryList = []
me.page = {
total: 0,
current: 1,
size: 20
}
},
// 【导出按钮】方法
doExport() {
let me = this;
let search = {
site: me.site,
equipmentCode: me.formObj.resrce,
shift: me.formObj.shift,
creatorName: me.formObj.creatorName,
abnCode: me.formObj.abnCode,
startTimeStr: formatterDate(me.formObj.timeRange[0], 'yyyy-MM-dd hh:mm:ss'),
endTimeStr: formatterDate(me.formObj.timeRange[1], 'yyyy-MM-dd hh:mm:ss'),
};
this.downBlobFile("/iep-app/equipment-abn-history/tablePageExport", search, "设备异常履历.xlsx");
},
}
};
</script>

View File

@ -0,0 +1,35 @@
import {getStore} from "@/util/store";
export const resrceInitDialogObj= {
callBackKey: "resrce",
regex: ";",
condition: "resrce",
tableColumn: [
{prop: "resrce", label: "设备编码"},
{prop: "resrceDesc", label: "设备描述"}
],
queryParam: {
site: getStore({name: 'tenantId'}),
searchTextByGroup: "resrce",
},
visible: false,
fetchFun: null,
}
export const initFormObj = {
resrce: "",
resrceDesc: "",
shift: "",
creator: "",
abnCode: "",
startTime: "",
endTime: "",
timeRange: "",
}