Bladeren bron

执行页面数据修改功能,开始接口。

jiaxiaoqiang 3 maanden geleden
bovenliggende
commit
30474934b1

+ 21 - 0
src/api/project/excute.ts

@@ -52,3 +52,24 @@ export function searchExcutingInstrumentConfig(
     },
   });
 }
+
+//查询仪器的状态 调硬件接口
+export function searchInstrumentStatus(devicesList: any[]): AxiosPromise {
+  return request({
+    url: "xxx",
+    method: "post",
+    data: {
+      instrumentList: devicesList,
+      instrumentListJson: JSON.stringify(devicesList),
+    },
+  });
+}
+
+// 开始执行测试项目
+export function startExecuteProjects(data: object): AxiosPromise {
+  return request({
+    url: "/api/v1/test/engrExecute/add",
+    method: "post",
+    data: data,
+  });
+}

+ 102 - 0
src/views/modules/runTest/components/configDataAndDevice.vue

@@ -0,0 +1,102 @@
+<script lang="ts" setup>
+import type { TabsPaneContext } from "element-plus";
+import SecondHeader from "@/views/modules/conmon/SecondHeader.vue";
+
+const activeName = ref("仪器配置");
+const handleClick = (tab: TabsPaneContext, event: Event) => {
+  // console.log(tab, event);
+};
+
+const emits = defineEmits(["close"]);
+
+const devicesData = defineModel<any[]>("devicesData");
+const dataList = defineModel<any[]>("dataList");
+
+// =======================
+</script>
+
+<template>
+  <div class="global-config">
+    <div class="second-header">
+      <div class="left-text">数据配置</div>
+      <div>
+        <svg-icon
+          icon-class="close"
+          @click="emits('close')"
+          style="cursor: pointer"
+        />
+      </div>
+    </div>
+    <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
+      <el-tab-pane label="仪器配置" name="仪器配置">
+        <el-table :data="devicesData" style="width: 100%">
+          <el-table-column label="序号" type="index" width="80" />
+
+          <el-table-column label="配置地址" prop="configIp">
+            <template #default="scope">
+              <el-input v-model="scope.row.configIp"></el-input>
+            </template>
+          </el-table-column>
+          <el-table-column label="配置名称" prop="configName" />
+          <el-table-column label="仪器编码" prop="instrumentCode" />
+          <el-table-column label="仪器类型" prop="typeLabel" />
+        </el-table>
+      </el-tab-pane>
+      <el-tab-pane label="全局数据" name="全局数据">
+        <el-table :data="dataList" style="width: 100%">
+          <el-table-column label="序号" type="index" width="80" />
+
+          <el-table-column label="数据项编码" prop="dataItemCode" />
+          <el-table-column label="数据项名称" prop="dataItemName" />
+          <!--        <el-table-column label="测试工程id" prop="engineeringId" />-->
+          <el-table-column label="设定值" prop="setValue" />
+        </el-table>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<style scoped lang="scss">
+.global-config {
+  width: 100%;
+  //height: 100vh;
+  .demo-tabs {
+    // background-color: red;
+    :deep(.el-tabs__nav-scroll) {
+      padding: 0 20px;
+    }
+  }
+  .add {
+    width: 12px;
+    height: 12px;
+    line-height: 12px;
+    border-radius: 12px;
+    text-align: center;
+    background-color: #fff;
+    color: #3b7cff;
+    margin-right: 10px;
+    vertical-align: middle;
+  }
+}
+
+.second-header {
+  width: 100%;
+  height: $main-header-height;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  background-color: $hj-white-1;
+  padding: 0 20px;
+  border-bottom: 1px solid $hj-white-3;
+
+  .left-text {
+    height: 18px;
+
+    font-weight: bold;
+    font-size: 14px;
+    color: $hj-black-1;
+    line-height: 16px;
+    text-align: left;
+  }
+}
+</style>

+ 126 - 38
src/views/modules/runTest/run-test.vue

@@ -1,38 +1,42 @@
 <script setup lang="ts">
 import { ref } from "vue";
 import titHeader from "./components/tit-header.vue";
