he wei
2024-11-01 cc2345bbc1aa9d041adc2714c1da848f5f868a35
U bug修复
10个文件已修改
221 ■■■■■ 已修改文件
src/components/echarts/bar2.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/hooks/useWebSocket.js 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/TagsView/ScrollPane.vue 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/TagsView/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/datas/dataHis.vue 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/index.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/test/index.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/test/jhyInfo.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/test/paramContent.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/test/ytjRtInfo.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/echarts/bar2.vue
@@ -42,8 +42,8 @@
function getOptions(xLabels = [], data = []) {
  let barColor = '#02a7f0';
  let maxColor = '#d9001b';
  let minColor = '#f59a23';
  let maxColor = '#438D29';
  let minColor = '#DBD608';
  let legends = [];
  return {
    grid: {
src/hooks/useWebSocket.js
@@ -1,5 +1,12 @@
// useWebSocket.js
import { ref, reactive, onMounted, onUnmounted } from "vue";
import {
  ref,
  reactive,
  onMounted,
  onUnmounted,
  onActivated,
  onDeactivated,
} from "vue";
import getWsUrl from "@/assets/js/getWsUrl";
export default function (url) {
@@ -20,7 +27,7 @@
    socket.value.onopen = () => {
      isConnected.value = true;
      console.log("WebSocket Connected, url: ", url);
      sendCallback.forEach(v => v());
      sendCallback.forEach((v) => v());
      sendCallback.length = 0;
    };
@@ -52,11 +59,25 @@
  };
  onMounted(() => {
    console.log('socket mount', Date.now(), '=============');
    // console.log('socket mount', Date.now(), '=============');
    console.log("on socket mount", url, "=============");
    connect();
  });
  onActivated(() => {
    if (!socket.value) {
      console.log("on socket active", url, "=============");
      connect();
    }
  });
  onDeactivated(() => {
    if (socket.value) {
      socket.value.close();
    }
  });
  onUnmounted(() => {
    if (socket.value) {
      socket.value.close();
src/layout/components/TagsView/ScrollPane.vue
@@ -5,9 +5,15 @@
const tagAndTagSpacing = 0; // tagAndTagSpacing
const left = ref(0);
const scrollContainer = ref();
const props = defineProps({
  tagRefs: {
    type: Array,
    default: () => [],
  },
});
const wrap = computed(() => {
  return scrollContainer.value.$refs.wrap;
  return scrollContainer.value.wrapRef;
});
// onMounted(() => {
//   console.log("?", scrollContainer.value, wrap, "=============");
@@ -15,12 +21,12 @@
//   // wrap.addEventListener("scroll", emitScroll, true);
//   nextTick(() => {
//     // 尝试找到滚动容器,这里假设它是 scrollContainer 的直接子元素
//     // 注意:这取决于 Element Plus 的具体实现,可能需要调整
//     // 尝试找到滚动容器,这里假设它是 scrollContainer 的直接子元素
//     // 注意:这取决于 Element Plus 的具体实现,可能需要调整
//     const scrollElement = scrollContainer.value.$el;
//     if (scrollElement) {
//       scrollElement.addEventListener('scroll', emitScroll, { passive: true });
//     }
//     if (scrollElement) {
//       scrollElement.addEventListener('scroll', emitScroll, { passive: true });
//     }
//   });
// });
// onBeforeUnmount(() => {
@@ -34,45 +40,51 @@
function emitScroll() {
  $emit("scroll");
}
// function moveToTarget(currentTag) {
//   const $container = $refs.scrollContainer.$el;
//   const $containerWidth = $container.offsetWidth;
//   const $scrollWrapper = scrollWrapper;
//   const tagList = $parent.$refs.tag;
function moveToTarget(currentTag) {
  // const $container = $refs.scrollContainer.$el;
  const $container = scrollContainer.value.$el;
  const $containerWidth = $container.offsetWidth;
  // const $scrollWrapper = scrollWrapper;
  const $scrollWrapper = scrollContainer.value;
  // const tagList = $parent.$refs.tag;
  const tagList = props.tagRefs;
//   let firstTag = null;
//   let lastTag = null;
  let firstTag = null;
  let lastTag = null;
//   // find first tag and last tag
//   if (tagList.length > 0) {
//     firstTag = tagList[0];
//     lastTag = tagList[tagList.length - 1];
//   }
  // find first tag and last tag
  if (tagList.length > 0) {
    firstTag = tagList[0];
    lastTag = tagList[tagList.length - 1];
  }
//   if (firstTag === currentTag) {
//     $scrollWrapper.scrollLeft = 0;
//   } else if (lastTag === currentTag) {
//     $scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth;
//   } else {
//     // find preTag and nextTag
//     const currentIndex = tagList.findIndex((item) => item === currentTag);
//     const prevTag = tagList[currentIndex - 1];
//     const nextTag = tagList[currentIndex + 1];
  if (firstTag === currentTag) {
    $scrollWrapper.scrollLeft = 0;
  } else if (lastTag === currentTag) {
    $scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth;
  } else {
    // find preTag and nextTag
    const currentIndex = tagList.findIndex((item) => item === currentTag);
    const prevTag = tagList[currentIndex - 1];
    const nextTag = tagList[currentIndex + 1];
//     // the tag's offsetLeft after of nextTag
//     const afterNextTagOffsetLeft =
//       nextTag.$el.offsetLeft + nextTag.$el.offsetWidth + tagAndTagSpacing;
    // the tag's offsetLeft after of nextTag
    const afterNextTagOffsetLeft =
      nextTag.$el.offsetLeft + nextTag.$el.offsetWidth + tagAndTagSpacing;
//     // the tag's offsetLeft before of prevTag
//     const beforePrevTagOffsetLeft = prevTag.$el.offsetLeft - tagAndTagSpacing;
    // the tag's offsetLeft before of prevTag
    const beforePrevTagOffsetLeft = prevTag.$el.offsetLeft - tagAndTagSpacing;
//     if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) {
//       $scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth;
//     } else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) {
//       $scrollWrapper.scrollLeft = beforePrevTagOffsetLeft;
//     }
//   }
// }
    if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) {
      $scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth;
    } else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) {
      $scrollWrapper.scrollLeft = beforePrevTagOffsetLeft;
    }
  }
}
defineExpose({
  moveToTarget,
});
</script>
<template>
  <el-scrollbar
src/layout/components/TagsView/index.vue
@@ -116,6 +116,7 @@
  });
}
function closeSelectedTag(view) {
  closeMenu();
  delView(view).then(({ visitedViews }) => {
    if (isActive(view)) {
      toLastView(visitedViews, view);
@@ -123,12 +124,14 @@
  });
}
function closeOthersTags() {
  closeMenu();
  $router.push(gData.selectedTag);
  delOthersViews(gData.selectedTag).then(() => {
    moveToCurrentTag();
  });
}
function closeAllTags(view) {
  closeMenu();
  delAllViews().then(({ visitedViews }) => {
    if (gData.affixTags.some((tag) => tag.path === view.path)) {
      return;
@@ -158,12 +161,13 @@
  const offsetLeft = wraper.value.getBoundingClientRect().left; // container margin left
  const offsetWidth = wraper.value.offsetWidth; // container width
  const maxLeft = offsetWidth - menuMinWidth; // left boundary
  let left = e.clientX - offsetLeft + 15; // 15: margin right
  let _left = e.clientX - offsetLeft + 15; // 15: margin right
  if (left > maxLeft) {
    left = maxLeft;
  if (_left > maxLeft) {
    left.value = maxLeft;
  } else {
    left = left;
    left.value = _left;
  }
  top.value = 10;
@@ -199,6 +203,7 @@
      ref="scrollPane"
      class="tags-view-wrapper"
      @scroll="handleScroll"
      :tagRefs="tagRefs"
    >
      <!-- tag="span" -->
      <router-link
src/views/datas/dataHis.vue
@@ -60,6 +60,8 @@
function typeChange() {
  chooseDev(resList.value[0]);
  testDatas.value = [];
  updateChart([]);
}
function getList() {
@@ -74,10 +76,13 @@
          let type = "";
          switch (v) {
            case "chr":
              type = "充电测试";
              type = devType.value == 1 ? "充电测试" : "充电";
              break;
            case "dis":
              type = "放电测试";
              type = devType.value == 1 ? "放电测试" : "放电";
              break;
            case "jun":
              type = "均衡";
              break;
          }
          let label = type;
@@ -155,9 +160,9 @@
// 设置柱状图
function setBarChart(dataList) {
  if (!dataList.length) {
    return false;
  }
  // if (!dataList.length) {
  //   return false;
  // }
  let unit = "V";
  let fixed = 3;
@@ -166,7 +171,7 @@
  let index = getDataIndex(dataList.length, slideValue.value);
  let labels = [],
    datas = [];
  if (index != -1) {
  if (dataList.length && index != -1) {
    let data = dataList[index];
    let batNum = getBarNum(data);
    title =
@@ -187,7 +192,7 @@
function selectRecord() {
  let res = testRecordCode.value[1];
  console.log("res", res, "=============");
  // console.log("res", res, "=============");
  getRecordInf(currentDevId.value, res)
    .then((res) => {
@@ -320,7 +325,9 @@
          <div class="content">{{ formatSeconds(testObj.testTimelong) }}</div>
          <div class="label">数据类型</div>
          <div class="content">
            {{ { 2: "充电数据", 3: "放电数据" }[testInf.testType] }}
            {{
              { 2: "充电数据", 3: "放电数据", 4: "均衡数据" }[testInf.testType]
            }}
          </div>
          <!-- <div class="label">标称容量</div>
          <div class="content">4444444</div>
src/views/home/index.vue
@@ -74,9 +74,9 @@
      return new Date(a).getTime() - new Date(b).getTime();
    }).forEach((v) => {
      let item = actm[v];
      // 2 放电  3充电
      jhyData[0].data.push(item[3]);
      jhyData[1].data.push(item[2]);
      // 3 放电  2充电
      jhyData[0].data.push(item[2]);
      jhyData[1].data.push(item[3]);
      dates.push(v);
    });
@@ -84,9 +84,9 @@
      return new Date(a).getTime() - new Date(b).getTime();
    }).forEach((v) => {
      let item = a200[v];
      // 2 放电  3充电
      ytjData[0].data.push(item[3]);
      ytjData[1].data.push(item[2]);
      // 3 放电  2充电
      ytjData[0].data.push(item[2]);
      ytjData[1].data.push(item[3]);
    });
    
  }
@@ -94,8 +94,9 @@
});
const testDatas = computed(() => {
  // 2 放电   3 充电
  let labels = ["放电测试", "充电测试"],
  // 3 放电   2 充电
  let labels_yt = ["放电测试", "充电测试"],
    labels_jh = ["放电", "充电", '均衡'],
    ytjMonthData = [],
    ytjYearData = [],
    jhyMonthData = [],
@@ -108,13 +109,14 @@
      },
    } = JSON.parse(message.value);
    ytjMonthData.push(a200Map["a200MonthMap"][2], a200Map["a200MonthMap"][3]);
    ytjYearData.push(a200Map["a200YearMap"][2], a200Map["a200YearMap"][3]);
    jhyMonthData.push(actmMap["actmMonthMap"][2], actmMap["actmMonthMap"][3]);
    jhyYearData.push(actmMap["actmYearMap"][2], actmMap["actmYearMap"][3]);
    ytjMonthData.push(a200Map["a200MonthMap"][3], a200Map["a200MonthMap"][2]);
    ytjYearData.push(a200Map["a200YearMap"][3], a200Map["a200YearMap"][2]);
    jhyMonthData.push(actmMap["actmMonthMap"][3], actmMap["actmMonthMap"][2], actmMap["actmMonthMap"][4]);
    jhyYearData.push(actmMap["actmYearMap"][3], actmMap["actmYearMap"][2], actmMap["actmYearMap"][4]);
  }
  return {
    labels,
    labels_jh,
    labels_yt,
    ytjMonthData,
    ytjYearData,
    jhyMonthData,
@@ -136,14 +138,14 @@
    ytjTestType.value == 0
      ? testDatas.value.ytjMonthData
      : testDatas.value.ytjYearData;
  testBar.value?.updateChart(testDatas.value.labels, datas);
  testBar.value?.updateChart(testDatas.value.labels_yt, datas);
}
function updateJhTest() {
  let datas =
    jhTestType.value == 0
      ? testDatas.value.jhyMonthData
      : testDatas.value.jhyYearData;
  jhTestBar.value?.updateChart(testDatas.value.labels, datas);
  jhTestBar.value?.updateChart(testDatas.value.labels_jh, datas);
}
function updateMap() {
  const getColor = (onLine) => ["#aaa", "#0f0"][onLine];
src/views/test/index.vue
@@ -39,6 +39,12 @@
  return currentDev.value.state[0].batteryCount == 1;
});
// 正在测试中 获取测试类型 是充电还是放电
const currentType = computed(() => {
  return currentDev.state?.testType || 1;
});
const resList = computed(() => {
  let _list = list.value[devType.value];
  return _list.filter((v) => ("" + v.devIdcode).indexOf(keyWord.value) > -1);
@@ -363,6 +369,7 @@
          v-model="testVisible"
          v-if="testVisible"
          :isUpdate="isUpdateParam"
          :testType="currentType"
          :devs="currentDev"
        ></param-content>
      </template>
@@ -372,6 +379,7 @@
          v-if="testVisible"
          :isUpdate="isUpdateParam"
          :grpIdx="testGroupIdx"
          :testType="currentType"
          :devs="currentDev"
        ></jh-param-content>
      </template>
src/views/test/jhyInfo.vue
@@ -4,6 +4,7 @@
import formatSeconds from "@/assets/js/tools/formatSeconds";
import toFixed from "@/assets/js/tools/toFixed.js";
import const_digits from "@/assets/js/const/const_digits";
import IconAvg from "@/components/icons/IconAvg.vue";
const { VOL, GROUPVOL, CURR_YT, CURR_JH } = const_digits;
const props = defineProps({
  datas: {
@@ -86,7 +87,7 @@
      <div class="value">{{toFixed(datas.minBatteryVoltage, VOL) }} V</div>
    </div>
    <div class="item">
      <div class="label">ΔU</div>
      <div class="label"><el-icon><icon-avg class="avg-icon" /></el-icon>U</div>
      <div class="value">{{ toFixed(datas.avgBatteryVoltage, VOL) }} V</div>
    </div>
    <div class="item">
src/views/test/paramContent.vue
@@ -32,6 +32,9 @@
  },
  isUpdate: {
    type: Boolean,
  },
  testType: {
    type: Number,
  }
});
@@ -411,6 +414,7 @@
}
onMounted(() => {
  params.testType = props.testType;
  getParams();
});
</script>
src/views/test/ytjRtInfo.vue
@@ -42,6 +42,7 @@
  }
});
const logList = computed(() => {
  let _list = rtDatas.value.eventList;
  let resObj = {};
@@ -135,7 +136,7 @@
              <div class="value">{{ toFixed(rtDatas.devStates.avgMonVol, VOL) }}V</div>
            </div>
            <div class="item-big">
              {{ toFixed(rtDatas.devStates.storageVoltage, VOL) }}
              {{ toFixed(rtDatas.devStates.storageVoltage, GROUPVOL) }}
              <div class="unit">V</div>
            </div>
@@ -340,10 +341,10 @@
        text-align: center;
        background: #02a7f0;
        &.max {
          background: #d9001b;
          background: #438D29;
        }
        &.min {
          background: #f59a23;
          background: #DBD608;
        }
      }
    }
@@ -377,10 +378,10 @@
        text-align: center;
        background: #02a7f0;
        &.max {
          background: #d9001b;
          background: #438D29;
        }
        &.min {
          background: #f59a23;
          background: #DBD608;
        }
      }
    }
@@ -412,10 +413,10 @@
            padding: 2px 10px;
            border-radius: 6px;
            &.max {
              background: #d9001b;
              background: #438D29;
            }
            &.min {
              background: #f59a23;
              background: #DBD608;
            }
          }
        }