From eef1ef0be935d4a3d8fc691b2666f41796b2d4a5 Mon Sep 17 00:00:00 2001 From: gaoshp <291585735@qq.com> Date: 星期一, 04 十一月 2024 19:57:08 +0800 Subject: [PATCH] 增加列表显示 --- src/views/mdc/time-analysis.vue | 277 ++++++++++++++++++++++++++++--------------------------- 1 files changed, 140 insertions(+), 137 deletions(-) diff --git a/src/views/mdc/time-analysis.vue b/src/views/mdc/time-analysis.vue index 35be06c..169941b 100644 --- a/src/views/mdc/time-analysis.vue +++ b/src/views/mdc/time-analysis.vue @@ -2,20 +2,20 @@ * @Author: lzhe lzhe@example.com * @Date: 2024-04-26 09:36:18 * @LastEditors: lzhe lzhe@example.com - * @LastEditTime: 2024-06-03 11:21:32 + * @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-card shadow="never" style="height: 100%;" body-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-container> - <el-main class="nopadding"> - <div class="left-title">鏌ヨ鏉′欢</div> + <div class="left-title">鏌ヨ鏉′欢</div> + <el-main style="padding: 20px;"> <el-row> - <el-col style="margin-top: 14px;">鏃ユ湡</el-col> + <el-col style="margin-bottom: 12px;">鏃ユ湡</el-col> <el-col> <el-date-picker v-model="time" type="daterange" :shortcuts="shortcuts" range-separator="-" size="small" style="width: 100%;" value-format="YYYY-MM-DD"/> </el-col> @@ -35,12 +35,19 @@ </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"> <!-- 鏃ユ湡 --> @@ -49,9 +56,9 @@ </el-button-group> <div class="fact-analysis-realtim" v-if="setTitle.length == 0"> <div class="wimi-empty" v-if="isshowempty" style="background-color: rgb(255, 255, 255);"> - <div class="wimi-empty-img" style="width: 150px; height: 150px;"> + <!-- <div class="wimi-empty-img" style="width: 150px; height: 150px;"> <img src="./quesheng.bd026700.png" style="height: auto; width: 100%;"> - </div> + </div> --> <div class="empty-description"> <div>鏆傛棤鏁版嵁</div> </div> @@ -82,16 +89,16 @@ <el-tab-pane label="鎸夋椂闂村懆鏈熺粺璁�" name="time"> <div class="fact-analysis-realtim" v-if="setTitle.length == 0"> <div class="wimi-empty" v-if="isshowempty" style="background-color: rgb(255, 255, 255);"> - <div class="wimi-empty-img" style="width: 150px; height: 150px;"> + <!-- <div class="wimi-empty-img" style="width: 150px; height: 150px;"> <img src="./quesheng.bd026700.png" style="height: auto; width: 100%;"> - </div> + </div> --> <div class="empty-description"> <div>鏆傛棤鏁版嵁</div> </div> </div> </div> <!-- 鎸夋椂闂村懆鏈熺粺璁harts --> - <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"> @@ -120,96 +127,16 @@ </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> - <!-- <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> - <el-button-group > - <el-button @click="changeLeftTab(item)" :type="btnLeftctive == item.id ? 'primary' : ''" v-for="item in btnLeftList" :key="item.id" size="small">{{item.title }}</el-button> - </el-button-group> - <div class="MYTree"> - <MYTree v-if="btnLeftctive == '1'" getAll v-model="treeChecked" show-checkbox class="MYTree-content"></MYTree> - <el-tree v-if="btnLeftctive == '2'" :data="tree2" :expand-on-click-node="false" default-expand-all show-checkbox :props="{label: 'name', children: 'children'}" class="treeActive" @check="treeListNode" /> - </div> - <div class="footer"> - <el-button @click="query" type="primary">鏌ヨ</el-button> - <el-button @click="exportData">瀵煎嚭</el-button> - </div> - </div> - <div class="aposcope-right"> - <el-tabs tab-position="top" v-model="activeName" type="card" @tab-change="tabChange"> - <el-tab-pane label="鎸夌彮娆$粺璁�" name="shift"> - <el-button-group> - <el-button @click="changeTab(item)" :type="btnListActive == item.id ? 'primary' : ''" v-for="item in btnList" :key="item.id" size="small">{{item.title }}</el-button> - </el-button-group> - <div class="fact-analysis-realtim" v-if="setTitle.length == 0"> - <div class="wimi-empty" v-if="isshowempty" style="background-color: rgb(255, 255, 255);"> - <div class="wimi-empty-img" style="width: 150px; height: 150px;"> - <img src="./quesheng.bd026700.png" style="height: auto; width: 100%;"> - </div> - <div class="empty-description"> - <div>鏆傛棤鏁版嵁</div> - </div> - </div> - </div> - <div id="analysisA" v-if="setTitle.length != 0"> - <div class="demo-collapse"> - <el-collapse v-model="activeNames" accordion> - <el-collapse-item v-for="(item,index) in setTitle" :name="index + 1"> - <template #title> - <el-icon size="16" color="#3b8e8e"><Memo /></el-icon> - <span class="collr-title">鐝{{index + 1}}</span> - <el-button size="small">{{item.indexName}}</el-button> - </template> - <div> - <div :id="'recordwork' + item.shiftIndex" style="height:300px;"></div> - </div> - </el-collapse-item> - </el-collapse> - </div> - </div> - </el-tab-pane> - <el-tab-pane label="鎸夋椂闂村懆鏈熺粺璁�" name="time"> - <div class="fact-analysis-realtim" v-if="setTitle.length == 0"> - <div class="wimi-empty" v-if="isshowempty" style="background-color: rgb(255, 255, 255);"> - <div class="wimi-empty-img" style="width: 150px; height: 150px;"> - <img src="./quesheng.bd026700.png" style="height: auto; width: 100%;"> - </div> - <div class="empty-description"> - <div>鏆傛棤鏁版嵁</div> - </div> - </div> - </div> - <div id="analysisA" 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"> - <template #title> - <el-icon size="16" color="#3b8e8e"><Memo /></el-icon> - <span class="collr-title">{{item.name}}</span> - <el-button size="small" v-if="index != 0">{{item.indexName}}</el-button> - </template> - <div> - <el-button-group> - <el-button @click="changeTabB(item1,index,index1)" :type="item.btnListActive == item1.id ? 'primary' : ''" v-for="(item1,index1) in item.btnList" :key="item1.id" size="small">{{item1.title }}</el-button> - </el-button-group> - <div :id="'chartsB' + index" style="height:300px;"></div> - </div> - </el-collapse-item> - </el-collapse> - </div> - </div> - </el-tab-pane> - </el-tabs> - </div> - </div> --> </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) @@ -219,10 +146,12 @@ import MYTree from './MYTree.vue'; export default { components: { - ...ElementPlusIconsVue,MYTree + ...ElementPlusIconsVue,MYTree,exportDialog,Efficiency }, data() { return { + showModalList: [1], + dialogVisible: false, treeListNodeList: [], ids: [], activeNames: [], @@ -284,7 +213,6 @@ params.forEach(item=> { dom += `<div>${item.marker}${item.seriesName}锛�${item.data}%</div>` }) - console.log(params) return dom; } }, @@ -303,6 +231,9 @@ show: true, axisLabel: { formatter: function (value) { + if(value <= 1) { + value = value * 100; + } return value + "%"; } }, @@ -339,7 +270,10 @@ show: true, axisLabel: { formatter: function (value) { - return value * 100 + "%"; + if(value <= 1) { + value = value * 100; + } + return value + "%"; } }, data: [2,20,40,60,80,100] @@ -375,7 +309,10 @@ show: true, axisLabel: { formatter: function (value) { - return value * 100 + "%"; + if(value <= 1) { + value = value * 100; + } + return value + "%"; } }, data: [2,20,40,60,80,100] @@ -411,7 +348,10 @@ show: true, axisLabel: { formatter: function (value) { - return value * 100 + "%"; + if(value <= 1) { + value = value * 100; + } + return value + "%"; } }, data: [2,20,40,60,80,100] @@ -430,8 +370,29 @@ 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; } @@ -453,7 +414,7 @@ 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=> { @@ -555,7 +516,7 @@ }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=> { @@ -566,11 +527,11 @@ 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, @@ -582,6 +543,9 @@ 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; } @@ -590,7 +554,7 @@ }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; @@ -619,7 +583,7 @@ }) }, 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; } @@ -631,17 +595,21 @@ 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); // 鑾峰彇璇ユ湀浠界殑绗竴澶� @@ -649,8 +617,8 @@ // 鑾峰彇璇ユ湀浠界殑鏈�鍚庝竴澶� 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 + "鏈�")}); @@ -661,9 +629,11 @@ 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(), @@ -672,27 +642,30 @@ 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; @@ -700,6 +673,7 @@ 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) { @@ -707,13 +681,20 @@ } 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) { @@ -738,8 +719,10 @@ 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) { //鎸夊伐浣嶇粺璁� @@ -753,10 +736,6 @@ } 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]); } } } @@ -874,7 +853,7 @@ font-weight: bold; } .demo-collapse /deep/ .el-collapse-item__header { - background-color: #d8e8e8; + background-color: #7eb9f7; margin: 8px; height: 32px; padding-left: 16px; @@ -884,4 +863,28 @@ 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> \ No newline at end of file -- Gitblit v1.9.3