he wei
2023-04-27 8fe27f96ac6d9705d31ad19a36be1c2e8fa932e8
UA 国际化初步完成
25个文件已修改
2个文件已添加
1724 ■■■■ 已修改文件
src/assets/js/config.module.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/const/const_alarm_level.js 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/i18n/base.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/i18n/const_alarm_level.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/tools/Title.js 130 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/tools/getPageMenu.js 925 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/FlexLayout.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/AlarmPopup.vue 131 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Navbar.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/i18n/AlarmPopup.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/marqueeLeft.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/index.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/alarmMager/components/alarm-timeout-setting.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/components/AddBattGroup.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/components/EditBattGroup.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataTest/components/DataDiffter.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataTest/components/i18n/fbo4831DischargeParams.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataTest/history.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataTest/realTimeFbo4831.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/components/batt-card.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/components/total-data.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/home-conductor.vue 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/home-manage.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/i18n/home-conductor.js 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/index.vue 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/pageSetting/components/platformName.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/pageSetting/i18n/platformName.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/config.module.js
@@ -2,8 +2,8 @@
  logo: {
    label: '平台logo',
    des: '显示平台logo状态',
    fileName: 'gjdw',       // gjdw, nfdw, gjdx, qwh
    value: true,
    fileName: '',       // gjdw, nfdw, gjdx, qwh
    value: false,
  },
  uKey: {
    label: 'uKey',
@@ -94,6 +94,6 @@
  lang: {
    label: '默认语言',
    des: '国际化时的默认语言',
    value: 'CN'
    value: 'US'
  }
};
src/assets/js/const/const_alarm_level.js
@@ -1,36 +1,36 @@
export default {
    level: [
        {
            label: '紧急',
            label: 'Emergency',
            value: 1,
            model: true
        },
        {
            label: '重大',
            label: 'Major',
            value: 2,
            model: true
        },
        {
            label: '一般',
            label: 'General',
            value: 3,
            model: true
        }
    ],
    levelNumber: [
        {
            label: '一级告警',
            label: 'AlarmLevel1',
            value: 1,
            model: true
        },
        {
            label: '二级告警',
            label: 'AlarmLevel2',
            value: 2,
            model: true
        },
        {
            label: '三级告警',
            label: 'AlarmLevel3',
            value: 3,
            model: true
        }
src/assets/js/i18n/base.js
@@ -34,9 +34,17 @@
      delete: '删除',
      edit: '编辑',
      SearchFailed: '查询失败',
      close: '关闭',
      Update: '更新',
    },
    other: {
      noAlarm: '最近24小时内无告警',
      loading: '拼命加载中',
      hours: '小时 | 小时 | 小时',
      mins: '分钟 | 分钟 | 分钟',
      ReferenceTime: '基准时间',
      CellVoltageDifferenceLineChart: '单体电压差折线图',
      CellTempDifferenceLineChart: '单体温度差折线图',
    }
  },
  US: {
@@ -74,9 +82,17 @@
      delete: 'Delete',
      edit: 'Edit',
      SearchFailed: 'Search Failed!',
      close: 'Close',
      Update: 'Update',
    },
    other: {
      noAlarm: 'No alarm has been generated in the last 24 hours',
      loading: 'loading...',
      hours: 'hour | hour | hours',
      mins: 'min | min | mins',
      ReferenceTime: 'Reference Time',
      CellVoltageDifferenceLineChart: 'Cell Voltage Difference Line Chart',
      CellTempDifferenceLineChart: 'Cell Temp Difference Line Chart',
    }
  }
}
src/assets/js/i18n/const_alarm_level.js
New file
@@ -0,0 +1,20 @@
export default {
  messages: {
    CN: {
      Emergency: '紧急',
      Major: '重大',
      General: '一般',
      AlarmLevel1: '一级告警',
      AlarmLevel2: '二级告警',
      AlarmLevel3: '三级告警',
    },
    US: {
      Emergency: 'Emergency',
      Major: 'Major',
      General: 'General',
      AlarmLevel1: 'Alarm Level1',
      AlarmLevel2: 'Alarm Level2',
      AlarmLevel3: 'Alarm Level3',
    }
  }
}
src/assets/js/tools/Title.js
@@ -8,126 +8,130 @@
//     this.lc = 0;                //低告警单体数
//     this.lp = 0;                //低告警百分比
// }
import store from '@/store';
function createTitle() {
    var obj = new Object();
    obj.min = 0;
    obj.max = 0;
    obj.avg = 0;
    obj.ahight = 0;
    obj.alow = 0;
    obj.clow = 0;
    obj.lc = 0;
    obj.lp = 0;
    return obj;
  var obj = new Object();
  obj.min = 0;
  obj.max = 0;
  obj.avg = 0;
  obj.ahight = 0;
  obj.alow = 0;
  obj.clow = 0;
  obj.lc = 0;
  obj.lp = 0;
  return obj;
}
var maxText = '最大值';        //最大值
var minText = '最小值';        //最小值
var avgText = '平均值';         //平均值
// var maxText = '最大值';        //最大值
// var minText = '最小值';        //最小值
// var avgText = '平均值';         //平均值
var lowText = '落后值';        //落后值
var lcText = '落后数量';        //落后数量
var lpText = '落后数量比';     //落后数量比
function Title(min, max, avg, ahight, alow, clow, lc, lp) {
    this.min = min;
    this.max = max;
    this.avg = avg;
    this.ahight = ahight;
    this.alow = alow;
    this.clow = clow;
    this.lc = lc;
    this.lp = lp;
  this.min = min;
  this.max = max;
  this.avg = avg;
  this.ahight = ahight;
  this.alow = alow;
  this.clow = clow;
  this.lc = lc;
  this.lp = lp;
}
Title.prototype.setMin = function (min) {
    this.min = min;
  this.min = min;
};
Title.prototype.getMin = function () {
    return this.min;
  return this.min;
};
Title.prototype.setMax = function (max) {
    this.max = max;
  this.max = max;
};
Title.prototype.getMax = function () {
    return this.max;
  return this.max;
};
Title.prototype.setAvg = function (avg) {
    this.avg = avg;
  this.avg = avg;
};
Title.prototype.getAvg = function () {
    return this.avg;
  return this.avg;
};
Title.prototype.setAhight = function (ahight) {
    this.ahight = ahight;
  this.ahight = ahight;
};
Title.prototype.getAhight = function () {
    return this.ahight;
  return this.ahight;
};
Title.prototype.setAlow = function (alow) {
    this.alow = alow;
  this.alow = alow;
};
Title.prototype.getAlow = function () {
    return this.alow;
  return this.alow;
};
Title.prototype.setClow = function (clow) {
    this.clow = clow;
  this.clow = clow;
};
Title.prototype.getClow = function () {
    return this.clow;
  return this.clow;
};
Title.prototype.setLc = function (lc) {
    this.lc = lc;
  this.lc = lc;
};
Title.prototype.getLc = function () {
    return this.lc;
  return this.lc;
};
Title.prototype.setLp = function (lp) {
    this.lp = lp;
  this.lp = lp;
};
Title.prototype.getLp = function () {
    return lp;
  return lp;
};
Title.prototype.getAllTile = function (lname) {
    //alert(this.avg);
    var title = "";
    if ("Voltage" == lname) {
        //title=maxText+"="+(parseFloat(this.max).toFixed(3))+"V;"+minText+"="+(parseFloat(this.min).toFixed(3))+"V;"+avgText+"="+(parseFloat(this.avg).toFixed(3))+"V;"+lowText+"="+this.alow+"V;"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
        title = maxText + "=" + (parseFloat(this.max).toFixed(3)) + "V;" + minText + "=" + (parseFloat(this.min).toFixed(3)) + "V;" + avgText + "=" + (parseFloat(this.avg).toFixed(3)) + "V";
    } else if ("Resistance" == lname) {
        //title=maxText+"="+(parseFloat(this.max).toFixed(3))+"mΩ;"+minText+"="+(parseFloat(this.min).toFixed(3))+"mΩ;"+avgText+"="+(parseFloat(this.avg).toFixed(3))+"mΩ;"+lowText+"="+this.alow+"mΩ;"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
        title = maxText + "=" + (parseFloat(this.max).toFixed(3)) + "mΩ;" + minText + "=" + (parseFloat(this.min).toFixed(3)) + "mΩ;" + avgText + "=" + (parseFloat(this.avg).toFixed(3)) + "mΩ";
    } else if ("Temperature" == lname) {
        //title=maxText+"="+(parseFloat(this.max).toFixed(1))+"℃;"+minText+"="+(parseFloat(this.min).toFixed(1))+"℃;"+avgText+"="+(parseFloat(this.avg).toFixed(1))+"℃;"+lowText+"="+this.alow+"℃;"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
        title = maxText + "=" + (parseFloat(this.max).toFixed(1)) + "℃;" + minText + "=" + (parseFloat(this.min).toFixed(1)) + "℃;" + avgText + "=" + (parseFloat(this.avg).toFixed(1)) + "℃";
    } else if ("Conductance" == lname) {
        //title=maxText+"="+(parseFloat(this.max).toFixed(0))+";"+minText+"="+(parseFloat(this.min).toFixed(0))+";"+avgText+"="+(parseFloat(this.avg).toFixed(0))+";"+lowText+"="+this.alow+";"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
        title = maxText + "=" + (parseFloat(this.max).toFixed(0)) + ";" + minText + "=" + (parseFloat(this.min).toFixed(0)) + ";" + avgText + "=" + (parseFloat(this.avg).toFixed(0));
    } else if ("MonJHCurr" == lname) {
        //title=maxText+"="+(parseFloat(this.max).toFixed(3))+"V;"+minText+"="+(parseFloat(this.min).toFixed(3))+"V;"+avgText+"="+(parseFloat(this.avg).toFixed(3))+"V;"+lowText+"="+this.alow+"V;"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
        title = maxText + "=" + (parseFloat(this.max).toFixed(3)) + "A;" + minText + "=" + (parseFloat(this.min).toFixed(3)) + "A;" + avgText + "=" + (parseFloat(this.avg).toFixed(3)) + "A";
    } else if ("Serpercent" == lname || "Percent_total_capacity" == lname) {
        //title=maxText+"="+this.max+"%;"+minText+"="+this.min+"%;"+avgText+"="+this.avg+"%;"+lowText+"="+this.alow+"%;"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
        title = maxText + "=" + this.max + "%;" + minText + "=" + this.min + "%;" + avgText + "=" + this.avg + "%";
    } else if ("Actual_capacity" == lname || "Residual_capacity" == lname) {
        //title=maxText+"="+(parseFloat(this.max).toFixed(0))+"AH;"+minText+"="+(parseFloat(this.min).toFixed(0))+"AH;"+avgText+"="+(parseFloat(this.avg).toFixed(0))+"AH;"+lowText+"="+this.alow+"AH;"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
        title = maxText + "=" + (parseFloat(this.max).toFixed(0)) + "AH;" + minText + "=" + (parseFloat(this.min).toFixed(0)) + "AH;" + avgText + "=" + (parseFloat(this.avg).toFixed(0)) + "AH";
    }
    return title;
  let lang = store.state.settings.lang;
  let maxText = 'US' == lang ? 'Max' : '最大值';        //最大值
  let minText = 'US' == lang ? 'Min' : '最小值';        //最小值
  let avgText = 'US' == lang ? 'Avg' : '平均值';         //平均值
  //alert(this.avg);
  var title = "";
  if ("Voltage" == lname) {
    //title=maxText+"="+(parseFloat(this.max).toFixed(3))+"V;"+minText+"="+(parseFloat(this.min).toFixed(3))+"V;"+avgText+"="+(parseFloat(this.avg).toFixed(3))+"V;"+lowText+"="+this.alow+"V;"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
    title = maxText + "=" + (parseFloat(this.max).toFixed(3)) + "V;" + minText + "=" + (parseFloat(this.min).toFixed(3)) + "V;" + avgText + "=" + (parseFloat(this.avg).toFixed(3)) + "V";
  } else if ("Resistance" == lname) {
    //title=maxText+"="+(parseFloat(this.max).toFixed(3))+"mΩ;"+minText+"="+(parseFloat(this.min).toFixed(3))+"mΩ;"+avgText+"="+(parseFloat(this.avg).toFixed(3))+"mΩ;"+lowText+"="+this.alow+"mΩ;"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
    title = maxText + "=" + (parseFloat(this.max).toFixed(3)) + "mΩ;" + minText + "=" + (parseFloat(this.min).toFixed(3)) + "mΩ;" + avgText + "=" + (parseFloat(this.avg).toFixed(3)) + "mΩ";
  } else if ("Temperature" == lname) {
    //title=maxText+"="+(parseFloat(this.max).toFixed(1))+"℃;"+minText+"="+(parseFloat(this.min).toFixed(1))+"℃;"+avgText+"="+(parseFloat(this.avg).toFixed(1))+"℃;"+lowText+"="+this.alow+"℃;"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
    title = maxText + "=" + (parseFloat(this.max).toFixed(1)) + "℃;" + minText + "=" + (parseFloat(this.min).toFixed(1)) + "℃;" + avgText + "=" + (parseFloat(this.avg).toFixed(1)) + "℃";
  } else if ("Conductance" == lname) {
    //title=maxText+"="+(parseFloat(this.max).toFixed(0))+";"+minText+"="+(parseFloat(this.min).toFixed(0))+";"+avgText+"="+(parseFloat(this.avg).toFixed(0))+";"+lowText+"="+this.alow+";"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
    title = maxText + "=" + (parseFloat(this.max).toFixed(0)) + ";" + minText + "=" + (parseFloat(this.min).toFixed(0)) + ";" + avgText + "=" + (parseFloat(this.avg).toFixed(0));
  } else if ("MonJHCurr" == lname) {
    //title=maxText+"="+(parseFloat(this.max).toFixed(3))+"V;"+minText+"="+(parseFloat(this.min).toFixed(3))+"V;"+avgText+"="+(parseFloat(this.avg).toFixed(3))+"V;"+lowText+"="+this.alow+"V;"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
    title = maxText + "=" + (parseFloat(this.max).toFixed(3)) + "A;" + minText + "=" + (parseFloat(this.min).toFixed(3)) + "A;" + avgText + "=" + (parseFloat(this.avg).toFixed(3)) + "A";
  } else if ("Serpercent" == lname || "Percent_total_capacity" == lname) {
    //title=maxText+"="+this.max+"%;"+minText+"="+this.min+"%;"+avgText+"="+this.avg+"%;"+lowText+"="+this.alow+"%;"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
    title = maxText + "=" + this.max + "%;" + minText + "=" + this.min + "%;" + avgText + "=" + this.avg + "%";
  } else if ("Actual_capacity" == lname || "Residual_capacity" == lname) {
    //title=maxText+"="+(parseFloat(this.max).toFixed(0))+"AH;"+minText+"="+(parseFloat(this.min).toFixed(0))+"AH;"+avgText+"="+(parseFloat(this.avg).toFixed(0))+"AH;"+lowText+"="+this.alow+"AH;"+lcText+"="+this.lc+";"+lpText+"="+this.lp+"%";
    title = maxText + "=" + (parseFloat(this.max).toFixed(0)) + "AH;" + minText + "=" + (parseFloat(this.min).toFixed(0)) + "AH;" + avgText + "=" + (parseFloat(this.avg).toFixed(0)) + "AH";
  }
  return title;
};
export default Title;
src/assets/js/tools/getPageMenu.js
@@ -73,28 +73,28 @@
          level: 2,
          disabled: true
        },
        {
          label: '历史数据管理',
          name: 'historyInfoMager',
          src: '/dataTest/historyInfoMager',
          closable: true,
          id: 2003,
          menuId: 2,
          enableduse: true,
          ord: 3,
          level: 2,
        },
        {
          label: '标准曲线',
          name: 'standardLine',
          src: '/dataTest/standardLine',
          closable: true,
          id: 2004,
          menuId: 2,
          enableduse: true,
          ord: 4,
          level: 2,
        },
        // {
        //   label: '历史数据管理',
        //   name: 'historyInfoMager',
        //   src: '/dataTest/historyInfoMager',
        //   closable: true,
        //   id: 2003,
        //   menuId: 2,
        //   enableduse: true,
        //   ord: 3,
        //   level: 2,
        // },
        // {
        //   label: '标准曲线',
        //   name: 'standardLine',
        //   src: '/dataTest/standardLine',
        //   closable: true,
        //   id: 2004,
        //   menuId: 2,
        //   enableduse: true,
        //   ord: 4,
        //   level: 2,
        // },
        {
          label: '设备状态查询',
          name: 'btsStatus',
@@ -106,50 +106,50 @@
          ord: 5,
          level: 2,
        },
        {
          label: "一体机导入记录",
          name: "historyAio",
          src: "/dataTest/historyAio",
          closable: true,
          id: 2006,
          menuId: 2,
          enableduse: true,
          ord: 6,
          level: 2,
        },
        {
          label: "高频开关配电柜遥测量",
          name: "hfSwitch",
          src: "/dataTest/hfSwitch",
          closable: true,
          id: 2007,
          menuId: 2,
          enableduse: true,
          ord: 7,
          level: 2,
        },
        {
          label: "交流配电柜遥测量",
          name: "GGDmeasure",
          src: "/dataTest/GGDmeasure",
          closable: true,
          id: 2008,
          menuId: 2,
          enableduse: true,
          ord: 8,
          level: 2,
        },
        {
          label: "放电仪放电数据分析",
          name: "dischargeMeterData",
          src: "/dataTest/dischargeMeterData",
          closable: true,
          id: 2009,
          menuId: 2,
          enableduse: true,
          ord: 9,
          level: 2,
        },
        // {
        //   label: "一体机导入记录",
        //   name: "historyAio",
        //   src: "/dataTest/historyAio",
        //   closable: true,
        //   id: 2006,
        //   menuId: 2,
        //   enableduse: true,
        //   ord: 6,
        //   level: 2,
        // },
        // {
        //   label: "高频开关配电柜遥测量",
        //   name: "hfSwitch",
        //   src: "/dataTest/hfSwitch",
        //   closable: true,
        //   id: 2007,
        //   menuId: 2,
        //   enableduse: true,
        //   ord: 7,
        //   level: 2,
        // },
        // {
        //   label: "交流配电柜遥测量",
        //   name: "GGDmeasure",
        //   src: "/dataTest/GGDmeasure",
        //   closable: true,
        //   id: 2008,
        //   menuId: 2,
        //   enableduse: true,
        //   ord: 8,
        //   level: 2,
        // },
        // {
        //   label: "放电仪放电数据分析",
        //   name: "dischargeMeterData",
        //   src: "/dataTest/dischargeMeterData",
        //   closable: true,
        //   id: 2009,
        //   menuId: 2,
        //   enableduse: true,
        //   ord: 9,
        //   level: 2,
        // },
        //  最大ord=9
      ]
    },
