| | |
| | | * @Author: lzhe lzhe@example.com |
| | | * @Date: 2024-04-26 09:36:18 |
| | | * @LastEditors: lzhe lzhe@example.com |
| | | * @LastEditTime: 2024-06-05 11:37:24 |
| | | * @LastEditTime: 2024-11-04 12:11:01 |
| | | * @FilePath: /smart-web/src/views/mdc/status-record.vue |
| | | * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE |
| | | --> |
| | | <template> |
| | | <el-main style="height: 100%;"> |
| | | <el-main style="height: 100%;" class="timeAnalysis"> |
| | | <el-card shadow="never" style="height: 100%;" body-style="height: 100%;padding: 0;"> |
| | | <el-container style="height: 100%;"> |
| | | <el-aside width="300px" style="height: 100%;"> |
| | |
| | | </el-main> |
| | | <el-footer> |
| | | <el-button @click="query" type="primary">查询</el-button> |
| | | <el-button @click="exportData">导出</el-button> |
| | | <!-- <el-button @click="exportVisible = true">导出</el-button> --> |
| | | <exportDialog @export="exportExcel"></exportDialog> |
| | | </el-footer> |
| | | </el-container> |
| | | </el-aside> |
| | | <el-container> |
| | | <el-main> |
| | | <el-main style="position: relative;"> |
| | | <span class="setSpan"> |
| | | <el-icon class="setIcon"> |
| | | <Setting /> |
| | | </el-icon> |
| | | <span class="setBtn" @click="openSet">分析设置</span> |
| | | </span> |
| | | <el-tabs tab-position="top" v-model="activeName" type="card" @tab-change="tabChange"> |
| | | <el-tab-pane label="按班次统计" name="shift"> |
| | | <!-- 日期 --> |
| | |
| | | </div> |
| | | </div> |
| | | <!-- 按时间周期统计charts --> |
| | | <div id="analysisA" v-if="setTitle.length != 0"> |
| | | <div id="analysisB" v-if="setTitle.length != 0"> |
| | | <div class="demo-collapse"> |
| | | <el-collapse v-model="activeNames1" accordion> |
| | | <el-collapse-item v-for="(item,index) in setTitle1" :name="index + 1"> |
| | |
| | | </el-container> |
| | | </el-container> |
| | | </el-card> |
| | | <el-dialog title="设置" v-model="dialogVisible" v-if="dialogVisible" width="30%" class="setModelStyle"> |
| | | <Efficiency :showModalList="showModalList" /> |
| | | </el-dialog> |
| | | </el-main> |
| | | </template> |
| | | |
| | | <script> |
| | | import exportDialog from '@/layout/components/exportDialog.vue' |
| | | import * as ElementPlusIconsVue from '@element-plus/icons-vue' |
| | | import Efficiency from './configComp/Efficiency.vue' |
| | | let icons = [] |
| | | for (const [key, component] of Object.entries(ElementPlusIconsVue)) { |
| | | icons.push(key) |
| | |
| | | import MYTree from './MYTree.vue'; |
| | | export default { |
| | | components: { |
| | | ...ElementPlusIconsVue,MYTree |
| | | ...ElementPlusIconsVue,MYTree,exportDialog,Efficiency |
| | | }, |
| | | data() { |
| | | return { |
| | | showModalList: [1], |
| | | dialogVisible: false, |
| | | treeListNodeList: [], |
| | | ids: [], |
| | | activeNames: [], |
| | |
| | | params.forEach(item=> { |
| | | dom += `<div>${item.marker}${item.seriesName}:${item.data}%</div>` |
| | | }) |
| | | console.log(params) |
| | | return dom; |
| | | } |
| | | }, |
| | |
| | | show: true, |
| | | axisLabel: { |
| | | formatter: function (value) { |
| | | if(value <= 1) { |
| | | value = value * 100; |
| | | } |
| | | return value + "%"; |
| | | } |
| | | }, |
| | |
| | | show: true, |
| | | axisLabel: { |
| | | formatter: function (value) { |
| | | return value * 100 + "%"; |
| | | if(value <= 1) { |
| | | value = value * 100; |
| | | } |
| | | return value + "%"; |
| | | } |
| | | }, |
| | | data: [2,20,40,60,80,100] |
| | |
| | | show: true, |
| | | axisLabel: { |
| | | formatter: function (value) { |
| | | return value * 100 + "%"; |
| | | if(value <= 1) { |
| | | value = value * 100; |
| | | } |
| | | return value + "%"; |
| | | } |
| | | }, |
| | | data: [2,20,40,60,80,100] |
| | |
| | | show: true, |
| | | axisLabel: { |
| | | formatter: function (value) { |
| | | return value * 100 + "%"; |
| | | if(value <= 1) { |
| | | value = value * 100; |
| | | } |
| | | return value + "%"; |
| | | } |
| | | }, |
| | | data: [2,20,40,60,80,100] |
| | |
| | | this.getGlobal(); //获取颜色 |
| | | }, |
| | | methods: { |
| | | openSet() { |
| | | this.dialogVisible = true; |
| | | }, |
| | | exportExcel(statisticalMethod) { |
| | | var ids = []; |
| | | this.treeChecked.forEach(item=> { |
| | | ids.push(item.id); |
| | | }) |
| | | this.$HTTP.post(`/api/mdc/time-used-analysis/excel/export`, { |
| | | startTime: this.time[0], |
| | | endTime: this.time[1], |
| | | enums: statisticalMethod, |
| | | ids |
| | | }).then(res => { |
| | | if (res.success) { |
| | | window.open(res.data.link) |
| | | } else { |
| | | this.$message.error(res.msg) |
| | | } |
| | | }) |
| | | }, |
| | | getGlobal() { |
| | | this.$HTTP.get(`/api/blade-cps/global_wcs/list`).then(res=> { |
| | | this.$HTTP.get(`/api/smis/global_wcs/list`).then(res=> { |
| | | if(res.code == 200) { |
| | | this.getGlobalColorList = res.data; |
| | | } |
| | |
| | | type: 1 |
| | | } |
| | | } |
| | | this.$HTTP.post(`/api/blade-mdc/time-used-analysis/workstation/shiftName`,obj).then(res=> { |
| | | this.$HTTP.post(`/api/mdc/time-used-analysis/workstation/shiftName`,obj).then(res=> { |
| | | if(res.code == 200) { |
| | | this.setTitle = res.data.shiftDetails; |
| | | res.data.shiftDetails.forEach(item=> { |
| | |
| | | }else if(this.btnLeftctive == 2) { //按工位组统计 |
| | | obj.type = 1; |
| | | } |
| | | this.$HTTP.post(`/api/blade-mdc/time-used-analysis/work-stations?current=${this.current}&size=${this.size}`,obj).then(res=> { |
| | | this.$HTTP.post(`/api/mdc/time-used-analysis/work-stations?current=${this.current}&size=${this.size}`,obj).then(res=> { |
| | | if(res.code == 200) { |
| | | var xAxis = []; |
| | | res.data.workStationDetails.forEach(item=> { |
| | |
| | | this.chartOptionA.series = this.formatChartData(res.data.countStatus); |
| | | var myChart = echarts.init(recordDom); |
| | | myChart.setOption(this.chartOptionA); |
| | | console.log(JSON.stringify(this.chartOptionA)) |
| | | } |
| | | }) |
| | | }, |
| | | getDataChartsB(enums,month) { |
| | | console.log(enums,month,this.date) |
| | | var obj = { |
| | | enums: enums, |
| | | groupCategory: 1, |
| | |
| | | week: moment(this.date).get('week'), |
| | | year: moment(this.date).get('year') |
| | | } |
| | | if(enums == "WEEK") { |
| | | obj.week = this.setTitle1[1].btnListActive.split("-")[1]; |
| | | } |
| | | if(month) { |
| | | obj.month = month; |
| | | } |
| | |
| | | }else if(this.btnLeftctive == 2) { //按工位组统计 |
| | | obj.type = 1; |
| | | } |
| | | this.$HTTP.post(`/api/blade-mdc/time-used-analysis/work-stations?current=${this.current}&size=${this.size}`,obj).then(res=> { |
| | | this.$HTTP.post(`/api/mdc/time-used-analysis/work-stations?current=${this.current}&size=${this.size}`,obj).then(res=> { |
| | | if(res.code == 200) { |
| | | var xAxis = []; |
| | | res.data.workStationDetails == null ? res.data.workStationDetails = [] : res.data.workStationDetails; |
| | |
| | | }) |
| | | }, |
| | | getTree2List() { //按工位组统计 |
| | | this.$HTTP.get(`/api/blade-cps/group/tree?groupCategory=1&groupType=group_workstation`).then(res=> { |
| | | this.$HTTP.get(`/api/smis/group/tree?groupCategory=1&groupType=group_workstation`).then(res=> { |
| | | if(res.code == 200) { |
| | | this.tree2 = res.data; |
| | | } |
| | |
| | | changeLeftTab(item) { |
| | | this.btnLeftctive = item.id; |
| | | this.ids = []; |
| | | if(item.id == 2) { //按工位统计树 |
| | | this.getTree2List(); |
| | | } |
| | | }, |
| | | tabChange(val) { |
| | | this.activeName = val; |
| | | if(val == "time") { //按时间周期统计 |
| | | var len = this.btnList.length; |
| | | if(this.setTitle.length != 0) { |
| | | var obj = { |
| | | endDate: this.btnList[0].id, |
| | | startDate: this.btnList[0].id, |
| | | startDate: this.btnList[len-1].id, |
| | | statisticalMethod: "WEEK" |
| | | } |
| | | this.$HTTP.post(`/api/blade-mdc/efficiency-analysis/interval`,obj).then(res=> { |
| | | this.$HTTP.post(`/api/mdc/efficiency-analysis/interval`,obj).then(res=> { |
| | | if(res.code == 200) { |
| | | var dateInJuly = moment(this.btnList[0].id); |
| | | // 获取该月份的第一天 |
| | |
| | | // 获取该月份的最后一天 |
| | | var lastDayOfJuly = dateInJuly.endOf('month').format('YYYY-MM-DD'); |
| | | //跨月 |
| | | var startDate = moment(res.data[0].startDate).month() + 1; |
| | | var endDate = moment(res.data[0].endDate).month() + 1; |
| | | var startDate = moment(this.btnList[this.btnList.length - 1].id).month() + 1; |
| | | var endDate = moment(this.btnList[0].id).month() + 1; |
| | | var arrMonth = []; |
| | | for (var i = startDate; i <= endDate; i++) { |
| | | arrMonth.push({title: (i + "月"),id: (i + "月")}); |
| | |
| | | name: '按日查看', |
| | | btnListActive: this.btnList[0].id |
| | | },{ |
| | | btnList: [{title:moment(this.date).get('week') + "周",id: moment(this.date).get('week') + "周"}], |
| | | //btnList: [{title:moment(this.date).get('week') + "周",id: moment(this.date).get('week') + "周"}], |
| | | //btnListActive: moment(this.date).get('week') + "周", |
| | | btnList: res.data, |
| | | name: '按周查看', |
| | | btnListActive: moment(this.date).get('week') + "周", |
| | | btnListActive: res.data[0].id, |
| | | indexName : res.data[0].startDate + "至" + res.data[0].endDate |
| | | },{ |
| | | btnList: arrMonth.reverse(), |
| | |
| | | indexName : firstDayOfJuly + "至" + lastDayOfJuly |
| | | }); |
| | | this.setTitle1 = arr; |
| | | this.getDataChartsB("DAY"); |
| | | this.getDataChartsB("MONTH"); |
| | | this.getDataChartsB("WEEK"); |
| | | this.date = this.btnList[0].id; |
| | | this.$nextTick(()=> { |
| | | this.getDataChartsB("DAY"); |
| | | this.getDataChartsB("MONTH"); |
| | | this.getDataChartsB("WEEK"); |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | }else if(val == "shift") { //按班次统计 |
| | | |
| | | this.query(); |
| | | } |
| | | }, |
| | | exportData() { //导出 |
| | | var obj = { |
| | | endTime: this.time[1], |
| | | startTime: this.time[0], |
| | | workstationInfoList: this.workstationInfoList |
| | | } |
| | | this.$HTTP.post(`/api/blade-mdc/status-record/excel/export`,obj).then(res=> { |
| | | if(res.code == 200) { |
| | | window.open(res.data.link); |
| | | } |
| | | }) |
| | | // var obj = { |
| | | // endTime: this.time[1], |
| | | // startTime: this.time[0], |
| | | // workstationInfoList: this.workstationInfoList |
| | | // } |
| | | // this.$HTTP.post(`/api/mdc/time-used-analysis/excel/export`,obj).then(res=> { |
| | | // if(res.code == 200) { |
| | | // window.open(res.data.link); |
| | | // } |
| | | // }) |
| | | }, |
| | | changeTab(item) { |
| | | this.btnListActive = item.id; |
| | |
| | | this.getDataA(); |
| | | }, |
| | | changeTabB(item,index,index1) { |
| | | console.log(item,index,index1,this.setTitle1); |
| | | this.setTitle1[index].btnListActive = item.id; |
| | | this.date = this.setTitle1[0].btnListActive; |
| | | if(index == 0) { |
| | |
| | | } |
| | | if(index == 1) { |
| | | this.getDataChartsB("WEEK"); |
| | | this.setTitle1[index].indexName = item.startDate + "至" + item.endDate |
| | | } |
| | | if(index == 2) { //月 |
| | | var dateInJuly = moment(this.setTitle1[index].indexName.split("-")[0] + "-" + this.setTitle1[index].btnListActive.replace("月","") + "-01"); |
| | | // 获取该月份的第一天 |
| | | var firstDayOfJuly = dateInJuly.startOf('month').format('YYYY-MM-DD'); |
| | | // 获取该月份的最后一天 |
| | | var lastDayOfJuly = dateInJuly.endOf('month').format('YYYY-MM-DD'); |
| | | this.setTitle1[index].indexName = firstDayOfJuly + "至" + lastDayOfJuly; |
| | | this.getDataChartsB("MONTH",this.setTitle1[2].btnListActive.split("月")[0]); |
| | | } |
| | | }, |
| | | getTime(data) { |
| | | this.$HTTP.post('/api/blade-mdc/efficiency-analysis/interval', { |
| | | this.$HTTP.post('/api/mdc/efficiency-analysis/interval', { |
| | | ...data |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | |
| | | this.date = this.time[1]; |
| | | }, |
| | | query() { |
| | | console.log(this.activeName) |
| | | this.getTime({endDate: this.time[1],startDate: this.time[0],statisticalMethod: 'SHIFT'}); |
| | | this.getTime({endDate: this.time[1],startDate: this.time[0],statisticalMethod: "SHIFT"}); |
| | | if(this.activeName != "shift") { |
| | | this.tabChange("time"); |
| | | } |
| | | this.date = this.time[1]; |
| | | this.ids = []; |
| | | if(this.btnLeftctive == 1) { //按工位统计 |
| | |
| | | } |
| | | if(this.activeName == "shift") { //按班次统计 |
| | | this.getDataA(); |
| | | }else if(this.activeName == "time") { //按周期统计 |
| | | this.getDataChartsB("DAY"); |
| | | this.getDataChartsB("WEEK"); |
| | | this.getDataChartsB("MONTH",this.setTitle1[2].btnListActive.split("月")[0]); |
| | | } |
| | | } |
| | | } |
| | |
| | | font-weight: bold; |
| | | } |
| | | .demo-collapse /deep/ .el-collapse-item__header { |
| | | background-color: #d8e8e8; |
| | | background-color: #7eb9f7; |
| | | margin: 8px; |
| | | height: 32px; |
| | | padding-left: 16px; |
| | |
| | | margin: 8px; |
| | | padding-left: 16px; |
| | | } |
| | | .setSpan { |
| | | vertical-align: sub; |
| | | font-size: 14px; |
| | | position: absolute; |
| | | top: 26px; |
| | | left: 280px; |
| | | z-index: 11; |
| | | } |
| | | .setIcon { |
| | | color: #409eff; |
| | | margin-left: 15px; |
| | | vertical-align: -2px; |
| | | } |
| | | .setBtn { |
| | | margin-left: 2px; |
| | | color: #409eff; |
| | | margin-left: 8px; |
| | | cursor: pointer; |
| | | font-size: 14px; |
| | | } |
| | | .timeAnalysis >>> .el-dialog__body { |
| | | padding-bottom: 0px; |
| | | padding-top: 0px; |
| | | } |
| | | </style> |