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 @@ +8effb07 (HEAD -> feature/history-20250108, origin/dev, dev) HEAD@{0}: reset: moving to HEAD +8effb07 (HEAD -> feature/history-20250108, origin/dev, dev) HEAD@{1}: merge dev: Fast-forward +7e95792 HEAD@{2}: checkout: moving from dev to feature/history-20250108 +8effb07 (HEAD -> feature/history-20250108, origin/dev, dev) HEAD@{3}: pull: Fast-forward +7e95792 HEAD@{4}: reset: moving to HEAD +7e95792 HEAD@{5}: checkout: moving from feature/history-20250108 to dev +7e95792 HEAD@{6}: checkout: moving from dev to feature/history-20250108 +7e95792 HEAD@{7}: checkout: moving from feature/history-20050107 to dev +499e249 (feature/history-20050107) HEAD@{8}: commit: 废 +585533d HEAD@{9}: merge dev: Merge made by the 'ort' strategy. +f8b9d15 HEAD@{10}: checkout: moving from dev to feature/history-20050107 +7e95792 HEAD@{11}: pull: Fast-forward +77385c2 HEAD@{12}: checkout: moving from feature/history-20050107 to dev +f8b9d15 HEAD@{13}: commit: 优化 +a50e614 HEAD@{14}: checkout: moving from dev to feature/history-20050107 +77385c2 HEAD@{15}: checkout: moving from feature/history-20050107 to dev +a50e614 HEAD@{16}: commit: 1 +473a047 (origin/feature/history-20050107) HEAD@{17}: checkout: moving from dev to feature/history-20050107 +77385c2 HEAD@{18}: reset: moving to HEAD +77385c2 HEAD@{19}: pull (finish): returning to refs/heads/dev +77385c2 HEAD@{20}: pull (pick): 1 +1576814 HEAD@{21}: pull (start): checkout 15768147d6d39bda22ee227a10ab86898c061d6d +764b4a2 HEAD@{22}: commit: 1 +00e8c1c HEAD@{23}: checkout: moving from feature/history-20050107 to dev +473a047 (origin/feature/history-20050107) HEAD@{24}: reset: moving to HEAD +473a047 (origin/feature/history-20050107) HEAD@{25}: commit: 优化 +566dd9d HEAD@{26}: commit: 11 +9bd6f34 HEAD@{27}: commit: 修该配置文件 +00e8c1c HEAD@{28}: checkout: moving from dev to feature/history-20050107 +00e8c1c HEAD@{29}: pull: Fast-forward +7447c92 HEAD@{30}: checkout: moving from master to dev +88c9c2f (origin/master, origin/HEAD, master) 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)"> +
{{ 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:'