@@ -178,18 +178,18 @@
          ord: 2,
          level: 2,
        },
        {
          label: "电源信息配置",
          name: "powerMager",
          src: "/dataMager/powerMager",
          // permitName: 'batttest_data_query_permit',
          closable: true,
          id: 3001,
          menuId: 3,
          enableduse: true,
          ord: 1,
          level: 2,
        },
        // {
        //   label: "电源信息配置",
        //   name: "powerMager",
        //   src: "/dataMager/powerMager",
        //   // permitName: 'batttest_data_query_permit',
        //   closable: true,
        //   id: 3001,
        //   menuId: 3,
        //   enableduse: true,
        //   ord: 1,
        //   level: 2,
        // },
        {
          label: "机房信息管理",
          name: "totalStation",
@@ -202,39 +202,39 @@
          ord: 3,
          level: 2,
        },
        {
          label: '一体机机房导入',
          name: "aioStationImport",
          src: '/dataMager/aioStationImport',
          closable: true,
          id: 3012,
          menuId: 3,
          enableduse: true,
          ord: 12,
          level: 2,
        },
        {
          label: "电价分布模板管理",
          name: "elePriceDistributionTpl",
          src: "/dataMager/elePriceDistributionTpl",
          closable: true,
          id: 3011,
          menuId: 3,
          enableduse: true,
          ord: 11,
          level: 2,
        },
        {
          label: '碳中和',
          name: "carbonInfo",
          src: '/dataMager/carbonInfo',
          closable: true,
          id: 3013,
          menuId: 3,
          enableduse: true,
          ord: 13,
          level: 2,
        },
        // {
        //   label: '一体机机房导入',
        //   name: "aioStationImport",
        //   src: '/dataMager/aioStationImport',
        //   closable: true,
        //   id: 3012,
        //   menuId: 3,
        //   enableduse: true,
        //   ord: 12,
        //   level: 2,
        // },
        // {
        //   label: "电价分布模板管理",
        //   name: "elePriceDistributionTpl",
        //   src: "/dataMager/elePriceDistributionTpl",
        //   closable: true,
        //   id: 3011,
        //   menuId: 3,
        //   enableduse: true,
        //   ord: 11,
        //   level: 2,
        // },
        // {
        //   label: '碳中和',
        //   name: "carbonInfo",
        //   src: '/dataMager/carbonInfo',
        //   closable: true,
        //   id: 3013,
        //   menuId: 3,
        //   enableduse: true,
        //   ord: 13,
        //   level: 2,
        // },
        {
          label: "电池信息统计分析",
          name: 'produceTotal',
@@ -259,18 +259,18 @@
          level: 2,
          disabled: true
        },
        {
          label: "机房状态查询",
          name: "powercut",
          src: "/dataMager/powercut",
          permitName: 'batttest_data_query_permit',
          closable: true,
          id: 3006,
          menuId: 3,
          enableduse: true,
          ord: 6,
          level: 2,
        },
        // {
        //   label: "机房状态查询",
        //   name: "powercut",
        //   src: "/dataMager/powercut",
        //   permitName: 'batttest_data_query_permit',
        //   closable: true,
        //   id: 3006,
        //   menuId: 3,
        //   enableduse: true,
        //   ord: 6,
        //   level: 2,
        // },
        // {
        //   label: "内组测试",
        //   name: "internalTest",
