| | |
| | | uKey: { |
| | | label: "uKey", |
| | | des: "用户需要通过插入uKey才可以登录", |
| | | value: true, |
| | | value: false, |
| | | }, |
| | | face: { |
| | | // 开启人脸识别必须要开启uKey |
| | | label: "人脸识别", |
| | | des: "用户可以直接通过人脸识别登录", |
| | | value: true, // 开启这个同时需要询问运维人员,需要不需要开启动放电和重启的人脸 |
| | | value: false, // 开启这个同时需要询问运维人员,需要不需要开启动放电和重启的人脸 |
| | | }, |
| | | dischargeByFace: { |
| | | label: "启动放电添加人脸识别", |
| | | des: "启动充放电测试使用人脸识别", |
| | | value: true, |
| | | value: false, |
| | | }, |
| | | setParamsByFace: { |
| | | label: "设置放电参数添加人脸识别", |
| | | des: "设置放电参数时需要进行人脸识别", |
| | | value: true, |
| | | value: false, |
| | | }, |
| | | restartDevByFace: { |
| | | label: "重启设备添加人脸识别", |
| | | des: "开启后重启设备时需要进行人脸识别", |
| | | value: true, |
| | | value: false, |
| | | }, |
| | | autograph: { |
| | | label: "签名", |
| | |
| | | import N_TO_10H from './N_TO_10H'; |
| | | import N_TO_10H from "./N_TO_10H"; |
| | | |
| | | /** |
| | | * 获取剩余容量/实际容量 |
| | |
| | | * @param {[Number]} HourRate 放电小时率 |
| | | * @param {[Number]} SumAH 测试容量 |
| | | * @param {[Number]} MaxMonomerVol 单体电压最大值 |
| | | * @param {[Number]} MonomerVol 单体电压最大值 |
| | | * @param {[Number]} MonomerVol 单体电压最小值 |
| | | * @param {[Number]} MonomerVolType 电池标称电压 |
| | | * @param {[Number]} CapType 容量类型(定值是常量)(1:实际容量,0剩余容量) |
| | | * |
| | | * @return {[Number]} [return description] |
| | | */ |
| | | function GetMonomerCap(STDAH, HourRate, SumAH, MaxMonomerVol, MonomerVol, MonomerVolType, CapType) { |
| | | if ((MaxMonomerVol - MonomerVolType * 0.9) <= 0) |
| | | return 0; |
| | | if (SumAH < 0) |
| | | SumAH *= (-1); |
| | | function GetMonomerCap( |
| | | STDAH, |
| | | HourRate, |
| | | SumAH, |
| | | MaxMonomerVol, |
| | | MonomerVol, |
| | | MonomerVolType, |
| | | CapType |
| | | ) { |
| | | if (MaxMonomerVol - MonomerVolType * 0.9 <= 0) return 0; |
| | | if (SumAH < 0) SumAH *= -1; |
| | | let tmp_cap; |
| | | tmp_cap = MonomerVol - MonomerVolType * 0.9; |
| | | tmp_cap *= (STDAH - SumAH * N_TO_10H(HourRate)); |
| | | tmp_cap *= STDAH - SumAH * N_TO_10H(HourRate); |
| | | let dt_vol = MaxMonomerVol - MonomerVolType * 0.9; |
| | | if (dt_vol < 0.01) |
| | | dt_vol = 0.01; |
| | | if (dt_vol < 0.01) dt_vol = 0.01; |
| | | tmp_cap = tmp_cap / dt_vol; |
| | | if (tmp_cap < 0) |
| | | tmp_cap = 0; |
| | | if (tmp_cap < 0) tmp_cap = 0; |
| | | |
| | | if (CapType == 0) |
| | | return tmp_cap; |
| | | else if (CapType == 1) |
| | | return (tmp_cap + SumAH * N_TO_10H(HourRate)); |
| | | else |
| | | return ((tmp_cap + SumAH * N_TO_10H(HourRate)) * 100 / STDAH); |
| | | if (CapType == 0) return tmp_cap; |
| | | else if (CapType == 1) return tmp_cap + SumAH * N_TO_10H(HourRate); |
| | | else return ((tmp_cap + SumAH * N_TO_10H(HourRate)) * 100) / STDAH; |
| | | } |
| | | |
| | | export default GetMonomerCap; |
New file |
| | |
| | | function getXuHang(real_cap, loadCurr) { |
| | | if (real_cap === 0 || loadCurr === 0) { |
| | | return 0; |
| | | } else { |
| | | return real_cap / ((loadCurr + (loadCurr * 53.5) / 43.2) / 2); |
| | | } |
| | | } |
| | | export default getXuHang; |
| | |
| | | class="item" |
| | | effect="dark" |
| | | content="报表导出" |
| | | placement="bottom"> |
| | | <i class="el-icon-printer" |
| | | placement="bottom" |
| | | > |
| | | <i |
| | | class="el-icon-printer" |
| | | @click="showReportDialog" |
| | | style="font-size: 22px"></i> |
| | | style="font-size: 22px" |
| | | ></i> |
| | | </el-tooltip> |
| | | </div> |
| | | <div slot="box-tools" class="box-tools"> |
| | |
| | | class="item" |
| | | effect="dark" |
| | | content="数据导出" |
| | | placement="bottom"> |
| | | <i class="iconfont el-icon-daochu" |
| | | placement="bottom" |
| | | > |
| | | <i |
| | | class="iconfont el-icon-daochu" |
| | | @click="showDataDifferDialog" |
| | | style="font-size: 24px"></i> |
| | | style="font-size: 24px" |
| | | ></i> |
| | | </el-tooltip> |
| | | </div> |
| | | <div slot="box-tools" class="box-tools"> |
| | |
| | | :close-on-click-modal="false" |
| | | top="0" |
| | | class="dialog-center" |
| | | :modal-append-to-body="false"> |
| | | :modal-append-to-body="false" |
| | | > |
| | | <report-params-setting |
| | | :batt="batt" v-if="reportParamsDialog" |
| | | :batt="batt" |
| | | v-if="reportParamsDialog" |
| | | @success="handleSuccessReport" |
| | | :record-time="test_record.value" |
| | | :visible.sync="reportParamsDialog"></report-params-setting> |
| | | :visible.sync="reportParamsDialog" |
| | | ></report-params-setting> |
| | | </el-dialog> |
| | | </flex-layout> |
| | | </template> |
| | |
| | | searchBattTestData, |
| | | searchHistory, |
| | | addStandardLine, |
| | | getTestParam, exportReport, |
| | | getTestParam, |
| | | exportReport, |
| | | } from "./js/history"; |
| | | import { searchParam as searchParam1 } from "@/views/pageSetting/js/api" |
| | | import { searchParam as searchParam1 } from "@/views/pageSetting/js/api"; |
| | | |
| | | import { |
| | | formatSeconds, |
| | |
| | | import ReportParamsSetting from "@/views/dataTest/components/reportParamsSetting.vue"; |
| | | import interceptDataByTime from "@/assets/js/tools/interceptDataByTime"; |
| | | import getExportExcelUrl from "@/assets/js/tools/getExportExcelUrl"; |
| | | import getXuHang from "@/assets/js/tools/getXuHang"; |
| | | const { |
| | | cap: CAP, |
| | | vol: VOL, |
| | |
| | | let lastRecordT = data[data.length - 1].recordTime; |
| | | let cutTime = this.cutTime * 60 * 1000; |
| | | let cutStamp = new Date(lastRecordT).getTime() - cutTime; |
| | | data = data.filter((v) => new Date(v.recordTime).getTime() < cutStamp); |
| | | data = data.filter( |
| | | (v) => new Date(v.recordTime).getTime() < cutStamp |
| | | ); |
| | | } |
| | | } |
| | | // console.log(data.length, '2'); |
| | |
| | | batt.monVolStd, |
| | | 1 |
| | | ); |
| | | let xuhang = batt.loadCurr ? real_cap / batt.loadCurr : 0; |
| | | console.log( |
| | | "实际容量:" + |
| | | batt.monCapStd + |
| | | "小时率:" + |
| | | GetHourRate(batt.monCapStd, avg_curr) + |
| | | "已测容量:" + |
| | | list.testCap + |
| | | "最大:" + |
| | | batNum.max + |
| | | "最小:" + |
| | | batNum.min + |
| | | "标称电压:" + |
| | | batt.monVolStd |
| | | ); |
| | | let xuhang = getXuHang(real_cap, batt.loadCurr); |
| | | this.top.xuhang = xuhang ? sethoubeiTime(xuhang) : "---"; |
| | | } |
| | | }, |
| | |
| | | let data = {...params}; |
| | | let dataList = allData.dataList; |
| | | console.log(dataList); |
| | | let list = interceptDataByTime(params.dataCollectionInterval*3600, dataList); |
| | | let list = interceptDataByTime( |
| | | params.dataCollectionInterval * 3600, |
| | | dataList |
| | | ); |
| | | console.log(list); |
| | | data.testRecordCount = list[0].testRecordCount; |
| | | data.recordNums = list.map(item=>{ |
| | | data.recordNums = list |
| | | .map((item) => { |
| | | return item.recordNum; |
| | | }).join(','); |
| | | data.headName = data.headName.join(','); |
| | | data.groupPeoples = data.groupPeoples.join(','); |
| | | }) |
| | | .join(","); |
| | | data.headName = data.headName.join(","); |
| | | data.groupPeoples = data.groupPeoples.join(","); |
| | | const loading = this.$layer.loading(); |
| | | try{ |
| | | let res = await exportReport(data); |
| | | this.$layer.close(loading); |
| | | this.reportParamsDialog = false; |
| | | const nameList = res.headers["content-disposition"]; |
| | | const fileName = nameList.split('=')[1]; |
| | | const fileName = nameList.split("=")[1]; |
| | | let blob = res.data; |
| | | let url = window.URL.createObjectURL(blob); |
| | | let a = document.createElement("a"); |
| | |
| | | const h = this.$createElement; |
| | | this.$confirm( |
| | | h("div", null, [ |
| | | h("p", null, "标称容量:" + searchParams.moncapstd.toHold(CAP) + "AH"), |
| | | h("p", null, "标称电压:" + searchParams.monvolstd.toHold(VOL) + "V"), |
| | | h( |
| | | "p", |
| | | null, |
| | | "标称容量:" + searchParams.moncapstd.toHold(CAP) + "AH" |
| | | ), |
| | | h( |
| | | "p", |
| | | null, |
| | | "标称电压:" + searchParams.monvolstd.toHold(VOL) + "V" |
| | | ), |
| | | h("p", null, "电池品牌:" + searchParams.battproducer), |
| | | h("p", null, "电池型号:" + searchParams.battmodel), |
| | | h("p", null, "小时率:" + searchParams.note), |
| | |
| | | import CheckFace from "@/components/checkFace.vue"; |
| | | import const_61852 from "@/assets/js/const/const_61852"; |
| | | import DevAlarmParams from "@/views/dataTest/components/DevAlarmParams.vue"; |
| | | import getXuHang from "@/assets/js/tools/getXuHang"; |
| | | |
| | | const WSMixin = createWs("RealTime"); |
| | | |
| | |
| | | batt.monVolStd, |
| | | 1 |
| | | ); |
| | | let xuHang = batt.loadCurr ? real_cap / batt.loadCurr : 0; |
| | | let xuHang = getXuHang(real_cap, batt.loadCurr); |
| | | this.lastTimeTestInfo.realCap = real_cap.toHold(CAP) + "Ah"; |
| | | this.lastTimeTestInfo.xuHang = xuHang ? sethoubeiTime(xuHang) : "---"; |
| | | // 剩余容量 |
| | |
| | | }, |
| | | }, |
| | | devServer: { |
| | | https: true, |
| | | https: false, |
| | | }, |
| | | chainWebpack(config) { |
| | | // it can improve the speed of the first screen, it is recommended to turn on preload |