| | |
| | | const monChart = ref(); |
| | | const groupChart = ref(); |
| | | const slideValue = ref(0); |
| | | const testDataFormated = reactive({ |
| | | labels: [], |
| | | datas: [], |
| | | }); |
| | | |
| | | const testRecordList = ref([]); |
| | | const testDatas = ref([]); |
| | |
| | | monBarVol.labels.push(monNum_text); |
| | | monBarVol.datas.push(item.monVol); |
| | | }); |
| | | |
| | | groupChart.value.updateChart(labels, groupVols); |
| | | testDataFormated.datas = monVols; |
| | | testDataFormated.labels = labels; |
| | | setBarChart(monVols); |
| | | } |
| | | // 根据百分比获取显示的数据的笔数 |
| | |
| | | } |
| | | |
| | | function handleSlider(params) { |
| | | updateChart(testDatas.value); |
| | | // updateChart(testDatas.value); |
| | | setBarChart(testDataFormated.datas); |
| | | } |
| | | |
| | | // 设置柱状图 |
| | |
| | | .catch((err) => { |
| | | console.log(err); |
| | | }); |
| | | } |
| | | |
| | | function formatTooltip(params) { |
| | | let testTimeLong = testDataFormated.labels; |
| | | let index = getDataIndex(testTimeLong.length, params); |
| | | let test_long = formatSeconds(0); |
| | | if (index != -1) { |
| | | // test_long = formatSeconds(testTimeLong[index]); |
| | | test_long = testTimeLong[index]; |
| | | } |
| | | return test_long; |
| | | } |
| | | |
| | | onMounted(() => { |
| | |
| | | <el-slider |
| | | class="slider" |
| | | v-model="slideValue" |
| | | :show-tooltip="false" |
| | | :format-tooltip="formatTooltip" |
| | | :disabled="!canSlide" |
| | | @input="handleSlider" |
| | | /> |
| | |
| | | devTestByWeek: { actm, a200 }, |
| | | }, |
| | | } = JSON.parse(message.value); |
| | | Object.keys(actm).forEach((v) => { |
| | | Object.keys(actm).sort((a, b)=>{ |
| | | return new Date(a).getTime() - new Date(b).getTime(); |
| | | }).forEach((v) => { |
| | | let item = actm[v]; |
| | | // 2 放电 3充电 |
| | | jhyData[0].data.push(item[3]); |
| | |
| | | |
| | | dates.push(v); |
| | | }); |
| | | Object.keys(a200).forEach((v) => { |
| | | Object.keys(a200).sort((a,b) => { |
| | | return new Date(a).getTime() - new Date(b).getTime(); |
| | | }).forEach((v) => { |
| | | let item = actm[v]; |
| | | // 2 放电 3充电 |
| | | ytjData[0].data.push(item[3]); |
| | |
| | | }; |
| | | |
| | | /** |
| | | * 停止一体机 |
| | | */ |
| | | export const stopA200 = (devId) => { |
| | | return axios({ |
| | | method: "GET", |
| | | url: "a200param/stopA200Param", |
| | | params: { devId }, |
| | | }); |
| | | }; |
| | | |
| | | /** |
| | | * 批量启动一体机 |
| | | */ |
| | | export const startA200ParamPl = (type, devIds) => { |
| | |
| | | }); |
| | | }; |
| | | |
| | | /** |
| | | * 批量停止一体机 |
| | | */ |
| | | export const stopA200ParamPl = (devIds) => { |
| | | return axios({ |
| | | method: "POST", |
| | | url: "a200param/stopA200ParamPl", |
| | | data: devIds, |
| | | }); |
| | | }; |
| | | |
| | | |
| | | // ==================== |
| | | /** |
| | |
| | | import jhParamContent from "./jhParamContent.vue"; |
| | | import ytjRtInfo from "./ytjRtInfo.vue"; |
| | | import jhyRtInfo from "./jhyRtInfo.vue"; |
| | | import { controllerActmParam } from "./api"; |
| | | import { controllerActmParam, stopA200 } from "./api"; |
| | | |
| | | import useElement from "@/hooks/useElement.js"; |
| | | |
| | |
| | | } |
| | | }); |
| | | |
| | | function pauseYtj() {} |
| | | |
| | | function stopYtj() { |
| | | let loading = $loading(); |
| | | stopA200(currentDevId.value) |
| | | .then((res) => { |
| | | loading.close(); |
| | | let { code, data, msg } = res.data; |
| | | if (200 == code) { |
| | | $message.success("操作成功"); |
| | | console.log(data); |
| | | } else { |
| | | $message.error("操作失败:" + msg); |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | loading.close(); |
| | | $message.error("操作失败:" + err); |
| | | console.log(err); |
| | | }); |
| | | } |
| | | |
| | | function chooseDev(params) { |
| | | currentDevId.value = params.devId; |
| | | } |
| | |
| | | size="small" |
| | | :disabled="!currentDev.devOnline" |
| | | class="btn-start" |
| | | v-if="!currentDev.state?.isTesting" |
| | | @click="test" |
| | | >启动测试</el-button |
| | | > |
| | | <!-- <el-button |
| | | size="small" |
| | | :disabled="!currentDev.devOnline" |
| | | class="btn-start" |
| | | @click="pauseYtj" |
| | | >暂停测试</el-button |
| | | > --> |
| | | <el-button |
| | | size="small" |
| | | :disabled="!currentDev.devOnline" |
| | | v-else |
| | | class="btn-start" |
| | | @click="stopYtj" |
| | | >停止测试</el-button |
| | | > |
| | | </template> |
| | | <template v-else-if="currentDev.state"> |
| | |
| | | v-if="1 == devType" |
| | | :devId="currentDevId" |
| | | ></ytj-rt-info> |
| | | <jhy-rt-info class="p-content" v-else :onlyOneGroup="onlyOneGroup" :devId="currentDevId"></jhy-rt-info> |
| | | <jhy-rt-info |
| | | class="p-content" |
| | | v-else |
| | | :onlyOneGroup="onlyOneGroup" |
| | | :devId="currentDevId" |
| | | ></jhy-rt-info> |
| | | <!-- 弹窗 --> |
| | | <el-dialog |
| | | title="设置测试参数" |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | .tab-container { |
| | | height: 100%; |
| | |
| | | stripe |
| | | height="100%" |
| | | size="small" |
| | | :data="rtDatas['monStates0']" |
| | | :data="rtDatas['monStates' + idx]" |
| | | style="width: 100%" |
| | | > |
| | | <el-table-column |
| | |
| | | function setParams() { |
| | | let _params; |
| | | // 判断测试类型 是充电还是放电 |
| | | if (params.testType == 0) { |
| | | if (params.testType == 1) { |
| | | _params = { |
| | | nominalCapacity: 0, |
| | | testType: 0, |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="layout.span"> |
| | | <el-form-item label="放电时间(m)" prop="dischargeTime"> |
| | | <el-form-item label="放电时间(s)" prop="dischargeTime"> |
| | | <el-input v-model="params.dischargeTime"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="layout.span"> |
| | | <el-form-item label="充电时间(m)" prop="chargeTime"> |
| | | <el-form-item label="充电时间(s)" prop="chargeTime"> |
| | | <el-input v-model="params.chargeTime"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | import jhParamContent from "./jhParamContent.vue"; |
| | | import { useRoute, useRouter } from "vue-router"; |
| | | |
| | | import { cancelContPl, controllerActmParam } from "./api.js"; |
| | | import { cancelContPl, controllerActmParam, stopA200ParamPl } from "./api.js"; |
| | | |
| | | import useElement from "@/hooks/useElement.js"; |
| | | const { $alert, $loading, $message, $confirm } = useElement(); |
| | | |
| | | import useDevsRt from "@/hooks/useDevsRt"; |
| | | const { list: devList } = useDevsRt(); |
| | |
| | | testVisible.value = true; |
| | | } |
| | | |
| | | function stopTest(groupIdx) { |
| | | let devIds = devs.value.map((v) => v.devId); |
| | | let loading = $loading(); |
| | | stopA200ParamPl(devIds) |
| | | .then((res) => { |
| | | let { code, data, data2 } = res.data; |
| | | loading.close(); |
| | | let failList = []; |
| | | let successList = []; |
| | | Object.keys(data2).forEach((v) => { |
| | | if (200 == data2[v].code) { |
| | | successList.push(v); |
| | | } else { |
| | | failList.push(v); |
| | | } |
| | | }); |
| | | if (code && data && successList.length) { |
| | | $message.success("操作成功"); |
| | | if (failList.length) { |
| | | let failNames = props.devs |
| | | .filter((v) => failList.some((vv) => vv == v.devId)) |
| | | .map((v) => v.devIdcode); |
| | | |
| | | $alert(`操作失败的设备列表:${failNames.join(", ")}。`); |
| | | } |
| | | close(); |
| | | } else { |
| | | $message.error("操作失败"); |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | loading.close(); |
| | | $message.error("操作失败"); |
| | | console.log(err); |
| | | }); |
| | | } |
| | | |
| | | function controlTest(groupIdx, ctrlType) { |
| | | // * 2暂停 * 3继续 * 4 停止 |
| | | let loading = $loading(); |
| | |
| | | }); |
| | | } |
| | | |
| | | onMounted(() => { |
| | | filterList(); |
| | | }); |
| | | onMounted(() => {}); |
| | | onActivated(() => { |
| | | if ($route.query.devType) { |
| | | devType.value = $route.query.devType; |
| | | devType.value = $route.query.devType * 1; |
| | | } |
| | | filterList(); |
| | | }); |
| | | </script> |
| | | |
| | |
| | | class="btn-start" |
| | | @click="test" |
| | | >启动测试</el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | :disabled="!selectData[devType].length" |
| | | class="btn-start" |
| | | @click="stopTest" |
| | | >停止测试</el-button |
| | | > |
| | | </template> |
| | | <template v-else> |
| | |
| | | .control-group { |
| | | margin-top: 8px; |
| | | margin-right: 8px; |
| | | &.grp1 { |
| | | margin-left: 8px; |
| | | } |
| | | cursor: pointer; |
| | | & > :deep(span) { |
| | | color: #000; |
| | |
| | | // const type = $route.query.type; |
| | | const type = computed(() => $route.query.type); |
| | | const devId = computed(() => $route.query.devId); |
| | | console.log("type", type, "============="); |
| | | // console.log("type", type, "============="); |
| | | |
| | | onMounted(() => {}); |
| | | </script> |
| | | |
| | | <template> |
| | | <template v-if="devId"> |
| | | <ytj-test-details :devId="devId" v-if="1 == type"></ytj-test-details> |
| | | <jhy-test-details :devId="devId" v-else></jhy-test-details> |
| | | </template> |
| | | </template> |
| | | |
| | | <style scoped lang="less"></style> |
| | |
| | | <div class="info"> |
| | | <div class="label">最大值</div> |
| | | <div class="value max"> |
| | | {{ rtDatas.devStates.minBatteryVoltage }}V |
| | | {{ rtDatas.devStates.maxBatteryVoltage }}V |
| | | </div> |
| | | <div class="label">最小值</div> |
| | | <div class="value min"> |
| | | {{ rtDatas.devStates.minBatteryVoltage }}V |
| | | </div> |
| | | <div class="label">平均值</div> |
| | | <div class="value">{{ rtDatas.devStates.minBatteryVoltage }}V</div> |
| | | <div class="value">{{ rtDatas.devStates.avgMonVol }}V</div> |
| | | </div> |
| | | <div class="list-wrap posR"> |
| | | <div class="pos-full scroll"> |
| | |
| | | <div |
| | | :class="[ |
| | | 'value', |
| | | { max: 3 == item.monNum, min: 7 == item.monNum }, |
| | | { max: rtDatas.devStates.maxBatteryVoltage == item.monVol, min: rtDatas.devStates.minBatteryVoltage == item.monVol }, |
| | | ]" |
| | | > |
| | | {{ item.monVol }} V |
| | |
| | | <div class="card"> |
| | | <div class="row" v-for="row in item.list" :key="row.num"> |
| | | <div class="time">{{ row.time }}</div> |
| | | <div class="content">充电开始</div> |
| | | <div class="content">{{ row.eventStr }}</div> |
| | | </div> |
| | | </div> |
| | | </el-timeline-item> |
| | |
| | | <div class="value">{{ formatMinutes(params.chargeTime) }}</div> |
| | | <div class="label">预充容量限制</div> |
| | | <div class="value"> |
| | | {{ ["关闭", "开启"][params.isChargeCapacityEnable] }} |
| | | {{ ["关闭", "开启"][params.isChargeCapacityEnable * 1] }} |
| | | </div> |
| | | <div class="label">预充容量</div> |
| | | <div class="value">{{ params.chargeCapacity }}AH</div> |
| | | <div class="label">单串上限限制</div> |
| | | <div class="value"> |
| | | {{ ["关闭", "开启"][params.isMaxBatteryVoltageEnable] }} |
| | | {{ ["关闭", "开启"][params.isMaxBatteryVoltageEnable * 1] }} |
| | | </div> |
| | | <div class="label">单串上限</div> |
| | | <div class="value">{{ params.maxBatteryVoltage }}V</div> |