update
This commit is contained in:
parent
73344175a8
commit
640ad55aa2
@ -32,9 +32,9 @@ export function getBaseInfoNew() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
//首页 产量堆叠图
|
//首页 产量堆叠图
|
||||||
export function qualitynewDeviceOutputQuality() {
|
export function halfHourOutputPassInfo() {
|
||||||
return request({
|
return request({
|
||||||
url: '/casm/quality/newDeviceOutputQuality',
|
url: '/casm/quality/halfHourOutputPassInfo',
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -46,5 +46,12 @@ export function getNewestFiveInfo() {
|
|||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
//首页 张力值
|
||||||
|
export function getTensionInfo() {
|
||||||
|
return request({
|
||||||
|
url: '/casm/quality/getTensionInfo',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,14 +21,14 @@
|
|||||||
</el-upload>
|
</el-upload>
|
||||||
<!-- 上传提示 -->
|
<!-- 上传提示 -->
|
||||||
<div class="el-upload__tip" v-if="showTip">
|
<div class="el-upload__tip" v-if="showTip">
|
||||||
请上传
|
{{tLang('tip','请上传')}}
|
||||||
<template v-if="fileSize">
|
<template v-if="fileSize">
|
||||||
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
|
{{tLang('tip','大小不超过')}} <b style="color: #f56c6c">{{ fileSize }}MB </b>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="fileType">
|
<template v-if="fileType">
|
||||||
格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
|
{{tLang('tip','格式为')}} <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
|
||||||
</template>
|
</template>
|
||||||
的文件
|
{{tLang('tip','的文件')}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-dialog
|
<el-dialog
|
||||||
|
255
src/components/scaleScreen/index.vue
Normal file
255
src/components/scaleScreen/index.vue
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
<!--
|
||||||
|
* @Author: wei
|
||||||
|
* @description: 大屏自适应容器组件
|
||||||
|
* @LastEditTime: 2023-04-20 11:20:03
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<!-- <section class="screen-box" :style="boxStyle"> -->
|
||||||
|
<div class="screen-wrapper" ref="screenWrapper" :style="wrapperStyle">
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
<!-- </section> -->
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
/**
|
||||||
|
* 防抖函数
|
||||||
|
* @param {T} fn
|
||||||
|
* @param {number} delay
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
function debounce(fn, delay) {
|
||||||
|
let timer = null;
|
||||||
|
return function (...args) {
|
||||||
|
timer = setTimeout(
|
||||||
|
() => {
|
||||||
|
typeof fn === "function" && fn.apply(null, args);
|
||||||
|
clearTimeout(timer);
|
||||||
|
},
|
||||||
|
delay > 0 ? delay : 100
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "VScaleScreen",
|
||||||
|
props: {
|
||||||
|
width: {
|
||||||
|
type: [String, Number],
|
||||||
|
default: 1920,
|
||||||
|
},
|
||||||
|
height: {
|
||||||
|
type: [String, Number],
|
||||||
|
default: 1080,
|
||||||
|
},
|
||||||
|
fullScreen: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
autoScale: {
|
||||||
|
type: [Object, Boolean],
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
selfAdaption: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
delay: {
|
||||||
|
type: Number,
|
||||||
|
default: 500,
|
||||||
|
},
|
||||||
|
boxStyle: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
wrapperStyle: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
currentWidth: 0,
|
||||||
|
currentHeight: 0,
|
||||||
|
originalWidth: 0,
|
||||||
|
originalHeight: 0,
|
||||||
|
onResize: null,
|
||||||
|
observer: null,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
selfAdaption(val) {
|
||||||
|
if (val) {
|
||||||
|
this.resize();
|
||||||
|
this.addListener();
|
||||||
|
} else {
|
||||||
|
this.clearListener();
|
||||||
|
this.clearStyle();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
screenWrapper() {
|
||||||
|
return this.$refs["screenWrapper"];
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
initSize() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
// console.log("初始化样式");
|
||||||
|
//给父元素设置 overflow:hidden
|
||||||
|
if (this.screenWrapper.parentNode) {
|
||||||
|
this.screenWrapper.parentNode.style.overflow = "hidden";
|
||||||
|
this.screenWrapper.parentNode.scrollLeft = 0;
|
||||||
|
this.screenWrapper.parentNode.scrollTop = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$nextTick(() => {
|
||||||
|
// region 获取大屏真实尺寸
|
||||||
|
if (this.width && this.height) {
|
||||||
|
this.currentWidth = this.width;
|
||||||
|
this.currentHeight = this.height;
|
||||||
|
} else {
|
||||||
|
this.currentWidth = this.screenWrapper.clientWidth;
|
||||||
|
this.currentHeight = this.screenWrapper.clientHeight;
|
||||||
|
}
|
||||||
|
// endregion
|
||||||
|
// region 获取画布尺寸
|
||||||
|
if (!this.originalHeight || !this.originalWidth) {
|
||||||
|
this.originalWidth = window.screen.width;
|
||||||
|
this.originalHeight = window.screen.height;
|
||||||
|
}
|
||||||
|
// endregion
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateSize() {
|
||||||
|
if (this.currentWidth && this.currentHeight) {
|
||||||
|
this.screenWrapper.style.width = `${this.currentWidth}px`;
|
||||||
|
this.screenWrapper.style.height = `${this.currentHeight}px`;
|
||||||
|
} else {
|
||||||
|
this.screenWrapper.style.width = `${this.originalWidth}px`;
|
||||||
|
this.screenWrapper.style.height = `${this.originalHeight}px`;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleAutoScale(scale) {
|
||||||
|
if (!this.autoScale) return;
|
||||||
|
const screenWrapper = this.screenWrapper;
|
||||||
|
const domWidth = screenWrapper.clientWidth;
|
||||||
|
const domHeight = screenWrapper.clientHeight;
|
||||||
|
const currentWidth = document.body.clientWidth;
|
||||||
|
const currentHeight = document.body.clientHeight;
|
||||||
|
screenWrapper.style.transform = `scale(${scale},${scale}) `;
|
||||||
|
let mx = Math.max((currentWidth - domWidth * scale) / 2, 0);
|
||||||
|
let my = Math.max((currentHeight - domHeight * scale) / 2, 0);
|
||||||
|
if (typeof this.autoScale === "object") {
|
||||||
|
// @ts-ignore
|
||||||
|
!this.autoScale.x && (mx = 0);
|
||||||
|
// @ts-ignore
|
||||||
|
!this.autoScale.y && (my = 0);
|
||||||
|
}
|
||||||
|
// console.log({
|
||||||
|
// mx,
|
||||||
|
// my,
|
||||||
|
// currentWidth,
|
||||||
|
// currentHeight,
|
||||||
|
// domWidth,
|
||||||
|
// domHeight,
|
||||||
|
// scale,
|
||||||
|
// });
|
||||||
|
this.screenWrapper.style.margin = `${my}px ${mx}px`;
|
||||||
|
},
|
||||||
|
updateScale() {
|
||||||
|
const screenWrapper = this.screenWrapper;
|
||||||
|
// 获取真实视口尺寸
|
||||||
|
const currentWidth = document.body.clientWidth;
|
||||||
|
const currentHeight = document.body.clientHeight;
|
||||||
|
// 获取大屏最终的宽高onResize
|
||||||
|
const realWidth = this.currentWidth || this.originalWidth;
|
||||||
|
const realHeight = this.currentHeight || this.originalHeight;
|
||||||
|
// 计算缩放比例
|
||||||
|
const widthScale = currentWidth / realWidth;
|
||||||
|
const heightScale = currentHeight / realHeight;
|
||||||
|
// console.log({currentWidth, currentHeight,realWidth,realHeight});
|
||||||
|
|
||||||
|
// 若要铺满全屏,则按照各自比例缩放
|
||||||
|
if (this.fullScreen) {
|
||||||
|
screenWrapper.style.transform = `scale(${widthScale},${heightScale})`;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// 按照宽高最小比例进行缩放
|
||||||
|
const scale = Math.min(widthScale, heightScale);
|
||||||
|
this.handleAutoScale(scale);
|
||||||
|
},
|
||||||
|
initMutationObserver() {
|
||||||
|
const screenWrapper = this.screenWrapper;
|
||||||
|
const observer = (this.observer = new MutationObserver(() => {
|
||||||
|
this.onResize();
|
||||||
|
}));
|
||||||
|
|
||||||
|
observer.observe(screenWrapper, {
|
||||||
|
attributes: true,
|
||||||
|
attributeFilter: ["style"],
|
||||||
|
attributeOldValue: true,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
clearListener() {
|
||||||
|
window.removeEventListener("resize", this.onResize);
|
||||||
|
},
|
||||||
|
addListener() {
|
||||||
|
window.addEventListener("resize", this.onResize);
|
||||||
|
},
|
||||||
|
clearStyle() {
|
||||||
|
// console.log("清除");
|
||||||
|
const screenWrapper = this.screenWrapper;
|
||||||
|
screenWrapper.parentNode.style.overflow = "auto";
|
||||||
|
|
||||||
|
screenWrapper.style = "";
|
||||||
|
},
|
||||||
|
async resize() {
|
||||||
|
if (!this.selfAdaption) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await this.initSize();
|
||||||
|
this.updateSize();
|
||||||
|
this.updateScale();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.onResize = debounce(() => {
|
||||||
|
this.resize();
|
||||||
|
}, this.delay);
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.selfAdaption) {
|
||||||
|
this.resize();
|
||||||
|
this.addListener();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
this.clearListener();
|
||||||
|
// this.observer.disconnect()
|
||||||
|
},
|
||||||
|
};
|
||||||
|
//
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.screen-box {
|
||||||
|
overflow: hidden;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background: #000;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.screen-wrapper {
|
||||||
|
transition-property: all;
|
||||||
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
transition-duration: 500ms;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 100;
|
||||||
|
transform-origin: left top;
|
||||||
|
}
|
||||||
|
</style>
|
@ -79,6 +79,10 @@ export default {
|
|||||||
},
|
},
|
||||||
"tip": {
|
"tip": {
|
||||||
"确定删除选中记录?": "Are you sure to delete the selected record?",
|
"确定删除选中记录?": "Are you sure to delete the selected record?",
|
||||||
|
"请上传": "Please upload",
|
||||||
|
"大小不超过": "Size is not more than",
|
||||||
|
"格式为": "Format is",
|
||||||
|
"的文件": "file",
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"标题": "CASM Sewing Management System",
|
"标题": "CASM Sewing Management System",
|
||||||
@ -129,12 +133,16 @@ export default {
|
|||||||
"张力值": "Tension Value",
|
"张力值": "Tension Value",
|
||||||
"张力": "Tension",
|
"张力": "Tension",
|
||||||
'针数': 'Needle',
|
'针数': 'Needle',
|
||||||
|
"针1": "Needle1",
|
||||||
|
"针2": "Needle2",
|
||||||
|
|
||||||
},
|
},
|
||||||
"user":{
|
"user":{
|
||||||
'人员信息': 'User Info',
|
'人员信息': 'User Info',
|
||||||
'操作员': 'Operator',
|
'操作员': 'Operator',
|
||||||
'人员ID': 'Staff ID',
|
'人员ID': 'Staff ID',
|
||||||
|
'员工姓名': 'Staff Name',
|
||||||
|
'员工编号': 'Staff Code',
|
||||||
},
|
},
|
||||||
"device": {
|
"device": {
|
||||||
"设备信息": "Device Info",
|
"设备信息": "Device Info",
|
||||||
|
@ -80,6 +80,10 @@ export default {
|
|||||||
},
|
},
|
||||||
"tip": {
|
"tip": {
|
||||||
"确定删除选中记录?": "确定删除选中记录?",
|
"确定删除选中记录?": "确定删除选中记录?",
|
||||||
|
"请上传": "请上传",
|
||||||
|
"大小不超过": "大小不超过",
|
||||||
|
"格式为": "格式为",
|
||||||
|
"的文件": "的文件",
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"标题": "智能缝纫管理系统",
|
"标题": "智能缝纫管理系统",
|
||||||
@ -130,12 +134,15 @@ export default {
|
|||||||
"张力值": "张力值",
|
"张力值": "张力值",
|
||||||
"张力": "张力",
|
"张力": "张力",
|
||||||
'针数': '针数',
|
'针数': '针数',
|
||||||
|
"针1": "针1",
|
||||||
|
"针2": "针2",
|
||||||
},
|
},
|
||||||
"user":{
|
"user":{
|
||||||
'人员信息': '人员信息',
|
'人员信息': '人员信息',
|
||||||
'操作员': '操作员',
|
'操作员': '操作员',
|
||||||
'人员ID': '人员ID',
|
'人员ID': '人员ID',
|
||||||
|
'员工姓名': '员工姓名',
|
||||||
|
'员工编号': '员工编号',
|
||||||
},
|
},
|
||||||
"device": {
|
"device": {
|
||||||
"设备信息": "设备信息",
|
"设备信息": "设备信息",
|
||||||
|
@ -14,10 +14,10 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
<div class="chart-content">
|
<div class="chart-content">
|
||||||
<div class="chart-content-card">
|
<div class="chart-content-card">
|
||||||
<v-chart class="line-chart" :option="line_option" />
|
<v-chart ref="lineChartRef" class="line-chart" :option="line_option" />
|
||||||
</div>
|
</div>
|
||||||
<div class="chart-content-card">
|
<div class="chart-content-card">
|
||||||
<v-chart class="line-chart" :option="pie_option" />
|
<v-chart ref="pieChartRef" class="line-chart" :option="pie_option" />
|
||||||
</div>
|
</div>
|
||||||
<div class="right-content-card">
|
<div class="right-content-card">
|
||||||
<div>{{ deviceState.on + tLang('home', '台') }}/{{ deviceState.total + tLang('home', '台') }}</div>
|
<div>{{ deviceState.on + tLang('home', '台') }}/{{ deviceState.total + tLang('home', '台') }}</div>
|
||||||
@ -87,6 +87,12 @@ let item_color = {
|
|||||||
4: '#CCCCCC',
|
4: '#CCCCCC',
|
||||||
|
|
||||||
}
|
}
|
||||||
|
let lineChartRef = ref(null);
|
||||||
|
let pieChartRef = ref(null);
|
||||||
|
window.onresize = () => {
|
||||||
|
lineChartRef.value.resize();
|
||||||
|
pieChartRef.value.resize();
|
||||||
|
}
|
||||||
|
|
||||||
const line_option = ref({
|
const line_option = ref({
|
||||||
title: {
|
title: {
|
||||||
|
@ -30,7 +30,6 @@
|
|||||||
style="width: 100px; height: 100px; margin-right: 10px; margin-bottom: 10px"
|
style="width: 100px; height: 100px; margin-right: 10px; margin-bottom: 10px"
|
||||||
@click="dialogImageUrl = item; dialogVisible = true"></el-image>
|
@click="dialogImageUrl = item; dialogVisible = true"></el-image>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">{{ tLang('device', '运行时长') }}</el-col>
|
<el-col :span="12">{{ tLang('device', '运行时长') }}</el-col>
|
||||||
<el-col :span="12">{{ info.runTime||0 + tLang('common','分钟') }}</el-col>
|
<el-col :span="12">{{ info.runTime || 0 + tLang('common', '分钟') }}</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -46,36 +46,42 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="info-content">
|
<div class="info-content">
|
||||||
<el-row justify="space-evenly">
|
<el-row justify="space-evenly">
|
||||||
<el-col :span="12">操作员</el-col>
|
<el-col :span="6">{{ tLang('product', '产品名称') }}</el-col>
|
||||||
<el-col :span="12">张一一</el-col>
|
<el-col :span="6">{{ info.productionName }}</el-col>
|
||||||
|
<el-col :span="6">{{ tLang('product', '产品编码') }}</el-col>
|
||||||
|
<el-col :span="6">{{ info.productionCode }}</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row v-for="item in info.info">
|
||||||
<el-col :span="12">人员ID</el-col>
|
<el-col :span="4">{{ tLang('product', '面线信息') }}</el-col>
|
||||||
<el-col :span="12">11</el-col>
|
<el-col :span="4">{{ item.surfacelineCode }}</el-col>
|
||||||
|
<el-col :span="4">{{ tLang('product', '底线信息') }}</el-col>
|
||||||
|
<el-col :span="4">{{ item.bottomlineCode }}</el-col>
|
||||||
|
<el-col :span="4">{{ tLang('product', '梭芯信息') }}</el-col>
|
||||||
|
<el-col :span="4">{{ item.shuttlecoreCode }}</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="barchart">
|
<div class="barchart">
|
||||||
<v-chart class="chart-class" :option="bar_option" />
|
<v-chart ref="barChart" class="chart-class" :option="bar_option" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="right-content">
|
<div class="right-content">
|
||||||
<div class="zhangli">
|
<div class="zhangli">
|
||||||
<v-chart class="chart-class" :option="line_option" />
|
<v-chart ref="lineChart" class="chart-class" :option="line_option" />
|
||||||
</div>
|
</div>
|
||||||
<div class="table">
|
<div class="table">
|
||||||
<el-table :data="qualityList" stripe style="width: 100%">
|
<el-table :data="qualityList" stripe style="width: 100%">
|
||||||
<el-table-column type="index" :label="tLang('common', '序号')" align="center" width="60" />
|
<el-table-column type="index" :label="tLang('common', '序号')" align="center" width="60" />
|
||||||
<el-table-column :label="tLang('quality', '产品序列号')" align="center" prop="serialNumber" />
|
<el-table-column :label="tLang('quality', '产品序列号')" align="center" prop="serialNumber" />
|
||||||
<el-table-column :label="tLang('quality', '开始时间')" align="center" prop="starttime">
|
<el-table-column :label="tLang('quality', '开始时间')" align="center" prop="starttime">
|
||||||
<template #default="scope">
|
<!-- <template #default="scope">
|
||||||
<span>{{ parseTime(scope.row.starttime, '{y}-{m}-{d} {hh}:{mm}:{ss}') }}</span>
|
<span>{{ parseTime(scope.row.starttime, '{y}-{m}-{d} {hh}:{mm}:{ss}') }}</span>
|
||||||
</template>
|
</template> -->
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column :label="tLang('quality', '完成时间')" align="center" prop="endtime">
|
<el-table-column :label="tLang('quality', '完成时间')" align="center" prop="endtime">
|
||||||
<template #default="scope">
|
<!-- <template #default="scope">
|
||||||
<span>{{ parseTime(scope.row.endtime, '{y}-{m}-{d} {hh}:{mm}:{ss}') }}</span>
|
<span>{{ parseTime(scope.row.endtime, '{y}-{m}-{d} {hh}:{mm}:{ss}') }}</span>
|
||||||
</template>
|
</template> -->
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column :label="tLang('product', '底线编码')" align="center" prop="bottomlineCode" />
|
<el-table-column :label="tLang('product', '底线编码')" align="center" prop="bottomlineCode" />
|
||||||
<el-table-column :label="tLang('product', '面线编码')" align="center" prop="surfacelineCode" />
|
<el-table-column :label="tLang('product', '面线编码')" align="center" prop="surfacelineCode" />
|
||||||
@ -86,7 +92,7 @@
|
|||||||
<el-tag type="success" size="mini" v-if="scope.row.state === '0'">{{ tLang('common', '合格') }}</el-tag>
|
<el-tag type="success" size="mini" v-if="scope.row.state === '0'">{{ tLang('common', '合格') }}</el-tag>
|
||||||
<el-tag type="danger" size="mini" v-else-if="scope.row.state === '1'">{{ tLang('common', '不合格')
|
<el-tag type="danger" size="mini" v-else-if="scope.row.state === '1'">{{ tLang('common', '不合格')
|
||||||
}}</el-tag>
|
}}</el-tag>
|
||||||
<el-tag type="error" size="mini" v-else>{{ tLang('common', '未完成') }}</el-tag>
|
<el-tag type="warning" size="mini" v-else>{{ tLang('common', '未完成') }}</el-tag>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@ -97,7 +103,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { getBaseInfoNew, qualitynewDeviceOutputQuality, getNewestFiveInfo } from "@/api/home";
|
import { getBaseInfoNew, halfHourOutputPassInfo, getNewestFiveInfo,getTensionInfo } from "@/api/home";
|
||||||
|
|
||||||
import { getCurrentInstance } from "vue";
|
import { getCurrentInstance } from "vue";
|
||||||
|
|
||||||
|
|
||||||
@ -106,7 +113,7 @@ let pass = ref([0]);
|
|||||||
let noPass = ref([0]);
|
let noPass = ref([0]);
|
||||||
let bar_option = ref({
|
let bar_option = ref({
|
||||||
title: {
|
title: {
|
||||||
text: proxy.tLang('home','产量'),
|
text: proxy.tLang('home', '产量'),
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#797979'
|
color: '#797979'
|
||||||
},
|
},
|
||||||
@ -118,7 +125,7 @@ let bar_option = ref({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
data: [proxy.tLang('common','合格'), proxy.tLang('common','不合格')],
|
data: [proxy.tLang('common', '合格'), proxy.tLang('common', '不合格')],
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#797979'
|
color: '#797979'
|
||||||
},
|
},
|
||||||
@ -156,7 +163,7 @@ let bar_option = ref({
|
|||||||
],
|
],
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
name: proxy.tLang('common','合格'),
|
name: proxy.tLang('common', '合格'),
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
stack: 'Ad',
|
stack: 'Ad',
|
||||||
shape: 'circle',
|
shape: 'circle',
|
||||||
@ -169,7 +176,7 @@ let bar_option = ref({
|
|||||||
data: [0]
|
data: [0]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: proxy.tLang('common','不合格'),
|
name: proxy.tLang('common', '不合格'),
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
stack: 'Ad',
|
stack: 'Ad',
|
||||||
shape: 'circle',
|
shape: 'circle',
|
||||||
@ -177,7 +184,7 @@ let bar_option = ref({
|
|||||||
focus: 'series'
|
focus: 'series'
|
||||||
},
|
},
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: '#5470c6'
|
color: '#c81623'
|
||||||
},
|
},
|
||||||
data: [0],
|
data: [0],
|
||||||
label: {
|
label: {
|
||||||
@ -195,32 +202,49 @@ let bar_option = ref({
|
|||||||
|
|
||||||
let line_option = ref({
|
let line_option = ref({
|
||||||
title: {
|
title: {
|
||||||
text: proxy.tLang('home','张力值'),
|
text: proxy.tLang('home', '张力值'),
|
||||||
left: '0',
|
left: '0',
|
||||||
textStyle: {
|
textStyle: {
|
||||||
color: '#000'
|
color: '#000'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
name: proxy.tLang('home','针数'),
|
name: proxy.tLang('home', '针数'),
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
|
data: [1],
|
||||||
|
boundaryGap: false,
|
||||||
|
axisLine: {
|
||||||
|
onZero: false //-----------重点
|
||||||
|
}
|
||||||
},
|
},
|
||||||
yAxis: {
|
yAxis: {
|
||||||
name: proxy.tLang('home','张力'),
|
name: proxy.tLang('home', '张力'),
|
||||||
type: 'value'
|
type: 'value',
|
||||||
|
min: -10,
|
||||||
|
max: 10
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
data: [820, 932, 901, 934, 1290, 1330, 1320],
|
name: proxy.tLang('home', '针1'),
|
||||||
|
data: [0],
|
||||||
|
type: 'line',
|
||||||
|
smooth: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: proxy.tLang('home', '针2'),
|
||||||
|
data: [0],
|
||||||
type: 'line',
|
type: 'line',
|
||||||
smooth: true
|
smooth: true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
let timer = null;
|
let timer = null;
|
||||||
let info = ref({});
|
let info = ref({});
|
||||||
let qualityList = ref([]);
|
let qualityList = ref([]);
|
||||||
|
let barChart = ref(null);
|
||||||
|
let lineChart = ref(null);
|
||||||
|
|
||||||
function getData() {
|
function getData() {
|
||||||
getNewestFiveInfo().then(res => {
|
getNewestFiveInfo().then(res => {
|
||||||
qualityList.value = res.data;
|
qualityList.value = res.data;
|
||||||
@ -228,12 +252,25 @@ function getData() {
|
|||||||
getBaseInfoNew().then(res => {
|
getBaseInfoNew().then(res => {
|
||||||
info.value = res.data;
|
info.value = res.data;
|
||||||
});
|
});
|
||||||
qualitynewDeviceOutputQuality().then(res => {
|
getTensionInfo().then(res => {
|
||||||
|
let round = [];
|
||||||
|
let one = [];
|
||||||
|
let two = [];
|
||||||
|
res.data.forEach(item => {
|
||||||
|
round.push(item.round);
|
||||||
|
one.push(...item.one);
|
||||||
|
two.push(...item.two);
|
||||||
|
});
|
||||||
|
line_option.value.xAxis.data = one.map((item, index) => index + 1);
|
||||||
|
line_option.value.series[0].data = one;
|
||||||
|
line_option.value.series[1].data = two;
|
||||||
|
})
|
||||||
|
halfHourOutputPassInfo().then(res => {
|
||||||
pass.value = res.data.pass;
|
pass.value = res.data.pass;
|
||||||
noPass.value = res.data.noPass;
|
noPass.value = res.data.noPass;
|
||||||
bar_option.value.series[0].data = res.data.pass;
|
bar_option.value.series[0].data = res.data.pass;
|
||||||
bar_option.value.series[1].data = res.data.noPass;
|
bar_option.value.series[1].data = res.data.noPass;
|
||||||
bar_option.value.xAxis[0].data = res.data.time;
|
bar_option.value.xAxis[0].data = res.data.timePass;
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
value-format="YYYY-MM-DD hh:mm:ss" :placeholder="tLang('common', '请选择') + tLang('produce', '结束时间')">
|
value-format="YYYY-MM-DD hh:mm:ss" :placeholder="tLang('common', '请选择') + tLang('produce', '结束时间')">
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="tLang('produce','批次')" prop="batch">
|
<el-form-item :label="tLang('produce','批次')" prop="batch">
|
||||||
<el-input v-model="queryParams.batch" :placeholder="tLang('common', '请输入') + tLang('produce', '批次')"
|
<el-input v-model="queryParams.batch" :placeholder="tLang('common', '请输入') + tLang('produce', '批次')"
|
||||||
clearable @keyup.enter="handleQuery" />
|
clearable @keyup.enter="handleQuery" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
@ -1,26 +1,26 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="props.modelValue" title="设备详情" @close="close" width="800">
|
<el-dialog v-model="props.modelValue" title="设备详情" @close="close" width="800">
|
||||||
<el-descriptions title="" column="2">
|
<el-descriptions title="" column="2">
|
||||||
<el-descriptions-item label="产品名称">{{ props.info.productionName }}</el-descriptions-item>
|
<el-descriptions-item :label="tLang('product','产品名称')">{{ props.info.productionName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="产品编码">{{ props.info.productionCode }}</el-descriptions-item>
|
<el-descriptions-item :label="tLang('product','产品编码')">{{ props.info.productionCode }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="产品类型">{{ props.info.type }}</el-descriptions-item>
|
<el-descriptions-item :label="tLang('product','产品类型')">{{ props.info.type }}</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="设备名称">{{ props.info.deviceName }}</el-descriptions-item>
|
<el-descriptions-item :label="tLang('device','设备名称')">{{ props.info.deviceName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="设备编码">{{ props.info.deviceCode }}</el-descriptions-item>
|
<el-descriptions-item :label="tLang('device','设备编码')">{{ props.info.deviceCode }}</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="员工姓名">{{ props.info.userName }}</el-descriptions-item>
|
<el-descriptions-item :label="tLang('user','员工姓名')">{{ props.info.userName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="员工编码">{{ props.info.userCode }}</el-descriptions-item>
|
<el-descriptions-item :label="tLang('produce','员工编号')">{{ props.info.userCode }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="目标产量">{{ props.info.planOutput }}</el-descriptions-item>
|
<el-descriptions-item :label="tLang('produce','目标产量')">{{ props.info.planOutput }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="实时产量">{{ props.info.output }}</el-descriptions-item>
|
<el-descriptions-item :label="tLang('produce','当前产量')">{{ props.info.output }}</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="开始时间">{{ props.info.starttime }}</el-descriptions-item>
|
<el-descriptions-item :label="tLang('produce','开始时间')">{{ props.info.starttime }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="结束时间">{{ props.info.endtime }}</el-descriptions-item>
|
<el-descriptions-item :label="tLang('produce','结束时间')">{{ props.info.endtime }}</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
<el-descriptions title="" column="1">
|
<el-descriptions title="" column="1">
|
||||||
<el-descriptions-item label="备注信息">{{ props.info.remark }}</el-descriptions-item>
|
<el-descriptions-item :label="tLang('produce','备注')">{{ props.info.remark }}</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
<el-descriptions title="" column="">
|
<el-descriptions title="" column="">
|
||||||
<el-descriptions-item label="设备图片">
|
<el-descriptions-item :label="tLang('product','图片')">
|
||||||
<div v-if="props.info.file && props.info.file.length > 0" style="width: 100%;display: flex;flex-direction: row;justify-content: center;">
|
<div v-if="props.info.file && props.info.file.length > 0" style="width: 100%;display: flex;flex-direction: row;justify-content: center;">
|
||||||
<el-image v-for="(item, index) in props.info?.file.split(',')" :key="index" :src="baseUrl + item"
|
<el-image v-for="(item, index) in props.info?.file.split(',')" :key="index" :src="baseUrl + item"
|
||||||
style="width: 100px; height: 100px; margin-right: 10px; margin-bottom: 10px"
|
style="width: 100px; height: 100px; margin-right: 10px; margin-bottom: 10px"
|
||||||
|
Loading…
Reference in New Issue
Block a user