From f29900986f01cf5d39b5755cec674825cef27961 Mon Sep 17 00:00:00 2001
From: gaoshp <291585735@qq.com>
Date: 星期二, 19 十一月 2024 19:25:41 +0800
Subject: [PATCH] update

---
 src/views/mdc/processParam/TimeLine.vue |  103 +++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 86 insertions(+), 17 deletions(-)

diff --git a/src/views/mdc/processParam/TimeLine.vue b/src/views/mdc/processParam/TimeLine.vue
index e920e4d..b6d6611 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 22:20:35
+ * @LastEditTime: 2024-06-18 23:16:52
  * @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,15 +14,21 @@
         <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>
         </div>
         <div class="timeline-line">
-            <div class="timeline-line-item" :class="lines.length - 1 === index ? 'last' : ''"
-                v-for="(item, index) in lines" :key="index">
-                {{ item.title }}
+            <div class="timeline-line-item" @click="changeActive(index)" :class="{
+                last: lines.length - 1 === index,
+                active: index === active
+            }" v-for="(item, index) in lines" :key="index">
+                <div class="title">{{ item.title }}</div>
+                <div class="date">
+                    <p>{{ item.date }}</p>
+                </div>
             </div>
         </div>
     </el-main>
@@ -33,10 +39,11 @@
 export default {
     data() {
         return {
-            step: 1,
+            step: 2,
             params: {},
             dateList: [],
-            lines: []
+            lines: [],
+            active: 0,
         }
     },
     watch: {
@@ -46,13 +53,24 @@
     },
     methods: {
         init(params) {
+            this.active = 0
             this.params = params
             this.queryTime(params)
             this.setLines()
         },
+        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 = []
@@ -60,16 +78,20 @@
             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)
             for (let i = 0; i < lineNum; i++) {
+                let currentDate = min.format('MM-DD')
                 this.lines.push({
-                    title: `${i * this.step}:00`
+                    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')
                 })
+                this.changeActive(0)
             }
         },
         queryTime(data) {
             if (!data.workstationId) return
-            this.$HTTP.post('/api/blade-mdc/process-parameter/all-shift-time', {
+            this.$HTTP.post('/api/mdc/process-parameter/all-shift-time', {
                 ...data
             }).then(res => {
                 if (res.code == 200) {
@@ -78,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)) {
@@ -92,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 {
@@ -100,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, '>>>>>>')
                 }
             })
         }
@@ -116,28 +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;
-        padding: 0 3px;
+        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;
+        }
     }
+
+
 
     &-item::before {
         content: "";
         position: absolute;
         left: 0;
+        top: 20px;
         width: 1px;
         height: 10px;
         background: #ccc;

--
Gitblit v1.9.3