@@ -283,52 +283,52 @@
        //   src: "/dataMager/historyInfo",
        //   closable: true
        // },
        {
          label: "电池关注管理",
          name: "batteryMager",
          src: "/dataMager/batteryMager",
          permitName: 'batttest_data_query_permit',
          closable: true,
          id: 3007,
          menuId: 3,
          enableduse: true,
          ord: 7,
          level: 2,
        },
        {
          label: '设备工作状态',
          name: "deviceWorkState",
          src: '/dataMager/deviceWorkState',
          closable: true,
          id: 3008,
          menuId: 3,
          enableduse: true,
          ord: 8,
          level: 2,
          disabled: true
        },
        {
          label: '报废电池信息管理',
          name: "scrapBattery",
          src: '/dataMager/scrapBattery',
          closable: true,
          id: 3009,
          menuId: 3,
          enableduse: true,
          ord: 9,
          level: 2,
        },
        {
          label: '备件电池信息管理',
          name: "repairBattery",
          src: '/dataMager/repairBattery',
          closable: true,
          id: 3010,
          menuId: 3,
          enableduse: true,
          ord: 10,
          level: 2,
        },
        // {
        //   label: "电池关注管理",
        //   name: "batteryMager",
        //   src: "/dataMager/batteryMager",
        //   permitName: 'batttest_data_query_permit',
        //   closable: true,
        //   id: 3007,
        //   menuId: 3,
        //   enableduse: true,
        //   ord: 7,
        //   level: 2,
        // },
        // {
        //   label: '设备工作状态',
        //   name: "deviceWorkState",
        //   src: '/dataMager/deviceWorkState',
        //   closable: true,
        //   id: 3008,
        //   menuId: 3,
        //   enableduse: true,
        //   ord: 8,
        //   level: 2,
        //   disabled: true
        // },
        // {
        //   label: '报废电池信息管理',
        //   name: "scrapBattery",
        //   src: '/dataMager/scrapBattery',
        //   closable: true,
        //   id: 3009,
        //   menuId: 3,
        //   enableduse: true,
        //   ord: 9,
        //   level: 2,
        // },
        // {
        //   label: '备件电池信息管理',
        //   name: "repairBattery",
        //   src: '/dataMager/repairBattery',
        //   closable: true,
        //   id: 3010,
        //   menuId: 3,
        //   enableduse: true,
        //   ord: 10,
        //   level: 2,
        // },
        // 最大ord=13
      ]
    },
@@ -345,39 +345,39 @@
      ord: 4,
      level: 1,
      childrens: [
        {
          label: "告警派单管理",
          name: "alarmDispatch",
          src: "/alarmMager/alarmDispatch",
          closable: true,
          id: 4012,
          menuId: 4,
          enableduse: true,
          ord: 12,
          level: 2,
        },
        {
          label: "电源实时告警",
          name: "powerRealtimeInfo",
          src: "/alarmMager/powerRealtimeInfo",
          closable: true,
          id: 4001,
          menuId: 4,
          enableduse: true,
          ord: 1,
          level: 2,
        },
        {
          label: "电源历史告警",
          name: "powerHistoryInfo",
          src: "/alarmMager/powerHistoryInfo",
          closable: true,
          id: 4002,
          menuId: 4,
          enableduse: true,
          ord: 2,
          level: 2,
        },
        // {
        //   label: "告警派单管理",
        //   name: "alarmDispatch",
        //   src: "/alarmMager/alarmDispatch",
        //   closable: true,
        //   id: 4012,
        //   menuId: 4,
        //   enableduse: true,
        //   ord: 12,
        //   level: 2,
        // },
        // {
        //   label: "电源实时告警",
        //   name: "powerRealtimeInfo",
        //   src: "/alarmMager/powerRealtimeInfo",
        //   closable: true,
        //   id: 4001,
        //   menuId: 4,
        //   enableduse: true,
        //   ord: 1,
        //   level: 2,
        // },
        // {
        //   label: "电源历史告警",
        //   name: "powerHistoryInfo",
        //   src: "/alarmMager/powerHistoryInfo",
        //   closable: true,
        //   id: 4002,
        //   menuId: 4,
        //   enableduse: true,
        //   ord: 2,
        //   level: 2,
        // },
        {
          label: "电池告警实时查询",
          name: "batteryrTimequery",
@@ -426,57 +426,51 @@
          ord: 6,
          level: 2,
        },
        {
          label: "通信电源实时告警",
          name: "powerBoxAlarm",
          src: "/alarmMager/powerBoxAlarm",
          closable: true,
          id: 4007,
          menuId: 4,
          enableduse: true,
          ord: 7,
          level: 2,
        },
        {
          label: "通信电源历史告警",
          name: "powerBoxHistoryAlarm",
          src: "/alarmMager/powerBoxHistoryAlarm",
          closable: true,
          id: 4008,
          menuId: 4,
          enableduse: true,
          ord: 8,
          level: 2,
        },
        {
          label: "通信电源超时告警",
          name: "powerAlarmTimeout",
          src: "/alarmMager/powerAlarmTimeout",
          closable: true,
          id: 4009,
          menuId: 4,
          enableduse: true,
          ord: 9,
          level: 2,
        },
        // {
        //     label: "电池告警参数设置",
        //     name: "batterypaSetting",
        //     src: "/batterypaSetting",
        //     closable: true
        //   label: "通信电源实时告警",
        //   name: "powerBoxAlarm",
        //   src: "/alarmMager/powerBoxAlarm",
        //   closable: true,
        //   id: 4007,
        //   menuId: 4,
        //   enableduse: true,
        //   ord: 7,
        //   level: 2,
        // },
        {
          label: "通信电源告警规则",
          name: "powerCabinetSetting",
          src: "/alarmMager/powerCabinetSetting",
          // permitName: "batt_alm_param_query_permit",
          closable: true,
          id: 4010,
          menuId: 4,
          enableduse: true,
          ord: 10,
          level: 2,
        },
        // {
        //   label: "通信电源历史告警",
        //   name: "powerBoxHistoryAlarm",
        //   src: "/alarmMager/powerBoxHistoryAlarm",
        //   closable: true,
        //   id: 4008,
        //   menuId: 4,
        //   enableduse: true,
        //   ord: 8,
        //   level: 2,
        // },
        // {
        //   label: "通信电源超时告警",
        //   name: "powerAlarmTimeout",
        //   src: "/alarmMager/powerAlarmTimeout",
        //   closable: true,
        //   id: 4009,
        //   menuId: 4,
        //   enableduse: true,
        //   ord: 9,
        //   level: 2,
        // },
        // {
        //   label: "通信电源告警规则",
        //   name: "powerCabinetSetting",
        //   src: "/alarmMager/powerCabinetSetting",
        //   // permitName: "batt_alm_param_query_permit",
        //   closable: true,
        //   id: 4010,
        //   menuId: 4,
        //   enableduse: true,
        //   ord: 10,
        //   level: 2,
        // },
        {
          label: "电池告警参数设置",
          name: "devicepaSetting",
@@ -489,185 +483,185 @@
          ord: 11,
          level: 2,
        },
        {
          label: "告警预处理管理",
          name: "alarmHandle",
          src: "/alarmMager/alarmHandle",
          permitName: "batt_alm_param_query_permit",
          closable: true,
          id: 4013,
          menuId: 4,
          enableduse: true,
          ord: 13,
          level: 2,
        },
        // {
        //   label: "告警预处理管理",
        //   name: "alarmHandle",
        //   src: "/alarmMager/alarmHandle",
        //   permitName: "batt_alm_param_query_permit",
        //   closable: true,
        //   id: 4013,
        //   menuId: 4,
        //   enableduse: true,
        //   ord: 13,
        //   level: 2,
        // },
        // 最大ord=13
      ]
    },
    {
      label: "报表统计",
      name: "reportStatistics",
      src: "",
      icon: "el-icon-tickets",
      closable: false,
      noChild: false,
      id: 5,
      menuId: 5,
      enableduse: true,
      ord: 5,
      level: 1,
      childrens: [
        {
          label: "电池组统计分析查询",
          name: "eleAnalyse",
          src: "/reportStatistics/eleAnalyse",
          closable: true,
          id: 5001,
          menuId: 5,
          enableduse: true,
          ord: 1,
          level: 2,
        },
        {
          label: "电池单体统计分析查询",
          name: "eleMonomer",
          src: "/reportStatistics/eleMonomer",
          closable: true,
          id: 5002,
          menuId: 5,
          enableduse: true,
          ord: 2,
          level: 2,
        },
        {
          label: "蓄电池组后评估",
          name: "eleAssess",
          src: "/reportStatistics/eleAssess",
          closable: true,
          id: 5003,
          menuId: 5,
          enableduse: true,
          ord: 3,
          level: 2,
        },
        {
          label: "落后单体查询",
          name: "taskplan",
          src: "/reportStatistics/taskplan",
          closable: true,
          id: 5004,
          menuId: 5,
          enableduse: true,
          ord: 4,
          level: 2,
        },
        {
          label: "电池实时状态查询",
          name: "elestatus",
          src: "/reportStatistics/elestatus",
          closable: true,
          id: 5005,
          menuId: 5,
          enableduse: true,
          ord: 5,
          level: 2,
        },
        {
          label: "电池续航能力历史查询",
          name: "endure",
          src: "/reportStatistics/endure",
          closable: true,
          id: 5006,
          menuId: 5,
          enableduse: true,
          ord: 6,
          level: 2,
        },
        {
          label: '通信电源报表',
          name: 'powerReport',
          src: '/reportStatistics/powerReport',
          closable: true,
          id: 5007,
          menuId: 5,
          enableduse: true,
          ord: 7,
          level: 2,
        },
        {
          label: "事件总表",
          name: "eventTotalPage",
          src: "/reportStatistics/eventTotalPage",
          closable: true,
          id: 5008,
          menuId: 5,
          enableduse: true,
          ord: 8,
          level: 2,
        },
        // 最大ord=8
      ],
    },
    {
      label: "作业管理",
      name: "jobManage",
      src: "",
      icon: "el-icon-s-cooperation",
      closable: false,
      noChild: false,
      id: 6,
      menuId: 6,
      enableduse: true,
      ord: 6,
      level: 1,
      childrens: [
        {
          label: "BTS设备升级",
          name: "btsUpgrade",
          src: "/jobManage/btsUpgrade",
          closable: true,
          id: 6001,
          menuId: 6,
          enableduse: true,
          ord: 1,
          level: 2,
        },
        {
          label: "9度设备升级",
          name: "nineDevUpdate",
          src: "/jobManage/nineDevUpdate",
          closable: true,
          id: 6003,
          menuId: 6,
          enableduse: true,
          ord: 3,
          level: 2,
        },
        {
          label: "一体机设备升级",
          name: "aioUpdate",
          src: "/jobManage/aioUpdate",
          closable: true,
          id: 6004,
          menuId: 6,
          enableduse: true,
          ord: 4,
          level: 2,
        },
        {
          label: "放电计划管理",
          name: "planManage",
          src: "/jobManage/planManage",
          closable: true,
          id: 6002,
          menuId: 6,
          enableduse: true,
          ord: 2,
          level: 2,
        },
        // 最大ord=4
      ],
    },
    // {
    //   label: "报表统计",
    //   name: "reportStatistics",
    //   src: "",
    //   icon: "el-icon-tickets",
    //   closable: false,
    //   noChild: false,
    //   id: 5,
    //   menuId: 5,
    //   enableduse: true,
    //   ord: 5,
    //   level: 1,
    //   childrens: [
    //     {
    //       label: "电池组统计分析查询",
    //       name: "eleAnalyse",
    //       src: "/reportStatistics/eleAnalyse",
    //       closable: true,
    //       id: 5001,
    //       menuId: 5,
    //       enableduse: true,
    //       ord: 1,
    //       level: 2,
    //     },
    //     {
    //       label: "电池单体统计分析查询",
    //       name: "eleMonomer",
    //       src: "/reportStatistics/eleMonomer",
    //       closable: true,
    //       id: 5002,
    //       menuId: 5,
    //       enableduse: true,
    //       ord: 2,
    //       level: 2,
    //     },
    //     {
    //       label: "蓄电池组后评估",
    //       name: "eleAssess",
    //       src: "/reportStatistics/eleAssess",
    //       closable: true,
    //       id: 5003,
    //       menuId: 5,
    //       enableduse: true,
    //       ord: 3,
    //       level: 2,
    //     },
    //     {
    //       label: "落后单体查询",
    //       name: "taskplan",
    //       src: "/reportStatistics/taskplan",
    //       closable: true,
    //       id: 5004,
    //       menuId: 5,
    //       enableduse: true,
    //       ord: 4,
    //       level: 2,
    //     },
    //     {
    //       label: "电池实时状态查询",
    //       name: "elestatus",
    //       src: "/reportStatistics/elestatus",
    //       closable: true,
    //       id: 5005,
    //       menuId: 5,
    //       enableduse: true,
    //       ord: 5,
    //       level: 2,
    //     },
    //     {
    //       label: "电池续航能力历史查询",
    //       name: "endure",
    //       src: "/reportStatistics/endure",
    //       closable: true,
    //       id: 5006,
    //       menuId: 5,
    //       enableduse: true,
    //       ord: 6,
    //       level: 2,
    //     },
    //     {
    //       label: '通信电源报表',
    //       name: 'powerReport',
    //       src: '/reportStatistics/powerReport',
    //       closable: true,
    //       id: 5007,
    //       menuId: 5,
    //       enableduse: true,
    //       ord: 7,
    //       level: 2,
    //     },
    //     {
    //       label: "事件总表",
    //       name: "eventTotalPage",
    //       src: "/reportStatistics/eventTotalPage",
    //       closable: true,
    //       id: 5008,
    //       menuId: 5,
    //       enableduse: true,
    //       ord: 8,
    //       level: 2,
    //     },
    //     // 最大ord=8
    //   ],
    // },
    // {
    //   label: "作业管理",
    //   name: "jobManage",
    //   src: "",
    //   icon: "el-icon-s-cooperation",
    //   closable: false,
    //   noChild: false,
    //   id: 6,
    //   menuId: 6,
    //   enableduse: true,
    //   ord: 6,
    //   level: 1,
    //   childrens: [
    //     {
    //       label: "BTS设备升级",
    //       name: "btsUpgrade",
    //       src: "/jobManage/btsUpgrade",
    //       closable: true,
    //       id: 6001,
    //       menuId: 6,
    //       enableduse: true,
    //       ord: 1,
    //       level: 2,
    //     },
    //     {
    //       label: "9度设备升级",
    //       name: "nineDevUpdate",
    //       src: "/jobManage/nineDevUpdate",
    //       closable: true,
    //       id: 6003,
    //       menuId: 6,
    //       enableduse: true,
    //       ord: 3,
    //       level: 2,
    //     },
    //     {
    //       label: "一体机设备升级",
    //       name: "aioUpdate",
    //       src: "/jobManage/aioUpdate",
    //       closable: true,
    //       id: 6004,
    //       menuId: 6,
    //       enableduse: true,
    //       ord: 4,
    //       level: 2,
    //     },
    //     {
    //       label: "放电计划管理",
    //       name: "planManage",
    //       src: "/jobManage/planManage",
    //       closable: true,
    //       id: 6002,
    //       menuId: 6,
    //       enableduse: true,
    //       ord: 2,
    //       level: 2,
    //     },
    //     // 最大ord=4
    //   ],
    // },
    {
      label: "用户管理",
      name: "userMager",
@@ -693,17 +687,17 @@
          ord: 1,
          level: 2,
        },
        {
          label: "用户人脸管理",
          name: "userFaceManager",
          src: "/userMager/userFaceManager",
          closable: true,
          id: 7002,
          menuId: 7,
          enableduse: true,
          ord: 2,
          level: 2,
        },
        // {
        //   label: "用户人脸管理",
        //   name: "userFaceManager",
        //   src: "/userMager/userFaceManager",
        //   closable: true,
        //   id: 7002,
        //   menuId: 7,
        //   enableduse: true,
        //   ord: 2,
        //   level: 2,
        // },
        {
          label: "权限管理",
          name: "powerMager",
@@ -728,17 +722,6 @@
          ord: 4,
          level: 2,
        },
        // {
        //     label: "班组管理",
        //     name: "groupManage",
        //     src: "/userMager/groupManage",
        //     closable: true,
        //     id: 7006,
        //     menuId: 7,
        //     enableduse: true,
        //     ord: 6,
        //     level: 2,
        // },
        {
          label: "操作事件管理",
          name: "operationRecordMager",
@@ -779,28 +762,28 @@
          level: 2,
          disabled: true
        },
        {
          label: "3D机房配置",
          name: "threeHomeSetting",
          src: "/pageSetting/threeHomeSetting",
          closable: true,
          id: 8002,
          menuId: 8,
          enableduse: true,
          ord: 2,
          level: 2,
        },
        {
          label: "地图配置",
          name: "chartMapSetting",
          src: "/pageSetting/chartMapSetting",
          closable: true,
          id: 8003,
          menuId: 8,
          enableduse: true,
          ord: 3,
          level: 2,
        }
        // {
        //   label: "3D机房配置",
        //   name: "threeHomeSetting",
        //   src: "/pageSetting/threeHomeSetting",
        //   closable: true,
        //   id: 8002,
        //   menuId: 8,
        //   enableduse: true,
        //   ord: 2,
        //   level: 2,
        // },
        // {
        //   label: "地图配置",
        //   name: "chartMapSetting",
        //   src: "/pageSetting/chartMapSetting",
        //   closable: true,
        //   id: 8003,
        //   menuId: 8,
        //   enableduse: true,
        //   ord: 3,
        //   level: 2,
        // }
        // 最大ord=3
      ]
    }
