+
-
影像诊断
+
检查结果
@@ -111,7 +111,7 @@
-
@@ -551,9 +665,10 @@ onMounted(async () => {
}
.image-grid {
- display: grid;
- grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
- gap: 20px;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 600px; /* 增加间距从20px到40px */
+ justify-content: center;
}
.image-item {
@@ -563,6 +678,13 @@ onMounted(async () => {
transition: transform 0.3s;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05);
aspect-ratio: 4/3;
+ width: calc(45% - 20px); /* 减小宽度比例,增加间距 */
+ max-width: 480px;
+}
+
+/* 单张图片时的样式 */
+.single-image .image-item {
+ width: 70%;
}
.medical-image {
diff --git a/src/views/Department-entry/Department-entryUI.vue b/src/views/Department-entry/Department-entryUI.vue
index fbcf4d6..39ad13e 100644
--- a/src/views/Department-entry/Department-entryUI.vue
+++ b/src/views/Department-entry/Department-entryUI.vue
@@ -9,7 +9,7 @@
@@ -27,11 +27,11 @@
{{ patient.pname }}
{{ patient.medicalSn }}
- {{ getStatusText(patient.status) }}
+ {{ getStatusText(patient) }}
@@ -241,7 +241,7 @@
@@ -437,7 +437,7 @@ const handleMedicalSnSearch = async () => {
}
}
-// 修改获取患者列表数据的函数
+// 修改获取患者列表数据的函数,确保状态更新
const getPatientList = async () => {
try {
const params = {
@@ -445,9 +445,16 @@ const getPatientList = async () => {
pageSize: pageSize.value
}
const res = await PatientApi.getPatientPage(params)
- originalPatients.value = res.list // 保存原始列表
patients.value = res.list
total.value = res.total
+
+ // 如果当前有选中的患者,更新其状态
+ if (selectedPatient.value) {
+ const updatedPatient = res.list.find(p => p.id === selectedPatient.value.id)
+ if (updatedPatient) {
+ selectedPatient.value = updatedPatient
+ }
+ }
} catch (error) {
console.error('获取患者列表出错:', error)
message.error('获取患者列表出错')
@@ -463,15 +470,28 @@ const getpatientitemData = async (medicalSn) => {
pageSize: 100
}
const itemsRes = await PatientitemsApi.getPatientitemsPage(params)
+
if (itemsRes.list && itemsRes.list.length > 0) {
patientitemData.value = itemsRes.list[0]
// 获取用户信息
- try {
- const userProfile = await getUserProfile()
- user.value = userProfile
- } catch (userError) {
- console.error('获取用户信息失败:', userError)
+ const userProfile = await getUserProfile()
+ user.value = userProfile
+
+ // 检查当前部门的项目状态
+ const currentDeptItems = itemsRes.list.filter(item =>
+ item.sectionID === userProfile.deptId || item.sectionID == userProfile.deptId
+ )
+ // 如果有项目且都是已检查状态,更新患者状态
+ if (currentDeptItems.length > 0 && currentDeptItems.every(item => item.itemStatus === '1')) {
+ // 更新患者列表中的状态
+ const patientIndex = patients.value.findIndex(p => p.medicalSn === medicalSn)
+ if (patientIndex !== -1) {
+ patients.value[patientIndex] = {
+ ...patients.value[patientIndex],
+ examStatus: '1' // 添加检查状态属性
+ }
+ }
}
}
} catch (error) {
@@ -522,11 +542,15 @@ const loadPatientData = async (patient) => {
// 如果不是特殊科室,继续加载常规检查数据
if (!isImageDepartment.value && !isBloodTest.value) {
if (itemsRes.list && itemsRes.list.length > 0) {
- examConclusion.value = itemsRes.list[0].analyse || ''
-
const itemsBySection = {}
// 筛选属于当前用户部门的项目
const filteredItems = itemsRes.list.filter(item => item.sectionID == userProfile.deptId)
+
+ // 从第一个项目获取体检小结
+ if (filteredItems.length > 0) {
+ examConclusion.value = filteredItems[0].analyse || ''
+ }
+
filteredItems.forEach(item => {
const sectionType = '一般检查'
if (!itemsBySection[sectionType]) {
@@ -536,14 +560,16 @@ const loadPatientData = async (patient) => {
const processedItem = {
id: item.id,
name: item.itemName,
- value: item.itemResult,
+ value: item.itemResult || '', // 确保正确映射 itemResult 到 value
unit: item.unit,
reference: `${item.lowValue}-${item.highValue}`,
note: getStatusNote(item),
risk: getRiskLevel(item),
status: getRowStatus(item),
positive: item.positive === '1' ? '阳性' : '阴性',
- itemStatus: item.itemStatus
+ itemStatus: item.itemStatus,
+ examDescription: item.examDescription || '',
+ analyse: item.analyse || ''
}
itemsBySection[sectionType].push(processedItem)
@@ -991,20 +1017,50 @@ const handleSearch = () => {
)
}
-// 添加是否只读的计算属性
-const isReadOnly = computed(() => {
- return selectedPatient.value?.status === 1
+// 添加计算属性检查是否所有项目都已完成
+const isAllItemsChecked = computed(() => {
+ if (!sortedExamItems.value || sortedExamItems.value.length === 0) return false
+ return sortedExamItems.value.every(item => item.itemStatus === '1')
})
-// 检查编辑权限的方法
+// 修改检查编辑权限的方法
const checkEditPermission = () => {
- if (isReadOnly.value) {
- ElMessage.warning('检查结果已保存,不可进行编辑')
+ if (isAllItemsChecked.value) {
+ ElMessage.warning('所有检查项目已完成,不可进行编辑')
return false
}
return true
}
+// 修改结果变化处理函数
+const handleResultChange = (item) => {
+ if (!checkEditPermission()) {
+ // 如果没有编辑权限,恢复原值
+ item.value = item.originalValue || ''
+ return
+ }
+
+ // 如果有输入值,设置为已检状态
+ if (item.value) {
+ item.itemStatus = '1'
+ } else {
+ item.itemStatus = '0'
+ }
+
+ item.originalValue = item.value
+
+ if (item.reference && item.reference !== 'null-null') {
+ const value = parseFloat(item.value)
+ const [low, high] = item.reference.split('-').map(val => val === 'null' ? null : Number(val))
+
+ if (low !== null && high !== null) {
+ item.note = getStatusNote({ itemResult: value, lowValue: low, highValue: high })
+ item.risk = getRiskLevel({ itemResult: value, lowValue: low, highValue: high })
+ item.status = getRowStatus({ itemResult: value, lowValue: low, highValue: high })
+ }
+ }
+}
+
// 修改操作处理函数
const handleOperation = ({ type, item }) => {
if (!checkEditPermission()) return
@@ -1012,9 +1068,11 @@ const handleOperation = ({ type, item }) => {
switch (type) {
case 'positive':
item.positive = '阳性'
+ item.itemStatus = '1'
break
case 'negative':
item.positive = '阴性'
+ item.itemStatus = '1'
break
case 'abandon':
if (item.itemStatus === '2') {
@@ -1040,126 +1098,137 @@ const handleOperation = ({ type, item }) => {
}
}
-// 修改结果变化处理函数
-const handleResultChange = (item) => {
- if (!checkEditPermission()) {
- item.value = item.originalValue || ''
- return
- }
-
- item.itemStatus = '1' // 设置为已检状态
-
- // 如果没有有效的参考值,所有相关字段都设为空
- if (!item.reference || item.reference === 'null-null') {
- item.note = ''
- item.risk = ''
- item.status = ''
- return
- }
-
- const value = parseFloat(item.value)
- const [low, high] = item.reference.split('-').map(val => val === 'null' ? null : Number(val))
-
- if (low === null || high === null) {
- item.note = ''
- item.risk = ''
- item.status = ''
- return
- }
-
- item.note = getStatusNote({ itemResult: value, lowValue: low, highValue: high })
- item.risk = getRiskLevel({ itemResult: value, lowValue: low, highValue: high })
- item.status = getRowStatus({ itemResult: value, lowValue: low, highValue: high })
-}
-
-// 添加状态映射函数
-const getItemStatusText = (status) => {
- const statusMap = {
- '0': '未检查',
- '1': '已检查',
- '2': '已弃检',
- '3': '待查'
- }
- return statusMap[status] || status
-}
-
-// 修改保存结果方法中的相关逻辑
+// 修改保存结果方法
const handleSaveResults = async () => {
+ if (!checkEditPermission()) return
+
try {
const userProfile = await getUserProfile()
user.value = userProfile
-
- // 获取当前时间戳
- const currentTime = new Date().getTime()
-
- // 1. 更新检查项目结果
- const updatedItems = Object.values(examItems.value).flatMap(sectionItems =>
- sectionItems.map(item => ({
- id: item.id,
- status: item.status,
- itemResult: item.value || '',
- positive: item.positive === '阳性' ? '1' : '0',
- analyse: examConclusion.value,
- inspectdoctor: user.value?.nickname || '',
- itemStatus: item.itemStatus,
- inspecttime: currentTime
- }))
- )
- await PatientitemsApi.updatePatientitemsBatch(updatedItems)
-
- // 2. 更新患者状态为已检查
- if (selectedPatient.value) {
- const patientData = {
- ...selectedPatient.value,
- status: 1,
- medicalDateTime: currentTime
- }
- await PatientApi.updatePatient(patientData)
+ const currentTimestamp = Date.now()
+
+ // 构建更新项目数组,将体检小结保存到每个项目中
+ const updatedItems = sortedExamItems.value.map(item => {
+ const status = item.value ? '1' : '0'
- // 3. 刷新患者列表
- await getPatientList()
+
+ return {
+ id: item.id,
+ medicalSn: selectedPatient.value?.medicalSn,
+ itemStatus: status,
+ itemResult: item.value || '',
+ examDescription: item.examDescription || '',
+ analyse: examConclusion.value || '', // 每个项目都保存体检小结
+ inspectdoctor: user.value?.nickname || '',
+ inspecttime: currentTimestamp,
+ positive: item.positive === '阳性' ? '1' : '0',
+ sectionID: user.value?.deptId
+ }
+ })
+
+ if (updatedItems.length === 0) {
+ ElMessage.warning('没有需要保存的检查项目')
+ return
}
-
- message.success('保存成功')
-
- // 4. 清空所有相关数据
- selectedPatient.value = null
- examItems.value = {}
- examTabs.value = []
- currentTab.value = ''
- examConclusion.value = ''
- patients.value = []
- originalPatients.value = []
- medicalSnQuery.value = '' // 清空体检编号搜索框
- searchQuery.value = '' // 清空搜索框
- reportData.value = {
- medicalSn: '',
- cardId: '',
- pName: '',
- gender: '',
- birthday: '',
- nationality: '',
- nation: '',
- race: '',
- phoneNum: '',
- status: 0,
- reportType: '',
- medicalDateTime: '',
- chargeType: '',
- totalPrice: 0,
- headPicUrl: '',
- summaryResult: '',
- auditor: '',
- auditorTime: ''
+
+ const res = await PatientitemsApi.updatePatientitemsBatch(updatedItems)
+
+ ElMessage.success('保存成功')
+
+ // 重新获取最新数据
+ try {
+ const params = {
+ medicalSn: selectedPatient.value?.medicalSn,
+ pageNo: 1,
+ pageSize: 100
+ }
+ const itemsRes = await PatientitemsApi.getPatientitemsPage(params)
+
+ if (itemsRes.list && itemsRes.list.length > 0) {
+ // 获取当前科室的项目
+ const currentDeptItems = itemsRes.list.filter(item =>
+ item.sectionID === user.value?.deptId
+ )
+
+ // 检查是否所有项目都已完成
+ const allChecked = currentDeptItems.every(item => item.itemStatus === '1')
+
+ // 从任意一个项目中获取体检小结
+ if (currentDeptItems.length > 0) {
+ const anyItem = currentDeptItems.find(item => item.analyse)
+ if (anyItem) {
+ examConclusion.value = anyItem.analyse
+ }
+ }
+
+ // 更新本地数据
+ sortedExamItems.value = sortedExamItems.value.map(item => {
+ const updatedItem = itemsRes.list.find(u => u.id === item.id)
+ if (updatedItem) {
+ return {
+ ...item,
+ itemStatus: updatedItem.itemStatus,
+ value: updatedItem.itemResult || '',
+ examDescription: updatedItem.examDescription,
+ analyse: updatedItem.analyse,
+ positive: updatedItem.positive === '1' ? '阳性' : '阴性'
+ }
+ }
+ return item
+ })
+
+ // 更新左侧患者列表状态
+ if (selectedPatient.value) {
+ const patientIndex = patients.value.findIndex(p => p.medicalSn === selectedPatient.value.medicalSn)
+ if (patientIndex !== -1) {
+ const allItemsChecked = currentDeptItems.every(item => item.itemStatus === '1')
+
+ // 更新患者状态
+ patients.value[patientIndex] = {
+ ...patients.value[patientIndex],
+ examStatus: allItemsChecked ? '1' : '0'
+ }
+
+ // 更新原始患者列表
+ if (originalPatients.value) {
+ const originalIndex = originalPatients.value.findIndex(p => p.medicalSn === selectedPatient.value.medicalSn)
+ if (originalIndex !== -1) {
+ originalPatients.value[originalIndex] = {
+ ...originalPatients.value[originalIndex],
+ examStatus: allItemsChecked ? '1' : '0'
+ }
+ }
+ }
+ }
+ }
+ }
+ } catch (error) {
+ console.error('刷新数据失败:', error)
}
-
+
+ // 更新缓存
+ if (selectedPatient.value) {
+ const cacheKey = selectedPatient.value.id
+ patientDataCache.value.delete(cacheKey)
+ }
+
} catch (error) {
console.error('保存失败:', error)
- message.error(`保存失败: ${error.message}`)
+ ElMessage.error(`保存失败: ${error.message || '请检查数据是否完整'}`)
}
}
+// 添加禁用状态的计算属性,用于控制界面元素
+const isDisabled = computed(() => {
+ return isAllItemsChecked.value
+})
+
+// 添加只读状态的计算属性
+const isReadOnly = computed(() => {
+ return isAllItemsChecked.value
+})
+
// 添加分页处理函数
const handleCurrentChange = (val) => {
pageNo.value = val
@@ -1204,24 +1273,42 @@ const isImageExam = computed(() => {
})
})
-// 添加状态文本映射函数
-const getStatusText = (status) => {
- const statusMap = {
- '0': '待检查',
- '1': '已检查',
- '2': '已弃检'
+// 添加检查项目状态的计算属性
+const patientExamStatus = computed(() => {
+ if (!selectedPatient.value?.medicalSn) return '0'
+
+ const currentItems = Object.values(examItems.value)
+ .flat()
+ .filter(item => item.sectionID === user.value?.deptId)
+
+ if (!currentItems.length) return '0'
+
+ const allChecked = currentItems.every(item => item.itemStatus === '1')
+ return allChecked ? '1' : '0'
+})
+
+// 修改获取状态文本的方法
+const getStatusText = (patient) => {
+ if (patient.examStatus === '1') {
+ return '已检查'
}
- return statusMap[status] || '未知'
+
+ if (selectedPatient.value?.id === patient.id) {
+ const currentDeptItems = Object.values(examItems.value)
+ .flat()
+ .filter(item => item.sectionID === user.value?.deptId)
+
+ if (currentDeptItems.length > 0 && currentDeptItems.every(item => item.itemStatus === '1')) {
+ return '已检查'
+ }
+ }
+
+ return '待检查'
}
-// 添加状态标签类型映射函数
-const getStatusTagType = (status) => {
- const typeMap = {
- '0': 'info', // 灰蓝色
- '1': 'success', // 绿色
- '2': 'danger' // 红色
- }
- return typeMap[status] || ''
+// 修改状态标签类型
+const getStatusTagType = (patient) => {
+ return getStatusText(patient) === '已检查' ? 'success' : 'info'
}
// 添加参考值格式化函数
@@ -1243,11 +1330,9 @@ const isImageDepartment = ref(false)
const isBloodTest = computed(() => {
if (!selectedPatient.value) return false
- // 获取当前用户部门下的检查项目
const currentItems = Object.values(examItems.value)
.flat()
.filter(item => {
- // 检查项目名称中包含血常规相关关键词
const itemName = (item.name || '').toLowerCase()
return itemName.includes('血常规') ||
itemName.includes('血细胞') ||
diff --git a/src/views/inspect/physicalEnroll/index.vue b/src/views/inspect/physicalEnroll/index.vue
index 5e1e815..3f1ba2a 100644
--- a/src/views/inspect/physicalEnroll/index.vue
+++ b/src/views/inspect/physicalEnroll/index.vue
@@ -1035,9 +1035,10 @@ const handlePersonInfoSave = async () => {
itemStatus: '0',
createTime: new Date().getTime(),
headimage: avatar,
- groupname: item.groupname,
- groupcode: item.groupcode,
- mealfrontorafter: item.mealfrontorafter
+ groupname: item.groupname || '',
+ groupcode: item.groupcode || '',
+ mealfrontorafter: item.mealfrontorafter || '',
+ moduleName: item.moduleName || '' // 使用项目中的moduleName字段
}))
await PatientitemsApi.createPatientitemsBatch(saveItems)
@@ -1222,7 +1223,7 @@ const getSectionName = async (sectionID) => {
}
}
-// 修改加载患者项目的方法,移除调试日志
+// 修改加载患者项目的方法,确保moduleName正确加载
const loadPatientProjects = async (medicalSn) => {
if (!medicalSn) {
comboInfoTable1.value = []
@@ -1249,18 +1250,20 @@ const loadPatientProjects = async (medicalSn) => {
// 获取科室名称
const sectionName = await getSectionName(item.sectionID)
+ console.log('加载项目,moduleName:', item.moduleName)
+
projectDetails.push({
name: item.itemName,
price: item.price || 0,
discount: item.discounted || 0,
discountPrice: item.discountedPrice || 0,
- moduleName: item.moduleName || '',
+ moduleName: item.moduleName || '', // 确保加载moduleName
section: sectionName,
sectionID: item.sectionID || '',
itemCode: item.itemCode,
- groupname: item.groupname || '', // 添加模块名称
- groupcode: item.groupcode || '', // 添加模块ID
- mealfrontorafter: item.mealfrontorafter || '' // 添加餐前餐后
+ groupname: item.groupname || '',
+ groupcode: item.groupcode || '',
+ mealfrontorafter: item.mealfrontorafter || ''
})
}
@@ -1453,7 +1456,7 @@ const handleCheckInfoSelection = (selection) => {
checkInfoSelectedData.value = selection
}
-// 修改确认选择项目的方法,移除调试日志
+// 修改确认选择项目的方法,确保正确的moduleName被保存
const confirmSelectedProjects = async () => {
try {
let selectedProjects: ProjectDetail[] = []
@@ -1498,7 +1501,7 @@ const confirmSelectedProjects = async () => {
price: item.price || 0,
discount: item.discounted || 0,
discountPrice: item.discountedPrice || 0,
- moduleName: item.moduleName || moduleItem.examModuleName,
+ moduleName: item.moduleName || '', // 优先使用项目的moduleName
itemCode: moduleItem.itemCode,
groupname: item.groupname || '',
groupcode: item.groupcode || '',
@@ -1530,7 +1533,7 @@ const confirmSelectedProjects = async () => {
price: item.price,
discount: item.discounted,
discountPrice: item.discountedPrice,
- moduleName: item.moduleName,
+ moduleName: item.moduleName || '', // 使用项目的moduleName
itemCode: item.itemCode,
groupname: item.groupname || '',
groupcode: item.groupcode || '',
diff --git a/src/views/project-management/base/baseUI.vue b/src/views/project-management/base/baseUI.vue
index 726316d..bab85db 100644
--- a/src/views/project-management/base/baseUI.vue
+++ b/src/views/project-management/base/baseUI.vue
@@ -69,6 +69,8 @@
+
+
@@ -129,6 +131,8 @@ interface QueryParams {
section?: string
currentSelection: string | number
moduleName?: string
+ groupname?: string
+ mealfrontorafter?: string
}
const queryParams = reactive({
@@ -136,7 +140,9 @@ const queryParams = reactive({
projectName: '',
projectCode: '',
pageNo: 1,
- pageSize: 10
+ pageSize: 10,
+ groupname: '',
+ mealfrontorafter: ''
})
// 新增组件
@@ -192,6 +198,15 @@ const getTableData = async () => {
params.section = queryParams.currentSelection
}
+ // 添加模块名称和餐前餐后的查询条件
+ if (queryParams.groupname?.trim()) {
+ params.groupname = queryParams.groupname.trim()
+ }
+
+ if (queryParams.mealfrontorafter?.trim()) {
+ params.mealfrontorafter = queryParams.mealfrontorafter.trim()
+ }
+
const data = await itemsApi.getitemsPage(params)
if (data && data.list) {
tableData.value = data.list
diff --git a/src/views/summary/reprot-print/report-print.vue b/src/views/summary/reprot-print/report-print.vue
new file mode 100644
index 0000000..63ad8b0
--- /dev/null
+++ b/src/views/summary/reprot-print/report-print.vue
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 打印报告
+
+
+
+
+
+
+
+
+
+
+
+
+