|
@@ -46,6 +46,29 @@ const topProAllList = ref<any[]>([]);
|
|
|
const topProSelectedList = ref<any[]>([]);
|
|
|
const checkAll = ref(false);
|
|
|
const isIndeterminate = ref(true);
|
|
|
+// 根据状态改变已经选择的项目的上方的名字
|
|
|
+const getSelectedStatusValue = (status: number) => {
|
|
|
+ // 1:未测试 2:正在测试 3:测试合格 4:测试不合格
|
|
|
+ let value = ["", "", ""]; //上方名字 中间icon class
|
|
|
+ switch (status) {
|
|
|
+ case 1:
|
|
|
+ value = ["未开始", "", "bg-normal"];
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ value = ["测试中", "Frame", "bg-progress"];
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ value = ["合格", "gougou", "bg-success"];
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ value = ["失败", "chacha", "bg-error"];
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ value = ["未开始", "", "bg-normal"];
|
|
|
+ }
|
|
|
+
|
|
|
+ return value;
|
|
|
+};
|
|
|
|
|
|
const handleCheckAllChange = (val: CheckboxValueType) => {
|
|
|
topProSelectedList.value = val
|
|
@@ -64,6 +87,12 @@ const getTestProjectTopList = () => {
|
|
|
getTestProjectList({ engineeringId: route?.params?.engineerId })
|
|
|
.then((result) => {
|
|
|
topProAllList.value = result.data;
|
|
|
+
|
|
|
+ topProAllList.value[0].status = 1;
|
|
|
+ topProAllList.value[1].status = 2;
|
|
|
+ topProAllList.value[2].status = 3;
|
|
|
+ topProAllList.value[3].status = 4;
|
|
|
+
|
|
|
topProSelectedList.value = result.data.map((item) => item.id); // 默认选中全部
|
|
|
})
|
|
|
.finally(() => {
|
|
@@ -159,6 +188,19 @@ const getSattisticData = () => {
|
|
|
};
|
|
|
|
|
|
// ===== websocket ====
|
|
|
+const logList = ref<any[]>([]); //日志数据
|
|
|
+const testingWSData = computed(() => {
|
|
|
+ // 根据选择的测试项目的名字作为key,值是空数组用来存放 日志数据
|
|
|
+ console.log("aa", topProSelectedList);
|
|
|
+ let data = {};
|
|
|
+ topProSelectedList.value.forEach((id) => {
|
|
|
+ // 根据id去所有的数据中找对应的项目
|
|
|
+ let project = topProAllList.value.find((item) => item.id == id);
|
|
|
+ data[project.projectName] = [];
|
|
|
+ });
|
|
|
+ return data;
|
|
|
+});
|
|
|
+
|
|
|
const wsClient = useWebSocket(import.meta.env.VITE_WEBSOCKET_URL as string, {
|
|
|
autoReconnect: {
|
|
|
retries: 300,
|
|
@@ -180,7 +222,64 @@ const wsClient = useWebSocket(import.meta.env.VITE_WEBSOCKET_URL as string, {
|
|
|
console.log("长链接断开");
|
|
|
},
|
|
|
onMessage: (msg) => {
|
|
|
- console.log("长链接的消息", msg);
|
|
|
+ if (wsClient.data.value) {
|
|
|
+ let msgType = wsClient.data.value?.msgtype ?? "";
|
|
|
+
|
|
|
+ // 执行过程日志
|
|
|
+ if (msgType == 1) {
|
|
|
+ // let l = { data: { log: "label: 直流电源" }, msgtype: 1 };
|
|
|
+ let logData = wsClient.data.value?.data?.log;
|
|
|
+ if (logData) {
|
|
|
+ logList.value.push(logData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 测试数据
|
|
|
+ else if (msgType === 2) {
|
|
|
+ // {
|
|
|
+ // "msgtype": 2,
|
|
|
+ // "data": {
|
|
|
+ // "status": 1, // 1:未测试 2:正在测试 3:测试合格 4:测试不合格
|
|
|
+ // "dataContent": "",
|
|
|
+ // "dataItem": "",
|
|
|
+ // "EngineeringId": "",
|
|
|
+ // "projectId": "",
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ let logData = wsClient.data.value?.data;
|
|
|
+ if (logData) {
|
|
|
+ // 根据 projectId 去已经选择的项目中找到名字
|
|
|
+ let project = topProSelectedList.value.find(
|
|
|
+ (item) => item.id == logData.projectId
|
|
|
+ );
|
|
|
+ project.status = logData.status;
|
|
|
+ let proName = project?.projectName;
|
|
|
+ testingWSData.value[proName].push(logData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 测试仪器列表状态
|
|
|
+ else if (msgType === 3) {
|
|
|
+ // {
|
|
|
+ // "msgtype": 3,
|
|
|
+ // "data": [{
|
|
|
+ // "deviceNo":"", /* 设备编号 */
|
|
|
+ // "devcieState":"" /* 0不在线,1在线 */
|
|
|
+ // }
|
|
|
+ // ]
|
|
|
+ // }
|
|
|
+ let devData = wsClient.data.value?.data ?? [];
|
|
|
+ devData.forEach((item) => {
|
|
|
+ // 根据 instrumentId 去已经选择的仪器中找到名字
|
|
|
+ let machine = testingMachines.value.find(
|
|
|
+ (machine) => machine.instrumentId == item.instrumentId
|
|
|
+ );
|
|
|
+ if (machine) {
|
|
|
+ machine.deviceState = item.deviceState; // 更新仪器状态
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log("长链接的消息", data.value);
|
|
|
},
|
|
|
});
|
|
|
|
|
@@ -232,25 +331,37 @@ const checkStartEnable = (): boolean => {
|
|
|
</div>
|
|
|
<el-scrollbar height="100%">
|
|
|
<div class="test-list">
|
|
|
+ <!-- // 1:未测试 2:正在测试 3:测试合格 4:测试不合格-->
|
|
|
<div
|
|
|
v-for="item in topOnShowProList"
|
|
|
:key="item.id"
|
|
|
class="test-list-item"
|
|
|
- :class="item === 2 ? 'active' : ''"
|
|
|
+ :class="item.status == '2' ? 'active' : ''"
|
|
|
>
|
|
|
- <!-- //后面根据状态动态修改class -->
|
|
|
- <!-- //'success',合格
|
|
|
- 'error', 失败
|
|
|
- 'progress',测试中
|
|
|
- 'wait' 未开始-->
|
|
|
- <!-- :class="['success', 'error', 'progress', 'wait']"-->
|
|
|
<div class="body" :class="['success']">
|
|
|
- <div class="line"></div>
|
|
|
- <div class="head">合格</div>
|
|
|
+ <div
|
|
|
+ class="line"
|
|
|
+ :class="getSelectedStatusValue(item.status)[2]"
|
|
|
+ ></div>
|
|
|
+ <div class="head">
|
|
|
+ {{ getSelectedStatusValue(item.status)[0] }}
|
|
|
+ </div>
|
|
|
<div class="icon">
|
|
|
- <svg-icon icon-class="gougou" class="svg svg-success" />
|
|
|
- <svg-icon icon-class="chacha" class="svg svg-error" />
|
|
|
- <svg-icon icon-class="Frame" class="svg svg-progress" />
|
|
|
+ <svg-icon
|
|
|
+ v-if="item.status == '3'"
|
|
|
+ icon-class="gougou"
|
|
|
+ class="svg svg-success"
|
|
|
+ />
|
|
|
+ <svg-icon
|
|
|
+ v-else-if="item.status == '4'"
|
|
|
+ icon-class="chacha"
|
|
|
+ class="svg svg-error"
|
|
|
+ />
|
|
|
+ <svg-icon
|
|
|
+ v-else-if="item.status == '2'"
|
|
|
+ icon-class="Frame"
|
|
|
+ class="svg svg-progress"
|
|
|
+ />
|
|
|
</div>
|
|
|
<div class="name">{{ item.projectName }}</div>
|
|
|
</div>
|
|
@@ -308,7 +419,7 @@ const checkStartEnable = (): boolean => {
|
|
|
<el-option
|
|
|
v-for="item in excutingMachinesList"
|
|
|
:key="item.id"
|
|
|
- :label="item.configName"
|
|
|
+ :label="item.instrumentName"
|
|
|
:value="item"
|
|
|
/>
|
|
|
</el-select>
|
|
@@ -319,8 +430,8 @@ const checkStartEnable = (): boolean => {
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
<div>
|
|
|
- <svg-icon icon-class="gougou" class="svg-success" />
|
|
|
- <span>192.168.0.109</span>
|
|
|
+ <!-- <svg-icon icon-class="gougou" class="svg-success" />-->
|
|
|
+ <span>{{ selectedExcutingMachine?.ip }}</span>
|
|
|
</div>
|
|
|
<div class="csyq-tit">
|
|
|
<span>测试仪器</span>
|
|
@@ -337,7 +448,12 @@ const checkStartEnable = (): boolean => {
|
|
|
>
|
|
|
<div>
|
|
|
<span class="item-icon">
|
|
|
- <svg-icon icon-class="gougou" class="svg-success" />
|
|
|
+ <svg-icon
|
|
|
+ v-if="item.deviceState == '1'"
|
|
|
+ icon-class="gougou"
|
|
|
+ class="svg-success"
|
|
|
+ />
|
|
|
+ <svg-icon v-else icon-class="chacha" class="svg-error" />
|
|
|
</span>
|
|
|
<span>{{ item.configName }}</span>
|
|
|
</div>
|
|
@@ -351,8 +467,9 @@ const checkStartEnable = (): boolean => {
|
|
|
<titHeader icon-class="zxgcrz" tit="执行过程日志" />
|
|
|
<el-scrollbar class="content-B-height-3">
|
|
|
<div class="content-log">
|
|
|
- 开始执行,时间14:28:32 打开电源 打开射频开关
|
|
|
- 执行增益测试,结果合格 执行杂波测试,结果合格 测试完成 电源关闭
|
|
|
+ <span v-for="(item, index) in logList" :key="index">{{
|
|
|
+ item?.label
|
|
|
+ }}</span>
|
|
|
</div>
|
|
|
</el-scrollbar>
|
|
|
</div>
|
|
@@ -367,12 +484,16 @@ const checkStartEnable = (): boolean => {
|
|
|
<span>数据内容</span>
|
|
|
</div>
|
|
|
<el-scrollbar class="content-B-height-4">
|
|
|
- <div>
|
|
|
- <div class="cssj-tit">测试项目:1dB压缩点</div>
|
|
|
- <div v-for="(item, index) in 5" :key="index" class="cssj-row-flex">
|
|
|
+ <div v-for="(proName, index) in Object.keys(testingWSData)">
|
|
|
+ <div class="cssj-tit">项目名称: {{ proName }}</div>
|
|
|
+ <div
|
|
|
+ v-for="(data, index) in testingWSData[proName]"
|
|
|
+ :key="index"
|
|
|
+ class="cssj-row-flex"
|
|
|
+ >
|
|
|
<span>{{ index }}</span>
|
|
|
- <span>数据项</span>
|
|
|
- <span>数据内容</span>
|
|
|
+ <span>{{ data?.dataItem }}</span>
|
|
|
+ <span>{{ data?.dataContent }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
</el-scrollbar>
|
|
@@ -513,6 +634,9 @@ $color-progress: #3cbaff;
|
|
|
font-size: var(--hj-fs-22);
|
|
|
color: var(--fc-color-7);
|
|
|
}
|
|
|
+.svg-normal {
|
|
|
+ background-color: $hj-white-1;
|
|
|
+}
|
|
|
.svg-success {
|
|
|
color: $color-success;
|
|
|
}
|
|
@@ -523,6 +647,19 @@ $color-progress: #3cbaff;
|
|
|
color: $color-progress;
|
|
|
}
|
|
|
|
|
|
+.bg-normal {
|
|
|
+ background-color: $hj-white-1;
|
|
|
+}
|
|
|
+.bg-error {
|
|
|
+ background-color: $color-error;
|
|
|
+}
|
|
|
+.bg-success {
|
|
|
+ background-color: $color-success;
|
|
|
+}
|
|
|
+.bg-progress {
|
|
|
+ background-color: $color-progress;
|
|
|
+}
|
|
|
+
|
|
|
.runtest {
|
|
|
position: absolute;
|
|
|
top: 0;
|
|
@@ -602,44 +739,12 @@ $color-progress: #3cbaff;
|
|
|
margin-top: 50px;
|
|
|
margin-bottom: 50px;
|
|
|
font-size: var(--hj-fs-32);
|
|
|
- .svg {
|
|
|
- display: none;
|
|
|
- }
|
|
|
}
|
|
|
.name {
|
|
|
font-weight: bold;
|
|
|
font-size: var(--hj-fs-14);
|
|
|
}
|
|
|
}
|
|
|
- .body.success {
|
|
|
- .line {
|
|
|
- background-color: #8fe200;
|
|
|
- }
|
|
|
- .svg-success {
|
|
|
- display: block;
|
|
|
- }
|
|
|
- }
|
|
|
- .body.error {
|
|
|
- .line {
|
|
|
- background-color: #f83c64;
|
|
|
- }
|
|
|
- .svg-error {
|
|
|
- display: block;
|
|
|
- }
|
|
|
- }
|
|
|
- .body.progress {
|
|
|
- .line {
|
|
|
- background-color: #3cbaff;
|
|
|
- }
|
|
|
- .svg-progress {
|
|
|
- display: block;
|
|
|
- }
|
|
|
- }
|
|
|
- .body.wait {
|
|
|
- .line {
|
|
|
- background-color: #ededed;
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
.content-B {
|