src/components/FlexLayout.vue
@@ -4,7 +4,7 @@
    :class="getRootClass"
    :style="getRootStyle"
    v-loading="loading"
    element-loading-text="拼命加载中"
    :element-loading-text="$t('other.loading')"
    element-loading-spinner="el-icon-loading"
    element-loading-background="rgba(0, 0, 0, 0.2)"
  >
src/layout/components/AlarmPopup.vue
@@ -13,9 +13,9 @@
              <span>{{ $t('AlarmPrompt') }}</span>
            </div>
          </div>
          <div class="alarm-popup-voice" v-if="!speakItem.txt">
          <!-- <div class="alarm-popup-voice" v-if="!speakItem.txt">
            <i class="iconfont el-icon-shengyin-kai"></i>
          </div>
          </div> -->
          <div class="alarm-popup-close" @click="close">
            <i class="el-icon-close"></i>
          </div>
@@ -32,9 +32,9 @@
            <div class="page-flex-box-body">
              <el-table class="popup-table" stripe size="small" header-row-class-name="header-primary" height="100%"
                :data="tblAlarmList">
                <el-table-column prop="stationName3" align="center" :label="$t('EquipmentRoomName')"
                <el-table-column prop="stationName3" show-overflow-tooltip align="center" :label="$t('EquipmentRoomName')"
                  min-width="240"></el-table-column>
                <el-table-column prop="alarmName" align="center" :label="$t('AlarmName')"
                <el-table-column prop="alarmName" show-overflow-tooltip align="center" :label="$t('AlarmName')"
                  min-width="120"></el-table-column>
                <el-table-column prop="alarmLevel" align="center" :label="$t('AlarmLevel')"
                  min-width="120"></el-table-column>
@@ -43,7 +43,7 @@
                <el-table-column :label="$t('operate.operation')" width="180" align="center">
                  <template slot-scope="scope">
                    <el-button type="success" size="mini" @click="clickItem(scope.row)">{{ $t('Detail') }}</el-button>
                    <el-button type="danger" size="mini" @click="handleTimeout(scope.row)">{{ $t('Delay') }}</el-button>
                    <!-- <el-button type="danger" size="mini" @click="handleTimeout(scope.row)">{{ $t('Delay') }}</el-button> -->
                  </template>
                </el-table-column>
              </el-table>
