From fc4b9d3aec93c8552484f2264689c68662e0d3aa Mon Sep 17 00:00:00 2001
From: lzhe <lzhe@example.com>
Date: 星期四, 25 四月 2024 09:14:46 +0800
Subject: [PATCH] Merge branch 'master' of http://www.beijingsoft.cn:9090/r/smart-web

---
 src/views/mdc/processParam/index.vue    |  238 ++++++++++++++++++++++++++++++++++++++-
 src/views/mdc/processParam/TimeLine.vue |   88 +++++++++++---
 2 files changed, 300 insertions(+), 26 deletions(-)

diff --git a/src/views/mdc/processParam/TimeLine.vue b/src/views/mdc/processParam/TimeLine.vue
index 85b34ab..9cbf4c6 100644
--- a/src/views/mdc/processParam/TimeLine.vue
+++ b/src/views/mdc/processParam/TimeLine.vue
@@ -1,11 +1,11 @@
 <!--
  * @Date: 2024-04-23 20:03:41
  * @LastEditors: Sneed
- * @LastEditTime: 2024-04-23 23:03:45
+ * @LastEditTime: 2024-04-24 20:48:55
  * @FilePath: /belleson-frontend/Users/mache/Documents/demo/cps-web/src/views/mdc/processParam/TimeLine.vue
 -->
 <template>
-    <el-main>
+    <el-main style="padding: 0 30px;">
         <el-row>
             <el-col :span="1">
                 <el-slider v-model="step" :min="1" :max="4" :step="1" show-stops />
@@ -14,7 +14,8 @@
         <div class="timeline-box">
             <div class="timeline-box-item" v-for="item in dateList" :key="item.startTime" :style="{
                 width: item.width + '%',
-                background: item.color
+                background: item.color,
+                left: item.left + '%'
             }">
                 {{ item.shiftName }}
             </div>
@@ -24,7 +25,10 @@
                 last: lines.length - 1 === index,
                 active: index === active
             }" v-for="(item, index) in lines" :key="index">
-                <!-- {{ item.title }} -->
+                <div class="title">{{ item.title }}</div>
+                <div class="date">
+                    <p>{{ item.date }}</p>
+                </div>
             </div>
         </div>
     </el-main>
@@ -56,10 +60,17 @@
         },
         changeActive(index) {
             this.active = index
+            this.$emit('update:modelValue', this.lines[index])
         },
         getColor(v) {
             if (v.shiftIndex === 1) return { color: 'rgb(211, 174, 248)' }
             return { color: 'rgb(233, 241, 208)' }
+        },
+        setDate(v) {
+            if (moment(v.startTime).format('HH:mm:ss') === '00:00:00') return {
+                dateTitle: moment(v.startTime).format('MM-DD')
+            }
+            return {}
         },
         setLines() {
             this.lines = []
@@ -67,17 +78,16 @@
             let max = moment(`${this.params.dates[1]} 24:00:00`, 'YYYY-MM-DD HH:mm:ss')
             let total = max.diff(min)
             let lineNum = total / (this.step * 60 * 60 * 1000)
-            console.log(total, lineNum)
-            let date = ''
             for (let i = 0; i < lineNum; i++) {
-                let currentDate = min.add(this.step, 'h').format('YYYY-MM-DD')
+                let currentDate = min.format('MM-DD')
                 this.lines.push({
-                    date: currentDate === date ? '' : currentDate,
-                    title: min.format('HH:mm')
+                    date: min.format('HH:mm').endsWith('00:00') ? min.format('MM-DD') : '',
+                    title: min.format('HH:mm'),
+                    startTime: min.format('YYYY-MM-DD HH:mm:ss'),
+                    endTime: min.add(this.step, 'h').format('YYYY-MM-DD HH:mm:ss')
                 })
-                date = currentDate
+                this.changeActive(0)
             }
-            console.log(this.lines, '>>>>>>.1')
         },
         queryTime(data) {
             if (!data.workstationId) return
@@ -90,12 +100,14 @@
                     let full = moment(`${this.params.dates[0]} 00:00:00`, 'YYYY-MM-DD HH:mm:ss').diff(moment(`${this.params.dates[1]} 24:00:00`, 'YYYY-MM-DD HH:mm:ss'))
                     this.dateList = res.data.filter(v => {
                         return moment(v.startTime).isBetween(min, max) || moment(v.endTime).isBetween(min, max)
-                    }).map(v => {
+                    }).map((v, i) => {
                         if (moment(v.startTime).isBetween(min, max) && moment(v.endTime).isBetween(min, max)) {
                             let current = moment(v.startTime, 'YYYY-MM-DD HH:mm:ss').diff(moment(v.endTime, 'YYYY-MM-DD HH:mm:ss'))
                             return {
                                 ...v,
+                                left: moment(min, 'YYYY-MM-DD HH:mm:ss').diff(moment(v.startTime, 'YYYY-MM-DD HH:mm:ss')) / full * 100,
                                 ...this.getColor(v),
+                                ...this.setDate(v),
                                 width: (current / full * 100).toFixed(2)
                             }
                         } else if (moment(v.startTime).isBetween(min, max)) {
@@ -104,6 +116,8 @@
                                 ...v,
                                 ...this.getColor(v),
                                 endTime: max,
+                                ...this.setDate(v),
+                                left: moment(min, 'YYYY-MM-DD HH:mm:ss').diff(moment(v.startTime, 'YYYY-MM-DD HH:mm:ss')) / full * 100,
                                 width: (current / full * 100).toFixed(2)
                             }
                         } else {
@@ -112,12 +126,13 @@
                                 ...v,
                                 ...this.getColor(v),
                                 startTime: min,
+                                ...this.setDate(v),
+                                left: moment(min, 'YYYY-MM-DD HH:mm:ss').diff(moment(min, 'YYYY-MM-DD HH:mm:ss')) / full * 100,
                                 width: (current / full * 100).toFixed(2)
                             }
                         }
 
                     })
