he wei
2024-11-13 0936c4ce40a4307ff965a3469685d49323a9e606
src/views/test/testBatch.vue
@@ -7,7 +7,12 @@
import { useRoute, useRouter } from "vue-router";
import battCountContent from "./battCountContent.vue";
import { cancelContPl, controllerActmParam, stopA200ParamPl } from "./api.js";
import {
  cancelContPl,
  controllActmParamPl,
  stopA200ParamPl,
  pauseA200ParamPl,
} from "./api.js";
import useElement from "@/hooks/useElement.js";
const { $alert, $loading, $message, $confirm } = useElement();
@@ -38,6 +43,100 @@
    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)) {
@@ -124,35 +223,50 @@
// 除去掉线的设备 所有此类型的设备状态都为非测试状态
// 一体机 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) {
@@ -173,7 +287,9 @@
}
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) => {
@@ -191,7 +307,7 @@
      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);
@@ -212,15 +328,51 @@
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) => {
@@ -234,7 +386,59 @@
  jhyBattCountVisible.value = true;
}
onMounted(() => {});
function pauseYtj(type) {
  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) => {
      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 = devs.value
            .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);
    });
}
onMounted(() => {
  // $alert("请确认参与批量测试的设备与电池适合批量测试");
  $alert("请确认参与批量测试设备的测试参数与电池规格匹配");
});
onActivated(() => {
  if ($route.query.devType) {
    devType.value = $route.query.devType * 1;
@@ -266,7 +470,7 @@
          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>
@@ -308,21 +512,35 @@
        <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"
            :disabled="!selectData[devType].length"
            class="btn-start"
            @click="pauseYtj(1)"
            :disabled="!canPauseYT"
            >暂停测试</el-button
          >
          <el-button
            size="small"
            class="btn-start"
            @click="pauseYtj(2)"
            :disabled="!canContinueYT"
            >继续测试</el-button
          >
          <el-button
            size="small"
            :disabled="!canStopYT"
            class="btn-start"
            @click="stopTest"
            >停止测试</el-button
@@ -332,12 +550,13 @@
          <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
@@ -346,85 +565,76 @@
          <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">
@@ -484,6 +694,7 @@
        v-if="jhyBattCountVisible"
        :isBatch="true"
        :devs="devs"
        :isOnlyOne="onlyOneGroup"
      ></batt-count-content>
    </el-dialog>
  </div>
@@ -500,7 +711,7 @@
  .p-left {
    grid-row-start: span 2;
    background: #1a585d;
    background: radial-gradient(#1a585d10, #1a585d80);
    display: flex;
    flex-direction: column;
    .filter {
@@ -620,7 +831,7 @@
    .card-content {
      height: 100%;
      // padding: 0 400px 0 20px;
      padding: 0 320px 0 20px;
      padding: 0 414px 0 20px;
      display: grid;
      // grid-template-columns: repeat(3, 10em 1fr);
      grid-template-columns: 5em 1fr 9em 1fr 8em 2fr;
@@ -668,7 +879,7 @@
    &.grp1 {
      margin-left: 8px;
    }
    cursor: pointer;
    // cursor: pointer;
    & > :deep(span) {
      color: #000;
      display: inline-block;
@@ -681,6 +892,11 @@
        background: rgb(0, 231, 112);
      }
    }
    &.is-disabled {
      & > :deep(span) {
        background: #ccc;
      }
    }
  }
}
</style>