Browse Source

Merge branch 'release/version1.0' of http://192.168.1.3:3000/project_boditech_vidas_a8000_v3/A8000 into release/version1.0

dev
LiLongLong 7 months ago
parent
commit
71604c2ebd
  1. 54
      src/pages/Index/History.vue
  2. 4
      src/pages/Index/Regular/Consumables.vue
  3. 24
      src/pages/Index/Regular/Running.vue
  4. 6
      src/pages/Index/components/Consumables/MoveLiquidArea.vue
  5. 6
      src/pages/Index/components/TestTube/Tube.vue
  6. 6
      src/store/modules/emergency.ts
  7. 33
      src/types/Index/History.ts
  8. 2
      src/utils/formDate.ts
  9. 13
      src/websocket/socket.ts

54
src/pages/Index/History.vue

@ -64,20 +64,8 @@
</div>
<div class="detail-item">
<span class="label">subResult1:</span>
<span class="value">{{ rowData && jsonResult(rowData.subProjResult1) }}</span>
</div>
<div class="detail-item">
<span class="label">subResult2:</span>
<span class="value">{{ rowData && jsonResult(rowData.subProjResult2) }}</span>
</div>
<div class="detail-item">
<span class="label">subResult3:</span>
<span class="value">{{ rowData && jsonResult(rowData.subProjResult3) }}</span>
<span class="label">Result:</span>
<span class="value">{{ rowData && JSON.stringify(rowData.results) }}</span>
</div>
</div>
@ -151,7 +139,6 @@ import { ElMessage } from 'element-plus'
import WarnSvg from '@/assets/Index/History/warn.svg'
import PrintSvg from '@/assets/Index/History/print.svg'
import ErrorSvg from '@/assets/Warn.svg'
import Mock from'mockjs';
//
const historyTableRef = ref()
@ -241,6 +228,7 @@ const formatDate = (date: string | number | Date) => {
return dayjs(date).format('YYYY-MM-DD')
}
const jsonResult = (result: any) => {
if (!result) return
if (result.errorInfo != "") {
return result.errorInfo
} else {
@ -464,41 +452,10 @@ const handleExport = () => {
warnMessage.value = '导出成功'
showWarn.value = true
}
const mockData = Mock.mock({
'list|50': [
{
id: '@increment',
creatDate: '@date("YYYY-MM-DD")',
projName: '@ctitle(5, 10)',
subProjResult1: {
result1: '@ctitle(3, 5)',
result2: '@ctitle(3, 5)',
result3: '@ctitle(3, 5)',
errorInfo: ''
},
subProjResult2: {
result1: '@ctitle(3, 5)',
result2: '@ctitle(3, 5)',
result3: '@ctitle(3, 5)',
errorInfo: ''
},
subProjResult3: {
result1: '@ctitle(3, 5)',
result2: '@ctitle(3, 5)',
result3: '@ctitle(3, 5)',
errorInfo: ''
},
sampleBloodType: '@pick(["A", "B", "AB", "O"])',
lotId: '@increment'
}
]
});
onMounted(() => {
getTableData()
tableData.value = mockData.list;
total.value = mockData.list.length;
totalPage.value = Math.ceil(mockData.list.length / pageSize.value);
});
})
</script>
<style scoped lang="less">
@ -716,6 +673,7 @@ onMounted(() => {
.value {
color: #303133;
flex: 1;
word-break: break-all;
}
}

4
src/pages/Index/Regular/Consumables.vue

@ -163,7 +163,7 @@ interface ScanReport {
const formattedReports = ref<ScanReport[]>([])
//
const emergencyInfo = ref(emergencyStore.$state.emergencyInfo || {})
const emergencyInfo = ref(emergencyStore.$state.emergencyInfo)
//
const handleConfirmScan = () => {
@ -220,7 +220,7 @@ onMounted(() => {
//
onActivated(() => {
emergencyInfo.value = emergencyStore.$state.emergencyInfo || {}
emergencyInfo.value = emergencyStore.$state.emergencyInfo
// if (!isLoadedConsumables.value) {
// console.log('')
// }

24
src/pages/Index/Regular/Running.vue

@ -82,19 +82,15 @@
<!-- 急诊按钮 -->
<div
class="emergency-button"
:style="`background:${emergencyStore.emergencyInfo.isEmergency ? '#c7c7c7' : 'auto'}`"
@click="
!emergencyStore.emergencyInfo.isEmergency
? confirmEmergency()
: null
"
:style="`background:${canSetEmergency ? '#ff6b6b' : '#c7c7c7'}`"
@click="canSetEmergency ? confirmEmergency() : null"
>
<span>急诊</span>
</div>
<!-- 试管架区域 -->
<div class="test-tube-rack-area">
<div class="tube-project-tab">
<tube-item :tube="emergencyStore.emergencyInfo" :showNum="false" />
<tube-item :tube="canSetEmergency ? undefined : emergencyStore.emergencyInfo" :showNum="false" />
</div>
<div class="tube-items">
<!-- <SampleDisplay :samples="tubeHolderState.tubes" :selectedSamples="selectedSamples"
@ -170,7 +166,7 @@
</template>
<script setup lang="ts">
import { ref, watch } from 'vue'
import { computed, ref, watch } from 'vue'
import { useRouter } from 'vue-router'
import {
useConsumablesStore,
@ -192,6 +188,13 @@ const settingTubeStore = useSettingTestTubeStore()
const emergencyStore = useEmergencyStore() //
const router = useRouter()
const canSetEmergency = computed(() => {
return (
emergencyStore.emergencyInfo &&
(emergencyStore.emergencyInfo.state === 'EMPTY' ||
emergencyStore.emergencyInfo.state === 'PROCESS_COMPLETE')
)
})
//
const confirmEmergency = () => {
router.push('/index/emergency')
@ -272,7 +275,7 @@ watch(
//
.emergency-button {
background: linear-gradient(135deg, #ff6b6b, #ff4757);
background: #ff6b6b;
border-radius: 20px;
display: flex;
align-items: center;
@ -521,7 +524,6 @@ watch(
}
}
.tube-container {
display: flex;
flex-wrap: nowrap;
@ -560,7 +562,7 @@ watch(
border-radius: 5px;
height: 180px;
.scan-men {
color: #FFF;
color: #fff;
display: inline-block;
background-color: rgb(120, 206, 86);
border-radius: 5px;

6
src/pages/Index/components/Consumables/MoveLiquidArea.vue

@ -330,7 +330,7 @@ watch(
{ immediate: true }, //
)
const emergencyInfo = reactive(emergencyStore.$state.emergencyInfo)
const emergencyInfo = reactive(emergencyStore.emergencyInfo || {})
const router = useRouter()
//
let showEmergencyModal = ref(false)
@ -348,7 +348,7 @@ const addEmergency = () => {
return
}
//
if (emergencyInfo?.pos) {
if (emergencyStore.emergencyInfo?.pos) {
//便
router.push({
path: '/index/emergency',
@ -360,7 +360,7 @@ const addEmergency = () => {
}
//
const showEmergencyInfo = (item: EmergencyPosStateMessage['data']['tube']) => {
const showEmergencyInfo = (item?: EmergencyPosStateMessage['data']['tube']) => {
console.log('回显急诊信息', item)
router.push({
path: '/index/emergency',

6
src/pages/Index/components/TestTube/Tube.vue

@ -24,7 +24,7 @@
: ''
}}</span>
<span class="blood-text">{{
settingTubeStore.bloodTypeKeyMap[tube.bloodType]?.name
tube && tube.bloodType ? settingTubeStore.bloodTypeKeyMap[tube.bloodType]?.name : ''
}}</span>
<span>{{
projIdsOfTube(tube).length === 2
@ -36,7 +36,7 @@
</div>
</div>
<span v-if="showNum || tube.isEmergency" class="user-id">{{ tube.userid || '-' }}</span>
<span v-if="showNum || (tube && tube.isEmergency)" class="user-id">{{ tube && tube.userid || '-' }}</span>
</div>
</template>
@ -59,7 +59,7 @@ const emit = defineEmits(['clickTubeItem'])
const settingTubeStore = useSettingTestTubeStore()
const projIdsOfTube = (tube) => {
return tube.projId || tube.projIds || []
return tube ? (tube.projId || tube.projIds || []) : []
}
const canvas = useTemplateRef('canvas')

6
src/store/modules/emergency.ts

@ -4,14 +4,16 @@ import type { EmergencyPosStateMessage } from '../../websocket/socket'
export const useEmergencyStore = defineStore(
'emergency',
() => {
let emergencyInfo = ref({} as EmergencyPosStateMessage['data']['tube'])
let emergencyInfo = ref<
EmergencyPosStateMessage['data']['tube'] | undefined
>(undefined)
const setInfo = (data: EmergencyPosStateMessage['data']['tube']) => {
emergencyInfo.value = data
}
//卸载耗材
const unloadInfo = () => {
emergencyInfo.value = {} as EmergencyPosStateMessage['data']['tube']
emergencyInfo.value = undefined
}
return {

33
src/types/Index/History.ts

@ -35,36 +35,11 @@ export interface TableItem {
sampleUserid: string
projName: string
sampleBloodType: string
result: string
results: Array<{
status: string
}>;
creatDate: string | number | Date
lotId: string
projId: string
subProjResult1: {
errorInfo: string
status: string
subProjName: string
subProjShortName: string
result1: string
result2: string
result3: string
}
subProjResult2: {
errorInfo: string
status: string
subProjName: string
subProjShortName: string
result1: string
result2: string
result3: string
}
subProjResult3: {
errorInfo: string
status: string
subProjName: string
subProjShortName: string
result1: string
result2: string
result3: string
}
projId: string
// 其他字段...
}

2
src/utils/formDate.ts

@ -20,7 +20,7 @@ export function formatDate(
} else {
let tsNumber = Number(timestamp);
if (isNaN(tsNumber)) {
console.error('Invalid timestamp:', timestamp);
console.log('Invalid timestamp:', timestamp);
return '';
}

13
src/websocket/socket.ts

@ -81,6 +81,15 @@ interface DeviceWorkStateMessage extends BaseMessage {
timestamp: number // 时间戳
}
export type EmergencyTubeState =
| 'EMPTY'
| 'TO_BE_PROCESSED'
| 'PENDING'
| 'RESOURCE_IS_READY'
| 'PROCESSING'
| 'PROCESSED'
| 'PROCESS_COMPLETE'
| 'ERROR'
// 急诊位状态消息
interface EmergencyPosStateMessage extends BaseMessage {
type: 'EmergencyPosState'
@ -97,7 +106,7 @@ interface EmergencyPosStateMessage extends BaseMessage {
userid: string // 用户ID
projInfo: ProjectInfo[] // 项目信息列表
projIds: number[] // 项目ID列表
state: string // 状态
state: EmergencyTubeState // 状态
errors: string[] // 错误信息列表
}
}
@ -205,7 +214,7 @@ export interface SubTank {
incubatedTimeSec: number // 孵育时间(秒)
remainTimeSec: number //剩余孵育时间(显示)
errors: string[] // 错误信息列表
isEmergency: boolean,//是否急诊位
isEmergency: boolean //是否急诊位
// isPlaceholder?: boolean // 是否为占位符
}

Loading…
Cancel
Save