projects/mes-lb #108

Merged
g7hoo merged 2 commits from projects/mes-lb into projects/mes-test 2023-11-24 08:56:13 +08:00
18 changed files with 575 additions and 380 deletions
Showing only changes of commit 0225be1c94 - Show all commits

View File

@ -33,6 +33,7 @@ export default {
addUrl: '',
pageUrl: '',
infoUrl: '',
deleteUrl: '',
basePath: '',
form: {}
};
@ -60,7 +61,7 @@ export default {
return this.$axios({
url,
method,
params: method === 'get' ? payload : null,
params: (method === 'get' || method === 'delete') ? payload : null,
data: method !== 'get' ? payload : null,
})
},
@ -77,6 +78,7 @@ export default {
return this.http(this.infoUrl == '' ? this.infoPath : this.infoUrl, 'get', payload);
},
del(payload) {
debugger;
return this.http(this.deleteUrl == '' ? this.deletePath : this.deleteUrl, 'delete', payload);
},

View File

@ -6,131 +6,150 @@
* @Description:
-->
<template>
<div>
<div style="margin: 20px">
<el-button v-for="(item, index) in buttonList" :key="index" :class="[item.actived ? 'activeButton': 'normalButton']" @click="changeChart(index)">{{ item.name }}</el-button>
</div>
<div id="chart" ref="chartDiv" :class="className" :style="{height:height,width:width}" />
</div>
<div class="balace-chart">
<div style="margin: 20px">
<el-button
v-for="(item, index) in buttonList"
:key="index"
:class="[item.actived ? 'activeButton' : '']"
@click="changeChart(index)">
{{ item.name }}
</el-button>
</div>
<div
id="chart"
ref="chartDiv"
:class="className"
:style="{ height: height, width: width }" />
</div>
</template>
<script>
import * as echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme
import * as echarts from 'echarts';
require('echarts/theme/macarons'); // echarts theme
// import resize from './mixins/resize'
export default {
// mixins: [resize],
props: {
className: {
type: String,
default: 'chart'
},
width: {
type: String,
default: '100%'
},
height: {
type: String,
default: '350px'
},
// autoResize: {
// type: Boolean,
// default: true
// }
},
data() {
return {
chart: null,
dataArray: [],
xDatas: [],
buttonList: []
}
},
mounted() {
// this.initChart()
},
methods: {
changeChart(index) {
this.setOptions(this.xDatas, this.dataArray[index])
this.buttonList.forEach((item, s) => {
if (index === s) {
// item.actived = true
this.$nextTick(() =>{
// item.actived = true
this.$set(item, 'actived', true)
})
} else {
// item.actived = false
this.$nextTick(() =>{
// item.actived = false
this.$set(item, 'actived', false)
})
// this.$set(item, 'actived', false)
}
})
console.log('看一下数22222据', this.dataArray)
},
initChart(xData, yData, lineName) {
this.dataArray = yData
this.buttonList = this.dataArray.map((item, index) => {
return {
'name': item.name,
'actived': index === 0 ? true : false
}
})
console.log('看一下数据', this.dataArray)
this.xDatas = xData
this.chart = echarts.init(this.$refs.chartDiv, 'macarons')
// this.chart = echarts.init(document.getElementById('chart'), 'macarons')
// this.setOptions(xData, yData[0], lineName)
},
setOptions(xData, dataList, lineName) {
// let seriesData = []
// lineName.forEach((item,index) => {
// seriesData.push({
// name: item,
// data: yData[index],
// type: 'line',
// })
// })
this.chart.setOption({
xAxis: {
type: 'category',
data: xData
},
tooltip: {
trigger: 'axis'
},
legend: {
data:lineName
},
yAxis: {
type: 'value'
},
series: [
{
name: '设备CT',
data: dataList.eqData,
type: 'line',
},
{
name: '产线CT',
data: dataList.plData,
type: 'line',
}
]
})
}
}
}
// mixins: [resize],
props: {
className: {
type: String,
default: 'chart',
},
width: {
type: String,
default: '100%',
},
height: {
type: String,
default: '350px',
},
// autoResize: {
// type: Boolean,
// default: true
// }
},
data() {
return {
chart: null,
dataArray: [],
xDatas: [],
buttonList: [],
};
},
mounted() {
// this.initChart()
this.$nextTick(() => {
this.changeChart(0);
});
},
methods: {
changeChart(index) {
this.setOptions(this.xDatas, this.dataArray[index]);
this.buttonList.forEach((item, s) => {
if (index === s) {
// item.actived = true
this.$nextTick(() => {
// item.actived = true
this.$set(item, 'actived', true);
});
} else {
// item.actived = false
this.$nextTick(() => {
// item.actived = false
this.$set(item, 'actived', false);
});
// this.$set(item, 'actived', false)
}
});
console.log('看一下数22222据', this.dataArray);
},
initChart(xData, yData, lineName) {
this.dataArray = yData;
this.buttonList = this.dataArray.map((item, index) => {
return {
name: item.name,
actived: index === 0 ? true : false,
};
});
console.log('看一下数据', this.dataArray);
this.xDatas = xData;
this.chart = echarts.init(this.$refs.chartDiv, 'macarons');
// this.chart = echarts.init(document.getElementById('chart'), 'macarons')
// this.setOptions(xData, yData[0], lineName)
},
setOptions(xData, dataList, lineName) {
// let seriesData = []
// lineName.forEach((item,index) => {
// seriesData.push({
// name: item,
// data: yData[index],
// type: 'line',
// })
// })
this.chart.setOption({
xAxis: {
type: 'category',
data: xData,
},
tooltip: {
trigger: 'axis',
},
legend: {
data: lineName,
},
yAxis: {
type: 'value',
},
series: [
{
name: '设备CT',
data: dataList.eqData,
type: 'line',
},
{
name: '产线CT',
data: dataList.plData,
type: 'line',
},
],
});
},
},
};
</script>
<style scoped>
.activeButton {
background-color: rgb(93,159,255);
}
.normalButton {
background-color: none;
.balace-chart >>> .el-button {
background: #e3e3e3;
color: #333;
transition: all 0.3s;
border: none;
&.activeButton,
&:hover {
background: #0b58ff;
color: #fff;
}
}
</style>

View File

@ -28,59 +28,96 @@
<script>
import basicPage from '../../../core/mixins/basic-page';
import { parseTime } from '../../../core/mixins/code-filter';
import moment from 'moment';
import {
getEqAnalysis,
exportEqAnalysisExcel
exportEqAnalysisExcel,
} from '@/api/equipment/analysis/statistics';
const tableProps = [
{
prop: 'recordTime',
label: '时间段',
filter: parseTime
filter: (val) => {
if (val && val.length > 0) {
return (
moment(val[0]).format('YYYY-MM-DD HH:mm:ss') +
' ~ ' +
moment(val[1]).format('YYYY-MM-DD HH:mm:ss')
);
}
return '-';
},
},
{
prop: 'lineName',
label: '产线'
label: '产线',
},
{
prop: 'sectionName',
label: '工段'
label: '工段',
},
{
prop: 'equipmentName',
label: '设备名称'
label: '设备名称',
},
{
prop: 'equipmentType',
label: '设备类型'
label: '设备类型',
},
{
prop: 'workTime',
label: '工作时间累积(h)'
label: '工作时间累积(h)',
},
{
prop: 'repairCount',
label: '维修次数'
label: '维修次数',
},
{
prop: 'maintainCount',
label: '保养次数'
}
label: '保养次数',
},
];
export default {
mixins: [basicPage],
data() {
const today = new Date();
const todayStart = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate(),
0,
0,
0
);
const todayEnd = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate(),
23,
59,
59
);
return {
urlOptions: {
getDataListURL: getEqAnalysis,
exportURL: exportEqAnalysisExcel,
},
tableProps,
tableBtn: [].filter((v)=>v),
tableBtn: [].filter((v) => v),
tableData: [],
listQuery: {
pageSize: 10,
pageNo: 1,
total: 1,
recordTime: [
moment(todayStart).format('YYYY-MM-DD HH:mm:ss'),
moment(todayEnd).format('YYYY-MM-DD HH:mm:ss'),
],
},
formConfig: [
{
type: 'input',
@ -101,7 +138,10 @@ export default {
endPlaceholder: '结束日期',
defaultTime: ['00:00:00', '23:59:59'],
param: 'recordTime',
defaultSelect: [],
defaultSelect: [
moment(todayStart).format('YYYY-MM-DD HH:mm:ss'),
moment(todayEnd).format('YYYY-MM-DD HH:mm:ss'),
],
},
{
type: 'button',
@ -113,33 +153,38 @@ export default {
type: 'separate',
},
{
type: this.$auth.hasPermi('equipment:analysis-statistics:export') ? 'button' : '',
type: this.$auth.hasPermi('equipment:analysis-statistics:export')
? 'button'
: '',
btnName: '导出',
name: 'export',
color: 'warning',
plain: true
plain: true,
},
],
};
},
created() {},
mounted() {},
methods: {
//
getDataList() {
this.dataListLoading = true;
this.urlOptions.getDataListURL(this.listQuery).then(response => {
this.tableData = response.data.list;
this.listQuery.total = response.data.total;
this.dataListLoading = false;
});
},
getDataList() {
this.dataListLoading = true;
this.urlOptions.getDataListURL(this.listQuery).then((response) => {
this.tableData = response.data.list;
this.listQuery.total = response.data.total;
this.dataListLoading = false;
});
},
buttonClick(val) {
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
this.listQuery.pageSize = 10;
this.listQuery.equipmentName = val.name ? val.name : undefined;
this.listQuery.recordTime = val.recordTime ? val.recordTime : undefined;
this.listQuery.recordTime = val.recordTime
? val.recordTime
: undefined;
this.getDataList();
break;
case 'reset':
@ -158,20 +203,24 @@ export default {
console.log(val);
}
},
/** 导出按钮操作 */
handleExport() {
//
let params = { ...this.listQuery };
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有数据项?').then(() => {
this.exportLoading = true;
return this.urlOptions.exportURL(params);
}).then(response => {
this.$download.excel(response, '设备统计分析.xls');
this.exportLoading = false;
}).catch(() => { });
}
/** 导出按钮操作 */
handleExport() {
//
let params = { ...this.listQuery };
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal
.confirm('是否确认导出所有数据项?')
.then(() => {
this.exportLoading = true;
return this.urlOptions.exportURL(params);
})
.then((response) => {
this.$download.excel(response, '设备统计分析.xls');
this.exportLoading = false;
})
.catch(() => {});
},
},
};
</script>

