diff --git a/.env b/.env
index 27b2ff73..89155001 100644
--- a/.env
+++ b/.env
@@ -8,13 +8,13 @@ VITE_PORT=8080
VITE_OPEN=true
# 租户开关
-VITE_APP_TENANT_ENABLE=true
+VITE_APP_TENANT_ENABLE=false
# 验证码的开关
VITE_APP_CAPTCHA_ENABLE=true
# 文档地址的开关
-VITE_APP_DOCALERT_ENABLE=true
+VITE_APP_DOCALERT_ENABLE=false
# 百度统计
VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
diff --git a/src/api/deviceuser/index.ts b/src/api/deviceuser/index.ts
index be687a49..865d8b41 100644
--- a/src/api/deviceuser/index.ts
+++ b/src/api/deviceuser/index.ts
@@ -46,5 +46,10 @@ export const DeviceuserApi = {
// 导出设备人员关联 Excel
exportDeviceuser: async (params) => {
return await request.download({ url: `/system/deviceuser/export-excel`, params })
- }
+ },
+
+ //根据设备ID查询设备人员关联
+ getDeviceuserByDeviceId: async (deviceid: number) => {
+ return await request.get({ url: `/system/deviceuser/getDeviceuserByDeviceId?deviceid=` + deviceid })
+ },
}
diff --git a/src/api/ecgdata/index.ts b/src/api/ecgdata/index.ts
index 695ba054..119c3af6 100644
--- a/src/api/ecgdata/index.ts
+++ b/src/api/ecgdata/index.ts
@@ -1,65 +1,75 @@
-import request from '@/config/axios'
-
-// 心电数据采集 VO
-export interface EcgdataVO {
- id: number // 主键ID
- deviceid: number // 设备ID
- devicename: string // 设备名称
- userid: number // 人员ID
- collecttime: Date // 采集时间
- devicetype: string // 设备类型
- heartrate: number // 心率(次/分)
- rhythm: string // 心律类型(窦性心律,房颤等)
- printerval: number // PR间期(ms)
- qrsduration: number // QRS时限(ms)
- qtinterval: number // QT间期(ms)
- qtcinterval: number // QTc间期(ms)
- paxis: number // P电轴(度)
- qrsaxis: number // QRS电轴(度)
- taxis: number // T电轴(度)
- rv5: number // RV5电压(mV)
- sv1: number // SV1电压(mV)
- rv5sv1: number // RV5+SV1电压(mV)
- stsegment: string // ST段改变
- twave: string // T波改变
- diagnosis: string // 心电图诊断
- ecgimageurl: string // 心电图图片地址
- ecgdataurl: string // 心电图数据文件地址
- orgid: number // 机构ID
- orgname: string // 机构名称
- datastatus: number // 数据状态(0:异常,1:正常)
- remark: string // 备注
-}
-
-// 心电数据采集 API
-export const EcgdataApi = {
- // 查询心电数据采集分页
- getEcgdataPage: async (params: any) => {
- return await request.get({ url: `/system/ecgdata/page`, params })
- },
-
- // 查询心电数据采集详情
- getEcgdata: async (id: number) => {
- return await request.get({ url: `/system/ecgdata/get?id=` + id })
- },
-
- // 新增心电数据采集
- createEcgdata: async (data: EcgdataVO) => {
- return await request.post({ url: `/system/ecgdata/create`, data })
- },
-
- // 修改心电数据采集
- updateEcgdata: async (data: EcgdataVO) => {
- return await request.put({ url: `/system/ecgdata/update`, data })
- },
-
- // 删除心电数据采集
- deleteEcgdata: async (id: number) => {
- return await request.delete({ url: `/system/ecgdata/delete?id=` + id })
- },
-
- // 导出心电数据采集 Excel
- exportEcgdata: async (params) => {
- return await request.download({ url: `/system/ecgdata/export-excel`, params })
- },
-}
\ No newline at end of file
+import request from '@/config/axios'
+
+// 心电数据采集 VO
+export interface EcgdataVO {
+ id: number // 主键ID
+ deviceid: number // 设备ID
+ devicename: string // 设备名称
+ userid: number // 人员ID
+ collecttime: Date // 采集时间
+ devicetype: string // 设备类型
+ heartrate: number // 心率(次/分)
+ rhythm: string // 心律类型(窦性心律,房颤等)
+ printerval: number // PR间期(ms)
+ qrsduration: number // QRS时限(ms)
+ qtinterval: number // QT间期(ms)
+ qtcinterval: number // QTc间期(ms)
+ paxis: number // P电轴(度)
+ qrsaxis: number // QRS电轴(度)
+ taxis: number // T电轴(度)
+ rv5: number // RV5电压(mV)
+ sv1: number // SV1电压(mV)
+ rv5sv1: number // RV5+SV1电压(mV)
+ stsegment: string // ST段改变
+ twave: string // T波改变
+ diagnosis: string // 心电图诊断
+ ecgimageurl: string // 心电图图片地址
+ ecgdataurl: string // 心电图数据文件地址
+ orgid: number // 机构ID
+ orgname: string // 机构名称
+ datastatus: number // 数据状态(0:异常,1:正常)
+ remark: string // 备注
+}
+
+// 心电数据采集 API
+export const EcgdataApi = {
+ // 查询心电数据采集分页
+ getEcgdataPage: async (params: any) => {
+ return await request.get({ url: `/system/ecgdata/page`, params })
+ },
+
+ // 查询心电数据采集详情
+ getEcgdata: async (id: number) => {
+ return await request.get({ url: `/system/ecgdata/get?id=` + id })
+ },
+
+ // 新增心电数据采集
+ createEcgdata: async (data: EcgdataVO) => {
+ return await request.post({ url: `/system/ecgdata/create`, data })
+ },
+
+ // 修改心电数据采集
+ updateEcgdata: async (data: EcgdataVO) => {
+ return await request.put({ url: `/system/ecgdata/update`, data })
+ },
+
+ // 删除心电数据采集
+ deleteEcgdata: async (id: number) => {
+ return await request.delete({ url: `/system/ecgdata/delete?id=` + id })
+ },
+
+ // 导出心电数据采集 Excel
+ exportEcgdata: async (params) => {
+ return await request.download({ url: `/system/ecgdata/export-excel`, params })
+ },
+
+ // 根据用户ID查询心电采集时间列表
+ getEcgdataByUserId: async (userId: number) => {
+ return await request.get({ url: `/system/ecgdata/getByUserId?userId=` + userId })
+ },
+
+ // 根据时间&ID查询心电数据
+ getEcgdataByTime: async (collecttime: Date, userId: number) => {
+ return await request.get({ url: `/system/ecgdata/getByTime?collecttime=` + collecttime + `&userId=` + userId })
+ }
+}
diff --git a/src/views/devices/Device_Data_Components/ECG_datas.vue b/src/views/devices/Device_Data_Components/ECG_datas.vue
index 92afe992..07473a6c 100644
--- a/src/views/devices/Device_Data_Components/ECG_datas.vue
+++ b/src/views/devices/Device_Data_Components/ECG_datas.vue
@@ -13,14 +13,9 @@
-
-
-
@@ -32,35 +27,101 @@
- {{ person.name }}
+ {{ person.username }} (ID: {{ person.userid }})
+
+
+
+
+
+
+
+ {{ formatTime(time.collecttime) }}
+
+
+ 暂无采集时间
+
+
+
+
+
+
-
-
-
-
-
-
- 暂无数据
+
+
+ 请从左侧选择人员查看数据
-
+
+ 暂无数据
+
+
+
+
+
+
+
+
+ {{ field.label }}
+ {{ selectedPersonData && selectedPersonData[field.key] !== undefined ? selectedPersonData[field.key] : '-' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 心电图诊断:{{ selectedPersonData.diagnosis }}
+
+
+
+
-
- 请从左侧选择人员查看数据
-
@@ -68,6 +129,9 @@
@@ -150,6 +293,41 @@ export default {
flex-shrink: 0;
}
+.time-list {
+ width: 200px;
+ flex-shrink: 0;
+}
+
+.time-list :deep(.el-card__body) {
+ padding: 0;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+}
+
+.time-list-header {
+ padding: 15px;
+ border-bottom: 1px solid #EBEEF5;
+}
+
+.header-title {
+ font-weight: 500;
+ margin-bottom: 10px;
+}
+
+.time-list :deep(.el-scrollbar__wrap) {
+ overflow-x: hidden;
+}
+
+.time-list :deep(.el-menu) {
+ border-right: none;
+}
+
+.time-list :deep(.el-menu-item) {
+ height: 40px;
+ line-height: 40px;
+}
+
.data-display {
flex: 1;
}
@@ -182,4 +360,90 @@ export default {
.el-scrollbar {
height: calc(100vh - 400px) !important;
}
+
+.ecg-fields-container {
+ padding: 20px;
+}
+
+.ecg-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 15px;
+ padding: 10px;
+}
+
+.ecg-grid-item {
+ background-color: #f5f7fa;
+ border-radius: 8px;
+ padding: 12px;
+ transition: all 0.3s ease;
+ min-width: 0; /* 防止内容溢出 */
+}
+
+.ecg-grid-item:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.ecg-field-content {
+ display: flex;
+ flex-direction: column;
+ gap: 6px;
+}
+
+.ecg-label {
+ color: #606266;
+ font-size: 13px;
+ font-weight: 500;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.ecg-value {
+ color: #303133;
+ font-size: 15px;
+ font-weight: 600;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.ecg-tabs {
+ padding: 0 20px;
+}
+
+.ecg-tabs :deep(.el-tabs__header) {
+ margin-bottom: 20px;
+}
+
+.ecg-tabs :deep(.el-tabs__nav-wrap::after) {
+ height: 1px;
+}
+
+.ecg-image-container {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ min-height: 300px;
+}
+
+.ecg-image {
+ max-width: 100%;
+ max-height: 400px;
+ border-radius: 8px;
+ box-shadow: 0 2px 12px 0 rgba(0,0,0,0.08);
+}
+
+.no-ecg-image {
+ color: #909399;
+ font-size: 18px;
+}
+
+.no-time-data {
+ padding: 20px;
+ text-align: center;
+ color: #909399;
+ font-size: 14px;
+}
diff --git a/src/views/devices/devices_cards.vue b/src/views/devices/devices_cards.vue
index f9a08fae..e28e3462 100644
--- a/src/views/devices/devices_cards.vue
+++ b/src/views/devices/devices_cards.vue
@@ -165,8 +165,8 @@ const handleAction = (action) => {
// 打开心电数据组件
emit('action', {
action: 'openECGData',
- deviceId: props.deviceInfo.id,
- deviceName: props.deviceInfo.name
+ deviceId: props.deviceInfo.devicecode,
+ deviceName: props.deviceInfo.devicename
})
} else {
emit('action', {
diff --git a/src/views/person/index.vue b/src/views/person/index.vue
index f3fae6d0..92d0af25 100644
--- a/src/views/person/index.vue
+++ b/src/views/person/index.vue
@@ -177,12 +177,13 @@ import { dateFormatter } from '@/utils/formatTime'
import PersonForm from './PersonFrom.vue'
import PersonMember from './Personmember.vue'
import { PersonApi, PersonVO } from '@/api/person'
+import { getUserProfile } from '@/api/system/user/profile'
defineOptions({ name: 'FamilyMember' })
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化
-
+const userProfile = ref()
const loading = ref(false) // 列表的加载中
const total = ref(0) // 列表的总页数
const list = ref([]) // 列表的数据
@@ -210,6 +211,9 @@ const queryFormRef = ref() // 搜索的表单
const getList = async () => {
loading.value = true
try {
+ //首先获取用户信息
+ const userProfile = await getUserProfile()
+ queryParams.orgid = userProfile.dept.id
const data = await PersonApi.getPersonPage(queryParams)
list.value = data.list
total.value = data.total
diff --git a/src/views/person/memberdrawer.vue b/src/views/person/memberdrawer.vue
index e56a895e..9204ed2f 100644
--- a/src/views/person/memberdrawer.vue
+++ b/src/views/person/memberdrawer.vue
@@ -55,6 +55,7 @@
import { ref, computed, watch, onMounted } from 'vue'
import { PersonApi, type PersonVO } from '@/api/person'
import { Icon } from '@/components/Icon'
+import { getUserProfile } from '@/api/system/user/profile'
interface FamilyMember {
id: number
@@ -85,13 +86,16 @@ const queryParams = reactive({
pageNo: 1,
pageSize: 10,
name: '',
- mobile: ''
+ mobile: '',
+ orgid: undefined,
})
// 获取成员数据
const getList = async () => {
try {
loading.value = true
+ const userProfile = await getUserProfile()
+ queryParams.orgid = userProfile.dept.id
const res = await PersonApi.getPersonNoFamilyid(queryParams)
if (res.list) {
list.value = res.list.map((item: PersonVO) => ({
@@ -102,7 +106,8 @@ const getList = async () => {
address: item.address || '',
createTime: item.createtime,
familyid: item.familyid,
- familyrelation: item.familyrelation
+ familyrelation: item.familyrelation,
+ orgid: item.orgid,
}))
total.value = res.total
}
diff --git a/src/views/personarchive/index.vue b/src/views/personarchive/index.vue
index ffac5f60..204e86cb 100644
--- a/src/views/personarchive/index.vue
+++ b/src/views/personarchive/index.vue
@@ -100,13 +100,14 @@ import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { PersonArchiveApi, PersonArchiveVO } from '@/api/personarchive'
import PersonArchiveForm from './PersonArchiveForm.vue'
+import { getUserProfile } from '@/api/system/user/profile'
/** 人员档案 列表 */
defineOptions({ name: 'PersonArchive' })
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化
-
+const userProfile = ref()
const loading = ref(true) // 列表的加载中
const list = ref([]) // 列表的数据
const total = ref(0) // 列表的总页数
@@ -155,6 +156,9 @@ const exportLoading = ref(false) // 导出的加载中
const getList = async () => {
loading.value = true
try {
+ //首先获取用户信息
+ const userProfile = await getUserProfile()
+ queryParams.orgid = userProfile.dept.id
const data = await PersonArchiveApi.getPersonArchivePage(queryParams)
list.value = data.list
total.value = data.total