@@ -209,64 +209,65 @@
      this.clickItemVal = val;
      this.stationName = val.stationName;
      this.alarmId = val.almId;
      let almLevel = val.alarmLevel;
      let highorlow = 0;
      let almSignalId = val.almSignalId;
      let almSource = this.$t('CommunicationPower');
      if (val.alarmType == '1') {   // 设备告警
        highorlow = 0;
        almSource = this.$t('BTSEquipment');
      } else if (val.alarmType == "2") {    // 电源告警
        almSource = this.$t('CommunicationPower');
        highorlow = 0;
      } else {     // 电池告警
        almSource = this.$t('BatteryGroup');
        if (almSignalId % 2 == 0) {
          highorlow = 1;
        } else {
          highorlow = 2;
        }
      }
      this.routeToPage();
      // let almLevel = val.alarmLevel;
      // let highorlow = 0;
      // let almSignalId = val.almSignalId;
      // let almSource = this.$t('CommunicationPower');
      // if (val.alarmType == '1') {   // 设备告警
      //   highorlow = 0;
      //   almSource = this.$t('BTSEquipment');
      // } else if (val.alarmType == "2") {    // 电源告警
      //   almSource = this.$t('CommunicationPower');
      //   highorlow = 0;
      // } else {     // 电池告警
      //   almSource = this.$t('BatteryGroup');
      //   if (almSignalId % 2 == 0) {
      //     highorlow = 1;
      //   } else {
      //     highorlow = 2;
      //   }
      // }
      let almName = "";
      let almPoint = "";
      let allAlm = this.allAlarms;
      for (let j = 0; j < allAlm.length; j++) {
        let itemList = allAlm[j];
        if (itemList.almId == val.almId && itemList.highorlow == highorlow) {
          almName = itemList.almName;
          almName += itemList.highorlow == 0 ? "" : itemList.highorlow == 1 ? this.$t('Low') : this.$t('High');
          almPoint = itemList.almPoint;
        }
      }
      alarmDetails.searchById(val.almId, highorlow).then(res => {
        let rs = res.data;
        if (rs.code == 1 && rs.data) {
          let data = rs.data2;
          let almReason = data[0].almReason;
          let almAdvices = [];
          for (let i = 0; i < data.length; i++) {
            almAdvices.push(data[i].almAdvice);
          }
          this.params = {
            almSource,  // 告警源
            almName,    // 告警名称
            almLevel,    // 告警等级
            almPoint,   // 告警点
            almReason,  // 告警原因
            almAdvices  // 告警处理建议
          };
          this.detailsVisible = true;
        } else {
          // this.$alert('暂无'+almName+"处理方案,请联系管理员添加", '系统提示', {
          //   confirmButtonText: '确定',
          //   callback: action => {}
          // });
          this.routeToPage();
        }
      }).catch(error => {
        this.routeToPage();
      });
      // let almName = "";
      // let almPoint = "";
      // let allAlm = this.allAlarms;
      // for (let j = 0; j < allAlm.length; j++) {
      //   let itemList = allAlm[j];
      //   if (itemList.almId == val.almId && itemList.highorlow == highorlow) {
      //     almName = itemList.almName;
      //     almName += itemList.highorlow == 0 ? "" : itemList.highorlow == 1 ? this.$t('Low') : this.$t('High');
      //     almPoint = itemList.almPoint;
      //   }
      // }
      // alarmDetails.searchById(val.almId, highorlow).then(res => {
      //   let rs = res.data;
      //   if (rs.code == 1 && rs.data) {
      //     let data = rs.data2;
      //     let almReason = data[0].almReason;
      //     let almAdvices = [];
      //     for (let i = 0; i < data.length; i++) {
      //       almAdvices.push(data[i].almAdvice);
      //     }
      //     this.params = {
      //       almSource,  // 告警源
      //       almName,    // 告警名称
      //       almLevel,    // 告警等级
      //       almPoint,   // 告警点
      //       almReason,  // 告警原因
      //       almAdvices  // 告警处理建议
      //     };
      //     this.detailsVisible = true;
      //   } else {
      //     // this.$alert('暂无'+almName+"处理方案,请联系管理员添加", '系统提示', {
      //     //   confirmButtonText: '确定',
      //     //   callback: action => {}
      //     // });
      //     this.routeToPage();
      //   }
      // }).catch(error => {
      //   this.routeToPage();
      // });
      // if (val.alarmType == '1') {
      //   //设备实时告警
      //   this.$router.push('/alarmMager/deviceTimequery' + this.search + '&fromType=fromIndex')
@@ -398,6 +399,12 @@
  },
  mounted() {
    this.searchAll();
    this.$bus.$on('langChanged', () => {
      this.times[0].label = this.$tc('mins', 30);
      this.times[1].label = this.$tc('hours', 24);
      this.times[2].label = this.$tc('days', 7);
      this.times[3].label = this.$tc('days', 30);
    });
  }
}
</script>
src/layout/components/Navbar.vue
@@ -34,7 +34,7 @@
                <progress-bar v-if="showProgress" :options="options" :value="serverInfo.linkNum.progress"></progress-bar>
              </div>
            </el-tooltip>
            <div class="header-info-item" style="margin-left: 60px;">
            <div class="header-info-item" style="margin-left: 30px;">
              <progress-state icon="el-icon-fuwuqi" :state="processInfo.sql" :content="processSqlMsg">
              </progress-state>
              <progress-state icon="el-icon-WIFIwofi" :state="processInfo.link" :content="processLinkMsg">
src/layout/components/i18n/AlarmPopup.js
@@ -19,6 +19,7 @@
      Low: '低',
      High: '高',
      occurred: '出现了',
      AlarmMsg: '{station} 在 {time} 出现了 {alarm}'
    },
    US: {
      AlarmPrompt: 'Alarm Prompt!',
@@ -39,6 +40,7 @@
      Low: 'Low',
      High: 'High',
      occurred: ' occurred',
      AlarmMsg: '{alarm} occurred in {station} at {time}'
    },
  },
}
src/layout/components/marqueeLeft.vue
@@ -3,7 +3,8 @@
        <div class="my-inbox">
            <div v-for="(item,index) in listData" :key='index' ref='list' @click="clickItem(item)" class="my-list">
                <div v-if="!item.isEmpty">
                    {{item.stationName}}在{{item.almStartTime}}出现了{{item.alarmName||'未知'}}
                    <!-- {{item.stationName}}在{{item.almStartTime}}出现了{{item.alarmName||'未知'}} -->
          {{ $t('AlarmMsg', {station: item.stationName, time: item.almStartTime, alarm: item.alarmName || '未知'}) }}
                    <img src="../../assets/images/new.png" class="img" v-if="item.isNew">
                </div>
                <div v-else :style="{'width':item.width+'px'}"></div>
@@ -12,7 +13,8 @@
        <div class="my-inbox" slot="copy">
            <div v-for="(item,index) in listData" :key='index' ref='list' @click="clickItem(item)" class="my-list">
                <div v-if="!item.isEmpty">
                    {{item.stationName}}在{{item.almStartTime}}出现了{{item.alarmName||'未知'}}
                    <!-- {{item.stationName}}在{{item.almStartTime}}出现了{{item.alarmName||'未知'}} -->
          {{ $t('AlarmMsg', {station: item.stationName, time: item.almStartTime, alarm: item.alarmName || '未知'}) }}
                    <img src="../../assets/images/new.png" class="img" v-if="item.isNew">
                </div>
                <div v-else :style="{'width':item.width+'px'}"></div>
@@ -23,8 +25,12 @@
<script>
import vueSeamlessScroll from '@/layout/components/FooterScroll.vue';
import i18n from './i18n/AlarmPopup';
import { createI18nOption } from '@/assets/js/tools/i18n';
const i18nMixin = createI18nOption(i18n);
export default {
    name: 'marquee-left',
  mixins: [i18nMixin],
    components: {
        vueSeamlessScroll
    },
src/layout/index.vue
@@ -45,6 +45,9 @@
const WSMixin = createWs("battAlarmFoot", "loginCheck", "sendAlarmData");
// import getWsUrl from '@/assets/js/websocket/getWsUrl';
const times = 10 * 1000;
import i18n from '@/assets/js/i18n/const_alarm_level';
import { createI18nOption } from '@/assets/js/tools/i18n';
const i18nMixin = createI18nOption(i18n);
// const wsUri2 = getWsUrl("loginCheck");
export default {
  name: "Layout",
@@ -77,7 +80,7 @@
      },
    };
  },
  mixins: [ResizeMixin, WSMixin],
  mixins: [ResizeMixin, WSMixin, i18nMixin],
  watch: {
    "$store.state.ukey.isIn"(isIn) {
      if (!isIn) {
@@ -144,7 +147,7 @@
    onWSMessage1(res) {
      let resData = JSON.parse(res.data);
      this.list = resData.data.map(item=>{
        item.alarmLevel = getLabelByValue(item.almLevel, const_alarm_level.levelNumber, "----");
        item.alarmLevel = this.$t(getLabelByValue(item.almLevel, const_alarm_level.levelNumber));
        return item;
      });
@@ -327,6 +330,9 @@
    //   this.$options.voice.play("您好", this.handleClickOutside);
    // }, 4000);
    this.getAlarmVoiceSetting();
    this.$bus.$on('langChanged', () => {
      this.sendMessage1();
    });
  },
  destroyed() {
src/views/alarmMager/components/alarm-timeout-setting.vue
@@ -11,21 +11,21 @@
        <el-col :span="12">
          <el-form-item label="" prop="almReason">
            <el-input type="number" v-model="params.hour">
              <template slot="append">小时</template>
              <template slot="append">{{ $tc('other.hours', params.hour) }}</template>
            </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="" prop="almReason">
            <el-input type="number" v-model="params.minute">
              <template slot="append">分钟</template>
              <template slot="append">{{ $tc('other.mins', params.minute) }}</template>
            </el-input>
          </el-form-item>
        </el-col>
      </el-row>
      <div class="form-footer">
        <el-button type="primary" size="mini" @click="confirmSubmit">确定</el-button>
        <el-button type="danger" size="mini" @click="close">关闭</el-button>
        <el-button type="primary" size="mini" @click="confirmSubmit">{{ $t('operate.ok') }}</el-button>
        <el-button type="danger" size="mini" @click="close">{{ $t('operate.close') }}</el-button>
      </div>
    </el-form>
  </div>
src/views/dataMager/components/AddBattGroup.vue
@@ -454,7 +454,7 @@
          {
            required: true,
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.FbsDeviceIp, vm);
              testVal(rule, value, callback, rules.FbsDeviceIp, vm, 'constRule');
            },
            trigger: "change",
          },
@@ -463,7 +463,7 @@
          {
            required: true,
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.FbsDeviceIp_YM, vm);
              testVal(rule, value, callback, rules.FbsDeviceIp_YM, vm, 'constRule');
            },
            trigger: "change",
          },
@@ -472,7 +472,7 @@
          {
            required: true,
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.FbsDeviceIp_WG, vm);
              testVal(rule, value, callback, rules.FbsDeviceIp_WG, vm, 'constRule');
            },
            trigger: "change",
          },
src/views/dataMager/components/EditBattGroup.vue
@@ -433,7 +433,7 @@
          {
            required: true,
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.FbsDeviceIp, vm);
              testVal(rule, value, callback, rules.FbsDeviceIp, vm, 'constRule');
            },
            trigger: "change",
          },
@@ -443,7 +443,7 @@
          {
            required: true,
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.FbsDeviceIp_YM, vm);
              testVal(rule, value, callback, rules.FbsDeviceIp_YM, vm, 'constRule');
            },
            trigger: "change",
          },
@@ -452,7 +452,7 @@
          {
            required: true,
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.FbsDeviceIp_WG, vm);
              testVal(rule, value, callback, rules.FbsDeviceIp_WG, vm, 'constRule');
            },
            trigger: "change",
          },
