<template>
|
<div class="aposcope-main">
|
<div class="aposcope-left">
|
<div class="left-title">查询条件</div>
|
<div class="left-title-col">日期</div>
|
<el-date-picker v-model="time" type="daterange" :shortcuts="shortcuts" range-separator="-" size="small" style="width: 100%;" value-format="YYYY-MM-DD"/>
|
<div class="left-title-col">工位</div>
|
<div class="MYTree">
|
<MYTree v-model="treeChecked" show-checkbox class="MYTree-content"></MYTree>
|
</div>
|
<div class="footer">
|
<el-button @click="query" type="primary">查询</el-button>
|
<el-button>导出</el-button>
|
</div>
|
</div>
|
<div class="aposcope-right">
|
<el-tabs tab-position="top" v-model="activeName" type="card">
|
<el-tab-pane label="按日期查看" name="shift">
|
<el-button-group>
|
<el-button @click="btnListActive = item.id" :type="btnListActive == item.id ? 'primary' : ''" v-for="item in btnList" :key="item.id" size="small">{{item.title }}</el-button>
|
</el-button-group>
|
<div class="status">
|
<div class="status-wrap align-left">
|
<div class="collect-status">采集状态</div>
|
<div class="status-box" v-for="item in achievements"><div class="status-color" :style="{'background-color': item.color}"></div>{{ item.name }}</div>
|
</div>
|
<div class="status-wrap">
|
<el-checkbox v-model="checked1" label="人工反馈状态" size="large" />
|
<div class="status-con">
|
<div class="status-box" v-for="item in collectionstatus"><div class="status-color" :style="{'background-color': item.color}"></div>{{ item.name }}</div>
|
</div>
|
</div>
|
</div>
|
<div>
|
<div id="record" style="width: 100%;height:500px;"></div>
|
</div>
|
<div class="pagination">
|
<el-pagination layout="prev, pager, next" :total="total" :default-page-size="6"/>
|
</div>
|
</el-tab-pane>
|
<el-tab-pane label="按工位查看" name="time">
|
按工位查看
|
</el-tab-pane>
|
</el-tabs>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
// 模拟数据,表示每个小时的占用情况
|
var data = [];
|
for (var i = 0; i < 24; i++) {
|
data.push(Math.random() * 100); // 随机生成占用指数
|
}
|
import moment from 'moment';
|
import MYTree from './MYTree.vue'
|
import Shift from './components/Shift.vue'
|
import Time from './components/Time.vue'
|
import * as echarts from 'echarts';
|
export default {
|
components: {
|
time: "",
|
MYTree,
|
Shift,
|
Time
|
},
|
watch: {
|
activeName() {
|
// this.$nextTick(() => {
|
// this.query()
|
// })
|
},
|
btnListActive(val) {
|
// this.query({
|
// ...this.params,
|
// startDate: val,
|
// endDate: val
|
// })
|
// this.queryChart({
|
// ...this.params,
|
// startDate: val,
|
// endDate: val
|
// })
|
}
|
},
|
data() {
|
return {
|
workstationInfoList: [],
|
checked1: true,
|
btnListActive: '',
|
btnList: [],
|
timeBtn: "",
|
shortcuts: [
|
{
|
text: '最近3天',
|
value: () => {
|
const end = new Date()
|
const start = new Date()
|
start.setDate(start.getDate() - 3)
|
return [start, end]
|
},
|
},
|
{
|
text: '最近7天',
|
value: () => {
|
const end = new Date()
|
const start = new Date()
|
start.setMonth(start.getDate() - 7)
|
return [start, end]
|
},
|
},
|
{
|
text: '最近一个月',
|
value: () => {
|
const end = new Date()
|
const start = new Date()
|
start.setMonth(start.getMonth() - 1)
|
return [start, end]
|
},
|
},
|
],
|
activeName: 'shift',
|
time: [],
|
treeChecked: [],
|
achievements: [],
|
collectionstatus: [],
|
current: "1",
|
size: "6",
|
total: 0,
|
recordOptionLog: {
|
tooltip: {
|
trigger: 'axis',
|
axisPointer: { // 坐标轴指示器,坐标轴触发有效
|
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
},
|
formatter: function (params) {
|
var tar;
|
if (params[1].value != '-') {
|
tar = params[1];
|
}
|
else {
|
tar = params[0];
|
}
|
return tar.name + '<br/>' + tar.seriesName + ' : ' + tar.value;
|
}
|
},
|
grid: {
|
top: 10
|
},
|
yAxis: {
|
type: 'category',
|
axisLabel: {
|
formatter: function (value) {
|
return value + "\n" + '{a|状态反馈}';
|
},
|
rich: {
|
a: {
|
color: '#409eff',
|
cursor: 'pointer',
|
fontSize: '12px'
|
}
|
}
|
},
|
//data: ['461', '462', '516', '517', '512', '513']
|
data: ['461', '462', '516']
|
},
|
xAxis: {
|
type: 'value',
|
min: 0,
|
max: 1440, // 单位分钟
|
interval: 1440/6, //每隔多少分钟显示一个刻度
|
axisLabel: {
|
formatter: (value)=> {
|
if(value == 0) {
|
return "00:00:00";
|
}else if(value == 240) {
|
return "04:00:00";
|
}else if(value == 480) {
|
return "08:00:00";
|
}else if(value == 720) {
|
return "12:00:00";
|
}else if(value == 960) {
|
return "16:00:00";
|
}else if(value == 1200) {
|
return "18:00:00";
|
}else if(value == 1440) {
|
return "00:00:00";
|
}
|
}
|
}
|
},
|
series: [
|
{
|
name: '辅助',
|
type: 'bar',
|
stack: '总量',
|
itemStyle: {
|
borderColor: 'transparent',
|
color: 'transparent'
|
},
|
emphasis: {
|
itemStyle: {
|
borderColor: 'transparent',
|
color: 'transparent'
|
}
|
},
|
data: [0, 0, 0, 240, 360, 540] //从什么时候开始的
|
},
|
{
|
name: '时间',
|
type: 'bar',
|
stack: '总量',
|
label: {
|
normal: {
|
show: true,
|
position: 'top'
|
}
|
},
|
data: ['-', '-', '-', 1200, 240, 900] //数值是几,如(20,就是从4开始,20格数据)
|
}
|
]
|
}
|
}
|
},
|
created() {
|
|
},
|
mounted() {
|
this.getCharts();
|
//this.init();
|
},
|
methods: {
|
getachievements() { //班次状态记录采集状态
|
this.$HTTP.get(`/api/blade-cps/global_wcs/wcs-achievements`).then(res=> {
|
if(res.code == 200) {
|
var achievements = [];//采集状态
|
var collectionstatus = []; //人工反馈状态
|
res.data.forEach(item=> {
|
if(item.type == 1) {
|
achievements.push(item);
|
}
|
if(item.type == 4) {
|
collectionstatus.push(item);
|
}
|
})
|
this.achievements = achievements;
|
this.collectionstatus = collectionstatus;
|
}
|
})
|
},
|
getTime(data) {
|
this.$HTTP.post('/api/blade-mdc/efficiency-analysis/interval', {
|
...data
|
}).then(res => {
|
if (res.code === 200) {
|
var today = moment().format('YYYY-MM-DD');
|
var yesterday = moment().subtract(1, 'days').format('YYYY-MM-DD');
|
res.data.forEach(item=> {
|
if(item.title == today) {
|
item.title = "今天";
|
}
|
if(item.title == yesterday) {
|
item.title = "昨天";
|
}
|
})
|
this.btnList = res.data.reverse();
|
this.btnListActive = res?.data?.[0]?.id
|
}
|
})
|
},
|
getCharts() {
|
var obj = {
|
//date: this.time[1],
|
date: "2024-04-16",
|
humanFeedback: true,
|
machineFeedback: true,
|
workstationInfoList: this.workstationInfoList
|
}
|
var recordDom = document.getElementById('record');
|
var myChart = echarts.init(recordDom);
|
myChart.setOption(this.recordOptionLog);
|
//添加dom,定位
|
var parentNodeDom = document.createElement('div');
|
recordDom.appendChild(parentNodeDom);
|
for(var i=0;i<this.recordOptionLog.yAxis.data.length;i++) {
|
var dom = document.createElement('span');
|
dom.className = "domSpan spanIndex" + i;
|
dom.style.top = i*70 + 40 + "px";
|
parentNodeDom.appendChild(dom);
|
}
|
//删除dom
|
//parentNodeDom.remove();
|
return;
|
this.$HTTP.post(`/api/blade-mdc/status-record/status-record-by-date?current=${this.current}&size=${this.size}`,obj).then(res => {
|
if (res.code === 200) {
|
//this.recordOptionLog.series[0].data = res.data.records.statusRecordList;
|
// var yAxis = [];
|
// res.data.records.forEach(item=> {
|
// item.value = item.workstationInfo.name;
|
// })
|
// this.recordOptionLog.yAxis.data = res.data.records;
|
this.total = res.data.total;
|
}
|
})
|
},
|
init() {
|
this.time = [moment().subtract(2, 'days').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')];
|
this.getTime({endDate: this.time[1],startDate: this.time[0],statisticalMethod: 'SHIFT'}); //日期sort
|
this.getachievements(); //采集状态or人工反馈状态
|
this.getCharts();
|
},
|
timeBtnChange() {
|
|
},
|
query() {
|
this.getTime({endDate: this.time[1],startDate: this.time[0],statisticalMethod: 'SHIFT'});
|
//this.getCharts();
|
console.log(this.treeChecked,2)
|
}
|
}
|
}
|
</script>
|
|
<style scoped>
|
.aposcope-main {
|
display: flex;
|
min-height: 100%;
|
height: 100%;
|
overflow: hidden;
|
margin: 8px;
|
}
|
.aposcope-left {
|
position: relative;
|
width: 240px;
|
margin-right: 8px;
|
padding: 4px;
|
height: 100%;
|
background-color: #fff;
|
border-radius: 2px;
|
overflow: hidden;
|
}
|
.aposcope-right {
|
flex: 1;
|
padding: 8px;
|
background-color: #fff;
|
}
|
.left-title {
|
font-size: 16px;
|
text-align: center;
|
height: 38px;
|
line-height: 38px;
|
border-bottom: 1px solid #e2e2e2;
|
background-color: #409eff;
|
color: #fff;
|
border-radius: 2px 2px 0 0;
|
}
|
.left-title-col {
|
margin-bottom: 8px;
|
font-size: 14px;
|
margin-top: 8px;
|
}
|
.footer {
|
padding: 0px 32px;
|
border-radius: 0 0 2px 2px;
|
background: #fff;
|
box-shadow: -1px 0 3px rgba(92, 92, 92, .16);
|
height: 48px;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
position: absolute;
|
bottom: 0;
|
left: 0;
|
width: 100%;
|
padding: 0 10px;
|
box-sizing: border-box;
|
z-index: 99;
|
}
|
.MYTree {
|
height: calc(100% - 200px);
|
overflow: hidden;
|
overflow-y: auto;
|
}
|
.status {
|
display: flex;
|
align-items: start;
|
flex-direction: column;
|
justify-content: start;
|
margin: 20px 0 8px;
|
position: relative;
|
width: 100%;
|
font-size: 16px;
|
cursor: pointer;
|
}
|
.status-wrap.align-left, .status-wrap:first-child {
|
padding-left: 24px;
|
}
|
.status-wrap {
|
display: flex;
|
flex-wrap: wrap;
|
justify-content: start;
|
}
|
.collect-status {
|
color: #409eff;
|
margin-right: 16px;
|
font-size: 14px;
|
}
|
.status-box {
|
margin: 0 8px;
|
display: flex;
|
align-items: center;
|
justify-content: flex-start;
|
}
|
.status-color {
|
width: 40px;
|
height: 15px;
|
border-radius: 2px;
|
margin-right: 8px;
|
}
|
.status-wrap .status-con {
|
display: flex;
|
flex: 1;
|
flex-wrap: wrap;
|
}
|
.status-wrap /deep/ .el-checkbox.el-checkbox--large {
|
color: #3b8e8e;
|
}
|
.pagination {
|
text-align: right;
|
display: flex;
|
justify-content: end;
|
}
|
#record {
|
background: red;
|
position: re lative;
|
}
|
#record /deep/ .domSpan {
|
display: inline-block;
|
width: 60px;
|
height: 20px;
|
background: green;
|
position: absolute;
|
left: 55px;
|
}
|
</style>
|