From 8effb073622f0c65a595ba59eba4a35362cb4d8e Mon Sep 17 00:00:00 2001 From: zhangjiming Date: Thu, 9 Jan 2025 11:17:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=88=B6=E8=AF=95=E7=AE=A1=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Index/Regular/TestTube.vue | 212 ++++++++++++++++++--- .../Index/components/TestTube/TestTubeRack.vue | 22 ++- src/pages/Index/components/TestTube/Tube.vue | 122 +++++++++++- src/services/Index/Test-tube/test-tube.ts | 3 +- src/store/index.ts | 2 +- src/store/modules/test-tube.ts | 37 ---- src/store/modules/testTube.ts | 39 ++++ 7 files changed, 355 insertions(+), 82 deletions(-) delete mode 100644 src/store/modules/test-tube.ts create mode 100644 src/store/modules/testTube.ts diff --git a/src/pages/Index/Regular/TestTube.vue b/src/pages/Index/Regular/TestTube.vue index 013b3af..3b1a0f7 100644 --- a/src/pages/Index/Regular/TestTube.vue +++ b/src/pages/Index/Regular/TestTube.vue @@ -7,7 +7,14 @@ :key="tubeRack.uuid" class="tube-rack-container" > - +
@@ -17,22 +24,35 @@
添加试管架
-
-
+
+

项目选择

-
    -
  • -
    - {{ proj.projName }} - {{ proj.num }} +
    +
    +
    + {{ proj.projName }} + {{ proj.num }}
    -
  • -
+
+
-
+

血液类型

-
- {{ type.name }} +
+
+
+ {{ type.name }} +
+
@@ -61,21 +81,68 @@ import { import { ElMessage } from 'element-plus' const router = useRouter() + const testTubeStore = useTestTubeStore() const settingTestTubeStore = useSettingTestTubeStore() const consumables = useConsumablesStore() + const tubeRacks = ref([]) // const bloodTypes = ref([]) const loading = ref(false) // 控制加载状态 const selectedUUID = ref('') // +const selectedProjIds = ref([]) // number[] +const selectedBloodTypeKey = ref('WHOLE_BLOOD') + // 初始化获取试管架数据 onMounted(() => { getTubeData() getBloodTypeData() }) +const onClickTubeItem = (rackIdx, tubeIdx) => { + console.log(rackIdx, tubeIdx) +} +const isElemActive = (proj) => { + return selectedProjIds.value.includes(proj.projId) +} + +const elemStyle = (proj) => { + const active = isElemActive(proj) + if (active) { + return { + border: 'solid 1px #FFF', + backgroundColor: proj.color, + color: '#FFF', + } + } else { + return { + border: `solid 1px ${proj.color}`, + backgroundColor: '#FFF', + color: proj.color, + } + } +} + +const clickProjectItem = (proj) => { + if (selectedProjIds.value.includes(proj.projId)) { + selectedProjIds.value = selectedProjIds.value.filter( + (pId) => pId !== proj.projId, + ) + } else { + selectedProjIds.value = [...selectedProjIds.value, proj.projId].sort() + } +} + +const clickBloodTypeItem = (type) => { + if (selectedBloodTypeKey.value === type.key) { + selectedBloodTypeKey.value = '' + } else { + selectedBloodTypeKey.value = type.key + } +} + const projectsAvailable = computed(() => { const group = R.groupBy((p) => p.projName, consumables.plates) const pNames = R.keys(group) @@ -99,7 +166,7 @@ const getBloodTypeData = async () => { if (res.success) { bloodTypes.value = res.data - console.log(res.data) + // console.log(res.data) } else { ElMessage({ message: '加载血液类型失败', @@ -144,14 +211,16 @@ const handleChangeUser = async (uuid) => { } //删除试管架 -const deleteHandle = async (uuid) => { - const res = await deleteTube(uuid) +const deleteHandle = async (idx) => { + const rack = tubeRacks.value[idx] + const res = await deleteTube(rack.uuid) if (res.success) { + tubeRacks.value = tubeRacks.value.filter((v, i) => i !== idx) ElMessage({ message: '删除成功', type: 'success', }) - getTubeData() + // getTubeData() } else { ElMessage({ message: '删除失败', @@ -270,17 +339,36 @@ const handleUpdateSelectedSamples = ({ } // 添加更新试管设置的方法 -const updateTubeSettingsHandler = async () => { - const { uuid, setting } = settingTestTubeStore.currentConfig - - if (uuid && setting.tubeIndex >= 0) { +const updateTubeSettingsHandler = async (rackIdx, tubeIdx) => { + if (!selectedBloodTypeKey.value) { + ElMessage.error('请选择血液类型') + return + } + const rack = tubeRacks.value[rackIdx] + if (tubeIdx < rack.tubeSettings.length) { + const setting = rack.tubeSettings[tubeIdx] + const updSetting = { + ...setting, + projId: selectedProjIds.value, + bloodType: selectedBloodTypeKey.value, + } try { - const response = await updateTubeConfig({ uuid, setting }) - + const response = await updateTubeConfig({ + uuid: rack.uuid, + setting: updSetting, + }) if (response.success) { - ElMessage.success('设置更新成功') - console.log(tubeRacks.value) - settingTestTubeStore.clearConfig() + tubeRacks.value = tubeRacks.value.map((rack, idx) => { + if (idx === rackIdx) { + rack.tubeSettings = rack.tubeSettings.map((tube, index) => { + if (index === tubeIdx) { + return updSetting + } + return tube + }) + } + return rack + }) } else { ElMessage.error('设置更新失败') } @@ -294,7 +382,12 @@ const updateTubeSettingsHandler = async () => { diff --git a/src/pages/Index/components/TestTube/Tube.vue b/src/pages/Index/components/TestTube/Tube.vue index ca22b29..b95a394 100644 --- a/src/pages/Index/components/TestTube/Tube.vue +++ b/src/pages/Index/components/TestTube/Tube.vue @@ -1,16 +1,110 @@ diff --git a/src/services/Index/Test-tube/test-tube.ts b/src/services/Index/Test-tube/test-tube.ts index 3e173ca..22902eb 100644 --- a/src/services/Index/Test-tube/test-tube.ts +++ b/src/services/Index/Test-tube/test-tube.ts @@ -104,8 +104,7 @@ export const updateTubeConfig = async (config: { try { const res = await apiClient.post( '/api/v1/app/appTubeSettingMgr/updateTubeSetting', - config.setting, - { params: { uuid: config.uuid } }, + config, ) return res.data } catch (error) { diff --git a/src/store/index.ts b/src/store/index.ts index 7fbe542..25294e9 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,5 +1,5 @@ export * from './modules/consumables' export * from './modules/emergency' -export * from './modules/test-tube' +export * from './modules/testTube' export * from './modules/device' export * from './modules/settingTestTube' diff --git a/src/store/modules/test-tube.ts b/src/store/modules/test-tube.ts deleted file mode 100644 index 584e587..0000000 --- a/src/store/modules/test-tube.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { defineStore } from 'pinia' -import { ref } from 'vue' -import type { DataItem } from '../../types/Index' -export const useTestTubeStore = defineStore( - 'testTube', - () => { - const tubeInfo = ref({} as DataItem) - const type = ref('') - const projectSettings = ref>({}) - const setTubeInfo = (info: DataItem) => { - tubeInfo.value = info - } - const setTypeInfo = (typeInfo: string) => { - type.value = typeInfo - } - // 设置指定试管架的项目设置 - const setProjectSetting = (uuid: string, setting: string) => { - projectSettings.value[uuid] = setting - } - // 获取指定试管架的项目设置,默认返回 '自动' - const getProjectSetting = (uuid: string): string => { - return projectSettings.value[uuid] || '自动' - } - return { - type, - tubeInfo, - setTubeInfo, - setTypeInfo, - projectSettings, - setProjectSetting, - getProjectSetting, - } - }, - { - persist: true, - }, -) diff --git a/src/store/modules/testTube.ts b/src/store/modules/testTube.ts new file mode 100644 index 0000000..08683e4 --- /dev/null +++ b/src/store/modules/testTube.ts @@ -0,0 +1,39 @@ +import { defineStore } from 'pinia' +import { ref } from 'vue' +import type { DataItem } from '../../types/Index' +export const useTestTubeStore = defineStore( + 'testTube', + () => { + const tubeInfo = ref({} as DataItem) + const type = ref('') + const projectSettings = ref>({}) + const setTubeInfo = (info: DataItem) => { + tubeInfo.value = info + } + const setTypeInfo = (typeInfo: string) => { + type.value = typeInfo + } + // 设置指定试管架的项目设置 + const setProjectSetting = (uuid: string, setting: string) => { + projectSettings.value[uuid] = setting + } + // 获取指定试管架的项目设置,默认返回 '自动' + const getProjectSetting = (uuid: string): string => { + return projectSettings.value[uuid] || '自动' + } + + // const bloodTypes = ref([]) + return { + type, + tubeInfo, + setTubeInfo, + setTypeInfo, + projectSettings, + setProjectSetting, + getProjectSetting, + } + }, + { + persist: true, + }, +)