-                    console.log(this.dateList, '>>>>>>')
                 }
             })
         }
@@ -128,37 +143,70 @@
 <style lang="scss" scoped>
 .timeline-box {
     height: 20px;
-    display: flex;
+    // display: flex;
     position: relative;
+    background: #d8e8e8;
 
     &-item {
+        position: absolute;
+        height: 22px;
+        line-height: 22px;
         text-align: center;
-        flex: 0 0 auto;
     }
 
 }
 
 .timeline-line {
     display: flex;
-    height: 20px;
+    height: 50px;
     position: relative;
     top: -20px;
+    width: 100%;
 
     &-item {
         flex: 1 1 auto;
+        height: 20px;
         padding: 20px 3px 0;
         position: relative;
+        box-sizing: border-box;
+
+        border: 1px solid transparent;
+
+        &>div.title {
+            position: absolute;
+            z-index: 9;
+            top: 15px;
+            left: 0;
+            transform: rotate(-45deg) translateX(-50%);
+        }
+
+        &>div.date {
+            position: absolute;
+            z-index: 9;
+            top: 50px;
+            left: 0;
+            transform: translateX(-50%);
+
+            p {
+                white-space: pre;
+            }
+        }
+
+        &:hover,
+        &.active {
+            height: 18px;
+            box-sizing: border-box;
+            border: 1px solid red;
+        }
     }
 
-    .timeline-line-item:hover,
-    .timeline-line-item.active {
-        border: 1px solid red;
-    }
+
 
     &-item::before {
         content: "";
         position: absolute;
         left: 0;
+        top: 20px;
         width: 1px;
         height: 10px;
         background: #ccc;
diff --git a/src/views/mdc/processParam/index.vue b/src/views/mdc/processParam/index.vue
index 53a28f8..344ed62 100644
--- a/src/views/mdc/processParam/index.vue
+++ b/src/views/mdc/processParam/index.vue
@@ -1,7 +1,7 @@
 <!--
  * @Date: 2024-04-09 22:11:21
  * @LastEditors: Sneed
- * @LastEditTime: 2024-04-23 21:40:53
+ * @LastEditTime: 2024-04-24 23:41:35
  * @FilePath: /belleson-frontend/Users/mache/Documents/demo/cps-web/src/views/mdc/processParam/index.vue
  瀹炴椂鐪嬫澘
 -->
@@ -20,16 +20,40 @@
                     </el-container>
                 </el-aside>
                 <el-container>
-                    <el-main>
+                    <el-main v-show="list.length > 0">
                         <el-row>
-                            <el-col style='text-align: right;'>
+                            <el-col :span="4">
+                                <el-switch v-model="isShowTable" class="mb-2" active-text="鏁版嵁琛�" inactive-text="缁熻鍥�" />
+                            </el-col>
+                            <el-col :span="20" style='text-align: right;'>
                                 <el-date-picker :max-range="3" :clearable="false" value-format="YYYY-MM-DD"
                                     style="width: 250px" v-model="time" type="daterange" range-separator="-"
                                     start-placeholder="" end-placeholder="" :disabled-date="disabledDate"
                                     @calendar-change="change" />
                             </el-col>
                         </el-row>
-                        <TimeLine ref="timeLine"></TimeLine>
+                        <TimeLine v-model="timeRange" ref="timeLine"></TimeLine>
+                        <el-collapse v-model="activeList" accordion>
+                            <el-collapse-item :title="item.description" :name="index" v-for="(item, index) in list"
+                                :key="index">
+                                <div>
+                                    <el-button>鏌ョ湅鏁版嵁</el-button>
+                                </div>
+                                <scEcharts style="width:100%" height="300px" :option="dayCharts">
+                                </scEcharts>
+                                <!-- <scTable v-show="isShowTable" ref="table0" row-key="id" border :apiObj="item.apiObj"
+                                    stripe>
+                                    <el-table-column prop="alarmCode" label="鎶ヨ浠g爜" />
+                                    <el-table-column prop="alarmMsg" label="鎶ヨ淇℃伅" />
+                                    <el-table-column prop="count" label="鎶ヨ娆℃暟" />
+                                </scTable> -->
+                            </el-collapse-item>
+                        </el-collapse>
+                    </el-main>
+                    <el-main v-show="list.length == 0">
+                        <!-- <el-empty description="鏆傛棤鏁版嵁" /> -->
+                        <scEcharts style="width:100%" height="300px" :option="dayCharts">
+                        </scEcharts>
                     </el-main>
                 </el-container>
             </el-container>
@@ -39,12 +63,102 @@
 
 <script>
 import moment from 'moment'
+import scEcharts from '@/components/scEcharts';
 import TimeLine from './TimeLine.vue'
 import MYTree from '../MYTree.vue'
+const rawData = [
+    [100],
+    [320],
+    [220],
+    [150],
+    [820]
+]
+const totalData = [];
+for (let i = 0; i < rawData[0].length; ++i) {
+    let sum = 0;
+    for (let j = 0; j < rawData.length; ++j) {
+        sum += rawData[j][i];
+    }
+    totalData.push(sum);
+}
+const series = [
+    '杩愯',
+    '杩愯',
+    '杩愯',
+    '寰呮満',
+    '杩愯'
+].map((name, sid) => {
+    return {
+        name,
+        type: 'bar',
+        stack: 'total',
+        barWidth: '20px',
+        label: {
+            show: true,
+            formatter: (params) => Math.round(params.value * 1000) / 10 + '%'
+        },
+        data: rawData[sid].map((d, did) =>
+            totalData[did] <= 0 ? 0 : d / totalData[did]
+        )
+    };
+});
+// let data = {
+//     "collectItem": "璁惧鐘舵��",
+//     "collectRealItem": "DeviceStatus",
+//     "data": [
+//         {
+//             "time": "2024-04-24 10:00:00",
+//             "name": "杩愯",
+//             "color": "#73D13D",
+//             "value": "2"
+//         },
+//         {
+//             "time": "2024-04-24 10:30:00",
+//             "name": "杩愯",
+//             "color": "#73D13D",
+//             "value": "2"
+//         },
+//         {
+//             "time": "2024-04-24 11:00:00",
+//             "name": "杩愯",
+//             "color": "#73D13D",
+//             "value": "2"
+//         },
+//         {
+//             "time": "2024-04-24 11:30:00",
+//             "name": "寰呮満",
+//             "color": "#FFC53D",
+//             "value": "3"
+//         },
+//         {
+//             "time": "2024-04-24 12:00:00",
+//             "name": "寰呮満",
+//             "color": "#FFC53D",
+//             "value": "3"
+//         }
+//     ]
+// }
+// const series = data.data.map(item => ({
+//     name: item.name,
+//     label: {
+//         show: true,
+//     },
+//     barWidth: '20px',
+//     type: 'bar',
+//     stack: 'duration',
+//     itemStyle: {
+//         color: item.color,
+//         borderColor: item.color,
+//     },
+//     zlevel: -1,
+//     data: [item.time]
+// }))
+console.log('>>>>>>>>????', series)
 export default {
     components: {
         TimeLine,
-        MYTree
+        MYTree,
+        scEcharts
     },
     watch: {
         treeChecked() {
@@ -52,10 +166,17 @@
         },
         time() {
             this.query()
+        },
+        timeRange(val) {
+            console.log(val, '>>>>>>>???/')
         }
     },
     data() {
         return {
+            isShowTable: false,
+            list: [],
+            activeList: [0],
+            timeRange: '',
             treeChecked: [],
             timeStart: moment().format('YYYY-MM-DD'),
             time: [moment().format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')],
@@ -63,15 +184,120 @@
                 let max = moment(this.timeStart, 'YYYY-MM-DD').add(3, 'd').format('YYYY-MM-DD')
                 let min = moment(this.timeStart, 'YYYY-MM-DD').subtract(3, 'd').format('YYYY-MM-DD')
                 return !moment(Date).isBetween(min, max);
+            },
+            dayCharts: {
+                legend: [
+                ],
+                title: {
+                    text: '璁惧鐘舵�佺粺璁″浘',
+                    subtext: '',
+                },
+                yAxis: {
+                    type: 'category',
+                    data: ['']
+                },
+                xAxis: {
+                    type: 'value',
+                },
+                series
             }
         }
     },
+    created() {
+        console.log('---------')
+        console.log(series)
+    },
     methods: {
+        init() {
+            this.$HTTP.get('/api/blade-mdc/process-parameter').then(res => {
+                if (res.code === 200) {
+                    this.legend = res.data
+                }
+            })
+        },
         query() {
-            this.$refs.timeLine.init({
+            this.$refs?.timeLine?.init({
                 dates: this.time,
                 workstationId: this.treeChecked.toString()
             })
+            this.$HTTP.get('/api/blade-mdc/process-parameter/param', { workstationId: this.treeChecked.toString() }).then(res => {
+                if (res.code === 200) {
+                    this.list = res.data
+                    // this.queryChart(res.data[0])
+                }
+            })
+        },
+        queryChart(dmpDTO) {
+            // this.$HTTP.post('/api/blade-mdc/process-parameter/chart/dmp-item', {
+            //     methodEnum: "HOUR",
+            //     startTime: this.timeRange.startTime,
+            //     endTime: this.timeRange.endTime,
+            //     workstationId: this.treeChecked.toString(),
+            //     dmpDTO
+            // })
+            let data = {
+                "collectItem": "璁惧鐘舵��",
+                "collectRealItem": "DeviceStatus",
+                "data": [
+                    {
+                        "time": "2024-04-24 10:00:00",
+                        "name": "杩愯",
+                        "color": "#73D13D",
+                        "value": "2"
+                    },
+                    {
+                        "time": "2024-04-24 10:30:00",
+                        "name": "杩愯",
+                        "color": "#73D13D",
+                        "value": "2"
+                    },
+                    {
+                        "time": "2024-04-24 11:30:00",
+                        "name": "杩愯",
+                        "color": "#73D13D",
+                        "value": "2"
+                    },
+                    {
+                        "time": "2024-04-24 11:40:00",
+                        "name": "寰呮満",
+                        "color": "#FFC53D",
+                        "value": "3"
+                    },
+                    {
+                        "time": "2024-04-24 12:00:00",
+                        "name": "寰呮満",
+                        "color": "#FFC53D",
+                        "value": "3"
+                    },
+                    {
+                        "time": "2024-04-24 12:00:00",
+                        "name": "杩愯",
+                        "color": "#73D13D",
+                        "value": "2"
+                    }
+                ]
+            }
+            // {
+            //     name: '杩愯',
+            //         type: 'bar',
+            //             stack: 'duration',
+            //                 itemStyle: {
+            //         color: '#007acc',
+            //             borderColor: '#fff',
+            //                 borderWidth: 1
+            //     },
+            //     zlevel: -1,
+            //         data: ['2024-04-24 10:00:00'] // 缁撴潫鏃堕棿
+            // }
+            // this.dayCharts.series = [...data.data.map(item => ({
+            //     name: item.name,
+            //     stack: 'duration',
+            //     itemStyle: {
+            //         color: item.color,
+            //     },
+            //     zlevel: -1,
+            //     data: [item.time]
+            // }))]
         },
         change(e) {
             this.timeStart = e[0] || moment().format('YYYY-MM-DD')

--
Gitblit v1.9.3