src/views/dataTest/components/DataDiffter.vue
@@ -2,28 +2,28 @@
  <div class="params-container">
    <el-row :gutter="layout.gutter">
      <el-col :span="12" class="tbl-wrapper-dialog">
        <flex-box size="mini" title="单体电压差折线图">
        <flex-box size="mini" :title="$t('other.CellVoltageDifferenceLineChart')">
          <div slot="tools" class="params-dialog-tools">
            <div class="input-wrapper">
              <el-input v-model="baseTime" size="mini" type="text">
                <template slot="prepend">基准时间</template>
                <template slot="append">分钟</template>
                <template slot="prepend">{{ $t('other.ReferenceTime') }}</template>
                <template slot="append">{{ $tc('other.mins', baseTime) }}</template>
              </el-input>
            </div>
            <el-button type="primary" size="mini" icon="el-icon-refresh" @click="formatData">更新</el-button>
            <el-button type="primary" size="mini" icon="el-icon-refresh" @click="formatData">{{ $t('operate.Update') }}</el-button>
          </div>
          <normal-lines ref="vol" unit="V"></normal-lines>
        </flex-box>
      </el-col>
      <el-col :span="12" class="tbl-wrapper-dialog">
        <flex-box size="mini" title="单体温度差折线图">
        <flex-box size="mini" :title="$t('other.CellTempDifferenceLineChart')">
          <normal-lines ref="temp" unit="℃"></normal-lines>
        </flex-box>
      </el-col>
    </el-row>
    <div class="form-footer">
      <el-button type="primary" size="mini" @click="success">确定</el-button>
      <el-button type="warning" size="mini" @click="close">取消</el-button>
      <el-button type="primary" size="mini" @click="success">{{ $t('operate.ok') }}</el-button>
      <el-button type="warning" size="mini" @click="close">{{ $t('operate.cancel') }}</el-button>
    </div>
  </div>
</template>
src/views/dataTest/components/i18n/fbo4831DischargeParams.js
@@ -54,7 +54,7 @@
      disCap: 'Discharge Capacity',
      disPreRes: 'Discharge Resistance',
      disTime: 'Discharge Time',
      monomerLowCount: 'Cell Low Limit',
      monomerLowCount: 'Cell Low Limit Qty',
      charge: 'Charge',
      charCap: 'Charge Capacity',
      charTimeLong: 'Charge Time',