View File

@ -237,6 +237,7 @@ export default {
label: '工厂',
placeholder: '请选择工厂',
param: 'factoryId',
filterable: true,
selectOptions: [],
},
{
@ -244,6 +245,7 @@ export default {
label: '产线',
placeholder: '请选择产线',
param: 'lineId',
filterable: true,
selectOptions: [],
},
//

View File

@ -310,7 +310,7 @@ export default {
this.$modal
.confirm('是否确认删除记录"' + row.name + '"?')
.then(function () {
return this.delete({ id });
return this.del({ id });
})
.then(() => {
this.getList();

View File

@ -198,26 +198,23 @@ export default {
prop: 'createTime',
label: '添加时间',
fixed: true,
width: 180,
filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
},
{ width: 240, prop: 'code', label: '报警编码' },
{ prop: 'code', label: '报警编码' },
{
width: 100,
prop: 'type',
label: '报警类型',
filter: (val) =>
val != null ? ['-', '字符型', '布尔型', '-'][val] : '-',
},
{
width: 90,
prop: 'grade',
label: '报警级别',
filter: publicFormatter(this.DICT_TYPE.EQU_ALARM_LEVEL),
},
{ width: 180, prop: 'alarmCode', label: '设备报警编码' },
{ width: 128, prop: 'plcParamName', label: '参数列名' },
{ width: 128, prop: 'alarmContent', label: '报警内容' },
{ prop: 'alarmCode', label: '设备报警编码' },
{ prop: 'plcParamName', label: '参数列名' },
{ prop: 'alarmContent', label: '报警内容' },
],
alarmForm: {
id: undefined,

View File

@ -52,7 +52,7 @@
import moment from 'moment';
import basicPageMixin from '@/mixins/lb/basicPageMixin';
import { publicFormatter } from '@/utils/dict';
import { deleteCheck } from "@/api/equipment/base/inspection/settings";
import { deleteCheck } from '@/api/equipment/base/inspection/settings';
const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss');
@ -128,15 +128,21 @@ export default {
label: '巡检内容编号',
prop: 'code',
url: '/base/equipment-check/getCode',
rules: [{ required: true, message: '巡检内容编号不能为空', trigger: 'blur' }],
rules: [
{
required: true,
message: '巡检内容编号不能为空',
trigger: 'blur',
},
],
},
],
[
{
input: true,
label: '巡检项目',
prop: 'program',
rules: [{ required: true, message: '巡检项目不能为空', trigger: 'blur' }],
rules: [
{ required: true, message: '巡检项目不能为空', trigger: 'blur' },
],
},
],
[
@ -144,10 +150,10 @@ export default {
input: true,
label: '巡检内容',
prop: 'content',
rules: [{ required: true, message: '巡检内容不能为空', trigger: 'blur' }],
rules: [
{ required: true, message: '巡检内容不能为空', trigger: 'blur' },
],
},
],
[
{
input: true,
label: '备注',
@ -168,7 +174,7 @@ export default {
code: '',
program: '',
id: undefined,
content: ''
content: '',
},
basePath: '/base/equipment-check',
mode: null,
@ -271,10 +277,10 @@ export default {
handleDelete(row) {
const id = row.id;
this.$modal
.confirm('是否确认删除巡检项目名称为"' + row.program + '"的数据项?')
.confirm('是否确认删除巡检项目?')
.then(function () {
// return this.delete({ id });
return deleteCheck(id)
// return this.del({ id });
return deleteCheck(id);
})
.then(() => {
this.getList();

View File

@ -105,6 +105,7 @@ export default {
label: '设备',
placeholder: '请选择设备',
param: 'equipmentId',
filterable: true
},
//
{

View File

@ -54,7 +54,6 @@
</template>
<script>
import moment from 'moment';
import basicPageMixin from '@/mixins/lb/basicPageMixin';
import addOrUpdata from './add-or-updata.vue';
// import { publicFormatter } from '@/utils/dict';
@ -101,9 +100,9 @@ export default {
{ prop: 'lineName', label: '产线' },
{ prop: 'sectionName', label: '工段' },
{ prop: 'equipmentName', label: '设备' },
{ prop: 'equipmentCode', label: '设备编码' },
{ prop: 'responsible', label: '负责人' },
{ prop: 'equipmentCode', label: '描述' },
{ prop: 'checkNumber', label: '巡检条数' } // TODO:
{ prop: 'checkNumber', label: '巡检条数' }, // TODO:
],
searchBarFormConfig: [
{
@ -151,14 +150,18 @@ export default {
input: true,
label: '配置名称',
prop: 'name',
rules: [{ required: true, message: '配置名称不能为空', trigger: 'blur' }],
rules: [
{ required: true, message: '配置名称不能为空', trigger: 'blur' },
],
},
{
input: true,
label: '配置编码',
prop: 'code',
url: '/base/equipment-check-config/getCode',
rules: [{ required: true, message: '配置编码不能为空', trigger: 'blur' }],
rules: [
{ required: true, message: '配置编码不能为空', trigger: 'blur' },
],
},
],
[
@ -167,7 +170,9 @@ export default {
label: '设备名称',
prop: 'equipmentId',
url: '/base/core-equipment/listAll',
rules: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
rules: [
{ required: true, message: '设备名称不能为空', trigger: 'blur' },
],
},
{
input: true,
@ -288,9 +293,9 @@ export default {
handleDelete(row) {
const id = row.id;
this.$modal
.confirm('是否确认删除记录"' + row.name + '"?')
.then(function () {
return this.delete({ id });
.confirm('是否确认删除该巡检记录?')
.then(() => {
return this.del({ id });
})
.then(() => {
this.getList();
@ -317,14 +322,14 @@ export default {
},
handleDetail({ id }) {
this.addOrUpdateVisible = true;
this.addOrEditTitle = "详情";
this.addOrEditTitle = '详情';
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id, true);
});
},
handleAddDetail({ id }) {
this.addOrUpdateVisible = true;
this.addOrEditTitle = "添加巡检";
this.addOrEditTitle = '添加巡检';
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id);
});

View File

@ -106,37 +106,37 @@ export default {
param: 'equipmentName',
},
//
{
type: 'datePicker',
label: '时间段',
dateType: 'daterange', // datetimerange
format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
// valueFormat: 'timestamp',
rangeSeparator: '-',
startPlaceholder: '开始日期',
endPlaceholder: '结束日期',
defaultTime: ['00:00:00', '23:59:59'],
param: 'createTime',
// defaultSelect: [
// new Date(y, m, d)
// .toLocaleString()
// .split('/')
// .map((item, index) => {
// if (index == 1 || index == 2) return item.padStart(2, '0');
// return item;
// })
// .join('-'),
// new Date(y, m, d, 23, 59, 59)
// .toLocaleString()
// .split('/')
// .map((item, index) => {
// if (index == 1 || index == 2) return item.padStart(2, '0');
// return item;
// })
// .join('-'),
// ],
},
// {
// type: 'datePicker',
// label: '',
// dateType: 'daterange', // datetimerange
// format: 'yyyy-MM-dd',
// valueFormat: 'yyyy-MM-dd HH:mm:ss',
// // valueFormat: 'timestamp',
// rangeSeparator: '-',
// startPlaceholder: '',
// endPlaceholder: '',
// defaultTime: ['00:00:00', '23:59:59'],
// param: 'createTime',
// // defaultSelect: [
// // new Date(y, m, d)
// // .toLocaleString()
// // .split('/')
// // .map((item, index) => {
// // if (index == 1 || index == 2) return item.padStart(2, '0');
// // return item;
// // })
// // .join('-'),
// // new Date(y, m, d, 23, 59, 59)
// // .toLocaleString()
// // .split('/')
// // .map((item, index) => {
// // if (index == 1 || index == 2) return item.padStart(2, '0');
// // return item;
// // })
// // .join('-'),
// // ],
// },
{
type: 'button',
btnName: '查询',

View File

@ -121,14 +121,14 @@ export default {
},
{
type: 'select',
label: '保养计划',
placeholder: '请选择保养计划',
label: '计划名称',
placeholder: '请选择计划名称',
param: 'maintainPlanId',
},
//
{
type: 'datePicker',
label: '时间',
label: '保养开始时间',
dateType: 'daterange', // datetimerange
format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd HH:mm:ss',

View File

@ -129,6 +129,7 @@ export default {
label: '设备',
placeholder: '请选择设备',
param: 'equipmentId',
filterable: true,
},
{
type: 'select',

View File

@ -52,7 +52,7 @@
import moment from 'moment';
import basicPageMixin from '@/mixins/lb/basicPageMixin';
import { publicFormatter } from '@/utils/dict';
import { deleteSparePart } from '@/api/equipment/base/spare-parts/list'
import { deleteSparePart } from '@/api/equipment/base/spare-parts/list';
const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss');
@ -95,7 +95,7 @@ export default {
searchBarFormConfig: [
{
type: 'input',
label: '关键字',
label: '备件名称',
placeholder: '请输入备件名称',
param: 'name',
},
@ -132,20 +132,33 @@ export default {
input: true,
label: '备件名称',
prop: 'name',
rules: [{ required: true, message: '备件名称不能为空', trigger: 'blur' }],
rules: [
{ required: true, message: '备件名称不能为空', trigger: 'blur' },
],
},
{
input: true,
label: '备件型号',
prop: 'model',
label: '备件编码',
prop: 'code',
url: '/base/equipment-spare-part/getCode',
rules: [
{ required: true, message: '备件编码不能为空', trigger: 'blur' },
],
},
],
[
{
input: true,
label: '备件型号',
prop: 'model',
},
{
input: true,
label: '规格',
prop: 'specifications',
},
],
[
{
select: true,
label: '供应商',
@ -155,10 +168,10 @@ export default {
filterable: true,
clearable: true,
},
rules: [{ required: true, message: '供应商不能为空', trigger: 'blur' }],
rules: [
{ required: true, message: '供应商不能为空', trigger: 'blur' },
],
},
],
[
{
select: true,
label: '物料类型',
@ -169,8 +182,12 @@ export default {
filterable: true,
clearable: true,
},
rules: [{ required: true, message: '物料类型不能为空', trigger: 'blur' }],
rules: [
{ required: true, message: '物料类型不能为空', trigger: 'blur' },
],
},
],
[
{
input: true,
label: '使用寿命',
@ -184,14 +201,14 @@ export default {
},
],
},
],
[
{
select: true,
label: '单位',
prop: 'unit', //
options: this.getDictDatas(this.DICT_TYPE.UNIT_DICT),
},
],
[
{
input: true,
label: '备注',

View File

@ -72,10 +72,10 @@ const remainBox = {
},
computed: {
value() {
const temp = this.injectData[this.injectData.prop] || null
const temp = this.injectData[this.injectData.prop] || null;
if (temp) {
console.log('12', temp)
return temp === 'Green' ? 'green' : 'red'
console.log('12', temp);
return temp === 'Green' ? 'green' : 'red';
}
return this.injectData[this.injectData.prop] || null;
},
@ -83,7 +83,7 @@ const remainBox = {
if (this.value) {
// const v = +this.value;
// return v < 0 ? 'red' : v >= 0 && v < 2 ? 'yellow' : 'green';
return this.value
return this.value;
}
return 'unset';
},
@ -95,8 +95,7 @@ const remainBox = {
this.color
// this.color == 'Green' ? 'green' : this.color == 'Red' ? 'red' : 'yellow'
}; position:absolute; inset: 0; padding: 0 10px; display: flex; align-items: center; color: ${
'unset'
// this.color == 'red' ? '#fff' : 'unset'
this.color == 'red' || this.color == 'green' ? '#fff' : 'unset'
}`}>
{this.injectData[this.injectData.prop] || ''}
</div>
@ -112,7 +111,10 @@ const btn = {
},
methods: {
handleClick() {
this.$emit('emitData', { action: this.injectData.name, value: this.injectData });
this.$emit('emitData', {
action: this.injectData.name,
value: this.injectData,
});
},
},
render: function (h) {
@ -124,8 +126,6 @@ const btn = {
},
};
export default {
name: 'EquipmentSparePartsMonitor',
components: { addSparts },
@ -162,7 +162,12 @@ export default {
{ prop: 'responsible', label: '负责人' },
{ prop: 'color', label: '是否超期', subcomponent: remainBox },
{ prop: 'opt1', label: '备件更换', name: '操作', subcomponent: btn },
{ prop: 'opt2', label: '更换记录', name: '更新记录', subcomponent: btn }, // TODO:
{
prop: 'opt2',
label: '更换记录',
name: '更新记录',
subcomponent: btn,
}, // TODO:
// { prop: 'remark', label: '' },
],
searchBarFormConfig: [
@ -171,12 +176,14 @@ export default {
label: '产线',
placeholder: '请选择产线',
param: 'lineId',
filterable: true,
},
{
type: 'select',
label: '设备',
placeholder: '请选择设备',
param: 'equipmentId',
filterable: true,
},
{
type: 'button',
@ -211,7 +218,9 @@ export default {
input: true,
label: '配置名称',
prop: 'name',
rules: [{ required: true, message: '配置名称不能为空', trigger: 'blur' }],
rules: [
{ required: true, message: '配置名称不能为空', trigger: 'blur' },
],
},
],
[
@ -224,7 +233,9 @@ export default {
filterable: true,
clearable: true,
},
rules: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
rules: [
{ required: true, message: '设备名称不能为空', trigger: 'blur' },
],
},
],
[
@ -281,29 +292,29 @@ export default {
}
},
eqOperation({ id }) {
this.addOrUpdateVisible = true
this.addOrUpdateVisible = true;
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id);
});
},
updateLog({ id }) {
this.addOrUpdateVisible = true
this.addOrUpdateVisible = true;
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id, true);
});
},
initSearchBar() {
// 线
getCorePLList().then(res => {
getCorePLList().then((res) => {
this.$set(
this.searchBarFormConfig[0],
'selectOptions',
res.data.map((item) => ({
name: item.name,
id: item.id
id: item.id,
}))
);
})
});
this.http('/base/core-equipment/listAll', 'get').then(({ data }) => {
this.$set(
this.searchBarFormConfig[1],
@ -319,7 +330,11 @@ export default {
getList() {
this.loading = true;
//
this.http('/base/equipment-spare-part-config/monitor', 'get', this.queryParams).then((response) => {
this.http(
'/base/equipment-spare-part-config/monitor',
'get',
this.queryParams
).then((response) => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
@ -338,7 +353,7 @@ export default {
name: null,
equipmentId: null,
description: null,
responsible: null
responsible: null,
};
this.resetForm('form');
},
@ -397,7 +412,7 @@ export default {
this.$modal
.confirm('是否确认删除记录"' + row.name + '"?')
.then(function () {
return this.delete({ id });
return this.del({ id });
})
.then(() => {
this.getList();

View File

@ -0,0 +1,138 @@
<!--
filename: SearchBar.vue
author: liubin
date: 2023-11-23 14:01:17
description:
-->
<template>
<div class="search-bar">
<div class="vertical-blue-line"></div>
<el-form
:inline="true"
ref="search-bar__form"
:model="form"
class="search-bar__form">
<el-form-item :label="'产线'" prop="productionLineId">
<el-select
size="small"
placeholder="请选择产线"
@change="getEquipmentByLineId"
v-model="form.productionLineId">
<el-option
v-for="item in listLine"
:key="item.id"
:label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="'设备'" prop="equipmentId">
<el-select
size="small"
placeholder="请选择设备"
v-model="form.equipmentId">
<el-option
v-for="item in listEq"
:key="item.id"
:label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
</el-form>
<el-button type="primary" @click="handleSearch" size="small">
查询
</el-button>
</div>
</template>
<script>
export default {
name: 'SearchBar',
model: {
prop: 'value',
event: 'change',
},
props: {
value: {
type: Object,
default: () => {},
},
},
data() {
return {
listLine: [],
listEq: [],
};
},
computed: {
form: {
set(val) {
this.emit(val);
},
get() {
return this.value;
},
},
},
mounted() {
this.getLine();
},
methods: {
emit(newValue) {
debugger;
this.$emit('update', { ...this.form, ...newValue });
},
async getLine() {
const { data, code } = await this.$axios({
url: '/base/core-production-line/listAll',
});
if (code == 0) {
this.listLine = data;
return;
}
this.listLine.splice(0);
},
async getEquipmentByLineId(id) {
const { data, code } = await this.$axios({
url: '/base/core-equipment/listByLine',
params: {
id,
},
});
if (code == 0) {
this.listEq = data;
return;
}
this.listEq.splice(0);
},
handleSearch() {},
},
};
</script>
<style scoped lang="scss">
.search-bar {
padding: 12px 0;
font-size: 16px;
position: relative;
display: flex;
align-items: center;
gap: 12px;
:deep(.el-form-item) {
margin-bottom: 0 !important;
margin-right: 0;
&:not(:last-child) {
margin-right: 18px;
}
}
}
.vertical-blue-line {
width: 4px;
height: 18px;
background: #0b58ff;
border-radius: 2px;
}
</style>

View File

@ -1,10 +1,7 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<SearchBar
:formConfigs="searchBarFormConfig"
ref="search-bar"
@headBtnClick="handleSearchBarBtnClick" />
<SearchBarNew v-model="searchBarForm" />
<!-- 列表 -->
<base-table
@ -13,13 +10,13 @@
:limit="queryParams.pageSize"
:table-data="list"
@emitFun="handleEmitFun">
<method-btn
<!-- <method-btn
v-if="tableBtn.length"
slot="handleBtn"
label="操作"
:width="120"
:method-list="tableBtn"
@clickBtn="handleTableBtnClick" />
@clickBtn="handleTableBtnClick" /> -->
</base-table>
<!-- 分页组件 -->
@ -50,22 +47,23 @@
</template>
<script>
import moment from 'moment';
import basicPageMixin from '@/mixins/lb/basicPageMixin';
import { publicFormatter } from '@/utils/dict';
import { parseTime } from '@/utils/ruoyi'
// const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss');
import { parseTime } from '@/utils/ruoyi';
import SearchBarNew from '../SearchBar.vue';
const btn = {
name: 'tableBtn',
props: ['injectData'],
components: {},
data() {
return {};
},
methods: {
handleClick() {
this.$emit('emitData', { action: this.injectData.label, value: this.injectData });
this.$emit('emitData', {
action: this.injectData.label,
value: this.injectData,
});
},
},
render: function (h) {
@ -77,134 +75,62 @@ const btn = {
},
};
// monitoring/equipment-monitor/realtime-page
export default {
name: 'StatusAndParams',
mixins: [basicPageMixin],
components: { SearchBarNew },
data() {
return {
searchBarKeys: ['equipmentName', 'recordTime'],
tableBtn: [
// this.$auth.hasPermi('equipment:spare-parts-config:update')
// ? {
// type: 'detail',
// btnName: '',
// }
// : undefined,
// this.$auth.hasPermi('equipment:spare-parts-config:update')
// ? {
// type: 'edit',
// btnName: '',
// }
// : undefined,
// this.$auth.hasPermi('equipment:spare-parts-config:delete')
// ? {
// type: 'delete',
// btnName: '',
// }
// : undefined,
].filter((v) => v),
tableProps: [
{ prop: 'productionLine', label: '设备名称' },
{ prop: 'workshopSection', label: '设备编码' },
{ prop: 'equipment', label: '投入数' },
{ prop: 'productionLine', label: '产出数' },
{ prop: 'workshopSection', label: '是否运行' },
{ prop: 'equipment22', label: '状态' },
// { prop: 'alarmGrade', label: '', filter: publicFormatter(this.DICT_TYPE.EQU_ALARM_LEVEL) },
{ prop: 'productionLine', label: '是否故障' },
{ prop: 'workshopSection', label: '生产量记录时间', filter: parseTime },
{ prop: 'equipment1', label: '状态记录时间', filter: parseTime },
{ prop: 'equipmentName', label: '设备名称' },
{ prop: 'equipmentCode', label: '设备编码' },
{ prop: 'inQuantity', label: '投入数' },
{ prop: 'outQuantity', label: '产出数' },
{
prop: 'run',
label: '是否运行',
filter: (val) => (val != null ? (val ? '是' : '否') : ''),
},
{
prop: 'status',
label: '状态',
filter: (val) =>
val != null ? ['正常', '计划停机', '故障'][val] : '',
},
{
prop: 'error',
label: '是否故障',
filter: (val) => (val != null ? (val ? '是' : '否') : ''),
},
{
prop: 'quantityRecordTime',
label: '生产量记录时间',
filter: parseTime,
},
{ prop: 'statusRecordTime', label: '状态记录时间', filter: parseTime },
{ prop: 'opt1', label: '状态可视化', name: '查看', subcomponent: btn },
{ prop: 'opt2', label: '参数监控', name: '查看', subcomponent: btn } // TODO:
// { prop: 'remark', label: '' },
],
searchBarFormConfig: [
{
type: 'input',
label: '设备名',
placeholder: '请输入设备名称',
param: 'equipmentName',
},
//
{
type: 'datePicker',
label: '时间段',
dateType: 'daterange', // datetimerange
// format: 'yyyy-MM-dd HH:mm:ss',
format: 'yyyy-MM-dd',
// valueFormat: 'timestamp',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始日期',
endPlaceholder: '结束日期',
defaultTime: ['00:00:00', '23:59:59'],
param: 'recordTime',
// defaultSelect: [
// new Date(y, m, d)
// .toLocaleString()
// .split('/')
// .map((item, index) => {
// if (index == 1 || index == 2) return item.padStart(2, '0');
// return item;
// })
// .join('-'),
// new Date(y, m, d, 23, 59, 59)
// .toLocaleString()
// .split('/')
// .map((item, index) => {
// if (index == 1 || index == 2) return item.padStart(2, '0');
// return item;
// })
// .join('-'),
// ],
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
// {
// type: 'separate',
// },
// {
// type: this.$auth.hasPermi('equipment:spare-parts-config:create')
// ? 'button'
// : '',
// btnName: '',
// name: 'add',
// plain: true,
// color: 'success',
// },
// {
// type: this.$auth.hasPermi('equipment:spare-parts-config:export')
// ? 'button'
// : '',
// btnName: '',
// name: 'export',
// color: 'warning',
// },
{ prop: 'opt2', label: '参数监控', name: '查看', subcomponent: btn },
],
searchBarForm: {
productionLineId: null,
equipmentId: null,
},
//
open: false,
//
queryParams: {
pageNo: 1,
pageSize: 10,
lineId: null,
equipmentId: null,
productionLineId: null,
},
basePath: '/base/equipment-alarm-log',
list: []
list: [],
};
},
created() {
// this.getList();
},
methods: {
handleEmitFun(val) {
console.log('你好', val)
console.log('你好', val);
if (val.action === '状态可视化') {
//
} else {
@ -215,16 +141,20 @@ export default {
getList() {
this.loading = true;
//
this.recv(this.queryParams).then((response) => {
this.http(
'/monitoring/equipment-monitor/realtime-page',
'get',
this.queryParams
).then((response) => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
successSubmit() {
this.cancel()
this.getList()
},
this.cancel();
this.getList();
},
/** 取消按钮 */
cancel() {
this.open = false;
@ -270,7 +200,7 @@ export default {
},
/** 提交按钮 */
submitForm() {
this.$refs.addOrUpdate.dataFormSubmit()
this.$refs.addOrUpdate.dataFormSubmit();
// this.$refs['form'].validate((valid) => {
// if (!valid) {
// return;
@ -297,8 +227,8 @@ export default {
const id = row.id;
this.$modal
.confirm('是否确认删除记录"' + row.name + '"?')
.then(function () {
return this.delete({ id });
.then(() => {
return this.del({ id });
})
.then(() => {
this.getList();

View File

@ -61,6 +61,8 @@
v-if="open"
style="width: 100%"
v-model="queryParams.equipmentId"
filterable
clearable
placeholder="请选择一个设备">
<el-option
v-for="eq in eqList"

View File

@ -94,12 +94,19 @@
<script>
import Gantt from './chart';
import moment from 'moment';
export default {
name: 'SGStatus',
components: {},
props: {},
data() {
const today = new Date();
const todayStart = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate()
);
return {
chart: null,
searchBarFormConfig: [
@ -129,6 +136,7 @@ export default {
placeholder: '选择日期',
param: 'recordTime',
required: true,
defaultSelect: moment(todayStart).format('YYYY-MM-DD HH:mm:ss'),
},
{
type: 'button',
@ -369,7 +377,10 @@ export default {
const { code, data } = await this.$axios({
url: '/monitoring/equipment-monitor/status-series',
method: 'get',
params: this.queryParams,
params: {
recordTime: this.queryParams.recordTime,
equipmentId: this.queryParams.equipmentId,
},
});
if (code == 0) {
const newEqlist = this.objectToArray(data);