From b0f65f786c9f1a037d2a15e491512dfd4179cd53 Mon Sep 17 00:00:00 2001
From: XinYuan <438159536@qq.com>
Date: Thu, 9 Jan 2025 16:25:12 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=BF=90=E8=A1=8C=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
et --hard f8b9d15 | 32 +++
src/pages/Index/Regular/Running.vue | 449 ++++++++++++++++++++++++++++++++++--
src/utils/getServerInfo.ts | 6 +-
3 files changed, 463 insertions(+), 24 deletions(-)
create mode 100644 et --hard f8b9d15
diff --git a/et --hard f8b9d15 b/et --hard f8b9d15
new file mode 100644
index 0000000..80f6f37
--- /dev/null
+++ b/et --hard f8b9d15
@@ -0,0 +1,32 @@
+[33m8effb07[m[33m ([m[1;36mHEAD[m[33m -> [m[1;32mfeature/history-20250108[m[33m, [m[1;31morigin/dev[m[33m, [m[1;32mdev[m[33m)[m HEAD@{0}: reset: moving to HEAD
+[33m8effb07[m[33m ([m[1;36mHEAD[m[33m -> [m[1;32mfeature/history-20250108[m[33m, [m[1;31morigin/dev[m[33m, [m[1;32mdev[m[33m)[m HEAD@{1}: merge dev: Fast-forward
+[33m7e95792[m HEAD@{2}: checkout: moving from dev to feature/history-20250108
+[33m8effb07[m[33m ([m[1;36mHEAD[m[33m -> [m[1;32mfeature/history-20250108[m[33m, [m[1;31morigin/dev[m[33m, [m[1;32mdev[m[33m)[m HEAD@{3}: pull: Fast-forward
+[33m7e95792[m HEAD@{4}: reset: moving to HEAD
+[33m7e95792[m HEAD@{5}: checkout: moving from feature/history-20250108 to dev
+[33m7e95792[m HEAD@{6}: checkout: moving from dev to feature/history-20250108
+[33m7e95792[m HEAD@{7}: checkout: moving from feature/history-20050107 to dev
+[33m499e249[m[33m ([m[1;32mfeature/history-20050107[m[33m)[m HEAD@{8}: commit: 废
+[33m585533d[m HEAD@{9}: merge dev: Merge made by the 'ort' strategy.
+[33mf8b9d15[m HEAD@{10}: checkout: moving from dev to feature/history-20050107
+[33m7e95792[m HEAD@{11}: pull: Fast-forward
+[33m77385c2[m HEAD@{12}: checkout: moving from feature/history-20050107 to dev
+[33mf8b9d15[m HEAD@{13}: commit: 优化
+[33ma50e614[m HEAD@{14}: checkout: moving from dev to feature/history-20050107
+[33m77385c2[m HEAD@{15}: checkout: moving from feature/history-20050107 to dev
+[33ma50e614[m HEAD@{16}: commit: 1
+[33m473a047[m[33m ([m[1;31morigin/feature/history-20050107[m[33m)[m HEAD@{17}: checkout: moving from dev to feature/history-20050107
+[33m77385c2[m HEAD@{18}: reset: moving to HEAD
+[33m77385c2[m HEAD@{19}: pull (finish): returning to refs/heads/dev
+[33m77385c2[m HEAD@{20}: pull (pick): 1
+[33m1576814[m HEAD@{21}: pull (start): checkout 15768147d6d39bda22ee227a10ab86898c061d6d
+[33m764b4a2[m HEAD@{22}: commit: 1
+[33m00e8c1c[m HEAD@{23}: checkout: moving from feature/history-20050107 to dev
+[33m473a047[m[33m ([m[1;31morigin/feature/history-20050107[m[33m)[m HEAD@{24}: reset: moving to HEAD
+[33m473a047[m[33m ([m[1;31morigin/feature/history-20050107[m[33m)[m HEAD@{25}: commit: 优化
+[33m566dd9d[m HEAD@{26}: commit: 11
+[33m9bd6f34[m HEAD@{27}: commit: 修该配置文件
+[33m00e8c1c[m HEAD@{28}: checkout: moving from dev to feature/history-20050107
+[33m00e8c1c[m HEAD@{29}: pull: Fast-forward
+[33m7447c92[m HEAD@{30}: checkout: moving from master to dev
+[33m88c9c2f[m[33m ([m[1;31morigin/master[m[33m, [m[1;31morigin/HEAD[m[33m, [m[1;32mmaster[m[33m)[m HEAD@{31}: clone: from http://192.168.1.3:3000/project_boditech_vidas_a8000_v3/A8000.git
diff --git a/src/pages/Index/Regular/Running.vue b/src/pages/Index/Regular/Running.vue
index 10f2059..a7536d3 100644
--- a/src/pages/Index/Regular/Running.vue
+++ b/src/pages/Index/Regular/Running.vue
@@ -19,7 +19,7 @@
+ @click="!item.isPlaceholder && toggleSelectItem(item,index)">
空位
@@ -34,7 +34,9 @@
{{ getRemainingTime(item) }}
+ {{ index +1 }}
+
@@ -46,12 +48,26 @@
- {{ tubeHolderState.tubeHolderType === 'BloodTube' ? tubeHolderState.tubeHolderType : 'Epp.1.5'
- }}
+
@@ -123,6 +139,7 @@ import {
LittleBufferDisplay,
EmergencyResultDialog,
} from '../Components'
+import tubeItem from '../components/TestTube/Tube.vue'
import BallGrid from '../Components/Consumables/BallGrid.vue'
import { wasteArea, getTubeRackState } from '../../../services/index'
import type { Subtank, TubeRackInfo } from '../../../types/Index'
@@ -145,6 +162,55 @@ const tubeRack = ref({
state: 'IDLE',
hasTubeToBeProcessed: false,
})
+// 假设这是10条真实数据
+// 模拟10条真实数据
+const tubes = [
+ { userid: 'user1', projId: [1], bloodType: 'A' },
+ { userid: 'user2', projId: [2], bloodType: 'B' },
+ { userid: 'user3', projId: [1, 2], bloodType: 'AB' },
+ { userid: 'user4', projId: [], bloodType: 'O' },
+ { userid: 'user5', projId: [3], bloodType: 'A' },
+ { userid: 'user6', projId: [4], bloodType: 'B' },
+ { userid: 'user7', projId: [3, 4], bloodType: 'AB' },
+ { userid: 'user8', projId: [], bloodType: 'O' },
+ { userid: 'user9', projId: [5], bloodType: 'A' },
+ { userid: 'user10', projId: [6], bloodType: 'B' }
+]
+
+// 项目数据
+const projects = [
+ { projId: 1, projName: 'Project Alpha', color: 'red' },
+ { projId: 2, projName: 'Project Beta', color: 'blue' },
+ { projId: 3, projName: 'Project Gamma', color: 'green' },
+ { projId: 4, projName: 'Project Delta', color: 'yellow' },
+ { projId: 5, projName: 'Project Epsilon', color: 'purple' },
+ { projId: 6, projName: 'Project Zeta', color: 'orange' }
+]
+
+// 血型数据
+const bloodTypes = [
+ { key: 'A', name: 'Type A' },
+ { key: 'B', name: 'Type B' },
+ { key: 'AB', name: 'Type AB' },
+ { key: 'O', name: 'Type O' }
+]
+
+// 示例数据
+const sampleTube = {
+ userid: 'user123',
+ projId: [1, 2],
+ bloodType: 'A'
+}
+
+const sampleProjects = [
+ { projId: 1, projName: 'Project One', color: 'red' },
+ { projId: 2, projName: 'Project Two', color: 'blue' }
+]
+
+const sampleBloodTypes = [
+ { key: 'A', name: 'Type A' },
+ { key: 'B', name: 'Type B' }
+]
// 修改试管架状态的类型定义
interface TubeHolderState {
@@ -179,7 +245,333 @@ const handleTubeHolderStateMessage = (data: TubeHolderStateMessage['data']) => {
//处理孵育盘状态
const handleIncubationPlateStateMessage = (data: IncubationPlateStateMessage['data']) => {
console.log('孵育盘状态:', data)
- incubationPlates.value = data.subtanks
+ // incubationPlates.value = data.subtanks
+ incubationPlates.value =[
+ {
+ pos: "A1",
+ state: "REACTED",
+ bloodType: "WHOLE_BLOOD",
+ sampleBarcode: "BC001",
+ userid: "U001",
+ projInfo: {
+ projId: 1,
+ projName: "血液疾病检测项目",
+ projShortName: "项目1",
+ color: "red"
+ },
+ sampleId: "S001",
+ projId: 1,
+ startIncubatedTime: 1612345678,
+ incubatedTimeSec: 1800,
+ errors: []
+ },
+ {
+ pos: "A2",
+ state: "REACTED",
+ bloodType: "PLASMA",
+ sampleBarcode: "BC002",
+ userid: "U002",
+ projInfo: {
+ projId: 1,
+ projName: "血液疾病检测项目",
+ projShortName: "项目1",
+ color: "red"
+ },
+ sampleId: "S002",
+ projId: 1,
+ startIncubatedTime: 1612345778,
+ incubatedTimeSec: 2100,
+ errors: []
+ },
+ {
+ pos: "A3",
+ state: "PARTIAL_REACTION",
+ bloodType: "SERUM",
+ sampleBarcode: "BC003",
+ userid: "U003",
+ projInfo: {
+ projId: 1,
+ projName: "血液疾病检测项目",
+ projShortName: "项目1",
+ color: "red"
+ },
+ sampleId: "S003",
+ projId: 1,
+ startIncubatedTime: 1612345878,
+ incubatedTimeSec: 1900,
+ errors: []
+ },
+ {
+ pos: "B1",
+ state: "REACTED",
+ bloodType: "WHOLE_BLOOD",
+ sampleBarcode: "BC004",
+ userid: "U004",
+ projInfo: {
+ projId: 2,
+ projName: "血液成分分析项目",
+ projShortName: "项目2",
+ color: "blue"
+ },
+ sampleId: "S004",
+ projId: 2,
+ startIncubatedTime: 1612345978,
+ incubatedTimeSec: 2200,
+ errors: []
+ },
+ {
+ pos: "B2",
+ state: "NO_REACTION",
+ bloodType: "PLASMA",
+ sampleBarcode: "BC005",
+ userid: "U005",
+ projInfo: {
+ projId: 2,
+ projName: "血液成分分析项目",
+ projShortName: "项目2",
+ color: "blue"
+ },
+ sampleId: "S005",
+ projId: 2,
+ startIncubatedTime: 1612346078,
+ incubatedTimeSec: 2000,
+ errors: []
+ },
+ {
+ pos: "B3",
+ state: "REACTED",
+ bloodType: "SERUM",
+ sampleBarcode: "BC006",
+ userid: "U006",
+ projInfo: {
+ projId: 2,
+ projName: "血液成分分析项目",
+ projShortName: "项目2",
+ color: "blue"
+ },
+ sampleId: "S006",
+ projId: 2,
+ startIncubatedTime: 1612346178,
+ incubatedTimeSec: 2300,
+ errors: []
+ },
+ {
+ pos: "C1",
+ state: "PARTIAL_REACTION",
+ bloodType: "WHOLE_BLOOD",
+ sampleBarcode: "BC007",
+ userid: "U007",
+ projInfo: {
+ projId: 3,
+ projName: "特殊血液指标检测项目",
+ projShortName: "项目3",
+ color: "green"
+ },
+ sampleId: "S007",
+ projId: 3,
+ startIncubatedTime: 1612346278,
+ incubatedTimeSec: 1950,
+ errors: []
+ },
+ {
+ pos: "C2",
+ state: "REACTED",
+ bloodType: "PLASMA",
+ sampleBarcode: "BC008",
+ userid: "U008",
+ projInfo: {
+ projId: 3,
+ projName: "特殊血液指标检测项目",
+ projShortName: "项目3",
+ color: "green"
+ },
+ sampleId: "S008",
+ projId: 3,
+ startIncubatedTime: 1612346378,
+ incubatedTimeSec: 2150,
+ errors: []
+ },
+ {
+ pos: "C3",
+ state: "NO_REACTION",
+ bloodType: "SERUM",
+ sampleBarcode: "BC009",
+ userid: "U009",
+ projInfo: {
+ projId: 3,
+ projName: "特殊血液指标检测项目",
+ projShortName: "项目3",
+ color: "green"
+ },
+ sampleId: "S009",
+ projId: 3,
+ startIncubatedTime: 1612346478,
+ incubatedTimeSec: 2050,
+ errors: []
+ },
+ {
+ pos: "D1",
+ state: "REACTED",
+ bloodType: "WHOLE_BLOOD",
+ sampleBarcode: "BC010",
+ userid: "U010",
+ projInfo: {
+ projId: 1,
+ projName: "血液疾病检测项目",
+ projShortName: "项目1",
+ color: "red"
+ },
+ sampleId: "S010",
+ projId: 1,
+ startIncubatedTime: 1612346578,
+ incubatedTimeSec: 2250,
+ errors: []
+ },
+ {
+ pos: "D2",
+ state: "PARTIAL_REACTION",
+ bloodType: "PLASMA",
+ sampleBarcode: "BC011",
+ userid: "U011",
+ projInfo: {
+ projId: 1,
+ projName: "血液疾病检测项目",
+ projShortName: "项目1",
+ color: "red"
+ },
+ sampleId: "S011",
+ projId: 1,
+ startIncubatedTime: 1612346678,
+ incubatedTimeSec: 1850,
+ errors: []
+ },
+ {
+ pos: "D3",
+ state: "NO_REACTION",
+ bloodType: "SERUM",
+ sampleBarcode: "BC012",
+ userid: "U012",
+ projInfo: {
+ projId: 1,
+ projName: "血液疾病检测项目",
+ projShortName: "项目1",
+ color: "red"
+ },
+ sampleId: "S012",
+ projId: 1,
+ startIncubatedTime: 1612346778,
+ incubatedTimeSec: 2000,
+ errors: []
+ },
+ {
+ pos: "E1",
+ state: "REACTED",
+ bloodType: "WHOLE_BLOOD",
+ sampleBarcode: "BC013",
+ userid: "U013",
+ projInfo: {
+ projId: 2,
+ projName: "血液成分分析项目",
+ projShortName: "项目2",
+ color: "blue"
+ },
+ sampleId: "S013",
+ projId: 2,
+ startIncubatedTime: 1612346878,
+ incubatedTimeSec: 2350,
+ errors: []
+ },
+ {
+ pos: "E2",
+ state: "PARTIAL_REACTION",
+ bloodType: "PLASMA",
+ sampleBarcode: "BC014",
+ userid: "U014",
+ projInfo: {
+ projId: 2,
+ projName: "血液成分分析项目",
+ projShortName: "项目2",
+ color: "blue"
+ },
+ sampleId: "S014",
+ projId: 2,
+ startIncubatedTime: 1612346978,
+ incubatedTimeSec: 1900,
+ errors: []
+ },
+ {
+ pos: "E3",
+ state: "NO_REACTION",
+ bloodType: "SERUM",
+ sampleBarcode: "BC015",
+ userid: "U015",
+ projInfo: {
+ projId: 2,
+ projName: "血液成分分析项目",
+ projShortName: "项目2",
+ color: "blue"
+ },
+ sampleId: "S015",
+ projId: 2,
+ startIncubatedTime: 1612347078,
+ incubatedTimeSec: 2100,
+ errors: []
+ },
+ {
+ pos: "F1",
+ state: "REACTED",
+ bloodType: "WHOLE_BLOOD",
+ sampleBarcode: "BC016",
+ userid: "U016",
+ projInfo: {
+ projId: 3,
+ projName: "特殊血液指标检测项目",
+ projShortName: "项目3",
+ color: "green"
+ },
+ sampleId: "S016",
+ projId: 3,
+ startIncubatedTime: 1612347178,
+ incubatedTimeSec: 2200,
+ errors: []
+ },
+ {
+ pos: "F2",
+ state: "PARTIAL_REACTION",
+ bloodType: "PLASMA",
+ sampleBarcode: "BC017",
+ userid: "U017",
+ projInfo: {
+ projId: 3,
+ projName: "特殊血液指标检测项目",
+ projShortName: "项目3",
+ color: "green"
+ },
+ sampleId: "S017",
+ projId: 3,
+ startIncubatedTime: 1612347278,
+ incubatedTimeSec: 1950,
+ errors: []
+ },
+ {
+ pos: "F3",
+ state: "NO_REACTION",
+ bloodType: "SERUM",
+ sampleBarcode: "BC018",
+ userid: "U018",
+ projInfo: {
+ projId: 3,
+ projName: "特殊血液指标检测项目",
+ projShortName: "项目3",
+ color: "green"
+ },
+ sampleId: "S018",
+ projId: 3,
+ startIncubatedTime: 1612347378,
+ incubatedTimeSec: 2050,
+ errors: []
+ }
+]
}
// 定义方法以更新试管架状态
@@ -268,7 +660,7 @@ watch(
isEmergency: true
}
// 添加到孵育盘数据中
- incubationPlates.value.push(subtank)
+ // incubationPlates.value.push(subtank)
})
}
fetchEmergencyData()
@@ -372,7 +764,7 @@ const getItemStyle = (item: Subtank) => {
const remainingTime = getRemainingTime(item)
return {
- backgroundColor: item.pos === 'EMERGENCY' ? '#ffeded' : '#ffffff', // 急诊位特殊背景
+ backgroundColor: item.pos === 'EMERGENCY' ? '#ffeded' : item.projInfo.color, // 急诊位特殊背景
borderColor:
selectedItemId.value === item.sampleId
? 'blue'
@@ -387,7 +779,8 @@ const getItemStyle = (item: Subtank) => {
}
// 切换选中状态
-const toggleSelectItem = (item: Subtank) => {
+let currentIndex = ref(0)
+const toggleSelectItem = (item: Subtank,index: number) => {
// 如果点击的是已选中的样本,则取消选中
if (selectedItemId.value === item.sampleId) {
selectedItem.value = null
@@ -396,6 +789,7 @@ const toggleSelectItem = (item: Subtank) => {
// 否则选中新的样本
selectedItem.value = item
selectedItemId.value = item.sampleId
+ currentIndex.value = index
}
}
@@ -516,7 +910,7 @@ const fetchIncubationData = async () => {
}
// 更新 `incubationPlates` 数据
- incubationPlates.value = filledData
+ // incubationPlates.value = filledData
// 更新开始时间戳
updateStartTimes()
@@ -545,7 +939,7 @@ const fetchIncubationData = async () => {
isPlaceholder: true,
})
}
- incubationPlates.value = filledData
+ // incubationPlates.value = filledData
}
}
@@ -748,7 +1142,7 @@ onUnmounted(() => {
height: 170px;
transform-origin: center -110px; // 调整旋转中心点
border-radius: 12px;
- background-color: #ffffff;
+ background-color: #721616;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
display: flex;
flex-direction: column;
@@ -856,28 +1250,20 @@ onUnmounted(() => {
gap: 20px;
.tube-project-tab {
- width: 100px;
- height: 50px;
- background: linear-gradient(to right, #e3f2fd, #bbdefb);
- border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
- font-size: 24px;
font-weight: bold;
color: #1976d2;
position: relative;
box-shadow: 0 2px 8px rgba(25, 118, 210, 0.1);
-
&::after {
content: '';
width: 3px;
height: 120px;
- background: linear-gradient(to bottom, #1976d2, #64b5f6);
+ background: linear-gradient(to bottom, #e0341d, #fa4f0b);
position: absolute;
- top: -35px;
- right: -15px;
- border-radius: 3px;
+ right: -30px;
}
}
}
@@ -1097,4 +1483,23 @@ onUnmounted(() => {
transform: scale(1);
}
}
+.quan {
+ width: 18px;
+ height: 18px;
+ line-height: 18px;
+ text-align: center;
+ border-radius: 50%;
+ border: 2px solid red;
+ font-size: 13px;
+}
+.tube-container {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: nowrap;
+ justify-content: space-around;
+ align-items: center;
+ height: auto;
+ padding: 20px;
+ width: 100%;
+}
diff --git a/src/utils/getServerInfo.ts b/src/utils/getServerInfo.ts
index 774e992..62a481c 100644
--- a/src/utils/getServerInfo.ts
+++ b/src/utils/getServerInfo.ts
@@ -3,8 +3,10 @@ export function getServerInfo(wsPath: string = '/api/v1/app/ws/state') {
const url = new URL(window.location.href)
// 获取主机名(IP 或域名)和端口号
- const host = url.hostname // 例如: "192.168.1.100" 或 "localhost"
- const port = '8082' // 使用固定的后端端口;由于本地开发时,8080被占用导致ws连接失败,所以使用8082
+ // const host = url.hostname // 例如: "192.168.1.100" 或 "localhost"
+ const host = '192.168.1.119' // 使用固定的后端IP地址
+ // const port = '8082' // 使用固定的后端端口;由于本地开发时,8080被占用导致ws连接失败,所以使用8082
+ const port = '80' // 使用固定的后端端口;由于本地开发时,8080被占用导致ws连接失败,所以使用8082
// 构建 WebSocket URL
const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'