+import ConfigDataAndDevice from "./components/configDataAndDevice.vue";
 
 import { useCommonStoreHook } from "@/store";
 import { getTestProjectList } from "@/api/project";
 import { CheckboxValueType } from "element-plus";
 import {
+  searchExcutingGlobalData,
   searchExcutingInstrumentConfig,
+  searchInstrumentStatus,
   searchTestMachineConfig,
   searhTestType,
+  startExecuteProjects,
 } from "@/api/project/excute";
 
 const route = useRoute();
 
 interface VersionItem {
-  instrumentType: string;
-  configName: string;
-  configIp: string;
-  zhongduan: string;
+  testLocation: string;
+  productCode: string;
+  testType: string;
 }
 
 const formLabelAlign = ref<VersionItem>({
-  instrumentType: "",
-  configName: "",
-  configIp: "",
-  zhongduan: "",
+  testLocation: "",
+  productCode: "",
+  testType: "",
 });
+// 选择的执行终端
+const selectedExcutingMachine = ref<any>();
 
 const drawer = ref(false);
 
-onMounted(() => {
-  getTestProjectTopList();
+onMounted(async () => {
   getAllTestTypes();
   getExcutingMachines();
+  getTestProjectTopList();
 });
 
 const topProAllList = ref<any[]>([]);
@@ -54,12 +58,15 @@ const handletopProSelectedListChange = (value: CheckboxValueType[]) => {
 };
 // 获取顶部测试项目
 const getTestProjectTopList = () => {
-  getTestProjectList({ engineeringId: route?.params?.engineerId }).then(
-    (result) => {
+  getTestProjectList({ engineeringId: route?.params?.engineerId })
+    .then((result) => {
       topProAllList.value = result.data;
       topProSelectedList.value = result.data.map((item) => item.id); // 默认选中全部
-    }
-  );
+    })
+    .finally(() => {
+      getExcutingGlobalMachines();
+      getExcutingGlobalData();
+    });
 };
 
 // 顶部展示的项目 是弹窗选中的项目
@@ -91,9 +98,71 @@ const testingMachines = ref<any[]>([]); // 所有routeData里面的测试仪器
 const getExcutingGlobalMachines = async () => {
   let res = await searchExcutingInstrumentConfig(
     route?.params?.engineerId as string,
-    topProSelectedList.value
+    topProAllList.value.map((item) => item.id)
   );
   testingMachines.value = res.data;
+  //   拿到仪器数据之后 调用接口查看仪器是否在线
+  // let status = await searchInstrumentStatus(testingMachines.value);
+};
+
+// 最下方全局数据
+const excutingGlobalData = ref<any[]>([]);
+const getExcutingGlobalData = async () => {
+  let res = await searchExcutingGlobalData(
+    route?.params?.engineerId as string,
+    topProAllList.value.map((item) => item.id)
+  );
+  excutingGlobalData.value = res.data;
+};
+
+// 配置这次执行的工程相关的数据和仪器
+const configDrawerVisible = ref(false);
+
+// 开始测试相关
+const startToRunTest = async () => {
+  if (!checkStartEnable()) return;
+
+  let params = {
+    configList: testingMachines.value,
+    engineeringId: route.params.engineerId,
+    globalDataList: excutingGlobalData.value,
+    projectList: topProSelectedList.value,
+    ...formLabelAlign.value,
+    executeTerminal: selectedExcutingMachine.value.id,
+  };
+
+  let res = await startExecuteProjects(params);
+};
+
+const checkStartEnable = (): boolean => {
+  let enable = true;
+
+  if (!selectedExcutingMachine.value) {
+    ElMessage.warning("请选择执行终端");
+    enable = false;
+  }
+
+  if (!formLabelAlign.value.productCode) {
+    ElMessage.warning("请输入产品编号");
+    enable = false;
+  }
+
+  if (!formLabelAlign.value.testType) {
+    ElMessage.warning("请选择测试类型");
+    enable = false;
+  }
+
+  if (!formLabelAlign.value.testLocation) {
+    ElMessage.warning("请输入测试地点");
+    enable = false;
+  }
+
+  if (topProSelectedList.value.length < 1) {
+    ElMessage.warning("请选择测试项目");
+    enable = false;
+  }
+
+  return enable;
 };
 </script>
 
@@ -140,12 +209,12 @@ const getExcutingGlobalMachines = async () => {
           :model="formLabelAlign"
           ref="ruleFormRef"
         >
-          <el-form-item label="产品编号" prop="instrumentType">
-            <el-input v-model="formLabelAlign.instrumentType" />
+          <el-form-item label="产品编号" prop="productCode">
+            <el-input v-model="formLabelAlign.productCode" />
           </el-form-item>
-          <el-form-item label="测试类型" prop="configName">
+          <el-form-item label="测试类型" prop="testType">
             <el-select
-              v-model="formLabelAlign.configName"
+              v-model="formLabelAlign.testType"
               placeholder="选择测试类型"
             >
               <el-option
@@ -156,8 +225,8 @@ const getExcutingGlobalMachines = async () => {
               />
             </el-select>
           </el-form-item>
-          <el-form-item label="测试地点" prop="configIp">
-            <el-input v-model="formLabelAlign.configIp" />
+          <el-form-item label="测试地点" prop="testLocation">
+            <el-input v-model="formLabelAlign.testLocation" />
           </el-form-item>
         </el-form>
       </div>
@@ -171,23 +240,23 @@ const getExcutingGlobalMachines = async () => {
           style="max-width: 600px"
           ref="ruleFormRef"
         >
-          <el-form-item label="执行终端" prop="configName">
+          <el-form-item label="执行终端">
             <div class="select-div">
               <el-select
                 class="select-item"
-                v-model="formLabelAlign.zhongduan"
+                v-model="selectedExcutingMachine"
                 placeholder="选择执行终端"
               >
                 <el-option
                   v-for="item in excutingMachinesList"
                   :key="item.id"
                   :label="item.configName"
-                  :value="item.id"
+                  :value="item"
                 />
               </el-select>
-              <el-button class="test-min-btn" type="primary">
-                <svg-icon icon-class="refresh1" size="18" />
-              </el-button>
+              <!--              <el-button class="test-min-btn" type="primary">-->
+              <!--                <svg-icon icon-class="refresh1" size="18" />-->
+              <!--              </el-button>-->
             </div>
           </el-form-item>
         </el-form>
@@ -197,20 +266,24 @@ const getExcutingGlobalMachines = async () => {
         </div>
         <div class="csyq-tit">
           <span>测试仪器</span>
-          <el-button class="test-min-btn" type="primary">
-            <svg-icon icon-class="project-config" size="18" />
-          </el-button>
+          <!--                  <el-button class="test-min-btn" type="primary">-->
+          <!--                    <svg-icon icon-class="project-config" size="18" />-->
+          <!--                  </el-button>-->
         </div>
         <el-scrollbar class="content-B-height-2">
           <div class="csyq-list">
-            <div v-for="(item, index) in 15" :key="index" class="csyq-item">
+            <div
+              v-for="(item, index) in testingMachines"
+              :key="index"
+              class="csyq-item"
+            >
               <div>
                 <span class="item-icon">
                   <svg-icon icon-class="gougou" class="svg-success" />
                 </span>
-                <span>信号源1</span>
+                <span>{{ item.configName }}</span>
               </div>
-              <div>192.168.0.109</div>
+              <div>{{ item.configIp }}</div>
             </div>
           </div>
         </el-scrollbar>
@@ -226,9 +299,9 @@ const getExcutingGlobalMachines = async () => {
         </el-scrollbar>
       </div>
       <div class="content-B-4">
-        <el-button class="test-min-btn" type="primary">
-          <svg-icon icon-class="refresh1" />
-        </el-button>
+        <!--        <el-button class="test-min-btn" type="primary">-->
+        <!--          <svg-icon icon-class="refresh1" />-->
+        <!--        </el-button>-->
         <titHeader icon-class="cssj" tit="测试数据" />
         <div class="cssj-row-flex">
           <span>序号</span>
@@ -250,7 +323,7 @@ const getExcutingGlobalMachines = async () => {
 
     <div class="content-C">
       <div class="left">
-        <div class="test-btn progress">
+        <div class="test-btn progress" @click="configDrawerVisible = true">
           <svg-icon icon-class="project-config" />
           全局配置
         </div>
@@ -271,7 +344,7 @@ const getExcutingGlobalMachines = async () => {
       </div>
       <div class="right">
         <div>已用时:300s</div>
-        <div class="test-btn progress">
+        <div class="test-btn progress" @click="startToRunTest">
           <svg-icon icon-class="start-test" />
           开始测试
         </div>
@@ -318,6 +391,21 @@ const getExcutingGlobalMachines = async () => {
         </div>
       </template>
     </el-drawer>
+
+    <el-drawer
+      v-model="configDrawerVisible"
+      :with-header="false"
+      :append-to-body="true"
+      :destroy-on-close="true"
+      size="800"
+      direction="ltr"
+    >
+      <ConfigDataAndDevice
+        v-model:devices-data="testingMachines"
+        v-model:data-list="excutingGlobalData"
+        @close="configDrawerVisible = false"
+      ></ConfigDataAndDevice>
+    </el-drawer>
   </div>
 </template>