| | |
| | | import { useRoute, useRouter } from "vue-router"; |
| | | import battCountContent from "./battCountContent.vue"; |
| | | |
| | | import { cancelContPl, controllerActmParam, stopA200ParamPl, pauseA200ParamPl } from "./api.js"; |
| | | import { |
| | | cancelContPl, |
| | | controllActmParamPl, |
| | | stopA200ParamPl, |
| | | pauseA200ParamPl, |
| | | } from "./api.js"; |
| | | |
| | | import useElement from "@/hooks/useElement.js"; |
| | | const { $alert, $loading, $message, $confirm } = useElement(); |
| | |
| | | 2: getItem(2), |
| | | }; |
| | | }); |
| | | |
| | | // TODO 均衡仪有几组 取选中列表中第一台在线的设备的数据 |
| | | const onlyOneGroup = computed(() => { |
| | | if ( |
| | | selectData.value[2].length == 0 || |
| | | !selectData.value[2].filter((v) => v.devOnline == 1).length |
| | | ) { |
| | | return true; |
| | | } |
| | | return ( |
| | | selectData.value[2].filter((v) => v.devOnline == 1)[0].state[0] |
| | | .batteryCount == 1 |
| | | ); |
| | | }); |
| | | |
| | | // 是否可以修改均衡仪组数 |
| | | const canChangeBattCount = computed(() => { |
| | | if ( |
| | | devType.value != 2 || |
| | | selectData.value[2].length == 0 || |
| | | selectData.value[2].filter((v) => v.devOnline == 1).length == 0 |
| | | ) { |
| | | return false; |
| | | } |
| | | return selectData.value[2] |
| | | .filter((v) => v.devOnline == 1) |
| | | .every((v) => { |
| | | return onlyOneGroup.value |
| | | ? v.state[0].isTesting == 0 |
| | | : v.state[0].isTesting == 0 && v.state[1].isTesting == 0; |
| | | }); |
| | | }); |
| | | |
| | | // 一体机 按钮可用控制 公共方法 |
| | | function computeYT(someFn) { |
| | | return computed(() => { |
| | | let _type = devType.value; |
| | | if ( |
| | | 1 != _type || |
| | | !selectData.value[1].filter((v) => v.devOnline == 1).length |
| | | ) { |
| | | return false; |
| | | } else { |
| | | return selectData.value[1].filter((v) => v.devOnline == 1).some(someFn); |
| | | } |
| | | }); |
| | | } |
| | | // 一体机 按钮可用控制 启动 |
| | | const canStartYT = computeYT((v) => v.state.isTesting == 0); |
| | | // 一体机 按钮可用控制 暂停 |
| | | const canPauseYT = computeYT( |
| | | (v) => v.state.isTesting == 1 && v.state.testPause == 0 |
| | | ); |
| | | // 一体机 按钮可用控制 继续 |
| | | const canContinueYT = computeYT((v) => v.state.testPause == 1); |
| | | // 一体机 按钮可用控制 停止 |
| | | const canStopYT = computeYT((v) => v.state.isTesting == 1); |
| | | |
| | | // 均衡仪 按钮可用控制 公共方法 |
| | | function computeJH(someFn) { |
| | | return computed(() => { |
| | | let _type = devType.value; |
| | | if ( |
| | | 2 != _type || |
| | | !selectData.value[2].filter((v) => v.devOnline == 1).length |
| | | ) { |
| | | return false; |
| | | } else { |
| | | return selectData.value[2].filter((v) => v.devOnline == 1).some(someFn); |
| | | } |
| | | }); |
| | | } |
| | | // 均衡仪 按钮可用控制 启动组1 |
| | | const canStartJH1 = computeJH((v) => v.state[0].isTesting == 0); |
| | | // 均衡仪 按钮可用控制 启动组2 |
| | | const canStartJH2 = computeJH((v) => v.state[1].isTesting == 0); |
| | | // 均衡仪 按钮可用控制 暂停组1 |
| | | const canPauseJH1 = computeJH( |
| | | (v) => v.state[0].isTesting == 1 && v.state[0].isTestPause == 0 |
| | | ); |
| | | // 均衡仪 按钮可用控制 暂停组2 |
| | | const canPauseJH2 = computeJH( |
| | | (v) => v.state[1].isTesting == 1 && v.state[1].isTestPause == 0 |
| | | ); |
| | | // 均衡仪 按钮可用控制 继续组1 |
| | | const canContinueJH1 = computeJH((v) => v.state[0].isTestPause == 1); |
| | | // 均衡仪 按钮可用控制 继续组2 |
| | | const canContinueJH2 = computeJH((v) => v.state[1].isTestPause == 1); |
| | | |
| | | // 均衡仪 按钮可用控制 停止组1 |
| | | const canStopJH1 = computeJH((v) => v.state[0].isTesting == 1); |
| | | // 均衡仪 按钮可用控制 停止组2 |
| | | const canStopJH2 = computeJH((v) => v.state[1].isTesting == 1); |
| | | |
| | | watch(devList, (val, old) => { |
| | | // console.log("val ch", val, old, "============="); |
| | | if ((val[1].length || val[2].length) && !(old[1].length || old[2].length)) { |
| | |
| | | // 除去掉线的设备 所有此类型的设备状态都为非测试状态 |
| | | // 一体机 isTesting 为0 |
| | | // 均衡仪 moduleStatusInt 不属于[3,4,6,7,9,10]中的一种 |
| | | const canStopBatch = computed(() => { |
| | | let getItem = (vv) => |
| | | selectData.value[vv] |
| | | const canStopBatch1 = computed(() => { |
| | | return ( |
| | | selectData.value[1] |
| | | .filter((v) => v.devOnline == 1) |
| | | .every((v) => v.state.isTesting == 0) && |
| | | selectData.value[vv].length > 0 && |
| | | selectData.value[vv].some((v) => v.batchState == 1); |
| | | return { |
| | | 1: getItem(1), |
| | | 2: getItem(2), |
| | | }; |
| | | selectData.value[1].length > 0 && |
| | | selectData.value[1].some((v) => v.batchState == 1) |
| | | ); |
| | | }); |
| | | |
| | | const canStopBatch2 = computed(() => { |
| | | return ( |
| | | selectData.value[2] |
| | | .filter((v) => v.devOnline == 1) |
| | | .every((v) => |
| | | onlyOneGroup.value |
| | | ? v.state[0].isTesting == 0 |
| | | : v.state[0].isTesting == 0 && v.state[1].isTesting == 0 |
| | | ) && |
| | | selectData.value[2].length > 0 && |
| | | selectData.value[2].some((v) => v.batchState == 1) |
| | | ); |
| | | }); |
| | | |
| | | // 结束批量 |
| | | function stopBatch(type) { |
| | | let devIds = devs.value.map((v) => v.devId); |
| | | let loading = $loading(); |
| | | let devIds = selectData.value[devType.value].map((v) => v.devId); |
| | | cancelContPl(devIds) |
| | | .then((res) => { |
| | | let { code, data } = res.data; |
| | | loading.close(); |
| | | if (code && data) { |
| | | console.log(data); |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | loading.close(); |
| | | console.log(err); |
| | | }); |
| | | } |
| | | |
| | | const devs = computed(() => { |
| | | return selectData.value[devType.value]; |
| | | return selectData.value[devType.value].filter((v) => v.devOnline == 1); |
| | | }); |
| | | |
| | | function goDetails(dev) { |
| | |
| | | } |
| | | |
| | | function stopTest(groupIdx) { |
| | | let devIds = devs.value.map((v) => v.devId); |
| | | let devIds = devs.value |
| | | .filter((v) => v.devOnline == 1 && v.state.isTesting == 1) |
| | | .map((v) => v.devId); |
| | | let loading = $loading(); |
| | | stopA200ParamPl(devIds) |
| | | .then((res) => { |
| | |
| | | if (code && data && successList.length) { |
| | | $message.success("操作成功"); |
| | | if (failList.length) { |
| | | let failNames = props.devs |
| | | let failNames = devs.value |
| | | .filter((v) => failList.some((vv) => vv == v.devId)) |
| | | .map((v) => v.devIdcode); |
| | | |
| | |
| | | function controlTest(groupIdx, ctrlType) { |
| | | // * 2暂停 * 3继续 * 4 停止 |
| | | let loading = $loading(); |
| | | controllerActmParam(currentDevId.value, groupIdx, ctrlType) |
| | | // 满足条件的设备id |
| | | let devIds = devs.value; |
| | | switch(ctrlType) { |
| | | case 2: |
| | | devIds = devIds |
| | | .filter((v) => v.devOnline == 1 && v.state[groupIdx].isTesting == 1 && v.state[groupIdx].isTestPause == 0) |
| | | .map((v) => v.devId); |
| | | break; |
| | | case 3: |
| | | devIds = devIds |
| | | .filter((v) => v.devOnline == 1 && v.state[groupIdx].isTestPause == 1) |
| | | .map((v) => v.devId); |
| | | break; |
| | | case 4: |
| | | devIds = devIds |
| | | .filter((v) => v.devOnline == 1 && v.state[groupIdx].isTesting == 1) |
| | | .map((v) => v.devId); |
| | | break; |
| | | } |
| | | |
| | | controllActmParamPl(devIds, groupIdx, ctrlType) |
| | | .then((res) => { |
| | | loading.close(); |
| | | let { code, data, msg } = res.data; |
| | | if (200 == code) { |
| | | let { code, data, data2, msg } = res.data; |
| | | 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("操作成功"); |
| | | console.log(data); |
| | | if (failList.length) { |
| | | let failNames = devs.value |
| | | .filter((v) => failList.some((vv) => vv == v.devId)) |
| | | .map((v) => v.devIdcode); |
| | | |
| | | $alert(`操作失败的设备列表:${failNames.join(", ")}。`); |
| | | } |
| | | close(); |
| | | } else { |
| | | $message.error("操作失败:" + msg); |
| | | $message.error("操作失败"); |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | |
| | | } |
| | | |
| | | function pauseYtj(type) { |
| | | let devIds = devs.value.map((v) => v.devId); |
| | | let devIds = devs.value; |
| | | if (type == 1) { |
| | | devIds = devIds |
| | | .filter( |
| | | (v) => |
| | | v.devOnline == 1 && v.state.isTesting == 1 && v.state.testPause == 0 |
| | | ) |
| | | .map((v) => v.devId); |
| | | } else { |
| | | devIds = devIds |
| | | .filter((v) => v.devOnline == 1 && v.state.testPause == 1) |
| | | .map((v) => v.devId); |
| | | } |
| | | let loading = $loading(); |
| | | pauseA200ParamPl(devIds, type) |
| | | .then((res) => { |
| | |
| | | if (code && data && successList.length) { |
| | | $message.success("操作成功"); |
| | | if (failList.length) { |
| | | let failNames = props.devs |
| | | let failNames = devs.value |
| | | .filter((v) => failList.some((vv) => vv == v.devId)) |
| | | .map((v) => v.devIdcode); |
| | | |
| | |
| | | }); |
| | | } |
| | | |
| | | onMounted(() => {}); |
| | | onMounted(() => { |
| | | // $alert("请确认参与批量测试的设备与电池适合批量测试"); |
| | | $alert("请确认参与批量测试设备的测试参数与电池规格匹配"); |
| | | }); |
| | | onActivated(() => { |
| | | if ($route.query.devType) { |
| | | devType.value = $route.query.devType * 1; |
| | |
| | | size="default" |
| | | is-button |
| | | > |
| | | <el-radio-button :value="1">充放电一体机</el-radio-button> |
| | | <el-radio-button :value="1">充放电测试仪</el-radio-button> |
| | | <el-radio-button :value="2">均衡测试仪</el-radio-button> |
| | | </el-radio-group> |
| | | </div> |
| | |
| | | <template v-if="1 == devType"> |
| | | <el-button |
| | | size="small" |
| | | v-if="canStopBatch[1]" |
| | | v-if="canStopBatch1" |
| | | class="btn-start btn-grp0" |
| | | @click="stopBatch" |
| | | >结束批量</el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | :disabled="!selectData[devType].length" |
| | | :disabled="!canStartYT" |
| | | class="btn-start" |
| | | @click="test" |
| | | >启动测试</el-button |
| | | > |
| | | <el-button size="small" class="btn-start" @click="pauseYtj(1)" |
| | | <el-button |
| | | size="small" |
| | | class="btn-start" |
| | | @click="pauseYtj(1)" |
| | | :disabled="!canPauseYT" |
| | | >暂停测试</el-button |
| | | > |
| | | <el-button size="small" class="btn-start" @click="pauseYtj(2)" |
| | | <el-button |
| | | size="small" |
| | | class="btn-start" |
| | | @click="pauseYtj(2)" |
| | | :disabled="!canContinueYT" |
| | | >继续测试</el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | :disabled="!selectData[devType].length" |
| | | :disabled="!canStopYT" |
| | | class="btn-start" |
| | | @click="stopTest" |
| | | >停止测试</el-button |
| | |
| | | <el-button |
| | | size="small" |
| | | class="btn-start btn-grp1" |
| | | :disabled="!canChangeBattCount" |
| | | @click="setBattCount" |
| | | >设置组数</el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | v-if="canStopBatch[2]" |
| | | v-if="canStopBatch2" |
| | | class="btn-start btn-grp0" |
| | | @click="stopBatch" |
| | | >结束批量</el-button |
| | |
| | | <el-dropdown |
| | | class="control-group grp1" |
| | | type="primary" |
| | | :disabled="!selectData[devType].length" |
| | | trigger="click" |
| | | > |
| | | 组1控制 |
| | | <template #dropdown> |
| | | <el-dropdown-menu> |
| | | <el-dropdown-item @click="test(0)">启动组1</el-dropdown-item> |
| | | <el-dropdown-item @click="controlTest(0, 2)" |
| | | <el-dropdown-item @click="test(0)" :disabled="!canStartJH1" |
| | | >启动组1</el-dropdown-item |
| | | > |
| | | <el-dropdown-item |
| | | @click="controlTest(0, 2)" |
| | | :disabled="!canPauseJH1" |
| | | >暂停组1</el-dropdown-item |
| | | > |
| | | <el-dropdown-item @click="controlTest(0, 3)" |
| | | <el-dropdown-item |
| | | @click="controlTest(0, 3)" |
| | | :disabled="!canContinueJH1" |
| | | >继续组1</el-dropdown-item |
| | | > |
| | | <el-dropdown-item @click="controlTest(0, 4)" |
| | | <el-dropdown-item |
| | | @click="controlTest(0, 4)" |
| | | :disabled="!canStopJH1" |
| | | >停止组1</el-dropdown-item |
| | | > |
| | | </el-dropdown-menu> |
| | | </template> |
| | | </el-dropdown> |
| | | <!-- <el-button |
| | | size="small" |
| | | :disabled="!selectData[devType].length" |
| | | class="btn-start btn-grp1" |
| | | @click="test(0)" |
| | | >启动组1</el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | :disabled="!selectData[devType].length" |
| | | class="btn-start btn-grp1" |
| | | @click="test(0)" |
| | | >暂停组1</el-button |
| | | > --> |
| | | <!-- 组2控制 --> |
| | | <el-dropdown |
| | | class="control-group grp2" |
| | | type="primary" |
| | | :disabled="!selectData[devType].length" |
| | | v-if="!onlyOneGroup" |
| | | trigger="click" |
| | | > |
| | | 组2控制 |
| | | <template #dropdown> |
| | | <el-dropdown-menu> |
| | | <el-dropdown-item @click="test(1)">启动组2</el-dropdown-item> |
| | | <el-dropdown-item @click="controlTest(1, 2)" |
| | | <el-dropdown-item @click="test(1)" :disabled="!canStartJH2" |
| | | >启动组2</el-dropdown-item |
| | | > |
| | | <el-dropdown-item |
| | | @click="controlTest(1, 2)" |
| | | :disabled="!canPauseJH2" |
| | | >暂停组2</el-dropdown-item |
| | | > |
| | | <el-dropdown-item @click="controlTest(1, 3)" |
| | | <el-dropdown-item |
| | | @click="controlTest(1, 3)" |
| | | :disabled="!canContinueJH2" |
| | | >继续组2</el-dropdown-item |
| | | > |
| | | <el-dropdown-item @click="controlTest(1, 4)" |
| | | <el-dropdown-item |
| | | @click="controlTest(1, 4)" |
| | | :disabled="!canStopJH2" |
| | | >停止组2</el-dropdown-item |
| | | > |
| | | </el-dropdown-menu> |
| | | </template> |
| | | </el-dropdown> |
| | | <!-- <el-button |
| | | size="small" |
| | | :disabled="!selectData[devType].length" |
| | | class="btn-start btn-grp2" |
| | | @click="test(1)" |
| | | >启动组2</el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | :disabled="!selectData[devType].length" |
| | | class="btn-start btn-grp2" |
| | | @click="test(1)" |
| | | >停止组2</el-button |
| | | > --> |
| | | </template> |
| | | </template> |
| | | <div class="card-content"> |
| | | <div class="label">设备类型</div> |
| | | <div class="value"> |
| | | {{ { 1: "充放电一体机", 2: "均衡测试仪" }[devType] }} |
| | | {{ { 1: "充放电测试仪", 2: "均衡测试仪" }[devType] }} |
| | | </div> |
| | | <div class="label">已选择设备总数量</div> |
| | | <div class="value">{{ selectData[devType].length }}</div> |
| | | <div class="label">批量测试状态</div> |
| | | <div class="value">未开始</div> |
| | | <!-- <div class="label">批量测试状态</div> |
| | | <div class="value">未开始</div> --> |
| | | </div> |
| | | </yc-card> |
| | | <yc-card class="p-content"> |
| | |
| | | v-if="jhyBattCountVisible" |
| | | :isBatch="true" |
| | | :devs="devs" |
| | | :isOnlyOne="onlyOneGroup" |
| | | ></batt-count-content> |
| | | </el-dialog> |
| | | </div> |
| | |
| | | &.grp1 { |
| | | margin-left: 8px; |
| | | } |
| | | cursor: pointer; |
| | | // cursor: pointer; |
| | | & > :deep(span) { |
| | | color: #000; |
| | | display: inline-block; |
| | |
| | | background: rgb(0, 231, 112); |
| | | } |
| | | } |
| | | &.is-disabled { |
| | | & > :deep(span) { |
| | | background: #ccc; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |