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/testTube.ts similarity index 96% rename from src/store/modules/test-tube.ts rename to src/store/modules/testTube.ts index 584e587..08683e4 100644 --- a/src/store/modules/test-tube.ts +++ b/src/store/modules/testTube.ts @@ -21,6 +21,8 @@ export const useTestTubeStore = defineStore( const getProjectSetting = (uuid: string): string => { return projectSettings.value[uuid] || '自动' } + + // const bloodTypes = ref([]) return { type, tubeInfo,