src/views/dataTest/history.vue
@@ -1544,6 +1544,7 @@
        this.$refs.groupVol.getOption(groupVolLineChart);
      groupVolLineChartOption.title.show = true;
      groupVolLineChartOption.title.x = "center";
      groupVolLineChartOption.title.text = this.$t('StringVoltLineChart');
      groupVolLineChartOption.legend.show = false;
      this.createGraphByOpt(groupVolLineChartOption);
      let oltop = allGraph.getDataURL({
@@ -1555,6 +1556,7 @@
      let currLineChartOption = this.$refs.groupVol.getOption(currLineChart);
      currLineChartOption.title.show = true;
      currLineChartOption.title.x = "center";
      currLineChartOption.title.text = this.$t('BatteryCurrentLineChart');
      currLineChartOption.legend.show = false;
      this.createGraphByOpt(currLineChartOption);
      let ortop = allGraph.getDataURL({
@@ -1663,7 +1665,7 @@
      // 单体电压折线图
      monLineChart.title.show = true;
      monLineChart.title.text = "单体电压(V)";
      monLineChart.title.text = this.$t('CellVoltage') + " (V)";
      monLineChart.title.x = "center";
      monLineChart.series = monLineData.vol.map((item, index) => {
        let monNum = "#" + (index + 1);
@@ -1681,7 +1683,7 @@
      // 单体温度折线图
      monLineChart.title.show = true;
      monLineChart.title.text = "单体温度(℃)";
      monLineChart.title.text = this.$t('CellTemperature') + " (℃)";
      monLineChart.title.x = "center";
      monLineChart.series = monLineData.temp.map((item, index) => {
        let monNum = "#" + (index + 1);
@@ -1699,7 +1701,7 @@
      // 单体剩余容量折线图
      monLineChart.title.show = true;
      monLineChart.title.text = "剩余容量(AH)";
      monLineChart.title.text = this.$t('RemainingCapacity') + " (AH)";
      monLineChart.title.x = "center";
      monLineChart.series = monLineData.resCap.map((item, index) => {
        let monNum = "#" + (index + 1);
@@ -1724,7 +1726,7 @@
      monBarChart.title.show = true;
      monBarChart.title.text = this.getTitle(monBarResArr, "Resistance");
      monBarChart.title.x = "center";
      monBarChart.series[0].name = "单体内阻";
      monBarChart.series[0].name = this.$t('CellResistance');
      monBarChart.series[0].data = monBarRes;
      monBarChart.series[1].name = "";
      monBarChart.series[1].data = [];
src/views/dataTest/realTimeFbo4831.vue
@@ -22,11 +22,11 @@
          <hdw-light :type="isLink"></hdw-light>
        </el-tooltip>
      </div>
      <div slot="box-tools" class="box-tools" style="right: 106px">
      <!-- <div slot="box-tools" class="box-tools" style="right: 106px">
        <el-tooltip class="item" effect="dark" :content="$t('D3EquipmentRoom')" placement="bottom">
          <i class="el-iconfont el-icon-office-building" @click="station.show = true"></i>
        </el-tooltip>
      </div>
      </div> -->
      <flex-layout :no-bg="true">
        <div class="content-header" slot="header" :model="inputs">
          <div class="table-layout">
src/views/home/components/batt-card.vue
@@ -5,15 +5,19 @@
      <div class="value">{{ value }}</div>
      <div :class="['icon', { 'batt': 0 == type, 'good': 1 == type, 'bad': 2 == type, 'break': 3 == type }]"></div>
      <!-- 标签 -->
      <div class="tag">{{ tag }}</div>
      <div class="tag">{{ $t(tag) }}</div>
    </div>
  </div>
</template>
<script>
const types = ['电池组总数', '电池组优良', '电池组劣化', '电池组损坏'];
const types = ['Total', 'Quality', 'Deterioration1', 'Damage1'];
import i18n from '../i18n/home-conductor';
import { createI18nOption } from '@/assets/js/tools/i18n';
const i18nMixin = createI18nOption(i18n);
export default {
  name: '',
  mixins: [i18nMixin],
  props: {
    type: {
      type: Number,
@@ -45,13 +49,13 @@
          this.$router.push("/dataMager/battGroupMager");
          break;
        case 1:
          this.$router.push("/reportStatistics/eleAssess");
          // this.$router.push("/reportStatistics/eleAssess");
          break;
        case 2:
          this.$router.push("/reportStatistics/eleAssess");
          // this.$router.push("/reportStatistics/eleAssess");
          break;
        case 3:
          this.$router.push("/reportStatistics/eleAssess");
          // this.$router.push("/reportStatistics/eleAssess");
          break;
        default:
          break;
src/views/home/components/total-data.vue
@@ -5,14 +5,18 @@
      <div class="value">{{ value }}</div>
    </div>
    <!-- 标签 -->
    <div class="tag">{{ tag }}</div>
    <div class="tag">{{ $t(tag) }}</div>
  </div>
</template>
<script>
const types = ['站点', '电源', '电池组', '本年已放数'];
const types = ['Site', 'Power', 'BatteryGroup', 'Annualcheckedcapacity'];
import i18n from '../i18n/home-conductor';
import { createI18nOption } from '@/assets/js/tools/i18n';
const i18nMixin = createI18nOption(i18n);
export default {
  name: '',
  mixins: [i18nMixin],
  props: {
    type: {
      type: Number,
@@ -50,7 +54,7 @@
          this.$router.push("/dataMager/battGroupMager");
          break;
        case 3:
          this.$router.push("/reportStatistics/eleAssess");
          // this.$router.push("/reportStatistics/eleAssess");
          break;
      }
    }
@@ -98,7 +102,8 @@
  color: #011f39;
  font-size: 18px;
  height: 2em;
  width: 6.6em;
  padding: 0 1em;
  /* width: 6.6em; */
  font-weight: bold;
  background: url('../images/tag.png') center center / 100% 100% no-repeat;
}
src/views/home/home-conductor.vue
@@ -4,32 +4,20 @@
    <div class="main-item">
      <!-- 上 -->
      <div class="row-1">
        <card class="card row-1" title="基础资源信息" content-class="base-card">
          <total-data
            class="row-item"
            :type="0"
            :value="base.stationNum | toLarge"
          ></total-data>
          <total-data
        <card class="card row-1" :title="$t('BasicResourceInfo')" content-class="base-card">
          <total-data class="row-item" :type="0" :value="base.stationNum | toLarge"></total-data>
          <!-- <total-data
            class="row-item"
            :type="1"
            :value="base.powerNum | toLarge"
          ></total-data>
          <total-data
            class="row-item"
            :type="2"
            :value="base.battGroupCount | toLarge"
          ></total-data>
          <total-data
            class="row-item"
            :type="3"
            :value="base.hrDisNum | toLarge"
          ></total-data>
          ></total-data> -->
          <total-data class="row-item" :type="2" :value="base.battGroupCount | toLarge"></total-data>
          <total-data class="row-item" :type="3" :value="base.hrDisNum | toLarge"></total-data>
        </card>
      </div>
      <!-- 中 -->
      <div class="sub-item row-2">
        <card class="card" title="站点信息" content-class="station">
        <!-- <card class="card" title="站点信息" content-class="station">
          <template #tools>
            <el-radio-group
              size="mini"
@@ -42,21 +30,16 @@
            </el-radio-group>
            <el-tag class="cur-point mrl8" effect="dark" size="mini" type="success" @click="goToStationInfo">更多>></el-tag>
          </template>
          <!-- <bar-chart ref="station"></bar-chart> -->
          <bar3d3 ref="station"></bar3d3>
        </card>
        <card class="card" title="电池信息">
        </card> -->
        <card class="card" :title="$t('BatteryInfo')">
          <template #tools>
            <el-radio-group
              size="mini"
              :disabled="!chartData.batt.length"
              @input="battLevelChange"
              v-model="battLevel"
            >
              <el-radio-button :label="0">按品牌</el-radio-button>
              <el-radio-button :label="1">按电压类型</el-radio-button>
            <el-radio-group size="mini" :disabled="!chartData.batt.length" @input="battLevelChange" v-model="battLevel">
              <el-radio-button :label="0">{{ $t('Brand') }}</el-radio-button>
              <el-radio-button :label="1">{{ $t('VoltageType') }}</el-radio-button>
            </el-radio-group>
            <el-tag class="cur-point mrl8" effect="dark" size="mini" type="success" @click="goToBattInfo">更多>></el-tag>
            <el-tag class="cur-point mrl8" effect="dark" size="mini" type="success" @click="goToBattInfo">{{ $t('More')
            }}>></el-tag>
          </template>
          <!-- <pie-chart ref="battInfo"></pie-chart> -->
          <pie3d ref="battInfo"></pie3d>
@@ -64,24 +47,18 @@
      </div>
      <!-- 下 -->
      <div class="sub-item row-3">
        <card class="card" title="电源信息">
        <!-- <card class="card" title="电源信息">
          <template #tools>
            <el-tag class="cur-point mrl8" effect="dark" size="mini" type="success" @click="goToPowerInfo">更多>></el-tag>
          </template>
          <!-- <power-chart ref="powerChart"></power-chart> -->
          <pie3d ref="powerChart" :theme-idx="1"></pie3d>
        </card>
        <card class="card" title="测试信息" content-class="test">
        </card> -->
        <card class="card" :title="$t('TestInfo')" content-class="test">
          <template #tools>
            <el-radio-group
              size="mini"
              :disabled="!chartData.test.length"
              @input="testLevelChange"
              v-model="testLevel"
            >
              <el-radio-button :label="0">本月</el-radio-button>
              <el-radio-button :label="1">本季度</el-radio-button>
              <el-radio-button :label="2">本年</el-radio-button>
            <el-radio-group size="mini" :disabled="!chartData.test.length" @input="testLevelChange" v-model="testLevel">
              <el-radio-button :label="0">{{ $t('CurrentMonth') }}</el-radio-button>
              <el-radio-button :label="1">{{ $t('CurrentSeason') }}</el-radio-button>
              <el-radio-button :label="2">{{ $t('Currentyear') }}</el-radio-button>
            </el-radio-group>
          </template>
          <bar3d ref="bar3d"></bar3d>
@@ -92,34 +69,19 @@
    <div class="main-item">
      <!-- 上 -->
      <div class="row-1">
        <card class="card" title="蓄电池优劣分析" content-class="base-card">
          <batt-card
            class="row-item"
            :type="0"
            :value="batt.groupNum | toLarge"
          ></batt-card>
          <batt-card
            class="row-item"
            :type="1"
            :value="batt.goodSum | toLarge"
          ></batt-card>
          <batt-card
            class="row-item"
            :type="2"
            :value="batt.alarmNum | toLarge"
          ></batt-card>
          <batt-card
            class="row-item"
            :type="3"
            :value="batt.changeNum | toLarge"
          ></batt-card>
        <card class="card" :title="$t('BatteryAnalysis')" content-class="base-card">
          <batt-card class="row-item" :type="0" :value="batt.groupNum | toLarge"></batt-card>
          <batt-card class="row-item" :type="1" :value="batt.goodSum | toLarge"></batt-card>
          <batt-card class="row-item" :type="2" :value="batt.alarmNum | toLarge"></batt-card>
          <batt-card class="row-item" :type="3" :value="batt.changeNum | toLarge"></batt-card>
        </card>
      </div>
      <!-- 中 -->
      <div class="row-2">
        <card class="card" title="同一投运时间不同品牌电池性能分析">
        <card class="card" :title="$t('PerformanceAnalysisofbatteriesfromdifferentbrandsinthesameservicetime')">
          <template #tools>
            <el-tag class="cur-point mrl8" effect="dark" size="mini" type="success" @click="goToBattInfo">更多>></el-tag>
            <el-tag class="cur-point mrl8" effect="dark" size="mini" type="success" @click="goToBattInfo">{{ $t('More')
            }}>></el-tag>
          </template>
          <div class="card-contain">
            <div class="batt-chart">
@@ -128,52 +90,31 @@
              </div>
            </div>
            <div class="panel0">
              <panel title="请选择投运年限">
              <panel :title="$t('Pleaseselecttheservicestarttime')">
                <div class="content">
                  <el-select
                    v-model="year0"
                    @change="year0Change"
                    :disabled="!chartData.analysis.length"
                    size="mini"
                  >
                    <el-option
                      v-for="(item, idx) in years"
                      :key="'year0_' + idx"
                      :label="item.label"
                      :value="item.value"
                    >
                  <el-select v-model="year0" @change="year0Change" :disabled="!chartData.analysis.length" size="mini">
                    <el-option v-for="(item, idx) in years" :key="'year0_' + idx" :label="$t(item.label)"
                      :value="item.value">
                    </el-option>
                  </el-select>
                  <div class="wrap">
                    <!-- 损坏数量最多品牌 -->
                    <div class="batt-data break">
                      <div class="label">损坏数量<br />最多品牌</div>
                      <div class="label">{{ $t('DamagedQty') }}<br />{{ $t('MostBrand') }}</div>
                      <div class="value" v-if="listChange.length <= 1">
                        {{ changeProd }}
                      </div>
                      <el-tooltip
                        class="item"
                        v-else
                        effect="dark"
                        content="changeProd1"
                        placement="top-end"
                      >
                      <el-tooltip class="item" v-else effect="dark" content="changeProd1" placement="top-end">
                        <div class="value">{{ changeProd }}</div>
                      </el-tooltip>
                    </div>
                    <!-- 劣化数量最多品牌 -->
                    <div class="batt-data">
                      <div class="label">劣化数量<br />最多品牌</div>
                      <div class="label">{{ $t('DeteriorationQty') }}<br />{{ $t('MostBrand') }}</div>
                      <div class="value" v-if="listAlarm.length <= 1">
                        {{ alarmProd }}
                      </div>
                      <el-tooltip
                        class="item"
                        effect="dark"
                        v-else
                        content="alarmProd1"
                        placement="top-end"
                      >
                      <el-tooltip class="item" effect="dark" v-else content="alarmProd1" placement="top-end">
                        <div class="value">{{ alarmProd }}</div>
                      </el-tooltip>
                    </div>
@@ -186,9 +127,10 @@
      </div>
      <!-- 下 -->
      <div class="row-3">
        <card class="card" title="同一投运时间相同品牌电池性能分析">
        <card class="card" :title="$t('PerformanceAnalysisofbatteriesfromthesamebrandinthesameservicetime')">
          <template #tools>
            <el-tag class="cur-point mrl8" effect="dark" size="mini" type="success" @click="goToBattInfo">更多>></el-tag>
            <el-tag class="cur-point mrl8" effect="dark" size="mini" type="success" @click="goToBattInfo">{{ $t('More')
            }}>></el-tag>
          </template>
          <div class="card-contain">
            <div class="chart">
@@ -199,38 +141,20 @@
            </div>
            <!-- 中 -->
            <div class="selector">
              <panel class="big" title="请选择投运年限">
              <panel class="big" :title="$t('Pleaseselecttheservicestarttime')">
                <div class="content">
                  <el-select
                    v-model="year1"
                    @change="updateAnalysis1"
                    :disabled="!chartData.analysis1.length"
                    size="mini"
                  >
                    <el-option
                      v-for="(item, idx) in years"
                      :key="'year1_' + idx"
                      :label="item.label"
                      :value="item.value"
                    >
                  <el-select v-model="year1" @change="updateAnalysis1" :disabled="!chartData.analysis1.length"
                    size="mini">
                    <el-option v-for="(item, idx) in years" :key="'year1_' + idx" :label="$t(item.label)"
                      :value="item.value">
                    </el-option>
                  </el-select>
                </div>
              </panel>
              <panel class="small" title="请选择电池品牌">
              <panel class="small" :title="$t('Pleaseselectthebatterybrand')">
                <div class="content">
                  <el-select
                    v-model="battProd"
                    @change="updateAnalysis1"
                    :disabled="!prodList.length"
                    size="mini"
                  >
                    <el-option
                      v-for="(item, idx) in prodList"
                      :key="'prod_' + idx"
                      :label="item"
                      :value="item"
                    >
                  <el-select v-model="battProd" @change="updateAnalysis1" :placeholder="$t('Null')" :disabled="!prodList.length" size="mini">
                    <el-option v-for="(item, idx) in prodList" :key="'prod_' + idx" :label="item" :value="item">
                    </el-option>
                  </el-select>
                </div>
@@ -240,11 +164,11 @@
            <div class="card-info">
              <div class="item">
                <div class="icon break"></div>
                <div class="info">损坏数量: {{ changeCount }}</div>
                <div class="info">{{ $t('DamagedQty') }}: {{ changeCount }}</div>
              </div>
              <div class="item">
                <div class="icon bad"></div>
                <div class="info">劣化数量: {{ alarmCount }}</div>
                <div class="info">{{ $t('DeteriorationQty') }}: {{ alarmCount }}</div>
              </div>
            </div>
          </div>
@@ -272,25 +196,27 @@
import createWs from "@/assets/js/websocket";
const WSMixin = createWs("homeAdmin");
import i18n from './i18n/home-conductor';
import { createI18nOption } from '@/assets/js/tools/i18n';
const i18nMixin = createI18nOption(i18n);
export default {
  name: "",
  mixins: [WSMixin],
  mixins: [WSMixin, i18nMixin],
  data() {
    return {
      updateFlag: false,
      years: [
        {
          value: 0,
          label: "一年以内",
          label: "lt1year",
        },
        {
          value: 1,
          label: "两年以内",
          label: "lt2years",
        },
        {
          value: 2,
          label: "三年以内",
          label: "lt3years",
        },
      ],
      stationLevel: 0,
@@ -344,18 +270,18 @@
      if (1 == this.listChange.length) {
        return this.listChange[0];
      } else if (this.listChange.length > 1) {
        return this.listChange[0] + " 等";
        return this.listChange[0] + " " + this.$t('etc');
      } else {
        return "无";
        return this.$t('Null');
      }
    },
    alarmProd() {
      if (1 == this.listAlarm.length) {
        return this.listAlarm[0];
      } else if (this.listAlarm.length > 1) {
        return this.listAlarm[0] + " 等";
        return this.listAlarm[0] + " " + this.$t('etc');
      } else {
        return "无";
        return this.$t('Null');
      }
    },
    changeProd1() {
@@ -395,6 +321,12 @@
    },
    goToPowerInfo() {
      this.$router.push("/dataMager/powerMager");
    },
    onWSOpen() {
      this.sendMessage();
    },
    sendMessage() {
      this.SOCKET.send('');
    },
    onWSMessage(res) {
      res = JSON.parse(res.data);
@@ -445,7 +377,7 @@
      });
      this.chartData.station = station;
      // 站点
      this.$refs.station.setData(station[this.stationLevel]);
      // this.$refs.station.setData(station[this.stationLevel]);
      let batt = [];
      [producer, monVol].forEach((item, idx) => {
@@ -477,7 +409,7 @@
        return res;
      })();
      // 电源
      this.$refs.powerChart.setData(powerChart);
      // this.$refs.powerChart.setData(powerChart);
      let test = [];
      [month, quarter, year].forEach((item) => {
@@ -486,7 +418,7 @@
        //   sData: [item.hrdisNum, item.hrchNum, item.jcdisNum, item.jcchNum],
        // });
        test.push({
          xLabel: ["核容放电", "核容充电"],
          xLabel: ["CapacityCheckDischarge", "CapacityCheckCharge"].map((v) => this.$t(v)),
          sData: [item.hrdisNum, item.hrchNum],
        });
      });
@@ -524,9 +456,9 @@
      }
    },
    resizeChart() {
      this.$refs.station?.resize();
      // this.$refs.station?.resize();
      this.$refs.battInfo?.resize();
      this.$refs.powerChart?.resize();
      // this.$refs.powerChart?.resize();
      this.$refs.bar3d?.resize();
      this.$refs.battChart?.resize();
      this.$refs.analysis1?.resize();
@@ -550,7 +482,7 @@
          xLabel.push(v.name);
        });
      } else {
        let label = "其他";
        let label = this.$t('Other');
        let alarm = 0,
          change = 0;
        arr.splice(4).forEach((v) => {
@@ -572,14 +504,14 @@
      let res = { sData: [] };
      let arr = Object.keys(data)
        .map((v) => ({ name: idx ? v * 1 + "伏" : v, value: data[v] }))
        .map((v) => ({ name: idx ? v * 1 + this.$t('V') : v, value: data[v] }))
        .sort((a, b) => {
          return b.value - a.value;
        });
      if (arr.length <= 5) {
        res.sData = arr;
      } else {
        let name = "其他";
        let name = this.$t('Other');
        let value = 0;
        arr.splice(4).forEach((v) => {
          value += v.value * 1;
@@ -592,9 +524,9 @@
    getTestData(year, prod) {
      let data = this.chartData.analysis1;
      let arr = data[year];
      let Ores = arr.filter((v) => v.name == prod)[0];
      let Ores = arr.filter((v) => v.name == prod)[0] || {alarm: 0, change: 0};
      return {
        xLabel: ["劣化", "损坏"],
        xLabel: ["Deterioration", "Damage"].map(v => this.$t(v)),
        sData: [Ores.alarm, Ores.change],
        colorList: [
          ["#f8f38d", "#23b5f5"],
@@ -660,7 +592,11 @@
    },
  },
  mounted() {},
  mounted() {
    this.$bus.$on('langChanged', () => {
      this.sendMessage();
    });
  },
};
</script>
@@ -696,6 +632,10 @@
  flex: 1;
  display: flex;
  flex-direction: column;
  &:last-child {
    flex: 1.3;
  }
}
.sub-item {
@@ -728,6 +668,7 @@
  .panel0 {
    height: 100%;
    width: 320px;
    margin-left: 2em;
    .content {
@@ -771,6 +712,7 @@
  .selector {
    height: 100%;
    width: 320px;
    display: flex;
    flex-direction: column;
    margin-left: 1em;
@@ -797,7 +739,7 @@
  }
}
.main-item ~ .main-item {
.main-item~.main-item {
  margin-left: 10px;
}
@@ -815,21 +757,21 @@
  color: #022c44;
}
/deep/ :not(:first-child) > .el-radio-button__inner {
/deep/ :not(:first-child)>.el-radio-button__inner {
  border-left: 1px solid #0096a3;
}
/deep/ .el-radio-button__orig-radio:checked + .el-radio-button__inner {
/deep/ .el-radio-button__orig-radio:checked+.el-radio-button__inner {
  box-shadow: none;
}
/deep/ .el-radio-button__orig-radio:checked + .el-radio-button__inner {
/deep/ .el-radio-button__orig-radio:checked+.el-radio-button__inner {
  background-color: #2982f6;
  color: #fff;
}
.card-info {
  width: 152px;
  width: 212px;
  padding: 4px 0;
  border: 2px #00fefe solid;
  margin-left: 0.4em;
@@ -848,13 +790,11 @@
      height: 70px;
      &.bad {
        background: url("./images/batt_bad.png") center center / contain
          no-repeat;
        background: url("./images/batt_bad.png") center center / contain no-repeat;
      }
      &.break {
        background: url("./images/batt_break.png") center center / contain
          no-repeat;
        background: url("./images/batt_break.png") center center / contain no-repeat;
      }
    }
@@ -865,10 +805,11 @@
    }
  }
}
.cur-point {
  cursor: pointer;
}
.mrl8 {
  margin-left: 8px;
}
</style>
}</style>
src/views/home/home-manage.vue
@@ -1,9 +1,10 @@
<template>
  <home-conductor v-if="uRole == 10"></home-conductor>
  <home-admin v-else-if="uRole == 0"></home-admin>
  <home-conductor></home-conductor>
  <!-- <home-conductor v-if="uRole == 10"></home-conductor> -->
  <!-- <home-admin v-else-if="uRole == 0"></home-admin>
  <home-ops v-else-if="uRole == 1"></home-ops>
  <home-monitor v-else-if="uRole == 2"></home-monitor>
  <default-home v-else></default-home>
  <default-home v-else></default-home> -->
</template>
<script>
src/views/home/i18n/home-conductor.js
New file
@@ -0,0 +1,82 @@
export default {
  messages: {
    CN: {
      BasicResourceInfo: '基础资源信息',
      More: '更多',
      BatteryInfo: '电池信息',
      Brand: '按品牌',
      VoltageType: '按电压类型',
      TestInfo: '测试信息',
      CurrentMonth: '本月',
      CurrentSeason: '本季度',
      Currentyear: '本年',
      BatteryAnalysis: '蓄电池优劣分析',
      PerformanceAnalysisofbatteriesfromdifferentbrandsinthesameservicetime: '同一投运时间不同品牌电池性能分析',
      Pleaseselecttheservicestarttime: '请选择投运年限',
      Pleaseselectthebatterybrand: '请选择电池品牌',
      DamagedQty: '损坏数量',
      DeteriorationQty: '劣化数量',
      MostBrand: '最多品牌',
      PerformanceAnalysisofbatteriesfromthesamebrandinthesameservicetime: '同一投运时间相同品牌电池性能分析',
      lt1year: '一年以内',
      lt2years: '两年以内',
      lt3years: '三年以内',
      etc: '等',
      Null: '无',
      CapacityCheckDischarge: '核容放电',
      CapacityCheckCharge: '核容充电',
      Other: '其他',
      V: '伏',
      Deterioration: '劣化',
      Damage: '损坏',
      // ============
      Site: '站点',
      Power: '电源',
      BatteryGroup: '电池组',
      Annualcheckedcapacity: '本年已放数',
      // ============
      Total: '电池组总数',
      Quality: '电池组优良',
      Deterioration1: '电池组劣化',
      Damage1: '电池组损坏',
    },
    US: {
      BasicResourceInfo: 'Basic Resource Info',
      More: 'More',
      BatteryInfo: 'Battery Info',
      Brand: 'Brand',
      VoltageType: 'Voltage Type',
      TestInfo: 'Test Info',
      CurrentMonth: 'Current Month',
      CurrentSeason: 'Current Season',
      Currentyear: 'Current year',
      BatteryAnalysis: 'Battery Analysis',
      PerformanceAnalysisofbatteriesfromdifferentbrandsinthesameservicetime: 'Performance Analysis of batteries from different brands in the same service time',
      Pleaseselecttheservicestarttime: 'Please select the service start time',
      Pleaseselectthebatterybrand: 'Please select the battery brand',
      DamagedQty: 'Damaged Qty',
      DeteriorationQty: 'Deterioration Qty',
      MostBrand: 'Most Brand',
      PerformanceAnalysisofbatteriesfromthesamebrandinthesameservicetime: 'Performance Analysis of batteries from the same brand in the same service time',
      lt1year: '< 1 year',
      lt2years: '< 2 years',
      lt3years: '< 3 years',
      etc: 'etc…',
      Null: 'Null',
      CapacityCheckDischarge: 'Capacity Check Discharge',
      CapacityCheckCharge: 'Capacity Check Charge',
      Other: 'Other',
      V: 'V',
      Deterioration: 'Deterioration',
      Damage: 'Damage',
      Site: 'Site',
      Power: 'Power',
      BatteryGroup: 'Battery Group',
      Annualcheckedcapacity: 'Annual checked capacity',
      Total: 'Total',
      Quality: 'Quality',
      Deterioration1: 'Deterioration',
      Damage1: 'Damage',
    }
  }
}
src/views/login/index.vue
@@ -89,7 +89,7 @@
      >
        <ukey-bind v-if="uKey.show" :visible.sync="uKey.show"></ukey-bind>
      </el-dialog> -->
      <div class="tools-container">
      <!-- <div class="tools-container">
        <div class="tools-item" :class="uKeyState" v-if="$CFG.uKey.value" @click="uKey.show = true">
          <span class="iconfont el-icon-CombinedShape"></span>
        </div>
@@ -99,7 +99,7 @@
        <div class="tools-item" @click="config.show = true">
          <span class="iconfont el-icon-peizhi"></span>
        </div>
      </div>
      </div> -->
    </div>
    <div class="copy-right" v-if="copyRight.value">
      {{ copyRight.data }}
@@ -155,6 +155,7 @@
import ziluolanBg from "@/assets/images/login-bg-ziluolan.jpg";
import ziluolanImg from "@/assets/images/login-img-ziluolan.png";
import qrCode from "@/assets/js/outside/qrCode";
import { serverLang } from '@/assets/js/api';
import i18n from './js/i18n';
import { createI18nOption } from '@/assets/js/tools/i18n';
@@ -228,9 +229,31 @@
        this.redirect = route.query && route.query.redirect;
      },
      immediate: true
    }
    },
    "$store.state.settings.lang": {
      handler(v) {
        // 通知后台 当前语种
        this.sendLang(v);
      },
      immediate: true
    },
  },
  methods: {
    sendLang(lang) {
      let _lang = '';
      switch (lang) {
        case 'US':
          _lang = 'en_US';
          break;
        case 'CN':
          _lang = 'zh_CN';
          break;
      }
      // 请求接口
      serverLang(_lang).then().catch(err => {
        console.log(err);
      });
    },
    langChange(lang) {
      // this.$i18n.locale = lang;
      // console.log(this.$i18n, '===i18n');
@@ -405,7 +428,7 @@
          if (rs.code == 1) {
            this.register = true;
          } else {
            this.$layer.msg($t('notReg'));
            this.$layer.msg(this.$t('notReg'));
            this.license.show = true;
            this.register = false;
          }
src/views/pageSetting/components/platformName.vue
@@ -66,8 +66,8 @@
      }
      let lang = this.$store.state.settings.lang;
      if ('US' == lang) {
        if (this.obj.param.length > 56) {
          this.$layer.msg("The platform name cannot exceed 56 characters.");
        if (this.obj.param.length > 36) {
          this.$layer.msg("The platform name cannot exceed 36 characters.");
          return;
        }
      } else {
src/views/pageSetting/i18n/platformName.js
@@ -11,7 +11,7 @@
    US: {
      PlatformNameModify: 'Platform Name Modify',
      RecoverRefresh: 'Recover/Refresh',
      BatteryRemoteOMManagementSystem: 'Battery Remote O&M Management System',
      BatteryRemoteOMManagementSystem: 'Battery Remote O-M Management System',
      Failedtoobtaintheplatformnamepleasecontacttheadministrator: 'Failed to obtain the platform name, please contact the administrator.',
      Theplatformnameisnull: 'The platform name is null.',
      ModifySuccessfullyItwilltakeeffectafterrelogin: 'Modify Successfully! It will take effect after re-login!',