whychdw
2024-10-23 c3d547fbc361d4c64b1ca00ad94ea934d1d7c21d
内容提交
5个文件已修改
276 ■■■■ 已修改文件
public/theme/science-jyh.css 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Navbar.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataTest/history.vue 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/index.vue 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/theme/science-jyh.css
@@ -35,7 +35,7 @@
.el-science-blue,
.pages-config {
  background-size: 100% 100%;
  background-color: rgba(11, 25, 60);
  background-color: rgba(11, 25, 60, 0.9);
  color: #ffffff;
}
@@ -53,7 +53,7 @@
}
.el-science-blue .el-tabs--border-card > .el-tabs__header {
  background: linear-gradient(to left, #3aa9ef, #005de2);
  background: linear-gradient(to right, #005DE2, #3AA9EF);
  color: #FFFFFF;
}
@@ -644,7 +644,7 @@
}
.el-science-blue .content-box-title {
  background: linear-gradient(to left, #3aa9ef, #005de2);
  background: linear-gradient(to right, #005DE2, #3AA9EF);
  color: #FFFFFF;
}
@@ -881,7 +881,7 @@
/*science box*/
.el-science-blue .science-box {
  background: #005de2 !important;
  background: #005de280 !important;
}
.science-box .box-header {
  color: #fffd1e;
@@ -984,7 +984,7 @@
.scroll-container > .el-scrollbar__wrap > .el-scrollbar__view {
  font-size: 0;
  background: linear-gradient(to left, #3aa9ef, #005de2);
  background: linear-gradient(to right, #005DE2, #3AA9EF);
  color: #FFFFFF;
}
@@ -1015,7 +1015,7 @@
  margin-right: 8px;
  margin-top: 8px;
  border-radius: 4px;
  background: linear-gradient(to left, #3aa9ef, #005de2);
  background: linear-gradient(to right, #005DE2, #3AA9EF);
  padding: 6px 8px 10px 8px;
}
.el-science-blue .big-screen-card-header .big-screen-card-title{
src/layout/components/Navbar.vue
@@ -1,5 +1,5 @@
<template>
  <div class="page-header">
  <div class="page-header" v-if="!$store.state.user.autoLogin">
    <div class="page-header-container">
      <flex-layout direction="row">
        <div class="page-header-left" slot="header">
src/layout/index.vue
@@ -55,7 +55,7 @@
import config from "@/assets/js/config";
let timer;
import createWs from "@/assets/js/websocket/plus";
import { pingpong } from "@/views/login/js/api";
import {loginOutAPI, pingpong} from "@/views/login/js/api";
import Utils from "@/components/diagram/js/common.js";
const { throttle } = Utils;
import AlarmPopup from "@/layout/components/AlarmPopup";
src/views/dataTest/history.vue
@@ -135,6 +135,30 @@
          </div>
        </el-tooltip>
      </div>
      <div slot="box-tools" class="box-tools" v-if="isShowAi">
        <el-tooltip
          class="item"
          effect="dark"
          content="AI智能预估"
          placement="bottom">
          <div class="tooltip-content">
            <el-button type="success" size="mini" v-if="aiState === -1" @click="startCreateAIHistory">启动AI</el-button>
            <el-button type="success" size="mini" @click="getAIHistory" v-else-if="aiState >= 100">查看AI</el-button>
            <el-button type="primary" size="mini" disabled v-else>AI智能生成中...</el-button>
          </div>
        </el-tooltip>
      </div>
      <div slot="box-tools" class="box-tools">
        <el-tooltip
          class="item"
          effect="dark"
          content="AI智能预估"
          placement="bottom">
          <div class="tooltip-content">
            <el-button type="primary" size="mini" @click="hdwAiPredict">智能预估</el-button>
          </div>
        </el-tooltip>
      </div>
      <flex-layout :no-bg="true">
        <div class="content-header" slot="header">
          <div class="table-layout">
@@ -872,10 +896,153 @@
      aiInfo: {
        battGroupId: 0,
        testRecordCount: 0
      }
      },
      isHasAi: false
    };
  },
  methods: {
    async hdwAiPredict() {
      let testRecord = this.getTestRecord();
      if(testRecord === -1) {
        this.$message.warning("请选择一组放电数据");
        return;
      }
      if(this.isHasAi) {
        this.$message.error("AI智能预测数据已生成!!!");
        return;
      }
      try {
        this.loading =true;
        let res = await searchHistory({
          battGroupId: 1,
          testRecordCount: 10,
          dataNew: Math.floor(3060),
        });
        this.loading = false;
        res = res.data;
        let data = [];
        // 数据
        if (res.code) {
          data = res.data.list;
        }
        this.formateStandardHisData(data);
        this.isHasAi = true;
      }catch (e) {
        this.loading = false;
        console.log(e);
      }
    },
    // 格式化历史信息数据
    formateStandardHisData(data) {
      let recordTime = -1; // 记录时间
      let recordNum = -100; // 记录笔数
      // 获取标准曲线的和当前曲线对应的最后一笔数据
      let endRecordNum = -100;
      let endList = [];
      let allDataEndMon = [];
      monBarData.vol[monBarData.vol.length-1].map(item=>{
        allDataEndMon.push(item[1]);
      });
      data.forEach((item) => {
        if(item.testTimelong > allData.endData.testTimelong) {
          if(endRecordNum === -100) {
            endRecordNum = item.recordNum;
          }
          if(endRecordNum === item.recordNum) {
            endList.push(item);
          }
        }
      });
      let differList = allDataEndMon.map((item,key)=>{
        return (endList[key].monVol - item).toHold(VOL);
      });
      let isGood = true;
      data.forEach((item) => {
        let monNum = item.monNum;
        let testTimeLong = formatSeconds(item.testTimelong);
        if(item.testTimelong > allData.endData.testTimelong) {
          if(endRecordNum === -100) {
            endRecordNum = item.recordNum;
          }
          if(endRecordNum === item.recordNum) {
            endList.push(item);
          }
          if(isGood && this.checkRecordNumIsGood(item.recordNum, data, differList)) {
            // 获取组端电压,在线电压,组端电流的信息和开辟一个单体柱状图
            if (recordNum !== item.recordNum) {
              recordTime = item.recordTime;
              recordNum = item.recordNum;
              allData.groupVol.push([testTimeLong, item.groupVol]);
              allData.onlineVol.push([testTimeLong, item.onlineVol]);
              allData.testCurr.push([testTimeLong, item.testCurr]);
              allData.recordTime.push(testTimeLong);
              allData.testTimeLong.push(item.testTimelong);
              allData.testCap.push(item.testCap);
              allData.dataList.push(item);
              this.testTimeLong.push(item.testTimelong);
              // 开辟空间
              monBarData.vol.push([]);
              monBarData.temp.push([]);
              monBarData.realCap.push([]);
              monBarData.resCap.push([]);
              monBarData.preCap.push([]);
            }
            // 单体电压柱状图设置
            let monNum_text = "#" + monNum;
            let monBarVol = monBarData.vol[monBarData.vol.length - 1];
            monBarVol.push([monNum_text, (item.monVol-differList[monNum-1]).toHold(VOL)]);
            // 单体温度柱状图
            let monBarTemp = monBarData.temp[monBarData.temp.length - 1];
            monBarTemp.push([monNum_text, item.monTmp]);
            // 设置单体折线图信息
            if (typeof monLineData.vol[monNum - 1] != "object") {
              let index = monNum - 1;
              // 开辟空间
              monLineData.vol[index] = [];
              monLineData.temp[index] = [];
              monLineData.resCap[index] = [];
            }
            // 获取到需要使用的空间
            let monLineVol = monLineData.vol[monNum - 1];
            monLineVol.push([testTimeLong, item.monVol]);
            let monLineTemp = monLineData.temp[monNum - 1];
            monLineTemp.push([testTimeLong, item.monTmp]);
          }else {
            isGood = false
          }
        }
      });
      // 初始化图表的配置项
      this.initChartOptions();
      // 设置容量
      this.setCapList();
      // 设置折线图表
      this.setLineChart();
      // 执行滑动事件
      this.sliderInput();
    },
    checkRecordNumIsGood(num, list, differList) {
      let isGood = true;
      for(let i = 0; i< list.length; i++) {
        let item = list[i];
        if(item.recordNum === num && (item.monVol-differList[item.monNum-1]).toHold(VOL)<1.8) {
          isGood = false;
          break;
        }
      }
      return isGood;
    },
    sendMessage(battGroupId, testRecordCount) {
      this.aiState = -1;
      let params = {
@@ -886,9 +1053,9 @@
    },
    onWSMessage(res) {
      let batt = this.batt;
      console.log(batt);
      //console.log(batt);
      res = JSON.parse(res.data);
      console.log(res);
      //console.log(res);
      if(res.code === 1 && res.data) {
        if(this.aiState === -1 && res.data2 !== -1 && res.data2 !== batt.monCount) {
          this.loading = false;
@@ -1553,6 +1720,7 @@
    },
    // 切换测试信息
    testRecordChange() {
      this.isHasAi = false;
      let testRecord = this.getTestRecord();
      // 只有核容放电 并且测试时不小于1小时才处理
      let cutFlag = 2 == testRecord.testType && testRecord.testTimelong >= 3600;
src/views/login/index.vue
@@ -215,6 +215,7 @@
import ziluolanImg from "@/assets/images/login-img-ziluolan.png";
import qrCode from "@/assets/js/outside/qrCode";
import CONFIG from "@/assets/js/config";
import {getBattGroupInfo} from "@/views/dataMager/js/battGroupMager";
export default {
  components: {
    UkeyBind,
@@ -294,7 +295,12 @@
        this.normalLogin();
      }
    },
    normalLogin() {
    normalLogin(isAutoLogin) {
      if(isAutoLogin) {
        this.loginForm.username = 'admin';
        this.loginForm.password = '123456';
        this.loginForm.verify = this.verifyCode;
      }
      // 校验用户
      if (this.loginForm.username && this.loginForm.password) {
        // 开启等待框
@@ -314,7 +320,7 @@
              // 用户登录状态 0-其他(不做动作) 2-首次登录 3-密码长时间未登录
              //sessionStorage.setItem("useLoginState", "2");
              // 对结果进行处理
              this.handleLogin({ data: res });
              this.handleLogin({ data: res }, isAutoLogin);
            } else {
              // 关闭等待
              this.loading = false;
@@ -332,7 +338,7 @@
        this.$message.error("用户名或密码不能为空");
      }
    },
    changeVerifyCode() {
    changeVerifyCode(isLogin) {
      let loading = this.$layer.loading();
      getLoginVerity()
        .then((res) => {
@@ -345,7 +351,9 @@
          }
          this.loginForm.verify = "";
          // 自动登录
          this.autoLogin();
          if(isLogin) {
            this.autoLogin();
          }
        })
        .catch((error) => {
          this.$layer.close(loading);
@@ -420,20 +428,28 @@
        this.$message.error("用户名或密码不能为空");
      }
    },
    handleLogin(res) {
    handleLogin(res, isAutoLogin) {
      // 关闭等待
      //this.loading = false;
      res = res.data;
      if (res.data) {
        this.$message.success("登录成功");
        if(!isAutoLogin) {
          this.$message.success("登录成功");
        }
        sessionStorage.setItem("username", res.data2[0].uname);
        sessionStorage.setItem("userId", res.data2[0].uid);
        sessionStorage.setItem("userPower", res.data2[0].urole);
        sessionStorage.setItem("userPowerGroup", res.data2[1]);
        sessionStorage.setItem("isInGroup", res.data2[2] ? 1 : 0);
        if(isAutoLogin) {
          this.$store.dispatch("user/changeAutoLogin", 1);
          let pageName = this.$route.query.pageName;
          this.$store.dispatch("user/changePage", pageName);
        }
        // 自动登录无法返回登录页
        if (this.$store.state.user.autoLogin) {
          this.$router.replace({ path: this.redirect || "/home" });
          let battGroupId = this.$route.query.id;
          this.getBattGroupInfo(battGroupId);
        } else {
          this.$router.push({ path: this.redirect || "/home" });
        }
@@ -467,28 +483,8 @@
      let autoLogin = this.$route.query.autoLogin;
      let uid = this.$route.query.uid;
      let pageName = this.$route.query.pageName;
      if (autoLogin && uid) {
        this.isAutoLogin = true;
        getUserLoginInfo(uid)
          .then((res) => {
            let rs = res.data;
            if (rs.code === 1) {
              let data = rs.data;
              this.$store.dispatch("user/changeAutoLogin", 1);
              this.$store.dispatch("user/changePage", pageName);
              this.loginForm.username = data.UName;
              this.loginForm.password = data.USnId;
              this.handleLogin(res);
            }
          })
          .catch((error) => {
            console.log(error);
            this.$notify.error({
              title: "错误",
              message: "输入信息无效,请手动登录!",
            });
            console.log(error);
          });
      if (autoLogin) {
        this.normalLogin(true);
      } else {
        this.isAutoLogin = false;
      }
@@ -570,7 +566,37 @@
      if (sysConfig.clientName.name == "sxty") {
        this.setQRCode();
      }
      this.changeVerifyCode();
      this.changeVerifyCode(true);
    },
    getBattGroupInfo(battGroupId) {
      this.homeListShow = false;
      getBattGroupInfo(battGroupId)
        .then((res) => {
          res = res.data;
          if (res.code) {
            let batt = res.data[0];
            let search =
              "?province=" +
              batt.stationName1 +
              "&city=" +
              batt.stationName2 +
              "&county=" +
              batt.stationName5 +
              "&home=" +
              batt.stationName3 +
              "&batt=" +
              batt.battGroupId +
              // list组件重载
              "&listReload=1";
            this.$router.push("/dataTest/movingRingSystem" + search);
          } else {
            this.isAutoLogin = false;
            this.$router.push({ path: this.redirect || "/home" });
          }
        }).catch((error) => {
          this.isAutoLogin = false;
          console.log(error);
        });
    },
  },
  computed: {