Compare commits

...

1741 Commits
v1.5.3 ... main

Author SHA1 Message Date
wangxiaoshuang 99dd28a713 影像浏览问题修复
continuous-integration/drone/push Build is passing Details
2025-06-23 17:55:42 +08:00
wangxiaoshuang 6674989249 自定义结构化录入的临床数据,配置工具存在问题
continuous-integration/drone/push Build is passing Details
2025-06-20 18:04:34 +08:00
wangxiaoshuang 06167d4ff5 项目邮件阅片标准修改
continuous-integration/drone/push Build is passing Details
2025-06-20 15:27:39 +08:00
wangxiaoshuang 2a1dc4d2dd 自定义结构化录入的临床数据,配置工具存在问题
continuous-integration/drone/push Build is running Details
2025-06-20 13:17:21 +08:00
wangxiaoshuang 3d6cd67493 字典配置修改为可查看
continuous-integration/drone/push Build is passing Details
2025-06-20 11:26:20 +08:00
wangxiaoshuang c448f4cda8 上传影像预览窗宽窗位问题
continuous-integration/drone/push Build is passing Details
2025-06-20 11:05:27 +08:00
wangxiaoshuang 155158f954 项目配置检查名称问题解决
continuous-integration/drone/push Build is passing Details
2025-06-20 09:44:08 +08:00
wangxiaoshuang 551620c3c3 1
continuous-integration/drone/push Build is passing Details
2025-06-19 17:44:31 +08:00
wangxiaoshuang 4540f39051 切换靶段时清空备注 2025-06-19 17:42:25 +08:00
wangxiaoshuang 848bf0c8b2 自定义报告单选显示问题修改
continuous-integration/drone/push Build is passing Details
2025-06-19 17:24:35 +08:00
wangxiaoshuang aa1f4dae9b IVUS和OCT表单修改,新增靶段
continuous-integration/drone/push Build is passing Details
2025-06-19 16:53:11 +08:00
wangxiaoshuang a41359111f 字典子项增加排序
continuous-integration/drone/push Build is passing Details
2025-06-19 13:39:12 +08:00
wangxiaoshuang 50ae94bf08 1
continuous-integration/drone/push Build is passing Details
2025-06-19 13:18:07 +08:00
wangxiaoshuang 19785bd266 邮件模板编辑阅片标准改为多选
continuous-integration/drone/push Build is passing Details
2025-06-19 13:13:12 +08:00
wangxiaoshuang cc5a4ed2df 邮件模板编辑样式修改
continuous-integration/drone/push Build is passing Details
2025-06-19 11:42:53 +08:00
wangxiaoshuang 5efcbae09a 邮件模板阅片标准字段更改 2025-06-19 11:40:46 +08:00
wangxiaoshuang 6f5d48cdcd 如果上传影像都是问题影像,此时会显示数量0/0
continuous-integration/drone/push Build is passing Details
2025-06-19 11:28:14 +08:00
wangxiaoshuang fead8b8c8f 导出文件格式问题
continuous-integration/drone/push Build is passing Details
2025-06-18 14:28:08 +08:00
wangxiaoshuang 6980cd275e Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
2025-06-18 13:48:05 +08:00
wangxiaoshuang a14aefca2c 上传影像文件统计问题
continuous-integration/drone/push Build encountered an error Details
2025-06-18 13:33:39 +08:00
wangxiaoshuang 334882cc68 阅片下载压缩包名称修改 2025-06-18 13:30:36 +08:00
wangxiaoshuang de250ecbf5 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
# Conflicts:
#	src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue
2025-06-18 09:56:39 +08:00
wangxiaoshuang d8315fbfff 阅片上传下载按钮添加
continuous-integration/drone/push Build encountered an error Details
2025-06-18 09:55:16 +08:00
wangxiaoshuang 1022fa2888 阅片顺序添加admin角色权限
continuous-integration/drone/push Build encountered an error Details
2025-06-17 16:49:15 +08:00
wangxiaoshuang a14451b82b 影像汇总导出表格
continuous-integration/drone/push Build is passing Details
2025-06-17 16:43:55 +08:00
wangxiaoshuang 24ff1772dd Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
2025-06-16 17:24:31 +08:00
wangxiaoshuang 48633a1ed4 阅片顺序手动修改添加限制条件
continuous-integration/drone/push Build encountered an error Details
2025-06-16 17:24:14 +08:00
wangxiaoshuang 0634df6e33 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
# Conflicts:
#	src/views/trials/trials-panel/trial-summary/audit-record/index.vue
2025-06-16 16:06:54 +08:00
wangxiaoshuang 108d01f81c 阅片顺序默认排序、阅片中禁用
continuous-integration/drone/push Build encountered an error Details
2025-06-16 16:05:49 +08:00
caiyiling ae808679a0 1
continuous-integration/drone/push Build is passing Details
2025-06-13 18:02:55 +08:00
wangxiaoshuang 12e4128b7b 提交裁判阅片结果详情oldValue改为--
continuous-integration/drone/push Build encountered an error Details
2025-06-13 16:49:50 +08:00
caiyiling fbb23065e5 1
continuous-integration/drone/push Build is passing Details
2025-06-13 16:33:59 +08:00
caiyiling 0d85f138a5 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-06-13 16:07:17 +08:00
caiyiling f60d845725 自定义阅片更改 2025-06-13 16:06:54 +08:00
wangxiaoshuang f848e9a9dd Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
# Conflicts:
#	src/api/trials/reading.js
#	src/views/trials/trials-panel/trial-summary/audit-record/index.vue
2025-06-13 14:34:59 +08:00
wangxiaoshuang b512112d96 肿瘤学阅片查看屏蔽跳过按钮
continuous-integration/drone/push Build encountered an error Details
2025-06-13 14:33:55 +08:00
wangxiaoshuang a7251ce65c 阅片顺序
continuous-integration/drone/push Build encountered an error Details
2025-06-13 14:17:58 +08:00
wangxiaoshuang 19896b85e0 1
continuous-integration/drone/push Build is passing Details
2025-06-13 11:43:07 +08:00
wangxiaoshuang f94013103e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-06-13 11:17:38 +08:00
wangxiaoshuang ccdfe9d83e 阅片排序 2025-06-13 11:17:28 +08:00
caiyiling 657010202c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-06-13 10:44:35 +08:00
caiyiling 9c2c6191d2 播放工具更改 2025-06-13 10:44:12 +08:00
wangxiaoshuang 7e2ff6de1b 稽查图片不存在展示问题
continuous-integration/drone/push Build encountered an error Details
2025-06-12 16:23:44 +08:00
wangxiaoshuang c865608313 阅片顺序页面
continuous-integration/drone/push Build is passing Details
2025-06-12 16:19:08 +08:00
wangxiaoshuang 818a8add3d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2025-06-12 16:18:49 +08:00
wangxiaoshuang 53343e37d6 稽查图片不存在展示问题 2025-06-12 16:18:45 +08:00
caiyiling a3e17bbefe Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is failing Details
2025-06-12 15:44:23 +08:00
caiyiling 19bb1eccd8 自定义阅片表单更改 2025-06-12 15:43:59 +08:00
wangxiaoshuang e60260f68d 培训记录查看页面中角色筛选项缺少ZYBS、ZYSS角色
continuous-integration/drone/push Build is pending Details
2025-06-12 11:02:37 +08:00
wangxiaoshuang 2b89163419 项目文档历史记录文件名称修改方式修改
continuous-integration/drone/push Build is passing Details
2025-06-11 16:53:22 +08:00
wangxiaoshuang 3489d34628 影像汇总导出影像、关键图
continuous-integration/drone/push Build is passing Details
2025-06-11 16:34:46 +08:00
wangxiaoshuang 613d434af9 影像汇总
continuous-integration/drone/push Build is passing Details
2025-06-10 18:02:37 +08:00
wangxiaoshuang 123f178673 稽查图片显示问题
continuous-integration/drone/push Build is passing Details
2025-06-10 15:26:34 +08:00
wangxiaoshuang e8e066ab80 稽查操作名查询字段变更
continuous-integration/drone/push Build is passing Details
2025-06-10 09:41:55 +08:00
wangxiaoshuang 4aa5acc401 1
continuous-integration/drone/push Build is passing Details
2025-06-09 16:56:29 +08:00
wangxiaoshuang fa4c00230f 项目文档历史记录修改
continuous-integration/drone/push Build is passing Details
2025-06-09 15:58:52 +08:00
wangxiaoshuang 6ea46c076b 检查部位、检查技术、检查名称已使用禁止取消、删除
continuous-integration/drone/push Build is passing Details
2025-06-09 11:18:09 +08:00
caiyiling dbffc2787d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-06-06 17:25:59 +08:00
caiyiling f98ea18205 自定义标准阅片交互更改 2025-06-06 17:25:23 +08:00
wangxiaoshuang 00e53c4742 项目培训图片预览问题
continuous-integration/drone/push Build is passing Details
2025-06-06 16:58:38 +08:00
wangxiaoshuang 5de61dd125 项目培训发布状态默认值
continuous-integration/drone/push Build is passing Details
2025-06-06 16:28:07 +08:00
wangxiaoshuang ae8767c70f 配置中检查部位已在项目中使用禁止取消勾选和修改
continuous-integration/drone/push Build is passing Details
2025-06-06 14:34:42 +08:00
wangxiaoshuang 623a7b9858 1
continuous-integration/drone/push Build is passing Details
2025-06-06 14:26:45 +08:00
wangxiaoshuang ce2a0d9936 邮件管理批量编辑 2025-06-06 14:26:37 +08:00
wangxiaoshuang 18b0ec2042 pm重阅跟踪、spm重阅审批弹框列表高度修改
continuous-integration/drone/push Build is passing Details
2025-06-06 13:47:33 +08:00
caiyiling 8d5dfd0258 自定义阅片配置更改
continuous-integration/drone/push Build is passing Details
2025-06-06 11:15:31 +08:00
caiyiling 45f83322ec 1
continuous-integration/drone/push Build is passing Details
2025-06-05 18:32:22 +08:00
caiyiling 3d7ccafa76 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-06-05 18:03:50 +08:00
caiyiling f148c76a7f 自定义阅片更改 2025-06-05 18:03:32 +08:00
wangxiaoshuang 1ffd9e3863 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is failing Details
2025-06-05 16:59:56 +08:00
wangxiaoshuang 3bcf097c52 邮件管理编辑内容方式修改 2025-06-05 16:59:44 +08:00
caiyiling 1e4fd0083a 1
continuous-integration/drone/push Build is passing Details
2025-06-05 16:26:02 +08:00
caiyiling d504039d82 自定义标准配置更改
continuous-integration/drone/push Build is passing Details
2025-06-05 16:22:42 +08:00
caiyiling 0c4b3e5aed 表格问题配置更改
continuous-integration/drone/push Build is passing Details
2025-06-05 16:10:23 +08:00
caiyiling 262541ac08 1
continuous-integration/drone/push Build is passing Details
2025-06-05 16:03:06 +08:00
caiyiling dce3719c58 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2025-06-05 16:00:49 +08:00
caiyiling d05a4437d4 自定义标准配置更改及自定义阅片更改 2025-06-05 16:00:12 +08:00
wangxiaoshuang 10f2953a94 如果不能下载影像,则检查也不需要能够选择
continuous-integration/drone/push Build is passing Details
2025-06-05 13:12:49 +08:00
wangxiaoshuang 7a6cded333 培训材料视频禁止下载
continuous-integration/drone/push Build is passing Details
2025-06-05 11:38:08 +08:00
wangxiaoshuang c1f10036b0 项目文档增加附件
continuous-integration/drone/push Build is passing Details
2025-06-04 17:15:45 +08:00
caiyiling 8e01f3af87 Merge branch 'uat' into main
continuous-integration/drone/push Build is passing Details
2025-06-04 16:50:53 +08:00
caiyiling a66e15eb39 MRI-PDFF测量逻辑更改
continuous-integration/drone/push Build encountered an error Details
2025-06-04 16:25:48 +08:00
wangxiaoshuang 386901316d 1
continuous-integration/drone/push Build is passing Details
2025-06-04 15:58:30 +08:00
caiyiling 122f333c77 Merge branch 'uat' into main
continuous-integration/drone/push Build is passing Details
2025-06-04 13:42:00 +08:00
caiyiling 164437ea70 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-06-04 13:37:46 +08:00
caiyiling 86a8e2faeb 测量工具配置文件更改 2025-06-04 13:37:12 +08:00
caiyiling 895e3a6bed MRI-PDFF更改
continuous-integration/drone/push Build encountered an error Details
2025-06-04 13:35:42 +08:00
wangxiaoshuang b5b67cc5e3 稽查搜索框内容接口获取
continuous-integration/drone/push Build is passing Details
2025-06-04 13:34:42 +08:00
caiyiling 9dddc0c012 MRI-PDFF测量逻辑更改
continuous-integration/drone/push Build encountered an error Details
2025-06-04 10:53:45 +08:00
caiyiling a965f08a1e MRI-PDFF标准更改
continuous-integration/drone/push Build encountered an error Details
2025-06-04 09:24:41 +08:00
wangxiaoshuang d667bb4e79 审批页面优化
continuous-integration/drone/push Build is passing Details
2025-06-03 18:01:04 +08:00
caiyiling c7e0fab789 非Dicom工具更改
continuous-integration/drone/push Build is passing Details
2025-06-03 16:14:28 +08:00
caiyiling 35b16876c9 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-06-03 14:27:27 +08:00
caiyiling 549b028809 非dicom更改 2025-06-03 14:27:09 +08:00
wangxiaoshuang 330b1cf644 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-06-03 13:54:34 +08:00
wangxiaoshuang b51a8e94de 稽查轨迹的记录的操作可以在在项目配置 2025-06-03 13:54:19 +08:00
caiyiling b85853aa5e 阅片结果导出配置更改
continuous-integration/drone/push Build is passing Details
2025-06-03 11:32:48 +08:00
wangxiaoshuang 5386dba134 稽查新增字段是否默认
continuous-integration/drone/push Build is passing Details
2025-05-30 09:27:30 +08:00
caiyiling 3f63c126ff 1
continuous-integration/drone/push Build is passing Details
2025-05-29 17:21:25 +08:00
caiyiling f1b816fd85 自定义阅片更改
continuous-integration/drone/push Build is passing Details
2025-05-29 17:04:00 +08:00
caiyiling 43a221de00 自定义阅片更改
continuous-integration/drone/push Build is passing Details
2025-05-29 14:49:53 +08:00
caiyiling 642c708c74 Merge remote-tracking branch 'origin/uat' into main
continuous-integration/drone/push Build is passing Details
2025-05-29 09:58:39 +08:00
caiyiling aa8831ce54 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2025-05-29 09:57:35 +08:00
caiyiling d73970117d 自定义标准更改 2025-05-29 09:57:02 +08:00
wangxiaoshuang 9d462f69f6 人员管理中,当人员退出时,显示加入项目的时间
continuous-integration/drone/push Build is passing Details
2025-05-29 09:38:11 +08:00
caiyiling 9962b1a829 反色bug修复
continuous-integration/drone/push Build encountered an error Details
2025-05-28 18:46:53 +08:00
caiyiling 049128b90e 添加阅片完成支持添加临时标注(历史标注不允许更改)功能及阅片页面双击放大缺陷修复
continuous-integration/drone/push Build encountered an error Details
2025-05-28 15:44:38 +08:00
caiyiling d77c79acbd 自定义标准问题配置扩充影像标记属性
continuous-integration/drone/push Build is passing Details
2025-05-27 11:10:56 +08:00
caiyiling 1e300b4529 CDISC导出配置支持表格问题更改
continuous-integration/drone/push Build is passing Details
2025-05-27 09:06:04 +08:00
wangxiaoshuang 45e6a20988 Merge branch 'uat'
continuous-integration/drone/push Build encountered an error Details
# Conflicts:
#	src/utils/metaDataProvider.js
2025-05-26 12:30:44 +08:00
wangxiaoshuang 5141eb5cbd 发布配置修改
continuous-integration/drone/push Build is passing Details
2025-05-23 18:12:49 +08:00
wangxiaoshuang 073b06a76f 1
continuous-integration/drone/push Build is passing Details
2025-05-23 17:10:45 +08:00
wangxiaoshuang 20723e8d2c 1
continuous-integration/drone/push Build is passing Details
2025-05-23 16:25:30 +08:00
wangxiaoshuang fba00157a1 crc一致性核查回复弹窗添加取消按钮
continuous-integration/drone/push Build is passing Details
2025-05-23 16:06:12 +08:00
wangxiaoshuang f0e6708533 1
continuous-integration/drone/push Build is passing Details
2025-05-23 15:24:49 +08:00
wangxiaoshuang e770dc1078 1 2025-05-23 15:24:07 +08:00
wangxiaoshuang e15934d7ba iqc质控页面数据已退回禁用所有按钮
continuous-integration/drone/push Build is passing Details
2025-05-23 13:49:36 +08:00
wangxiaoshuang 4baf039d71 iqc下载非dicom文件夹名称问题
continuous-integration/drone/push Build is passing Details
2025-05-23 13:38:59 +08:00
wangxiaoshuang 5c4bc96a26 pm重传审批样式修改
continuous-integration/drone/push Build is passing Details
2025-05-23 13:27:51 +08:00
wangxiaoshuang 30f9e807b7 crc一致性核查逻辑变更
continuous-integration/drone/push Build is passing Details
2025-05-23 11:07:17 +08:00
wangxiaoshuang 269f9f9477 pm重传审批修改
continuous-integration/drone/push Build is passing Details
2025-05-23 10:11:52 +08:00
wangxiaoshuang 810c786512 1
continuous-integration/drone/push Build is passing Details
2025-05-22 18:04:29 +08:00
wangxiaoshuang e27705eb22 IRC国际化替换
continuous-integration/drone/push Build is passing Details
2025-05-22 17:49:43 +08:00
wangxiaoshuang 83bf082c43 crc一致性核查回复信息有误
continuous-integration/drone/push Build is passing Details
2025-05-22 16:52:50 +08:00
wangxiaoshuang 37f12b30cc 阅片跟踪影像退回添加退回原因
continuous-integration/drone/push Build is passing Details
2025-05-22 15:30:14 +08:00
wangxiaoshuang f045f68115 一致性核查回复修改
continuous-integration/drone/push Build is passing Details
2025-05-22 14:06:38 +08:00
wangxiaoshuang 64e67ad106 一致性核查回复修改
continuous-integration/drone/push Build is passing Details
2025-05-22 13:54:27 +08:00
wangxiaoshuang f2ee666083 重阅审批的弹框,国际化取值不正确修改
continuous-integration/drone/push Build is passing Details
2025-05-22 11:04:30 +08:00
caiyiling 8ece8915ff 高亮颜色更改
continuous-integration/drone/push Build is passing Details
2025-05-21 16:01:04 +08:00
caiyiling 8270841ca1 典型肝内病灶鼠标悬浮显示
continuous-integration/drone/push Build is passing Details
2025-05-21 15:21:33 +08:00
caiyiling e99c4527b9 阅片页面radio样式更改及病灶信息高亮更改
continuous-integration/drone/push Build is passing Details
2025-05-21 15:10:49 +08:00
caiyiling e295bff859 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-05-21 14:06:54 +08:00
caiyiling 7a53a75038 影像质量不正常时维护病灶默认状态 2025-05-21 14:06:06 +08:00
wangxiaoshuang d96822818c 1
continuous-integration/drone/push Build is passing Details
2025-05-21 14:02:23 +08:00
caiyiling 9e2255e324 阅片标准更改
continuous-integration/drone/push Build is passing Details
2025-05-21 10:37:12 +08:00
caiyiling dbdd18dcf6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-05-21 09:49:22 +08:00
caiyiling 4ae2504278 阅片标准更改 2025-05-21 09:48:54 +08:00
wangxiaoshuang 6a0a5f4724 1
continuous-integration/drone/push Build is passing Details
2025-05-20 16:14:40 +08:00
wangxiaoshuang ee2e33405c 申请原因必填添加星号
continuous-integration/drone/push Build is passing Details
2025-05-20 11:07:41 +08:00
wangxiaoshuang 286865ba8f 影像质疑列表操作栏样式调整
continuous-integration/drone/push Build is passing Details
2025-05-20 09:43:02 +08:00
wangxiaoshuang 75a0f3a91a 影像退回添加申请原因、备注
continuous-integration/drone/push Build is passing Details
2025-05-19 17:53:54 +08:00
wangxiaoshuang 4fbcd8f8f5 项目培训新增默认字段IsPublish修改
continuous-integration/drone/push Build is passing Details
2025-05-19 16:05:36 +08:00
wangxiaoshuang 3c2edbffc5 1
continuous-integration/drone/push Build is passing Details
2025-05-19 15:39:04 +08:00
caiyiling 38fb56e09e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-05-19 15:19:18 +08:00
caiyiling 105537c49e 非淋巴结靶病灶保存验证更改 2025-05-19 15:18:48 +08:00
wangxiaoshuang 355f6bcf86 培训文档管理预览附件
continuous-integration/drone/push Build is passing Details
2025-05-19 14:48:47 +08:00
wangxiaoshuang d6e9f9ddc2 培训文档管理预览附件
continuous-integration/drone/push Build is passing Details
2025-05-19 14:35:17 +08:00
wangxiaoshuang 16e005e664 test环境新增onlyoffice地址配置
continuous-integration/drone/push Build is passing Details
2025-05-19 14:27:00 +08:00
wangxiaoshuang b92b55a45a 培训课程管理问题
continuous-integration/drone/push Build is passing Details
2025-05-19 14:18:59 +08:00
wangxiaoshuang 0ed070ecd7 【临床数据】新增临床数据时,选择模板同时存在中文模板和英文模板,根据语言环境只显示一个 2025-05-19 14:18:45 +08:00
caiyiling 49940ab034 lugano更改
continuous-integration/drone/push Build is passing Details
2025-05-19 14:15:41 +08:00
caiyiling aca5b0c721 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-05-19 11:28:14 +08:00
caiyiling 8ea7540581 阅片报告页更改 2025-05-19 11:27:50 +08:00
wangxiaoshuang ec6a72e143 影像质控问题配置未勾选问题提交会报错
continuous-integration/drone/push Build is passing Details
2025-05-15 16:44:16 +08:00
wangxiaoshuang f512c1456a 阅片结果查看跳转修改
continuous-integration/drone/push Build is passing Details
2025-05-15 15:39:23 +08:00
wangxiaoshuang 4aa74b5420 阅片结果查看跳转修改
continuous-integration/drone/push Build is passing Details
2025-05-15 15:32:24 +08:00
wangxiaoshuang 50c37824aa ir已阅查看跳转修改
continuous-integration/drone/push Build is passing Details
2025-05-15 15:21:47 +08:00
wangxiaoshuang 358864c6c6 onlyoffice引入方式修改
continuous-integration/drone/push Build is passing Details
2025-05-15 11:08:33 +08:00
wangxiaoshuang e2db9c2d51 通用培训文档修改 2025-05-15 11:08:06 +08:00
wangxiaoshuang 78fbae1c1f 通用培训记录的相关文件添加/编辑弹框需要增加标题
continuous-integration/drone/push Build is passing Details
2025-05-15 09:46:25 +08:00
wangxiaoshuang 26c58f14fa 稽查轨迹关联操作页面的标题需要区分
continuous-integration/drone/push Build is passing Details
2025-05-14 16:14:05 +08:00
caiyiling f8774224b3 视角信息更改
continuous-integration/drone/push Build is passing Details
2025-05-14 16:05:43 +08:00
caiyiling bc41f4b4c1 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-05-14 15:48:29 +08:00
caiyiling 0280dfb959 lugano更改 2025-05-14 15:48:08 +08:00
wangxiaoshuang 49aa98af9f suv融合pt图像调整
continuous-integration/drone/push Build is passing Details
2025-05-14 15:06:52 +08:00
wangxiaoshuang 9ce6ff25b9 1
continuous-integration/drone/push Build is passing Details
2025-05-14 14:23:04 +08:00
wangxiaoshuang fca8c1c9bf suv问题修复
continuous-integration/drone/push Build is passing Details
2025-05-14 14:12:31 +08:00
wangxiaoshuang d0ebc3e791 融合影像数存在较大差距校验
continuous-integration/drone/push Build is passing Details
2025-05-14 13:39:45 +08:00
caiyiling ea4f23fb16 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-05-14 13:18:17 +08:00
caiyiling 01d01b1126 视口信息更改 2025-05-14 13:17:56 +08:00
wangxiaoshuang 040d9309b9 影像质控问题配置未勾选问题提交会报错
continuous-integration/drone/push Build is passing Details
2025-05-14 13:05:00 +08:00
caiyiling 1d6656a5b8 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-05-14 11:25:22 +08:00
caiyiling 76e328dcca 阅片页面视角信息更改 2025-05-14 11:24:49 +08:00
wangxiaoshuang 9852d99a4a crc上传文件大小统计修改
continuous-integration/drone/push Build is passing Details
2025-05-13 15:40:30 +08:00
wangxiaoshuang 39f7ba7181 标记缓存修改
continuous-integration/drone/push Build is passing Details
2025-05-13 15:24:32 +08:00
wangxiaoshuang fb68892cd4 基线二维上的病灶被渲染到了随访的融合上
continuous-integration/drone/push Build is passing Details
2025-05-12 17:22:05 +08:00
caiyiling 1e6ec0df27 1
continuous-integration/drone/push Build is passing Details
2025-05-12 17:02:08 +08:00
caiyiling 4ff6416edb 矩形工具更改
continuous-integration/drone/push Build is passing Details
2025-05-12 16:45:48 +08:00
wangxiaoshuang b2645f6423 从随访切到基线再切到随访,测量工具会被禁用,当前访视无法标记
continuous-integration/drone/push Build is passing Details
2025-05-12 15:38:21 +08:00
wangxiaoshuang 122c76d9b2 suv部分问题解决
continuous-integration/drone/push Build is passing Details
2025-05-12 14:58:07 +08:00
wangxiaoshuang 2d155612e5 1
continuous-integration/drone/push Build is passing Details
2025-05-12 13:31:41 +08:00
wangxiaoshuang 329d6b1ff6 【NM自定义】三维MIP视口影像显示异常
continuous-integration/drone/push Build is passing Details
2025-05-12 13:22:36 +08:00
wangxiaoshuang 7006cf849e suv融合部分问题修复
continuous-integration/drone/push Build is passing Details
2025-05-12 13:13:36 +08:00
wangxiaoshuang 71f3519769 suv融合部分问题修复
continuous-integration/drone/push Build is passing Details
2025-05-09 17:54:14 +08:00
wangxiaoshuang bbf2dd16e6 【NM自定义】pet视口放大缩小,标记显示的位置产生了偏移
continuous-integration/drone/push Build is passing Details
2025-05-09 15:58:27 +08:00
wangxiaoshuang 520d499a0b 1
continuous-integration/drone/push Build is passing Details
2025-05-09 14:26:23 +08:00
wangxiaoshuang 00cfb92087 suv融合
continuous-integration/drone/push Build is passing Details
2025-05-09 14:20:24 +08:00
wangxiaoshuang 8eb0b96c8e 重传审批操作添加权限判断
continuous-integration/drone/push Build is passing Details
2025-05-09 10:05:22 +08:00
wangxiaoshuang 24b9120a0a 部分问题解决
continuous-integration/drone/push Build is passing Details
2025-05-08 14:47:26 +08:00
wangxiaoshuang 02fcc4a2c1 suv融合
continuous-integration/drone/push Build is passing Details
2025-05-08 10:36:57 +08:00
wangxiaoshuang f53412acbf 复制、粘贴快捷方式不禁用默认事件
continuous-integration/drone/push Build is passing Details
2025-05-07 13:39:30 +08:00
caiyiling 3948596014 阅片页面更改
continuous-integration/drone/push Build is passing Details
2025-05-06 09:13:59 +08:00
wangxiaoshuang e899c0814e 部分问题修复
continuous-integration/drone/push Build is passing Details
2025-04-30 14:51:13 +08:00
wangxiaoshuang d12b4adb68 部分问题修复
continuous-integration/drone/push Build is passing Details
2025-04-30 13:43:23 +08:00
wangxiaoshuang 3551a521c8 suv融合
continuous-integration/drone/push Build is passing Details
2025-04-29 17:51:54 +08:00
caiyiling e80d439377 阅片更改
continuous-integration/drone/push Build is passing Details
2025-04-28 18:32:16 +08:00
caiyiling f499557c01 1
continuous-integration/drone/push Build is passing Details
2025-04-28 17:37:34 +08:00
caiyiling ecaca550ab 自定义阅片工具更改
continuous-integration/drone/push Build is passing Details
2025-04-28 17:32:40 +08:00
caiyiling b7d7b93c4a 获取病灶截图更改
continuous-integration/drone/push Build is passing Details
2025-04-28 17:07:15 +08:00
caiyiling 7bf92c60ea 阅片完成后禁用“更多”操作
continuous-integration/drone/push Build is passing Details
2025-04-28 16:38:49 +08:00
caiyiling 36a08d1055 自定义阅片报告页更改
continuous-integration/drone/push Build is passing Details
2025-04-28 16:31:45 +08:00
caiyiling 5ebf9032a5 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-04-28 16:12:02 +08:00
caiyiling 1896c58b50 自定义阅片bug修复 2025-04-28 16:11:08 +08:00
wangxiaoshuang 9168ef3ad7 1
continuous-integration/drone/push Build is passing Details
2025-04-28 15:55:27 +08:00
wangxiaoshuang 4ad299e243 suv融合
continuous-integration/drone/push Build is passing Details
2025-04-28 15:47:07 +08:00
caiyiling 5d337b0b26 自定义阅片bug修复
continuous-integration/drone/push Build is passing Details
2025-04-28 14:22:35 +08:00
caiyiling ca579f8731 自定义阅片更改
continuous-integration/drone/push Build is passing Details
2025-04-28 10:19:37 +08:00
caiyiling 92d41dff28 1
continuous-integration/drone/push Build is passing Details
2025-04-27 18:00:53 +08:00
wangxiaoshuang 8d6ae3a49f suv融合
continuous-integration/drone/push Build is passing Details
2025-04-27 17:04:54 +08:00
caiyiling 18f23d2bba 阅片交互更改
continuous-integration/drone/push Build is passing Details
2025-04-25 15:27:00 +08:00
caiyiling 0a428bf954 多帧图像保存病灶更改及关键帧渲染更改
continuous-integration/drone/push Build is passing Details
2025-04-25 15:02:13 +08:00
caiyiling a6b5d0b196 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-04-25 10:53:09 +08:00
caiyiling 8bf6d5f515 自定义标准工具添加 2025-04-25 10:52:37 +08:00
wangxiaoshuang 74f3852ecc Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-04-25 09:39:03 +08:00
wangxiaoshuang 9408ce12e2 稽查文档删除添加二次确定 2025-04-25 09:38:08 +08:00
wangxiaoshuang 06a2361ea0 【通用培训管理】新员工培训时限默认值设为14天 2025-04-25 09:37:45 +08:00
caiyiling e3313edefd mRecist标准bug修复
continuous-integration/drone/push Build is passing Details
2025-04-24 16:47:08 +08:00
caiyiling 2676ff4295 阅片单元配置更改
continuous-integration/drone/push Build is passing Details
2025-04-24 10:34:24 +08:00
caiyiling 41b3a98594 recist1.1标准bug修复
continuous-integration/drone/push Build is passing Details
2025-04-23 16:59:54 +08:00
caiyiling c2aba6c3fe 自定义阅片更改
continuous-integration/drone/push Build is passing Details
2025-04-23 15:14:35 +08:00
caiyiling 81a5d5af17 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-04-23 14:10:26 +08:00
caiyiling 23ac15f978 布局更改 2025-04-23 14:10:08 +08:00
wangxiaoshuang 1ec4c25472 稽查文档通用培训记录导出
continuous-integration/drone/push Build is running Details
2025-04-23 14:10:06 +08:00
wangxiaoshuang ac8710b26b 稽查文档右键下载问题
continuous-integration/drone/push Build is passing Details
2025-04-23 11:44:05 +08:00
caiyiling 1130b55677 视口滚动图像翻页更改
continuous-integration/drone/push Build is passing Details
2025-04-23 09:21:32 +08:00
caiyiling fb57dfe90c 新版本阅片添加iRecist标准
continuous-integration/drone/push Build is failing Details
2025-04-22 17:44:50 +08:00
caiyiling 2784958ccb 多帧对齐更改
continuous-integration/drone/push Build is passing Details
2025-04-22 15:00:35 +08:00
caiyiling d6a3bcba30 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-04-22 13:43:19 +08:00
caiyiling 4ff9a7c482 多帧渲染更改 2025-04-22 13:42:58 +08:00
wangxiaoshuang 33b3818a9e 测试
continuous-integration/drone/push Build is passing Details
2025-04-22 10:44:48 +08:00
wangxiaoshuang 38c31af137 已发布、已下线的培训文档默认不可多选
continuous-integration/drone/push Build is passing Details
2025-04-21 11:28:41 +08:00
wangxiaoshuang fb671defb5 1
continuous-integration/drone/push Build is passing Details
2025-04-21 11:09:55 +08:00
wangxiaoshuang a25aa2482f 通用培训材料发布、下线功能修改
continuous-integration/drone/push Build is passing Details
2025-04-21 10:57:32 +08:00
wangxiaoshuang 4249ccd9d6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-04-21 09:47:31 +08:00
wangxiaoshuang 9a88930a04 通用培训创建默认设置为失效 2025-04-21 09:47:20 +08:00
caiyiling aea6a3f8c8 病灶对齐逻辑更改
continuous-integration/drone/push Build is passing Details
2025-04-18 17:02:52 +08:00
caiyiling c657bb8783 标注序列图标维护
continuous-integration/drone/push Build is passing Details
2025-04-18 16:46:27 +08:00
caiyiling b0ae3cbd27 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-04-18 16:01:28 +08:00
caiyiling 10487640cd 视图工具维护 2025-04-18 16:01:00 +08:00
wangxiaoshuang 83fa937537 通用培训文档新增发布功能
continuous-integration/drone/push Build is passing Details
2025-04-18 14:23:29 +08:00
wangxiaoshuang dd1fb94562 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-04-18 09:55:17 +08:00
wangxiaoshuang 116402f865 【账号登录日志】去除用户类型查询条件 2025-04-18 09:55:06 +08:00
caiyiling 76fe08ed23 重置视口时重置窗宽窗位
continuous-integration/drone/push Build is passing Details
2025-04-18 09:43:21 +08:00
caiyiling 993d97e205 测量时病灶默认状态维护
continuous-integration/drone/push Build is passing Details
2025-04-18 09:21:47 +08:00
caiyiling 11471525af 任务切换或者单个病灶保存时前端缓存当前状态不刷新ecrf
continuous-integration/drone/push Build is passing Details
2025-04-17 17:36:35 +08:00
caiyiling 600abc3ce1 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-04-17 16:02:57 +08:00
caiyiling 9609768e5e 全局阅片更改 2025-04-17 16:02:39 +08:00
wangxiaoshuang ce565e00ff Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-04-17 15:14:00 +08:00
wangxiaoshuang e49fe23396 通用培训问题修复 2025-04-17 15:13:56 +08:00
caiyiling 85463ad240 典型肝内病灶提示更改
continuous-integration/drone/push Build is passing Details
2025-04-17 14:59:19 +08:00
caiyiling fc228622e1 病灶保存更改
continuous-integration/drone/push Build is passing Details
2025-04-17 14:20:00 +08:00
caiyiling 8840ddc77a 病灶清除修复
continuous-integration/drone/push Build is passing Details
2025-04-17 11:40:34 +08:00
caiyiling 3b31132616 mRecist表单更改
continuous-integration/drone/push Build is passing Details
2025-04-17 10:22:28 +08:00
caiyiling c7df59e564 1
continuous-integration/drone/push Build is passing Details
2025-04-17 09:29:23 +08:00
caiyiling aeef8eaacf 清除病灶信息bug修复
continuous-integration/drone/push Build is passing Details
2025-04-17 09:07:46 +08:00
caiyiling b0c4cfd0bf 阅片页面矩形工具补充
continuous-integration/drone/push Build is passing Details
2025-04-16 17:26:48 +08:00
caiyiling 38c06595aa 病灶保存bug修复
continuous-integration/drone/push Build is passing Details
2025-04-16 17:10:15 +08:00
caiyiling a0c5c7d304 病灶验证更改
continuous-integration/drone/push Build is passing Details
2025-04-16 16:43:30 +08:00
caiyiling 2323cbdd27 病灶保存成功时关闭窗口
continuous-integration/drone/push Build is passing Details
2025-04-16 15:57:33 +08:00
caiyiling c2f3e02ef1 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2025-04-16 15:55:44 +08:00
caiyiling b069c881f2 mRecist病灶验证更改 2025-04-16 15:55:13 +08:00
wangxiaoshuang faaaf8f28f 附件数量为0时不打开预览弹框
continuous-integration/drone/push Build is passing Details
2025-04-15 17:39:54 +08:00
wangxiaoshuang 1e5bd46a40 附件预览筛选是否下线
continuous-integration/drone/push Build is passing Details
2025-04-15 17:27:54 +08:00
wangxiaoshuang 7d2af46845 通用培训问题解决
continuous-integration/drone/push Build is passing Details
2025-04-15 16:29:56 +08:00
wangxiaoshuang e1c41d2327 通用培训文档优化:增加附件、培训时限
continuous-integration/drone/push Build is passing Details
2025-04-15 15:49:22 +08:00
wangxiaoshuang d4ae366fa6 非dicom上传去除限制
continuous-integration/drone/push Build is passing Details
2025-04-15 11:13:52 +08:00
wangxiaoshuang 26963b0f94 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-04-15 10:01:10 +08:00
wangxiaoshuang c391e3e2e7 通用培训新增附件 2025-04-15 10:00:59 +08:00
caiyiling 23feb84e30 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-04-14 16:46:00 +08:00
caiyiling d5ae075aa8 多帧图像渲染更改 2025-04-14 16:45:40 +08:00
wangxiaoshuang b22374db9e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-04-14 14:04:37 +08:00
wangxiaoshuang ba17d51f72 文档模板需要区分Elevate和Extensive的需要。 2025-04-14 14:04:28 +08:00
caiyiling 0f9963d939 箭头工具更改
continuous-integration/drone/push Build is passing Details
2025-04-14 13:41:42 +08:00
caiyiling ca0d406e45 recist标准更改
continuous-integration/drone/push Build is passing Details
2025-04-14 13:11:00 +08:00
caiyiling 8e0ad5ca9d mRecist标准更改
continuous-integration/drone/push Build is passing Details
2025-04-14 11:39:53 +08:00
DESKTOP-775TN7O\wxs e0321bae72 影像预览问题解决
continuous-integration/drone/push Build encountered an error Details
2025-04-12 12:04:20 +08:00
wangxiaoshuang 10c1fb0bbc 重传审批添加默认查询条件
continuous-integration/drone/push Build is passing Details
2025-04-11 15:42:24 +08:00
wangxiaoshuang 3ab9b48842 工作台增加通用培训
continuous-integration/drone/push Build is passing Details
2025-04-11 15:17:05 +08:00
wangxiaoshuang 58a590bbb7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-04-10 17:46:47 +08:00
wangxiaoshuang b331b43b28 表格双击、授权按钮区分 2025-04-10 17:46:35 +08:00
caiyiling 162b649c3c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-04-10 17:12:06 +08:00
caiyiling fcc5398bcb 阅片更改 2025-04-10 17:11:47 +08:00
wangxiaoshuang 9df1444e3d 版本记录删除与下载问题
continuous-integration/drone/push Build is passing Details
2025-04-10 16:23:45 +08:00
wangxiaoshuang 0f944343b3 历史版本打开有误
continuous-integration/drone/push Build is passing Details
2025-04-10 15:46:14 +08:00
wangxiaoshuang adeecf0b07 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-04-10 15:41:23 +08:00
wangxiaoshuang 1965abc9fd 设置忽略异地登录 2025-04-10 15:41:13 +08:00
caiyiling 1c19301f28 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-04-10 15:26:31 +08:00
caiyiling 42711dadb5 dicom阅片更改 2025-04-10 15:26:11 +08:00
wangxiaoshuang d9d2a2169e 表格双击、展开行事件区分
continuous-integration/drone/push Build is passing Details
2025-04-10 14:53:16 +08:00
wangxiaoshuang 9775ef24c8 1
continuous-integration/drone/push Build is failing Details
2025-04-10 14:42:10 +08:00
wangxiaoshuang 9af3cd4280 稽查文档管理问题修复
continuous-integration/drone/push Build is passing Details
2025-04-10 14:32:21 +08:00
wangxiaoshuang ab058d6659 稽查文档排序、新增文件夹更换接口
continuous-integration/drone/push Build is passing Details
2025-04-10 13:27:10 +08:00
wangxiaoshuang 0d446746e6 稽查文档管理问题修复
continuous-integration/drone/push Build is passing Details
2025-04-10 10:29:25 +08:00
wangxiaoshuang aaa366934b 影像退回
continuous-integration/drone/push Build is passing Details
2025-04-10 09:56:02 +08:00
wangxiaoshuang 7614f7a327 1
continuous-integration/drone/push Build is passing Details
2025-04-09 15:59:36 +08:00
wangxiaoshuang 0035ac1266 邮件管理中子页的操作列中文显示为英文,英文环境下按钮位置需要调整
continuous-integration/drone/push Build is passing Details
2025-04-09 13:56:49 +08:00
wangxiaoshuang 298d335a03 【忘记密码】点击上一步无法退回到上一个页面
continuous-integration/drone/push Build is passing Details
2025-04-09 13:50:21 +08:00
wangxiaoshuang 1bddd30709 账户日志的操作类型支持多选
continuous-integration/drone/push Build is passing Details
2025-04-09 13:43:47 +08:00
wangxiaoshuang 1d6ebe6388 项目切换时,需要根据项目状态过滤项目
continuous-integration/drone/push Build is passing Details
2025-04-09 13:37:39 +08:00
wangxiaoshuang 236a565250 工作台稽查文档
continuous-integration/drone/push Build is passing Details
2025-04-09 10:05:30 +08:00
wangxiaoshuang 318954b360 稽查文档管理新增文件夹
continuous-integration/drone/push Build is passing Details
2025-04-08 17:28:40 +08:00
wangxiaoshuang 91d31b4226 稽查文档预览
continuous-integration/drone/push Build is passing Details
2025-04-08 16:17:54 +08:00
wangxiaoshuang 1fb76ca72d 稽查文档预览
continuous-integration/drone/push Build is passing Details
2025-04-08 15:09:04 +08:00
wangxiaoshuang b76d157fca 稽查文档管理
continuous-integration/drone/push Build is passing Details
2025-04-07 18:00:10 +08:00
wangxiaoshuang fa71af24ad 1
continuous-integration/drone/push Build is passing Details
2025-04-07 10:12:32 +08:00
wangxiaoshuang a9edab9227 稽查文档管理
continuous-integration/drone/push Build is failing Details
2025-04-03 17:35:25 +08:00
wangxiaoshuang 1e720e399d 确认收入项,修改选项后,其他文件也改了
continuous-integration/drone/push Build encountered an error Details
2025-04-03 11:15:54 +08:00
wangxiaoshuang 1368397da9 项目总览—>上传记录:中心编号 查询条件,查询结果不对 2025-04-03 11:15:36 +08:00
wangxiaoshuang c8c049b5d0 DICOM影像中,存在Tag最大像素值、最小像素值等,但是和实际的数据统计结果不同 2025-04-03 11:15:22 +08:00
wangxiaoshuang 31c9db368c 稽查文档管理
continuous-integration/drone/push Build is failing Details
2025-04-03 10:28:59 +08:00
wangxiaoshuang 866dc923c7 中心查询条件修改trialSiteId
continuous-integration/drone/push Build is failing Details
2025-04-03 09:46:21 +08:00
wangxiaoshuang a6b958ce4e dicom文件maxValue tag有问题 2025-04-03 09:45:50 +08:00
wangxiaoshuang 662cc93d85 稽查文档管理
continuous-integration/drone/push Build is failing Details
2025-04-01 17:59:24 +08:00
caiyiling e3ad114207 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-04-01 16:48:50 +08:00
caiyiling 0960b480a6 阅片页面更改 2025-04-01 16:48:04 +08:00
wangxiaoshuang 9a4eb1b210 工作台稽查文档
continuous-integration/drone/push Build is passing Details
2025-03-28 18:01:45 +08:00
wangxiaoshuang 0567534367 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-03-27 13:31:59 +08:00
wangxiaoshuang 481a436169 项目文档确认收入项问题解决 2025-03-27 13:31:54 +08:00
caiyiling 4188c0110f 非dicom阅片受试者内随机初始化图像逻辑更改
continuous-integration/drone/push Build is passing Details
2025-03-26 15:23:29 +08:00
wangxiaoshuang 01206716ab 1
continuous-integration/drone/push Build is passing Details
2025-03-24 16:56:27 +08:00
wangxiaoshuang 7fcbd7f983 生产环境配置修改
continuous-integration/drone/push Build encountered an error Details
2025-03-24 13:59:21 +08:00
wangxiaoshuang 779badb041 项目文档系统数据中英文转换
continuous-integration/drone/push Build is passing Details
2025-03-24 09:31:49 +08:00
caiyiling ef5e5527fd 标注更改及检查名称更改
continuous-integration/drone/push Build is passing Details
2025-03-21 16:29:47 +08:00
caiyiling 52ac12d6b6 阅片页面显示检查名称
continuous-integration/drone/push Build is passing Details
2025-03-21 15:36:23 +08:00
caiyiling 272c28a988 自定义阅片更改及非dicom阅片添加个性化配置
continuous-integration/drone/push Build is passing Details
2025-03-21 15:03:21 +08:00
caiyiling 6b10d07e2a 自定义阅片预览paf更改
continuous-integration/drone/push Build is passing Details
2025-03-21 14:03:53 +08:00
caiyiling 032e710890 阅片工具及报告页查看pdf更改
continuous-integration/drone/push Build is passing Details
2025-03-21 13:09:36 +08:00
caiyiling 032150904e 非dicom阅片更改
continuous-integration/drone/push Build is passing Details
2025-03-20 19:23:20 +08:00
wangxiaoshuang d91161a139 网速监控改为三位小数
continuous-integration/drone/push Build is passing Details
2025-03-19 15:53:41 +08:00
wangxiaoshuang bba2237337 文件大小改为保留3位小数
continuous-integration/drone/push Build is passing Details
2025-03-19 15:36:53 +08:00
wangxiaoshuang 707ca5602c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-03-18 17:59:20 +08:00
wangxiaoshuang 3b03d6ba76 项目文档搜索栏样式问题 2025-03-18 17:59:10 +08:00
caiyiling 9277d48c85 1
continuous-integration/drone/push Build is passing Details
2025-03-18 17:55:22 +08:00
caiyiling d753fbc2ab 非dicom阅片测量工具更改
continuous-integration/drone/push Build is passing Details
2025-03-18 16:53:03 +08:00
caiyiling 5678e3302b 国际化补充
continuous-integration/drone/push Build is passing Details
2025-03-18 15:34:12 +08:00
caiyiling c25cb097ab 1
continuous-integration/drone/push Build is passing Details
2025-03-18 15:28:13 +08:00
caiyiling 070db5158d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2025-03-18 15:27:16 +08:00
caiyiling 121bf497bb 非dicom阅片更改 2025-03-18 15:26:51 +08:00
wangxiaoshuang e2ffd76504 阅片人筛选机构城市国家中英文显示
continuous-integration/drone/push Build is passing Details
2025-03-18 15:18:26 +08:00
wangxiaoshuang cfbe3b4839 项目文档培训记录培训人数校验修改
continuous-integration/drone/push Build is running Details
2025-03-18 15:16:31 +08:00
wangxiaoshuang 81bef8abe0 项目文档培训记录培训人数添加校验
continuous-integration/drone/push Build is passing Details
2025-03-18 14:15:31 +08:00
wangxiaoshuang 84b1263340 浏览器页签标题修改
continuous-integration/drone/push Build is passing Details
2025-03-18 13:57:07 +08:00
wangxiaoshuang 4016e71c37 项目文档阅片人问题修复
continuous-integration/drone/push Build is passing Details
2025-03-18 13:51:25 +08:00
wangxiaoshuang 3b0afd3913 1
continuous-integration/drone/push Build is passing Details
2025-03-18 13:45:13 +08:00
wangxiaoshuang 3672892451 项目文档阅片人问题修复
continuous-integration/drone/push Build is passing Details
2025-03-18 09:54:33 +08:00
wangxiaoshuang c46ca18a42 项目文档菜单与列表是否适用字段联动
continuous-integration/drone/push Build is passing Details
2025-03-17 16:38:14 +08:00
wangxiaoshuang 0e0b5c2c4c 项目文档同意入项记录上传方式修改
continuous-integration/drone/push Build is passing Details
2025-03-17 14:34:24 +08:00
wangxiaoshuang 5339e2df63 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-03-17 13:23:25 +08:00
wangxiaoshuang 66d5591d50 项目文档同意入项记录上传更改为弹框 2025-03-17 13:23:21 +08:00
caiyiling bfe2f1dbfb Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-17 11:37:30 +08:00
caiyiling 24806f57ed 自定义阅片bug修复 2025-03-17 11:37:09 +08:00
wangxiaoshuang b0ff8e7163 项目文档培训记录效果改为可输入所有字符
continuous-integration/drone/push Build is passing Details
2025-03-17 11:34:03 +08:00
caiyiling c9ef6cd19f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-17 11:24:01 +08:00
caiyiling 00cc5d5d27 非dicom阅片ecrf更改 2025-03-17 11:23:24 +08:00
wangxiaoshuang 25ddd422a3 1
continuous-integration/drone/push Build is passing Details
2025-03-17 09:29:56 +08:00
wangxiaoshuang a060c1745d 项目文档资质材料
continuous-integration/drone/push Build is passing Details
2025-03-14 17:09:38 +08:00
wangxiaoshuang 1a4bfe64f9 项目文档上传文件路径更改
continuous-integration/drone/push Build is passing Details
2025-03-14 13:15:44 +08:00
caiyiling 2fd6e1893b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-14 10:35:46 +08:00
caiyiling dc0229810d 国际化补充 2025-03-14 10:35:20 +08:00
wangxiaoshuang 08c911d4a0 项目文档申报方同意入项记录审核人角色字段更改
continuous-integration/drone/push Build is passing Details
2025-03-14 10:25:35 +08:00
wangxiaoshuang 08cdcffd82 项目文档申报方同意入项记录
continuous-integration/drone/push Build is passing Details
2025-03-13 17:10:42 +08:00
wangxiaoshuang a5f16c866d 检查名称配置更改
continuous-integration/drone/push Build is passing Details
2025-03-13 16:37:08 +08:00
caiyiling 3167c2bea7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-13 15:01:16 +08:00
caiyiling 26cca57f75 系统标准国际化补充 2025-03-13 15:00:50 +08:00
wangxiaoshuang ff88cbd6e2 1
continuous-integration/drone/push Build is passing Details
2025-03-13 13:23:56 +08:00
wangxiaoshuang c4a498d953 检查被IQC标记删除:在crc查看时,该行记录增加删除线
continuous-integration/drone/push Build is passing Details
2025-03-13 11:14:34 +08:00
wangxiaoshuang f58e2ff82f 影像重传,确认完成时,签名中XXX未替换 2025-03-13 11:14:00 +08:00
wangxiaoshuang 1696fb6294 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-03-12 17:33:10 +08:00
wangxiaoshuang 3c81a8a678 1 2025-03-12 17:32:58 +08:00
caiyiling afcd1b82c0 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2025-03-12 17:22:44 +08:00
caiyiling 96864b808c 配置文件更改 2025-03-12 17:22:18 +08:00
wangxiaoshuang 5ba2abb8f5 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is failing Details
2025-03-12 17:11:15 +08:00
wangxiaoshuang dc0329032e 项目文档菜单添加滚动条 2025-03-12 17:11:05 +08:00
caiyiling 4097389447 图片渲染窗口滚动条优化
continuous-integration/drone/push Build is passing Details
2025-03-12 16:11:16 +08:00
caiyiling cf39a84370 全局和裁判阅片签名更改
continuous-integration/drone/push Build is passing Details
2025-03-12 15:42:56 +08:00
caiyiling aae2d6a1c5 非dicom全局和裁判阅片更改
continuous-integration/drone/push Build is passing Details
2025-03-12 15:18:23 +08:00
caiyiling 10f4bf7480 pdf文件替换
continuous-integration/drone/push Build is passing Details
2025-03-12 14:56:17 +08:00
caiyiling 57f0938efc 非dicom文件交互更改
continuous-integration/drone/push Build is passing Details
2025-03-12 14:50:55 +08:00
caiyiling 615580331b 后台管理页面调整
continuous-integration/drone/push Build is passing Details
2025-03-12 14:42:05 +08:00
caiyiling 4b4058b0da 文件渲染视口样式更改
continuous-integration/drone/push Build is passing Details
2025-03-12 13:16:47 +08:00
caiyiling f77820df79 临床数据查看更改
continuous-integration/drone/push Build is running Details
2025-03-12 13:14:31 +08:00
caiyiling 398bc21666 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-12 13:10:53 +08:00
caiyiling 7db8e231b6 切换pdf时取消取消全屏 2025-03-12 13:10:26 +08:00
wangxiaoshuang 581e2c3879 培训记录备注可输入值变更
continuous-integration/drone/push Build is passing Details
2025-03-12 11:47:27 +08:00
caiyiling ce030d23cd Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-12 11:35:06 +08:00
caiyiling f3c073286b 非dicom表单更改及渲染视口双击事件优化 2025-03-12 11:34:18 +08:00
wangxiaoshuang d5b342ddc6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-03-12 11:22:32 +08:00
wangxiaoshuang d616512a72 项目文档按钮权限更改 2025-03-12 11:22:20 +08:00
caiyiling bf57b75bed 肿瘤学阅片配置更改
continuous-integration/drone/push Build is passing Details
2025-03-12 10:46:38 +08:00
caiyiling 0d9a77f4a5 文件管理模块列宽调整
continuous-integration/drone/push Build is passing Details
2025-03-12 10:24:25 +08:00
caiyiling 7f3da436c4 后台管理页面样式调整
continuous-integration/drone/push Build is passing Details
2025-03-12 10:21:40 +08:00
caiyiling 9e1cd5a099 配置文件更改
continuous-integration/drone/push Build is passing Details
2025-03-12 09:34:50 +08:00
caiyiling 639351c469 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-12 09:31:16 +08:00
caiyiling fa173a32fb 非dicom文件更改 2025-03-12 09:30:51 +08:00
wangxiaoshuang b93ab130fb 追溯显示信息右对齐
continuous-integration/drone/push Build is passing Details
2025-03-12 09:20:56 +08:00
caiyiling c6a6029f38 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-11 17:41:03 +08:00
caiyiling ca907a5196 非dicom阅片更改 2025-03-11 17:40:44 +08:00
wangxiaoshuang b4fe2a1c06 ir重阅,pm驳回,签名后无响应
continuous-integration/drone/push Build is passing Details
2025-03-11 17:00:01 +08:00
wangxiaoshuang 40061db7f7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2025-03-11 16:59:49 +08:00
wangxiaoshuang 513e9b018a spm审批签署-重阅审批,中心编号筛选查询无效 2025-03-11 16:37:59 +08:00
wangxiaoshuang 0c7b4fbfdd 影像重传,确认完成时,签名中XXX未替换 2025-03-11 16:35:10 +08:00
caiyiling 74893a51c7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-11 16:04:55 +08:00
caiyiling 305b6ab294 非dicom缩略图更改 2025-03-11 16:00:10 +08:00
wangxiaoshuang 920c95f611 非dicom预览pdf和zip缩略图
continuous-integration/drone/push Build is passing Details
2025-03-11 15:05:31 +08:00
wangxiaoshuang f73eabed03 培训记录删除文件后授权状态改为否、禁用下载按钮
continuous-integration/drone/push Build is passing Details
2025-03-11 14:41:34 +08:00
wangxiaoshuang e99c77fb0d 培训记录上传单个文件问题修复
continuous-integration/drone/push Build is running Details
2025-03-11 14:39:36 +08:00
wangxiaoshuang ec37ca2d3e 一般文件记录删除文件后授权状态改为否、禁用下载按钮
continuous-integration/drone/push Build is passing Details
2025-03-11 14:32:49 +08:00
wangxiaoshuang 6a6a26feb7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-03-11 14:18:07 +08:00
wangxiaoshuang 5676bb6e57 1 2025-03-11 14:17:57 +08:00
caiyiling 200aa7c0f8 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2025-03-11 14:16:16 +08:00
caiyiling bf4f0c7245 本地预览影像更改 2025-03-11 14:15:52 +08:00
wangxiaoshuang 21dab27e0b 国际化排序
continuous-integration/drone/push Build is passing Details
2025-03-11 14:11:18 +08:00
wangxiaoshuang 7b90715953 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-03-11 13:53:55 +08:00
wangxiaoshuang cb8bc506a7 项目文档上传弹框文件数量没有限制时2才显示上传文件夹按钮 2025-03-11 13:53:38 +08:00
caiyiling 7a69227888 邮件列表列宽调整
continuous-integration/drone/push Build is passing Details
2025-03-11 13:11:59 +08:00
caiyiling 0785219954 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-11 11:52:52 +08:00
caiyiling b5f2cfeaff 国际化补充 2025-03-11 11:52:38 +08:00
wangxiaoshuang 4164b24bd9 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-03-11 11:41:49 +08:00
wangxiaoshuang 49b723ab01 上传同名文件时进度条出错 2025-03-11 11:41:30 +08:00
caiyiling 0de49faed1 国际化补充
continuous-integration/drone/push Build is passing Details
2025-03-11 10:59:22 +08:00
caiyiling 7f85302c1b 国际化补充
continuous-integration/drone/push Build is passing Details
2025-03-11 10:42:34 +08:00
caiyiling 4305f2536c institutions模块国际化更改
continuous-integration/drone/push Build is passing Details
2025-03-11 10:30:07 +08:00
caiyiling 55783de27f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-10 17:59:25 +08:00
caiyiling 465ea59906 国际化更改 2025-03-10 17:59:10 +08:00
wangxiaoshuang 81fab97ee4 项目文档部分字段去除排序
continuous-integration/drone/push Build is passing Details
2025-03-10 17:33:38 +08:00
wangxiaoshuang 2c93ba2882 国际化修改
continuous-integration/drone/push Build is running Details
2025-03-10 17:31:42 +08:00
wangxiaoshuang f3a237b0bf 1
continuous-integration/drone/push Build is passing Details
2025-03-10 17:08:43 +08:00
caiyiling c0588661ce Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-10 16:11:22 +08:00
caiyiling 381acf8d76 ecrf表单中分类问题bug修复 2025-03-10 16:10:41 +08:00
wangxiaoshuang e6715a429b 项目文档阅片人简历、阅片人培训记录、阅片人阅片记录、阅片人医学审核记录
continuous-integration/drone/push Build is passing Details
2025-03-10 15:24:11 +08:00
caiyiling 33ac08f4e4 非dicom阅片更改
continuous-integration/drone/push Build is passing Details
2025-03-10 15:20:02 +08:00
caiyiling d117bac7f6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-10 15:09:37 +08:00
caiyiling 7051312855 国际化更改 2025-03-10 15:09:18 +08:00
wangxiaoshuang ff5a868377 项目文档部分问题修复
continuous-integration/drone/push Build is passing Details
2025-03-10 11:03:19 +08:00
wangxiaoshuang ea44f97985 非dicom列表改变状态时列表不重置
continuous-integration/drone/push Build is passing Details
2025-03-07 16:04:34 +08:00
wangxiaoshuang 156411fea3 非dicom列表改变状态时列表不重置
continuous-integration/drone/push Build is passing Details
2025-03-07 15:51:59 +08:00
wangxiaoshuang 822c2dc955 预览按钮位置交换
continuous-integration/drone/push Build is passing Details
2025-03-07 15:26:49 +08:00
wangxiaoshuang d729c4d34e 阅片期操作按钮样式问题
continuous-integration/drone/push Build is passing Details
2025-03-07 15:00:46 +08:00
caiyiling a887e686a8 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-07 14:25:09 +08:00
caiyiling 21cb32f1a9 自定义阅片数值问题渲染bug修复 2025-03-07 14:24:32 +08:00
wangxiaoshuang c74b482f0d 非dicom预览样式调整
continuous-integration/drone/push Build is passing Details
2025-03-07 14:13:57 +08:00
wangxiaoshuang 1af302961b 非dicom预览样式调整
continuous-integration/drone/push Build is running Details
2025-03-07 14:11:53 +08:00
wangxiaoshuang e83ac6714d 非dicom列表获取参数iReading默认为false
continuous-integration/drone/push Build is passing Details
2025-03-07 13:37:22 +08:00
wangxiaoshuang fc98aa0312 1
continuous-integration/drone/push Build is running Details
2025-03-07 13:34:36 +08:00
wangxiaoshuang 278c051f51 质控非dicom添加预览阅片影像功能
continuous-integration/drone/push Build is passing Details
2025-03-07 12:23:40 +08:00
wangxiaoshuang 5b8716f9ae 质控删除后数据不显示
continuous-integration/drone/push Build is passing Details
2025-03-07 11:02:30 +08:00
wangxiaoshuang cfef89c703 根据角色权限表核对开放页面以及功能
continuous-integration/drone/push Build is passing Details
2025-03-06 15:37:13 +08:00
caiyiling bf33f9d589 中心调研表更改
continuous-integration/drone/push Build is passing Details
2025-03-06 15:15:09 +08:00
caiyiling d74da23d41 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-06 15:10:50 +08:00
caiyiling cd630a70fb 阅片布局调整及中心调研更改 2025-03-06 15:10:11 +08:00
wangxiaoshuang 0b688bc33f PM在阅片期上传临床数据页面调整
continuous-integration/drone/push Build is passing Details
2025-03-06 14:56:28 +08:00
wangxiaoshuang a602be255b 项目文档部分问题修复
continuous-integration/drone/push Build is passing Details
2025-03-06 14:39:51 +08:00
wangxiaoshuang fb7891a2af 项目文档部分问题解决
continuous-integration/drone/push Build is passing Details
2025-03-06 13:20:47 +08:00
wangxiaoshuang 620f0d92ca 追溯角色可查看详情 2025-03-06 13:13:43 +08:00
wangxiaoshuang 8f43c697c0 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-03-06 13:05:40 +08:00
wangxiaoshuang 55769e906d 项目文档菜单增加排序字段 2025-03-06 11:41:17 +08:00
caiyiling 4ad67e5501 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-06 11:02:41 +08:00
caiyiling 1265cef6f9 系统标准阅片bug修复及非dicom阅片更改 2025-03-06 11:01:46 +08:00
wangxiaoshuang 86f5e2c782 非DICOM影像质控时,可以设置影像为删除、不阅片
continuous-integration/drone/push Build is passing Details
2025-03-05 16:14:29 +08:00
wangxiaoshuang 5450188a6e DICOM影像上传时缩略图的生成与存储
continuous-integration/drone/push Build is passing Details
2025-03-05 14:52:27 +08:00
wangxiaoshuang c8601f6f8f 文件模板
continuous-integration/drone/push Build is passing Details
2025-03-05 14:34:07 +08:00
wangxiaoshuang 299481a124 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
2025-03-05 13:32:23 +08:00
wangxiaoshuang 5ca123e90b 培训记录
continuous-integration/drone/push Build is running Details
2025-03-05 13:32:00 +08:00
wangxiaoshuang af452bb04e 排序改为升序
continuous-integration/drone/push Build encountered an error Details
2025-03-05 13:12:55 +08:00
wangxiaoshuang bc34ed5c25 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
2025-03-05 10:58:20 +08:00
wangxiaoshuang 1ef1d4f303 质控dicom检查信息添加更新时间和上传时间
continuous-integration/drone/push Build encountered an error Details
2025-03-05 10:50:47 +08:00
wangxiaoshuang fd67edcb0e dicom列表时间顺序调换
continuous-integration/drone/push Build encountered an error Details
2025-03-05 10:14:06 +08:00
wangxiaoshuang ecebeb2271 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
# Conflicts:
#	src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue
#	src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles2.vue
2025-03-05 10:12:21 +08:00
wangxiaoshuang ba26476c52 pdf预览默认缩放改为100%
continuous-integration/drone/push Build encountered an error Details
2025-03-05 09:56:51 +08:00
wangxiaoshuang 821475b7d6 影像检查排序、字符集问题
continuous-integration/drone/push Build encountered an error Details
2025-03-05 09:51:33 +08:00
wangxiaoshuang a0594cab96 培训记录
continuous-integration/drone/push Build is passing Details
2025-03-05 09:26:40 +08:00
wangxiaoshuang bcde358584 影像检查排序、字符集问题
continuous-integration/drone/push Build is passing Details
2025-03-04 16:16:04 +08:00
caiyiling 067162e1d7 自定义标准更改
continuous-integration/drone/push Build is passing Details
2025-03-04 11:48:00 +08:00
caiyiling b5b5830b1f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-04 10:57:19 +08:00
caiyiling fb1d87e84b 非dicom阅片更改 2025-03-04 10:56:55 +08:00
wangxiaoshuang 6b42b4e88c 一般文件记录
continuous-integration/drone/push Build is passing Details
2025-03-03 17:54:07 +08:00
caiyiling 2516be481d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-03-03 13:47:21 +08:00
caiyiling 3aa66af253 非dicom阅片更改 2025-03-03 13:46:57 +08:00
wangxiaoshuang fa339dcdb0 项目文档报告/文档功能实现
continuous-integration/drone/push Build is passing Details
2025-02-28 17:55:10 +08:00
wangxiaoshuang 541e309d1d 用户追溯添加跳转至项目详情
continuous-integration/drone/push Build is passing Details
2025-02-28 11:18:19 +08:00
wangxiaoshuang 949ec6d2d6 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
2025-02-28 11:02:37 +08:00
wangxiaoshuang 83b6c9f2cc 1
continuous-integration/drone/push Build encountered an error Details
2025-02-28 10:24:09 +08:00
wangxiaoshuang 996b691ef4 访视中预览,dicom检查没有显示检查名称 2025-02-28 10:21:52 +08:00
wangxiaoshuang 8bfaf7241a 检查名称问题修复
continuous-integration/drone/push Build encountered an error Details
2025-02-28 09:58:07 +08:00
wangxiaoshuang 35bff089b7 非dicom预览显示顺序问题
continuous-integration/drone/push Build encountered an error Details
2025-02-27 18:01:38 +08:00
wangxiaoshuang 6b1f8c26b2 受试者第二编号也需要隐藏
continuous-integration/drone/push Build encountered an error Details
2025-02-27 17:28:53 +08:00
wangxiaoshuang 5bffb48b99 修改配置应用到影像上传以及影像质控
continuous-integration/drone/push Build encountered an error Details
2025-02-27 16:32:58 +08:00
wangxiaoshuang 858a650986 项目配置修改 2025-02-27 15:13:56 +08:00
wangxiaoshuang 6b331ab6f6 项目文档
continuous-integration/drone/push Build is passing Details
2025-02-27 10:34:06 +08:00
wangxiaoshuang 00a7e8e609 部分问题修复 2025-02-27 10:33:57 +08:00
wangxiaoshuang c686850292 锁定弹窗支持邮箱校验
continuous-integration/drone/push Build is passing Details
2025-02-26 11:43:12 +08:00
wangxiaoshuang 887bb2534b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-02-26 09:24:49 +08:00
wangxiaoshuang 3192ec7516 用户编辑保存按钮国际化 2025-02-26 09:24:42 +08:00
caiyiling 5f960348ed 1
continuous-integration/drone/push Build is passing Details
2025-02-25 17:55:17 +08:00
caiyiling d2757c6f9b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-02-25 17:35:41 +08:00
caiyiling 734d6dc1a5 非dicom图像阅片更改 2025-02-25 17:35:02 +08:00
wangxiaoshuang be95951f40 用户来源问题修复
continuous-integration/drone/push Build is passing Details
2025-02-25 16:58:26 +08:00
wangxiaoshuang f4af0fc157 管理端用户列表角色过滤
continuous-integration/drone/push Build is passing Details
2025-02-25 11:31:56 +08:00
wangxiaoshuang 2090866521 管理端添加账号追溯页面 2025-02-25 11:31:32 +08:00
wangxiaoshuang d61131ed61 文件记录删除添加权限
continuous-integration/drone/push Build is passing Details
2025-02-25 09:52:36 +08:00
wangxiaoshuang 20aee53a3f 管理端添加文件记录列表
continuous-integration/drone/push Build is passing Details
2025-02-24 15:36:58 +08:00
wangxiaoshuang 05c75c32cf 角色与用户问题修复 2025-02-24 15:35:33 +08:00
wangxiaoshuang 2575e27d22 角色添加启用、停用功能
continuous-integration/drone/push Build is passing Details
2025-02-24 14:20:31 +08:00
wangxiaoshuang e7dcdb33c4 上传影像缩略图去除中心目录
continuous-integration/drone/push Build is passing Details
2025-02-24 09:04:59 +08:00
caiyiling d4c1b75423 1
continuous-integration/drone/push Build is passing Details
2025-02-21 17:05:36 +08:00
caiyiling d1159a09b4 图像窗口添加切换访视功能
continuous-integration/drone/push Build is running Details
2025-02-21 17:04:18 +08:00
caiyiling d69d8802cd Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is failing Details
2025-02-21 16:13:45 +08:00
caiyiling 6223eac81a 阅片页面图像预览更改 2025-02-21 16:13:17 +08:00
wangxiaoshuang b453eede31 打包配置修改,pdf预览文件
continuous-integration/drone/push Build is passing Details
2025-02-20 11:49:06 +08:00
wangxiaoshuang e5330765af 重阅审批页面查询条件中心初始化修改
continuous-integration/drone/push Build is passing Details
2025-02-20 10:07:29 +08:00
wangxiaoshuang 493b155678 国际化查询框换行问题
continuous-integration/drone/push Build is passing Details
2025-02-20 09:40:58 +08:00
wangxiaoshuang a2b2fd65af 国际化修改
continuous-integration/drone/push Build is passing Details
2025-02-19 11:25:57 +08:00
caiyiling 551cdf0ed3 工作台跳转中心调研异常bug修复
continuous-integration/drone/push Build is passing Details
2025-02-18 17:22:21 +08:00
caiyiling cadb3e8f7a 配置及样式更改
continuous-integration/drone/push Build is running Details
2025-02-18 17:15:09 +08:00
caiyiling 4da35daa3c cornerstone3D库升级及其他文件调整
continuous-integration/drone/push Build is failing Details
2025-02-18 15:09:25 +08:00
caiyiling 0f50ff6ded Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-02-17 17:18:04 +08:00
caiyiling 2f371f0435 1 2025-02-17 17:17:40 +08:00
wangxiaoshuang 245d4edca7 影像上传列表数据采集显示临床数据
continuous-integration/drone/push Build is passing Details
2025-02-17 14:56:11 +08:00
wangxiaoshuang 42d1c713bd 阅片人简历邮箱更改,admin禁用
continuous-integration/drone/push Build is passing Details
2025-02-17 13:35:47 +08:00
caiyiling 65b81fc633 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-02-17 10:15:49 +08:00
caiyiling 3a1d4ee15d 阅片任务中反馈状态修复 2025-02-17 10:15:19 +08:00
wangxiaoshuang c0eab7e896 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
2025-02-17 09:46:49 +08:00
wangxiaoshuang 4ba4d7cf00 登录日志详情添加账号状态
continuous-integration/drone/push Build encountered an error Details
2025-02-14 18:08:24 +08:00
caiyiling bfe9817544 Merge branch 'uat' into main
continuous-integration/drone/push Build is passing Details
2025-02-14 17:42:54 +08:00
caiyiling f5fd1252c9 登录日志参数更改
continuous-integration/drone/push Build encountered an error Details
2025-02-14 17:41:15 +08:00
caiyiling 596ea8f658 Merge branch 'uat' into main
continuous-integration/drone/push Build is passing Details
2025-02-14 17:26:58 +08:00
caiyiling b24548dd8b 登录日志查询条件更改
continuous-integration/drone/push Build encountered an error Details
2025-02-14 17:25:30 +08:00
caiyiling 4a479258f2 Merge branch 'uat' into main
continuous-integration/drone/push Build is passing Details
2025-02-14 17:06:14 +08:00
caiyiling 29d0cc7653 登录日志个更改
continuous-integration/drone/push Build encountered an error Details
2025-02-14 16:56:25 +08:00
caiyiling 6de9cd26a4 影像阅片页面反馈按钮优化
continuous-integration/drone/push Build is passing Details
2025-02-14 16:07:40 +08:00
caiyiling caf3f41465 Merge branch 'uat' into main
continuous-integration/drone/push Build is passing Details
2025-02-14 14:52:03 +08:00
caiyiling 8896737a9e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-02-14 14:32:57 +08:00
caiyiling 1be46686a3 国际化更改 2025-02-14 14:32:39 +08:00
caiyiling 0cd07b76f8 多帧对齐bug修复
continuous-integration/drone/push Build encountered an error Details
2025-02-14 14:30:55 +08:00
wangxiaoshuang d74c0028f6 版本记录页面国际化
continuous-integration/drone/push Build is passing Details
2025-02-13 15:37:08 +08:00
caiyiling ab5645f28a popper弹出层优化
continuous-integration/drone/push Build encountered an error Details
2025-02-13 13:50:27 +08:00
caiyiling efb88b7ad1 多帧影像质控更改
continuous-integration/drone/push Build encountered an error Details
2025-02-13 11:50:29 +08:00
wangxiaoshuang 129548031c 影像上传页面,临床数据统计
continuous-integration/drone/push Build is passing Details
2025-02-13 10:17:42 +08:00
wangxiaoshuang 5dbddbea57 Merge commit 'dba4466ac26890fcedfd8d20d8c20c9fd45e8850' into uat
continuous-integration/drone/push Build encountered an error Details
2025-02-13 09:28:59 +08:00
caiyiling 689782bf36 后台管理页面部分国际化更改
continuous-integration/drone/push Build is passing Details
2025-02-13 09:25:32 +08:00
wangxiaoshuang 89fe4e4c00 阅片人简历邮箱更改
continuous-integration/drone/push Build is passing Details
2025-02-12 17:20:23 +08:00
wangxiaoshuang a582daf686 il8n页面国际化 2025-02-12 17:20:10 +08:00
wangxiaoshuang 3e680d0033 临床数据上传依赖,排序改为枚举值
continuous-integration/drone/push Build is passing Details
2025-02-11 14:39:01 +08:00
wangxiaoshuang af343d43d8 邮件模板预览样式调整
continuous-integration/drone/push Build is passing Details
2025-02-11 14:17:41 +08:00
wangxiaoshuang 4b9216229c 国际化编辑新增迭代版本、状态
continuous-integration/drone/push Build is passing Details
2025-02-11 13:13:39 +08:00
wangxiaoshuang 2952762ce7 切换角色、项目返回时清除项目路由缓存
continuous-integration/drone/push Build is passing Details
2025-02-10 10:42:10 +08:00
caiyiling 361aed4a0c dicom文件上传批量验证提示更改
continuous-integration/drone/push Build is passing Details
2025-02-10 09:22:44 +08:00
caiyiling 19b419c29e 一致性核查更改
continuous-integration/drone/push Build is passing Details
2025-02-08 15:06:11 +08:00
caiyiling 7e9a9b62f6 样式调整
continuous-integration/drone/push Build is passing Details
2025-02-08 14:10:00 +08:00
caiyiling 3921f369c3 阅片单元样式调整
continuous-integration/drone/push Build is passing Details
2025-02-08 13:07:46 +08:00
caiyiling 0ffe7ff1a7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-02-08 11:31:23 +08:00
caiyiling 5ec969c2f9 临床数据补充英文模板及界面样式调整 2025-02-08 11:30:07 +08:00
wangxiaoshuang dba4466ac2 国际化修改
continuous-integration/drone/push Build is passing Details
2025-01-24 16:27:39 +08:00
wangxiaoshuang 9187bbe64f 阅片人简历预览水印
continuous-integration/drone/push Build is passing Details
2025-01-24 13:27:47 +08:00
caiyiling a0f593a22f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-24 10:05:07 +08:00
caiyiling 89f7aee973 管理后台按钮调整及医学审核文本超长处理 2025-01-24 10:04:25 +08:00
wangxiaoshuang ced57cbfe4 logo显示有误
continuous-integration/drone/push Build is running Details
2025-01-24 10:01:17 +08:00
wangxiaoshuang 99d099496e 1
continuous-integration/drone/push Build is passing Details
2025-01-23 18:41:10 +08:00
caiyiling d3afa7b676 中心列表添加快捷跳转入口
continuous-integration/drone/push Build is passing Details
2025-01-23 18:18:29 +08:00
wangxiaoshuang c08d701143 重复新增角色弹框未清空
continuous-integration/drone/push Build is passing Details
2025-01-23 14:13:01 +08:00
caiyiling a2d06ba72f 多帧关键序列更改
continuous-integration/drone/push Build is passing Details
2025-01-23 10:21:51 +08:00
caiyiling 148aa4908b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-23 09:32:37 +08:00
caiyiling 53738c2da4 1 2025-01-23 09:32:15 +08:00
wangxiaoshuang 3513c08adf Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-01-23 09:22:28 +08:00
wangxiaoshuang 9eb3f2f322 1 2025-01-23 09:22:24 +08:00
caiyiling b16e351779 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-23 09:11:21 +08:00
caiyiling b176ab0716 关键序列渲染更改 2025-01-23 09:10:40 +08:00
wangxiaoshuang c7eb323eaa 通用培训课件添加国际化
continuous-integration/drone/push Build is passing Details
2025-01-22 17:29:20 +08:00
wangxiaoshuang 7b3fe42654 部分问题修复
continuous-integration/drone/push Build is passing Details
2025-01-22 15:27:20 +08:00
wangxiaoshuang 21c96300ad 1
continuous-integration/drone/push Build is passing Details
2025-01-22 10:21:32 +08:00
caiyiling 8f46819b9a Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-22 09:48:44 +08:00
caiyiling 6e66dd8bbe 导表配置更改 2025-01-22 09:48:28 +08:00
wangxiaoshuang b209c6566b 添加外部人员弹框按钮样式修改
continuous-integration/drone/push Build is running Details
2025-01-22 09:48:25 +08:00
wangxiaoshuang f8bd826c9c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-01-21 17:12:45 +08:00
wangxiaoshuang e3f6f9107d 角色可切换选项不足时不显示切换角色按钮 2025-01-21 17:12:33 +08:00
caiyiling f1c72c66e8 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-21 16:49:29 +08:00
caiyiling 79caed3fd9 1 2025-01-21 16:49:02 +08:00
wangxiaoshuang e56440634e 1
continuous-integration/drone/push Build is running Details
2025-01-21 16:47:19 +08:00
wangxiaoshuang ac657a162f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-01-21 16:38:56 +08:00
wangxiaoshuang 9d362e13de 用户登录只有一个角色可以选择时自动登录 2025-01-21 16:38:52 +08:00
wangxiaoshuang d04898dc28 管理员新增用户角色必填 2025-01-21 16:38:16 +08:00
caiyiling e0f42e815e 1
continuous-integration/drone/push Build is passing Details
2025-01-21 16:26:03 +08:00
caiyiling efe3d937b4 医学审核更改
continuous-integration/drone/push Build is passing Details
2025-01-21 16:16:23 +08:00
caiyiling 5cf6ab24bd Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-21 15:59:04 +08:00
caiyiling ff0ddeea9a 医学审核问题更改 2025-01-21 15:58:45 +08:00
wangxiaoshuang 42083afb8d 密码校验提示遮挡问题
continuous-integration/drone/push Build is passing Details
2025-01-21 14:01:42 +08:00
wangxiaoshuang de1b22ff48 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-01-21 11:28:37 +08:00
wangxiaoshuang 66cbbbbb75 退出至登录页国际化问题 2025-01-21 11:28:33 +08:00
caiyiling 3d89939a98 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-21 11:12:27 +08:00
caiyiling ade4ab3e03 项目模块下样式调整及中心调研调整 2025-01-21 11:11:47 +08:00
wangxiaoshuang a3550c44bd 后端开启限制登录后国际化问题
continuous-integration/drone/push Build is passing Details
2025-01-21 10:01:43 +08:00
wangxiaoshuang 9e85e9705e 后端开启限制登录后国际化问题
continuous-integration/drone/push Build is passing Details
2025-01-21 09:38:42 +08:00
wangxiaoshuang e1d5db8cf5 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-01-21 09:31:30 +08:00
wangxiaoshuang 6f3381c267 后端开启限制登录后国际化问题 2025-01-21 09:31:26 +08:00
caiyiling 0c52bde525 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-21 09:24:29 +08:00
caiyiling 102089c16f 我的项目模块下Tab样式更改 2025-01-21 09:23:40 +08:00
wangxiaoshuang 6e1d07ee95 多页签登录清楚缓存uerId和identityUserId
continuous-integration/drone/push Build is passing Details
2025-01-20 17:32:49 +08:00
wangxiaoshuang 55ae6bac7e lili关于页面
continuous-integration/drone/push Build is passing Details
2025-01-20 16:14:06 +08:00
wangxiaoshuang 823ac2f085 登陆页面国际化
continuous-integration/drone/push Build is passing Details
2025-01-20 15:58:19 +08:00
wangxiaoshuang 73e0a13e91 简历英文姓名展示修改
continuous-integration/drone/push Build is passing Details
2025-01-20 15:47:31 +08:00
caiyiling 7f179fb393 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-20 14:29:42 +08:00
caiyiling 3441793bcb 返回功能样式更改 2025-01-20 14:29:17 +08:00
wangxiaoshuang dbe651fe98 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-01-20 14:05:45 +08:00
wangxiaoshuang f54ff927ec 登录页国际化问题 2025-01-20 14:05:36 +08:00
caiyiling 535b37e830 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-20 13:49:40 +08:00
caiyiling 13191c914e 系统阅片标准配置页字段更改 2025-01-20 13:49:16 +08:00
wangxiaoshuang 70735f2c47 重置密码完成后国际化问题
continuous-integration/drone/push Build is passing Details
2025-01-20 13:19:51 +08:00
wangxiaoshuang 8ad77f1679 问题修复
continuous-integration/drone/push Build is passing Details
2025-01-20 11:23:09 +08:00
wangxiaoshuang 3a76a7c24d 1
continuous-integration/drone/push Build is passing Details
2025-01-17 13:43:31 +08:00
wangxiaoshuang 5393ca571c 邮件模板预览修改
continuous-integration/drone/push Build is passing Details
2025-01-17 13:30:50 +08:00
wangxiaoshuang 4cef62ccba 中心列表参与人员去除排序
continuous-integration/drone/push Build is passing Details
2025-01-17 10:32:06 +08:00
wangxiaoshuang 2772168c3b 1
continuous-integration/drone/push Build is passing Details
2025-01-17 10:23:22 +08:00
wangxiaoshuang 89be8d8a12 项目培训记录列表添加创建时间
continuous-integration/drone/push Build is passing Details
2025-01-17 10:00:43 +08:00
wangxiaoshuang 041266c250 admin项目用户角色权限配置、部分国际化问题解决
continuous-integration/drone/push Build is passing Details
2025-01-17 09:31:06 +08:00
wangxiaoshuang cbcb84a768 1
continuous-integration/drone/push Build is passing Details
2025-01-16 17:21:35 +08:00
wangxiaoshuang 830718c228 人员管理禁用更换字典
continuous-integration/drone/push Build is passing Details
2025-01-16 17:02:58 +08:00
wangxiaoshuang 6977ed3713 稽查查询下拉选择框可搜索
continuous-integration/drone/push Build is passing Details
2025-01-16 16:18:14 +08:00
wangxiaoshuang 28ea52797e 系统配置签名文档国际化
continuous-integration/drone/push Build is passing Details
2025-01-16 14:41:10 +08:00
wangxiaoshuang 1348d5f864 IP不一致登陆提示
continuous-integration/drone/push Build is passing Details
2025-01-16 11:29:01 +08:00
wangxiaoshuang cd34ad7ef7 登录账号同时修改密码和登录IP不一致提示
continuous-integration/drone/push Build is running Details
2025-01-16 11:22:51 +08:00
wangxiaoshuang 5af7e8dd3c 锁定弹窗问题
continuous-integration/drone/push Build is passing Details
2025-01-16 10:25:17 +08:00
caiyiling 455f808f49 导表配置更改
continuous-integration/drone/push Build is passing Details
2025-01-14 15:06:43 +08:00
caiyiling a0d5e58311 导表配置更改
continuous-integration/drone/push Build is passing Details
2025-01-14 14:53:08 +08:00
caiyiling 84dbcd49f0 导表配置更改
continuous-integration/drone/push Build is passing Details
2025-01-14 13:43:16 +08:00
caiyiling a4ec387814 CDISC导表配置更改
continuous-integration/drone/push Build is passing Details
2025-01-14 11:00:30 +08:00
caiyiling 3a6c3d451c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-14 10:42:20 +08:00
caiyiling f396901731 CDISC导表配置更改 2025-01-14 10:41:38 +08:00
wangxiaoshuang 0b00f4bc7e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-01-13 16:13:32 +08:00
wangxiaoshuang e58695aeff 异地登录提示 2025-01-13 16:13:18 +08:00
caiyiling 65a9dd3cf1 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-13 15:50:18 +08:00
caiyiling 63743dbbc1 系统阅片标准配置更改及项目导出配置更改 2025-01-13 15:49:46 +08:00
wangxiaoshuang b5643d3774 1
continuous-integration/drone/push Build is passing Details
2025-01-13 15:22:28 +08:00
wangxiaoshuang 4c1a770969 简历采集英文环境填写工作所属医院,未保存成功
continuous-integration/drone/push Build is passing Details
2025-01-13 14:51:36 +08:00
wangxiaoshuang 7ff0273c29 用户评审辅助功能
continuous-integration/drone/push Build is passing Details
2025-01-13 13:44:30 +08:00
wangxiaoshuang 3f2a339cba 增加后台批量编辑国际化翻译功能
continuous-integration/drone/push Build is passing Details
2025-01-13 11:49:16 +08:00
caiyiling d3dd4ecffc ecrf配置去除导出标识属性
continuous-integration/drone/push Build is passing Details
2025-01-13 11:21:42 +08:00
wangxiaoshuang d636813210 账号禁用或无权限自动退出
continuous-integration/drone/push Build is passing Details
2025-01-10 17:38:54 +08:00
caiyiling 66d09ca284 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-10 14:25:01 +08:00
caiyiling e672e6bd18 保存验证更改 2025-01-10 14:24:39 +08:00
wangxiaoshuang 9c964f11a1 国际化批量编辑
continuous-integration/drone/push Build is passing Details
2025-01-10 13:54:28 +08:00
caiyiling 0a473dcae3 肝分段保存状态维护
continuous-integration/drone/push Build is passing Details
2025-01-10 12:31:54 +08:00
caiyiling 85b3960f97 分段是否可测量逻辑更改
continuous-integration/drone/push Build is passing Details
2025-01-10 11:37:49 +08:00
caiyiling b96f5b9910 表格默认折叠更改
continuous-integration/drone/push Build is passing Details
2025-01-10 10:19:53 +08:00
caiyiling 31196e850e 计算平均值bug修复
continuous-integration/drone/push Build is passing Details
2025-01-10 09:44:05 +08:00
caiyiling c309410c04 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-09 16:21:59 +08:00
caiyiling 0a671fb330 清除标注信息bug修复 2025-01-09 16:21:36 +08:00
wangxiaoshuang febdfd7b4f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-01-09 15:42:43 +08:00
wangxiaoshuang e1da0c9ea5 个人账号操作日志修改 2025-01-09 15:42:29 +08:00
caiyiling 54be84c300 阅片跟踪国际化更改
continuous-integration/drone/push Build is running Details
2025-01-09 15:42:11 +08:00
caiyiling 78c1b57770 阅片结果更改
continuous-integration/drone/push Build is passing Details
2025-01-09 14:52:30 +08:00
caiyiling 39ce8fd355 阅片结果导出国际化补充
continuous-integration/drone/push Build is passing Details
2025-01-09 14:36:49 +08:00
caiyiling 130862518f 阅片结果功能按钮添加图标
continuous-integration/drone/push Build is passing Details
2025-01-09 14:13:04 +08:00
caiyiling a129adbc4b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-09 11:42:27 +08:00
caiyiling 3066781ee6 ecrf系统配置更改及MRI-PDFF阅片bug修复 2025-01-09 11:41:51 +08:00
wangxiaoshuang df4880dc08 新建用户邮件初始化密码无法输入问题
continuous-integration/drone/push Build is passing Details
2025-01-09 10:43:12 +08:00
wangxiaoshuang 29e2a6ea65 新建用户邮件初始化取消按钮功能修改
continuous-integration/drone/push Build is passing Details
2025-01-09 10:19:38 +08:00
caiyiling ae12c3d517 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-08 17:40:23 +08:00
caiyiling cbe346a049 MRI-PDFF计算更改 2025-01-08 17:39:49 +08:00
wangxiaoshuang c8c5ab72bb 阅片期列表样式问题
continuous-integration/drone/push Build is passing Details
2025-01-08 16:08:06 +08:00
caiyiling 37dc4a960f 阅片报告页更改
continuous-integration/drone/push Build is passing Details
2025-01-08 16:01:50 +08:00
caiyiling 05cf250c21 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2025-01-08 15:58:56 +08:00
caiyiling b2ca803f94 肝分段状态维护 2025-01-08 15:58:30 +08:00
wangxiaoshuang 2ff2f5106e 项目课件状态
continuous-integration/drone/push Build is passing Details
2025-01-08 15:44:53 +08:00
wangxiaoshuang 67c2d47689 项目课件状态
continuous-integration/drone/push Build is passing Details
2025-01-08 15:31:02 +08:00
wangxiaoshuang 67a3c4f926 1.07部分问题修复
continuous-integration/drone/push Build is passing Details
2025-01-08 14:26:45 +08:00
wangxiaoshuang 9ab7afa06f 1
continuous-integration/drone/push Build is passing Details
2025-01-08 14:02:41 +08:00
wangxiaoshuang e5a17d20b1 1.07部分问题修复
continuous-integration/drone/push Build is running Details
2025-01-08 14:01:26 +08:00
wangxiaoshuang 3c664e9ba6 1.07部分问题修复
continuous-integration/drone/push Build is passing Details
2025-01-08 13:33:56 +08:00
caiyiling 50dd74b4ce 肝脏分段脂肪分数测量交互更改
continuous-integration/drone/push Build is passing Details
2025-01-08 13:26:54 +08:00
caiyiling b22b9d338e MRI-PDFF标准更改及导表配置更改
continuous-integration/drone/push Build is passing Details
2025-01-08 13:19:52 +08:00
wangxiaoshuang a13ef6e5d2 管理端国际化批量更新问题
continuous-integration/drone/push Build is passing Details
2025-01-08 09:23:15 +08:00
wangxiaoshuang 58141aaca9 中心调研已废除禁用审批
continuous-integration/drone/push Build is passing Details
2025-01-07 15:50:29 +08:00
wangxiaoshuang 17b868e7ed 版本记录lili版本改为非必填
continuous-integration/drone/push Build is passing Details
2025-01-07 13:54:10 +08:00
wangxiaoshuang bbc4da7b9e 质疑弹框用户名修改为姓名
continuous-integration/drone/push Build is passing Details
2025-01-07 13:12:15 +08:00
wangxiaoshuang c14079efe3 1
continuous-integration/drone/push Build is passing Details
2025-01-07 11:15:29 +08:00
wangxiaoshuang ecf5119269 1
continuous-integration/drone/push Build is passing Details
2025-01-07 10:54:05 +08:00
wangxiaoshuang b35ff2b7dc 质疑弹框用户名修改为姓名
continuous-integration/drone/push Build is running Details
2025-01-07 10:51:23 +08:00
wangxiaoshuang bae5b9c51c 导出更改
continuous-integration/drone/push Build is passing Details
2025-01-07 10:23:34 +08:00
wangxiaoshuang be5b9efa7b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-01-06 15:37:00 +08:00
wangxiaoshuang efab56f6bd 项目添加外部人员角色禁用提示国际化 2025-01-06 15:36:51 +08:00
caiyiling a239bccc90 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-06 15:28:02 +08:00
caiyiling 7dd15434bf 导出配置更改 2025-01-06 15:27:26 +08:00
wangxiaoshuang 437b4377ed 项目添加外部人员角色禁用提示国际化
continuous-integration/drone/push Build is running Details
2025-01-06 15:23:58 +08:00
wangxiaoshuang 7229bc65a9 mfa提示文字样式修改
continuous-integration/drone/push Build is passing Details
2025-01-06 15:00:29 +08:00
wangxiaoshuang bf95ea96e2 MFA验证重发
continuous-integration/drone/push Build is passing Details
2025-01-06 14:51:06 +08:00
wangxiaoshuang 013a657f78 系统文档签署后,已签署统计数未刷新
continuous-integration/drone/push Build is passing Details
2025-01-06 14:18:47 +08:00
wangxiaoshuang 8d4e9368c6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-01-06 14:08:33 +08:00
wangxiaoshuang d71fff7393 1 2025-01-06 14:08:25 +08:00
caiyiling d243d3cd11 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-06 14:01:49 +08:00
caiyiling 221ad89fd4 保存肝分段标记逻辑更改 2025-01-06 14:01:08 +08:00
wangxiaoshuang af42a3aec0 系统文档签署后,统计数未刷新
continuous-integration/drone/push Build is passing Details
2025-01-06 13:49:19 +08:00
wangxiaoshuang b0529dca5f 添加项目邮件模板时,收件人过滤条件去除RC和admin
continuous-integration/drone/push Build is passing Details
2025-01-06 13:19:51 +08:00
caiyiling 17ee60de81 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-06 10:58:40 +08:00
caiyiling b9ef4fd3f3 阅片交互更改及阅片标准导出配置更改 2025-01-06 10:57:44 +08:00
wangxiaoshuang 252333ea5b 邮件在项目中不能配置问题
continuous-integration/drone/push Build is passing Details
2025-01-06 10:10:03 +08:00
caiyiling a5445804e2 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-03 17:41:27 +08:00
caiyiling 0cabf49c43 报表导出更改 2025-01-03 17:41:11 +08:00
wangxiaoshuang 5ee7ba9820 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-01-03 17:05:47 +08:00
wangxiaoshuang 4f2419fe03 项目添加人员账号角色禁用增加提示 2025-01-03 17:05:43 +08:00
caiyiling 28bb98099c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2025-01-03 17:02:29 +08:00
caiyiling 5963fc629d 保存标记时优化处理 2025-01-03 17:01:33 +08:00
wangxiaoshuang 44feb21f63 中心调研弹窗
continuous-integration/drone/push Build is passing Details
2025-01-03 13:57:25 +08:00
wangxiaoshuang 343813158f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-01-03 11:54:19 +08:00
wangxiaoshuang 5e80fe2c3f 1 2025-01-03 11:54:09 +08:00
caiyiling 2e8095939b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2025-01-03 10:23:42 +08:00
caiyiling b0dc5400aa Lugano脾脏测量bug修复 2025-01-03 10:23:09 +08:00
wangxiaoshuang 7f18e717b7 1
continuous-integration/drone/push Build is failing Details
2025-01-03 09:47:57 +08:00
wangxiaoshuang 6e66b77857 MFA验证登录逻辑修改
continuous-integration/drone/push Build is running Details
2025-01-03 09:42:47 +08:00
caiyiling 5328217853 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2025-01-03 09:38:14 +08:00
caiyiling 0f4819f5db 肝脏分段平均值更改 2025-01-03 09:37:45 +08:00
wangxiaoshuang 907371b693 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2025-01-03 09:19:12 +08:00
wangxiaoshuang f65042a5c2 MFA验证 2025-01-03 09:19:07 +08:00
caiyiling 518ce72fd2 阅片接口更改
continuous-integration/drone/push Build is passing Details
2025-01-02 16:59:29 +08:00
caiyiling ba54da2814 阅片接口更改
continuous-integration/drone/push Build is passing Details
2025-01-02 15:43:55 +08:00
caiyiling d381b10bcd CDISC导出配置更改
continuous-integration/drone/push Build is passing Details
2025-01-02 15:36:00 +08:00
caiyiling d127637922 保存肝脏分段信息接口更改
continuous-integration/drone/push Build is passing Details
2025-01-02 14:50:22 +08:00
caiyiling 0e0c2ca55d 肝脏分段标注保存接口更改
continuous-integration/drone/push Build is passing Details
2025-01-02 14:37:26 +08:00
caiyiling 98502230c3 阅片跟踪页报表导出更改
continuous-integration/drone/push Build is passing Details
2025-01-02 13:49:43 +08:00
caiyiling 2b987fb1ae 报表导出配置及阅片bug修复
continuous-integration/drone/push Build is passing Details
2025-01-02 10:57:58 +08:00
caiyiling f1dee25987 核医学标准添加融合演示案例
continuous-integration/drone/push Build encountered an error Details
2025-01-02 09:18:20 +08:00
wangxiaoshuang 8799431f7a 中心调研登录问题解决
continuous-integration/drone/push Build is passing Details
2024-12-31 18:02:59 +08:00
wangxiaoshuang a8fe3d6073 项目添加人员角色去除已禁用角色
continuous-integration/drone/push Build is passing Details
2024-12-31 10:29:44 +08:00
wangxiaoshuang 3578882ec0 项目中所有pm角色禁止禁用,所有包含pm账号的禁止退出
continuous-integration/drone/push Build is passing Details
2024-12-31 10:11:32 +08:00
caiyiling d5c9298aab 阅片报告页更改
continuous-integration/drone/push Build is passing Details
2024-12-30 16:57:02 +08:00
caiyiling 59df7214d4 MRI-PDFF标准交互优化
continuous-integration/drone/push Build is passing Details
2024-12-30 16:21:32 +08:00
caiyiling 6c50257972 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-12-30 15:58:55 +08:00
caiyiling 58b8cf1391 系统标准配置及MRI-PDFF交互更改 2024-12-30 15:58:23 +08:00
wangxiaoshuang 1f6ee08a8b 用户角色编辑修改
continuous-integration/drone/push Build is passing Details
2024-12-30 15:42:29 +08:00
wangxiaoshuang c5fb53a05f 1
continuous-integration/drone/push Build is passing Details
2024-12-30 15:20:37 +08:00
wangxiaoshuang 24e05ebc3e 登录日志修改
continuous-integration/drone/push Build is passing Details
2024-12-30 14:18:41 +08:00
wangxiaoshuang a78d848424 管理端用户切换角色
continuous-integration/drone/push Build is passing Details
2024-12-30 13:30:10 +08:00
wangxiaoshuang 75f3b37c05 仲裁规则配置需要调整
continuous-integration/drone/push Build is passing Details
2024-12-30 13:18:19 +08:00
wangxiaoshuang ca4f2c4a8e 登录日志详情弹框样式修改 2024-12-30 13:15:50 +08:00
wangxiaoshuang 4defa157ee 临床数据上传时,匹配符未替换
continuous-integration/drone/push Build is passing Details
2024-12-30 09:35:10 +08:00
wangxiaoshuang 13ba919484 按钮位置调整
continuous-integration/drone/push Build is passing Details
2024-12-27 18:02:18 +08:00
wangxiaoshuang bf407a49fd 1
continuous-integration/drone/push Build is passing Details
2024-12-27 17:22:23 +08:00
wangxiaoshuang 3c50254a2d 切换角色样式调整
continuous-integration/drone/push Build is passing Details
2024-12-27 16:40:07 +08:00
wangxiaoshuang 41ac3d562a 用户列表时间查询默认值
continuous-integration/drone/push Build is passing Details
2024-12-27 16:24:43 +08:00
wangxiaoshuang d790a95952 新增、编辑角色时去除RC和Dash
continuous-integration/drone/push Build is running Details
2024-12-27 16:21:01 +08:00
wangxiaoshuang 328359dfde 登录ip不一致提示
continuous-integration/drone/push Build is passing Details
2024-12-27 14:49:58 +08:00
wangxiaoshuang 1286cd1212 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is failing Details
2024-12-27 11:49:00 +08:00
wangxiaoshuang f739563fe9 外部人员发送邮件接口添加UserTypeId参数 2024-12-27 11:48:49 +08:00
wangxiaoshuang 2f4ace45b8 用户列表新增最后一次修改密码字段 2024-12-27 11:48:22 +08:00
caiyiling 407f0b85d2 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-12-27 10:53:13 +08:00
caiyiling 3052b269e9 MRI-PDFF阅片标准添加国际化标识及报告更改 2024-12-27 10:52:18 +08:00
wangxiaoshuang a7c3bf09f8 登录日志
continuous-integration/drone/push Build is passing Details
2024-12-27 10:29:45 +08:00
wangxiaoshuang 65d9c7b711 管理端登录日志详情
continuous-integration/drone/push Build is passing Details
2024-12-26 17:55:11 +08:00
wangxiaoshuang 3ca1e9d8ed 登录存储userId
continuous-integration/drone/push Build is passing Details
2024-12-26 17:17:59 +08:00
caiyiling f27fda4a5f MRI-PDFF标准阅片更改
continuous-integration/drone/push Build is passing Details
2024-12-26 16:20:24 +08:00
caiyiling 27352f572c 1
continuous-integration/drone/push Build is passing Details
2024-12-26 16:10:19 +08:00
caiyiling 47c6b30d4a Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2024-12-26 16:07:52 +08:00
caiyiling 91bd50d565 MRI-PDFF标准阅片时不可测量时,系统自动清空测量值及标注 2024-12-26 16:06:53 +08:00
wangxiaoshuang d1ed8b39f0 首次登录修改密码去除调用logout接口
continuous-integration/drone/push Build is passing Details
2024-12-26 15:52:40 +08:00
wangxiaoshuang 3925652428 登录禁用的角色置灰
continuous-integration/drone/push Build is passing Details
2024-12-26 15:19:39 +08:00
wangxiaoshuang 37f8f2fff1 项目配置检查技术选择修改
continuous-integration/drone/push Build is passing Details
2024-12-26 15:11:38 +08:00
wangxiaoshuang 32551e3faa 项目配置检查技术选择修改
continuous-integration/drone/push Build is passing Details
2024-12-26 14:55:08 +08:00
wangxiaoshuang 43f99b02c4 用户角色切换刷新问题
continuous-integration/drone/push Build is passing Details
2024-12-26 14:37:27 +08:00
wangxiaoshuang 9c22809bae 中心调研表二维码下载名称变更
continuous-integration/drone/push Build is passing Details
2024-12-26 14:18:15 +08:00
wangxiaoshuang be9e78ec73 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-12-26 14:13:29 +08:00
wangxiaoshuang d645df58c2 管理端用户修改角色 2024-12-26 14:13:20 +08:00
caiyiling 5d9adab706 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-12-26 14:07:56 +08:00
caiyiling 291f9b5d66 1 2024-12-26 14:07:21 +08:00
wangxiaoshuang 5dedcbc2ef 影像上传提示
continuous-integration/drone/push Build is passing Details
2024-12-26 13:53:52 +08:00
wangxiaoshuang 940a860352 退出登录接口新增参数IdentityUserId
continuous-integration/drone/push Build is passing Details
2024-12-26 13:29:02 +08:00
wangxiaoshuang 9cd540d1ec 切换角色跳转页面问题
continuous-integration/drone/push Build is passing Details
2024-12-26 12:29:55 +08:00
wangxiaoshuang 9e8d537358 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-12-26 11:03:12 +08:00
wangxiaoshuang 7882c9b631 链接跳转新增账号修改 2024-12-26 11:02:58 +08:00
caiyiling 5dd1935997 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-12-26 10:00:49 +08:00
caiyiling 47d60769be 新增MRI-PDFF阅片标准 2024-12-26 09:58:42 +08:00
wangxiaoshuang 8225eacb7e 个人中心修改信息更换接口
continuous-integration/drone/push Build is passing Details
2024-12-25 17:50:15 +08:00
wangxiaoshuang 57a8bb4e24 中心添加AE标题修改
continuous-integration/drone/push Build is passing Details
2024-12-25 16:53:13 +08:00
wangxiaoshuang 36ffd8b371 中心列表字段修改
continuous-integration/drone/push Build is passing Details
2024-12-25 16:24:21 +08:00
wangxiaoshuang 7fc6f4494b 1
continuous-integration/drone/push Build is passing Details
2024-12-25 16:08:42 +08:00
wangxiaoshuang 9d3ba7eb57 1
continuous-integration/drone/push Build is passing Details
2024-12-25 15:55:36 +08:00
wangxiaoshuang 7ed4dd7e24 1
continuous-integration/drone/push Build is passing Details
2024-12-25 14:51:36 +08:00
wangxiaoshuang b233535d95 项目角色状态修改
continuous-integration/drone/push Build is running Details
2024-12-25 14:47:12 +08:00
wangxiaoshuang 9bdb8f64b3 1
continuous-integration/drone/push Build is passing Details
2024-12-25 14:10:31 +08:00
wangxiaoshuang f637f746cb 重置密码
continuous-integration/drone/push Build is passing Details
2024-12-25 13:27:31 +08:00
wangxiaoshuang dec01d779d 编辑用户角色
continuous-integration/drone/push Build is passing Details
2024-12-25 11:42:11 +08:00
wangxiaoshuang 7363b0049d 新增、编辑角色
continuous-integration/drone/push Build is passing Details
2024-12-25 11:23:00 +08:00
wangxiaoshuang a95a129dde 项目内切换角色
continuous-integration/drone/push Build is passing Details
2024-12-24 16:21:23 +08:00
wangxiaoshuang 177510643d 分角色登录
continuous-integration/drone/push Build is passing Details
2024-12-23 18:05:21 +08:00
wangxiaoshuang eeac5b76c4 分角色登录
continuous-integration/drone/push Build is passing Details
2024-12-23 17:23:51 +08:00
wangxiaoshuang a17359a56e 密码输入问题
continuous-integration/drone/push Build is passing Details
2024-12-23 16:12:03 +08:00
wangxiaoshuang 28c7cf7d67 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-12-23 13:59:40 +08:00
wangxiaoshuang d9091fbb79 SPM/CPM增加 流程审批与否的控制 2024-12-23 13:59:35 +08:00
caiyiling 7e52005dab Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-12-23 13:35:06 +08:00
caiyiling 5866535fb5 系统标准配置更改 2024-12-23 13:34:46 +08:00
wangxiaoshuang 862c6d64cc 简历医院信息维护
continuous-integration/drone/push Build is passing Details
2024-12-23 13:13:44 +08:00
wangxiaoshuang 2c0c2e8111 培训文件显示创建时间,不展示更新时间
continuous-integration/drone/push Build is passing Details
2024-12-20 11:03:46 +08:00
wangxiaoshuang c24c98b334 列表label名修改
continuous-integration/drone/push Build is passing Details
2024-12-19 11:45:21 +08:00
caiyiling 97caeae753 系统标准配置更改
continuous-integration/drone/push Build is passing Details
2024-12-19 11:02:34 +08:00
caiyiling 6725f6e276 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-12-18 18:05:54 +08:00
caiyiling 38ad4e72a2 系统标准配置更改 2024-12-18 18:05:28 +08:00
wangxiaoshuang c9c4826274 对于DICOM和非DICOM的Tab可以根据配置来控制显示
continuous-integration/drone/push Build is passing Details
2024-12-18 17:08:27 +08:00
wangxiaoshuang 4f1fdb185f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build encountered an error Details
2024-12-10 19:22:45 +08:00
wangxiaoshuang feb65ae0cd 术语配置请求页面去除白名单 2024-12-10 19:22:33 +08:00
caiyiling 6ecce41b35 1
continuous-integration/drone/push Build is passing Details
2024-12-06 16:35:23 +08:00
caiyiling 3a20586609 Dicom字典渲染更改
continuous-integration/drone/push Build is running Details
2024-12-06 16:34:40 +08:00
wangxiaoshuang b1d707a7dd 临床数据问题年龄连接符修改
continuous-integration/drone/push Build is passing Details
2024-12-06 11:22:57 +08:00
wangxiaoshuang 51101748b8 影像质疑临床数据取消按钮屏蔽
continuous-integration/drone/push Build is passing Details
2024-12-05 17:35:26 +08:00
wangxiaoshuang 5fb085b6d3 影像质疑临床数据问题
continuous-integration/drone/push Build is passing Details
2024-12-05 17:13:32 +08:00
caiyiling 0aaea5a325 阅片页面临床数据预览样式更改
continuous-integration/drone/push Build is passing Details
2024-12-05 17:01:14 +08:00
wangxiaoshuang e57d03a040 受试者级别添加访视级别的自定义
continuous-integration/drone/push Build is passing Details
2024-12-05 13:33:22 +08:00
wangxiaoshuang 7a07172c23 项目切换搜索增加实验名称搜索
continuous-integration/drone/push Build is passing Details
2024-12-04 13:28:49 +08:00
wangxiaoshuang 4e06b5ef87 简历时间选择、输入国际化、其它选项国际化
continuous-integration/drone/push Build is passing Details
2024-12-04 11:31:00 +08:00
wangxiaoshuang 5e520a94c1 国际化修改
continuous-integration/drone/push Build is passing Details
2024-12-03 16:59:19 +08:00
wangxiaoshuang c2be30632a 简历采集页国际化修改
continuous-integration/drone/push Build is passing Details
2024-12-03 10:41:55 +08:00
caiyiling 443ee66e33 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-12-02 16:40:02 +08:00
caiyiling 95f210a90d 非Dicom阅片临床数据展示方式更改 2024-12-02 16:39:25 +08:00
wangxiaoshuang 25336491ac spm预览简历盲化
continuous-integration/drone/push Build is passing Details
2024-12-02 16:06:58 +08:00
wangxiaoshuang 581cd2c9c1 简历概述更改
continuous-integration/drone/push Build is passing Details
2024-12-02 15:40:14 +08:00
wangxiaoshuang f0b1d8f3c9 锁定问题解决
continuous-integration/drone/push Build is passing Details
2024-11-29 18:01:58 +08:00
wangxiaoshuang 73f12173f5 简历进修培训医院显示国际化
continuous-integration/drone/push Build is passing Details
2024-11-29 09:59:46 +08:00
wangxiaoshuang 2e30461e2e 简历上传文件部分国际化
continuous-integration/drone/push Build is passing Details
2024-11-29 09:34:18 +08:00
wangxiaoshuang 2d91053668 1
continuous-integration/drone/push Build is passing Details
2024-11-29 09:02:10 +08:00
wangxiaoshuang 5b90b2d155 简历国际化添加
continuous-integration/drone/push Build is passing Details
2024-11-28 18:03:19 +08:00
wangxiaoshuang 33f920e7bc 用户列表删除功能屏蔽
continuous-integration/drone/push Build is passing Details
2024-11-28 14:03:23 +08:00
wangxiaoshuang 45aa1ba24a 简历临床试验其他阅片标准默认id修改
continuous-integration/drone/push Build is passing Details
2024-11-28 11:39:44 +08:00
wangxiaoshuang d47f0811cb crc上传列表提示修改
continuous-integration/drone/push Build is passing Details
2024-11-26 10:37:01 +08:00
wangxiaoshuang e336d90f45 简历社会兼职样式修改
continuous-integration/drone/push Build is passing Details
2024-11-26 10:08:13 +08:00
wangxiaoshuang e723d345d7 简历右侧菜单修改
continuous-integration/drone/push Build is passing Details
2024-11-26 09:04:45 +08:00
wangxiaoshuang cb40a8e880 简历样式调整
continuous-integration/drone/push Build is passing Details
2024-11-25 17:52:20 +08:00
wangxiaoshuang b166818131 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-11-25 17:42:52 +08:00
wangxiaoshuang dafc92d4b1 1 2024-11-25 17:42:42 +08:00
caiyiling 8cf047a854 临床数据显示更改
continuous-integration/drone/push Build is passing Details
2024-11-25 17:28:08 +08:00
caiyiling a9f8f3a1da Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-11-25 16:58:51 +08:00
caiyiling 48335b4c2a 获取像素信息bug修复 2024-11-25 16:58:28 +08:00
wangxiaoshuang 5784a4eb93 1
continuous-integration/drone/push Build is passing Details
2024-11-25 16:39:30 +08:00
wangxiaoshuang 2f875d94c7 1
continuous-integration/drone/push Build is passing Details
2024-11-25 16:00:08 +08:00
wangxiaoshuang 05c6a9a8fc 提交访视时,签名时的说明中的临床数据名称需要与实际配置的临床数据名称一致
continuous-integration/drone/push Build is running Details
2024-11-25 15:56:28 +08:00
wangxiaoshuang 9c5e3570b5 简历国际化
continuous-integration/drone/push Build is passing Details
2024-11-25 15:37:45 +08:00
wangxiaoshuang 1be88b66af 1
continuous-integration/drone/push Build is passing Details
2024-11-25 13:13:06 +08:00
wangxiaoshuang 12e93fbd15 简历设置更改为菜单、预览部分title无数据显示暂无
continuous-integration/drone/push Build is passing Details
2024-11-25 11:48:14 +08:00
wangxiaoshuang ac33e9268d 去除部分排序 2024-11-25 11:47:37 +08:00
wangxiaoshuang 81d9f2ea7b 简历其他相关经历项目和系统区分
continuous-integration/drone/push Build is passing Details
2024-11-22 17:43:05 +08:00
wangxiaoshuang 9b47ae188c 简历部分校验国际化
continuous-integration/drone/push Build is passing Details
2024-11-22 17:16:58 +08:00
wangxiaoshuang de400c66d8 简历科研课题样式改动
continuous-integration/drone/push Build is passing Details
2024-11-22 16:29:01 +08:00
wangxiaoshuang 261d1468e7 1
continuous-integration/drone/push Build is passing Details
2024-11-22 11:34:23 +08:00
wangxiaoshuang 080e858ae0 1
continuous-integration/drone/push Build is passing Details
2024-11-22 11:25:53 +08:00
wangxiaoshuang 55d8db3369 1
continuous-integration/drone/push Build is passing Details
2024-11-22 10:40:50 +08:00
wangxiaoshuang 056aa80097 简历部分问题修改
continuous-integration/drone/push Build is passing Details
2024-11-22 10:22:58 +08:00
wangxiaoshuang aeeb13d035 盲化学术成果长度校验改为4000
continuous-integration/drone/push Build is passing Details
2024-11-22 09:08:43 +08:00
wangxiaoshuang d82e009206 列表排序调整
continuous-integration/drone/push Build is passing Details
2024-11-21 17:19:41 +08:00
wangxiaoshuang 0b09bcb702 1
continuous-integration/drone/push Build is passing Details
2024-11-21 16:55:21 +08:00
wangxiaoshuang 30ee433de3 稽查简历预览盲化
continuous-integration/drone/push Build is passing Details
2024-11-21 16:50:18 +08:00
wangxiaoshuang 3783f3cea4 筛选阅片人简历修改页面变更、概述变更为模板、简历采集邮件发送支持多邮箱
continuous-integration/drone/push Build is passing Details
2024-11-21 16:30:38 +08:00
wangxiaoshuang 2aa98eb68b 中心调研添加排序
continuous-integration/drone/push Build is passing Details
2024-11-21 11:31:47 +08:00
wangxiaoshuang 486e7db9f1 阅片分配增加排序
continuous-integration/drone/push Build is passing Details
2024-11-21 09:47:08 +08:00
wangxiaoshuang b2f0923df2 简历填写信息国际化
continuous-integration/drone/push Build is failing Details
2024-11-20 15:34:17 +08:00
wangxiaoshuang b64809a4d4 简历编辑页PM可上传顾问协议、确认书,可进行设置
continuous-integration/drone/push Build is passing Details
2024-11-20 15:05:03 +08:00
wangxiaoshuang 3a81bad5db 论著开头空格问题
continuous-integration/drone/push Build is passing Details
2024-11-19 16:00:06 +08:00
wangxiaoshuang f8ddeb311c 简历输入框限制、部分样式调整
continuous-integration/drone/push Build is passing Details
2024-11-19 15:16:00 +08:00
wangxiaoshuang 7c9207db57 重阅弹框遮挡问题
continuous-integration/drone/push Build is passing Details
2024-11-19 10:55:45 +08:00
wangxiaoshuang 174f4b0c4b 超长字段输入样式调整
continuous-integration/drone/push Build is passing Details
2024-11-18 17:57:20 +08:00
wangxiaoshuang 53f0462108 简历项目相关修改
continuous-integration/drone/push Build is passing Details
2024-11-18 17:21:05 +08:00
caiyiling 6d7b991482 自定义标准标注更改
continuous-integration/drone/push Build is passing Details
2024-11-18 16:57:43 +08:00
caiyiling cbec90d0bf 1
continuous-integration/drone/push Build is passing Details
2024-11-18 16:34:24 +08:00
caiyiling bc3f475954 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2024-11-18 16:31:39 +08:00
caiyiling 4c652a91fc 修改DICOM图像像素间距的计算方法 2024-11-18 16:29:44 +08:00
wangxiaoshuang f7e8d3b4dd 简历预览样式修改
continuous-integration/drone/push Build is passing Details
2024-11-18 15:56:13 +08:00
wangxiaoshuang b30644ddd2 1
continuous-integration/drone/push Build is passing Details
2024-11-18 14:39:49 +08:00
wangxiaoshuang 181a8bddf4 简历概述超出换行问题
continuous-integration/drone/push Build is passing Details
2024-11-18 13:17:57 +08:00
wangxiaoshuang 4b353bab8f 阅片单元配置中,阅片平台美国应该是LiLi 2024-11-18 13:17:29 +08:00
wangxiaoshuang d9de0f22cf 简历采用页面接口报错问题
continuous-integration/drone/push Build is passing Details
2024-11-18 11:47:39 +08:00
wangxiaoshuang 6cb544117c 影像质控拍片日期修改
continuous-integration/drone/push Build is passing Details
2024-11-18 10:46:49 +08:00
wangxiaoshuang 629816217c 一致性核查检查日期改为拍片日期
continuous-integration/drone/push Build is passing Details
2024-11-18 09:33:47 +08:00
wangxiaoshuang ab527e2357 配置邮件管理列表去除附件
continuous-integration/drone/push Build is passing Details
2024-11-18 09:13:21 +08:00
wangxiaoshuang b076c1edbd 锁定问题解决
continuous-integration/drone/push Build is passing Details
2024-11-14 17:05:38 +08:00
wangxiaoshuang fbbcad359c 1
continuous-integration/drone/push Build is passing Details
2024-11-14 13:14:31 +08:00
wangxiaoshuang 24500fc1a1 术语配置为空时报错
continuous-integration/drone/push Build is passing Details
2024-11-13 14:05:53 +08:00
wangxiaoshuang e388ea2543 配置确认页面展示术语配置
continuous-integration/drone/push Build is passing Details
2024-11-13 13:30:31 +08:00
caiyiling 4b406f96fc Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-11-13 09:38:05 +08:00
caiyiling 4b31cf1196 稽查更改 2024-11-13 09:37:45 +08:00
wangxiaoshuang 4c1d1fb9b1 1
continuous-integration/drone/push Build is passing Details
2024-11-12 17:56:50 +08:00
wangxiaoshuang 2952652dbc Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-11-12 17:09:31 +08:00
wangxiaoshuang 485a53011d 账号列表登录提示改为90天 2024-11-12 17:09:09 +08:00
caiyiling 7d9cededbf Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-11-12 16:25:15 +08:00
caiyiling b691219db8 重阅跟踪更改 2024-11-12 16:24:49 +08:00
wangxiaoshuang f34faa7db3 简历问题修复
continuous-integration/drone/push Build is passing Details
2024-11-12 14:59:46 +08:00
wangxiaoshuang ede1455bc4 1
continuous-integration/drone/push Build is passing Details
2024-11-12 14:18:00 +08:00
wangxiaoshuang 1e36464182 邮件模板新增查询条件
continuous-integration/drone/push Build is passing Details
2024-11-12 14:02:42 +08:00
wangxiaoshuang 6a52f9571d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is running Details
2024-11-12 13:59:40 +08:00
wangxiaoshuang bd85918f8d 简历预览适应症显示问题 2024-11-12 13:59:27 +08:00
caiyiling 23069c7ef7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-11-12 13:19:36 +08:00
caiyiling d866153ccc 非dicom阅片更改 2024-11-12 13:19:12 +08:00
wangxiaoshuang cb4d44ef74 1
continuous-integration/drone/push Build is passing Details
2024-11-12 11:47:24 +08:00
wangxiaoshuang e99e69d0dd 1
continuous-integration/drone/push Build is passing Details
2024-11-12 11:20:15 +08:00
wangxiaoshuang 55bb2493e4 手机号校验修改
continuous-integration/drone/push Build is passing Details
2024-11-12 11:13:45 +08:00
caiyiling 041c23daf6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-11-12 10:50:34 +08:00
caiyiling 7c01819ced 自动计算bug修复 2024-11-12 10:50:15 +08:00
wangxiaoshuang ff97099c3f 简历预览文件方式变更
continuous-integration/drone/push Build is passing Details
2024-11-12 10:32:58 +08:00
wangxiaoshuang bff239179f 简历列表按钮调整
continuous-integration/drone/push Build is passing Details
2024-11-12 10:13:01 +08:00
caiyiling 237e3eed60 1
continuous-integration/drone/push Build is passing Details
2024-11-11 16:34:38 +08:00
caiyiling 1bc78dffc1 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-11-11 15:52:01 +08:00
caiyiling e21d3b331a 自定义标准与运算更改 2024-11-11 15:51:32 +08:00
wangxiaoshuang 6992dc6a2b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-11-11 15:24:26 +08:00
wangxiaoshuang d53130e994 1 2024-11-11 15:24:19 +08:00
caiyiling 631c903135 1
continuous-integration/drone/push Build is running Details
2024-11-11 15:17:57 +08:00
caiyiling 994c97479b 自动分类补充数值类型
continuous-integration/drone/push Build is running Details
2024-11-11 15:16:14 +08:00
caiyiling 33b172fb66 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2024-11-11 15:11:58 +08:00
caiyiling 01f6049f21 1 2024-11-11 15:11:40 +08:00
wangxiaoshuang 07fd3ab863 项目中添加模板时,搜索条件展示的用户类型只显示与业务相关的用户类型
continuous-integration/drone/push Build is passing Details
2024-11-11 15:05:39 +08:00
caiyiling c51dedbd1e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-11-11 14:41:38 +08:00
caiyiling 5619412556 自定义标准运算类型补充 2024-11-11 14:40:21 +08:00
wangxiaoshuang 34267bc007 附件浏览组件统一
continuous-integration/drone/push Build is passing Details
2024-11-11 13:24:28 +08:00
wangxiaoshuang 286ce9656c 休假数据计算
continuous-integration/drone/push Build is failing Details
2024-11-11 11:27:10 +08:00
wangxiaoshuang db856c6aa9 支付信息数据校验
continuous-integration/drone/push Build is passing Details
2024-11-11 11:08:16 +08:00
wangxiaoshuang 682d07cc6d 编辑历史人员的临床试验经历报错
continuous-integration/drone/push Build is passing Details
2024-11-11 10:42:44 +08:00
wangxiaoshuang af27788e4c 简历中英文管理
continuous-integration/drone/push Build is running Details
2024-11-11 10:40:24 +08:00
caiyiling bc6f15388d 自动分类问题更改
continuous-integration/drone/push Build is passing Details
2024-11-08 17:47:01 +08:00
caiyiling 6714d2a3c2 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-11-08 10:17:39 +08:00
caiyiling 76616e257f 自定义全局阅片更改 2024-11-08 10:17:13 +08:00
wangxiaoshuang 1d35efd4aa 术语配置默认同步字典
continuous-integration/drone/push Build is passing Details
2024-11-07 16:04:26 +08:00
wangxiaoshuang de0051a8c3 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-11-07 15:59:03 +08:00
wangxiaoshuang 8c5297e401 术语配置修改 2024-11-07 15:58:42 +08:00
caiyiling 55b39a6b29 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-11-07 15:07:14 +08:00
caiyiling ceb1425908 自定义保存表格问题更改 2024-11-07 15:06:52 +08:00
wangxiaoshuang 093cffa298 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-11-07 13:35:01 +08:00
wangxiaoshuang eb5561b611 术语配置 2024-11-07 13:34:44 +08:00
caiyiling cea867bdaf Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-11-07 11:35:58 +08:00
caiyiling d1958e3bef 系统标准预览更改 2024-11-07 11:35:32 +08:00
wangxiaoshuang a79796df4c 简历bug修复
continuous-integration/drone/push Build is passing Details
2024-11-06 14:40:46 +08:00
wangxiaoshuang 327623e8b1 1
continuous-integration/drone/push Build is passing Details
2024-11-06 14:22:07 +08:00
wangxiaoshuang 19c25d369e 简历增加性别展示
continuous-integration/drone/push Build is running Details
2024-11-06 14:19:53 +08:00
wangxiaoshuang ea9c1ca90d 邮件设置默认pd/入组添加
continuous-integration/drone/push Build is passing Details
2024-11-06 14:08:36 +08:00
wangxiaoshuang 9bd6c1f433 bug修复
continuous-integration/drone/push Build is passing Details
2024-11-06 09:13:37 +08:00
wangxiaoshuang 62d5b39036 术语配置测试
continuous-integration/drone/push Build is passing Details
2024-11-04 17:58:26 +08:00
wangxiaoshuang 03e390013e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-11-04 17:47:21 +08:00
wangxiaoshuang b65b93a5ab 简历预览区分系统、项目 2024-11-04 17:47:10 +08:00
caiyiling 94d626a453 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2024-11-04 17:46:34 +08:00
caiyiling 13d0f6d796 系统标准更改 2024-11-04 17:46:13 +08:00
wangxiaoshuang 0c90ffb514 1
continuous-integration/drone/push Build is passing Details
2024-11-04 17:32:46 +08:00
wangxiaoshuang 7a5693a468 1
continuous-integration/drone/push Build is passing Details
2024-11-04 17:20:23 +08:00
wangxiaoshuang b8baa1b5d8 1
continuous-integration/drone/push Build is running Details
2024-11-04 17:15:25 +08:00
wangxiaoshuang c02308dd23 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-11-04 16:38:06 +08:00
wangxiaoshuang 49a915fb89 工作社会兼职保存 2024-11-04 16:37:00 +08:00
caiyiling 07b5296a4b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2024-11-04 16:34:52 +08:00
caiyiling 5eb00c4111 问题标识添加清除按钮 2024-11-04 16:34:20 +08:00
wangxiaoshuang 39b5333f9c 支付信息保存
continuous-integration/drone/push Build is passing Details
2024-11-04 15:46:10 +08:00
wangxiaoshuang 79473f6638 阅片人列表操作栏固定
continuous-integration/drone/push Build is passing Details
2024-11-04 15:24:37 +08:00
wangxiaoshuang 7952c83b52 协议国际化
continuous-integration/drone/push Build is passing Details
2024-11-04 14:29:48 +08:00
wangxiaoshuang 9671722e1a GCP证书保存新增字段
continuous-integration/drone/push Build is running Details
2024-11-04 14:28:02 +08:00
wangxiaoshuang fe18b885f1 国际化
continuous-integration/drone/push Build is passing Details
2024-11-04 13:45:55 +08:00
wangxiaoshuang 25a3a0e371 概述与支付信息保存添加成功提示 2024-11-04 13:43:49 +08:00
wangxiaoshuang e947c99f71 1
continuous-integration/drone/push Build is passing Details
2024-11-04 13:18:21 +08:00
wangxiaoshuang f672ac3500 项目阅片人新增问题修复
continuous-integration/drone/push Build is running Details
2024-11-04 13:14:15 +08:00
wangxiaoshuang 13418ddad3 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-11-04 11:39:57 +08:00
wangxiaoshuang 296a455f0d 1 2024-11-04 11:39:42 +08:00
caiyiling 31047f2e30 附件文件类型设置更改
continuous-integration/drone/push Build is passing Details
2024-11-04 11:30:26 +08:00
caiyiling a3e518d960 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-11-04 11:14:45 +08:00
caiyiling e326cba5e0 附件文件类型设置更改 2024-11-04 11:14:23 +08:00
wangxiaoshuang 8cbb7a8333 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is running Details
2024-11-04 11:10:49 +08:00
wangxiaoshuang 5c700f055f 邮件配置更改 2024-11-04 11:10:37 +08:00
caiyiling d292b655d3 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2024-11-04 11:08:50 +08:00
caiyiling ab362937f3 自定义标准附件上传更改 2024-11-04 11:08:32 +08:00
wangxiaoshuang a8d090e32c 邮件配置更改
continuous-integration/drone/push Build is running Details
2024-11-04 11:03:51 +08:00
caiyiling 716d0e3513 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-11-04 10:41:09 +08:00
caiyiling 8d84dde45e 自定义标准更改 2024-11-04 10:39:57 +08:00
wangxiaoshuang 6743811bd6 1
continuous-integration/drone/push Build is passing Details
2024-11-01 11:40:50 +08:00
wangxiaoshuang 71f856029c 测试禁止账号保存
continuous-integration/drone/push Build is passing Details
2024-11-01 11:23:35 +08:00
wangxiaoshuang 96d2a99f17 测试禁止账号保存
continuous-integration/drone/push Build is passing Details
2024-11-01 10:50:50 +08:00
wangxiaoshuang 7b7d4a7d6d 测试禁止账号保存
continuous-integration/drone/push Build is passing Details
2024-11-01 10:34:13 +08:00
wangxiaoshuang 0413a791c9 测试禁止账号保存
continuous-integration/drone/push Build is passing Details
2024-11-01 10:18:57 +08:00
wangxiaoshuang 8802e56549 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-11-01 10:09:56 +08:00
wangxiaoshuang 3f9edfa2a0 一致性分析导出 2024-11-01 10:09:45 +08:00
caiyiling eccf51cea9 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-11-01 09:42:51 +08:00
caiyiling 11627af629 pet-ct融合默认伪彩方案更改 2024-11-01 09:42:11 +08:00
wangxiaoshuang fadd24480d 1
continuous-integration/drone/push Build is passing Details
2024-10-31 14:15:59 +08:00
wangxiaoshuang 6b7d3da4a4 IQC质疑 字段优化】最新回复人 的取值改为 用户的姓名
continuous-integration/drone/push Build is passing Details
2024-10-31 13:58:53 +08:00
wangxiaoshuang 48ebd8e76d 访视-影像上传拍片日期字段优化
continuous-integration/drone/push Build is passing Details
2024-10-31 11:47:16 +08:00
caiyiling bb4193730e 表格问题自动计算更改
continuous-integration/drone/push Build is passing Details
2024-10-30 13:31:54 +08:00
caiyiling a19d756879 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-30 10:43:41 +08:00
caiyiling 94e924a753 分类问题补充属性 2024-10-30 10:43:10 +08:00
wangxiaoshuang 3633de8c35 简历临床试验经历添加适应症类型
continuous-integration/drone/push Build is passing Details
2024-10-30 10:32:42 +08:00
wangxiaoshuang 4400d31bca 项目配置新增邮件模板添加查询条件
continuous-integration/drone/push Build is passing Details
2024-10-30 09:54:43 +08:00
wangxiaoshuang 2a11d3f012 简历临床实验经历区分项目和系统
continuous-integration/drone/push Build is passing Details
2024-10-29 16:57:10 +08:00
wangxiaoshuang ae599f4ada Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-10-29 15:47:10 +08:00
wangxiaoshuang 19a6371008 国际化列表导出 2024-10-29 15:46:56 +08:00
caiyiling 7ebfcd0827 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-29 15:23:56 +08:00
caiyiling 0158ab2e96 表格问题运算类型更改 2024-10-29 15:23:34 +08:00
wangxiaoshuang ee9a30f6d0 1
continuous-integration/drone/push Build is passing Details
2024-10-29 14:43:00 +08:00
wangxiaoshuang 2d938d077e 简历部分接口添加项目id
continuous-integration/drone/push Build is passing Details
2024-10-29 14:16:30 +08:00
wangxiaoshuang 9f9255d315 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-10-29 13:50:48 +08:00
wangxiaoshuang 0624446d2c 简历增加假期新增、预览 2024-10-29 13:50:44 +08:00
caiyiling 0458b2d73d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-29 10:39:59 +08:00
caiyiling 1abb330d7d 1 2024-10-29 10:39:46 +08:00
wangxiaoshuang 7343036ebf 1
continuous-integration/drone/push Build is passing Details
2024-10-29 10:27:20 +08:00
caiyiling 5edf2f8790 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-29 09:41:08 +08:00
caiyiling fb4fc347f3 分类问题允许关联多个问题 2024-10-29 09:40:40 +08:00
wangxiaoshuang c1c6f5a6c7 简历部分问题修复
continuous-integration/drone/push Build is passing Details
2024-10-28 17:03:16 +08:00
caiyiling 7360be1726 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-28 15:48:09 +08:00
caiyiling ec8c9df6b6 自定义标准分类问题允许编辑 2024-10-28 15:47:46 +08:00
wangxiaoshuang c18587b4f5 简历部分弹框遮罩层遮挡问题
continuous-integration/drone/push Build is passing Details
2024-10-28 13:55:49 +08:00
wangxiaoshuang 7eff02eb9b 1
continuous-integration/drone/push Build is passing Details
2024-10-25 15:26:21 +08:00
wangxiaoshuang 4c8f2675ad 1
continuous-integration/drone/push Build is running Details
2024-10-25 15:22:54 +08:00
wangxiaoshuang 67dd01c0be 1
continuous-integration/drone/push Build is passing Details
2024-10-25 13:44:06 +08:00
wangxiaoshuang 925451ea65 账号列表展示账号最后一次登录时间
continuous-integration/drone/push Build is running Details
2024-10-25 13:42:49 +08:00
caiyiling 70fcd15ab7 自定义阅片更改
continuous-integration/drone/push Build is passing Details
2024-10-25 13:36:46 +08:00
caiyiling 9c156ec1e6 非dicom阅片更改
continuous-integration/drone/push Build is passing Details
2024-10-25 10:27:26 +08:00
caiyiling dd57f24996 1
continuous-integration/drone/push Build is passing Details
2024-10-24 18:04:27 +08:00
caiyiling cc520270ac Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-24 17:26:23 +08:00
caiyiling 9f9a799832 自动分类问题补充及预览更改 2024-10-24 17:25:34 +08:00
wangxiaoshuang 1422a6f406 系统发布页背景图替换
continuous-integration/drone/push Build is passing Details
2024-10-24 15:52:47 +08:00
wangxiaoshuang f7124d35b0 pm简历采集
continuous-integration/drone/push Build is passing Details
2024-10-24 15:27:42 +08:00
wangxiaoshuang fabd26536c 1
continuous-integration/drone/push Build is passing Details
2024-10-24 11:31:13 +08:00
wangxiaoshuang a83b094a46 pm简历新增tab
continuous-integration/drone/push Build is passing Details
2024-10-24 11:18:03 +08:00
wangxiaoshuang 6c46a58f15 邮件新增延迟字段
continuous-integration/drone/push Build is passing Details
2024-10-24 10:49:53 +08:00
wangxiaoshuang 6f6959627f ir个人中心添加简历入口
continuous-integration/drone/push Build is passing Details
2024-10-23 18:00:18 +08:00
caiyiling f1f27f405b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-23 16:53:28 +08:00
caiyiling 21a1eaf20a 1 2024-10-23 16:53:08 +08:00
wangxiaoshuang f7aaaf7900 简历接口对接
continuous-integration/drone/push Build is passing Details
2024-10-23 14:53:50 +08:00
caiyiling a3dcb7054a 表单样式更改
continuous-integration/drone/push Build is passing Details
2024-10-23 14:09:11 +08:00
caiyiling 917d32bf46 ecrf默认值更改
continuous-integration/drone/push Build is passing Details
2024-10-23 13:46:27 +08:00
caiyiling 99cd18c8e5 1
continuous-integration/drone/push Build is passing Details
2024-10-23 13:04:13 +08:00
caiyiling 58f223a028 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-23 11:14:00 +08:00
caiyiling 3c3a670ae4 标准配置更改 2024-10-23 11:13:28 +08:00
wangxiaoshuang b124178355 简历部分接口对接
continuous-integration/drone/push Build is passing Details
2024-10-23 10:12:55 +08:00
caiyiling 28be57dfee 导出标识根据标准过滤
continuous-integration/drone/push Build is failing Details
2024-10-22 17:41:36 +08:00
caiyiling 06c7398c1b 表格子问题添加导出标识
continuous-integration/drone/push Build is passing Details
2024-10-22 16:55:09 +08:00
caiyiling 11c7070799 系统配置bug更改
continuous-integration/drone/push Build is passing Details
2024-10-22 15:57:33 +08:00
caiyiling 0633e775d4 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-22 15:10:17 +08:00
caiyiling c18c083840 是否复制前值选项维护 2024-10-22 15:09:44 +08:00
wangxiaoshuang 20ff8d2a81 简历部分接口对接
continuous-integration/drone/push Build is running Details
2024-10-22 15:06:50 +08:00
wangxiaoshuang 6b1bfe0c0b 阅片跟踪导出
continuous-integration/drone/push Build is passing Details
2024-10-22 14:53:09 +08:00
caiyiling 5d13328c74 系统标准添加小结题型
continuous-integration/drone/push Build is passing Details
2024-10-22 14:48:12 +08:00
caiyiling bb830e2cb4 表格类型配置bug修复
continuous-integration/drone/push Build is passing Details
2024-10-22 14:28:27 +08:00
caiyiling ee4bd5ec8e ecrf配置更改
continuous-integration/drone/push Build is passing Details
2024-10-22 14:16:44 +08:00
caiyiling 86020e4f16 系统标准更改
continuous-integration/drone/push Build is passing Details
2024-10-22 13:46:20 +08:00
caiyiling d78ccb6e98 1
continuous-integration/drone/push Build is passing Details
2024-10-22 13:30:44 +08:00
caiyiling b23e9efe06 1
continuous-integration/drone/push Build is passing Details
2024-10-22 13:17:33 +08:00
caiyiling 14d1866138 1
continuous-integration/drone/push Build is running Details
2024-10-22 13:16:30 +08:00
caiyiling cc4afc8d37 选项类型默认值更改
continuous-integration/drone/push Build is passing Details
2024-10-22 11:13:28 +08:00
caiyiling 5a1b4b181a Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-22 10:12:43 +08:00
caiyiling fe8b0a524b ecrf配置页面优化 2024-10-22 10:12:18 +08:00
wangxiaoshuang d6861f400e 简历部分接口对接
continuous-integration/drone/push Build is passing Details
2024-10-21 17:55:57 +08:00
caiyiling 8281737ddc 阅片页上传下载页面信息更改
continuous-integration/drone/push Build is passing Details
2024-10-21 15:42:18 +08:00
caiyiling 9bfb233270 小结题型优化
continuous-integration/drone/push Build is passing Details
2024-10-21 15:24:25 +08:00
caiyiling bbc2d43335 阅片标准优化
continuous-integration/drone/push Build is passing Details
2024-10-21 14:55:26 +08:00
wangxiaoshuang 3694c51288 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-10-18 17:24:32 +08:00
wangxiaoshuang 219e39afb3 简历页新增支付方式 2024-10-18 17:24:26 +08:00
caiyiling e255f8c859 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-18 14:34:21 +08:00
caiyiling 4b84c7df3b 自动计算算法补充 2024-10-18 14:34:01 +08:00
wangxiaoshuang 9c98cfb668 1
continuous-integration/drone/push Build is passing Details
2024-10-18 14:07:36 +08:00
wangxiaoshuang bc15ac1cd3 事件列表新增创建时间
continuous-integration/drone/push Build is passing Details
2024-10-18 13:33:27 +08:00
wangxiaoshuang 6288770c26 1
continuous-integration/drone/push Build is passing Details
2024-10-18 11:08:59 +08:00
wangxiaoshuang 93c64e04f2 1
continuous-integration/drone/push Build is running Details
2024-10-18 11:08:22 +08:00
DESKTOP-6C3NK6N\WXS df638f5a73 pm新增简历采集功能
continuous-integration/drone/push Build is passing Details
2024-10-17 16:08:51 +08:00
caiyiling b0195b8d21 自定义阅片配置更改
continuous-integration/drone/push Build is passing Details
2024-10-17 15:39:34 +08:00
caiyiling f5954817fb Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-17 14:51:15 +08:00
caiyiling 77f8a80fd6 ecrf配置更改 2024-10-17 14:50:57 +08:00
DESKTOP-6C3NK6N\WXS 2b7a100d73 cron问题修复
continuous-integration/drone/push Build is passing Details
2024-10-17 13:57:30 +08:00
DESKTOP-6C3NK6N\WXS 07a4c66fcc 英文环境logo
continuous-integration/drone/push Build is passing Details
2024-10-17 09:46:06 +08:00
DESKTOP-6C3NK6N\WXS 143b6e9fc1 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is running Details
2024-10-16 16:26:08 +08:00
DESKTOP-6C3NK6N\WXS 6d943f94d8 1 2024-10-16 16:25:54 +08:00
caiyiling a6b68ea599 1
continuous-integration/drone/push Build is running Details
2024-10-16 16:22:02 +08:00
caiyiling 8c68866aca Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2024-10-16 16:21:19 +08:00
caiyiling ccdedbee2f 影像浏览页工具更改 2024-10-16 16:20:34 +08:00
DESKTOP-6C3NK6N\WXS 3b7ea6491e lili添加关于页面
continuous-integration/drone/push Build is passing Details
2024-10-16 16:13:19 +08:00
DESKTOP-6C3NK6N\WXS 12e1454be4 中心调研表权限问题
continuous-integration/drone/push Build is passing Details
2024-10-16 15:47:20 +08:00
DESKTOP-6C3NK6N\WXS 9582e0a5a7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is running Details
2024-10-16 15:41:21 +08:00
DESKTOP-6C3NK6N\WXS 9a77ce849b 简历预览页 2024-10-16 15:41:14 +08:00
DESKTOP-6C3NK6N\WXS 7beec24a7c 新增事件菜单 2024-10-16 15:41:01 +08:00
caiyiling a564225623 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-16 14:28:37 +08:00
caiyiling 8790c8f814 本地影像预览显示信息更改 2024-10-16 14:28:15 +08:00
DESKTOP-6C3NK6N\WXS 4c1ed950e5 简历新页面
continuous-integration/drone/push Build is passing Details
2024-10-15 17:50:15 +08:00
caiyiling 4f1e951a83 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-15 15:31:35 +08:00
caiyiling a3e544f6e4 阅片标准配置CRF更改 2024-10-15 15:30:36 +08:00
DESKTOP-6C3NK6N\WXS 292151f7e1 简历新页面
continuous-integration/drone/push Build is passing Details
2024-10-14 16:28:20 +08:00
DESKTOP-6C3NK6N\WXS c3b7fd7072 邮件管理默认排序修改
continuous-integration/drone/push Build is passing Details
2024-10-12 10:48:10 +08:00
DESKTOP-6C3NK6N\WXS 109470ca1a 邮件管理模板添加预览功能
continuous-integration/drone/push Build is passing Details
2024-10-12 10:31:36 +08:00
caiyiling 98c42c7b6a Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-10-12 09:14:15 +08:00
caiyiling 75ca85a994 阅片单元规则约束更改 2024-10-12 09:13:50 +08:00
DESKTOP-6C3NK6N\WXS e8f80646f1 预览高度调整
continuous-integration/drone/push Build is passing Details
2024-10-11 14:58:08 +08:00
DESKTOP-6C3NK6N\WXS bc70c64898 数据上传、导出模板列表添加预览功能
continuous-integration/drone/push Build is passing Details
2024-10-11 14:39:36 +08:00
DESKTOP-6C3NK6N\WXS d114690114 下载记录、接收记录、接收影像检查列表增加导出功能
continuous-integration/drone/push Build is passing Details
2024-10-11 10:47:12 +08:00
DESKTOP-6C3NK6N\WXS 705585da38 模板列表接口重复请求问题
continuous-integration/drone/push Build is passing Details
2024-10-10 13:57:30 +08:00
DESKTOP-6C3NK6N\WXS f58eb07323 历史文件大小为空时不显示
continuous-integration/drone/push Build is passing Details
2024-10-09 16:51:50 +08:00
DESKTOP-6C3NK6N\WXS 83a14956e3 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is failing Details
2024-10-08 13:15:54 +08:00
DESKTOP-6C3NK6N\WXS ef2e7d4cf8 上传记录列表查询字段变更 2024-10-08 13:15:49 +08:00
caiyiling 9e7ec09719 测量值与单位间添加空格
continuous-integration/drone/push Build is running Details
2024-10-08 13:12:50 +08:00
DESKTOP-6C3NK6N\WXS 19f9c8012c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-30 13:43:09 +08:00
DESKTOP-6C3NK6N\WXS 506307690d 新增部位去掉前后空格 2024-09-30 13:42:54 +08:00
caiyiling b945db8a47 oct和ivus标准更改
continuous-integration/drone/push Build is passing Details
2024-09-30 12:08:33 +08:00
DESKTOP-6C3NK6N\WXS 7bb0213a8c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-30 10:22:00 +08:00
DESKTOP-6C3NK6N\WXS a75367480d 后处理上传添加限制 2024-09-30 10:21:47 +08:00
caiyiling 64fd549d12 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-29 17:20:03 +08:00
caiyiling f0ec643205 dicom阅片更改 2024-09-29 17:17:47 +08:00
DESKTOP-6C3NK6N\WXS 34c05a9728 版本信息修改
continuous-integration/drone/push Build is passing Details
2024-09-29 14:04:12 +08:00
DESKTOP-6C3NK6N\WXS 49241bacfa 反馈图片名称问题
continuous-integration/drone/push Build is passing Details
2024-09-29 10:56:51 +08:00
DESKTOP-6C3NK6N\WXS 3bb0250699 apm意见反馈详情权限
continuous-integration/drone/push Build is passing Details
2024-09-29 10:38:50 +08:00
DESKTOP-6C3NK6N\WXS 47dd21ea7e 权限配置
continuous-integration/drone/push Build is passing Details
2024-09-29 10:25:19 +08:00
DESKTOP-6C3NK6N\WXS 64d268b6e8 后处理影像可以编辑检查类型
continuous-integration/drone/push Build is passing Details
2024-09-29 09:17:07 +08:00
caiyiling 463ecee3d8 下载影像预览后处理影像更改
continuous-integration/drone/push Build is passing Details
2024-09-27 17:00:42 +08:00
DESKTOP-6C3NK6N\WXS 9936d8c942 1
continuous-integration/drone/push Build is passing Details
2024-09-27 16:55:11 +08:00
caiyiling 1e132e0046 1
continuous-integration/drone/push Build is passing Details
2024-09-27 16:39:29 +08:00
caiyiling 95097caac2 1
continuous-integration/drone/push Build is passing Details
2024-09-27 16:27:43 +08:00
DESKTOP-6C3NK6N\WXS dcde93b4f8 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is running Details
2024-09-27 16:23:55 +08:00
DESKTOP-6C3NK6N\WXS e690aadd8a 1 2024-09-27 16:23:42 +08:00
caiyiling 7874f69bfe 预览影像更改
continuous-integration/drone/push Build is running Details
2024-09-27 16:23:19 +08:00
caiyiling bdb45c7b4e 1
continuous-integration/drone/push Build is passing Details
2024-09-27 16:16:18 +08:00
DESKTOP-6C3NK6N\WXS 0a4683386c 1
continuous-integration/drone/push Build is passing Details
2024-09-27 16:08:25 +08:00
DESKTOP-6C3NK6N\WXS c73297003f 1
continuous-integration/drone/push Build is passing Details
2024-09-27 14:48:07 +08:00
caiyiling 4faff7e85c 1
continuous-integration/drone/push Build is running Details
2024-09-27 14:43:03 +08:00
caiyiling 595e10a77a 系统标准配置更改及查看后处理影像修改
continuous-integration/drone/push Build is passing Details
2024-09-27 10:01:17 +08:00
caiyiling 360826ef28 1
continuous-integration/drone/push Build is passing Details
2024-09-26 17:21:56 +08:00
caiyiling cd7d261adf 阅片样式调整
continuous-integration/drone/push Build is passing Details
2024-09-26 16:54:55 +08:00
caiyiling 3ed09d16f6 自定义阅片样式更改
continuous-integration/drone/push Build is passing Details
2024-09-26 15:21:43 +08:00
caiyiling 2a016cf5f6 自定义标准阅片更改
continuous-integration/drone/push Build is passing Details
2024-09-26 15:12:28 +08:00
caiyiling 2d996941a2 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-26 14:49:41 +08:00
caiyiling 2ac92aa8b3 裁判阅片更改 2024-09-26 14:49:25 +08:00
DESKTOP-6C3NK6N\WXS e8a21fa5a3 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-26 14:33:14 +08:00
DESKTOP-6C3NK6N\WXS 771554c9b2 标准配置列表新增标准类型字段 2024-09-26 14:33:08 +08:00
caiyiling 3b7271d3a8 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-26 14:02:34 +08:00
caiyiling d2ab510a3c 裁判阅片更改 2024-09-26 14:02:20 +08:00
DESKTOP-6C3NK6N\WXS 7e8af2b4e5 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-26 13:43:09 +08:00
DESKTOP-6C3NK6N\WXS f9f3c55ea1 新增权限配置 2024-09-26 13:42:57 +08:00
caiyiling 988317d0cd 系统标准添加报告页显示在阅片页配置
continuous-integration/drone/push Build is running Details
2024-09-26 13:37:25 +08:00
DESKTOP-6C3NK6N\WXS a7c7c3dfc5 自动分类可以选择是否为裁判问题
continuous-integration/drone/push Build is passing Details
2024-09-26 11:26:01 +08:00
DESKTOP-6C3NK6N\WXS 17d6e233c8 非dicom文件预览展示大小
continuous-integration/drone/push Build is running Details
2024-09-26 11:21:43 +08:00
DESKTOP-6C3NK6N\WXS c9a754a85f 非dicom文件上传限制改为2GB
continuous-integration/drone/push Build is passing Details
2024-09-26 10:57:30 +08:00
DESKTOP-6C3NK6N\WXS a1addde722 crc上传问题及ir下载subjectId和code获取
continuous-integration/drone/push Build is passing Details
2024-09-26 10:43:00 +08:00
DESKTOP-6C3NK6N\WXS 001faf1f79 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-26 10:14:01 +08:00
DESKTOP-6C3NK6N\WXS 8d26368bcb 接收记录总共用时字段更改 2024-09-26 10:13:52 +08:00
caiyiling 3c8ea04457 测量值列表去除序号
continuous-integration/drone/push Build is passing Details
2024-09-25 17:30:05 +08:00
caiyiling 112c78a832 1
continuous-integration/drone/push Build is passing Details
2024-09-25 17:10:22 +08:00
caiyiling 590949e207 1
continuous-integration/drone/push Build is passing Details
2024-09-25 15:45:34 +08:00
caiyiling 8a47f23fe7 OCT标准更改
continuous-integration/drone/push Build is passing Details
2024-09-25 15:29:18 +08:00
caiyiling 2093308763 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-25 13:36:22 +08:00
caiyiling 8fae8528c6 OCT标准更改 2024-09-25 13:36:00 +08:00
DESKTOP-6C3NK6N\WXS 3d5229d3c0 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-24 17:03:29 +08:00
DESKTOP-6C3NK6N\WXS 386db94fdb 上传页面提示语根据阅片方式进行区分 2024-09-24 17:03:16 +08:00
caiyiling f80bd64ede Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-24 16:36:41 +08:00
caiyiling 339be24cc3 阅片检查渲染初始化更改 2024-09-24 16:36:05 +08:00
DESKTOP-6C3NK6N\WXS d30953bb98 阅片页面上传数据后页面刷新
continuous-integration/drone/push Build is passing Details
2024-09-24 16:28:31 +08:00
DESKTOP-6C3NK6N\WXS dc60a1ca4a Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-24 14:02:17 +08:00
DESKTOP-6C3NK6N\WXS 2d673a414b 上传具体任务时检验绑定任务id 2024-09-24 14:02:09 +08:00
caiyiling 06c56889d0 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-24 13:28:16 +08:00
caiyiling 68179f4214 ivus测量值添加导入数据功能 2024-09-24 13:27:47 +08:00
DESKTOP-6C3NK6N\WXS 2b5ee56e6b 上传列表不同阅片规则根据任务id过滤
continuous-integration/drone/push Build is passing Details
2024-09-24 11:02:01 +08:00
DESKTOP-6C3NK6N\WXS 3d2f6d0c7e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-24 10:09:39 +08:00
DESKTOP-6C3NK6N\WXS 9752fd6946 阅片单元配置修改 2024-09-24 10:09:26 +08:00
caiyiling 0dcee2c84b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-23 16:48:51 +08:00
caiyiling 43f49a36c0 ivus添加下载模板及oct标准更改 2024-09-23 16:47:57 +08:00
DESKTOP-6C3NK6N\WXS 16d5299ce0 账号设置密码修改样式调整
continuous-integration/drone/push Build is running Details
2024-09-23 16:45:55 +08:00
DESKTOP-6C3NK6N\WXS 16485f0c56 系统文档签署提交参数不传入项目id
continuous-integration/drone/push Build is passing Details
2024-09-23 15:49:24 +08:00
DESKTOP-6C3NK6N\WXS 692fd7bc97 版本管理新增LILI版本
continuous-integration/drone/push Build is passing Details
2024-09-23 15:17:16 +08:00
DESKTOP-6C3NK6N\WXS f17f1d6a6b 忘记密码校验
continuous-integration/drone/push Build is passing Details
2024-09-23 15:02:32 +08:00
DESKTOP-6C3NK6N\WXS b74337f2f0 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-23 11:39:42 +08:00
DESKTOP-6C3NK6N\WXS 37e65339f3 文件签署提交参数判断 2024-09-23 11:39:29 +08:00
caiyiling b4d4fffd71 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-23 11:30:35 +08:00
caiyiling f175838052 ivus标准更改 2024-09-23 11:30:15 +08:00
DESKTOP-6C3NK6N\WXS 80aa18eff2 文件签署提交删除参数
continuous-integration/drone/push Build is passing Details
2024-09-23 11:18:13 +08:00
DESKTOP-6C3NK6N\WXS 966e90498d 个人中心修改按钮校验
continuous-integration/drone/push Build is passing Details
2024-09-23 10:16:21 +08:00
DESKTOP-6C3NK6N\WXS ca1b95201c 个人中心账号设置添加校验
continuous-integration/drone/push Build is passing Details
2024-09-23 10:03:23 +08:00
DESKTOP-6C3NK6N\WXS f2e6ecce8e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-20 17:02:17 +08:00
DESKTOP-6C3NK6N\WXS 3b06046c69 校验规则修改 2024-09-20 17:02:02 +08:00
caiyiling d67bc1e02d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-20 16:46:13 +08:00
caiyiling 3c35d2656d 1 2024-09-20 16:46:00 +08:00
DESKTOP-6C3NK6N\WXS d6048e4cdd Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is running Details
2024-09-20 16:45:29 +08:00
DESKTOP-6C3NK6N\WXS d80fdb36e1 监控页面调整 2024-09-20 16:45:16 +08:00
caiyiling 40642a4fe6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-20 16:21:15 +08:00
caiyiling e550e5e31c 中心调研表更改 2024-09-20 16:20:51 +08:00
DESKTOP-6C3NK6N\WXS 5bf4c3cf5d 提示语遮挡
continuous-integration/drone/push Build is passing Details
2024-09-20 15:41:03 +08:00
DESKTOP-6C3NK6N\WXS d86eee6825 初始化用户页面表格调整
continuous-integration/drone/push Build is passing Details
2024-09-20 15:16:08 +08:00
DESKTOP-6C3NK6N\WXS 76a70e819d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is running Details
2024-09-20 15:12:24 +08:00
DESKTOP-6C3NK6N\WXS a512ed551b 中心ae列表权限 2024-09-20 15:12:06 +08:00
caiyiling c5383dd11d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-20 15:07:29 +08:00
caiyiling 23378a663b ivus标准更改 2024-09-20 15:07:11 +08:00
DESKTOP-6C3NK6N\WXS 693e240578 敏感数据加密
continuous-integration/drone/push Build is passing Details
2024-09-20 10:15:21 +08:00
DESKTOP-6C3NK6N\WXS 0144ae91e8 加秘测试
continuous-integration/drone/push Build is passing Details
2024-09-20 09:53:33 +08:00
DESKTOP-6C3NK6N\WXS 449e999d43 加密测试
continuous-integration/drone/push Build is passing Details
2024-09-19 17:34:15 +08:00
DESKTOP-6C3NK6N\WXS c77ca02cbc 1
continuous-integration/drone/push Build is passing Details
2024-09-19 17:27:31 +08:00
DESKTOP-6C3NK6N\WXS 8300cbaccf 1
continuous-integration/drone/push Build is passing Details
2024-09-19 16:49:20 +08:00
DESKTOP-6C3NK6N\WXS 14b0a45817 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-19 16:17:17 +08:00
DESKTOP-6C3NK6N\WXS b3ba7e7e40 敏感信息加密 2024-09-19 16:17:01 +08:00
caiyiling c348260b45 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-19 15:40:28 +08:00
caiyiling 4fbd4e28fe ivus标准更改及系统标准配置更改 2024-09-19 15:40:12 +08:00
DESKTOP-6C3NK6N\WXS d7b11c02e5 根据不同的阅片标准打包下载文件
continuous-integration/drone/push Build is passing Details
2024-09-19 10:20:19 +08:00
DESKTOP-6C3NK6N\WXS d0281abfee ir待阅列表受试者随机显示上传下载按钮
continuous-integration/drone/push Build is passing Details
2024-09-18 16:41:37 +08:00
DESKTOP-6C3NK6N\WXS 2c268cbd4f 公司信息改为后端配置
continuous-integration/drone/push Build is running Details
2024-09-18 16:38:09 +08:00
DESKTOP-6C3NK6N\WXS 857abb2c0d aws上传路径变更
continuous-integration/drone/push Build is passing Details
2024-09-18 13:51:03 +08:00
DESKTOP-6C3NK6N\WXS 371a3acff2 入项资格确认书的pdf预览方式调整
continuous-integration/drone/push Build is passing Details
2024-09-18 13:28:27 +08:00
DESKTOP-6C3NK6N\WXS 3dddbafd04 非dicom影像图片上传后文件数量预览按钮位置对齐
continuous-integration/drone/push Build is passing Details
2024-09-18 11:48:37 +08:00
DESKTOP-6C3NK6N\WXS 86dde0a9e8 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is running Details
2024-09-18 11:44:41 +08:00
DESKTOP-6C3NK6N\WXS aee2a78205 长时间未操作锁定弹框密码添加展示按钮 2024-09-18 11:44:26 +08:00
caiyiling 4733c0fd8f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-18 11:30:06 +08:00
caiyiling 54b3e0399c 系统标准问题类型扩展 2024-09-18 11:29:39 +08:00
DESKTOP-6C3NK6N\WXS 8f6434f123 接收影像检查列表排序部分字段去除
continuous-integration/drone/push Build is passing Details
2024-09-18 11:17:04 +08:00
DESKTOP-6C3NK6N\WXS c25183073a 忘记密码国际化换行
continuous-integration/drone/push Build is passing Details
2024-09-18 11:04:07 +08:00
DESKTOP-6C3NK6N\WXS 904a764ea5 上传显示问题修改
continuous-integration/drone/push Build is passing Details
2024-09-14 17:59:13 +08:00
DESKTOP-6C3NK6N\WXS 248f40b5be 接收记录排序更改
continuous-integration/drone/push Build is passing Details
2024-09-14 16:27:18 +08:00
DESKTOP-6C3NK6N\WXS c50c6c7bc7 1
continuous-integration/drone/push Build is passing Details
2024-09-14 16:13:37 +08:00
DESKTOP-6C3NK6N\WXS 1ef8eed500 独立阅片人上传限制
continuous-integration/drone/push Build is running Details
2024-09-14 16:12:59 +08:00
DESKTOP-6C3NK6N\WXS 9310337f16 反馈字段兼容
continuous-integration/drone/push Build is passing Details
2024-09-14 11:36:20 +08:00
caiyiling 37529cef33 非Dicom图片预览更改
continuous-integration/drone/push Build is passing Details
2024-09-14 10:39:33 +08:00
DESKTOP-6C3NK6N\WXS 42ed756c4e 上传临床数据按钮修改
continuous-integration/drone/push Build is passing Details
2024-09-14 10:26:12 +08:00
DESKTOP-6C3NK6N\WXS 97d786684b ir上传国际化修改
continuous-integration/drone/push Build is passing Details
2024-09-14 09:56:32 +08:00
DESKTOP-6C3NK6N\WXS 17f0a5d977 下载记录查询条件新增
continuous-integration/drone/push Build is running Details
2024-09-14 09:54:06 +08:00
DESKTOP-6C3NK6N\WXS 75a063acd9 路由白名单添加、iqc下载提示消息权限
continuous-integration/drone/push Build is passing Details
2024-09-13 17:39:04 +08:00
caiyiling 5df08f52fc Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-13 15:04:32 +08:00
caiyiling 3a5de3fadf 下拉框添加清除按钮 2024-09-13 15:04:04 +08:00
DESKTOP-6C3NK6N\WXS be32fd8e15 临时凭证获取
continuous-integration/drone/push Build is passing Details
2024-09-13 13:06:38 +08:00
caiyiling 8047ba7f5f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-13 10:37:24 +08:00
caiyiling fbbd4ff805 1 2024-09-13 10:37:16 +08:00
DESKTOP-6C3NK6N\WXS 25d8ee6bc5 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is failing Details
2024-09-13 10:23:37 +08:00
DESKTOP-6C3NK6N\WXS 0f29a2971c 临时凭证获取 2024-09-13 10:23:24 +08:00
caiyiling 2b71341d4c 部分文档不显示水印修复
continuous-integration/drone/push Build is running Details
2024-09-13 10:22:24 +08:00
DESKTOP-6C3NK6N\WXS fa395f54b2 公司水印
continuous-integration/drone/push Build is running Details
2024-09-13 10:19:31 +08:00
DESKTOP-6C3NK6N\WXS 70d9623c63 从PACS选择影像页,外层页面没有拖拽条
continuous-integration/drone/push Build is passing Details
2024-09-13 09:22:30 +08:00
DESKTOP-6C3NK6N\WXS 82447c58de 独立阅片人上传影像页面国际化问题
continuous-integration/drone/push Build is running Details
2024-09-13 09:20:25 +08:00
DESKTOP-6C3NK6N\WXS 672cb9b2a2 国际化修改
continuous-integration/drone/push Build is passing Details
2024-09-12 17:40:15 +08:00
DESKTOP-6C3NK6N\WXS b06dcdc98f 仲裁规则显示
continuous-integration/drone/push Build is passing Details
2024-09-12 15:24:38 +08:00
DESKTOP-6C3NK6N\WXS b1096a8aa9 测试代码去除
continuous-integration/drone/push Build is passing Details
2024-09-12 15:11:31 +08:00
DESKTOP-6C3NK6N\WXS 66a1654bfe ir下载预览非dicom影像问题
continuous-integration/drone/push Build is passing Details
2024-09-12 14:39:28 +08:00
DESKTOP-6C3NK6N\WXS 986bce36e6 上传、下载添加提示;非dicom添加上传监控
continuous-integration/drone/push Build is passing Details
2024-09-12 14:22:52 +08:00
DESKTOP-6C3NK6N\WXS e845fdaad4 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
# Conflicts:
#	src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue
2024-09-12 10:48:25 +08:00
DESKTOP-6C3NK6N\WXS b762d3d0dd 下载记录 2024-09-12 10:46:33 +08:00
caiyiling dfb9392cda Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-11 17:02:30 +08:00
caiyiling 86c05070b3 1 2024-09-11 17:02:17 +08:00
he b8478e6451 Merge branch 'main' of http://192.168.3.68:2000/XCKJ/irc_web
continuous-integration/drone/push Build is running Details
2024-09-11 17:00:56 +08:00
he 4552caf82f 后端测试 加了一个接口备注 vue.config 加了一个接口备注 2024-09-11 17:00:48 +08:00
caiyiling 9e83d51037 一致性分析上传模板更改
continuous-integration/drone/push Build is passing Details
2024-09-11 16:22:12 +08:00
caiyiling dd0cd1ec64 稽查更改
continuous-integration/drone/push Build is passing Details
2024-09-11 16:07:28 +08:00
caiyiling db5e5da06a 稽查渲染bug修复
continuous-integration/drone/push Build is passing Details
2024-09-11 14:36:45 +08:00
caiyiling e6bd4576e6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-11 13:04:25 +08:00
caiyiling 8abcfcbe1a qc质控文本格式更改 2024-09-11 13:03:47 +08:00
DESKTOP-6C3NK6N\WXS 9653e4478b 医学审核下载
continuous-integration/drone/push Build is passing Details
2024-09-10 18:32:46 +08:00
caiyiling 9402501c0b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2024-09-10 18:29:37 +08:00
caiyiling d5c0e15f46 阅片页面下载影像更改 2024-09-10 18:29:22 +08:00
DESKTOP-6C3NK6N\WXS 860d932a5d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-10 16:18:08 +08:00
DESKTOP-6C3NK6N\WXS 0e485a8984 新开页签跳转问题 2024-09-10 16:17:53 +08:00
caiyiling 95998f0dea 阅片页面渲染影像更改
continuous-integration/drone/push Build is passing Details
2024-09-10 16:06:32 +08:00
caiyiling 8c7c82cf5e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is failing Details
2024-09-10 15:24:20 +08:00
caiyiling bf701bf3d8 质控页面回复内容格式化 2024-09-10 15:23:56 +08:00
DESKTOP-6C3NK6N\WXS 2ce7454b47 ir上传问题解决
continuous-integration/drone/push Build is running Details
2024-09-10 15:21:01 +08:00
caiyiling ce079f923a 国际化补充
continuous-integration/drone/push Build is failing Details
2024-09-10 14:18:11 +08:00
caiyiling 60d3b25041 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2024-09-10 14:13:17 +08:00
caiyiling 3d171caf1b dicom字典更改 2024-09-10 14:12:59 +08:00
DESKTOP-6C3NK6N\WXS 472599c663 上传检验提示信息拆分
continuous-integration/drone/push Build is running Details
2024-09-10 11:06:29 +08:00
caiyiling 3a659cd9bc Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-10 10:59:22 +08:00
caiyiling ed7d2502d1 稽查渲染问题修复 2024-09-10 10:59:02 +08:00
DESKTOP-6C3NK6N\WXS 689c149a3a Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-10 10:30:50 +08:00
DESKTOP-6C3NK6N\WXS 5b3ae0c076 仲裁规则添加单位 2024-09-10 10:30:36 +08:00
caiyiling 4eba3b2cb3 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2024-09-10 10:25:42 +08:00
caiyiling e2ebedb9e9 系统标准器官配置更改 2024-09-10 10:25:17 +08:00
DESKTOP-6C3NK6N\WXS 77c3f0244e 下载问题解决
continuous-integration/drone/push Build is passing Details
2024-09-09 17:47:57 +08:00
DESKTOP-6C3NK6N\WXS 3fc7d70b3f 1
continuous-integration/drone/push Build is passing Details
2024-09-09 17:15:04 +08:00
DESKTOP-6C3NK6N\WXS c2aa83f4b8 ir上传文件初始化问题
continuous-integration/drone/push Build is passing Details
2024-09-09 16:55:33 +08:00
DESKTOP-6C3NK6N\WXS 7c77a42e90 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-09 16:31:10 +08:00
DESKTOP-6C3NK6N\WXS 08b8f8d107 ir下载打包文件目录修改 2024-09-09 16:31:04 +08:00
caiyiling 1fca941f64 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-09 16:05:38 +08:00
caiyiling d06afd42af 1 2024-09-09 16:05:21 +08:00
DESKTOP-6C3NK6N\WXS cbee69b4c0 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-09 15:48:06 +08:00
DESKTOP-6C3NK6N\WXS 39c4a13f5e 数据上传模板添加字段文件名称(CN) 2024-09-09 15:47:53 +08:00
caiyiling 7fed65dbe3 数值问题格式化更改
continuous-integration/drone/push Build is passing Details
2024-09-09 15:31:01 +08:00
DESKTOP-6C3NK6N\WXS 15cad74264 ir上传预览添加参数
continuous-integration/drone/push Build is passing Details
2024-09-09 15:21:04 +08:00
caiyiling b1c8f02271 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2024-09-09 15:16:42 +08:00
caiyiling b95cc82997 1 2024-09-09 15:16:24 +08:00
DESKTOP-6C3NK6N\WXS 59c342ccd1 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is running Details
2024-09-09 15:15:12 +08:00
DESKTOP-6C3NK6N\WXS eba09135eb ir下载目录结构变更 2024-09-09 15:14:43 +08:00
caiyiling 4f4934523f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-09 15:00:19 +08:00
caiyiling 99bb929123 阅片更改 2024-09-09 14:59:57 +08:00
DESKTOP-6C3NK6N\WXS 1538690604 下载改为全局loading
continuous-integration/drone/push Build is running Details
2024-09-09 14:57:52 +08:00
DESKTOP-6C3NK6N\WXS bfb1c03c63 1
continuous-integration/drone/push Build is passing Details
2024-09-09 13:56:29 +08:00
DESKTOP-6C3NK6N\WXS e05986ac9f 上传速率显示位置调整
continuous-integration/drone/push Build is passing Details
2024-09-09 13:45:06 +08:00
DESKTOP-6C3NK6N\WXS 4988155499 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-09 13:39:13 +08:00
DESKTOP-6C3NK6N\WXS e024c6c0b1 上传、下载检查详情受试者id未展示 2024-09-09 13:39:00 +08:00
caiyiling aa526aad8c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2024-09-09 13:36:12 +08:00
caiyiling 84bc101065 测量值精度更改 2024-09-09 13:35:56 +08:00
DESKTOP-6C3NK6N\WXS adf6bdc44a 阅片影像筛选配置:按钮名称修改
continuous-integration/drone/push Build is passing Details
2024-09-09 13:29:44 +08:00
caiyiling ec7851eb9d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-09 13:22:06 +08:00
caiyiling 8831847850 OCT标准更改 2024-09-09 13:21:48 +08:00
DESKTOP-6C3NK6N\WXS fa137ac535 仲裁规则修改
continuous-integration/drone/push Build is passing Details
2024-09-09 11:41:00 +08:00
DESKTOP-6C3NK6N\WXS 1209a3962b 下载跨域问题解决
continuous-integration/drone/push Build is passing Details
2024-09-09 11:08:44 +08:00
DESKTOP-6C3NK6N\WXS ccf3b823d8 非dicom文件名生成guid
continuous-integration/drone/push Build is passing Details
2024-09-06 20:23:19 +08:00
DESKTOP-6C3NK6N\WXS e043e85630 上传名称格式化问题
continuous-integration/drone/push Build is passing Details
2024-09-06 20:09:26 +08:00
caiyiling 342c9325bf 上传影像bug修复
continuous-integration/drone/push Build is passing Details
2024-09-06 18:26:42 +08:00
caiyiling 249448b15e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-06 18:01:42 +08:00
caiyiling 4569f16050 IVUS自动计算更改 2024-09-06 18:01:21 +08:00
DESKTOP-6C3NK6N\WXS 07b2341f93 ir任务列表下载权限问题
continuous-integration/drone/push Build is passing Details
2024-09-06 17:54:34 +08:00
DESKTOP-6C3NK6N\WXS e47c75937c 上传速率位置更改
continuous-integration/drone/push Build is passing Details
2024-09-06 17:41:40 +08:00
caiyiling f39050e220 数值组件精度修改
continuous-integration/drone/push Build is running Details
2024-09-06 17:38:47 +08:00
caiyiling f31e23d314 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-06 17:28:49 +08:00
caiyiling 8b12d6a576 IVUS标准更改 2024-09-06 17:28:15 +08:00
DESKTOP-6C3NK6N\WXS 605bf04e43 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-06 17:18:01 +08:00
DESKTOP-6C3NK6N\WXS f380028c22 样式修改 2024-09-06 17:17:21 +08:00
caiyiling 9a040024d9 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-06 16:55:40 +08:00
caiyiling 04f68d8733 IVUS标准更改 2024-09-06 16:55:17 +08:00
DESKTOP-6C3NK6N\WXS b62a36b63a 裁判阅片待阅列表不显示上传下载按钮
continuous-integration/drone/push Build is passing Details
2024-09-06 16:05:57 +08:00
caiyiling 3dfe5b57a1 阅片页面上传影像按钮控制
continuous-integration/drone/push Build is running Details
2024-09-06 16:04:21 +08:00
DESKTOP-6C3NK6N\WXS 6a3068f942 系统标准添加上传下载
continuous-integration/drone/push Build is passing Details
2024-09-06 15:54:17 +08:00
caiyiling f58fa6011b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-06 15:37:11 +08:00
caiyiling d42252ea78 IVUS标准更改 2024-09-06 15:36:53 +08:00
DESKTOP-6C3NK6N\WXS 6bf4a1b70d 已完成阅片的阅片页不允许上传
continuous-integration/drone/push Build is running Details
2024-09-06 15:33:40 +08:00
DESKTOP-6C3NK6N\WXS 5bed446055 系统标准数值问题可设为裁判问题
continuous-integration/drone/push Build is passing Details
2024-09-06 15:13:46 +08:00
DESKTOP-6C3NK6N\WXS 5d8c389090 阅片单元配置:增加阅片过程下载影像、阅片过程上传影像不区分阅片标准
continuous-integration/drone/push Build is passing Details
2024-09-06 14:52:28 +08:00
DESKTOP-6C3NK6N\WXS 5bfc4a9a82 上传锁定问题
continuous-integration/drone/push Build is passing Details
2024-09-06 14:41:34 +08:00
DESKTOP-6C3NK6N\WXS cb00ec7ac2 ir下载预览
continuous-integration/drone/push Build is passing Details
2024-09-06 14:26:17 +08:00
DESKTOP-6C3NK6N\WXS dc5c1720c7 CRC上传影像前端页面优化
continuous-integration/drone/push Build is passing Details
2024-09-06 14:10:57 +08:00
DESKTOP-6C3NK6N\WXS 73a4135fd6 重置密码页面,标签换行
continuous-integration/drone/push Build is passing Details
2024-09-06 14:04:00 +08:00
DESKTOP-6C3NK6N\WXS f2af36b89a 临床数据上传页面,按钮对齐
continuous-integration/drone/push Build is passing Details
2024-09-06 13:57:00 +08:00
DESKTOP-6C3NK6N\WXS 4f0f124378 网速监控大小写转换
continuous-integration/drone/push Build is passing Details
2024-09-06 13:36:25 +08:00
DESKTOP-6C3NK6N\WXS c618738725 上传下载问题修复
continuous-integration/drone/push Build is passing Details
2024-09-06 13:22:42 +08:00
caiyiling 1274af3e48 影像质量评估设置为不正常重置病灶不可评估过滤标准
continuous-integration/drone/push Build is passing Details
2024-09-06 11:36:58 +08:00
caiyiling b7a19c2581 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-06 11:19:28 +08:00
caiyiling 842e959e2d 系统标准更改 2024-09-06 11:19:06 +08:00
DESKTOP-6C3NK6N\WXS 0590742dac ir上传数据删除
continuous-integration/drone/push Build is passing Details
2024-09-06 11:09:14 +08:00
DESKTOP-6C3NK6N\WXS f6b90c4c05 ir上传dicom校验
continuous-integration/drone/push Build is passing Details
2024-09-06 11:03:05 +08:00
DESKTOP-6C3NK6N\WXS e52378d5d4 ir上传dicom
continuous-integration/drone/push Build is passing Details
2024-09-05 18:01:05 +08:00
DESKTOP-6C3NK6N\WXS f52b2f151b ir上传dicom
continuous-integration/drone/push Build is passing Details
2024-09-05 17:17:47 +08:00
caiyiling 9bb856b50a 系统标准更改
continuous-integration/drone/push Build is passing Details
2024-09-05 16:17:57 +08:00
caiyiling 780c49959e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-05 16:12:05 +08:00
caiyiling a470d961df ivus标准更改 2024-09-05 16:11:42 +08:00
DESKTOP-6C3NK6N\WXS 84b1a2a4fa Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is failing Details
2024-09-05 13:55:28 +08:00
DESKTOP-6C3NK6N\WXS e2026177a1 ir任务列表非dicom上传 2024-09-05 13:55:09 +08:00
caiyiling c114903dba 1
continuous-integration/drone/push Build is passing Details
2024-09-05 13:50:49 +08:00
caiyiling 915c7c88fb Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-05 13:39:14 +08:00
caiyiling 64bd3033b5 非dicom文件预览样式更改 2024-09-05 13:38:57 +08:00
DESKTOP-6C3NK6N\WXS c1fbbc524f 非dicom文件名有特殊符号,预览无法正常显示
continuous-integration/drone/push Build is passing Details
2024-09-05 13:15:07 +08:00
caiyiling 6f86700dbc lugano关闭跨源隔离检测
continuous-integration/drone/push Build is passing Details
2024-09-05 11:49:37 +08:00
caiyiling 85ed9fd9b7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details
2024-09-05 11:48:14 +08:00
caiyiling 002cd19053 1 2024-09-05 11:48:04 +08:00
DESKTOP-6C3NK6N\WXS e24b1cc722 ir上传
continuous-integration/drone/push Build is passing Details
2024-09-05 10:44:32 +08:00
DESKTOP-6C3NK6N\WXS 205b420074 1
continuous-integration/drone/push Build is passing Details
2024-09-05 09:09:13 +08:00
caiyiling d42e446953 1
continuous-integration/drone/push Build is passing Details
2024-09-04 18:01:22 +08:00
caiyiling 3be34d89ca 1
continuous-integration/drone/push Build is running Details
2024-09-04 17:57:48 +08:00
caiyiling 67b04c2a51 1
continuous-integration/drone/push Build is passing Details
2024-09-04 17:24:24 +08:00
caiyiling 65acb7ea05 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-04 16:53:13 +08:00
caiyiling d25fd68db7 1 2024-09-04 16:53:03 +08:00
DESKTOP-6C3NK6N\WXS 433064c353 下载问题
continuous-integration/drone/push Build is passing Details
2024-09-04 16:32:54 +08:00
DESKTOP-6C3NK6N\WXS 0e766300f0 1
continuous-integration/drone/push Build is passing Details
2024-09-04 15:04:56 +08:00
DESKTOP-6C3NK6N\WXS 581980f111 config测试
continuous-integration/drone/push Build is passing Details
2024-09-04 14:57:07 +08:00
DESKTOP-6C3NK6N\WXS 7aaede5503 aws分片上传
continuous-integration/drone/push Build is passing Details
2024-09-04 14:50:17 +08:00
caiyiling ff7305c3a0 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-04 14:29:33 +08:00
caiyiling 6f03bbe14c 阅片跟踪影像退回逻辑限制 2024-09-04 14:28:49 +08:00
DESKTOP-6C3NK6N\WXS 6b645d3161 临床数据不显示
continuous-integration/drone/push Build is passing Details
2024-09-04 13:50:44 +08:00
caiyiling 4db4aed4dd 医学审核问题配置优化
continuous-integration/drone/push Build is passing Details
2024-09-04 13:15:44 +08:00
caiyiling b368df6bfb 关键序列中多帧影像只显示带有标记的帧
continuous-integration/drone/push Build is passing Details
2024-09-04 11:38:48 +08:00
DESKTOP-6C3NK6N\WXS 7aa21c5ca1 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-04 11:09:45 +08:00
DESKTOP-6C3NK6N\WXS 45c4bc3b3a 标准对象定义 2024-09-04 11:09:29 +08:00
caiyiling 5de6a69bc8 1
continuous-integration/drone/push Build is passing Details
2024-09-04 10:24:44 +08:00
caiyiling 324bc1a536 稽查更改
continuous-integration/drone/push Build is passing Details
2024-09-04 10:14:14 +08:00
caiyiling 2628d2ec5f 1
continuous-integration/drone/push Build is passing Details
2024-09-04 09:39:05 +08:00
caiyiling 9d8bd9c910 新增稽查配置项
continuous-integration/drone/push Build is running Details
2024-09-04 09:36:56 +08:00
caiyiling 615c91b197 非dicom报告页数值类型问题精度bug修复
continuous-integration/drone/push Build is running Details
2024-09-04 09:32:31 +08:00
DESKTOP-6C3NK6N\WXS a7c0ae6d7a Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-04 09:10:05 +08:00
DESKTOP-6C3NK6N\WXS 400b13e7a6 ir阅片下载 2024-09-04 09:09:56 +08:00
caiyiling a14f144066 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-03 18:05:11 +08:00
caiyiling 655753d1c6 数值问题更改 2024-09-03 18:04:59 +08:00
DESKTOP-6C3NK6N\WXS 64e936ad6d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-09-03 17:48:31 +08:00
DESKTOP-6C3NK6N\WXS 6712cad721 ir任务列表下载 2024-09-03 17:48:24 +08:00
caiyiling fed2c1a842 非DICOM预览文件样式更改
continuous-integration/drone/push Build is passing Details
2024-09-03 16:15:23 +08:00
caiyiling 2303c04857 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-09-03 15:32:41 +08:00
caiyiling beeadfbdeb 非dicom阅片添加报告页面 2024-09-03 15:32:00 +08:00
DESKTOP-6C3NK6N\WXS b866ffdd49 iqc下载文件
continuous-integration/drone/push Build is passing Details
2024-09-03 15:23:22 +08:00
DESKTOP-6C3NK6N\WXS 8ad50b5618 上传网速检测修改 2024-09-03 15:22:44 +08:00
DESKTOP-6C3NK6N\WXS e517556808 crc上传dicom添加FileSize
continuous-integration/drone/push Build is passing Details
2024-09-03 14:12:39 +08:00
DESKTOP-6C3NK6N\WXS 1a8653b47e crc上传下载
continuous-integration/drone/push Build is passing Details
2024-09-03 13:15:50 +08:00
caiyiling bfe86e6868 项目列表详情按钮添加权限控制
continuous-integration/drone/push Build is running Details
2024-09-03 13:11:44 +08:00
caiyiling f0eda2bc66 预览图片修改
continuous-integration/drone/push Build is passing Details
2024-09-02 14:12:26 +08:00
caiyiling 8f274aad89 获取tag属性乱码优化
continuous-integration/drone/push Build is passing Details
2024-08-30 11:10:19 +08:00
caiyiling 709063a26e 在影像上传预览和质控预览工具中,增加DICOM标签查看工具
continuous-integration/drone/push Build is passing Details
2024-08-30 10:25:32 +08:00
caiyiling 9e786c53b8 1
continuous-integration/drone/push Build is passing Details
2024-08-28 15:46:59 +08:00
caiyiling 37520fccb6 稽查更改
continuous-integration/drone/push Build is passing Details
2024-08-28 15:35:19 +08:00
caiyiling f3b36b9127 稽查修改
continuous-integration/drone/push Build is passing Details
2024-08-28 15:06:15 +08:00
caiyiling 870354b4b2 稽查配置更改
continuous-integration/drone/push Build is passing Details
2024-08-28 11:40:18 +08:00
caiyiling f838df51a5 阅片单元配置附加评估逻辑及阅片问题验证更改
continuous-integration/drone/push Build is passing Details
2024-08-28 10:21:21 +08:00
caiyiling 0a6a98c33c 稽查国际化更改
continuous-integration/drone/push Build is passing Details
2024-08-27 10:21:59 +08:00
caiyiling 28c357a702 稽查配置更改
continuous-integration/drone/push Build is passing Details
2024-08-27 10:11:00 +08:00
caiyiling 02af3d9b55 自定义阅片样式更改
continuous-integration/drone/push Build is passing Details
2024-08-26 13:54:32 +08:00
DESKTOP-6C3NK6N\WXS 29be0d6035 自动计算平均值问题
continuous-integration/drone/push Build is passing Details
2024-08-23 17:20:11 +08:00
DESKTOP-6C3NK6N\WXS 05cd1c4075 1
continuous-integration/drone/push Build is passing Details
2024-08-23 14:14:44 +08:00
DESKTOP-6C3NK6N\WXS d52663da40 crc上传影像过滤dir文件
continuous-integration/drone/push Build is running Details
2024-08-23 14:14:07 +08:00
DESKTOP-6C3NK6N\WXS 4b8ba07123 上传图片预览样式修改1
continuous-integration/drone/push Build is passing Details
2024-08-22 17:02:46 +08:00
DESKTOP-6C3NK6N\WXS 3204d1d305 pacs上传数据临床数据未上传提示
continuous-integration/drone/push Build is passing Details
2024-08-22 16:44:17 +08:00
DESKTOP-6C3NK6N\WXS fa2519cba4 弹窗自动退出时关闭
continuous-integration/drone/push Build is passing Details
2024-08-22 13:19:45 +08:00
DESKTOP-6C3NK6N\WXS 85c4cf89f6 pacs上传校验弹框更改
continuous-integration/drone/push Build is passing Details
2024-08-22 10:18:03 +08:00
DESKTOP-6C3NK6N\WXS 302cad8b57 一致性分析完全随机、受试者随机分配规则修改
continuous-integration/drone/push Build is passing Details
2024-08-21 17:53:47 +08:00
caiyiling 45f392492d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-08-21 17:36:46 +08:00
caiyiling c64e555238 pacs影像预览 2024-08-21 17:36:27 +08:00
DESKTOP-6C3NK6N\WXS 46e7939088 影像检查查看影像查询条件
continuous-integration/drone/push Build is passing Details
2024-08-21 17:12:16 +08:00
DESKTOP-6C3NK6N\WXS aafbfd075d 1
continuous-integration/drone/push Build is passing Details
2024-08-21 15:21:49 +08:00
DESKTOP-6C3NK6N\WXS b6433ea4a8 crc上传pacs判断
continuous-integration/drone/push Build is passing Details
2024-08-21 14:47:28 +08:00
DESKTOP-6C3NK6N\WXS f5c4b49e6f 意见反馈影像上传、影像质疑、一致性核查绑定访视
continuous-integration/drone/push Build is passing Details
2024-08-21 13:46:46 +08:00
caiyiling e961829ef1 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-08-21 13:35:05 +08:00
caiyiling 2c7e304820 中心调研更改 2024-08-21 13:34:51 +08:00
DESKTOP-6C3NK6N\WXS 129349f489 临床数据上传表单title去除
continuous-integration/drone/push Build is passing Details
2024-08-21 11:35:07 +08:00
DESKTOP-6C3NK6N\WXS 38a1bae8ab 影像质控spm取消下载按钮
continuous-integration/drone/push Build is passing Details
2024-08-21 10:48:59 +08:00
caiyiling 4d2e9531ec 国际化补充
continuous-integration/drone/push Build is passing Details
2024-08-21 10:33:16 +08:00
caiyiling e903c239b4 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-08-21 10:11:59 +08:00
caiyiling 630e551750 国际化更改 2024-08-21 10:11:07 +08:00
DESKTOP-6C3NK6N\WXS dbdbed3556 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-08-20 16:20:34 +08:00
DESKTOP-6C3NK6N\WXS aaf9decc49 crc上传获取临床数据请求参数修改 2024-08-20 16:20:18 +08:00
caiyiling 2d93a1a5ac Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-08-20 15:07:33 +08:00
caiyiling d05b97c4f3 1 2024-08-20 15:07:23 +08:00
DESKTOP-6C3NK6N\WXS 0494d567db 项目列表导出添加查询字段
continuous-integration/drone/push Build is passing Details
2024-08-20 14:27:05 +08:00
DESKTOP-6C3NK6N\WXS 3f863bc426 添加路由白名单
continuous-integration/drone/push Build is passing Details
2024-08-20 13:53:44 +08:00
DESKTOP-6C3NK6N\WXS 6eb971e263 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-08-20 11:24:58 +08:00
DESKTOP-6C3NK6N\WXS ba3cae7a40 mim医学审核截图样式修改 2024-08-20 11:24:43 +08:00
caiyiling 64a5a7f89c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-08-20 11:05:53 +08:00
caiyiling c90e423268 登录日志补充查询条件 2024-08-20 11:05:32 +08:00
DESKTOP-6C3NK6N\WXS d1bf7f1088 意见反馈层级调整
continuous-integration/drone/push Build is passing Details
2024-08-20 10:49:52 +08:00
DESKTOP-6C3NK6N\WXS a2f6bbf27b 意见反馈层级问题
continuous-integration/drone/push Build is passing Details
2024-08-20 10:22:10 +08:00
DESKTOP-6C3NK6N\WXS 1f2bc4d494 1
continuous-integration/drone/push Build is passing Details
2024-08-19 17:49:28 +08:00
DESKTOP-6C3NK6N\WXS de1ffc02a4 意见反馈问题修复
continuous-integration/drone/push Build is passing Details
2024-08-19 17:44:10 +08:00
DESKTOP-6C3NK6N\WXS fa7b51060b 一致性分析临床数据按钮禁用条件变更
continuous-integration/drone/push Build is passing Details
2024-08-19 15:39:30 +08:00
DESKTOP-6C3NK6N\WXS 37a58ca649 意见反馈文件存储路径更改
continuous-integration/drone/push Build is running Details
2024-08-19 15:36:25 +08:00
DESKTOP-6C3NK6N\WXS 4e2fecc999 CRC上传页面,根据配置控制PACS直连tab的显示
continuous-integration/drone/push Build is passing Details
2024-08-19 14:35:40 +08:00
DESKTOP-6C3NK6N\WXS 9c36c7975c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-08-19 14:09:22 +08:00
DESKTOP-6C3NK6N\WXS 3f80df204c 项目信息样式问题修改 2024-08-19 14:09:06 +08:00
caiyiling 09ed271199 阅片影像渲染bug修复
continuous-integration/drone/push Build is passing Details
2024-08-19 13:59:36 +08:00
caiyiling 5c7c2d6ef6 影像预览bug修复
continuous-integration/drone/push Build is passing Details
2024-08-19 13:45:09 +08:00
DESKTOP-6C3NK6N\WXS 77aa182e2f pacs配置保存问题
continuous-integration/drone/push Build is passing Details
2024-08-16 13:41:16 +08:00
DESKTOP-6C3NK6N\WXS 1f64d87342 测试AE的按钮位置调整
continuous-integration/drone/push Build is passing Details
2024-08-16 13:31:26 +08:00
DESKTOP-6C3NK6N\WXS e5cb28b00d 项目更新页面重载功能屏蔽
continuous-integration/drone/push Build is passing Details
2024-08-16 11:14:46 +08:00
DESKTOP-6C3NK6N\WXS 7701442560 配置问题国际化
continuous-integration/drone/push Build is passing Details
2024-08-16 11:02:45 +08:00
DESKTOP-6C3NK6N\WXS a6f76c840d 项目信息样式调整
continuous-integration/drone/push Build is passing Details
2024-08-16 10:15:04 +08:00
DESKTOP-6C3NK6N\WXS f2bff5deb5 pacs配置
continuous-integration/drone/push Build is passing Details
2024-08-16 09:12:33 +08:00
DESKTOP-6C3NK6N\WXS b6101a00fa 指控下载提示信息对齐
continuous-integration/drone/push Build is passing Details
2024-08-15 18:04:44 +08:00
DESKTOP-6C3NK6N\WXS 0f44ac3ddb pacs配置修改
continuous-integration/drone/push Build is passing Details
2024-08-15 17:56:40 +08:00
DESKTOP-6C3NK6N\WXS 5d8c0f99b9 一致性分析受试者分配新增字段显示规则
continuous-integration/drone/push Build is passing Details
2024-08-15 14:22:27 +08:00
DESKTOP-6C3NK6N\WXS 4d97b9992c 一致性分析受试者分配添加字段
continuous-integration/drone/push Build is running Details
2024-08-15 14:18:31 +08:00
DESKTOP-6C3NK6N\WXS 8ad3eee2c2 1
continuous-integration/drone/push Build is passing Details
2024-08-15 09:32:27 +08:00
DESKTOP-6C3NK6N\WXS a549341d3b crc上传DICOM影像页上传临床数据流程简化
continuous-integration/drone/push Build is passing Details
2024-08-14 14:31:36 +08:00
DESKTOP-6C3NK6N\WXS 7d634fb2e5 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-08-13 17:58:26 +08:00
DESKTOP-6C3NK6N\WXS cde5846fd6 意见反馈详情修改 2024-08-13 17:58:13 +08:00
caiyiling 327be0f7da Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-08-13 17:48:18 +08:00
caiyiling 16d44ee8bb 1 2024-08-13 17:48:10 +08:00
DESKTOP-6C3NK6N\WXS 585add442e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-08-13 17:24:02 +08:00
DESKTOP-6C3NK6N\WXS fedead8eab 影像检查国际化 2024-08-13 17:23:49 +08:00
caiyiling 4a83adb4e9 1
continuous-integration/drone/push Build is running Details
2024-08-13 17:22:46 +08:00
caiyiling f5408141f3 1
continuous-integration/drone/push Build is running Details
2024-08-13 17:21:26 +08:00
DESKTOP-6C3NK6N\WXS 66260c5012 自动检测国际化
continuous-integration/drone/push Build is passing Details
2024-08-13 14:23:07 +08:00
DESKTOP-6C3NK6N\WXS 392ca13c16 测试自动检测
continuous-integration/drone/push Build is passing Details
2024-08-13 14:00:19 +08:00
DESKTOP-6C3NK6N\WXS 58f8586232 自动检测更新
continuous-integration/drone/push Build is passing Details
2024-08-13 13:55:02 +08:00
DESKTOP-6C3NK6N\WXS 8c8ffa5ea5 分配规则访视数最小设置为1
continuous-integration/drone/push Build is passing Details
2024-08-13 11:14:19 +08:00
DESKTOP-6C3NK6N\WXS b47a1e5311 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is running Details
2024-08-13 11:12:16 +08:00
DESKTOP-6C3NK6N\WXS 8257793b4f 意见反馈问题修复 2024-08-13 11:12:01 +08:00
caiyiling 953fe1cf22 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-08-13 10:09:41 +08:00
caiyiling f6c1891780 1 2024-08-13 10:09:30 +08:00
DESKTOP-6C3NK6N\WXS cd581041b9 项目列表、培训列表、影像质控列表导出
continuous-integration/drone/push Build is passing Details
2024-08-12 18:02:15 +08:00
DESKTOP-6C3NK6N\WXS b0ce6e0cb8 项目邮件发件箱的端口录入方式修改
continuous-integration/drone/push Build is passing Details
2024-08-12 17:32:08 +08:00
DESKTOP-6C3NK6N\WXS 7db22356d7 账号信息修改去除性别
continuous-integration/drone/push Build is passing Details
2024-08-12 17:14:42 +08:00
DESKTOP-6C3NK6N\WXS 2cbc1125ae 1
continuous-integration/drone/push Build is passing Details
2024-08-12 17:08:59 +08:00
DESKTOP-6C3NK6N\WXS 068f705841 1
continuous-integration/drone/push Build is passing Details
2024-08-12 16:57:08 +08:00
DESKTOP-6C3NK6N\WXS ab0c3d41de Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
# Conflicts:
#	src/views/trials/trials-panel/setting/personnel-manage/components/site.vue
2024-08-12 14:54:02 +08:00
DESKTOP-6C3NK6N\WXS 0189f6e989 管理后台用户国际化
continuous-integration/drone/push Build is passing Details
2024-08-12 14:39:02 +08:00
DESKTOP-6C3NK6N\WXS 743a704204 自身一致性分析操作按钮权限
continuous-integration/drone/push Build is passing Details
2024-08-12 14:02:38 +08:00
DESKTOP-6C3NK6N\WXS a84084a15f 配置身体部位国际化
continuous-integration/drone/push Build is passing Details
2024-08-12 13:42:26 +08:00
DESKTOP-6C3NK6N\WXS fe7d4f7877 qc问题国际化 2024-08-12 13:42:04 +08:00
DESKTOP-6C3NK6N\WXS 141dd32009 首页背景图更换
continuous-integration/drone/push Build is passing Details
2024-08-12 11:44:44 +08:00
DESKTOP-6C3NK6N\WXS 94268942d1 意见反馈和国际化组件部分页面渲染多次问题
continuous-integration/drone/push Build is passing Details
2024-08-12 11:16:47 +08:00
DESKTOP-6C3NK6N\WXS 5c43369335 pacsAE格式校验
continuous-integration/drone/push Build is passing Details
2024-08-09 15:44:39 +08:00
DESKTOP-6C3NK6N\WXS c6df434fa4 pacs配置确认修改
continuous-integration/drone/push Build is passing Details
2024-08-09 15:10:59 +08:00
DESKTOP-6C3NK6N\WXS ca79de57d2 PACS配置确认问题修改
continuous-integration/drone/push Build is passing Details
2024-08-09 14:14:23 +08:00
DESKTOP-6C3NK6N\WXS f092d410b9 PACS配置确保连通性校验
continuous-integration/drone/push Build is pending Details
2024-08-09 14:00:54 +08:00
caiyiling 49f693c244 Merge branch 'uat' of https://gitea.frp.extimaging.com/XCKJ/irc_web into uat
continuous-integration/drone/push Build was killed Details
2024-08-09 13:42:09 +08:00
caiyiling 8bd46c150b 样式调整 2024-08-09 13:41:35 +08:00
DESKTOP-6C3NK6N\WXS 08710d78d1 临床数据名称国际化
continuous-integration/drone/push Build is running Details
2024-08-09 13:08:52 +08:00
caiyiling 0432d73dc3 Merge branch 'uat' of https://gitea.frp.extimaging.com/XCKJ/irc_web into uat
continuous-integration/drone/push Build is running Details
2024-08-09 13:08:43 +08:00
caiyiling 67d995d180 阅片类型编辑样式修改 2024-08-09 13:04:47 +08:00
DESKTOP-6C3NK6N\WXS de313e9b52 去除锁屏二次验证
continuous-integration/drone/push Build is passing Details
2024-08-09 11:44:32 +08:00
DESKTOP-6C3NK6N\WXS b0efb9066d PACS配置确保连通性校验
continuous-integration/drone/push Build is passing Details
2024-08-09 10:17:38 +08:00
caiyiling 3304a5d8d2 分裂更改
continuous-integration/drone/push Build is passing Details
2024-08-08 17:39:27 +08:00
DESKTOP-6C3NK6N\WXS 4c37ebef3e 登录页浏览器推荐国际化问题
continuous-integration/drone/push Build is passing Details
2024-08-08 16:40:48 +08:00
DESKTOP-6C3NK6N\WXS 0e71a32c58 中心添加dicom问题修改
continuous-integration/drone/push Build is passing Details
2024-08-08 16:34:51 +08:00
caiyiling 38f5b52938 项目下的中心配置更改
continuous-integration/drone/push Build is passing Details
2024-08-08 16:26:10 +08:00
DESKTOP-6C3NK6N\WXS 9700bd4c31 去除视频插件
continuous-integration/drone/push Build is passing Details
2024-08-08 13:45:57 +08:00
DESKTOP-6C3NK6N\WXS 06e86994ea 临床数据签名问题
continuous-integration/drone/push Build is passing Details
2024-08-08 13:12:24 +08:00
DESKTOP-6C3NK6N\WXS c00200c6ad 查看阅片人简历隐藏部分字段
continuous-integration/drone/push Build is passing Details
2024-08-08 10:46:26 +08:00
DESKTOP-6C3NK6N\WXS 02df28b2fa 意见反馈图片上传问题
continuous-integration/drone/push Build is passing Details
2024-08-08 10:25:10 +08:00
caiyiling 9f124da272 Merge branch 'uat' into main
continuous-integration/drone/push Build is passing Details
2024-08-08 10:18:42 +08:00
DESKTOP-6C3NK6N\WXS e4b366c86a 调研表国际化
continuous-integration/drone/push Build is passing Details
2024-08-07 18:30:56 +08:00
DESKTOP-6C3NK6N\WXS 741086f92f LiLi-uat国际化 2024-08-07 18:26:56 +08:00
DESKTOP-6C3NK6N\WXS 4184293636 LiLi-uat国际化
continuous-integration/drone/push Build is passing Details
2024-08-07 18:16:41 +08:00
caiyiling a01ee34f12 Merge branch 'uat' of https://gitea.frp.extimaging.com/XCKJ/irc_web into uat
continuous-integration/drone/push Build is running Details
2024-08-07 18:12:29 +08:00
caiyiling c55459d32f qc问题配置更改 2024-08-07 18:11:58 +08:00
DESKTOP-6C3NK6N\WXS a85cf70df8 简历隐藏中英文切换
continuous-integration/drone/push Build is passing Details
2024-08-07 17:27:21 +08:00
DESKTOP-6C3NK6N\WXS 738d46d225 意见反馈部分样式优化
continuous-integration/drone/push Build is passing Details
2024-08-07 17:20:59 +08:00
DESKTOP-6C3NK6N\WXS 4ad5462801 中心配置中文字段放开
continuous-integration/drone/push Build is passing Details
2024-08-07 16:18:58 +08:00
caiyiling fad91756b6 Merge branch 'uat' of https://gitea.frp.extimaging.com/XCKJ/irc_web into uat
continuous-integration/drone/push Build is passing Details
2024-08-07 15:32:37 +08:00
caiyiling 0a4c502628 阅片人筛选模块下载简历更改 2024-08-07 15:32:03 +08:00
DESKTOP-6C3NK6N\WXS f1b0852b51 MFA倒计时问题
continuous-integration/drone/push Build is passing Details
2024-08-07 14:54:29 +08:00
caiyiling 5e514a48dc 阅片定位逻辑更改
continuous-integration/drone/push Build is passing Details
2024-08-07 14:51:49 +08:00
DESKTOP-6C3NK6N\WXS e77a015f6e 【意见反馈】查询筛选项反馈人
continuous-integration/drone/push Build is passing Details
2024-08-07 14:35:46 +08:00
DESKTOP-6C3NK6N\WXS ec0a793090 阅片单元影像检查筛选样式修改
continuous-integration/drone/push Build is passing Details
2024-08-07 11:25:49 +08:00
DESKTOP-6C3NK6N\WXS 7f462a8b18 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-08-07 10:37:24 +08:00
DESKTOP-6C3NK6N\WXS 2e56e069d2 反馈设置为已解决后,统计数量刷新 2024-08-07 10:37:12 +08:00
caiyiling e26d40f885 项目阅片单元配置更改
continuous-integration/drone/push Build is passing Details
2024-08-07 10:27:32 +08:00
DESKTOP-6C3NK6N\WXS 6e72825dff 系统相关角色编辑修改
continuous-integration/drone/push Build is passing Details
2024-08-06 18:03:43 +08:00
DESKTOP-6C3NK6N\WXS a3c5a23e1e 邮件管理编辑修改
continuous-integration/drone/push Build is passing Details
2024-08-06 17:53:16 +08:00
DESKTOP-6C3NK6N\WXS 0a53860620 邮件管理字段变更
continuous-integration/drone/push Build is running Details
2024-08-06 17:48:31 +08:00
DESKTOP-6C3NK6N\WXS 07fe167eac 反馈图片上传问题
continuous-integration/drone/push Build is running Details
2024-08-06 17:45:40 +08:00
DESKTOP-6C3NK6N\WXS 2a00dda5f4 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-08-06 17:45:01 +08:00
caiyiling a185f4755a Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-08-06 17:33:06 +08:00
caiyiling 0aacbf49d9 阅片反馈修改 2024-08-06 17:32:44 +08:00
DESKTOP-6C3NK6N\WXS 10e1c92e73 【意见反馈】状态修改为已解决,退出再次进入状态仍为未解决 2024-08-06 17:17:26 +08:00
caiyiling 385afa93f0 稽查更改
continuous-integration/drone/push Build is passing Details
2024-08-06 17:13:05 +08:00
DESKTOP-6C3NK6N\WXS e955f4973c 邮件管理新增系统相关分角色tab
continuous-integration/drone/push Build is passing Details
2024-08-06 17:12:31 +08:00
DESKTOP-6C3NK6N\WXS 0b49bd8dab 数据导出模板新增NameCN字段
continuous-integration/drone/push Build is passing Details
2024-08-06 17:04:48 +08:00
caiyiling 3820146acb 稽查bug修复及国际化等修改
continuous-integration/drone/push Build is passing Details
2024-08-06 16:34:44 +08:00
DESKTOP-6C3NK6N\WXS e98e826328 crc临床数据同名文件上传问题
continuous-integration/drone/push Build is passing Details
2024-08-06 16:31:17 +08:00
DESKTOP-6C3NK6N\WXS 86557af12f 一致性分析按钮权限
continuous-integration/drone/push Build is passing Details
2024-08-06 15:38:10 +08:00
caiyiling 581ed42ab6 阅片分配列表高度适配更改
continuous-integration/drone/push Build is passing Details
2024-08-06 10:26:15 +08:00
caiyiling ba17dd4148 阅片报告修改
continuous-integration/drone/push Build is passing Details
2024-08-05 17:43:34 +08:00
DESKTOP-6C3NK6N\WXS 1ce67efa9b 一致性分析临床数据
continuous-integration/drone/push Build is passing Details
2024-08-05 17:25:55 +08:00
caiyiling 7e21325fa1 1
continuous-integration/drone/push Build is passing Details
2024-08-05 16:22:21 +08:00
caiyiling 44f6b11d50 1
continuous-integration/drone/push Build is passing Details
2024-08-05 15:19:34 +08:00
caiyiling 6e88d2cae2 1
continuous-integration/drone/push Build is running Details
2024-08-05 15:15:51 +08:00
caiyiling 62f5f5ac38 上传影像页预览补充显示序列信息
continuous-integration/drone/push Build is running Details
2024-08-05 15:11:16 +08:00
caiyiling ddb5254716 肿瘤学阅片更改
continuous-integration/drone/push Build is passing Details
2024-08-05 14:28:00 +08:00
caiyiling fcc4820087 系统阅片配置更改
continuous-integration/drone/push Build is passing Details
2024-08-05 14:22:29 +08:00
DESKTOP-6C3NK6N\WXS a3c7e76267 1
continuous-integration/drone/push Build is passing Details
2024-08-02 16:20:17 +08:00
DESKTOP-6C3NK6N\WXS c6b38ea528 阅片跟踪反馈按钮调整 2024-08-02 16:19:26 +08:00
caiyiling 8b1679dfc5 项目列表行点击跳转事件添加限制
continuous-integration/drone/push Build is passing Details
2024-08-02 16:05:17 +08:00
caiyiling 8597e0a7e8 邮件管理样式调整
continuous-integration/drone/push Build is passing Details
2024-08-02 15:20:47 +08:00
caiyiling f96f8bca91 Merge remote-tracking branch 'origin/uat' into main
continuous-integration/drone/push Build is running Details
2024-08-02 15:18:54 +08:00
caiyiling f8837d8cef 样式调整
continuous-integration/drone/push Build is passing Details
2024-08-02 14:41:27 +08:00
caiyiling be3719c0d2 Merge branch 'uat' of https://gitea.frp.extimaging.com/XCKJ/irc_web into uat
continuous-integration/drone/push Build is passing Details
2024-08-02 14:19:27 +08:00
caiyiling 51e0322f6d 样式调整 2024-08-02 14:19:15 +08:00
DESKTOP-6C3NK6N\WXS 7c379c9566 Merge branch 'uat' of https://gitea.frp.extimaging.com/XCKJ/irc_web into uat
continuous-integration/drone/push Build is running Details
2024-08-02 14:17:29 +08:00
DESKTOP-6C3NK6N\WXS 38b9e092a4 国际化问题修改 2024-08-02 14:17:17 +08:00
caiyiling 23c0e4e675 Merge branch 'uat' of https://gitea.frp.extimaging.com/XCKJ/irc_web into uat
continuous-integration/drone/push Build is running Details
2024-08-02 14:10:11 +08:00
caiyiling 0aaa38e751 质控样式调整 2024-08-02 14:09:52 +08:00
DESKTOP-6C3NK6N\WXS ce1bd2df25 国际化问题修改
continuous-integration/drone/push Build is running Details
2024-08-02 14:08:42 +08:00
DESKTOP-6C3NK6N\WXS d0641cdfc9 PM项目总览反馈记录数量
continuous-integration/drone/push Build is passing Details
2024-08-02 14:02:44 +08:00
caiyiling ea413ffe0b 影像质控样式调整
continuous-integration/drone/push Build is passing Details
2024-08-02 14:00:23 +08:00
caiyiling f87935f6f5 审核通过时间查询条件更改
continuous-integration/drone/push Build is passing Details
2024-08-02 13:44:39 +08:00
DESKTOP-6C3NK6N\WXS 32274c4a37 阅片跟踪问题反馈
continuous-integration/drone/push Build is passing Details
2024-08-02 13:44:32 +08:00
caiyiling 132af31c1b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-08-02 13:12:26 +08:00
caiyiling f8c28fc66d Merge remote-tracking branch 'origin/uat' into main 2024-08-02 13:12:11 +08:00
caiyiling 3819f5af0b 影像上传和影像指控页面添加审核完成时间
continuous-integration/drone/push Build is passing Details
2024-08-02 11:41:50 +08:00
DESKTOP-6C3NK6N\WXS 46bc955e76 推送记录根据项目过滤并且按时间倒序排序
continuous-integration/drone/push Build is passing Details
2024-08-02 11:16:54 +08:00
DESKTOP-6C3NK6N\WXS 802870f3b4 中心的AE添加时的交互缺陷
continuous-integration/drone/push Build is running Details
2024-08-02 11:12:06 +08:00
DESKTOP-6C3NK6N\WXS 8a46adf96f 阅片跟踪反馈弹窗添加确认取消
continuous-integration/drone/push Build is passing Details
2024-08-02 10:40:20 +08:00
DESKTOP-6C3NK6N\WXS 57f470e219 AE的状态测试按钮调整 2024-08-02 10:29:51 +08:00
caiyiling 14cc8ad5f5 影像重传bug修复
continuous-integration/drone/push Build is passing Details
2024-08-01 17:13:59 +08:00
caiyiling 43bdf0cc19 影像重传bug修复
continuous-integration/drone/push Build is passing Details
2024-08-01 16:34:07 +08:00
DESKTOP-6C3NK6N\WXS 049d8dc430 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-08-01 16:15:40 +08:00
DESKTOP-6C3NK6N\WXS e0ccfe8da7 意见反馈title 2024-08-01 16:15:27 +08:00
caiyiling c5758b17df 阅片意见反馈
continuous-integration/drone/push Build is passing Details
2024-08-01 15:58:28 +08:00
caiyiling e485b73e1b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-08-01 15:47:19 +08:00
caiyiling 91c78127f2 自定义阅片意见反馈 2024-08-01 15:46:36 +08:00
DESKTOP-6C3NK6N\WXS bbfd119d08 意见反馈表格修改
continuous-integration/drone/push Build is passing Details
2024-08-01 15:40:46 +08:00
caiyiling 32de7c4f18 阅片反馈
continuous-integration/drone/push Build is running Details
2024-08-01 15:36:09 +08:00
DESKTOP-6C3NK6N\WXS b76303c63d 意见反馈
continuous-integration/drone/push Build is passing Details
2024-08-01 15:23:58 +08:00
DESKTOP-6C3NK6N\WXS 96cb8a478c 意见反馈添加字段
continuous-integration/drone/push Build is passing Details
2024-08-01 10:39:54 +08:00
DESKTOP-6C3NK6N\WXS c13fe6b521 意见反馈
continuous-integration/drone/push Build is passing Details
2024-08-01 09:31:58 +08:00
DESKTOP-6C3NK6N\WXS fc6d0c7b35 添加中心处,数据查询以及人员列表问题修复
continuous-integration/drone/push Build is passing Details
2024-07-31 16:13:35 +08:00
DESKTOP-6C3NK6N\WXS 0ba8739cb5 dicom签名配置修改
continuous-integration/drone/push Build is passing Details
2024-07-31 15:16:50 +08:00
DESKTOP-6C3NK6N\WXS aeeb4b05f5 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
2024-07-31 14:04:39 +08:00
DESKTOP-6C3NK6N\WXS 8ee3847791 阅片单元表格操作栏宽度加宽
continuous-integration/drone/push Build is passing Details
2024-07-31 14:04:05 +08:00
DESKTOP-6C3NK6N\WXS c9e99339d5 阅片单元问题配置问题名称中英文问题
continuous-integration/drone/push Build is passing Details
2024-07-31 13:39:43 +08:00
DESKTOP-6C3NK6N\WXS df304d8f07 阅片单元问题配置问题名称中英文问题
continuous-integration/drone/push Build is passing Details
2024-07-31 13:35:47 +08:00
DESKTOP-6C3NK6N\WXS 404d18faa5 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
2024-07-31 13:24:22 +08:00
DESKTOP-6C3NK6N\WXS e593aedd46 阅片单元问题配置问题名称中英文问题
continuous-integration/drone/push Build is passing Details
2024-07-31 13:23:56 +08:00
DESKTOP-6C3NK6N\WXS c6c9142934 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
2024-07-31 13:11:51 +08:00
DESKTOP-6C3NK6N\WXS 65e4bf94ad 阅片单元问题配置问题名称中英文问题
continuous-integration/drone/push Build is passing Details
2024-07-31 13:11:13 +08:00
caiyiling 14ad1ae156 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-07-31 11:24:02 +08:00
caiyiling ddd35f4ff8 质控下载影像更改 2024-07-31 11:22:13 +08:00
DESKTOP-6C3NK6N\WXS 275501db20 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
2024-07-31 11:18:22 +08:00
DESKTOP-6C3NK6N\WXS e81b7897e7 mfa标题加粗
continuous-integration/drone/push Build is passing Details
2024-07-31 11:17:56 +08:00
DESKTOP-6C3NK6N\WXS ab65a9f1c7 阅片单元问题配置问题名称中英文问题 2024-07-31 11:17:32 +08:00
caiyiling 7f8d08032c 1
continuous-integration/drone/push Build is passing Details
2024-07-31 10:53:42 +08:00
DESKTOP-6C3NK6N\WXS c3955dc017 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
# Conflicts:
#	src/components/Dicom/DicomCanvas.vue
#	src/main.js
#	src/views/dicom-show/dicom-study.vue
#	src/views/dicom-show/dicom-visit.vue
#	src/views/login/index.vue
#	src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue
#	src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomCanvas.vue
#	src/views/trials/trials-panel/reading/dicoms/customize/CustomizeStudyList.vue
2024-07-31 10:23:17 +08:00
DESKTOP-6C3NK6N\WXS 4b6c589881 锁定MFA验证邮箱加密
continuous-integration/drone/push Build is passing Details
2024-07-31 10:06:54 +08:00
DESKTOP-6C3NK6N\WXS 73a6935fb8 管理后台默认访问页面修改 2024-07-31 10:06:19 +08:00
caiyiling ec96011d4b 多帧样式更改
continuous-integration/drone/push Build is passing Details
2024-07-30 18:57:07 +08:00
DESKTOP-6C3NK6N\WXS c01c69a9fe 意见反馈
continuous-integration/drone/push Build is passing Details
2024-07-30 17:47:18 +08:00
caiyiling 750c465b18 医学审核更改
continuous-integration/drone/push Build is passing Details
2024-07-30 17:04:16 +08:00
caiyiling d1f90a2525 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-07-30 16:59:02 +08:00
caiyiling 4212eb0f52 医学审核查看图片及多帧bug修复 2024-07-30 16:58:33 +08:00
DESKTOP-6C3NK6N\WXS d37c44a268 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-07-30 16:35:17 +08:00
DESKTOP-6C3NK6N\WXS 4c0b219b47 意见反馈 2024-07-30 16:34:59 +08:00
caiyiling db4632fb9b 关键帧渲染问题修复
continuous-integration/drone/push Build is passing Details
2024-07-30 16:28:11 +08:00
caiyiling 42c1b56dda Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-07-30 15:16:32 +08:00
caiyiling d56b904141 1 2024-07-30 15:16:06 +08:00
caiyiling 1eae9eda28 多帧下载及进度条维护
continuous-integration/drone/push Build is passing Details
2024-07-30 14:55:59 +08:00
DESKTOP-6C3NK6N\WXS aa5f5f9bc6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-07-30 14:40:12 +08:00
DESKTOP-6C3NK6N\WXS 8fc6bdb437 部分页面去除中英文转换 2024-07-30 14:39:59 +08:00
caiyiling a7ce5526fd 阅片多帧进度更改
continuous-integration/drone/push Build is passing Details
2024-07-30 13:56:44 +08:00
DESKTOP-6C3NK6N\WXS fbb41e3fd9 1
continuous-integration/drone/push Build is passing Details
2024-07-30 13:42:24 +08:00
DESKTOP-6C3NK6N\WXS 7311252d3c Merge branch 'uat' into uat_us 2024-07-30 13:33:09 +08:00
DESKTOP-6C3NK6N\WXS b43202076c ip所在地暂时屏蔽
continuous-integration/drone/push Build is passing Details
2024-07-30 13:32:17 +08:00
DESKTOP-6C3NK6N\WXS 2e11c881f5 1 2024-07-30 10:43:24 +08:00
caiyiling 4b9118839f 多帧对齐预览
continuous-integration/drone/push Build is passing Details
2024-07-30 10:42:18 +08:00
DESKTOP-6C3NK6N\WXS 535d30b6df logo调整 2024-07-30 10:18:31 +08:00
caiyiling a533bb680b 切换序列更改
continuous-integration/drone/push Build is passing Details
2024-07-30 09:58:25 +08:00
DESKTOP-6C3NK6N\WXS be14515286 更改版本号v1.5.4
continuous-integration/drone/push Build is passing Details
2024-07-30 09:32:22 +08:00
DESKTOP-6C3NK6N\WXS 84a8f6ec75 操作限制相关国际化添加国际化 2024-07-30 09:32:00 +08:00
caiyiling d274c774ba Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-07-30 09:09:39 +08:00
caiyiling a7a034014d 阅片预览进度条更改 2024-07-30 09:09:20 +08:00
DESKTOP-6C3NK6N\WXS e16a02eaff 检查部位修改为文本域
continuous-integration/drone/push Build is passing Details
2024-07-29 17:35:12 +08:00
DESKTOP-6C3NK6N\WXS 22193bb291 检查部位输入限制提升至500
continuous-integration/drone/push Build is passing Details
2024-07-29 17:17:22 +08:00
DESKTOP-6C3NK6N\WXS ca98bc278c 意见反馈
continuous-integration/drone/push Build is passing Details
2024-07-29 17:15:41 +08:00
DESKTOP-6C3NK6N\WXS 03cf2def1b 表格高度调整
continuous-integration/drone/push Build is passing Details
2024-07-29 16:54:42 +08:00
caiyiling 847845a6c4 多帧对齐更改
continuous-integration/drone/push Build is passing Details
2024-07-29 11:06:29 +08:00
caiyiling f5ec5505d4 多帧对齐更改
continuous-integration/drone/push Build is passing Details
2024-07-29 10:46:51 +08:00
DESKTOP-6C3NK6N\WXS 53a9b3882d Merge commit 'fd70c3ee2c41d011a303f6c60083da98119480e5'
continuous-integration/drone/push Build is passing Details
# Conflicts:
#	src/utils/uploadZip.js
2024-07-26 14:55:43 +08:00
DESKTOP-6C3NK6N\WXS 671be02d13 1
continuous-integration/drone/push Build is running Details
2024-07-26 14:46:17 +08:00
caiyiling e1b6bec85b dicom预览更改
continuous-integration/drone/push Build is passing Details
2024-07-26 14:42:51 +08:00
caiyiling 8b6714806e dicom预览更改
continuous-integration/drone/push Build is passing Details
2024-07-26 13:21:12 +08:00
caiyiling 16581bd7b9 预览更改
continuous-integration/drone/push Build is passing Details
2024-07-26 11:41:30 +08:00
DESKTOP-6C3NK6N\WXS d1956e3077 系统相关邮件添加默认值修改
continuous-integration/drone/push Build is failing Details
2024-07-26 11:28:39 +08:00
DESKTOP-6C3NK6N\WXS 9486054a19 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is failing Details
2024-07-26 10:58:45 +08:00
DESKTOP-6C3NK6N\WXS cd3f36756d 邮件管理新增系统相关 2024-07-26 10:58:30 +08:00
caiyiling 057d23d34b 依赖包更新
continuous-integration/drone/push Build is failing Details
2024-07-26 10:39:49 +08:00
caiyiling bea2d448ea Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is failing Details
2024-07-26 10:38:23 +08:00
caiyiling b9b62334c4 dicom预览更改 2024-07-26 10:37:48 +08:00
DESKTOP-6C3NK6N\WXS 8cf5a1a524 检查部位配置修改
continuous-integration/drone/push Build is passing Details
2024-07-25 17:02:47 +08:00
DESKTOP-6C3NK6N\WXS 47fc6c5ef0 mfa国际化修改 2024-07-25 14:54:41 +08:00
caiyiling fd70c3ee2c 1
continuous-integration/drone/push Build is passing Details
2024-07-25 14:19:56 +08:00
caiyiling de638b1436 同意重阅申请更改
continuous-integration/drone/push Build is passing Details
2024-07-25 14:08:50 +08:00
caiyiling ca18abe26e 重阅跟踪--审批结果新增状态
continuous-integration/drone/push Build is passing Details
2024-07-25 13:44:38 +08:00
DESKTOP-6C3NK6N\WXS 02a5f30224 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-07-25 09:35:39 +08:00
DESKTOP-6C3NK6N\WXS 8933a398d7 医学审核修改 2024-07-25 09:35:23 +08:00
caiyiling a71c6e92dc 阅片配置更改及影像上传页面预览规则更改
continuous-integration/drone/push Build is passing Details
2024-07-25 09:06:53 +08:00
DESKTOP-6C3NK6N\WXS 80c0bfb694 医学审核查询条件修改
continuous-integration/drone/push Build is passing Details
2024-07-24 15:06:57 +08:00
DESKTOP-6C3NK6N\WXS 426faba24c 配置取消按钮数据重置、检查部位编辑问题
continuous-integration/drone/push Build is passing Details
2024-07-24 14:29:37 +08:00
DESKTOP-6C3NK6N\WXS a0eaf2f64a 美国uat发布 2024-07-24 13:10:42 +08:00
DESKTOP-6C3NK6N\WXS c6cc83aeec 意见反馈按钮
continuous-integration/drone/push Build is passing Details
2024-07-24 10:19:24 +08:00
DESKTOP-6C3NK6N\WXS 46f66ce2d2 独立阅片人去掉中文姓名
continuous-integration/drone/push Build is passing Details
2024-07-23 15:59:11 +08:00
DESKTOP-6C3NK6N\WXS 35846365a4 dicom配置修改对比标红 2024-07-23 15:58:35 +08:00
DESKTOP-6C3NK6N\WXS 90e33e1b97 pacs直连、检查查询条件新增
continuous-integration/drone/push Build is passing Details
2024-07-23 11:13:20 +08:00
DESKTOP-6C3NK6N\WXS 9b6f8717c3 pacs新增列表刷新
continuous-integration/drone/push Build is passing Details
2024-07-23 10:21:42 +08:00
DESKTOP-6C3NK6N\WXS 65da9636a2 影像检查预览影像
continuous-integration/drone/push Build is passing Details
2024-07-22 18:02:51 +08:00
DESKTOP-6C3NK6N\WXS 9a1b28e08c 项目配置获取部分页面排除 2024-07-22 18:02:26 +08:00
DESKTOP-6C3NK6N\WXS 94ca89db27 指控下载提示修改 2024-07-22 18:02:00 +08:00
DESKTOP-6C3NK6N\WXS b786c5e656 pacs直连
continuous-integration/drone/push Build is passing Details
2024-07-22 14:42:33 +08:00
DESKTOP-6C3NK6N\WXS f32abfe230 1 2024-07-19 14:34:21 +08:00
DESKTOP-6C3NK6N\WXS 3f5092bcbb 1 2024-07-19 13:28:43 +08:00
DESKTOP-6C3NK6N\WXS f0e6c5b9de Merge branch 'uat' into uat_us 2024-07-19 13:24:35 +08:00
hang 0a880af52f 修改自动打包配置
continuous-integration/drone/push Build is passing Details
2024-07-19 11:46:21 +08:00
hang 089d8668f2 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-07-19 11:45:03 +08:00
hang a1dab30d37 增加打包配置 2024-07-19 11:44:42 +08:00
caiyiling 32a7e42c51 阅片标准配置更改 2024-07-19 11:36:23 +08:00
DESKTOP-6C3NK6N\WXS 16b6f5f8b1 上传监控修复、非dicom上传和指控下载排除自动登出
continuous-integration/drone/push Build was killed Details
2024-07-19 10:14:20 +08:00
caiyiling 1a69bd9003 非dicom阅片添加跳过及国际化 2024-07-19 10:11:33 +08:00
caiyiling b37e351491 全局裁判肿瘤学阅片更改 2024-07-18 17:56:02 +08:00
caiyiling c74806a367 自定义标准更改 2024-07-18 17:16:54 +08:00
caiyiling b637fc5856 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-07-18 17:04:48 +08:00
caiyiling de18b8e6e3 阅片更改 2024-07-18 17:04:26 +08:00
wangxiaoshuang 31d3a17b80 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-07-18 15:14:14 +08:00
wangxiaoshuang a0bbb7b64c pacs添加 2024-07-18 15:14:02 +08:00
caiyiling a8bebaba49 1 2024-07-18 14:46:41 +08:00
caiyiling 403008c25f 自定义标准添加重置功能 2024-07-18 14:45:14 +08:00
caiyiling 52ed67850d 阅片报告页修改 2024-07-18 13:46:55 +08:00
caiyiling dfd0b1a767 lugano部分问题显示上一访视任务阅片信息 2024-07-18 11:44:00 +08:00
caiyiling ced87c29c9 1 2024-07-18 11:15:39 +08:00
caiyiling 5e14615176 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-07-18 11:14:36 +08:00
caiyiling 65b9cff361 Lugano标准添加重置功能 2024-07-18 11:14:01 +08:00
wangxiaoshuang 862dcb1b3d 1 2024-07-18 09:07:39 +08:00
wangxiaoshuang 3a02e9a596 Merge branch 'uat'
# Conflicts:
#	src/utils/uploadZip.js
#	src/views/login/index.vue
2024-07-18 09:05:12 +08:00
caiyiling af586a1187 PCWG标准更改 2024-07-17 18:11:00 +08:00
caiyiling 39a0c8163f RecistBM更改 2024-07-17 17:46:19 +08:00
caiyiling da0dabecca RecistBM标准更改 2024-07-17 17:31:27 +08:00
wangxiaoshuang 75efdcf0f7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-07-17 15:58:45 +08:00
wangxiaoshuang bc674ec334 pacs 2024-07-17 15:58:41 +08:00
caiyiling 663c78ef51 iRecist和Recist阅片标准更改 2024-07-17 15:13:55 +08:00
wangxiaoshuang 3ae982d422 国际化修改 2024-07-17 13:35:18 +08:00
wangxiaoshuang b8b876c0c9 Merge branch 'uat_us' 2024-07-17 11:16:56 +08:00
wangxiaoshuang 978aacf085 非dicom阅片国际化修改 2024-07-17 11:16:38 +08:00
wangxiaoshuang 24e7b30b7e 合并分支 2024-07-17 10:15:53 +08:00
wangxiaoshuang ba1ba68c78 Merge branch 'uat'
# Conflicts:
#	src/api/trials.js
#	src/permission.js
#	src/utils/uploadZip.js
#	src/views/login/index.vue
2024-07-17 10:14:54 +08:00
wangxiaoshuang e51e7d0e66 pacs
continuous-integration/drone/push Build is passing Details
2024-07-17 10:09:26 +08:00
wangxiaoshuang 7f36aa5a05 中心调查表链接添加二维码
continuous-integration/drone/push Build is passing Details
2024-07-15 15:52:47 +08:00
wangxiaoshuang 67ceadcc9c 登录日志访问ip屏蔽 2024-07-15 13:48:36 +08:00
wangxiaoshuang e45903d55e 重阅跟踪添加国际化
continuous-integration/drone/push Build is passing Details
2024-07-12 10:25:46 +08:00
wangxiaoshuang 02e82bba33 1
continuous-integration/drone/push Build is passing Details
2024-07-10 10:55:56 +08:00
wangxiaoshuang 3d3e6a3db0 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
# Conflicts:
#	src/views/login/index.vue
2024-07-10 09:53:28 +08:00
wangxiaoshuang 6e2b7cb76a usa环境logo变更
continuous-integration/drone/push Build is passing Details
2024-07-10 09:07:03 +08:00
wangxiaoshuang ca2ed72a6f usa更换logo
continuous-integration/drone/push Build is passing Details
2024-07-09 17:17:53 +08:00
wangxiaoshuang c2e2f65434 项目配置增加diicomAE配置
continuous-integration/drone/push Build is passing Details
2024-07-09 16:40:07 +08:00
caiyiling d2fc9ad981 提交调研表逻辑更改
continuous-integration/drone/push Build is passing Details
2024-07-09 16:27:33 +08:00
caiyiling c2083e9c9c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-07-08 17:45:35 +08:00
caiyiling d118f6461f 1 2024-07-08 17:45:26 +08:00
wangxiaoshuang 13d968c5b9 中心配置中心添加dicomAE
continuous-integration/drone/push Build is passing Details
2024-07-08 16:56:40 +08:00
wangxiaoshuang 65f0af06ad Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-07-08 13:55:15 +08:00
wangxiaoshuang 49a93d0188 管理后台角色添加国际化 2024-07-08 13:55:05 +08:00
caiyiling de832afac8 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-07-08 13:13:19 +08:00
caiyiling c4381a0eb2 中心调研表样式更改 2024-07-08 13:12:22 +08:00
wangxiaoshuang 17c796bd53 管理平台菜单页新增国际化
continuous-integration/drone/push Build is passing Details
2024-07-08 11:43:26 +08:00
caiyiling 9ce1e569eb 样式调整
continuous-integration/drone/push Build is passing Details
2024-07-05 16:10:55 +08:00
caiyiling 8b48f5fe2e 样式调整
continuous-integration/drone/push Build is passing Details
2024-07-05 16:05:59 +08:00
caiyiling 98af1e7540 1
continuous-integration/drone/push Build is passing Details
2024-07-05 15:57:40 +08:00
caiyiling ed027781c4 表单样式调整
continuous-integration/drone/push Build is running Details
2024-07-05 15:53:01 +08:00
caiyiling dd20a93523 表单样式调整
continuous-integration/drone/push Build is running Details
2024-07-05 15:49:50 +08:00
caiyiling ba5e9f82b7 移动端调研表操作功能添加权限控制
continuous-integration/drone/push Build is passing Details
2024-07-05 15:40:26 +08:00
caiyiling 5af5954f2a 表单样式调整
continuous-integration/drone/push Build is passing Details
2024-07-05 15:36:19 +08:00
caiyiling 9e1dbda53c 国际化补充
continuous-integration/drone/push Build is passing Details
2024-07-05 15:08:44 +08:00
caiyiling 3aa521229f 中心调研表登录页面优化
continuous-integration/drone/push Build is running Details
2024-07-05 15:07:07 +08:00
caiyiling cd1735eae8 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-07-05 15:00:06 +08:00
caiyiling 29dfe79acd 中心调研表功能完善 2024-07-05 14:59:05 +08:00
wangxiaoshuang 885af6d195 国际化修改
continuous-integration/drone/push Build is passing Details
2024-07-05 14:38:40 +08:00
wangxiaoshuang 98fe1f0365 下载功能暂时屏蔽
continuous-integration/drone/push Build is passing Details
2024-07-05 11:39:29 +08:00
wangxiaoshuang 74e86cbdbe Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
# Conflicts:
#	src/views/login/index.vue
2024-07-05 10:21:53 +08:00
wangxiaoshuang 6b06d2a5f0 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is failing Details
2024-07-05 09:09:53 +08:00
wangxiaoshuang 6250e957f0 上传方式修改 2024-07-05 09:09:40 +08:00
caiyiling 9cb9478848 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-07-04 18:01:04 +08:00
caiyiling bd9ecf13e9 调研表布局调整 2024-07-04 18:00:47 +08:00
wangxiaoshuang fe67ef0189 浏览器推荐版本更改
continuous-integration/drone/push Build is running Details
2024-07-04 18:00:22 +08:00
caiyiling 7283c5a5a1 中心调研登录跳转
continuous-integration/drone/push Build is passing Details
2024-07-04 17:33:22 +08:00
caiyiling 4d224c115d 根据用户访问设备跳转不同的中心调研表登录页面
continuous-integration/drone/push Build is running Details
2024-07-04 17:28:27 +08:00
caiyiling b717530ae3 中心调研表移动端页面布局调整
continuous-integration/drone/push Build is passing Details
2024-07-04 17:14:34 +08:00
caiyiling 66e5380fce Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-07-04 11:45:23 +08:00
wangxiaoshuang 9f73ae7e31 1
continuous-integration/drone/push Build is running Details
2024-07-04 11:45:10 +08:00
caiyiling 8876d24054 阅片页面功能优化 2024-07-04 11:45:03 +08:00
wangxiaoshuang d5084e411b 浏览器推荐版本弹框
continuous-integration/drone/push Build is passing Details
2024-07-03 14:26:34 +08:00
wangxiaoshuang cf7c7cbbc1 Merge branch 'uat'
continuous-integration/drone/push Build is passing Details
# Conflicts:
#	src/views/login/index.vue
#	src/views/trials/trials-layout/components/trialsNavbar.vue
#	src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue
#	src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomCanvas.vue
#	src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomViewer.vue
2024-07-03 13:29:35 +08:00
wangxiaoshuang ac272d1e94 版本推荐列表字段修改
continuous-integration/drone/push Build is failing Details
2024-07-03 10:00:14 +08:00
wangxiaoshuang 6a59ed80e2 1
continuous-integration/drone/push Build is failing Details
2024-07-02 15:57:15 +08:00
wangxiaoshuang d0cefb09df 推荐版本记录删除 2024-07-02 14:42:05 +08:00
wangxiaoshuang 4c241b9acd 管理后台新增浏览器版本推荐
continuous-integration/drone/push Build is failing Details
2024-07-02 14:40:24 +08:00
wangxiaoshuang e265b0c2af pm新增的部位,支持编辑
continuous-integration/drone/push Build is failing Details
2024-07-01 15:12:38 +08:00
wangxiaoshuang 2f549846ba 临床数据上传列表添加文件大小字段
continuous-integration/drone/push Build is passing Details
2024-07-01 14:07:40 +08:00
wangxiaoshuang d9f10055aa 邮箱管理发件邮箱配置清除默认值
continuous-integration/drone/push Build is passing Details
2024-07-01 11:06:47 +08:00
wangxiaoshuang 19c2c4eecb 影像上传不记入用户锁定和用户退出
continuous-integration/drone/push Build is passing Details
2024-07-01 11:01:33 +08:00
wangxiaoshuang b3bff41d35 系统标准配置全局阅片、肿瘤学阅片时,没有字段
continuous-integration/drone/push Build is passing Details
2024-06-28 16:05:03 +08:00
wangxiaoshuang 0eb1289cf0 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-06-28 15:58:50 +08:00
wangxiaoshuang 5048f040cc zyss、zybs去除我的项目tab 2024-06-28 15:58:39 +08:00
caiyiling 62d7315401 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-06-28 15:40:28 +08:00
caiyiling 13b083d2df 阅片页面添加多帧影像标记渲染 2024-06-28 15:39:30 +08:00
wangxiaoshuang 712d2cc89b 自定义独立阅片人的证书pdf浏览方式修改为pdfjs
continuous-integration/drone/push Build is passing Details
2024-06-28 15:33:09 +08:00
wangxiaoshuang 9795f89ce9 定时锁定功能问题修复
continuous-integration/drone/push Build is passing Details
2024-06-28 15:21:18 +08:00
wangxiaoshuang 4eb9c2ff85 定时锁定功能问题修复
continuous-integration/drone/push Build is passing Details
2024-06-28 15:10:50 +08:00
wangxiaoshuang d5f1ecbb04 定时锁定功能问题修复
continuous-integration/drone/push Build is running Details
2024-06-28 15:08:19 +08:00
wangxiaoshuang a53fc5478b 临床数据上传流程优化 2024-06-28 15:07:57 +08:00
caiyiling 3ab5c46455 签署文档优化
continuous-integration/drone/push Build is passing Details
2024-06-28 11:38:23 +08:00
caiyiling c37332e8e2 CRC回复影像质疑,增加自动进入下一任务
continuous-integration/drone/push Build is passing Details
2024-06-28 10:31:49 +08:00
caiyiling 79cc39918e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-06-27 16:43:32 +08:00
caiyiling ccac950bcf 医学反馈bug修复 2024-06-27 16:43:01 +08:00
wangxiaoshuang e0b095ebc9 登录页版本信息改为后端获取
continuous-integration/drone/push Build is running Details
2024-06-27 16:41:46 +08:00
wangxiaoshuang 898f6ed8f7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details
2024-06-27 16:25:23 +08:00
wangxiaoshuang ced1be74b3 国家化新增模块、迭代字段,提供批量更新 2024-06-27 16:25:18 +08:00
caiyiling e6926382fd IR医学反馈添加自动跳转下一任务
continuous-integration/drone/push Build is passing Details
2024-06-27 16:17:05 +08:00
wangxiaoshuang 59f27b9d35 版本记录字段顺序调整
continuous-integration/drone/push Build is passing Details
2024-06-27 15:22:22 +08:00
wangxiaoshuang 12449e0ca0 版本记录新增发布状态和是否当前版本字段
continuous-integration/drone/push Build is passing Details
2024-06-27 15:16:48 +08:00
wangxiaoshuang 3b745051eb 临床数据、IQC问题、医学问题国际化问题修改
continuous-integration/drone/push Build is passing Details
2024-06-27 14:02:01 +08:00
wangxiaoshuang 81c21c995d usa环境软件名称变更图片
continuous-integration/drone/push Build is passing Details
2024-06-27 13:21:03 +08:00
wangxiaoshuang a2ffa87056 软件名称变更图片测试
continuous-integration/drone/push Build is passing Details
2024-06-27 09:44:13 +08:00
629 changed files with 149369 additions and 52234 deletions

View File

@ -5,7 +5,8 @@ NODE_ENV = 'development'
VUE_APP_BASE_PATH = '/' VUE_APP_BASE_PATH = '/'
VUE_APP_IS_TEST = false VUE_APP_IS_TEST = false
# onlyoffice地址
VUE_APP_ONLYOFFICE_URL = "https://onlyoffice.test.extimaging.com"
# base api # base api
VUE_APP_BASE_API = 'http://123.56.94.154:7000' VUE_APP_BASE_API = 'http://123.56.94.154:7000'

View File

@ -5,6 +5,9 @@ NODE_ENV = 'prod'
# base public path # base public path
VUE_APP_BASE_PATH = '/' VUE_APP_BASE_PATH = '/'
# onlyoffice地址
VUE_APP_ONLYOFFICE_URL = "https://office.extimaging.com"
# 是否开启登陆限制 true:是 false:否 # 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true VUE_APP_LOGIN_FOR_PERMISSION = true

View File

@ -3,6 +3,8 @@ ENV = 'production'
NODE_ENV = 'production' NODE_ENV = 'production'
# base public path # base public path
VUE_APP_BASE_PATH = '/' VUE_APP_BASE_PATH = '/'
# onlyoffice地址
VUE_APP_ONLYOFFICE_URL = "https://onlyoffice.test.extimaging.com"
VUE_APP_IS_TEST = true VUE_APP_IS_TEST = true

View File

@ -2,6 +2,9 @@
ENV = 'prop' ENV = 'prop'
NODE_ENV = 'prop' NODE_ENV = 'prop'
# base public path
VUE_APP_BASE_PATH = '/'
# 是否开启登陆限制 true:是 false:否 # 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true VUE_APP_LOGIN_FOR_PERMISSION = true

View File

@ -4,6 +4,9 @@ NODE_ENV = 'production'
# base public path # base public path
VUE_APP_BASE_PATH = '/' VUE_APP_BASE_PATH = '/'
# onlyoffice地址
VUE_APP_ONLYOFFICE_URL = "https://onlyoffice.test.extimaging.com"
# base public path # base public path
VUE_APP_BASE_PATH = '/' VUE_APP_BASE_PATH = '/'

View File

@ -2,7 +2,7 @@
ENV = 'usa' ENV = 'usa'
NODE_ENV = 'usa' NODE_ENV = 'usa'
# base public path # base public path
VUE_APP_BASE_PATH = 'https://ei-code-prod.s3.amazonaws.com/2024-07-12/' VUE_APP_BASE_PATH = 'https://ei-code-prod.s3.amazonaws.com/2024-07-30/'
# 是否开启登陆限制 true:是 false:否 # 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true VUE_APP_LOGIN_FOR_PERMISSION = true

View File

@ -2,7 +2,7 @@
ENV = 'usa' ENV = 'usa'
NODE_ENV = 'usa' NODE_ENV = 'usa'
# base public path # base public path
VUE_APP_BASE_PATH = 'https://ei-med-s3-code.s3.amazonaws.com/2024-07-11/' VUE_APP_BASE_PATH = 'https://ei-med-s3-code.s3.amazonaws.com/2024-07-30/'
# 是否开启登陆限制 true:是 false:否 # 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true VUE_APP_LOGIN_FOR_PERMISSION = true

View File

@ -1,48 +1,58 @@
module.exports = { module.exports = {
root: true, root: true,
parserOptions: { parserOptions: {
parser: 'babel-eslint', parser: '@babel/eslint-parser',
sourceType: 'module' sourceType: 'module'
}, },
globals: { globals: {
"zzSessionStorage": true 'zzSessionStorage': true
}, },
env: { env: {
browser: true, browser: true,
node: true, node: true,
es6: true es6: true
}, },
extends: ["plugin:vue/recommended"], extends: ['plugin:vue/recommended'],
// add your custom rules here // add your custom rules here
//it is base on https://github.com/vuejs/eslint-config-vue // it is base on https://github.com/vuejs/eslint-config-vue
rules: { rules: {
"vue/max-attributes-per-line": [ // "rule-name": "off"
2, // "vue/max-attributes-per-line": [
// 2,
// {
// singleline: 10,
// multiline: {
// max: 1,
// allowFirstLine: false
// }
// }
// ],
'vue/max-attributes-per-line': [
'error',
{ {
singleline: 10, singleline: 10,
multiline: { multiline: {
max: 1, max: 1
allowFirstLine: false
} }
} }
], ],
"vue/singleline-html-element-content-newline": "off", 'vue/singleline-html-element-content-newline': 'off',
"vue/multiline-html-element-content-newline": "off", 'vue/multiline-html-element-content-newline': 'off',
"vue/name-property-casing": ["error", "PascalCase"], 'vue/name-property-casing': ['error', 'PascalCase'],
"vue/no-v-html": "off", 'vue/no-v-html': 'off',
"accessor-pairs": 2, 'accessor-pairs': 2,
"arrow-spacing": [ 'arrow-spacing': [
2, 2,
{ {
before: true, before: true,
after: true after: true
} }
], ],
"block-spacing": [2, "always"], 'block-spacing': [2, 'always'],
"brace-style": [ 'brace-style': [
2, 2,
"1tbs", '1tbs',
{ {
allowSingleLine: true allowSingleLine: true
} }
@ -50,31 +60,31 @@ module.exports = {
camelcase: [ camelcase: [
0, 0,
{ {
properties: "always" properties: 'always'
} }
], ],
"comma-dangle": [2, "never"], 'comma-dangle': [2, 'never'],
"comma-spacing": [ 'comma-spacing': [
2, 2,
{ {
before: false, before: false,
after: true after: true
} }
], ],
"comma-style": [2, "last"], 'comma-style': [2, 'last'],
"constructor-super": 2, 'constructor-super': 2,
curly: [2, "multi-line"], curly: [2, 'multi-line'],
"dot-location": [2, "property"], 'dot-location': [2, 'property'],
"eol-last": 2, 'eol-last': 2,
eqeqeq: ["error", "always", { null: "ignore" }], eqeqeq: ['error', 'always', { null: 'ignore' }],
"generator-star-spacing": [ 'generator-star-spacing': [
2, 2,
{ {
before: true, before: true,
after: true after: true
} }
], ],
"handle-callback-err": [2, "^(err|error)$"], 'handle-callback-err': [2, '^(err|error)$'],
indent: [ indent: [
2, 2,
2, 2,
@ -82,197 +92,197 @@ module.exports = {
SwitchCase: 1 SwitchCase: 1
} }
], ],
"jsx-quotes": [2, "prefer-single"], 'jsx-quotes': [2, 'prefer-single'],
"key-spacing": [ 'key-spacing': [
2, 2,
{ {
beforeColon: false, beforeColon: false,
afterColon: true afterColon: true
} }
], ],
"keyword-spacing": [ 'keyword-spacing': [
2, 2,
{ {
before: true, before: true,
after: true after: true
} }
], ],
"new-cap": [ 'new-cap': [
2, 2,
{ {
newIsCap: true, newIsCap: true,
capIsNew: false capIsNew: false
} }
], ],
"new-parens": 2, 'new-parens': 2,
"no-array-constructor": 2, 'no-array-constructor': 2,
"no-caller": 2, 'no-caller': 2,
"no-console": "off", 'no-console': 'off',
"no-class-assign": 2, 'no-class-assign': 2,
"no-cond-assign": 2, 'no-cond-assign': 2,
"no-const-assign": 2, 'no-const-assign': 2,
"no-control-regex": 0, 'no-control-regex': 0,
"no-delete-var": 2, 'no-delete-var': 2,
"no-dupe-args": 2, 'no-dupe-args': 2,
"no-dupe-class-members": 2, 'no-dupe-class-members': 2,
"no-dupe-keys": 2, 'no-dupe-keys': 2,
"no-duplicate-case": 2, 'no-duplicate-case': 2,
"no-empty-character-class": 2, 'no-empty-character-class': 2,
"no-empty-pattern": 2, 'no-empty-pattern': 2,
"no-eval": 2, 'no-eval': 2,
"no-ex-assign": 2, 'no-ex-assign': 2,
"no-extend-native": 2, 'no-extend-native': 2,
"no-extra-bind": 2, 'no-extra-bind': 2,
"no-extra-boolean-cast": 2, 'no-extra-boolean-cast': 2,
"no-extra-parens": [2, "functions"], 'no-extra-parens': [2, 'functions'],
"no-fallthrough": 2, 'no-fallthrough': 2,
"no-floating-decimal": 2, 'no-floating-decimal': 2,
"no-func-assign": 2, 'no-func-assign': 2,
"no-implied-eval": 2, 'no-implied-eval': 2,
"no-inner-declarations": [2, "functions"], 'no-inner-declarations': [2, 'functions'],
"no-invalid-regexp": 2, 'no-invalid-regexp': 2,
"no-irregular-whitespace": 2, 'no-irregular-whitespace': 2,
"no-iterator": 2, 'no-iterator': 2,
"no-label-var": 2, 'no-label-var': 2,
"no-labels": [ 'no-labels': [
2, 2,
{ {
allowLoop: false, allowLoop: false,
allowSwitch: false allowSwitch: false
} }
], ],
"no-lone-blocks": 2, 'no-lone-blocks': 2,
"no-mixed-spaces-and-tabs": 2, 'no-mixed-spaces-and-tabs': 2,
"no-multi-spaces": 2, 'no-multi-spaces': 2,
"no-multi-str": 2, 'no-multi-str': 2,
"no-multiple-empty-lines": [ 'no-multiple-empty-lines': [
2, 2,
{ {
max: 1 max: 1
} }
], ],
"no-native-reassign": 2, 'no-native-reassign': 2,
"no-negated-in-lhs": 2, 'no-negated-in-lhs': 2,
"no-new-object": 2, 'no-new-object': 2,
"no-new-require": 2, 'no-new-require': 2,
"no-new-symbol": 2, 'no-new-symbol': 2,
"no-new-wrappers": 2, 'no-new-wrappers': 2,
"no-obj-calls": 2, 'no-obj-calls': 2,
"no-octal": 2, 'no-octal': 2,
"no-octal-escape": 2, 'no-octal-escape': 2,
"no-path-concat": 2, 'no-path-concat': 2,
"no-proto": 2, 'no-proto': 2,
"no-redeclare": 2, 'no-redeclare': 2,
"no-regex-spaces": 2, 'no-regex-spaces': 2,
"no-return-assign": [2, "except-parens"], 'no-return-assign': [2, 'except-parens'],
"no-self-assign": 2, 'no-self-assign': 2,
"no-self-compare": 2, 'no-self-compare': 2,
"no-sequences": 2, 'no-sequences': 2,
"no-shadow-restricted-names": 2, 'no-shadow-restricted-names': 2,
"no-spaced-func": 2, 'no-spaced-func': 2,
"no-sparse-arrays": 2, 'no-sparse-arrays': 2,
"no-this-before-super": 2, 'no-this-before-super': 2,
"no-throw-literal": 2, 'no-throw-literal': 2,
"no-trailing-spaces": 2, 'no-trailing-spaces': 2,
"no-undef": 2, 'no-undef': 2,
"no-undef-init": 2, 'no-undef-init': 2,
"no-unexpected-multiline": 2, 'no-unexpected-multiline': 2,
"no-unmodified-loop-condition": 2, 'no-unmodified-loop-condition': 2,
"no-unneeded-ternary": [ 'no-unneeded-ternary': [
2, 2,
{ {
defaultAssignment: false defaultAssignment: false
} }
], ],
"no-unreachable": 2, 'no-unreachable': 2,
"no-unsafe-finally": 2, 'no-unsafe-finally': 2,
"no-unused-vars": [ 'no-unused-vars': [
2, 2,
{ {
vars: "all", vars: 'all',
args: "none" args: 'none'
} }
], ],
"no-useless-call": 2, 'no-useless-call': 2,
"no-useless-computed-key": 2, 'no-useless-computed-key': 2,
"no-useless-constructor": 2, 'no-useless-constructor': 2,
"no-useless-escape": 0, 'no-useless-escape': 0,
"no-whitespace-before-property": 2, 'no-whitespace-before-property': 2,
"no-with": 2, 'no-with': 2,
"one-var": [ 'one-var': [
2, 2,
{ {
initialized: "never" initialized: 'never'
} }
], ],
"operator-linebreak": [ 'operator-linebreak': [
2, 2,
"after", 'after',
{ {
overrides: { overrides: {
"?": "before", '?': 'before',
":": "before" ':': 'before'
} }
} }
], ],
"padded-blocks": [2, "never"], 'padded-blocks': [2, 'never'],
quotes: [ quotes: [
2, 2,
"single", 'single',
{ {
avoidEscape: true, avoidEscape: true,
allowTemplateLiterals: true allowTemplateLiterals: true
} }
], ],
semi: [2, "never"], semi: [2, 'never'],
"semi-spacing": [ 'semi-spacing': [
2, 2,
{ {
before: false, before: false,
after: true after: true
} }
], ],
"space-before-blocks": [2, "always"], 'space-before-blocks': [2, 'always'],
"space-before-function-paren": [2, "never"], 'space-before-function-paren': [2, 'never'],
"space-in-parens": [2, "never"], 'space-in-parens': [2, 'never'],
"space-infix-ops": 2, 'space-infix-ops': 2,
"space-unary-ops": [ 'space-unary-ops': [
2, 2,
{ {
words: true, words: true,
nonwords: false nonwords: false
} }
], ],
"spaced-comment": [ 'spaced-comment': [
2, 2,
"always", 'always',
{ {
markers: [ markers: [
"global", 'global',
"globals", 'globals',
"eslint", 'eslint',
"eslint-disable", 'eslint-disable',
"*package", '*package',
"!", '!',
"," ','
] ]
} }
], ],
"template-curly-spacing": [2, "never"], 'template-curly-spacing': [2, 'never'],
"use-isnan": 2, 'use-isnan': 2,
"valid-typeof": 2, 'valid-typeof': 2,
"wrap-iife": [2, "any"], 'wrap-iife': [2, 'any'],
"yield-star-spacing": [2, "both"], 'yield-star-spacing': [2, 'both'],
yoda: [2, "never"], yoda: [2, 'never'],
"prefer-const": 2, 'prefer-const': 2,
//"no-debugger": process.env.NODE_ENV === "production" ? 2 : 0, // "no-debugger": process.env.NODE_ENV === "production" ? 2 : 0,
"object-curly-spacing": [ 'object-curly-spacing': [
2, 2,
"always", 'always',
{ {
objectsInObjects: false objectsInObjects: false
} }
], ],
"array-bracket-spacing": [2, "never"] 'array-bracket-spacing': [2, 'never']
} }
}; }

View File

@ -10516,7 +10516,7 @@ class BaseViewer {
const pageNumber = this._currentPageNumber, const pageNumber = this._currentPageNumber,
state = this.#scrollModePageState, state = this.#scrollModePageState,
viewer = this.viewer; viewmr = this.viewer;
viewer.textContent = ""; viewer.textContent = "";
state.pages.length = 0; state.pages.length = 0;

View File

@ -5,3 +5,6 @@ npm install
# 启动服务 # 启动服务
npm run dev npm run dev
# v1.9.0修改
1. 角色修改全局userId实际意义修改为userRoleId用户角色id新增identityUserId新的用户id

View File

@ -1,10 +1,12 @@
module.exports = { module.exports = {
presets: [ presets: [
'@vue/cli-plugin-babel/preset', // '@vue/cli-plugin-babel/preset',
// ["@babel/preset-env", { "modules": false }]
'@babel/preset-env' '@babel/preset-env'
], ],
plugins: [ plugins: [
'@babel/plugin-proposal-optional-chaining', '@vue/babel-plugin-transform-vue-jsx'
'@babel/plugin-proposal-nullish-coalescing-operator' // '@babel/plugin-proposal-optional-chaining',
// '@babel/plugin-proposal-nullish-coalescing-operator'
] ]
} }

View File

@ -1,6 +1,6 @@
kind: pipeline kind: pipeline
type: ssh type: ssh
name: ssh-linux-test-irc-publish name: ssh-linux-uat-irc-publish
platform: platform:
os: Linux os: Linux
@ -25,5 +25,37 @@ trigger:
branch: branch:
- uat - uat
---
kind: pipeline
type: ssh
name: ssh-linux-test-irc-publish
platform:
os: Linux
arch: 386
clone:
disable: true #禁用默认克隆
server:
host: 106.14.89.110
user: root
password:
from_secret: local_pwd
steps:
- name: publish-test-irc-vue
commands:
- echo start publish test-irc-vue
- cd /opt/1panel/hang/vue/test-irc
- sh test-irc.sh v${DRONE_BUILD_NUMBER}
trigger:
branch:
- main

35925
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -14,85 +14,94 @@
"i18n:en": "node i18nGenerate.js lang=en keyCol=5 valCol=7" "i18n:en": "node i18nGenerate.js lang=en keyCol=5 valCol=7"
}, },
"dependencies": { "dependencies": {
"@aws-sdk/client-s3": "^3.701.0",
"@cornerstonejs/adapters": "^2.19.7",
"@cornerstonejs/calculate-suv": "^1.1.0", "@cornerstonejs/calculate-suv": "^1.1.0",
"@cornerstonejs/core": "^1.27.4", "@cornerstonejs/core": "^2.19.7",
"@cornerstonejs/dicom-image-loader": "^1.27.4", "@cornerstonejs/dicom-image-loader": "^2.19.7",
"@cornerstonejs/streaming-image-volume-loader": "1.23.2", "@cornerstonejs/tools": "^2.19.7",
"@cornerstonejs/tools": "^1.27.4", "@icr/polyseg-wasm": "^0.4.0",
"@ffmpeg/core": "^0.10.0", "@microsoft/signalr": "^8.0.7",
"@ffmpeg/ffmpeg": "^0.10.1", "@riophae/vue-treeselect": "^0.4.0",
"@microsoft/signalr": "^6.0.8", "@vue-office/docx": "^1.6.2",
"@riophae/vue-treeselect": "0.4.0", "@vue-office/excel": "^1.7.11",
"@vue/composition-api": "^1.7.2",
"ali-oss": "^6.17.1", "ali-oss": "^6.17.1",
"axios": "0.18.1", "axios": "^0.18.1",
"babel-eslint": "7.2.3",
"copy-webpack-plugin": "^4.5.2",
"core-js": "^3.8.3", "core-js": "^3.8.3",
"cornerstone-core": "^2.3.0", "cornerstone-core": "^2.6.1",
"cornerstone-math": "^0.1.8", "cornerstone-math": "^0.1.10",
"cornerstone-tools": "^6.0.8", "cornerstone-tools": "^6.0.10",
"cornerstone-wado-image-loader": "^3.1.2", "cornerstone-wado-image-loader": "^4.13.2",
"crypto-js": "^4.2.0",
"dcmjs": "^0.29.8", "dcmjs": "^0.29.8",
"dicom-parser": "^1.8.9", "dicom-parser": "^1.8.9",
"dicomedit": "^0.1.0", "dicomedit": "^0.1.0",
"echarts": "^4.8.0", "echarts": "^4.8.0",
"element-ui": "^2.15.8", "element-ui": "^2.15.14",
"exceljs": "^4.1.0", "exceljs": "^4.4.0",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",
"html2canvas": "^1.4.1", "html2canvas": "^1.4.1",
"js-md5": "^0.7.3", "js-md5": "^0.8.3",
"jszip": "^3.7.1", "jsencrypt": "^3.3.2",
"moment": "^2.27.0", "jszip": "^3.10.1",
"node-polyfill-webpack-plugin": "^2.0.1", "minio": "^7.1.3",
"node-sass": "^4.14.1", "moment": "^2.30.1",
"normalize.css": "7.0.0", "moment-timezone": "^0.5.46",
"nprogress": "0.2.0", "node-xlsx": "^0.24.0",
"path-to-regexp": "2.4.0", "normalize.css": "^8.0.1",
"pdfobject": "^2.2.8", "nprogress": "^0.2.0",
"popper.js": "^1.16.1", "path-to-regexp": "^0.1.10",
"sass-loader": "^8.0.0", "pdfobject": "^2.3.0",
"screenfull": "^4.2.0", "prismjs": "^1.30.0",
"sortablejs": "^1.15.0", "qrcodejs2": "^0.0.2",
"v-viewer": "^1.6.4", "screenfull": "^6.0.2",
"sortablejs": "^1.15.5",
"streamsaver": "^2.0.6",
"svg-sprite-loader": "^4.1.3",
"svgo": "^1.2.2",
"v-viewer": "^1.7.4",
"vcrontab": "^0.3.5", "vcrontab": "^0.3.5",
"vue": "^2.6.11", "vue": "^2.6.14",
"vue-clipboard2": "^0.3.1", "vue-clipboard2": "^0.3.3",
"vue-contextmenujs": "^1.3.13", "vue-contextmenujs": "^1.4.11",
"vue-count-to": "^1.0.13", "vue-count-to": "^1.0.13",
"vue-i18n": "^8.7.0", "vue-demi": "^0.14.10",
"vue-pdf": "^4.3.0", "vue-i18n": "^8.28.2",
"vue-prism-editor": "^1.3.0",
"vue-puzzle-vcode": "^1.1.10", "vue-puzzle-vcode": "^1.1.10",
"vue-router": "3.0.6", "vue-router": "^3.0.6",
"vue-seamless-scroll": "^1.1.21", "vue-seamless-scroll": "^1.1.23",
"vuedraggable": "^2.24.3", "vuedraggable": "^2.24.3",
"vuex": "3.1.0", "vuex": "^3.1.0",
"webpack-aliyun-oss": "^0.4.9" "webpack-aliyun-oss": "^0.3.13"
}, },
"devDependencies": { "devDependencies": {
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/core": "^7.12.16",
"@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~4.5.4", "@babel/plugin-transform-class-static-block": "^7.26.0",
"@vue/cli-plugin-eslint": "~4.5.4", "@vue/babel-plugin-transform-vue-jsx": "^1.4.0",
"@vue/cli-service": "~4.5.4", "@vue/cli-plugin-babel": "~5.0.0",
"autoprefixer": "^9.5.1", "@vue/cli-plugin-eslint": "~5.0.0",
"aws-sdk": "^2.1532.0", "@vue/cli-service": "~5.0.0",
"babel-eslint": "^10.1.0", "autoprefixer": "^10.4.20",
"chalk": "2.4.2", "clean-webpack-plugin": "^4.0.0",
"connect": "3.6.6", "copy-webpack-plugin": "^12.0.2",
"eslint": "^6.7.2", "css-minimizer-webpack-plugin": "^7.0.0",
"eslint-plugin-vue": "^6.2.2", "eslint": "^7.32.0",
"html-webpack-plugin": "3.2.0", "eslint-plugin-vue": "^8.0.3",
"minio": "^7.1.3", "html-webpack-plugin": "^5.6.3",
"moment-timezone": "^0.5.45", "mini-css-extract-plugin": "^2.9.2",
"node-xlsx": "^0.21.0", "node-polyfill-webpack-plugin": "^4.0.0",
"runjs": "^4.3.2", "path-browserify": "^1.0.1",
"script-ext-html-webpack-plugin": "2.1.3", "process": "^0.11.10",
"script-loader": "0.7.2", "sass": "^1.63.2",
"serve-static": "^1.13.2", "sass-loader": "^10.4.1",
"svg-sprite-loader": "4.1.3", "terser-webpack-plugin": "^5.3.10",
"svgo": "1.2.2", "vue-template-compiler": "^2.6.14",
"vue-template-compiler": "^2.6.11" "webpack": "^5.96.1",
"webpack-bundle-analyzer": "^4.10.2"
}, },
"eslintConfig": { "eslintConfig": {
"root": true, "root": true,
@ -100,19 +109,19 @@
"node": true "node": true
}, },
"extends": [ "extends": [
"plugin:vue/essential" "plugin:vue/essential",
"eslint:recommended"
], ],
"parserOptions": { "parserOptions": {
"parser": "babel-eslint" "parser": "@babel/eslint-parser",
"requireConfigFile": false
}, },
"rules": {} "rules": {}
}, },
"engines": {
"node": ">=8.9",
"npm": ">= 3.0.0"
},
"browserslist": [ "browserslist": [
"> 1%", "> 1%",
"last 2 versions" "last 2 versions",
"not dead",
"not op_mini all"
] ]
} }

197
public/cease.html Normal file

File diff suppressed because one or more lines are too long

View File

@ -23,8 +23,8 @@
<img src="./error_assets/zzlogo2.png" alt=""> <img src="./error_assets/zzlogo2.png" alt="">
<img v-show="false" src="./error_assets/zzlogo3.png" alt=""> <img v-show="false" src="./error_assets/zzlogo3.png" alt="">
</div> </div>
<div class="login-image"> <div class="login-image login-image-usa">
<img src="./error_assets/login-bg.png"> <img src="./error_assets/login-bg.svg" style="max-width: 500px;max-height: 300px;">
</div> </div>
</div> </div>
<div class="login-r"> <div class="login-r">
@ -148,7 +148,7 @@
left: 50%; left: 50%;
top: 50%; top: 50%;
transform: translate(-50%,-50%); transform: translate(-50%,-50%);
width: 1200px; width: 1100px;
height: 600px; height: 600px;
box-sizing: border-box; box-sizing: border-box;
background: rgb(255, 255, 255); background: rgb(255, 255, 255);
@ -179,7 +179,12 @@
.login-container .login-body .login-l .login-image img{ .login-container .login-body .login-l .login-image img{
height: 100%; height: 100%;
} }
.login-container .login-body .login-l .login-image-usa {
width: 100%;
display: flex;
align-items: center;
justify-content: flex-end;
}
.login-container .login-body .login-r{ .login-container .login-body .login-r{
position: relative; position: relative;
float: left; float: left;

View File

@ -23,8 +23,8 @@
<img src="./error_assets/zzlogo3.png" alt=""> <img src="./error_assets/zzlogo3.png" alt="">
<img v-show="false" src="./error_assets/zzlogo3.png" alt=""> <img v-show="false" src="./error_assets/zzlogo3.png" alt="">
</div> </div>
<div class="login-image"> <div class="login-image login-image-usa">
<img src="./error_assets/login-bg.png"> <img src="./error_assets/login-bg.svg" style="max-width: 500px;max-height: 300px;">
</div> </div>
</div> </div>
<div class="login-r"> <div class="login-r">
@ -104,7 +104,7 @@
left: 50%; left: 50%;
top: 50%; top: 50%;
transform: translate(-50%,-50%); transform: translate(-50%,-50%);
width: 1200px; width: 1100px;
height: 600px; height: 600px;
box-sizing: border-box; box-sizing: border-box;
background: rgb(255, 255, 255); background: rgb(255, 255, 255);
@ -135,7 +135,12 @@
.login-container .login-body .login-l .login-image img{ .login-container .login-body .login-l .login-image img{
height: 100%; height: 100%;
} }
.login-container .login-body .login-l .login-image-usa {
width: 100%;
display: flex;
align-items: center;
justify-content: flex-end;
}
.login-container .login-body .login-r{ .login-container .login-body .login-r{
position: relative; position: relative;
float: left; float: left;

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 98 KiB

View File

@ -5,6 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta http-equiv="pragram" content="no-cache"> <meta http-equiv="pragram" content="no-cache">
<meta name="autocomplete" content="off">
<meta http-equiv="Expires" content="0"> <meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-store,no-cache,must-revalidate"> <meta http-equiv="Cache-control" content="no-store,no-cache,must-revalidate">
@ -29,7 +30,6 @@
</script> </script>
<% } else { %> <% } else { %>
<script> <script>
console.log(2)
window.zzSessionStorage = { window.zzSessionStorage = {
setItem: (item, value) => { setItem: (item, value) => {
return sessionStorage.setItem(item, value) return sessionStorage.setItem(item, value)

167
public/mitm.html Normal file
View File

@ -0,0 +1,167 @@
<!--
mitm.html is the lite "man in the middle"
This is only meant to signal the opener's messageChannel to
the service worker - when that is done this mitm can be closed
but it's better to keep it alive since this also stops the sw
from restarting
The service worker is capable of intercepting all request and fork their
own "fake" response - wish we are going to craft
when the worker then receives a stream then the worker will tell the opener
to open up a link that will start the download
-->
<script>
// This will prevent the sw from restarting
let keepAlive = () => {
keepAlive = () => {}
var ping = location.href.substr(0, location.href.lastIndexOf('/')) + '/ping'
var interval = setInterval(() => {
if (sw) {
sw.postMessage('ping')
} else {
fetch(ping).then(res => res.text(!res.ok && clearInterval(interval)))
}
}, 10000)
}
// message event is the first thing we need to setup a listner for
// don't want the opener to do a random timeout - instead they can listen for
// the ready event
// but since we need to wait for the Service Worker registration, we store the
// message for later
let messages = []
window.onmessage = evt => messages.push(evt)
let sw = null
let scope = ''
function registerWorker() {
return navigator.serviceWorker.getRegistration('./').then(swReg => {
return swReg || navigator.serviceWorker.register('sw.js', { scope: './' })
}).then(swReg => {
const swRegTmp = swReg.installing || swReg.waiting
scope = swReg.scope
return (sw = swReg.active) || new Promise(resolve => {
swRegTmp.addEventListener('statechange', fn = () => {
if (swRegTmp.state === 'activated') {
swRegTmp.removeEventListener('statechange', fn)
sw = swReg.active
resolve()
}
})
})
})
}
// Now that we have the Service Worker registered we can process messages
function onMessage (event) {
let { data, ports, origin } = event
// It's important to have a messageChannel, don't want to interfere
// with other simultaneous downloads
if (!ports || !ports.length) {
throw new TypeError("[StreamSaver] You didn't send a messageChannel")
}
if (typeof data !== 'object') {
throw new TypeError("[StreamSaver] You didn't send a object")
}
// the default public service worker for StreamSaver is shared among others.
// so all download links needs to be prefixed to avoid any other conflict
data.origin = origin
// if we ever (in some feature versoin of streamsaver) would like to
// redirect back to the page of who initiated a http request
data.referrer = data.referrer || document.referrer || origin
// pass along version for possible backwards compatibility in sw.js
data.streamSaverVersion = new URLSearchParams(location.search).get('version')
if (data.streamSaverVersion === '1.2.0') {
console.warn('[StreamSaver] please update streamsaver')
}
/** @since v2.0.0 */
if (!data.headers) {
console.warn("[StreamSaver] pass `data.headers` that you would like to pass along to the service worker\nit should be a 2D array or a key/val object that fetch's Headers api accepts")
} else {
// test if it's correct
// should thorw a typeError if not
new Headers(data.headers)
}
/** @since v2.0.0 */
if (typeof data.filename === 'string') {
console.warn("[StreamSaver] You shouldn't send `data.filename` anymore. It should be included in the Content-Disposition header option")
// Do what File constructor do with fileNames
data.filename = data.filename.replace(/\//g, ':')
}
/** @since v2.0.0 */
if (data.size) {
console.warn("[StreamSaver] You shouldn't send `data.size` anymore. It should be included in the content-length header option")
}
/** @since v2.0.0 */
if (data.readableStream) {
console.warn("[StreamSaver] You should send the readableStream in the messageChannel, not throught mitm")
}
/** @since v2.0.0 */
if (!data.pathname) {
console.warn("[StreamSaver] Please send `data.pathname` (eg: /pictures/summer.jpg)")
data.pathname = Math.random().toString().slice(-6) + '/' + data.filename
}
// remove all leading slashes
data.pathname = data.pathname.replace(/^\/+/g, '')
// remove protocol
let org = origin.replace(/(^\w+:|^)\/\//, '')
// set the absolute pathname to the download url.
data.url = new URL(`${scope + org}/${data.pathname}`).toString()
if (!data.url.startsWith(`${scope + org}/`)) {
throw new TypeError('[StreamSaver] bad `data.pathname`')
}
// This sends the message data as well as transferring
// messageChannel.port2 to the service worker. The service worker can
// then use the transferred port to reply via postMessage(), which
// will in turn trigger the onmessage handler on messageChannel.port1.
const transferable = data.readableStream
? [ ports[0], data.readableStream ]
: [ ports[0] ]
if (!(data.readableStream || data.transferringReadable)) {
keepAlive()
}
return sw.postMessage(data, transferable)
}
if (window.opener) {
// The opener can't listen to onload event, so we need to help em out!
// (telling them that we are ready to accept postMessage's)
window.opener.postMessage('StreamSaver::loadedPopup', '*')
}
if (navigator.serviceWorker) {
registerWorker().then(() => {
window.onmessage = onMessage
messages.forEach(window.onmessage)
})
}
// FF v102 just started to supports transferable streams, but still needs to ping sw.js
// even tough the service worker dose not have to do any kind of work and listen to any
// messages... #305
keepAlive()
</script>

130
public/sw.js Normal file
View File

@ -0,0 +1,130 @@
/* global self ReadableStream Response */
self.addEventListener('install', () => {
self.skipWaiting()
})
self.addEventListener('activate', event => {
event.waitUntil(self.clients.claim())
})
const map = new Map()
// This should be called once per download
// Each event has a dataChannel that the data will be piped through
self.onmessage = event => {
// We send a heartbeat every x second to keep the
// service worker alive if a transferable stream is not sent
if (event.data === 'ping') {
return
}
const data = event.data
const downloadUrl = data.url || self.registration.scope + Math.random() + '/' + (typeof data === 'string' ? data : data.filename)
const port = event.ports[0]
const metadata = new Array(3) // [stream, data, port]
metadata[1] = data
metadata[2] = port
// Note to self:
// old streamsaver v1.2.0 might still use `readableStream`...
// but v2.0.0 will always transfer the stream through MessageChannel #94
if (event.data.readableStream) {
metadata[0] = event.data.readableStream
} else if (event.data.transferringReadable) {
port.onmessage = evt => {
port.onmessage = null
metadata[0] = evt.data.readableStream
}
} else {
metadata[0] = createStream(port)
}
map.set(downloadUrl, metadata)
port.postMessage({ download: downloadUrl })
}
function createStream (port) {
// ReadableStream is only supported by chrome 52
return new ReadableStream({
start (controller) {
// When we receive data on the messageChannel, we write
port.onmessage = ({ data }) => {
if (data === 'end') {
return controller.close()
}
if (data === 'abort') {
controller.error('Aborted the download')
return
}
controller.enqueue(data)
}
},
cancel (reason) {
console.log('user aborted', reason)
port.postMessage({ abort: true })
}
})
}
self.onfetch = event => {
const url = event.request.url
// this only works for Firefox
if (url.endsWith('/ping')) {
return event.respondWith(new Response('pong'))
}
const hijacke = map.get(url)
if (!hijacke) return null
const [ stream, data, port ] = hijacke
map.delete(url)
// Not comfortable letting any user control all headers
// so we only copy over the length & disposition
const responseHeaders = new Headers({
'Content-Type': 'application/octet-stream; charset=utf-8',
// To be on the safe side, The link can be opened in a iframe.
// but octet-stream should stop it.
'Content-Security-Policy': "default-src 'none'",
'X-Content-Security-Policy': "default-src 'none'",
'X-WebKit-CSP': "default-src 'none'",
'X-XSS-Protection': '1; mode=block',
'Cross-Origin-Embedder-Policy': 'require-corp'
})
let headers = new Headers(data.headers || {})
if (headers.has('Content-Length')) {
responseHeaders.set('Content-Length', headers.get('Content-Length'))
}
if (headers.has('Content-Disposition')) {
responseHeaders.set('Content-Disposition', headers.get('Content-Disposition'))
}
// data, data.filename and size should not be used anymore
if (data.size) {
console.warn('Depricated')
responseHeaders.set('Content-Length', data.size)
}
let fileName = typeof data === 'string' ? data : data.filename
if (fileName) {
console.warn('Depricated')
// Make filename RFC5987 compatible
fileName = encodeURIComponent(fileName).replace(/['()]/g, escape).replace(/\*/g, '%2A')
responseHeaders.set('Content-Disposition', "attachment; filename*=UTF-8''" + fileName)
}
event.respondWith(new Response(stream, { headers: responseHeaders }))
port.postMessage({ debug: 'Download started' })
}

View File

@ -3,6 +3,7 @@
<router-view /> <router-view />
<div <div
v-show="show" v-show="show"
v-if="$route.matched.length > 0"
v-adaptive v-adaptive
@click="openI18n" @click="openI18n"
style=" style="
@ -22,12 +23,38 @@
> >
i18n i18n
</div> </div>
<el-drawer title="国际化" :visible.sync="drawer" direction="rtl" size="80%"> <el-drawer
<div style="width: 320px"> :title="$t('il8n:title')"
<el-form label-width="100px" @submit.native.prevent size="small"> :visible.sync="drawer"
<el-form-item label="关键字"> direction="rtl"
size="80%"
>
<div style="width: 800px">
<el-form
label-width="100px"
@submit.native.prevent
size="small"
:inline="true"
class="demo-form-inline"
>
<el-form-item :label="$t('il8n:search:keyword')">
<el-input v-model="key" @input="keyChange" /> <el-input v-model="key" @input="keyChange" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('il8n:search:state')">
<el-select
v-model="State"
clearable
filterable
@change="handleStateChange"
>
<el-option
v-for="item of $d.InternationalizationKeyState"
:key="'InternationalizationKeyState' + item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-form> </el-form>
</div> </div>
<el-table <el-table
@ -35,8 +62,15 @@
v-adaptive="{ bottomOffset: 50 }" v-adaptive="{ bottomOffset: 50 }"
height="100" height="100"
style="width: 100%" style="width: 100%"
@sort-change="handleSortByColumn"
> >
<el-table-column prop="Code" label="标签" width="300"> <el-table-column
prop="Code"
:label="$t('il8n:table:label')"
width="300"
show-overflow-tooltip
sortable="custom"
>
</el-table-column> </el-table-column>
<!-- <el-table-column--> <!-- <el-table-column-->
<!-- prop="Description"--> <!-- prop="Description"-->
@ -47,40 +81,78 @@
<!-- {{scope.row.Description}}--> <!-- {{scope.row.Description}}-->
<!-- </template>--> <!-- </template>-->
<!-- </el-table-column>--> <!-- </el-table-column>-->
<el-table-column prop="Value" label="英文"> <el-table-column
prop="Value"
:label="$t('il8n:table:en')"
sortable="custom"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-input <el-input
v-model="scope.row.Value" v-model="scope.row.Value"
@input=" @input="
(e) => { (e) => {
$set(scope.row, 'Value', e); $set(scope.row, 'Value', e)
} }
" "
size="mini" size="mini"
></el-input> ></el-input>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="ValueCN" label="中文"> <el-table-column
prop="ValueCN"
:label="$t('il8n:table:cn')"
sortable="custom"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-input <el-input
v-model="scope.row.ValueCN" v-model="scope.row.ValueCN"
@input=" @input="
(e) => { (e) => {
$set(scope.row, 'ValueCN', e); $set(scope.row, 'ValueCN', e)
} }
" "
size="mini" size="mini"
></el-input> ></el-input>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
prop="ValueCN"
:label="$t('il8n:table:state')"
sortable="custom"
>
<template slot-scope="scope">
<el-select
v-model="scope.row.State"
clearable
filterable
size="mini"
>
<el-option
v-for="item of $d.InternationalizationKeyState"
:key="'InternationalizationKeyState' + item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
</el-table-column>
<el-table-column
prop="Version"
:label="$t('il8n:table:Version')"
sortable="custom"
>
</el-table-column>
</el-table> </el-table>
<div style="text-align: right; padding-top: 10px; padding-right: 10px"> <div style="text-align: right; padding-top: 10px; padding-right: 10px">
<el-button size="mini" @click="drawer = false">取消 </el-button> <el-button size="mini" @click="drawer = false"
<el-button size="mini" type="primary" @click="handleSave" >{{ $t('common:button:cancel') }}
>保存</el-button </el-button>
> <el-button size="mini" type="primary" @click="handleSave">{{
$t('common:button:save')
}}</el-button>
</div> </div>
</el-drawer> </el-drawer>
<feedBack v-if="$route.matched.length > 0" />
</div> </div>
</template> </template>
@ -88,12 +160,14 @@
import { import {
batchAddOrUpdateFrontInternationalization, batchAddOrUpdateFrontInternationalization,
getFrontInternationalizationList, getFrontInternationalizationList,
} from "@/api/dictionary/dictionary"; } from '@/api/dictionary/dictionary'
import { getTrialExtralConfig } from "@/api/trials"; import { getTrialExtralConfig } from '@/api/trials'
import Vue from "vue"; import feedBack from '@/views/trials/trials-layout/components/feedBack'
import i18n from "./lang"; import Vue from 'vue'
import i18n from './lang'
export default { export default {
name: "App", name: 'App',
components: { feedBack },
data() { data() {
return { return {
drawer: false, drawer: false,
@ -101,36 +175,63 @@ export default {
show: false, show: false,
key: null, key: null,
arr: [], arr: [],
}; il8nExternal: false,
State: null,
}
}, },
mounted() { mounted() {
this.show = process.env.VUE_APP_OSS_PATH === "/test/dist"; this.show = process.env.VUE_APP_OSS_PATH === '/test/dist'
}, Vue.prototype.$openI18n = this.openI18n
watch: {
"$route.query": {
async handler() {
if (
this.$route.query.trialId &&
this.$route.query.trialId !== this.$store.state.trials.config.trialId
) {
let res = await getTrialExtralConfig({
TrialId: this.$route.query.trialId,
});
if (res.IsSuccess) {
this.$store.dispatch("trials/setConfig", {
trialId: this.$route.query.trialId,
...res.Result,
});
}
}
},
immediate: true,
deep: true,
},
}, },
// watch: {
// '$route.query': {
// async handler() {
// if (!this.$route.query.trialId) {
// this.$store.dispatch('trials/setConfig', {})
// }
// if (
// this.$route.query.trialId &&
// this.$route.query.trialId !==
// this.$store.state.trials.config.trialId &&
// this.$store.state.trials.whiteList.indexOf(this.$route.path) === -1
// ) {
// let res = await getTrialExtralConfig({
// TrialId: this.$route.query.trialId,
// })
// console.log(222222222222)
// res.Result.aa = { : '', : 'aaa' }
// if (res.IsSuccess) {
// this.$store.dispatch('trials/setConfig', {
// trialId: this.$route.query.trialId,
// ...res.Result,
// })
// }
// }
// },
// immediate: true,
// deep: true,
// },
// },
methods: { methods: {
//
handleSortByColumn(column) {
if (column.order === 'ascending') {
this.tableData.sort((a, b) =>
a[column.prop].localeCompare(b[column.prop])
)
} else {
this.tableData.sort((a, b) =>
b[column.prop].localeCompare(a[column.prop])
)
}
},
handleStateChange() {
this.tableData.forEach((item) => {
item.State = this.State
})
},
changeValue(target, attr, e) { changeValue(target, attr, e) {
this.$set(target, attr, e); this.$set(target, attr, e)
}, },
keyChange(v) { keyChange(v) {
if (this.key) { if (this.key) {
@ -138,69 +239,111 @@ export default {
[], [],
this.arr.filter( this.arr.filter(
(v) => (v) =>
~v.Code.indexOf(this.key) || (v.Code &&
~v.Value.indexOf(this.key) || ~v.Code.toLowerCase().indexOf(this.key.toLowerCase())) ||
~v.ValueCN.indexOf(this.key) (v.Value &&
~v.Value.toLowerCase().indexOf(this.key.toLowerCase())) ||
(v.ValueCN &&
~v.ValueCN.toLowerCase().indexOf(this.key.toLowerCase()))
) )
); )
} else { } else {
this.tableData = Object.assign([], this.arr); this.tableData = Object.assign([], this.arr)
} }
}, },
handleSave() { handleSave() {
this.$confirm("确定修改当前页面国际化内容?").then(() => { this.$confirm(this.$t("i18n:confirm:updatei18n"))
batchAddOrUpdateFrontInternationalization(this.tableData).then( .then(() => {
async (res) => { batchAddOrUpdateFrontInternationalization(this.tableData).then(
var zhMessages = {}, async (res) => {
enMessages = {}; var zhMessages = {},
var Internationalization = await getFrontInternationalizationList(); enMessages = {}
Vue.prototype.$tl = Internationalization.Result; var Internationalization =
this.tableData.forEach((v) => { await getFrontInternationalizationList()
// zhMessages[v.Description + '_' + v.Code] = v.ValueCN Vue.prototype.$tl = Internationalization.Result
// enMessages[v.Description + '_' + v.Code] = v.Value this.tableData.forEach((v) => {
zhMessages[v.Code] = v.ValueCN; // zhMessages[v.Description + '_' + v.Code] = v.ValueCN
enMessages[v.Code] = v.Value; // enMessages[v.Description + '_' + v.Code] = v.Value
}); zhMessages[v.Code] = v.ValueCN
i18n.mergeLocaleMessage("zh", zhMessages); enMessages[v.Code] = v.Value
i18n.mergeLocaleMessage("en", enMessages); })
this.drawer = false; i18n.mergeLocaleMessage('zh', zhMessages)
this.$message.success("国际化修改成功"); i18n.mergeLocaleMessage('en', enMessages)
} this.drawer = false
); this.$message.success(this.$t("i18n:message:updatei18nSuccessfully"))
}); if (this.il8nExternal) {
this.$EventBus.$emit('il8nUpdate')
}
}
)
})
.catch((err) => {
console.log(err)
})
}, },
openI18n() { openI18n(ARRAY) {
this.tableData = []; this.tableData = []
this.key = null; this.il8nExternal = false
this.drawer = true; this.State = null
let arr = []; this.key = null
let tableData = this.$tl.map((v) => { this.drawer = true
let a = { ...v }; let arr = []
// if (!a.Description) { let tableData = []
// a.Description = this.$route.path if (ARRAY && Array.isArray(ARRAY)) {
// } this.il8nExternal = true
return a; let data = ARRAY.map((v) => {
}); let a = { ...v }
return a
})
tableData = data.map((item) => {
return {
Code: item.Code,
Description: item.Description,
FrontType: item.FrontType,
Module: item.Module,
Value: item.Value,
ValueCN: item.ValueCN,
State: item.State,
Version: item.Version,
InternationalizationType: item.InternationalizationType,
}
})
this.tableData = Object.assign([], tableData)
this.arr = Object.assign([], tableData)
return false
} else {
tableData = this.$tl.map((v) => {
let a = { ...v }
// if (!a.Description) {
// a.Description = this.$route.path
// }
return a
})
}
tableData = tableData.filter((v) => { tableData = tableData.filter((v) => {
// return ~this.$path.indexOf(v.Description + '_' + v.Code) // return ~this.$path.indexOf(v.Description + '_' + v.Code)
return ~this.$path.indexOf(v.Code); return ~this.$path.indexOf(v.Code)
}); })
this.$path.forEach((v) => { this.$path.forEach((v) => {
let o = tableData.find((a) => { let o = tableData.find((a) => {
return a.Code === v; return a.Code === v
}); })
if (o) { if (o) {
arr.push(o); arr.push(o)
} else { } else {
arr.push({ arr.push({
Code: v, Code: v,
Description: null, Description: null,
Value: null, Value: null,
ValueCN: null, ValueCN: null,
}); State: 0,
Version: this.$version.Version,
InternationalizationType: 0,
})
} }
}); })
this.arr = arr; this.arr = arr
if (this.key) { if (this.key) {
this.tableData = Object.assign( this.tableData = Object.assign(
[], [],
@ -210,15 +353,15 @@ export default {
~v.Value.indexOf(this.key) || ~v.Value.indexOf(this.key) ||
~v.ValueCN.indexOf(this.key) ~v.ValueCN.indexOf(this.key)
) )
); )
} else { } else {
this.tableData = Object.assign([], this.arr); this.tableData = Object.assign([], this.arr)
} }
// console.log(JSON.stringify(this.$path)) // console.log(JSON.stringify(this.$path))
// console.log(JSON.stringify(this.tableData)) // console.log(JSON.stringify(this.tableData))
}, },
}, },
}; }
</script> </script>
<style lang="scss"> <style lang="scss">
@ -243,7 +386,7 @@ input::-webkit-inner-spin-button {
-webkit-appearance: none !important; -webkit-appearance: none !important;
} }
input[type="number"] { input[type='number'] {
-moz-appearance: textfield !important; -moz-appearance: textfield !important;
} }
@ -269,10 +412,13 @@ textarea {
color: $light_gray; color: $light_gray;
text-align: center; text-align: center;
font-weight: bold; font-weight: bold;
font-family: "Times New Roman"; font-family: 'Times New Roman';
text-shadow: 1px 0.5px 1.5px #666; text-shadow: 1px 0.5px 1.5px #666;
} }
.title-logo { .title-logo {
height: 40px; height: 40px;
} }
.title-logo {
height: 40px;
}
</style> </style>

View File

@ -44,11 +44,19 @@ export function updateUser(param) {
data: param data: param
}) })
} }
export function updateUserBasicInfo(param) {
export function getUser(userId) {
return request({ return request({
url: `/user/getUser/${userId}`, url: `/user/updateUserBasicInfo`,
method: 'get' method: 'put',
data: param
})
}
export function getUser(params) {
return request({
url: `/user/getUser`,
method: 'get',
params
}) })
} }
@ -277,3 +285,68 @@ export function batchAddInternationalization(param) {
data: param data: param
}) })
} }
// 国际化获取迭代列表
export function getPublishVersionSelect() {
return request({
url: `/PublishLog/getPublishVersionSelect`,
method: 'get',
})
}
// 国际化批量更新
export function batchUpdateInternationalInfo(data) {
return request({
url: `/Internationalization/batchUpdateInternationalInfo`,
method: 'put',
data
})
}
// 邮件事件消息列表
export function getEventStoreRecordList(data) {
return request({
url: `/EventStoreRecord/getEventStoreRecordList`,
method: 'post',
data
})
}
// 重新发布事件消息
export function rePublishEvent(params) {
return request({
url: `/EventStoreRecord/rePublishEvent`,
method: 'get',
params
})
}
// userId获取doctorId
export function useUserIDGetDoctorID(data) {
return request({
url: `/TrialSiteSurvey/useUserIDGetDoctorID`,
method: 'post',
data
})
}
// 管理端修改用户角色
export function updateUserRoleInfo(data) {
return request({
url: `/User/updateUserRoleInfo`,
method: 'put',
data
})
}
// 管理端新增用户发送邮件
export function addNewUserSendEmail(data) {
return request({
url: `/User/addNewUserSendEmail`,
method: 'post',
data
})
}
// 用户追溯
export function getUserJoinedTrialList(data) {
return request({
url: `/TrialMaintenance/getUserJoinedTrialList`,
method: 'post',
data
})
}

View File

@ -212,7 +212,20 @@ export function getSystemDocumentList(param) {
data: param data: param
}) })
} }
export function publishSystemDocument(param) {
return request({
url: `/SystemDocument/publishSystemDocument`,
method: 'post',
data: param
})
}
export function outLineSystemDocument(param) {
return request({
url: `/SystemDocument/outLineSystemDocument`,
method: 'post',
data: param
})
}
export function addOrUpdateSystemDocument(param) { export function addOrUpdateSystemDocument(param) {
return request({ return request({
url: `/SystemDocument/addOrUpdateSystemDocument`, url: `/SystemDocument/addOrUpdateSystemDocument`,
@ -220,6 +233,29 @@ export function addOrUpdateSystemDocument(param) {
data: param data: param
}) })
} }
// 新增/修改通用培训附件
export function addOrUpdateSystemDocumentAttachment(param) {
return request({
url: `/SystemDocument/addOrUpdateSystemDocumentAttachment`,
method: 'post',
data: param
})
}
// 通用培训附件列表
export function getSystemDocumentAttachmentList(param) {
return request({
url: `/SystemDocument/getSystemDocumentAttachmentList`,
method: 'post',
data: param
})
}
// 删除通用培训附件
export function deleteSystemDocumentAttachment(systemDocumentAttachmentId) {
return request({
url: `/SystemDocument/deleteSystemDocumentAttachment/${systemDocumentAttachmentId}`,
method: 'delete',
})
}
export function deleteSystemDocument(id) { export function deleteSystemDocument(id) {
return request({ return request({
@ -382,10 +418,11 @@ export function addOrUpdateBasicDic(param) {
}) })
} }
export function getDictionaryChildList(id) { export function getDictionaryChildList(data) {
return request({ return request({
url: `/Dictionary/getChildList/${id}`, url: `/Dictionary/getChildList`,
method: 'get' method: 'post',
data
}) })
} }
@ -1014,3 +1051,349 @@ export function getTrialSiteList(params) {
data: params data: params
}) })
} }
// 获取版本记录列表
export function getExploreRecommendList(params) {
return request({
url: `/ExploreRecommend/getExploreRecommendList`,
method: 'post',
data: params
})
}
// 新增或修改推荐版本记录
export function addOrUpdateExploreRecommend(params) {
return request({
url: `/ExploreRecommend/addOrUpdateExploreRecommend`,
method: 'post',
data: params
})
}
// 删除推荐版本记录
export function deleteExploreRecommend(id) {
return request({
url: `/ExploreRecommend/deleteExploreRecommend/${id}`,
method: 'delete'
})
}
// 获取推荐版本记录详情
export function getExploreRecommentInfo(params) {
return request({
url: `/ExploreRecommend/getExploreRecommentInfo`,
method: 'get',
params
})
}
export function getSystemCalculateQuestions(params) {
return request({
url: `/ReadingQuestion/getSystemCalculateQuestions`,
method: 'post',
data: params
})
}
export function getSystemCalculateTableQuestions(params) {
return request({
url: `/ReadingQuestion/getSystemCalculateTableQuestions`,
method: 'post',
data: params
})
}
// 添加pd/入组默认邮件
export function batchAddEnrollOrPdEmailConfig(params) {
return request({
url: `/TrialEmailNoticeConfig/batchAddEnrollOrPdEmailConfig`,
method: 'post',
params
})
}
// 文件记录-系统文件列表
export function getSysFileTypeList(data) {
return request({
url: `/SysFileType/getSysFileTypeList`,
method: 'post',
data
})
}
// 文件记录-新增/编辑系统文件
export function addOrUpdateSysFileType(data) {
return request({
url: `/SysFileType/addOrUpdateSysFileType`,
method: 'post',
data
})
}
// 文件记录-删除系统文件
export function deleteSysFileType(id) {
return request({
url: `/SysFileType/deleteSysFileType/${id}`,
method: 'delete'
})
}
// 项目文档-获取项目菜单
export function getTrialFileTypeData(data) {
return request({
url: `/TrialFileType/getTrialFileTypeData`,
method: 'post',
data
})
}
// 项目文档-修改项目菜单启用
export function setAuthorizedView(data) {
return request({
url: `/TrialFileType/setAuthorizedView`,
method: 'post',
data
})
}
// 项目文档-新增/修改项目菜单
export function addOrUpdateTrialFileType(data) {
return request({
url: `/TrialFileType/addOrUpdateTrialFileType`,
method: 'post',
data
})
}
// 项目文档-删除项目菜单
export function deleteTrialFileType(id) {
return request({
url: `/TrialFileType/deleteTrialFileType/${id}`,
method: 'delete',
})
}
// 项目文档-报告/文档列表
export function getTrialFinalRecordList(data) {
return request({
url: `/TrialFinalRecord/getTrialFinalRecordList`,
method: 'post',
data
})
}
// 项目文档-报告/文档授权
export function authorizedTrialFinalRecord(data) {
return request({
url: `/TrialFinalRecord/authorizedTrialFinalRecord`,
method: 'post',
data
})
}
// 项目文档-报告/文档新增/修改
export function addOrUpdateTrialFinalRecord(data) {
return request({
url: `/TrialFinalRecord/addOrUpdateTrialFinalRecord`,
method: 'post',
data
})
}
// 项目文档-删除报告/文档
export function deleteTrialFinalRecord(id) {
return request({
url: `/TrialFinalRecord/deleteTrialFinalRecord/${id}`,
method: 'delete',
})
}
// 项目文档-一般文件记录列表
export function getTrialNormalRecordList(data) {
return request({
url: `/TrialNormalRecord/getTrialNormalRecordList`,
method: 'post',
data
})
}
// 项目文档-一般文件记录授权
export function authorizedTTrialNormalRecord(data) {
return request({
url: `/TrialNormalRecord/authorizedTTrialNormalRecord`,
method: 'post',
data
})
}
// 项目文档-一般文件记录批量新增
export function batchAddTrialNormalRecord(data) {
return request({
url: `/TrialNormalRecord/batchAddTrialNormalRecord`,
method: 'post',
data
})
}
// 项目文档-一般文件记录新增/修改
export function addOrUpdateTrialNormalRecord(data) {
return request({
url: `/TrialNormalRecord/addOrUpdateTrialNormalRecord`,
method: 'post',
data
})
}
// 项目文档-删除一般文件记录
export function deleteTrialNormalRecord(id) {
return request({
url: `/TrialNormalRecord/deleteTrialNormalRecord/${id}`,
method: 'delete',
})
}
// 项目文档-批量删除一般文件记录
export function deleteTrialNormalRecordList(data) {
return request({
url: `/TrialNormalRecord/deleteTrialNormalRecordList`,
method: 'post',
data
})
}
// 项目文档-培训记录列表
export function getTrialTrianingRecordList(data) {
return request({
url: `/TrialTrianingRecord/getTrialTrianingRecordList`,
method: 'post',
data
})
}
// 项目文档-培训记录新增/修改
export function addOrUpdateTrialTrianingRecord(data) {
return request({
url: `/TrialTrianingRecord/addOrUpdateTrialTrianingRecord`,
method: 'post',
data
})
}
// 项目文档-培训记录批量新增/修改
export function batchAddTrialTrianingRecord(data) {
return request({
url: `/TrialTrianingRecord/batchAddTrialTrianingRecord`,
method: 'post',
data
})
}
// 项目文档-删除培训记录
export function deleteTrialTrianingRecord(id) {
return request({
url: `/TrialTrianingRecord/deleteTrialTrianingRecord/${id}`,
method: 'delete',
})
}
// 项目文档-培训记录授权
export function authorizedTrialTrianingRecord(data) {
return request({
url: `/TrialTrianingRecord/authorizedTrialTrianingRecord`,
method: 'post',
data
})
}
// 项目文档-阅片人简历
export function getTrialDoctorList(data) {
return request({
url: `/DoctorList/getTrialDoctorList`,
method: 'post',
data
})
}
// 项目文档-上传同意入项记录
export function uploadTrialFileTypeFile(data) {
return request({
url: `/TrialFileType/uploadTrialFileTypeFile`,
method: 'post',
data
})
}
// 项目文档-获取上传同意入项记录
export function getTrialFileTypeFile(data) {
return request({
url: `/TrialFileType/getTrialFileTypeFile`,
method: 'post',
data
})
}
// 项目文档-删除上传同意入项记录
export function deleteTrialTypeFile(params) {
return request({
url: `/TrialFileType/deleteTrialTypeFile`,
method: 'post',
params
})
}
// 项目文档-获取资质材料列表
export function getTrialAttachments(data) {
return request({
url: `/Attachment/getTrialAttachments`,
method: 'post',
data
})
}
// 项目文档-修改资质材料稽查状态
export function setAuthorizedViewC(data) {
return request({
url: `/Attachment/setAuthorizedView`,
method: 'post',
data
})
}
// 项目文档-上传资质材料
export function saveTrialAttachments(data) {
return request({
url: `/Attachment/saveTrialAttachments`,
method: 'post',
data
})
}
// 项目文档-资质材料(获取医生列表)
export function getTrialDoctorListC(data) {
return request({
url: `/Attachment/getTrialDoctorList`,
method: 'post',
data
})
}
// 项目文档-修改资质材料
export function updateTrialAttachments(data) {
return request({
url: `/Attachment/updateTrialAttachments`,
method: 'post',
data
})
}
// 项目文档-删除资质材料
export function deleteAttachment(data) {
return request({
url: `/Attachment/deleteAttachment`,
method: 'post',
data
})
}
// 项目文档-获取历史记录列表
export function getTrialHistoryRecordFileList(data) {
return request({
url: `/TrialHistoryRecordFile/getTrialHistoryRecordFileList`,
method: 'post',
data
})
}
// 项目文档-新增/修改历史记录
export function addOrUpdateTrialHistoryRecordFile(data) {
return request({
url: `/TrialHistoryRecordFile/addOrUpdateTrialHistoryRecordFile`,
method: 'post',
data
})
}
// 项目文档-批量新增历史记录
export function batchAddTrialHistoryRecordFile(data) {
return request({
url: `/TrialHistoryRecordFile/batchAddTrialHistoryRecordFile`,
method: 'post',
data
})
}
// 项目文档-删除历史记录
export function deleteTrialHistoryRecordFile(id) {
return request({
url: `/TrialHistoryRecordFile/deleteTrialHistoryRecordFile/${id}`,
method: 'delete',
})
}
// 邮件管理-批量修改邮件
export function batchUpdateEmail(data) {
return request({
url: `/EmailNoticeConfig/batchUpdateEmail`,
method: 'post',
data
})
}

View File

@ -45,10 +45,19 @@ export function changeFrontAuditSort(param) {
}) })
} }
export function getModuleTypeDescriptionList(param) { export function getModuleTypeDescriptionList(params) {
return request({ return request({
url: `${param === '' ? '/FrontAuditConfig/getModuleTypeDescriptionList' : '/FrontAuditConfig/getModuleTypeDescriptionList?moduleTypeId=' + param}`, url: `/FrontAuditConfig/getModuleTypeDescriptionList`,
method: 'get' method: 'get',
params
})
}
export function getModuleTypeList(data) {
return request({
url: `/FrontAuditConfig/getModuleTypeList`,
method: 'post',
data
}) })
} }

View File

@ -51,4 +51,10 @@ export function batchAddOrUpdateFrontInternationalization(params) {
data: params data: params
}) })
} }
// 获取当前版本
export function getCurrentPublishInfo() {
return request({
url: `/PublishLog/getCurrentPublishInfo`,
method: 'get'
})
}

View File

@ -72,7 +72,14 @@ export function getReadingTaskList_Export(param) {
data: param data: param
}) })
} }
export function getTrialVisitImageStatList_Export(param) {
return requestDownload({
url: '/ExcelExport/getTrialVisitImageStatList_Export',
method: 'post',
responseType: 'blob',
data: param
})
}
export function getReReadingTaskList_Export(param) { export function getReReadingTaskList_Export(param) {
return requestDownload({ return requestDownload({
url: '/ExcelExport/getReReadingTaskList_Export', url: '/ExcelExport/getReReadingTaskList_Export',
@ -160,3 +167,109 @@ export function getSubjectProgress_Export(param) {
data: param data: param
}) })
} }
// 导出项目列表
export function getTrialList_Export(data) {
return requestDownload({
url: `/ExcelExport/getTrialList_Export`,
responseType: 'blob',
method: 'post',
data
})
}
// 导出培训记录
export function pMTrainingRecordList_Export(data) {
return requestDownload({
url: `/ExcelExport/pMTrainingRecordList_Export`,
responseType: 'blob',
method: 'post',
data
})
}
// 导出系统培训记录
export function getSysDocumentConfirmList_Export(data) {
return requestDownload({
url: `/ExcelExport/getSysDocumentConfirmList_Export`,
responseType: 'blob',
method: 'post',
data
})
}
// 导出影像指控
export function qCVisitList_Export(data) {
return requestDownload({
url: `/ExcelExport/qCVisitList_Export`,
responseType: 'blob',
method: 'post',
data
})
}
// 导出下载记录
export function getTrialDownloadList_Export(data) {
return requestDownload({
url: `/ExcelExport/getTrialDownloadList_Export`,
responseType: 'blob',
method: 'post',
data
})
}
// 导出接收记录
export function getSCPImageUploadList_Export(data) {
return requestDownload({
url: `/ExcelExport/getSCPImageUploadList_Export`,
responseType: 'blob',
method: 'post',
data
})
}
// 导出接收检查影像记录
export function getPatientList_Export(data) {
return requestDownload({
url: `/ExcelExport/getPatientList_Export`,
responseType: 'blob',
method: 'post',
data
})
}
export function getCommonEvaluationList_Export(data) {
return requestDownload({
url: `/ExcelExport/getCommonEvaluationList_Export`,
responseType: 'blob',
method: 'post',
data
})
}
export function getCommonJudgeRatioList_Export(data) {
return requestDownload({
url: `/ExcelExport/getCommonJudgeRatioList_Export`,
responseType: 'blob',
method: 'post',
data
})
}
// 导出国际化列表
export function GetInternationalizationList_Export(data) {
return requestDownload({
url: `/ExcelExport/GetInternationalizationList_Export`,
responseType: 'blob',
method: 'post',
data
})
}
// 导出一致性分析
export function GetAnalysisTaskList_Export(data) {
return requestDownload({
url: `/ExcelExport/GetAnalysisTaskList_Export`,
responseType: 'blob',
method: 'post',
data
})
}
// 导出邮件配置
export function GetEmailNoticeConfigList_Export(data) {
return requestDownload({
url: `/ExcelExport/GetEmailNoticeConfigList_Export`,
responseType: 'blob',
method: 'post',
data
})
}

View File

@ -8,11 +8,11 @@ export function requestPackageAndAnonymizImage(params) {
}) })
} }
// 获取影像上传列表 // 获取影像上传列表
export function getSubjectImageUploadList(params) { export function getSubjectImageUploadList(data) {
return request({ return request({
url: '/DownloadAndUpload/getSubjectImageUploadList', url: '/DownloadAndUpload/getSubjectImageUploadList',
method: 'get', method: 'post',
params data
}) })
} }
// 预上传 // 预上传
@ -40,3 +40,67 @@ export function deleteTaskStudy(params) {
params params
}) })
} }
// 获取iqc下载文件信息
export function getCRCUploadedStudyInfo(data) {
return request({
url: '/DownloadAndUpload/getCRCUploadedStudyInfo',
method: 'post',
data
})
}
// 获取ir阅片和任务列表
export function getSubjectImageDownloadSelectList(data) {
return request({
url: '/DownloadAndUpload/getSubjectImageDownloadSelectList',
method: 'post',
data
})
}
// 获取ir阅片和任务下载文件信息
export function getIRReadingDownloadStudyInfo(data) {
return request({
url: '/DownloadAndUpload/getIRReadingDownloadStudyInfo',
method: 'post',
data
})
}
// 获取ir阅片和任务非dicom上传列表
export function getIRUploadTaskNoneDicomStudyList(data) {
return request({
url: '/DownloadAndUpload/getIRUploadTaskNoneDicomStudyList',
method: 'post',
data
})
}
// 校验上传影像
export function verifyIRStudyAllowUpload(data) {
return request({
url: '/DownloadAndUpload/verifyIRStudyAllowUpload',
method: 'post',
data
})
}
// 影像下载成功确认
export function downloadImageSuccess(params) {
return request({
url: '/DownloadAndUpload/downloadImageSuccess',
method: 'post',
params
})
}
// 影像下载记录列表
export function getTrialDownloadList(data) {
return request({
url: '/DownloadAndUpload/getTrialDownloadList',
method: 'post',
data
})
}
// 修改后处理检查类型
export function updateTaskStudyModality(params) {
return request({
url: '/DownloadAndUpload/updateTaskStudyModality',
method: 'put',
params
})
}

View File

@ -1,5 +1,5 @@
import request from '@/utils/request' import request from '@/utils/request'
import requestDownload from '@/utils/request-download'
export function addBaseLineLesion(param) { export function addBaseLineLesion(param) {
return request({ return request({
url: '/report/addBaseLineLesion', url: '/report/addBaseLineLesion',
@ -133,9 +133,11 @@ export function AddAdjudicationReport(param) {
}) })
} }
export function getVisitStudyList(trialId, subjectVisitId, isReading) { export function getVisitStudyList(trialId, subjectVisitId, isReading, visitTaskId) {
let url = `/SubjectVisit/getVisitStudyList/${trialId}/${subjectVisitId}/${isReading}`
url = visitTaskId ? `${url}?visitTaskId=${visitTaskId}` : url
return request({ return request({
url: `/SubjectVisit/getVisitStudyList/${trialId}/${subjectVisitId}/${isReading}`, url: url,
method: 'get' method: 'get'
}) })
} }
@ -187,3 +189,99 @@ export function setSkipReadingCache(param) {
data: param data: param
}) })
} }
export function resetReadingTask(param) {
return request({
url: `/ReadingImageTask/resetReadingTask`,
method: 'post',
data: param
})
}
export function getTaskUploadedDicomStudyList(param) {
return request({
url: `/DownloadAndUpload/getTaskUploadedDicomStudyList`,
method: 'post',
data: param
})
}
export function getIVUSTemplate(param) {
return requestDownload({
url: '/IVUSCalculate/getIVUSTemplate',
method: 'post',
responseType: 'blob',
data: param
})
}
export function uploadIVUSTemplate(param) {
return request({
url: `/IVUSCalculate/uploadIVUSTemplate`,
method: 'post',
data: param
})
}
export function getOCTFCTTemplate(param) {
return requestDownload({
url: '/OCTCalculate/getOCTFCTTemplate',
method: 'post',
responseType: 'blob',
data: param
})
}
export function uploadOCTFCTTemplate(param) {
return request({
url: `/OCTCalculate/uploadOCTFCTTemplate`,
method: 'post',
data: param
})
}
export function getOCTLipidAngleTemplate(param) {
return requestDownload({
url: '/OCTCalculate/getOCTLipidAngleTemplate',
method: 'post',
responseType: 'blob',
data: param
})
}
export function uploadOCTLipidAngleTemplate(param) {
return request({
url: `/OCTCalculate/uploadOCTLipidAngleTemplate`,
method: 'post',
data: param
})
}
export function saveTableQuestionMark(param, type) {
return request({
url: `/saveTableQuestionMark/${type}`,
method: 'post',
data: param
})
}
export function deleteTableQuestionMark(param, type) {
return request({
url: `/deleteTableQuestionMark/${type}`,
method: 'post',
data: param
})
}
export function submitTaskRowInfo(param, type) {
return request({
url: `/SubmitTaskRowInfo/${type}`,
method: 'post',
data: param
})
}
export function deleteSingleTableQuestionMark(param, type) {
return request({
url: `/DeleteSingleTableQuestionMark/${type}`,
method: 'post',
data: param
})
}

View File

@ -12,7 +12,8 @@ export function verifySendCode(param) {
return request({ return request({
url: '/TrialSiteSurvey/verifySendCode', url: '/TrialSiteSurvey/verifySendCode',
method: 'post', method: 'post',
data: param data: param,
clearToken: true
}) })
} }

View File

@ -138,10 +138,11 @@ export function addOrUpdateResearchPublication(param) {
}) })
} }
export function getTrialExperience(doctorId) { export function getTrialExperience(data) {
return request({ return request({
url: `/trialExperience/getTrialExperience/${doctorId}`, url: `/trialExperience/getTrialExperience`,
method: 'get' method: 'post',
data
}) })
} }
@ -236,10 +237,14 @@ export function downloadByAttachmentId(doctorId, attachmentIds) {
}) })
} }
export function getDetail(doctorId) { export function getDetail(doctorId, TrialId) {
return request({ return request({
url: `/doctor/getDetail/${doctorId}`, url: `/doctor/getDetail`,
method: 'get' method: 'post',
data: {
DoctorId: doctorId,
TrialId
}
}) })
} }
@ -290,3 +295,75 @@ export function verifyEmialGetDoctorInfo(param) {
data: param data: param
}) })
} }
// 新增或编辑基本信息
export function addOrUpdateDoctorBasicInfoAndEmployment(param) {
return request({
url: `/Doctor/addOrUpdateDoctorBasicInfoAndEmployment`,
method: 'post',
data: param
})
}
// 新增或编辑概述
export function addOrUpdateGneralSituation(param) {
return request({
url: `/Doctor/addOrUpdateGneralSituation`,
method: 'post',
data: param
})
}
// 新增或编辑支付方式
export function updatePaymentMode(param) {
return request({
url: `/Doctor/updatePaymentMode`,
method: 'post',
data: param
})
}
// 新增或编辑Publication
export function addOrUpdateResearchPublicationInfo(param) {
return request({
url: `/ResearchPublication/addOrUpdateResearchPublicationInfo`,
method: 'post',
data: param
})
}
// 发送简历采集邮件
export function doctorSendEmail(param) {
return request({
url: `/Doctor/sendEmail`,
method: 'post',
data: param
})
}
// 获取医生是否休假
export function getIsVacation(param) {
return request({
url: `/Vacation/getIsVacation`,
method: 'post',
data: param
})
}
// 获取概述
export function getSummarizeInfo(param) {
return request({
url: `/Doctor/getSummarizeInfo`,
method: 'post',
data: param
})
}
// 删除概述
export function deleteSummarizeInfo(param) {
return request({
url: `/Doctor/deleteSummarizeInfo`,
method: 'post',
data: param
})
}
// pm通过邮箱新建或查询简历
export function useEmialGetDoctorInfo(param) {
return request({
url: `/TrialSiteSurvey/useEmialGetDoctorInfo`,
method: 'post',
data: param
})
}

View File

@ -286,10 +286,11 @@ export function trialSiteUserSummaryListExport(param) {
}) })
} }
export function getVisitStageList(trialId) { export function getVisitStageList(data) {
return request({ return request({
url: `/visitPlan/getVisitStageList/${trialId}`, url: `/visitPlan/getVisitStageList`,
method: 'get' method: 'post',
data
}) })
} }
@ -1034,7 +1035,27 @@ export function getQCVisitList(param) {
data: param data: param
}) })
} }
export function getImageBackList(param) {
return request({
url: `/QCList/getImageBackList`,
method: 'post',
data: param
})
}
export function getImageBackApplyUserList(params) {
return request({
url: `/QCList/getImageBackApplyUserList`,
method: 'get',
params
})
}
export function auditImageBack(params) {
return request({
url: `/QCOperation/auditImageBack`,
method: 'put',
params
})
}
export function getQCChallengeList(param) { export function getQCChallengeList(param) {
return request({ return request({
url: `/QCList/getQCChallengeList`, url: `/QCList/getQCChallengeList`,
@ -1079,6 +1100,19 @@ export function setSeriesStatus(trialId, subjectVisitId, studyId, seriesId, stat
method: 'put' method: 'put'
}) })
} }
export function setNodicomStudyState(params) {
return request({
url: `/QCOperation/setNodicomStudyState`,
method: 'put',
params
})
}
export function setInstanceStatus(trialId, subjectVisitId, seriesId, instanceId, state) {
return request({
url: `/QCOperation/setInstanceState/${trialId}/${subjectVisitId}/${seriesId}/${instanceId}/${state}`,
method: 'put'
})
}
export function getVisitQCStudyAndSeriesList(subjectVisitId) { export function getVisitQCStudyAndSeriesList(subjectVisitId) {
return request({ return request({
@ -1364,9 +1398,9 @@ export function getForwardList(param) {
}) })
} }
export function getNoneDicomStudyList(subjectVisitId, sudyId = '', isFilterZip = false) { export function getNoneDicomStudyList(subjectVisitId, sudyId = '', isFilterZip = false, visitTaskId = '', IsReading = false) {
return request({ return request({
url: `/NoneDicomStudy/getNoneDicomStudyList?subjectVisitId=${subjectVisitId}&nonedicomStudyId=${sudyId}&isFilterZip=${isFilterZip}`, url: `/NoneDicomStudy/getNoneDicomStudyList?subjectVisitId=${subjectVisitId}&nonedicomStudyId=${sudyId}&isFilterZip=${isFilterZip}&visitTaskId=${visitTaskId}&IsReading=${IsReading}`,
method: 'get' method: 'get'
}) })
} }
@ -1585,6 +1619,13 @@ export function getDocumentConfirmList(param) {
data: param data: param
}) })
} }
export function getSysDocumentConfirmList(param) {
return request({
url: `/TrialDocument/getSysDocumentConfirmList`,
method: 'post',
data: param
})
}
export function getTrialUserSelect(trialId) { export function getTrialUserSelect(trialId) {
return request({ return request({
url: `/TrialDocument/getTrialUserSelect/${trialId}`, url: `/TrialDocument/getTrialUserSelect/${trialId}`,
@ -1599,6 +1640,13 @@ export function getTrialDocAndSystemDocType(trialId) {
}) })
} }
export function getSysDocSignUserList() {
return request({
url: `/TrialDocument/getSysDocSignUserList`,
method: 'get'
})
}
export function updateSubjectStatus(param) { export function updateSubjectStatus(param) {
return request({ return request({
url: `/Subject/updateSubjectStatus`, url: `/Subject/updateSubjectStatus`,
@ -3294,6 +3342,13 @@ export function getReReadingApplyToBeDoneList(param) {
data: param data: param
}) })
} }
export function getPMImageBackToBeDoneList(param) {
return request({
url: `/PersonalWorkstation/getPMImageBackToBeDoneList`,
method: 'post',
data: param
})
}
export function deleteClinicalForm(param) { export function deleteClinicalForm(param) {
return request({ return request({
@ -3675,6 +3730,54 @@ export function getTrialSiteSelectList(params) {
params params
}) })
} }
export function getNextIRMedicalFeedback(param) {
return request({
url: `/ReadingMedicalReview/getNextIRMedicalFeedback`,
method: 'post',
data: param
})
}
export function getNextCRCChallenge(param) {
return request({
url: `/QCList/getNextCRCChallenge`,
method: 'post',
data: param
})
}
// 获取中心dicomae列表
export function getTrialSiteDicomAEList(param) {
return request({
url: `/TrialSiteDicomAE/getTrialSiteDicomAEList`,
method: 'post',
data: param
})
}
// 新增或修改中心dicomae信息
export function addOrUpdateTrialSiteDicomAE(param) {
return request({
url: `/TrialSiteDicomAE/addOrUpdateTrialSiteDicomAE`,
method: 'post',
data: param
})
}
// 删除中心dicomae信息
export function deleteTrialSiteDicomAE(id) {
return request({
url: `/TrialSiteDicomAE/deleteTrialSiteDicomAE/${id}`,
method: 'delete'
})
}
// 获取项目中dicomAE配置
export function getTrialDicomAE(params) {
return request({
url: `/TrialDicomAE/getTrialDicomAE`,
method: 'get',
params
})
}
// 获取项目配置 // 获取项目配置
export function getTrialExtralConfig(params) { export function getTrialExtralConfig(params) {
return request({ return request({
@ -3683,3 +3786,415 @@ export function getTrialExtralConfig(params) {
params params
}) })
} }
// 项目新增或修改dicomAE配置
export function addOrUpdateDicomAE(data) {
return request({
url: `/TrialDicomAE/addOrUpdateDicomAE`,
method: 'post',
data
})
}
// 测试dicomAE链接
export function testSCPServerConnect(data) {
return request({
url: `/TrialDicomAE/testSCPServerConnect`,
method: 'post',
data
})
}
// 获取dicomAE默认值
export function getTrialPacsConfigInfo(params) {
return request({
url: `/TrialConfig/getTrialPacsConfigInfo`,
method: 'get',
params
})
}
// dicomAE配置签名
export function ConfigTrialPACSInfoConfirm(data) {
return request({
url: `/Inspection/configTrialBasicInfo/ConfigTrialPACSInfoConfirm`,
method: 'post',
data
})
}
// 获取推送记录
export function getSCPImageUploadList(data) {
return request({
url: `/Patient/getSCPImageUploadList`,
method: 'post',
data
})
}
// 获取影像检查患者列表
export function getPatientList(data) {
return request({
url: `/Patient/getPatientList`,
method: 'post',
data
})
}
// 获取影像检查患者检查列表
export function getPatientStudyList(data) {
return request({
url: `/Patient/getPatientStudyList`,
method: 'post',
data
})
}
// 获取接收方AE列表
export function getDicomCalledAEList(params) {
return request({
url: `/Patient/getDicomCalledAEList`,
method: 'get',
params
})
}
// 获取发送方AE列表
export function getDicomCallingAEList(params) {
return request({
url: `/Patient/getDicomCallingAEList`,
method: 'get',
params
})
}
// CRCpacs上传检查列表
export function getVisitPatientStudyFilterList(data) {
return request({
url: `/Patient/getVisitPatientStudyFilterList`,
method: 'post',
data
})
}
// CRCpacs上传检查校验
export function verifyPacsImage(data) {
return request({
url: `/Patient/verifyPacsImage`,
method: 'post',
data
})
}
// CRCpacs上传检查
export function submitVisitStudyBinding(data) {
return request({
url: `/Patient/submitVisitStudyBinding`,
method: 'post',
data
})
}
// 获取pacs检查技术
export function getDicomModalityList(params) {
return request({
url: `/Patient/getDicomModalityList`,
method: 'get',
params
})
}
// 获取患者序列信息
export function getPatientSeriesList(scpStudyId) {
return request({
url: `/Patient/getPatientSeriesList?scpStudyId=${scpStudyId}`,
method: 'get'
})
}
// 获取反馈列表
export function getUserFeedBackList(data) {
return request({
url: `/UserFeedBack/getUserFeedBackList`,
method: 'post',
data
})
}
// 更新反馈状态
export function batchUpdateFeedBackState(data) {
return request({
url: `/UserFeedBack/batchUpdateFeedBackState`,
method: 'put',
data
})
}
// 新增或修改意见反馈
export function addOrUpdateUserFeedBack(data) {
return request({
url: `/UserFeedBack/addOrUpdateUserFeedBack`,
method: 'post',
data
})
}
// 获取反馈详情
export function getUserFeedBackInfo(data) {
return request({
url: `/UserFeedBack/getUserFeedBackInfo`,
method: 'post',
data
})
}
// 一致性分析获取临床数据列表
export function getConsistencyAnalysisReadingClinicalDataList(data) {
return request({
url: `/ReadingClinicalData/getConsistencyAnalysisReadingClinicalDataList`,
method: 'post',
data
})
}
// 新增或修改一致性分析临床数据
export function addOrUpdateConsistencyAnalysisReadingClinicalData(data) {
return request({
url: `/ReadingClinicalData/addOrUpdateConsistencyAnalysisReadingClinicalData`,
method: 'post',
data
})
}
// 一致性分析临床数据签名
export function signConsistencyAnalysisReadingClinicalData(data) {
return request({
url: `/Inspection/ReadingClinicalData/SignConsistencyAnalysisReadingClinicalData`,
method: 'post',
data
})
}
// 一致性分析临床数据设置任务为有效
export function setTaskValid(data) {
return request({
url: `/ReadingClinicalData/setTaskValid`,
method: 'post',
data
})
}
// 一致性分析临床数据设置任务为有效
export function getVisitClinicalDataName(data) {
return request({
url: `/ReadingClinicalData/getVisitClinicalDataName`,
method: 'post',
data
})
}
// 修改外部人员权限配置
export function configTrialSPMInfo(data) {
return request({
url: `/TrialConfig/configTrialSPMInfo`,
method: 'post',
data
})
}
// 项目添加角色修改权限
export function updateTrialUserRole(data) {
return request({
url: `/TrialMaintenance/updateTrialUserRole`,
method: 'put',
data
})
}
// 获取报表配置
export function getTrialQuestionExportResult(data) {
return request({
url: `/ReadingQuestion/getTrialQuestionExportResult`,
method: 'post',
data
})
}
// 修改报表配置
export function setTrialQuestionExportResult(data) {
return request({
url: `/ReadingQuestion/SetTrialQuestionExportResult`,
method: 'post',
data
})
}
// 项目加入人员发送邮件
export function trialUserSendJoinEmail(data) {
return request({
url: `/TrialMaintenance/trialUserSendJoinEmail`,
method: 'post',
data
})
}
// 获取非Dicom标记
export function getNoneDicomMarkListOutDto(data) {
return request({
url: `/ReadingImageTask/getNoneDicomMarkListOutDto`,
method: 'post',
data
})
}
// 添加非Dicom标记
export function addNoneDicomMark(data) {
return request({
url: `/ReadingImageTask/addNoneDicomMark`,
method: 'post',
data
})
}
// 删除非Dicom标记
export function deleteTrialFileType(id) {
return request({
url: `/ReadingImageTask/deleteTrialFileType/${id}`,
method: 'post'
})
}
// 工作台-获取稽查文档
export function getAuditDocumentData(data) {
return request({
url: `/AuditDocument/getAuditDocumentData`,
method: 'post',
data
})
}
// 工作台-新增稽查文档
export function addAuditDocument(data) {
return request({
url: `/AuditDocument/addAuditDocument`,
method: 'post',
data
})
}
// 工作台-获取当前目录层级
export function getBreadcrumbData(data) {
return request({
url: `/AuditDocument/getBreadcrumbData`,
method: 'post',
data
})
}
// 工作台-修改稽查文档
export function updateAuditDocument(data) {
return request({
url: `/AuditDocument/updateAuditDocument`,
method: 'post',
data
})
}
// 工作台-删除稽查文档
export function deleteAuditDocument(data) {
return request({
url: `/AuditDocument/deleteAuditDocument`,
method: 'post',
data
})
}
// 工作台-稽查文档获取历史版本
export function getHistoricalVersion(data) {
return request({
url: `/AuditDocument/getHistoricalVersion`,
method: 'post',
data
})
}
// 工作台-稽查文档设置当前版本
export function setCurrentVersion(data) {
return request({
url: `/AuditDocument/setCurrentVersion`,
method: 'post',
data
})
}
// 工作台-稽查文档移动
export function movieFileOrFolder(data) {
return request({
url: `/AuditDocument/movieFileOrFolder`,
method: 'post',
data
})
}
// 工作台-稽查文档复制
export function copyFileOrFolder(data) {
return request({
url: `/AuditDocument/copyFileOrFolder`,
method: 'post',
data
})
}
// 工作台-稽查文档授权
export function setIsAuthorization(data) {
return request({
url: `/AuditDocument/setIsAuthorization`,
method: 'post',
data
})
}
// 工作台-稽查文档新增文件夹
export function addFolder(data) {
return request({
url: `/AuditDocument/addFolder`,
method: 'post',
data
})
}
// 配置-项目文档发布
export function publishTrialDocument(data) {
return request({
url: `/TrialDocument/publishTrialDocument`,
method: 'post',
data
})
}
// 配置-获取项目文档附件列表
export function getTrialDocumentAttachmentList(data) {
return request({
url: `/TrialDocument/getTrialDocumentAttachmentList`,
method: 'post',
data
})
}
// 配置-新增或修改项目文档附件
export function addOrUpdateTrialDocumentAttachment(data) {
return request({
url: `/TrialDocument/addOrUpdateTrialDocumentAttachment`,
method: 'post',
data
})
}
// 配置-删除项目文档附件
export function deleteTrialDocumentAttachment(data) {
return request({
url: `/TrialDocument/deleteTrialDocumentAttachment/${data}`,
method: 'delete',
})
}
// 配置-获取稽查管理列表
export function getTrialShowInspection(data) {
return request({
url: `/Inspection/getTrialShowInspection`,
method: 'post',
data
})
}
// 配置-设置稽查管理配置
export function setTrialShowInspection(data) {
return request({
url: `/Inspection/setTrialShowInspection`,
method: 'post',
data
})
}
// 影像汇总-获取列表
export function getTrialVisitImageStatList(data) {
return request({
url: `/DownloadAndUpload/getTrialVisitImageStatList`,
method: 'post',
data
})
}
// 影像汇总-获取统计
export function getTrialVisitImageStatInfo(params) {
return request({
url: `/DownloadAndUpload/getTrialVisitImageStatInfo`,
method: 'get',
params
})
}
// 影像汇总-影像下载
export function getExportSubjectVisitImageList(data) {
return request({
url: `/DownloadAndUpload/getExportSubjectVisitImageList`,
method: 'post',
data
})
}

View File

@ -346,9 +346,9 @@ export function getReReadingOrBackInfluenceTaskList(taskId, isReReading, applyId
}) })
} }
export function PMSetTaskBack(trialId, taskId) { export function PMSetTaskBack(trialId, taskId, pmBackReason) {
return request({ return request({
url: `/VisitTask/PMSetTaskBack/${trialId}/${taskId}`, url: `/VisitTask/PMSetTaskBack/${trialId}/${taskId}/${pmBackReason}`,
method: 'put' method: 'put'
}) })
} }
@ -459,9 +459,9 @@ export function setMedicalReviewInvalid(params) {
}) })
} }
export function getTrialCriterionList(trialId) { export function getTrialCriterionList(trialId, isRandom = false) {
return request({ return request({
url: `/VisitTask/getTrialCriterionList?TrialId=${trialId}`, url: `/VisitTask/getTrialCriterionList?TrialId=${trialId}&isRandom=${isRandom}`,
method: 'get' method: 'get'
}) })
} }
@ -480,3 +480,11 @@ export function resetReadingRestTime() {
method: 'post' method: 'post'
}) })
} }
// 设置随机排序
export function setRandomTaskOrder(data) {
return request({
url: `/VisitTask/setRandomTaskOrder`,
method: 'post',
data
})
}

View File

@ -110,4 +110,12 @@ export function addOrUpdateTrialBodyPart(data) {
data data
}) })
} }
// 修改检查名称列表
export function updateTrialStudyNameList(data) {
return request({
url: `/TrialConfig/updateTrialStudyNameList`,
method: 'post',
data
})
}

View File

@ -287,4 +287,12 @@ export function forwardSVDicomImage(param) {
data: param data: param
}) })
} }
// crc、iqc申请影像退回
export function requestImageBack(params) {
return request({
url: `/QCOperation/requestImageBack`,
method: 'put',
params
})
}

View File

@ -4,7 +4,8 @@ export function login(data) {
return request({ return request({
url: '/user/login', url: '/user/login',
method: 'post', method: 'post',
data data,
ENCRYPT: true
}) })
} }
export function loginOut(params) { export function loginOut(params) {
@ -178,10 +179,41 @@ export function verifyMFACode(params) {
} }
// 发送MFA邮件 // 发送MFA邮件
export function sendMFAEmail(params) { export function sendMFAEmail(data) {
return request({ return request({
url: `/User/sendMFAEmail`, url: `/User/sendMFAEmail`,
method: 'post', method: 'post',
params data
})
}
// 获取公钥
export function getPublicKey() {
return request({
url: `/user/getPublicKey`,
method: 'get',
})
}
// 登陆获取角色
export function getUserLoginRoleList(data) {
return request({
url: `/User/getUserLoginRoleList`,
method: 'post',
data,
})
}
// 登陆角色id获取token
export function loginSelectUserRole(params) {
return request({
url: `/User/loginSelectUserRole`,
method: 'get',
params,
})
}
// 忽略异地登录
export function setIsIgnoreUncommonly(data) {
return request({
url: `/User/setIsIgnoreUncommonly`,
method: 'post',
data,
}) })
} }

BIN
src/assets/0.file-16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
src/assets/color-bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

BIN
src/assets/menu_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

BIN
src/assets/pdf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
src/assets/stickup.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
src/assets/zip.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

@ -4,6 +4,7 @@
<el-col :span="24"> <el-col :span="24">
<div class="box"> <div class="box">
<div class="box-body"> <div class="box-body">
<slot name="title-container" />
<div class="search"> <div class="search">
<slot name="search-container" /> <slot name="search-container" />
</div> </div>
@ -24,42 +25,42 @@ export default {
props: { props: {
noTitle: { noTitle: {
type: Boolean, type: Boolean,
default: false default: false,
} },
}, },
computed: { computed: {
contentClass() { contentClass() {
return this.noTitle ? 'content-notitle' : 'content' return this.noTitle ? 'content-notitle' : 'content'
} },
} },
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.box-body{ .box-body {
padding: 0px; padding: 0px;
background-color: #fff; background-color: #fff;
.el-card__body { .el-card__body {
padding: 0px; padding: 0px;
} }
.search{ .search {
display: flex; display: flex;
padding: 5px; padding: 5px;
.mr5{ .mr5 {
margin-right:5px; margin-right: 5px;
}
.el-form-item{
margin-bottom: 10px;
}
} }
.page{ .el-form-item {
text-align: right; margin-bottom: 10px;
padding-top: 3px;
}
.el-button.is-circle {
padding: 9px;
font-weight: bold;
font-size: 14px;
} }
} }
.page {
text-align: right;
padding-top: 3px;
}
.el-button.is-circle {
padding: 9px;
font-weight: bold;
font-size: 14px;
}
}
</style> </style>

View File

@ -1,7 +1,7 @@
<!-- 搜索表单 --> <!-- 搜索表单 -->
<template> <template>
<div class="base-search-form"> <div class="base-search-form">
<el-form :size="size" :inline="true" :label-width="labelWidth"> <el-form :inline="true" :label-width="labelWidth">
<el-form-item <el-form-item
v-for="item in searchForm" v-for="item in searchForm"
:key="item.prop" :key="item.prop"
@ -13,6 +13,7 @@
v-model="searchData[item.prop]" v-model="searchData[item.prop]"
:placeholder="item.placeholder" :placeholder="item.placeholder"
size="mini" size="mini"
clearable
:style="{ width: item.width }" :style="{ width: item.width }"
:readonly="item.readonly" :readonly="item.readonly"
/> />
@ -22,6 +23,7 @@
v-model="searchData[item.prop]" v-model="searchData[item.prop]"
:placeholder="item.placeholder" :placeholder="item.placeholder"
size="mini" size="mini"
clearable
:style="{ width: item.width }" :style="{ width: item.width }"
@change="item.change && item.change(that, searchData[item.prop])" @change="item.change && item.change(that, searchData[item.prop])"
> >
@ -37,6 +39,7 @@
v-model="searchData[item.prop]" v-model="searchData[item.prop]"
:placeholder="item.placeholder" :placeholder="item.placeholder"
size="mini" size="mini"
clearable
:style="{ width: item.width }" :style="{ width: item.width }"
@change="item.change && item.change(that, searchData[item.prop])" @change="item.change && item.change(that, searchData[item.prop])"
> >
@ -96,6 +99,7 @@
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd"
format="yyyy-MM-dd" format="yyyy-MM-dd"
:picker-options="item.pickerOption" :picker-options="item.pickerOption"
clearable
/> />
<!-- 时间 --> <!-- 时间 -->
<el-time-select <el-time-select
@ -104,6 +108,7 @@
:placeholder="item.placeholder" :placeholder="item.placeholder"
type="" type=""
:style="{ width: item.width }" :style="{ width: item.width }"
clearable
/> />
<!-- 日期时间 --> <!-- 日期时间 -->
<el-date-picker <el-date-picker
@ -114,15 +119,17 @@
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
:disabled="item.disable && item.disable(searchData[item.prop])" :disabled="item.disable && item.disable(searchData[item.prop])"
:style="{ width: item.width }" :style="{ width: item.width }"
clearable
/> />
<!-- 日期时间段 --> <!-- 日期时间段 -->
<el-date-picker <el-date-picker
v-if="item.type === 'Daterange'" v-if="item.type === 'Daterange'"
v-model="searchData[item.prop]" v-model="searchData[item.prop]"
type="datetimerange" type="datetimerange"
range-separator="至" :default-time="['00:00:00', '23:59:59']"
start-placeholder="开始时间" :range-separator="$t('baseForm:daterange:rangeSeparator')"
end-placeholder="结束时间" :start-placeholder="$t('baseForm:daterange:startPlaceholder')"
:end-placeholder="$t('baseForm:daterange:startendPlaceholder')"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"
:style="{ width: item.width }" :style="{ width: item.width }"
@ -139,17 +146,18 @@
<!-- 具名slot --> <!-- 具名slot -->
<slot v-if="item.type === 'Custom'" :name="item.slot" /> <slot v-if="item.type === 'Custom'" :name="item.slot" />
</el-form-item> </el-form-item>
<el-form-item v-for="item in searchHandle" :key="item.label"> <div style="display: inline-block;width: fit-content;">
<slot v-if="item.slot" :name="item.slot" /> <el-form-item v-for="item in searchHandle" :key="item.label">
<el-button <slot v-if="item.slot" :name="item.slot" />
v-else <el-button
:type="item.type" v-else
:size="item.size || size" :type="item.type"
:icon="item.icon || ''" :icon="item.icon || ''"
@click="handleClick(item.emitKey)" @click="handleClick(item.emitKey)"
>{{ item.label }}</el-button >{{ item.label }}</el-button
> >
</el-form-item> </el-form-item>
</div>
</el-form> </el-form>
</div> </div>
</template> </template>
@ -167,11 +175,11 @@ export default {
}, },
labelWidth: { labelWidth: {
type: String, type: String,
default: "", default: '',
}, },
size: { size: {
type: String, type: String,
default: "mini", default: 'mini',
}, },
searchForm: { searchForm: {
type: Array, type: Array,
@ -189,10 +197,10 @@ export default {
methods: { methods: {
handleClick(emitKey) { handleClick(emitKey) {
// emit // emit
this.$emit(`${emitKey}`); this.$emit(`${emitKey}`)
}, },
}, },
}; }
</script> </script>
<style lang="scss"> <style lang="scss">
.base-search-form { .base-search-form {

View File

@ -8,10 +8,11 @@
:visible.sync="config.visible" :visible.sync="config.visible"
:close-on-click-modal="false" :close-on-click-modal="false"
:show-close="config.showClose" :show-close="config.showClose"
:top="config.top"
:width="config.width" :width="config.width"
:fullscreen="config.fullscreen" :fullscreen="config.fullscreen"
> >
<div class="base-modal-body"> <div class="base-modal-body" :style="config.bodyStyle">
<slot name="dialog-body" /> <slot name="dialog-body" />
</div> </div>
<div slot="footer" class="base-modal-footer"> <div slot="footer" class="base-modal-footer">
@ -22,24 +23,26 @@
</template> </template>
<script> <script>
export default { export default {
name: "BaseDialog", name: 'BaseDialog',
props: { props: {
config: { config: {
type: Object, type: Object,
default: () => { default: () => {
return { return {
visible: false, visible: false,
title: "", title: '',
closeOnClickModal: false, closeOnClickModal: false,
showClose: true, showClose: true,
appendToBody: false, appendToBody: false,
width: "100px", width: '100px',
fullscreen: false, fullscreen: false,
}; top: '15vh',
bodyStyle: '',
}
}, },
}, },
}, },
}; }
</script> </script>
<style lang="scss"> <style lang="scss">
.base-model-wrapper { .base-model-wrapper {

View File

@ -2,7 +2,7 @@
<el-row> <el-row>
<el-col class="m-b-10" :span="24"> <el-col class="m-b-10" :span="24">
<el-table <el-table
v-adaptive="{bottomOffset}" v-adaptive="{ bottomOffset }"
:data="list" :data="list"
:height="tableHeight" :height="tableHeight"
v-bind="$attrs" v-bind="$attrs"
@ -15,15 +15,45 @@
> >
<template v-for="(column, index) in columns"> <template v-for="(column, index) in columns">
<slot name="front-slot" /> <slot name="front-slot" />
<el-table-column v-if="column.type === 'tip'" :key="index" width="35">
<template slot-scope="scope">
<span v-if="column.slot">
<!-- 具名slot -->
<slot v-if="column.slot" :name="column.slot" :scope="scope" />
</span>
</template>
</el-table-column>
<!-- 序号 --> <!-- 序号 -->
<el-table-column v-if="column.type === 'selection'" :key="index" type="selection" width="55" /> <el-table-column
v-else-if="column.type === 'selection'"
:key="index"
type="selection"
width="55"
/>
<!-- 复选框 --> <!-- 复选框 -->
<el-table-column v-else-if="column.type === 'index'" :key="index" type="index" width="50" /> <el-table-column
v-else-if="column.type === 'index'"
:key="index"
type="index"
width="50"
/>
<!-- 具体内容 --> <!-- 具体内容 -->
<el-table-column v-else :key="index" align="left" :label="column.label" :width="column.width" :min-width="column.minWidth" :show-overflow-tooltip="column.showOverflowTooltip || false" :sortable="column.sortable || false" :prop="column.prop"> <el-table-column
v-else
:key="index"
align="left"
:label="column.label"
:width="column.width"
:min-width="column.minWidth"
:show-overflow-tooltip="column.showOverflowTooltip || false"
:sortable="column.sortable || false"
:prop="column.prop"
:fixed="column.fixed"
>
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 仅仅显示文字 --> <!-- 仅仅显示文字 -->
<span v-if="!column.hidden"> <!-- hiddentrue slot--> <span v-if="!column.hidden">
<!-- 如果hidden为true的时候 那么当前格可以不显示可以选择显示自定义的slot-->
<!-- 操作按钮 --> <!-- 操作按钮 -->
<span v-if="column.type === 'operate'"> <span v-if="column.type === 'operate'">
<!-- <a v-for="(operate, i) in column.operates" :key="i" href="javascript:void(0)" class="operate-button" @click="handleClick(operate, scope.row)"> <!-- <a v-for="(operate, i) in column.operates" :key="i" href="javascript:void(0)" class="operate-button" @click="handleClick(operate, scope.row)">
@ -31,7 +61,16 @@
&nbsp;&nbsp; &nbsp;&nbsp;
</a> --> </a> -->
<span v-for="(operate, i) in column.operates" :key="i"> <span v-for="(operate, i) in column.operates" :key="i">
<el-button :size="operate.size || 'mini'" :type="operate.type || 'primary'" style="margin-right:5px;" @click="handleClick(operate, scope.row)">{{ operate.name }}</el-button> <el-button
:type="operate.type || 'primary'"
v-if="
(operate.show && scope.row[operate.show]) ||
!operate.show
"
style="margin-right: 5px"
@click="handleClick(operate, scope.row)"
>{{ operate.name }}</el-button
>
</span> </span>
</span> </span>
<span v-else> <span v-else>
@ -52,7 +91,12 @@
</el-col> </el-col>
<!-- 分页部分 --> <!-- 分页部分 -->
<el-col v-if="!hiddenPage" :span="24" class="page"> <el-col v-if="!hiddenPage" :span="24" class="page">
<pagination :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="pagination" /> <pagination
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="pagination"
/>
</el-col> </el-col>
</el-row> </el-row>
</template> </template>
@ -96,45 +140,44 @@ export default {
// //
list: { list: {
type: Array, type: Array,
default: () => [] default: () => [],
}, },
// columns // columns
columns: { columns: {
type: Array, type: Array,
required: true, required: true,
default: () => [] default: () => [],
}, },
// is hidden page for table // is hidden page for table
hiddenPage: { hiddenPage: {
type: Boolean, type: Boolean,
default: false default: false,
}, },
bottomOffset: { bottomOffset: {
type: Number, type: Number,
default: 45 default: 45,
}, },
searchData: { searchData: {
type: Object, type: Object,
default: () => {} default: () => {},
}, },
total: { total: {
type: Number, type: Number,
default: 0 default: 0,
}, },
highlightCurrentRow: { highlightCurrentRow: {
type: Boolean, type: Boolean,
default: false default: false,
} },
}, },
data() { data() {
return { return {}
}
}, },
computed: { computed: {
tableHeight() { tableHeight() {
return 100 return 100
} },
}, },
methods: { methods: {
// //
@ -157,12 +200,12 @@ export default {
}, },
pagination() { pagination() {
this.$emit('getList') this.$emit('getList')
} },
} },
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.page{ .page {
padding-top: 3px; padding-top: 3px;
text-align: right; text-align: right;
} }

View File

@ -1,15 +1,7 @@
<template> <template>
<div <div id="canvas" ref="canvas" v-loading="loading" element-loading-text="Loading..."
id="canvas" element-loading-background="rgba(0, 0, 0, 0.8)" style="width:100%;height:100%;position:relative;"
ref="canvas" class="cornerstone-element" @contextmenu.prevent="onContextmenu" @mouseup="sliderMouseup">
v-loading="loading"
element-loading-text="Loading..."
element-loading-background="rgba(0, 0, 0, 0.8)"
style="width:100%;height:100%;position:relative;"
class="cornerstone-element"
@contextmenu.prevent="onContextmenu"
@mouseup="sliderMouseup"
>
<div v-show="dicomInfo.series" class="info-series"> <div v-show="dicomInfo.series" class="info-series">
<div>Series #{{ dicomInfo.series }}</div> <div>Series #{{ dicomInfo.series }}</div>
<div>Image #{{ dicomInfo.frame }}</div> <div>Image #{{ dicomInfo.frame }}</div>
@ -26,9 +18,11 @@
<div v-show="dicomInfo.location">Location {{ dicomInfo.location }}mm</div> --> <div v-show="dicomInfo.location">Location {{ dicomInfo.location }}mm</div> -->
<!-- <div v-show="toolState.clipPlaying">FPS {{ dicomInfo.fps }}</div> --> <!-- <div v-show="toolState.clipPlaying">FPS {{ dicomInfo.fps }}</div> -->
<div v-show="mousePosition.mo"> <div v-show="mousePosition.mo">
Pos: {{ mousePosition.x?mousePosition.x.toFixed(0):'' }}, {{ mousePosition.y?mousePosition.y.toFixed(0):'' }} Pos: {{ mousePosition.x ? mousePosition.x.toFixed(0) : '' }}, {{ mousePosition.y ? mousePosition.y.toFixed(0) :
'' }}
</div> </div>
<div v-if="(dicomInfo.modality === 'CT' || dicomInfo.modality === 'DR' || dicomInfo.modality === 'CR') && mousePosition.mo"> <div
v-if="(dicomInfo.modality === 'CT' || dicomInfo.modality === 'DR' || dicomInfo.modality === 'CR') && mousePosition.mo">
HU: {{ mousePosition.mo }} HU: {{ mousePosition.mo }}
</div> </div>
<div v-else-if="(dicomInfo.modality === 'PT' && mousePosition.suv)"> <div v-else-if="(dicomInfo.modality === 'PT' && mousePosition.suv)">
@ -53,8 +47,12 @@
<!-- <div v-show="dicomInfo.acc">ACC {{ dicomInfo.acc }}</div> --> <!-- <div v-show="dicomInfo.acc">ACC {{ dicomInfo.acc }}</div> -->
<!-- <div>{{ dicomInfo.time }}</div> --> <!-- <div>{{ dicomInfo.time }}</div> -->
</div> </div>
<div ref="sliderBox" class="my_slider_box" style="position: absolute;right: 1px;height: calc(100% - 100px);transform: translateY(-50%);top: calc(50% - 30px);width: 10px;background: #333;cursor: pointer" @click.stop="goViewer($event)"> <div ref="sliderBox" class="my_slider_box"
<div :style="{top: height + '%'}" style="z-index:10;background: #9e9e9e;height: 20px;width: 100%;position: absolute;top: 0;cursor: move" @mousedown="sliderMousedown($event)" /> style="position: absolute;right: 1px;height: calc(100% - 100px);transform: translateY(-50%);top: calc(50% - 30px);width: 10px;background: #333;cursor: pointer"
@click.stop="goViewer($event)">
<div :style="{ top: height + '%' }"
style="z-index:10;background: #9e9e9e;height: 20px;width: 100%;position: absolute;top: 0;cursor: move"
@mousedown="sliderMousedown($event)" />
</div> </div>
<div style="position: absolute;left: 50%;top: 15px;color: #f44336;"> <div style="position: absolute;left: 50%;top: 15px;color: #f44336;">
{{ markers.top }} {{ markers.top }}
@ -81,16 +79,18 @@
<!-- <div v-show="stack.firstImageLoading" class="load-indicator"> <!-- <div v-show="stack.firstImageLoading" class="load-indicator">
Loading Series #{{ stack.seriesNumber }}... Loading Series #{{ stack.seriesNumber }}...
</div>--> </div>-->
<el-dialog v-if="dcmTag.visible" :visible.sync="dcmTag.visible" :close-on-click-modal="false" :title="dcmTag.title"
width="1000px" custom-class="base-dialog-wrapper" append-to-body>
<dicom-tags :image-id="stack.imageIds[stack.currentImageIdIndex]" @close="dcmTag.visible = false" />
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import Vue from 'vue'
import Contextmenu from 'vue-contextmenujs'
Vue.use(Contextmenu)
import * as cornerstone from 'cornerstone-core' import * as cornerstone from 'cornerstone-core'
import * as cornerstoneMath from 'cornerstone-math' import * as cornerstoneMath from 'cornerstone-math'
import * as cornerstoneTools from 'cornerstone-tools' import * as cornerstoneTools from 'cornerstone-tools'
const scroll = cornerstoneTools.import('util/scrollToIndex') const scroll = cornerstoneTools.import('util/scrollToIndex')
import Hammer from 'hammerjs' import Hammer from 'hammerjs'
import getOrientationString from '@/views/trials/trials-panel/reading/dicoms/tools/OrientationMarkers/getOrientationString' import getOrientationString from '@/views/trials/trials-panel/reading/dicoms/tools/OrientationMarkers/getOrientationString'
@ -108,8 +108,10 @@ cornerstoneTools.toolColors.setActiveColor('rgb(0, 255, 0)')
// cornerstoneTools.init({ showSVGCursors: true }) // cornerstoneTools.init({ showSVGCursors: true })
cornerstoneTools.init() cornerstoneTools.init()
const ToolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager const ToolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager
import DicomTags from './DicomTags'
export default { export default {
name: 'DicomCanvas', name: 'DicomCanvas',
components: { DicomTags },
data() { data() {
return { return {
loading: false, loading: false,
@ -164,7 +166,8 @@ export default {
mousePosition: { x: '', y: '', mo: '' }, mousePosition: { x: '', y: '', mo: '' },
markers: { top: '', right: '', bottom: '', left: '' }, markers: { top: '', right: '', bottom: '', left: '' },
orientationMarkers: [], orientationMarkers: [],
originalMarkers: [] originalMarkers: [],
dcmTag: { visible: false, title: this.$t('trials:dicom-tag:title') }
} }
}, },
@ -200,18 +203,20 @@ export default {
this.stack.seriesId = dicomSeries.seriesId this.stack.seriesId = dicomSeries.seriesId
this.stack.seriesNumber = dicomSeries.seriesNumber this.stack.seriesNumber = dicomSeries.seriesNumber
this.stack.imageIds = dicomSeries.imageIds this.stack.imageIds = dicomSeries.imageIds
this.stack.currentImageIdIndex = dicomSeries.imageIdIndex ? dicomSeries.imageIdIndex : 0 this.stack.currentImageIdIndex = dicomSeries.imageIdIndex && dicomSeries.imageIdIndex < dicomSeries.imageIds.length ? dicomSeries.imageIdIndex : 0
this.stack.firstImageLoading = true this.stack.firstImageLoading = true
this.stack.description = dicomSeries.description this.stack.description = dicomSeries.description
this.toolState.viewportInvert = false this.toolState.viewportInvert = false
this.toolState.dicomInfoVisible = false this.toolState.dicomInfoVisible = false
var imageId = this.stack.imageIds[this.stack.currentImageIdIndex] // var imageId = this.stack.imageIds[this.stack.currentImageIdIndex]
var instanceId = imageId.split('/')[imageId.split('/').length - 1] // var instanceId = imageId.split('/')[imageId.split('/').length - 1]
instanceId = instanceId.split('.')[0] // instanceId = instanceId.split('.')[0]
this.stack.instanceId = instanceId // this.stack.instanceId = instanceId
this.toolState.clipPlaying = false this.toolState.clipPlaying = false
const element = this.$refs.canvas const element = this.$refs.canvas
cornerstone.enable(element) cornerstone.enable(element)
cornerstoneTools.stopClip(this.canvas)
this.toolState.clipPlaying = false
this.loading = true this.loading = true
cornerstone.loadAndCacheImage(this.stack.imageIds[this.stack.currentImageIdIndex]) cornerstone.loadAndCacheImage(this.stack.imageIds[this.stack.currentImageIdIndex])
@ -248,7 +253,13 @@ export default {
apiTool apiTool
) )
if (!toolAlreadyAddedToElement) { if (!toolAlreadyAddedToElement) {
cornerstoneTools.addToolForElement(element, apiTool) if (toolName === 'RectangleRoi') {
cornerstoneTools.addToolForElement(element, apiTool, { configuration: { showMinMax: true, showStatsText: true } })
} else if (toolName === 'EllipticalRoi') {
cornerstoneTools.addToolForElement(element, apiTool, { configuration: { showMinMax: true } })
} else {
cornerstoneTools.addToolForElement(element, apiTool)
}
} }
} }
// Setup button listener // Setup button listener
@ -326,9 +337,9 @@ export default {
// return // return
// } // }
// this.stack.instanceId = image.imageId.split('/')[image.imageId.split('/').length - 1] // this.stack.instanceId = image.imageId.split('/')[image.imageId.split('/').length - 1]
var instanceId = image.imageId.split('/')[image.imageId.split('/').length - 1] // var instanceId = image.imageId.split('/')[image.imageId.split('/').length - 1]
instanceId = instanceId.split('.')[0] // instanceId = instanceId.split('.')[0]
this.stack.instanceId = instanceId // this.stack.instanceId = instanceId
this.height = (this.stack.currentImageIdIndex) * 100 / (this.stack.imageIds.length - 1) this.height = (this.stack.currentImageIdIndex) * 100 / (this.stack.imageIds.length - 1)
this.resetWwwc() this.resetWwwc()
}, },
@ -348,9 +359,8 @@ export default {
data.string('x00080030') data.string('x00080030')
) )
this.dicomInfo.series = data.string('x00200011') this.dicomInfo.series = data.string('x00200011')
this.dicomInfo.frame = `${this.stack.currentImageIdIndex + 1}/${ this.dicomInfo.frame = `${this.stack.currentImageIdIndex + 1}/${this.stack.imageIds.length
this.stack.imageIds.length }`
}`
this.dicomInfo.size = `${data.uint16('x00280011')}x${data.uint16( this.dicomInfo.size = `${data.uint16('x00280011')}x${data.uint16(
'x00280010' 'x00280010'
)}` )}`
@ -362,12 +372,13 @@ export default {
if (this.dicomInfo.thick) { if (this.dicomInfo.thick) {
this.dicomInfo.thick = this.dicomInfo.thick.toFixed(2) this.dicomInfo.thick = this.dicomInfo.thick.toFixed(2)
} }
let newImageIdIndex = this.stack.imageIds.findIndex(i=>i===e.detail.image.imageId) const newImageIdIndex = this.stack.imageIds.findIndex(i => i === e.detail.image.imageId)
if(newImageIdIndex === -1) return if (newImageIdIndex === -1) return
this.stack.currentImageIdIndex = newImageIdIndex this.stack.currentImageIdIndex = newImageIdIndex
this.stack.imageIdIndex = newImageIdIndex this.stack.imageIdIndex = newImageIdIndex
this.series.imageIdIndex = newImageIdIndex this.series.imageIdIndex = newImageIdIndex
this.height = (this.stack.currentImageIdIndex) * 100 / (this.stack.imageIds.length - 1) this.height = (this.stack.currentImageIdIndex) * 100 / (this.stack.imageIds.length - 1)
this.resetWwwc()
}, },
stackScrollCallback(e) { stackScrollCallback(e) {
const { detail } = e const { detail } = e
@ -395,15 +406,16 @@ export default {
}, },
onImageRendered(e) { onImageRendered(e) {
var imageId = e.detail.image.imageId // var imageId = e.detail.image.imageId
var instanceId = imageId.split('/')[imageId.split('/').length - 1] // var instanceId = imageId.split('/')[imageId.split('/').length - 1]
instanceId = instanceId.split('.')[0] // instanceId = instanceId.split('.')[0]
if (this.imageId !== instanceId) { // if (this.imageId !== instanceId) {
this.getOrientationMarker(e.detail.element) // this.getOrientationMarker(e.detail.element)
this.imageId = instanceId // this.imageId = instanceId
} // }
this.stack.instanceId = instanceId this.getOrientationMarker(e.detail.element)
// this.stack.instanceId = instanceId
var viewport = e.detail.viewport var viewport = e.detail.viewport
this.dicomInfo.wwwc = `${Math.round( this.dicomInfo.wwwc = `${Math.round(
viewport.voi.windowWidth viewport.voi.windowWidth
@ -634,7 +646,7 @@ export default {
enabledElement.renderingTools.renderCanvasData = renderCanvasData enabledElement.renderingTools.renderCanvasData = renderCanvasData
}, },
scrollPage(offset) { scrollPage(offset) {
if(this.loading) return if (this.loading) return
var index = this.stack.currentImageIdIndex + offset var index = this.stack.currentImageIdIndex + offset
if (index < 0) index = 0 if (index < 0) index = 0
else if (index >= this.stack.imageIds.length) { else if (index >= this.stack.imageIds.length) {
@ -646,7 +658,7 @@ export default {
}, },
toggleClipPlay() { toggleClipPlay() {
if(this.loading) return if (this.loading) return
if (this.toolState.clipPlaying) { if (this.toolState.clipPlaying) {
cornerstoneTools.stopClip(this.canvas) cornerstoneTools.stopClip(this.canvas)
this.toolState.clipPlaying = false this.toolState.clipPlaying = false
@ -657,7 +669,7 @@ export default {
cornerstoneTools.getToolState( cornerstoneTools.getToolState(
this.canvas, this.canvas,
'playClip' 'playClip'
).data[0].loop = false ).data[0].loop = true
}, },
setFps(fps) { setFps(fps) {
this.dicomInfo.fps = fps this.dicomInfo.fps = fps
@ -666,7 +678,7 @@ export default {
resetWwwc() { resetWwwc() {
this.toolState.viewportInvert = false this.toolState.viewportInvert = false
var viewport = cornerstone.getViewport(this.canvas) var viewport = cornerstone.getViewport(this.canvas)
viewport.invert = false // viewport.invert = false
var image = cornerstone.getImage(this.canvas) var image = cornerstone.getImage(this.canvas)
viewport.voi.windowWidth = image.windowWidth viewport.voi.windowWidth = image.windowWidth
viewport.voi.windowCenter = image.windowCenter viewport.voi.windowCenter = image.windowCenter
@ -745,6 +757,9 @@ export default {
var uid = cornerstone.getImage(this.canvas).data.string('x00080018') var uid = cornerstone.getImage(this.canvas).data.string('x00080018')
cornerstoneTools.SaveAs(this.canvas, `${uid}.png`) cornerstoneTools.SaveAs(this.canvas, `${uid}.png`)
}, },
showTags() {
this.dcmTag.visible = true
},
fitToWindow() { fitToWindow() {
if (this.stack.seriesNumber) { if (this.stack.seriesNumber) {
cornerstone.fitToWindow(this.canvas) cornerstone.fitToWindow(this.canvas)
@ -871,194 +886,197 @@ export default {
synchronizer.remove(this.$refs.canvas) synchronizer.remove(this.$refs.canvas)
this.setAllToolsPassive() this.setAllToolsPassive()
}, },
onContextmenu(event) { onContextmenu(e) {
const colormapsList = cornerstone.colors.getColormapsList() e.stopImmediatePropagation()
const colorItems = [] e.stopPropagation()
colorItems.push({ e.preventDefault()
label: '默认值', // const colormapsList = cornerstone.colors.getColormapsList()
onClick: () => { // const colorItems = []
this.setColormap() // colorItems.push({
} // label: '',
}) // onClick: () => {
colormapsList.forEach(colormap => { // this.setColormap()
const item = {} // }
item.label = colormap.name // })
item.onClick = () => { // colormapsList.forEach(colormap => {
this.setColormap(colormap.id) // const item = {}
} // item.label = colormap.name
colorItems.push(item) // item.onClick = () => {
}) // this.setColormap(colormap.id)
this.$contextmenu({ // }
items: [ // colorItems.push(item)
{ // })
label: '移动', // this.$contextmenu({
divided: true, // items: [
onClick: () => { // {
this.setToolActive('Pan') // label: '',
} // divided: true,
}, // onClick: () => {
{ // this.setToolActive('Pan')
label: '缩放', // }
divided: true, // },
children: [ // {
{ // label: '',
label: '自由缩放', // divided: true,
onClick: () => { // children: [
this.setToolActive('Zoom') // {
} // label: '',
}, // onClick: () => {
{ // this.setToolActive('Zoom')
label: '适应图像', // }
onClick: () => { // },
this.fitToWindow() // {
} // label: '',
}, // onClick: () => {
{ // this.fitToWindow()
label: '适应窗口', // }
onClick: () => { // },
this.fitToImage() // {
} // label: '',
} // onClick: () => {
] // this.fitToImage()
}, // }
{ // }
label: '透镜', // ]
divided: true, // },
onClick: () => { // {
this.setToolActive('Magnify') // label: '',
} // divided: true,
}, // onClick: () => {
{ // this.setToolActive('Magnify')
label: '旋转', // }
divided: true, // },
children: [ // {
{ // label: '',
label: '默认值', // divided: true,
onClick: () => { // children: [
this.resetRotate() // {
} // label: '',
}, // onClick: () => {
{ // this.resetRotate()
label: '自由旋转', // }
onClick: () => { // },
this.setToolActive('Rotate') // {
} // label: '',
}, // onClick: () => {
{ // this.setToolActive('Rotate')
label: '水平翻转', // }
onClick: () => { // },
this.setRotate(true, false, 0) // {
} // label: '',
}, // onClick: () => {
{ // this.setRotate(true, false, 0)
label: '垂直翻转', // }
onClick: () => { // },
this.setRotate(false, true, 0) // {
} // label: '',
}, // onClick: () => {
{ // this.setRotate(false, true, 0)
label: '左转90度', // }
onClick: () => { // },
this.setRotate(false, false, -90) // {
} // label: '90',
}, // onClick: () => {
{ // this.setRotate(false, false, -90)
label: '右转90度', // }
onClick: () => { // },
this.setRotate(false, false, 90) // {
} // label: '90',
} // onClick: () => {
] // this.setRotate(false, false, 90)
}, // }
// }
// ]
// },
{ // {
label: '测量', // label: '',
divided: true, // divided: true,
minWidth: 0, // minWidth: 0,
children: [ // children: [
{ // {
label: '探针', // label: '',
onClick: () => { // onClick: () => {
this.setToolActive('Probe') // this.setToolActive('Probe')
} // }
}, // },
{ // {
label: '长度测量', // label: '',
onClick: () => { // onClick: () => {
this.setToolActive('Length') // this.setToolActive('Length')
} // }
}, // },
{ // {
label: '角度测量', // label: '',
onClick: () => { // onClick: () => {
this.setToolActive('Angle') // this.setToolActive('Angle')
} // }
}, // },
{ // {
label: 'Cobb测量', // label: 'Cobb',
onClick: () => { // onClick: () => {
this.setToolActive('CobbAngle') // this.setToolActive('CobbAngle')
} // }
}, // },
{ // {
label: '椭圆测量', // label: '',
onClick: () => { // onClick: () => {
this.setToolActive('EllipticalRoi') // this.setToolActive('EllipticalRoi')
} // }
}, // },
{ // {
label: '矩形测量', // label: '',
onClick: () => { // onClick: () => {
this.setToolActive('RectangleRoi') // this.setToolActive('RectangleRoi')
} // }
}, // },
{ // {
label: '多边形标记', // label: '',
onClick: () => { // onClick: () => {
this.setToolActive('FreehandRoi') // this.setToolActive('FreehandRoi')
} // }
}, // },
{ // {
label: '十字线', // label: '线',
onClick: () => { // onClick: () => {
this.setToolActive('Bidirectional') // this.setToolActive('Bidirectional')
} // }
}, // },
{ // {
label: '文字标注', // label: '',
onClick: () => { // onClick: () => {
this.setToolActive('ArrowAnnotate') // this.setToolActive('ArrowAnnotate')
} // }
} // }
] // ]
}, // },
{ // {
label: '调窗', // label: '',
divided: true, // divided: true,
onClick: () => { // onClick: () => {
this.setToolActive('Wwwc') // this.setToolActive('Wwwc')
} // }
}, // },
{ // {
label: '反色', // label: '',
divided: true, // divided: true,
onClick: () => { // onClick: () => {
this.toggleInvert() // this.toggleInvert()
} // }
}, // },
{ // {
label: '伪彩', // label: '',
children: colorItems // children: colorItems
} // }
], // ],
event, // event,
// x: event.clientX, // // x: event.clientX,
// y: event.clientY, // // y: event.clientY,
customClass: 'class-a', // customClass: 'class-a',
zIndex: 3, // zIndex: 3,
minWidth: 100 // minWidth: 100
}) // })
return false // return false
}, },
getToolSate() { getToolSate() {
const toolROITypes = [ const toolROITypes = [
@ -1109,6 +1127,7 @@ export default {
font-size: 12px; font-size: 12px;
/* z-index: 1; */ /* z-index: 1; */
} }
.info-image { .info-image {
position: absolute; position: absolute;
left: 10px; left: 10px;
@ -1128,6 +1147,7 @@ export default {
font-size: 12px; font-size: 12px;
/* z-index: 1; */ /* z-index: 1; */
} }
.info-instance { .info-instance {
position: absolute; position: absolute;
right: 15px; right: 15px;
@ -1160,6 +1180,7 @@ export default {
margin: 10px; margin: 10px;
cursor: default; cursor: default;
} }
.menu__item:hover { .menu__item:hover {
color: #ff0000; color: #ff0000;
} }
@ -1179,7 +1200,8 @@ li:hover {
background-color: #e0e0e2; background-color: #e0e0e2;
color: white; color: white;
} }
.my_slider_box:after{
.my_slider_box:after {
content: ''; content: '';
position: absolute; position: absolute;
bottom: -20px; bottom: -20px;

View File

@ -0,0 +1,288 @@
<template>
<div class="dcm-tag">
<el-input
v-model="search"
size="mini"
:placeholder="$t('trials:dicom-tag:keywords')"
style="width:200px"
/>
<el-table
:data="filterList(list)"
row-key="id"
default-expand-all
:tree-props="{children: 'child', hasChildren: 'hasChildren'}"
:default-sort="{prop: 'tagCode', order: 'ascending'}"
height="500"
>
<el-table-column
prop="tagCode"
label="Tag"
min-width="120"
sortable
/>
<el-table-column
prop="tagName"
label="Description"
min-width="150"
show-overflow-tooltip
sortable
/>
<el-table-column
prop="vr"
label="VR"
min-width="50"
show-overflow-tooltip
sortable
/>
<el-table-column
prop="tagLength"
label="Length"
min-width="80"
show-overflow-tooltip
sortable
/>
<el-table-column
prop="value"
label="Value"
min-width="200"
show-overflow-tooltip
sortable
/>
</el-table>
</div>
</template>
<script>
import TAG_DICT from './dataDictionary'
import * as cornerstone from 'cornerstone-core'
import dicomParser from 'dicom-parser'
export default {
name: 'DicomTags',
props: {
imageId: {
type: String,
required: true
}
},
data() {
return {
list: [],
idx: 0,
search: ''
}
},
async mounted() {
const image = await cornerstone.loadAndCacheImage(this.imageId)
var dataSet = dicomParser.parseDicom(image.data.byteArray)
var output = []
this.dumpDataSet(dataSet, output)
this.list = output
},
methods: {
filterList(list) {
if (list.length === 0) return []
if (!this.search) {
return list
} else {
const search = isNaN(parseFloat(this.search)) ? this.search.toLowerCase() : String(this.search)
const arr = list.filter(data => {
if (data.tagCode && data.tagCode.toLowerCase().includes(search)) {
return data
} else if (data.tagName && data.tagName.toLowerCase().includes(search)) {
return data
} else if (data.value) {
let v = ''
if (!isNaN(parseFloat(data.value))) {
v = String(data.value)
} else {
v = data.value.toLowerCase()
}
if (v.includes(search)) {
return data
}
}
})
return arr
}
},
dumpDataSet(dataSet, output) {
try {
for (const propertyName in dataSet.elements) {
const elementObject = {}
const element = dataSet.elements[propertyName]
const tag = this.getTag(element.tag)
elementObject.id = `${this.idx++}${new Date().getTime()}`
if (!tag) {
const group = element.tag.substring(1, 5)
const el = element.tag.substring(5, 9)
elementObject.tagCode = ('(' + group + ',' + el + ')').toUpperCase()
} else {
elementObject.tagCode = tag ? tag.tag : ''
elementObject.tagName = tag ? tag.name : ''
}
elementObject.tagLength = element.length
elementObject.value = ''
elementObject.child = []
if (element.items) {
element.items.forEach(item => {
const childOutput = []
this.dumpDataSet(item.dataSet, childOutput)
elementObject.child.push(...childOutput)
})
} else if (element.fragments) {
//
} else {
var vr
if (element.vr !== undefined) {
vr = element.vr
} else {
if (tag !== undefined) {
vr = tag.vr
}
}
elementObject.vr = vr
if (element.length < 128) {
// const str = dataSet.string(propertyName)
// if (elementObject.tagCode === 'x00280010') {
// console.log(str)
// }
// const stringIsAscii = this.isASCII(str)
// if (stringIsAscii && str !== undefined) {
// elementObject.value = str
// }
if (element.vr === undefined && tag === undefined) {
if (element.length === 2) {
elementObject.value = dataSet.uint16(propertyName)
} else if (element.length === 4) {
elementObject.value = dataSet.uint32(propertyName)
}
const str = dataSet.string(propertyName)
const stringIsAscii = this.isASCII(str)
if (stringIsAscii) {
if (str !== undefined) {
elementObject.value = str
}
} else {
if (element.length !== 2 && element.length !== 4) {
// elementObject.value = 'binary data'
}
}
} else {
if (this.isStringVr(vr)) {
const str = dataSet.string(propertyName)
const stringIsAscii = this.isASCII(str)
if (stringIsAscii) {
if (str !== undefined) {
elementObject.value = str
}
} else {
elementObject.value = dataSet.string(propertyName)
// if (element.length !== 2 && element.length !== 4) {
// // elementObject.value = 'binary data'
// }
}
} else if (vr === 'US') {
let text = dataSet.uint16(propertyName)
for (let i = 1; i < dataSet.elements[propertyName].length / 2; i++) {
text += '\\' + dataSet.uint16(propertyName, i)
}
elementObject.value = text
} else if (vr === 'SS') {
let text = dataSet.int16(propertyName)
for (let i = 1; i < dataSet.elements[propertyName].length / 2; i++) {
text += '\\' + dataSet.int16(propertyName, i)
}
elementObject.value = text
} else if (vr === 'UL') {
let text = dataSet.uint32(propertyName)
for (let i = 1; i < dataSet.elements[propertyName].length / 4; i++) {
text += '\\' + dataSet.uint32(propertyName, i)
}
elementObject.value = text
} else if (vr === 'SL') {
let text = dataSet.int32(propertyName)
for (let i = 1; i < dataSet.elements[propertyName].length / 4; i++) {
text += '\\' + dataSet.int32(propertyName, i)
}
elementObject.value = text
} else if (vr === 'FD') {
let text = dataSet.double(propertyName)
for (let i = 1; i < dataSet.elements[propertyName].length / 8; i++) {
text += '\\' + dataSet.double(propertyName, i)
}
elementObject.value = text
} else if (vr === 'FL') {
let text = dataSet.float(propertyName)
for (let i = 1; i < dataSet.elements[propertyName].length / 4; i++) {
text += '\\' + dataSet.float(propertyName, i)
}
elementObject.value = text
} else if (vr === 'OB' || vr === 'OW' || vr === 'UN' || vr === 'OF' || vr === 'UT') {
if (element.length === 2) {
elementObject.value = dataSet.uint16(propertyName)
} else if (element.length === 4) {
elementObject.value = dataSet.uint32(propertyName)
} else {
}
} else if (vr === 'AT') {
// var group = dataSet.uint16(propertyName, 0);
// var groupHexStr = ("0000" + group.toString(16)).substr(-4);
// var element = dataSet.uint16(propertyName, 1);
// var elementHexStr = ("0000" + element.toString(16)).substr(-4);
// text += "x" + groupHexStr + elementHexStr;
} else if (vr === 'SQ') {
} else {
// no display code for VR yet, sorry!
}
}
}
}
output.push(elementObject)
}
} catch (err) {
const ex = {
exception: err,
output: output
}
console.log(ex)
}
},
getTag(tag) {
var group = tag.substring(1, 5)
var element = tag.substring(5, 9)
var tagIndex = ('(' + group + ',' + element + ')').toUpperCase()
var attr = TAG_DICT[tagIndex]
return attr
},
isASCII(str) {
return /^[\x00-\x7F]*$/.test(str)
},
isStringVr(vr) {
if (vr === 'AT' || vr === 'FL' || vr === 'FD' || vr === 'OB' || vr === 'OF' || vr === 'OW' || vr === 'SI' || vr === 'SQ' || vr === 'SS' || vr === 'UL' || vr === 'US') {
return false
}
return true
}
}
}
</script>
<style lang="scss" scoped>
.dcm-tag{
// user-select: none;
::-webkit-scrollbar {
width: 8px;
height: 15px;
}
::-webkit-scrollbar-thumb {
border-radius: 10px;
background: #d0d0d0;
}
}
</style>

View File

@ -233,6 +233,10 @@
<button :title="$t('trials:dicom-show:image')" class="btn-link" @click="currentDicomCanvas.saveImage()"> <button :title="$t('trials:dicom-show:image')" class="btn-link" @click="currentDicomCanvas.saveImage()">
<svg-icon icon-class="image" style="font-size:20px;" /> <svg-icon icon-class="image" style="font-size:20px;" />
</button> </button>
<!-- 标签 -->
<button :title="$t('trials:dicom-show:tags')" class="btn-link" @click="currentDicomCanvas.showTags()">
<svg-icon icon-class="dictionary" style="font-size:20px;" />
</button>
</div> </div>
</div> </div>
<div class="measureTool-wrapper"> <div class="measureTool-wrapper">
@ -405,7 +409,8 @@ export default {
loadImageStack(dicomSeries) { loadImageStack(dicomSeries) {
this.currentDicomCanvas.toolState.clipPlaying = false this.currentDicomCanvas.toolState.clipPlaying = false
this.$nextTick(() => { this.$nextTick(() => {
this.currentDicomCanvas.loadImageStack(dicomSeries) const series = Object.assign({}, dicomSeries)
this.currentDicomCanvas.loadImageStack(series)
}) })
}, },
loadOtherImageStack(seriesList) { loadOtherImageStack(seriesList) {
@ -415,7 +420,8 @@ export default {
Array.from(elements).forEach((element, index) => { Array.from(elements).forEach((element, index) => {
const canvasIndex = element.getAttribute('data-index') const canvasIndex = element.getAttribute('data-index')
if (index < seriesList.length && element.style.display !== 'none') { if (index < seriesList.length && element.style.display !== 'none') {
this.$refs[`dicomCanvas${canvasIndex}`].loadImageStack(seriesList[index]) const series = Object.assign({}, seriesList[index])
this.$refs[`dicomCanvas${canvasIndex}`].loadImageStack(series)
} }
}) })
}) })

File diff suppressed because it is too large Load Diff

View File

@ -2,12 +2,13 @@ import Vue from "vue";
import MFACOMP from "./index.vue"; import MFACOMP from "./index.vue";
const MFAConstructor = Vue.extend(MFACOMP); const MFAConstructor = Vue.extend(MFACOMP);
let MFAINSTANCELIST = [];
const MFA = options => { const MFA = options => {
const { UserId, username, EMail, callBack, cancelBack, status = 'login' } = options; const { UserId, username, EMail, callBack, cancelBack, status = 'login' } = options;
if (!UserId) throw `UserId is requred.but ${UserId}` if (!UserId) throw `UserId is requred.but ${UserId}`
const id = `MFA${new Date().getTime()}`; const id = `MFA${new Date().getTime()}`;
const instance = new MFAConstructor(); const instance = new MFAConstructor();
MFAINSTANCELIST.push(instance)
instance.id = id; instance.id = id;
instance.vm = instance.$mount(); instance.vm = instance.$mount();
if (instance.vm.visible) return; if (instance.vm.visible) return;
@ -20,7 +21,17 @@ const MFA = options => {
if (cancelBack) cancelBack(); if (cancelBack) cancelBack();
document.body.removeChild(instance.vm.$el); document.body.removeChild(instance.vm.$el);
instance.vm.$destroy(); instance.vm.$destroy();
let index = MFAINSTANCELIST.findIndex(item => item.id === id);
MFAINSTANCELIST.splice(index, 1)
}); });
return instance.vm; return instance.vm;
} }
MFA.close = () => {
if (MFAINSTANCELIST.length <= 0) return;
MFAINSTANCELIST.forEach(item => {
document.body.removeChild(item.vm.$el);
item.vm.$destroy();
})
MFAINSTANCELIST = [];
}
export default MFA; export default MFA;

View File

@ -21,7 +21,7 @@
label-width="100px" label-width="100px"
> >
<!-- 邮箱 --> <!-- 邮箱 -->
<p class="tip"> <p class="tip_mfa">
<i class="el-icon-warning" style="color: #409eff"></i> <i class="el-icon-warning" style="color: #409eff"></i>
<span>{{ tip }}</span> <span>{{ tip }}</span>
</p> </p>
@ -83,7 +83,7 @@ export default {
second: 60, second: 60,
form: { form: {
Code: null, Code: null,
UserId: null, IdentityUserId: null,
EMail: null, EMail: null,
username: null, username: null,
}, },
@ -91,21 +91,21 @@ export default {
Code: [ Code: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:specify"), message: this.$t("mfa:ruleMessage:specify"),
trigger: "blur", trigger: "blur",
}, },
], ],
EMail: [ EMail: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:specify"), message: this.$t("mfa:ruleMessage:specify"),
trigger: "blur", trigger: "blur",
}, },
], ],
username: [ username: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:specify"), message: this.$t("mfa:ruleMessage:specify"),
trigger: "blur", trigger: "blur",
}, },
], ],
@ -115,7 +115,7 @@ export default {
methods: { methods: {
open(data) { open(data) {
let { UserId, status, username, EMail } = data; let { UserId, status, username, EMail } = data;
this.form.UserId = UserId; this.form.IdentityUserId = UserId;
this.status = status ? status : "login"; this.status = status ? status : "login";
this.form.username = username; this.form.username = username;
this.form.EMail = EMail; this.form.EMail = EMail;
@ -134,10 +134,10 @@ export default {
let res = await verifyMFACode(this.form); let res = await verifyMFACode(this.form);
this.loading = false; this.loading = false;
if (res.IsSuccess) { if (res.IsSuccess) {
if (this.status === "login") { // if (this.status === "login") {
this.$message.success(this.$t("mfa:message:verifySuccess")); // this.$message.success(this.$t("mfa:message:verifySuccess"));
} // }
this.$emit("success", this.form.UserId); this.$emit("success", this.form.IdentityUserId);
this.cancel(); this.cancel();
} }
} catch (err) { } catch (err) {
@ -154,7 +154,7 @@ export default {
this.timer = null; this.timer = null;
} }
let data = { let data = {
UserId: this.form.UserId, IdentityUserId: this.form.IdentityUserId,
}; };
if (this.status === "lock") { if (this.status === "lock") {
data.MfaType = 1; data.MfaType = 1;
@ -167,6 +167,7 @@ export default {
this.timer = setInterval(() => { this.timer = setInterval(() => {
this.second--; this.second--;
if (this.second <= 0) { if (this.second <= 0) {
this.flag = false;
clearInterval(this.timer); clearInterval(this.timer);
this.timer = null; this.timer = null;
} }
@ -188,7 +189,7 @@ export default {
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.tip { .tip_mfa {
width: 86%; width: 86%;
margin: auto; margin: auto;
margin-bottom: 20px; margin-bottom: 20px;
@ -201,4 +202,7 @@ export default {
margin-right: 5px; margin-right: 5px;
} }
} }
::v-deep .el-dialog__header {
font-weight: bold;
}
</style> </style>

View File

@ -1,28 +1,30 @@
<template> <template>
<div class="preview-wrapper"> <div class="preview-wrapper">
<iframe <iframe v-if="fileType.indexOf('jpg') !== -1 || fileType.indexOf('png') !== -1" frameborder="0" :src="filePath"
v-if="fileType.indexOf('jpg') !== -1 || fileType.indexOf('png') !== -1" width="100%" height="100%" />
frameborder="0"
:src="filePath"
width="100%"
height="100%"
/>
<!-- <embed v-else-if="fileType.indexOf('pdf') !== -1" :src="filePath+'#toolbar=0'" style="width: 100%; height: 100%"> --> <!-- <embed v-else-if="fileType.indexOf('pdf') !== -1" :src="filePath+'#toolbar=0'" style="width: 100%; height: 100%"> -->
<!-- <iframe v-else-if="fileType.indexOf('pdf') !== -1" :src="filePath+'#toolbar=0'" width="100%" height="100%" frameborder="0" /> --> <!-- <iframe v-else-if="fileType.indexOf('pdf') !== -1" :src="filePath+'#toolbar=0'" width="100%" height="100%" frameborder="0" /> -->
<iframe v-else-if="fileType.indexOf('pdf') !== -1" :src="`/static/pdfjs/web/viewer.html?file=${OSSclientConfig.basePath}${filePath}?userName=${currentUser}`" width="100%" height="100%" frameborder="0" crossorigin="anonymous" /> <iframe v-else-if="fileType.indexOf('pdf') !== -1"
:src="`/static/pdfjs/web/viewer.html?file=${OSSclientConfig.basePath}${filePath}?userName=${currentUser}&COMPANY=${COMPANY}`"
width="100%" height="100%" frameborder="0" crossorigin="anonymous" />
<!-- <pdf--> <!-- <pdf-->
<!-- v-else-if="fileType.indexOf('pdf') !== -1"--> <!-- v-else-if="fileType.indexOf('pdf') !== -1"-->
<!-- :src="`/static/pdfjs/web/viewer.html?file=${filePath}`">--> <!-- :src="`/static/pdfjs/web/viewer.html?file=${filePath}`">-->
<!-- </pdf>--> <!-- </pdf>-->
<div v-else> <video :src="`${OSSclientConfig.basePath}${filePath}`" style="width: 100%;height: 99%;" autoplay controls
controlsList="nodownload" v-else-if="fileType.indexOf('mp4') !== -1"></video>
<iframe v-else
:src="`/static/onlyOffice/viewer.html?url=${OSSclientConfig.basePath}${filePath}?onlyOffice_url=${onlyOffice_url}&type=${fileType}&title=${title}&documentType=${documentType}&userName=${currentUser}`"
width="100%" height="100%" frameborder="0" crossorigin="anonymous" />
<!-- <div v-else>
{{ $t('common:message:downloadFile') }} {{ $t('common:message:downloadFile') }}
<el-link type="primary" @click="downLoadFile">{{ $t('common:button:download') }}</el-link> <el-link type="primary" @click="downLoadFile">{{ $t('common:button:download') }}</el-link>
</div> </div> -->
</div> </div>
</template> </template>
<script> <script>
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import DOCUMENTTYPE from "@/utils/onlyOffice_type.js"
export default { export default {
name: 'PreviewFile', name: 'PreviewFile',
computed: { computed: {
@ -36,11 +38,22 @@ export default {
fileType: { fileType: {
type: String, type: String,
required: true required: true
} },
title: {
type: String,
default: ''
},
}, },
data() { data() {
return { return {
currentUser: zzSessionStorage.getItem('userName') currentUser: zzSessionStorage.getItem('userName'),
COMPANY: process.env.VUE_APP_COMPANY_NAME,
onlyOffice_url: process.env.VUE_APP_ONLYOFFICE_URL
}
},
computed: {
documentType() {
return DOCUMENTTYPE[`.${this.fileType}`]
} }
}, },
mounted() { mounted() {
@ -61,14 +74,16 @@ export default {
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.preview-wrapper{ .preview-wrapper {
height: 100%; height: 100%;
width:100%; width: 100%;
padding: 10px; padding: 10px;
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 7px; width: 7px;
height: 7px; height: 7px;
} }
::-webkit-scrollbar-thumb { ::-webkit-scrollbar-thumb {
border-radius: 10px; border-radius: 10px;
background: #d0d0d0; background: #d0d0d0;

View File

@ -0,0 +1,23 @@
import Vue from "vue";
import OnlyOffice from "./index.vue";
const PreviewConstructor = Vue.extend(OnlyOffice);
const onlyOffice = options => {
const { path, type, title } = options;
if (!path) throw `path is requred.but ${path}`
const id = `OnlyOffice_${new Date().getTime()}`;
const instance = new PreviewConstructor();
instance.id = id;
instance.vm = instance.$mount();
if (instance.vm.visible) return;
document.body.appendChild(instance.vm.$el);
instance.vm.open(path, type, title);
instance.vm.$on("closed", () => {
instance.vm.docEditor = null
document.body.removeChild(instance.vm.$el);
instance.vm.$destroy();
});
return instance.vm;
}
export default onlyOffice;

View File

@ -0,0 +1,7 @@
import OnlyOffice from "./index.vue";
import onlyOffice from "./fun";
export default Vue => {
Vue.component(OnlyOffice.name, OnlyOffice);
Vue.prototype.$onlyOffice = onlyOffice;
};

View File

@ -0,0 +1,46 @@
<template>
<el-dialog v-if="visible" :visible.sync="visible" :title="title" :fullscreen="true" append-to-body
custom-class="base-dialog-wrapper" @close="handleClose">
<div class="base-modal-body" style="border: 2px solid #ccc; padding: 10px">
<iframe v-if="visible"
:src="`/static/onlyOffice/viewer.html?url=${OSSclientConfig.basePath}${path}?onlyOffice_url=${onlyOffice_url}&type=${type}&title=${title}&documentType=${documentType}&userName=${currentUser}`"
width="100%" height="99%" frameborder="0" crossorigin="anonymous" />
</div>
</el-dialog>
</template>
<script>
import DOCUMENTTYPE from "@/utils/onlyOffice_type.js"
export default {
name: "OnlyOffice",
data() {
return {
visible: false,
path: null,
type: null,
title: null,
documentType: null,
currentUser: zzSessionStorage.getItem('userName'),
onlyOffice_url: process.env.VUE_APP_ONLYOFFICE_URL
};
},
methods: {
open(path, type, title) {
this.path = path;
this.type = type.toLowerCase();
this.documentType = DOCUMENTTYPE[`.${this.type}`]
this.title = title;
this.visible = true;
},
handleClose() {
this.$emit("closed");
},
},
};
</script>
<style lang="scss" scoped>
#placeholder {
width: 100%;
height: 100%;
}
</style>

View File

@ -0,0 +1,23 @@
import Vue from "vue";
import Video from "./index.vue";
const PreviewConstructor = Vue.extend(Video);
const video = options => {
const { path, type, title } = options;
if (!path) throw `path is requred.but ${path}`
const id = `OnlyOffice_${new Date().getTime()}`;
const instance = new PreviewConstructor();
instance.id = id;
instance.vm = instance.$mount();
if (instance.vm.visible) return;
document.body.appendChild(instance.vm.$el);
instance.vm.open(path, type, title);
instance.vm.$on("closed", () => {
instance.vm.docEditor = null
document.body.removeChild(instance.vm.$el);
instance.vm.$destroy();
});
return instance.vm;
}
export default video;

View File

@ -0,0 +1,7 @@
import Video from "./index.vue";
import video from "./fun";
export default Vue => {
Vue.component(Video.name, Video);
Vue.prototype.$video = video;
};

View File

@ -0,0 +1,38 @@
<template>
<el-dialog v-if="visible" :visible.sync="visible" :title="title" :fullscreen="true" append-to-body
custom-class="base-dialog-wrapper" @close="handleClose">
<div class="base-modal-body" style="border: 2px solid #ccc; padding: 10px">
<video :src="path" style="width: 100%;height: 99%;" autoplay controls controlsList="nodownload"></video>
</div>
</el-dialog>
</template>
<script>
export default {
name: "Video",
data() {
return {
visible: false,
path: null,
type: null,
title: null,
};
},
methods: {
open(path, type, title) {
this.path = this.OSSclientConfig.basePath + path;
this.title = title;
this.visible = true;
},
handleClose() {
this.$emit("closed");
},
},
};
</script>
<style lang="scss" scoped>
#placeholder {
width: 100%;
height: 100%;
}
</style>

View File

@ -124,7 +124,7 @@ export default {
inputChange(v) { inputChange(v) {
this.resultFilter = this.options.filter((o) => { this.resultFilter = this.options.filter((o) => {
var reg = new RegExp(v, 'ig') var reg = new RegExp(v, 'ig')
return reg.test(o.ResearchProgramNo) || reg.test(o.Indication) return reg.test(o.ResearchProgramNo) || reg.test(o.Indication) || reg.test(o.ExperimentName)
}) })
}, },
getTrialList() { getTrialList() {

View File

@ -3,15 +3,16 @@
<div class="trialsTab"> <div class="trialsTab">
<el-tabs v-model="trialsTab" @tab-click="clickTab"> <el-tabs v-model="trialsTab" @tab-click="clickTab">
<el-tab-pane v-for="item of trialsRouter.children.find(v => {return v.name == 'TrialsPanel'}).children" :key="`tab${item.path}`" :disabled="TotalNeedSignTrialDocCount !== 0 && item.path !== '/trials/trials-panel/attachments'" :label="$t(item.LanguageMark)" :name="item.path"> <el-tab-pane v-for="item of trialsRouter.children.find(v => {return v.name == 'TrialsPanel'}).children" :key="`tab${item.path}`" :disabled="TotalNeedSignTrialDocCount !== 0 && item.path !== '/trials/trials-panel/attachments'" :label="$t(item.LanguageMark)" :name="item.path">
<el-tabs v-if="!item.tabHiddn" v-model="trialsTabChild" @tab-click="clickTab"> <el-tabs v-if="!item.tabHiddn" v-model="trialsTabChild" @tab-click="clickTab" style="background-color: #f5f7fa;">
<el-tab-pane <template v-for="item1 of item.children">
v-for="item1 of item.children" <el-tab-pane
v-if="TrialConfig && isShow(item1.path)" v-if="TrialConfig && isShow(item1.path)"
:key="`tab1${item1.path}`" :key="`tab1${item1.path}`"
:disabled="TotalNeedSignTrialDocCount !== 0 && item1.path !== '/trials/trials-panel/attachments/self-attachment' || (TrialStatusStr === 'Initializing' && (item1.path === '/trials/trials-panel/setting/personnel-manage' || item1.path === '/trials/trials-panel/setting/qc-question' || item1.path === '/trials/trials-panel/setting/reading-unit' || item1.path === '/trials/trials-panel/setting/medical-audit' || item1.path === '/trials/trials-panel/setting/email-manage'))" :disabled="TotalNeedSignTrialDocCount !== 0 && item1.path !== '/trials/trials-panel/attachments/self-attachment' || (TrialStatusStr === 'Initializing' && (item1.path === '/trials/trials-panel/setting/personnel-manage' || item1.path === '/trials/trials-panel/setting/qc-question' || item1.path === '/trials/trials-panel/setting/reading-unit' || item1.path === '/trials/trials-panel/setting/medical-audit' || item1.path === '/trials/trials-panel/setting/email-manage'))"
:label="$t(item1.LanguageMark)" :label="$t(item1.LanguageMark)"
:name="item1.path" :name="item1.path"
/> />
</template>
</el-tabs> </el-tabs>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
@ -21,11 +22,14 @@
<i class="iconfont" style="font-size: 30px;color:#ccc">&#xe680;</i> <i class="iconfont" style="font-size: 30px;color:#ccc">&#xe680;</i>
</div> </div>
<!-- 返回项目列表 --> <!-- 返回项目列表 -->
<div class="my_icon_box" :title="$t('trials:trials:title:backTrialList')" @click="goBack"> <el-button type="primary" size="small" @click="goBack">
<i class="iconfont">&#xe670;</i> <i class="iconfont">&#xe670;</i>
<!-- 返回 -->
<span>{{ $t('trials:trials:title:back') }}</span> <span>{{ $t('trials:trials:title:back') }}</span>
</div> </el-button>
<!-- <div class="my_icon_box" :title="$t('trials:trials:title:backTrialList')" @click="goBack">
<i class="iconfont">&#xe670;</i>
<span>{{ $t('trials:trials:title:back') }}</span>
</div> -->
</div> </div>
</div> </div>
</template> </template>
@ -126,6 +130,10 @@ export default {
var additionalAssessmentList = [ var additionalAssessmentList = [
'/trials/trials-panel/subject/brain-metastasis' '/trials/trials-panel/subject/brain-metastasis'
] ]
let dicomList = [
'/trials/trials-panel/trial-summary/image-inspect',
'/trials/trials-panel/trial-summary/push-record',
]
if (this.TrialConfig.QCProcessEnum === 0 && ~qualityList.indexOf(path)) { if (this.TrialConfig.QCProcessEnum === 0 && ~qualityList.indexOf(path)) {
isShow = false isShow = false
} }
@ -135,9 +143,13 @@ export default {
if (!this.IsAdditionalAssessment && ~additionalAssessmentList.indexOf(path)) { if (!this.IsAdditionalAssessment && ~additionalAssessmentList.indexOf(path)) {
isShow = false isShow = false
} }
if ((!this.TrialConfig.IsPACSConnect || !this.TrialConfig.IsTrialPACSConfirmed) && ~dicomList.indexOf(path)) {
isShow = false
}
return isShow return isShow
}, },
goBack() { goBack() {
zzSessionStorage.removeItem('lastWorkbench')
this.$router.push({ path: '/trials/trials-list' }) this.$router.push({ path: '/trials/trials-list' })
}, },
selectTrials(v) { selectTrials(v) {
@ -213,6 +225,9 @@ export default {
.el-tabs__header{ .el-tabs__header{
margin-bottom: 3px; margin-bottom: 3px;
} }
.el-tabs__item.is-active{
font-weight: bold;
}
position: relative; position: relative;
.el-input--medium .el-input__inner{ .el-input--medium .el-input__inner{
height: 44px;line-height: 44px;width: 280px; height: 44px;line-height: 44px;width: 280px;

View File

@ -15,7 +15,7 @@
accept=".pdf" accept=".pdf"
> >
<el-button size="small" type="primary" :disabled="btnDisabled || $route.query.ReviewStatus === '1'" >{{ $t('system:GcpCertificate:upload:Upload') }}</el-button> <el-button size="small" type="primary" :disabled="btnDisabled || $route.query.ReviewStatus === '1'" >{{ $t('system:GcpCertificate:upload:Upload') }}</el-button>
<span slot="tip" class="el-upload__tip">{{$t('system:GcpCertificate:tap:must2') }}</span> <span slot="tip" class="el-upload__tip">{{$t('system:tip:file:pdf') }}</span>
</el-upload> </el-upload>
</div> </div>
</template> </template>
@ -99,7 +99,7 @@ export default {
this.btnDisabled = false this.btnDisabled = false
if (res.IsSuccess) { if (res.IsSuccess) {
this.fileList[0].id = res.Result[0].Id this.fileList[0].id = res.Result[0].Id
this.$message.success('Uploaded successfully') this.$message.success(this.$t('trials:uploadDicomList:table:Uploaded'))
this.$emit('getFileList', res.Result[0].Id, res.Result[0].Path) this.$emit('getFileList', res.Result[0].Id, res.Result[0].Path)
} }
}) })
@ -113,13 +113,13 @@ export default {
if (isValidFile) { if (isValidFile) {
this.fileList = [] this.fileList = []
} else { } else {
this.$alert('must be in pdf format') this.$alert(this.$t('upload:rule:MUSTPDF'))
return false return false
} }
}, },
beforeRemove(file, fileList) { beforeRemove(file, fileList) {
if (file && file.status === 'success') { if (file && file.status === 'success') {
return this.$confirm(`Sure to remove ${file.name}?`) return this.$confirm(this.$t('system:reviewer:confirm:delete'))
} }
}, },
handleRemoveFile(file, fileList) { handleRemoveFile(file, fileList) {
@ -146,7 +146,7 @@ export default {
} }
}, },
handleExceed(files, fileList) { handleExceed(files, fileList) {
this.$message.warning(`Upload is currently limited to 1 file`) this.$message.warning(this.$t('upload:rule:maxFile1'))
}, },
fileValid(fileName, typeArr) { fileValid(fileName, typeArr) {
var extendName = fileName.substring(fileName.lastIndexOf('.') + 1).toLocaleLowerCase() var extendName = fileName.substring(fileName.lastIndexOf('.') + 1).toLocaleLowerCase()

View File

@ -9,37 +9,51 @@
:file-list="fileList" :file-list="fileList"
:accept="accept" :accept="accept"
> >
<el-button size="small" type="primary" :disabled="isDisabled">{{ $t('common:button:upload') }}</el-button> <el-button size="small" type="primary" :disabled="isDisabled">{{
$t('common:button:upload')
}}</el-button>
</el-upload> </el-upload>
</div> </div>
</template> </template>
<script> <script>
import { getAttachmentByType, uploadFile, saveAttachments, deleteAttachment } from '@/api/attachment' import {
getAttachmentByType,
uploadFile,
saveAttachments,
deleteAttachment,
} from '@/api/attachment'
export default { export default {
name: 'UploadFiles', name: 'UploadFiles',
props: { props: {
type: { type: {
type: String, type: String,
required: true required: true,
}, },
doctorId: { doctorId: {
type: String, type: String,
required: true required: true,
}, },
accept: { accept: {
type: String, type: String,
required: true required: true,
} },
}, },
data() { data() {
return { return {
fileList: [], fileList: [],
repeat: false, repeat: false,
isDisabled: false isDisabled: false,
} }
}, },
watch: {
doctorId() {
if (this.doctorId) {
this.initFileList()
}
},
},
mounted() { mounted() {
if(!this.doctorId) return if (!this.doctorId) return
this.initFileList() this.initFileList()
}, },
methods: { methods: {
@ -49,24 +63,28 @@ export default {
lock: true, lock: true,
text: 'Loading', text: 'Loading',
spinner: 'el-icon-loading', spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.07)' background: 'rgba(0, 0, 0, 0.07)',
}) })
getAttachmentByType(this.doctorId, this.type).then(res => { getAttachmentByType(this.doctorId, this.type)
loading.close() .then((res) => {
if (res.IsSuccess) { loading.close()
if (res.Result.length > 0) { if (res.IsSuccess) {
this.fileList = this.formatterFileList(res.Result) if (res.Result.length > 0) {
this.$emit('getFileList', this.fileList) this.fileList = this.formatterFileList(res.Result)
} else { this.$emit('getFileList', this.fileList)
this.fileList = [] } else {
this.fileList = []
}
} }
} })
}).catch(() => { loading.close() }) .catch(() => {
loading.close()
})
}, },
formatterFileList(list) { formatterFileList(list) {
var arr = [] var arr = []
list.forEach(item => { list.forEach((item) => {
const data = { const data = {
DoctorId: item.DoctorId, DoctorId: item.DoctorId,
Type: item.Type, Type: item.Type,
@ -74,7 +92,7 @@ export default {
FullPath: item.FullPath, FullPath: item.FullPath,
FileName: item.FileName, FileName: item.FileName,
CreateTime: item.CreateTime, CreateTime: item.CreateTime,
Id: item.Id Id: item.Id,
} }
arr.push(data) arr.push(data)
}) })
@ -85,32 +103,42 @@ export default {
// //
if (this.checkFileSuffix(param.file.name)) { if (this.checkFileSuffix(param.file.name)) {
// //
const isRepeat = this.fileList.some(item => item.FileName === param.file.name) const isRepeat = this.fileList.some(
(item) => item.FileName === param.file.name
)
if (isRepeat) { if (isRepeat) {
this.$confirm('Override the existing resume?', { this.$confirm(
type: 'warning', this.$t('curriculumVitae:resume:message:existingResume'),
distinguishCancelAndClose: true, {
confirmButtonText: 'OK', type: 'warning',
cancelButtonText: 'Cancel' distinguishCancelAndClose: true,
}) }
)
.then(() => { .then(() => {
// //
this.repeat = true this.repeat = true
this.uploadFile(param.file) this.uploadFile(param.file)
}) })
.catch(action => {}) .catch((action) => {})
} else { } else {
this.uploadFile(param.file) this.uploadFile(param.file)
} }
} else { } else {
this.$alert(`Must be in ${this.accept} format`) let str = this.accept.join(', ')
let message = this.$t(
'trials:readingUnit:qsList:message:imageFormat'
).replace('xxx', str)
this.$alert(message)
} }
}, },
async uploadFile(file) { async uploadFile(file) {
this.isDisabled = true this.isDisabled = true
var fileName = file.name var fileName = file.name
file = await this.fileToBlob(file) file = await this.fileToBlob(file)
let res = await this.OSSclient.put(`/SystemData/reviewer/Agreements/${this.doctorId}/${fileName}`, file) let res = await this.OSSclient.put(
`/SystemData/reviewer/Agreements/${this.doctorId}/${fileName}`,
file
)
if (this.repeat) { if (this.repeat) {
const index = this.fileList.findIndex((item, index) => { const index = this.fileList.findIndex((item, index) => {
return item.FileName === fileName return item.FileName === fileName
@ -124,52 +152,60 @@ export default {
Type: this.type, Type: this.type,
Path: this.$getObjectName(res.url), Path: this.$getObjectName(res.url),
FullPath: this.$getObjectName(res.url), FullPath: this.$getObjectName(res.url),
FileName: fileName FileName: fileName,
} }
this.fileList.push(fileData) this.fileList.push(fileData)
} }
this.saveUploadFiles() this.saveUploadFiles()
}, },
saveUploadFiles() { saveUploadFiles() {
saveAttachments(this.fileList).then(res => { saveAttachments(this.fileList)
this.fileList = this.formatterFileList(res.Result) .then((res) => {
this.isDisabled = false this.fileList = this.formatterFileList(res.Result)
this.$message.success('Uploaded successfully') this.isDisabled = false
this.$emit('getFileList', this.fileList) this.$message.success(
}).catch(() => { this.$t('trials:uploadDicomList:table:Uploaded')
this.isDisabled = false )
}) this.$emit('getFileList', this.fileList)
})
.catch(() => {
this.isDisabled = false
})
}, },
handleDeleteFile(file) { handleDeleteFile(file) {
this.$confirm('Sure to remove?', { this.$confirm(this.$t('system:reviewer:confirm:delete'), {
type: 'warning', type: 'warning',
distinguishCancelAndClose: true, distinguishCancelAndClose: true,
})
}).then(() => { .then(() => {
deleteAttachment(file.Id, file.Path) deleteAttachment(file.Id, file.Path).then((res) => {
.then(res => {
if (res.IsSuccess) { if (res.IsSuccess) {
this.fileList.splice(this.fileList.findIndex(item => item.Id === file.Id), 1) this.fileList.splice(
this.fileList.findIndex((item) => item.Id === file.Id),
1
)
this.$emit('getFileList', this.fileList) this.$emit('getFileList', this.fileList)
this.$message({ this.$message({
message: this.$t('common:message:deletedSuccessfully'), message: this.$t('common:message:deletedSuccessfully'),
type: 'success' type: 'success',
}) })
} }
}) })
}) })
.catch(action => {}) .catch((action) => {})
}, },
checkFileSuffix(fileName) { checkFileSuffix(fileName) {
var index = fileName.lastIndexOf('.') var index = fileName.lastIndexOf('.')
var suffix = fileName.substring(index + 1, fileName.length) var suffix = fileName.substring(index + 1, fileName.length)
return this.accept.toLocaleLowerCase().search(suffix.toLocaleLowerCase()) === 1 return (
} this.accept.toLocaleLowerCase().search(suffix.toLocaleLowerCase()) === 1
} )
},
},
} }
</script> </script>
<style> <style>
.uploadFiles-container{ .uploadFiles-container {
margin: 0 5px; margin: 0 5px;
} }
.uploadFiles-container .el-upload--text { .uploadFiles-container .el-upload--text {

View File

@ -1,21 +1,16 @@
<template> <template>
<div class="criterion-form-item"> <div class="criterion-form-item">
<div <div v-if="!!question.QuestionName && question.ClinicalQuestionType === 'group'"
v-if="!!question.QuestionName && question.ClinicalQuestionType==='group'" style="font-weight: bold;font-size: 16px;margin: 5px 0px;margin-bottom: 10px">
style="font-weight: bold;font-size: 16px;margin: 5px 0px;margin-bottom: 10px" {{ language === 'en' ? question.QuestionEnName : question.QuestionName }}
> </div>
{{ language==='en'?question.QuestionEnName:question.QuestionName }} <div v-else-if="question.ClinicalQuestionType === 'summary'"
style="background:#f3f3f3;border-radius:4px;font-size: 12px;margin: 5px 0px;margin-bottom: 10px;font-size: 12px;padding: 10px">
{{ language === 'en' ? question.QuestionEnName : question.QuestionName }}
</div> </div>
<div <div
v-else-if="question.ClinicalQuestionType==='summary'" v-else-if="question.ClinicalQuestionType === 'table' && ((question.ClinicalQuestionShowEnum === 1 && question.ParentTriggerValue === questionForm[question.ParentId].toString()) || question.ClinicalQuestionShowEnum === 0)"
style="background:#f3f3f3;border-radius:4px;font-size: 12px;margin: 5px 0px;margin-bottom: 10px;font-size: 12px;padding: 10px" style="font-weight: bold;font-size: 14px;margin: 5px 0px;">
>
{{ language==='en'?question.QuestionEnName:question.QuestionName }}
</div>
<div
v-else-if="question.ClinicalQuestionType==='table' && ((question.ClinicalQuestionShowEnum===1 && question.ParentTriggerValue === questionForm[question.ParentId].toString()) || question.ClinicalQuestionShowEnum===0)"
style="font-weight: bold;font-size: 14px;margin: 5px 0px;"
>
<div style="display: flex;justify-content: space-between;"> <div style="display: flex;justify-content: space-between;">
<span> <span>
{{ question.QuestionName }} {{ question.QuestionName }}
@ -25,27 +20,17 @@
{{ $t('trials:readingUnit:qsList:title:add') }} {{ $t('trials:readingUnit:qsList:title:add') }}
</el-button> </el-button>
</div> </div>
<el-table <el-table :data="questionForm[question.Id]">
:data="questionForm[question.Id]" <el-table-column v-for="item of question.TableQuestions" :key="item.Id" :prop="item.Id"
> :label="item.QuestionName" min-width="100" show-overflow-tooltip />
<el-table-column <el-table-column :label="$t('common:action:action')" min-width="100" show-overflow-tooltip>
v-for="item of question.TableQuestions"
:key="item.Id"
:prop="item.Id"
:label="item.QuestionName"
min-width="100"
show-overflow-tooltip
/>
<el-table-column
:label="$t('common:action:action')"
min-width="100"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="mini" @click="openAddTableCol(question, scope.$index)"> <el-button type="text" size="mini" @click="openAddTableCol(question, scope.$index)">
{{ $t('common:button:edit') }} {{ $t('common:button:edit') }}
</el-button> </el-button>
<el-button type="text" size="mini" v-if="scope.row.IsCurrentTaskAdd === 'True' || !question.IsCopyLesions || IsBaseline" @click="deleteTableCol(question, scope.$index)"> <el-button type="text" size="mini"
v-if="scope.row.IsCurrentTaskAdd === 'True' || !question.IsCopyLesions || IsBaseline"
@click="deleteTableCol(question, scope.$index)">
{{ $t('common:button:delete') }} {{ $t('common:button:delete') }}
</el-button> </el-button>
</template> </template>
@ -54,187 +39,109 @@
</div> </div>
<el-col v-else :span="12"> <el-col v-else :span="12">
<el-form-item <el-form-item
v-if="(question.ClinicalQuestionShowEnum===1 && question.ParentTriggerValue === questionForm[question.ParentId].toString()) || question.ClinicalQuestionShowEnum===0" v-if="(question.ClinicalQuestionShowEnum === 1 && question.ParentTriggerValue === questionForm[question.ParentId].toString()) || question.ClinicalQuestionShowEnum === 0"
:label="`${question.QuestionName}`" :label="`${question.QuestionName}`" :prop="question.Id" :rules="[
:prop="question.Id" {
:rules="[ required: (question.IsRequired === 0 || (question.IsRequired === 1 && question.RelevanceId && (question.RelevanceValue === questionForm[question.RelevanceId].toString()))) && question.ClinicalQuestionType !== 'summary' && question.ClinicalQuestionType !== 'group' && question.ClinicalQuestionType !== 'table',
{ required: (question.IsRequired === 0 || (question.IsRequired ===1 && question.RelevanceId && (question.RelevanceValue === questionForm[question.RelevanceId].toString()))) && question.ClinicalQuestionType !== 'summary' && question.ClinicalQuestionType!=='group' && question.ClinicalQuestionType!=='table', message: this.$t('common:ruleMessage:specify'), trigger: ['blur', 'change']
message: this.$t('common:ruleMessage:specify'), trigger: ['blur', 'change']} }
]" ]" :class="[question.Type === 'group' ? 'mb' : question.Type === 'upload' ? 'uploadWrapper' : '']">
:class="[question.Type==='group'?'mb':question.Type==='upload'?'uploadWrapper':'']"
>
<!-- 输入框 --> <!-- 输入框 -->
<el-input <el-input v-if="question.ClinicalQuestionType === 'input'" v-model="questionForm[question.Id]"
v-if="question.ClinicalQuestionType==='input'"
v-model="questionForm[question.Id]"
:disabled="question.TableQuestionType === 2" :disabled="question.TableQuestionType === 2"
:max-length="question.MaxAnswerLength ? question.MaxAnswerLength : 200" :max-length="question.MaxAnswerLength ? question.MaxAnswerLength : 200" />
/>
<!-- 多行文本输入框 --> <!-- 多行文本输入框 -->
<el-input <el-input v-if="question.ClinicalQuestionType === 'textarea'" v-model="questionForm[question.Id]"
v-if="question.ClinicalQuestionType==='textarea'" type="textarea" :max-length="question.MaxAnswerLength ? question.MaxAnswerLength : 200"
v-model="questionForm[question.Id]" :autosize="{ minRows: 2, maxRows: 4 }" />
type="textarea"
:max-length="question.MaxAnswerLength ? question.MaxAnswerLength : 200"
:autosize="{ minRows: 2, maxRows: 4}"
/>
<!-- 下拉框 --> <!-- 下拉框 -->
<el-select <el-select v-if="question.ClinicalQuestionType === 'select'" v-model="questionForm[question.Id]" clearable
v-if="question.ClinicalQuestionType==='select'"
v-model="questionForm[question.Id]"
clearable
:disabled="(question.TableQuestionType === 2 || question.QuestionGenre === 2) && !!question.DictionaryCode" :disabled="(question.TableQuestionType === 2 || question.QuestionGenre === 2) && !!question.DictionaryCode"
@change="((val)=>{formItemChange(val, question)})" @change="((val) => { formItemChange(val, question) })">
>
<template v-if="question.TableQuestionType === 1"> <template v-if="question.TableQuestionType === 1">
<el-option <el-option v-for="item in organList" :key="item.Id" :label="item[question.DataTableColumn]"
v-for="item in organList" :value="item[question.DataTableColumn]" />
:key="item.Id"
:label="item[question.DataTableColumn]"
:value="item[question.DataTableColumn]"
/>
</template> </template>
<template v-else-if="question.TableQuestionType === 3 || question.QuestionGenre === 3"> <template v-else-if="question.TableQuestionType === 3 || question.QuestionGenre === 3">
<el-option <el-option v-for="item of $d[question.DictionaryCode]" :key="item.id" :value="item.value"
v-for="item of $d[question.DictionaryCode]" :label="item.label" />
:key="item.id"
:value="item.value"
:label="item.label"
/>
</template> </template>
<template v-else-if="(question.TableQuestionType === 2 || question.QuestionGenre === 2) && question.DictionaryCode"> <template
<el-option v-else-if="(question.TableQuestionType === 2 || question.QuestionGenre === 2) && question.DictionaryCode">
v-for="item of $d[question.DictionaryCode]" <el-option v-for="item of $d[question.DictionaryCode]" :key="item.id" :value="item.value"
:key="item.id" :label="item.label" />
:value="item.value"
:label="item.label"
/>
</template> </template>
<template v-else> <template v-else>
<el-option <el-option v-for="val in question.TypeValue.split('|')" :key="val" :label="val" :value="val.trim()" />
v-for="val in question.TypeValue.split('|')"
:key="val"
:label="val"
:value="val.trim()"
/>
</template> </template>
</el-select> </el-select>
<!-- 日期 -->
<el-date-picker v-if="question.ClinicalQuestionType === 'time'" v-model="questionForm[question.Id]"
style="width: 200px" align="right" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd" />
<!-- 单选 --> <!-- 单选 -->
<el-date-picker <el-radio-group v-if="question.ClinicalQuestionType === 'radio'" v-model="questionForm[question.Id]"
v-if="question.ClinicalQuestionType === 'time'" @change="((val) => { formItemChange(val, question) })">
v-model="questionForm[question.Id]"
style="width: 200px"
align="right"
type="date"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
/>
<!-- 单选 -->
<el-radio-group
v-if="question.ClinicalQuestionType==='radio'"
v-model="questionForm[question.Id]"
@change="((val)=>{formItemChange(val, question)})"
>
<template v-if="question.DictionaryCode"> <template v-if="question.DictionaryCode">
<el-radio <el-radio v-for="item of $d[question.DictionaryCode]" :key="item.id" :label="item.value">
v-for="item of $d[question.DictionaryCode]"
:key="item.id"
:label="item.value"
>
{{ item.label }} {{ item.label }}
</el-radio> </el-radio>
</template> </template>
<template v-if="question.TypeValue"> <template v-if="question.TypeValue">
<el-radio <el-radio v-for="val in question.TypeValue.split('|')" :key="val" :label="val">
v-for="val in question.TypeValue.split('|')"
:key="val"
:label="val"
>
{{ val }} {{ val }}
</el-radio> </el-radio>
</template> </template>
</el-radio-group> </el-radio-group>
<!-- 复选框 --> <!-- 复选框 -->
<el-checkbox-group <el-checkbox-group v-if="question.ClinicalQuestionType === 'checkbox' && questionForm[question.Id] !== ''"
v-if="question.ClinicalQuestionType==='checkbox' && questionForm[question.Id] !== ''" v-model="questionForm[question.Id]">
v-model="questionForm[question.Id]" <el-checkbox v-for="val of question.TypeValue.split('|')" :key="val" :label="val" :value="val">
>
<el-checkbox
v-for="val of question.TypeValue.split('|')"
:key="val"
:label="val"
:value="val"
>
{{ val }} {{ val }}
</el-checkbox> </el-checkbox>
</el-checkbox-group> </el-checkbox-group>
<el-input <el-input v-if="question.ClinicalQuestionType === 'number'" :ref="question.Id"
v-if="question.ClinicalQuestionType === 'number'" v-model="questionForm[question.Id]" type="number" style="width: 200px"
:ref="question.Id" :disabled="question.CustomCalculateMark > 0" @input="limitInput($event, questionForm, question)">
v-model="questionForm[question.Id]"
type="number"
style="width: 200px"
:disabled="question.CustomCalculateMark > 0"
@input="limitInput($event, questionForm, question)"
>
<template v-if="question.Unit" slot="append">{{ question.Unit }}</template> <template v-if="question.Unit" slot="append">{{ question.Unit }}</template>
</el-input> </el-input>
<span v-if="question.CustomCalculateMark === 11 && question.ClinicalQuestionType === 'number'" v-show="questionForm[JSON.parse(question.CalculateQuestions)[0].TableQuestionId] <= questionForm[JSON.parse(question.CalculateQuestions)[0].QuestionId]" style="margin-left: 10px"> <span v-if="question.CustomCalculateMark === 11 && question.ClinicalQuestionType === 'number'"
{{ questionForm[JSON.parse(question.CalculateQuestions)[0].TableQuestionId] }}-{{ questionForm[JSON.parse(question.CalculateQuestions)[0].QuestionId] }} v-show="questionForm[JSON.parse(question.CalculateQuestions)[0].TableQuestionId] <= questionForm[JSON.parse(question.CalculateQuestions)[0].QuestionId]"
style="margin-left: 10px">
{{ questionForm[JSON.parse(question.CalculateQuestions)[0].TableQuestionId] }}~{{
questionForm[JSON.parse(question.CalculateQuestions)[0].QuestionId] }}
</span> </span>
<span v-if="question.CustomCalculateMark === 10 && question.ClinicalQuestionType === 'number' && questionForm[JSON.parse(question.CalculateQuestions)[0].TableQuestionId]" style="margin-left: 10px"> <span
{{ questionForm[JSON.parse(question.CalculateQuestions)[0].TableQuestionId] }}-{{ questionForm.CreateTime ? questionForm.CreateTime : parseTime(new Date(), '{y}-{m}-{d}') }} v-if="question.CustomCalculateMark === 10 && question.ClinicalQuestionType === 'number' && questionForm[JSON.parse(question.CalculateQuestions)[0].TableQuestionId]"
style="margin-left: 10px">
{{ questionForm[JSON.parse(question.CalculateQuestions)[0].TableQuestionId] }}~{{ questionForm.CreateTime ?
questionForm.CreateTime : parseTime(new Date(), '{y}-{m}-{d}') }}
</span> </span>
<!-- 生日不能大于截止日期 --> <!-- 生日不能大于截止日期 -->
<span v-if="question.CustomCalculateMark === 11 && question.ClinicalQuestionType === 'number'" v-show="questionForm[JSON.parse(question.CalculateQuestions)[0].TableQuestionId] > questionForm[JSON.parse(question.CalculateQuestions)[0].QuestionId]" style="margin-left: 10px;font-size: 12px;color:#f66"> <span v-if="question.CustomCalculateMark === 11 && question.ClinicalQuestionType === 'number'"
v-show="questionForm[JSON.parse(question.CalculateQuestions)[0].TableQuestionId] > questionForm[JSON.parse(question.CalculateQuestions)[0].QuestionId]"
style="margin-left: 10px;font-size: 12px;color:#f66">
{{ $t('trials:components:clinicalDataQS:msg:birthDay') }} {{ $t('trials:components:clinicalDataQS:msg:birthDay') }}
</span> </span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- eslint-disable vue/no-use-v-if-with-v-for --> <!-- eslint-disable vue/no-use-v-if-with-v-for -->
<!-- eslint-disable vue/valid-v-for --> <!-- eslint-disable vue/valid-v-for -->
<el-col v-for="(item) in question.Childrens" v-if="question.Childrens && question.Childrens.length>0 && question.ClinicalQuestionType !== 'table'" :span="['group', 'summary', 'table'].includes(item.ClinicalQuestionType) || item.Childrens.length > 0 ? 24 : 12"> <el-col v-for="(item) in question.Childrens" :key="item.Id"
<QuestionFormItem v-if="question.Childrens && question.Childrens.length > 0 && question.ClinicalQuestionType !== 'table'"
:key="item.Id" :span="['group', 'summary', 'table'].includes(item.ClinicalQuestionType) || item.Childrens.length > 0 ? 24 : 12">
:question="item" <QuestionFormItem :key="item.Id" :question="item" :question-form="questionForm"
:question-form="questionForm" :trial-clinical-id="trialClinicalId" @formItemNumberChange="formItemNumberChange"
:trial-clinical-id="trialClinicalId" @setFormItemData="setFormItemData" @resetFormItemData="resetFormItemData" />
@formItemNumberChange="formItemNumberChange"
@setFormItemData="setFormItemData"
@resetFormItemData="resetFormItemData"
/>
</el-col> </el-col>
<el-dialog <el-dialog v-if="addOrEdit.visible" class="my_dialog" :visible.sync="addOrEdit.visible"
v-if="addOrEdit.visible" :close-on-click-modal="false" :title="addOrEdit.title" width="400px" append-to-body>
class="my_dialog" <el-form ref="tableQsForm" v-loading="loading" size="small" :model="QuestionsForm">
:visible.sync="addOrEdit.visible" <QuestionTableFormItem v-for="(item) in QuestionsList" :key="item.Id" :question="item"
:close-on-click-modal="false" :question-form="QuestionsForm" @setFormItemData="setFormItemData" @resetFormItemData="resetFormItemData" />
:title="addOrEdit.title"
width="400px"
append-to-body
>
<el-form
ref="tableQsForm"
v-loading="loading"
size="small"
:model="QuestionsForm"
>
<QuestionTableFormItem
v-for="(item) in QuestionsList"
:key="item.Id"
:question="item"
:question-form="QuestionsForm"
@setFormItemData="setFormItemData"
@resetFormItemData="resetFormItemData"
/>
<div class="base-dialog-footer" style="text-align:right;margin-top:10px;"> <div class="base-dialog-footer" style="text-align:right;margin-top:10px;">
<el-form-item> <el-form-item>
<!-- 取消 --> <!-- 取消 -->
<el-button <el-button size="small" type="primary" @click="addOrEdit.visible = false">
size="small"
type="primary"
@click="addOrEdit.visible = false"
>
{{ $t('common:button:cancel') }} {{ $t('common:button:cancel') }}
</el-button> </el-button>
<!-- 保存 --> <!-- 保存 -->
@ -282,7 +189,7 @@ export default {
}, },
data() { data() {
return { return {
addOrEdit: { visible: false, title: '', id: null, index: 0}, addOrEdit: { visible: false, title: '', id: null, index: 0 },
fileList: [], fileList: [],
accept: '.png,.jpg,.jpeg', accept: '.png,.jpg,.jpeg',
imgVisible: false, imgVisible: false,
@ -406,8 +313,6 @@ export default {
}) })
break break
case 6: case 6:
console.log(this.questionForm[o.QuestionId])
console.log(this.questionForm)
this.questionForm[o.QuestionId].forEach((q, qi) => { this.questionForm[o.QuestionId].forEach((q, qi) => {
if (qi === 0) { if (qi === 0) {
num = parseFloat(q[o.TableQuestionId]) num = parseFloat(q[o.TableQuestionId])
@ -450,11 +355,16 @@ export default {
} }
break break
case 11: case 11:
if (parseFloat(this.getCurrentAgeByBirthDate2(this.questionForm[o.TableQuestionId], this.questionForm[o.QuestionId])) > 0) { if (parseFloat(this.getCurrentAgeByBirthDate(this.questionForm[o.TableQuestionId])) > 0) {
num = parseFloat(this.getCurrentAgeByBirthDate2(this.questionForm[o.TableQuestionId], this.questionForm[o.QuestionId])) num = parseFloat(this.getCurrentAgeByBirthDate(this.questionForm[o.TableQuestionId]))
} else { } else {
num = 0 num = 0
} }
// if (parseFloat(this.getCurrentAgeByBirthDate2(this.questionForm[o.TableQuestionId], this.questionForm[o.QuestionId])) > 0) {
// num = parseFloat(this.getCurrentAgeByBirthDate2(this.questionForm[o.TableQuestionId], this.questionForm[o.QuestionId]))
// } else {
// num = 0
// }
break break
} }
} else { } else {
@ -501,12 +411,10 @@ export default {
try { try {
if (isTable) { if (isTable) {
this.calculationList.forEach((v, i) => { this.calculationList.forEach((v, i) => {
console.log(v, i)
var find = v.CalculateQuestionList.filter(o => { var find = v.CalculateQuestionList.filter(o => {
return o.QuestionId === questionId return o.QuestionId === questionId
}) })
// findnumber // findnumber
console.log('find', find)
if (find) { if (find) {
var num = this.logic(v) var num = this.logic(v)
if (num !== false) { if (num !== false) {
@ -520,7 +428,6 @@ export default {
return o.TableQuestionId === questionId return o.TableQuestionId === questionId
}) })
// findnumber // findnumber
console.log('find', find)
// findnumber // findnumber
if (find) { if (find) {
var num = this.logic(v) var num = this.logic(v)
@ -591,40 +498,47 @@ export default {
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.my_dialog{ .my_dialog {
.criterion-form-item{ .criterion-form-item {
>>>.el-form-item__content{ ::v-deep .el-form-item__content {
width: auto; width: auto;
} }
} }
} }
.el-col-12 .el-col-12{
.el-col-12 .el-col-12 {
width: 100%; width: 100%;
} }
.criterion-form-item{
.el-form-item{ .criterion-form-item {
.el-form-item {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: flex-start; align-items: flex-start;
} }
.el-input{
width:100%; .el-input {
width: 100%;
} }
.mb{
.mb {
margin-bottom: 0px; margin-bottom: 0px;
} }
.disabled{
>>>.el-upload--picture-card { .disabled {
::v-deep .el-upload--picture-card {
display: none; display: none;
} }
} }
.uploadWrapper{
.uploadWrapper {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: flex-start; align-items: flex-start;
} }
} }
.clearfix:after{
.clearfix:after {
content: ''; content: '';
display: table; display: table;
clear: both; clear: both;

View File

@ -222,7 +222,7 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.my_dialog{ .my_dialog{
.criterion-form-item{ .criterion-form-item{
>>>.el-form-item__content{ ::v-deep .el-form-item__content{
width: auto; width: auto;
} }
} }
@ -233,7 +233,7 @@ export default {
flex-direction: row; flex-direction: row;
align-items: flex-start; align-items: flex-start;
} }
>>>.el-form-item__content{ ::v-deep .el-form-item__content{
width: 500px; width: 500px;
} }
.el-input{ .el-input{
@ -243,7 +243,7 @@ export default {
margin-bottom: 0px; margin-bottom: 0px;
} }
.disabled{ .disabled{
>>>.el-upload--picture-card { ::v-deep .el-upload--picture-card {
display: none; display: none;
} }
} }

View File

@ -27,7 +27,7 @@
size="small" size="small"
type="primary" type="primary"
@click="close" @click="close"
v-show="$route.path !== '/trials/trials-panel/visit/crc-upload'" v-show="$route.path !== '/trials/trials-panel/visit/crc-upload'&&$route.path!=='/trials/trials-panel/visit/crc-question'"
> >
{{ $t('common:button:cancel') }} {{ $t('common:button:cancel') }}
</el-button> </el-button>

View File

@ -1,42 +1,28 @@
<template> <template>
<div v-loading="loading"> <div v-loading="loading">
<QuestionsForm <QuestionsForm v-if="clinicalUploadType === 2" :data="data" :trial-clinical-id="trialClinicalId"
v-if="clinicalUploadType === 2" :is-viewer="isViewer" :visit-id="visitId" :subject-id="subjectId" :open-type="openType"
:data="data" :system-clinical-id="systemClinicalId" :trial-id="trialId" :reading-id="readingId"
:trial-clinical-id="trialClinicalId" :clinical-form-id="clinicalFormId" :clinical-data-level="clinicalDataLevel" @close="close"></QuestionsForm>
:is-viewer="isViewer" <uploadClinicalData v-else :subject-visit-id="subjectVisitId" :data="data" :enum-type="0" :allow-add-or-edit="true"
:visit-id="visitId" @getList="() => { }">
:subject-id="subjectId"
:open-type="openType"
:system-clinical-id="systemClinicalId"
:trial-id="trialId"
:reading-id="readingId"
:clinical-form-id="clinicalFormId"
:clinical-data-level="clinicalDataLevel"
@close="close"
></QuestionsForm>
<uploadClinicalData v-else :subject-visit-id="subjectVisitId" :data="data" :enum-type="0" :allow-add-or-edit="true" @getList="() => {}">
</uploadClinicalData> </uploadClinicalData>
<div class="base-dialog-footer" v-if="!isViewer && openType !== 'look' && [0, 1].includes(clinicalDataLevel)" style="text-align:right;margin-top:10px;"> <div class="base-dialog-footer" v-if="!isViewer && openType !== 'look' && [0, 1].includes(clinicalDataLevel)"
style="text-align:right;margin-top:10px;">
<!-- 保存 --> <!-- 保存 -->
<el-button size="small" type="primary" @click="submitClinicalForm"> <el-button size="small" type="primary" @click="submitClinicalForm">
{{ $t('common:button:submit') }} {{ $t('common:button:submit') }}
</el-button> </el-button>
</div> </div>
<!-- 临床数据签名框 --> <!-- 临床数据签名框 -->
<el-dialog <el-dialog v-if="signVisible" :visible.sync="signVisible" :close-on-click-modal="false" width="600px" append-to-body
v-if="signVisible" custom-class="base-dialog-wrapper">
:visible.sync="signVisible"
:close-on-click-modal="false"
width="600px"
append-to-body
custom-class="base-dialog-wrapper"
>
<div slot="title"> <div slot="title">
<span style="font-size:18px;">{{ $t('common:dialogTitle:sign') }}</span> <span style="font-size:18px;">{{ $t('common:dialogTitle:sign') }}</span>
<span style="font-size:12px;margin-left:5px">{{ `(${$t('common:label:sign')}${ currentUser })` }}</span> <span style="font-size:12px;margin-left:5px">{{ `(${$t('common:label:sign')}${currentUser})` }}</span>
</div> </div>
<SignForm ref="signForm" :sign-code-enum="signCode" :subject-visit-id="subjectVisitId" @closeDialog="closeSignDialog" /> <SignForm ref="signForm" :sign-code-enum="signCode" :subject-visit-id="subjectVisitId"
@closeDialog="closeSignDialog" />
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
@ -49,7 +35,7 @@ import uploadClinicalData from './components/uploadClinicalData'
import const_ from '@/const/sign-code' import const_ from '@/const/sign-code'
export default { export default {
name: "index", name: "index",
components: { QuestionsForm, uploadClinicalData, SignForm }, components: { QuestionsForm, uploadClinicalData, SignForm },
methods: { methods: {
submitClinicalForm() { submitClinicalForm() {
@ -83,7 +69,7 @@ name: "index",
this.close() this.close()
}).catch((res) => { }).catch((res) => {
this.$refs['signForm'].btnLoading = false this.$refs['signForm'].btnLoading = false
}) })
}, },
}, },
data() { data() {
@ -148,7 +134,7 @@ name: "index",
}, },
data: { data: {
type: Object, type: Object,
default: () => {} default: () => { }
}, },
trialClinicalId: { trialClinicalId: {
type: String, type: String,
@ -166,6 +152,4 @@ name: "index",
} }
</script> </script>
<style scoped> <style scoped></style>
</style>

View File

@ -0,0 +1,445 @@
<template>
<el-dialog :visible.sync="visible" :fullscreen="true" :close-on-click-modal="false" :before-close="beforeClose"
:append-to-body="true" v-loading="btnLoading" class="downloadDicomAndNonedicom">
<span slot="title">{{ title }}</span>
<div class="top">
<span>{{ $t('download:top:title') }}</span>
<div class="btnBox">
<el-button type="primary" size="mini" v-if="hasDicom" @click.stop="getIRReadingDownloadStudyInfo('dicom')">
{{ $t('download:button:downloadDicom') }}
</el-button>
<el-button type="primary" size="mini" v-if="hasNonedicom"
@click.stop="getIRReadingDownloadStudyInfo('noneDicom')">
{{ $t('download:button:downloadNonedicom') }}
</el-button>
<el-button type="primary" size="mini" v-if="hasDicom || hasNonedicom"
@click.stop="getIRReadingDownloadStudyInfo('all')">
{{ $t('download:button:downloadAll') }}
</el-button>
</div>
</div>
<div class="tip">
<i class="el-icon-warning-outline"></i>
<div v-html="$t('download:tip:message')"></div>
</div>
<!--上传列表@selection-change="handleSelectionChange"-->
<el-table ref="dicomFilesTable" v-adaptive="{ bottomOffset: 85 }" height="100" :data="list" :loading="loading"
class="dicomFiles-table" @sort-change="handleSortByColumn"
:default-sort="{ prop: 'TaskBlindName', order: 'descending' }">
<!-- <el-table-column
type="selection"
width="55"
:selectable="handleSelectable"
/> -->
<el-table-column type="index" width="40" />
<!--受试者-->
<el-table-column :label="$t('download:table:subjectCode')" min-width="130" prop="SubjectCode"
show-overflow-tooltip />
<!--任务名称-->
<el-table-column :label="$t('download:table:taskName')" min-width="130" show-overflow-tooltip prop="TaskBlindName"
sortable="custom" />
<!--检查类型-->
<el-table-column :label="$t('download:table:studyType')" min-width="130" show-overflow-tooltip prop="IsDicom"
sortable="custom">
<template slot-scope="scope">
<span>{{ $fd('IsDicom', scope.row.IsDicom) }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('download:table:orginalStudyListNum')" min-width="150" show-overflow-tooltip>
<template slot-scope="scope">
<el-button v-if="
(scope.row.IsDicom &&
scope.row.DicomStudyList &&
scope.row.DicomStudyList.length >= 1) ||
(!scope.row.IsDicom &&
scope.row.NoneDicomStudyList &&
scope.row.NoneDicomStudyList.length >= 1)
" type="text" @click="handleOpenDialog(scope.row)">
<span>{{
scope.row.IsDicom
? scope.row.DicomStudyList.length
: scope.row.NoneDicomStudyList.length
}}</span>
</el-button>
<span v-else>0</span>
</template>
</el-table-column>
<el-table-column :label="$t('common:action:action')" fixed="right" width="150">
<template slot-scope="scope">
<!--预览--->
<el-button circle icon="el-icon-view" :title="$t('download:button:preview')"
@click.stop="preview(scope.row)" />
<!--下载--->
<el-button circle icon="el-icon-download" :title="$t('download:button:download')"
@click.stop="getIRReadingDownloadStudyInfo('one', scope.row)" />
</template>
</el-table-column>
</el-table>
<study-view v-if="model_cfg.visible" :model_cfg="model_cfg" :modelList="modelList" :bodyPart="bodyPart"
:IsDicom="IsDicom" :visitTaskId="modelTaskId" />
</el-dialog>
</template>
<script>
import {
getSubjectImageDownloadSelectList,
getIRReadingDownloadStudyInfo,
downloadImageSuccess,
} from '@/api/load.js'
import studyView from '@/components/uploadDicomAndNonedicom/study-view.vue'
import store from '@/store'
import { downLoadFile } from '@/utils/stream.js'
import { getToken } from '@/utils/auth'
let defaultSearchData = () => {
return {
SubjectId: null,
TrialReadingCriterionId: null,
SubjectCode: null,
Asc: false,
SortField: 'TaskBlindName',
}
}
export default {
name: 'downloadDicomAndNonedicom',
components: {
'study-view': studyView,
},
props: {
visible: {
required: true,
type: Boolean,
default: false,
},
SubjectId: {
type: String,
default: '',
},
TaskId: {
type: String,
default: '',
},
SubjectCode: {
type: String,
default: '',
},
Criterion: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
title: null,
loading: false,
list: [],
searchData: defaultSearchData(),
btnLoading: false,
hasDicom: false,
hasNonedicom: false,
//
model_cfg: {
visible: false,
showClose: true,
width: '1000px',
title: '',
appendToBody: true,
},
modelList: [],
IsDicom: true,
open: null,
downloadId: null,
IsReadingTaskViewInOrder: 0, //
bodyPart: [],
modelTaskId: null,
}
},
async mounted() {
this.getList()
this.bodyPart = await this.$getBodyPart(this.$route.query.trialId)
this.title = `Download Images${this.SubjectCode}${this.Criterion.TrialReadingCriterionName}`
},
beforeDestroy() {
store.dispatch('trials/setUnLock', false)
},
methods: {
beforeClose() {
this.$emit('update:visible', false)
},
//
async getList() {
try {
this.searchData.SubjectId = this.SubjectId
this.searchData.TrialReadingCriterionId =
this.Criterion.TrialReadingCriterionId
this.searchData.SubjectCode = this.SubjectCode
if (this.TaskId) {
this.searchData.VisitTaskId = this.TaskId
}
this.loading = true
let res = await getSubjectImageDownloadSelectList(this.searchData)
this.loading = false
if (res.IsSuccess) {
this.list = res.Result
this.hasDicom = this.list.some((item) => item.IsDicom)
this.hasNonedicom = this.list.some((item) => !item.IsDicom)
}
} catch (err) {
this.loading = false
console.log(err)
}
},
//
async getIRReadingDownloadStudyInfo(type, row) {
try {
let data = {
SubjectId: this.SubjectId || this.list[0].SubjectId,
TrialReadingCriterionId: this.Criterion.TrialReadingCriterionId,
SubjectCode: this.SubjectCode || this.list[0].SubjectCode,
SubjectVisitTaskList: [],
DicomStudyIdList: [],
NoneDicomStudyIdList: [],
}
if (type === 'dicom' || type === 'all') {
this.list.forEach((item) => {
if (
item.IsDicom &&
item.DicomStudyList &&
item.DicomStudyList.length > 0
) {
data.SubjectVisitTaskList.push({
SubjectvisitId: item.SourceSubjectVisitId,
TaskId: item.VisitTaskId,
})
let arr = item.DicomStudyList.map((d) => d.Id)
data.DicomStudyIdList = [...data.DicomStudyIdList, ...arr]
}
})
}
if (type === 'noneDicom' || type === 'all') {
this.list.forEach((item) => {
if (
!item.IsDicom &&
item.NoneDicomStudyList &&
item.NoneDicomStudyList.length > 0
) {
data.SubjectVisitTaskList.push({
SubjectvisitId: item.SourceSubjectVisitId,
TaskId: item.VisitTaskId,
})
let arr = item.NoneDicomStudyList.map((d) => d.Id)
data.NoneDicomStudyIdList = [...data.NoneDicomStudyIdList, ...arr]
}
})
}
if (type === 'one') {
if (
row.IsDicom &&
row.DicomStudyList &&
row.DicomStudyList.length > 0
) {
data.SubjectVisitTaskList.push({
SubjectvisitId: row.SourceSubjectVisitId,
TaskId: row.VisitTaskId,
})
let arr = row.DicomStudyList.map((d) => d.Id)
data.DicomStudyIdList = [...data.DicomStudyIdList, ...arr]
}
if (
!row.IsDicom &&
row.NoneDicomStudyList &&
row.NoneDicomStudyList.length > 0
) {
data.SubjectVisitTaskList.push({
SubjectvisitId: row.SourceSubjectVisitId,
TaskId: row.VisitTaskId,
})
let arr = row.NoneDicomStudyList.map((d) => d.Id)
data.NoneDicomStudyIdList = [...data.NoneDicomStudyIdList, ...arr]
}
}
this.btnLoading = true
let res = await getIRReadingDownloadStudyInfo(data)
this.btnLoading = false
if (res.IsSuccess) {
this.downloadId = res.OtherInfo.PreDownloadId
this.IsReadingTaskViewInOrder = res.OtherInfo.IsReadingTaskViewInOrder
this.downloadImage(res.Result)
}
} catch (err) {
this.btnLoading = false
console.log(err)
}
},
//
async downloadImage(data) {
try {
let { files, name, fileType } = this.formatDownloadFile(data)
let res = await downLoadFile(files, name, 'zip')
if (res && this.downloadId) {
this.downloadImageSuccess()
}
} catch (err) {
console.log(err)
}
},
//
formatDownloadFile(list) {
let files = [],
name = `${list[0].SubjectCode}_${new Date().getTime()}.zip`
if (this.IsReadingTaskViewInOrder === 1) {
name = `${list[0].SubjectCode}_${list[0].TaskBlindName}.zip`
}
if (this.IsReadingTaskViewInOrder === 0) {
// name = `${list[0].TaskBlindName}.zip`
name = `${list[0].SubjectCode}_${list[0].TaskBlindName}.zip`
}
list.forEach((data) => {
if (data.StudyList && data.StudyList.length > 0) {
let StudyList = data.StudyList
StudyList.forEach((study) => {
if (study.SeriesList.length > 0) {
study.SeriesList.forEach((series) => {
if (series.InstancePathList.length > 0) {
series.InstancePathList.forEach((instance) => {
let fileName = instance.Path.split('/').pop()
let obj = {
name: `${data.SubjectCode}/${data.TaskBlindName
}/${this.$fd('IsDicom', true)}/${study.StudyCode
}/${fileName}`,
url: this.OSSclientConfig.basePath + instance.Path,
}
if (this.IsReadingTaskViewInOrder === 0) {
obj = {
name: `${data.TaskBlindName}/${this.$fd(
'IsDicom',
true
)}/${fileName}`,
url: this.OSSclientConfig.basePath + instance.Path,
}
}
files.push(obj)
})
}
})
}
})
}
if (data.NoneDicomStudyList && data.NoneDicomStudyList.length > 0) {
let NoneDicomStudyList = data.NoneDicomStudyList
//
NoneDicomStudyList.forEach((study) => {
if (study.FileList.length > 0) {
study.FileList.forEach((item) => {
let obj = {
name: `${data.SubjectCode}/${data.TaskBlindName}/${this.$fd(
'IsDicom',
false
)}/${study.StudyCode}/${item.FileName}`,
url: this.OSSclientConfig.basePath + item.Path,
}
if (this.IsReadingTaskViewInOrder === 0) {
obj = {
name: `${data.TaskBlindName}/${this.$fd(
'IsDicom',
false
)}/${item.FileName}`,
url: this.OSSclientConfig.basePath + item.Path,
}
}
files.push(obj)
})
}
})
}
})
return { files, name }
},
//
async downloadImageSuccess() {
try {
let params = {
TrialImageDownloadId: this.downloadId,
}
await downloadImageSuccess(params)
} catch (err) {
console.log(err)
}
},
handleOpenDialog(item) {
this.model_cfg.title = `${item.SubjectCode || ''} > ${item.TaskBlindName}`
if (item.IsDicom) {
this.modelList = item.DicomStudyList
} else {
this.modelList = item.NoneDicomStudyList
this.modelList.forEach((data) => {
data.SourceSubjectVisitId = item.SourceSubjectVisitId
})
}
this.modelTaskId = item.VisitTaskId
this.IsDicom = item.IsDicom
this.model_cfg.visible = true
},
//
handleSortByColumn(column) {
if (column.order === 'ascending') {
this.searchData.Asc = true
} else {
this.searchData.Asc = false
}
this.searchData.SortField = column.prop
this.searchData.PageIndex = 1
this.getList()
},
preview(row) {
if (!row.IsDicom) {
this.handlePreviewNoneDicomFiles(row)
} else {
this.handleViewReadingImages(row)
}
},
// Dicom
handlePreviewNoneDicomFiles(row) {
if (this.open) {
this.open.close()
}
let trialId = this.$route.query.trialId
var token = getToken()
const routeData = this.$router.resolve({
path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${row.SourceSubjectVisitId}&TokenKey=${token}`,
})
this.open = window.open(routeData.href, '_blank')
},
//
handleViewReadingImages(row) {
if (this.open) {
this.open.close()
}
var token = getToken()
let trialId = this.$route.query.trialId
const routeData = this.$router.resolve({
path: `/showvisitdicoms?page=download&trialId=${trialId}&visitTaskId=${row.VisitTaskId}&subjectVisitId=${row.SourceSubjectVisitId}&isReading=1&TokenKey=${token}`,
})
this.open = window.open(routeData.href, '_blank')
},
},
}
</script>
<style lang="scss" scoped>
.top {
display: flex;
align-items: center;
justify-content: space-between;
margin: 10px 0;
}
.tip {
display: flex;
align-items: flex-start;
margin-top: 5px;
i {
margin: 3px 5px 0 0;
}
}
</style>

View File

@ -0,0 +1,37 @@
import Vue from "vue";
import FEEDBACKCOMP from "./index.vue";
const FBConstructor = Vue.extend(FEEDBACKCOMP);
let FBCINSTANCELIST = [];
const FB = options => {
const { type, callBack, cancelBack, trialId = null, Id = null, visitTaskId = null, SubjectVisitId = null } = options;
if (!type) throw `type is requred.but ${type}`
const id = `FB${new Date().getTime()}`;
const instance = new FBConstructor();
FBCINSTANCELIST.push(instance);
instance.id = id;
instance.vm = instance.$mount();
if (instance.vm.visible) return;
document.body.appendChild(instance.vm.$el);
instance.vm.open({ type, trialId, Id, visitTaskId, SubjectVisitId });
instance.vm.$on("success", (Id) => {
if (callBack) callBack();
});
instance.vm.$on("closed", () => {
document.body.removeChild(instance.vm.$el);
instance.vm.$destroy();
let index = FBCINSTANCELIST.findIndex(item => item.id === id);
FBCINSTANCELIST.splice(index, 1)
if (cancelBack) cancelBack()
});
return instance.vm;
}
FB.close = () => {
if (FBCINSTANCELIST.length <= 0) return;
FBCINSTANCELIST.forEach(item => {
document.body.removeChild(item.vm.$el);
item.vm.$destroy();
})
FBCINSTANCELIST = [];
}
export default FB;

View File

@ -0,0 +1,7 @@
import FEEDBACKCOMP from "./index.vue";
import FB from "./fun";
export default Vue => {
Vue.component(FEEDBACKCOMP.name, FEEDBACKCOMP);
Vue.prototype.$FB = FB;
};

View File

@ -0,0 +1,416 @@
<template>
<!--FEEDBACK-->
<div v-if="visible" @click.stop="() => false" class="feedBack-box">
<div class="feedBack-box-modal"></div>
<el-dialog
:visible.sync="visible"
v-dialogDrag
width="800px"
:close-on-click-modal="false"
@close="cancel"
:modal="false"
>
<div slot="title">
{{ title }}
</div>
<!-- 项目详情 -->
<div class="trialsBox" v-if="visitTaskId || SubjectVisitId">
<el-form
label-position="right"
:model="form"
:inline="true"
class="trialsForm"
v-if="type === 'detail'"
>
<el-form-item :label="$t('feedBack:trials:code')" style="width: 40%">
<span>{{ form.TrialCode }}</span>
</el-form-item>
<el-form-item :label="$t('feedBack:trials:name')" style="width: 40%">
<span>{{ form.ExperimentName }}</span>
</el-form-item>
<el-form-item
:label="$t('feedBack:trials:siteCode')"
style="width: 40%"
>
<span>{{ form.TrialSiteCode }}</span>
</el-form-item>
<el-form-item :label="$t('feedBack:trials:visit')" style="width: 40%">
<span>{{ form.SubjectCode }} - {{ form.SubjectVisitName }}</span>
</el-form-item>
</el-form>
</div>
<el-form
ref="feedBackForm"
label-position="right"
:model="form"
:rules="rules"
label-width="100px"
>
<!-- 影像异常tip -->
<p class="tip" v-if="type === 'imgfail'">
<i
class="el-icon-warning-outline"
style="color: #f56c6c; font-size: 24px"
></i>
<span>{{ $t('feedBack:imgfail:tip') }}</span>
</p>
<!-- 问题反馈 -->
<el-form-item
:label="$t('feedBack:form:feedBack')"
prop="QuestionType"
v-if="type === 'feedback' && trialId"
>
<el-select
v-model="form.QuestionType"
style="width: 100%"
popper-class="feedBack-select-box"
>
<el-option
v-for="item in QuestionTypeOptions"
:key="item.id"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<!-- 问题反馈 -->
<el-form-item
:label="$t('feedBack:form:feedBack')"
prop="QuestionType"
v-if="type === 'detail'"
>
<span>{{
QuestionTypeOptions.filter(
(item) => item.value === form.QuestionType
)[0].label
}}</span>
</el-form-item>
<!-- 问题描述 -->
<el-form-item
:label="$t('feedBack:form:description')"
prop="QuestionDescription"
>
<el-input
v-model="form.QuestionDescription"
type="textarea"
:rows="4"
:maxlength="500"
:disabled="type === 'detail'"
/>
</el-form-item>
<!-- 截图 -->
<el-form-item :label="$t('feedBack:form:screenshot')" prop="screenshot">
<uploadImage
:path.sync="form.ScreenshotList"
:isUpload.sync="loading"
:trialId="trialId"
:disabled="type === 'detail'"
ref="uploadImage"
/>
</el-form-item>
<!-- 反馈时间 -->
<el-form-item
:label="$t('feedBack:form:time')"
prop="screenshot"
v-if="type === 'detail'"
>
<span>{{ form.CreateTime }}</span>
</el-form-item>
<!-- 状态 -->
<el-form-item
:label="$t('feedBack:form:status')"
prop="screenshot"
v-if="type === 'detail' && level > 7"
>
<el-switch
v-model="form.State"
active-color="#13ce66"
inactive-color="#ff4949"
:active-value="1"
:inactive-value="0"
:active-text="$fd('FeedBackStatus', 1)"
:inactive-text="$fd('FeedBackStatus', 0)"
:disabled="level < 8 || !isStateChange"
@change="changeState"
>
</el-switch>
</el-form-item>
</el-form>
<div slot="footer" v-if="type !== 'detail' || isImgfail">
<!-- 取消 -->
<el-button size="small" @click.stop="cancel">
{{ $t('feedBack:button:cancel') }}
</el-button>
<!-- 保存 -->
<el-button
type="primary"
size="small"
@click.stop="save"
:loading="loading"
>
{{ $t('feedBack:button:save') }}
</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import uploadImage from './uploadImage.vue'
import {
addOrUpdateUserFeedBack,
getUserFeedBackInfo,
batchUpdateFeedBackState,
} from '@/api/trials.js'
export default {
name: 'FB',
components: { uploadImage },
data() {
return {
title: null,
visible: false,
loading: false,
options: [],
type: null, // detail feedback imgfail
trialId: null, // id
Id: null, // id
visitTaskId: null, // id
isImgfail: false, //
isStateChange: true, //
form: {
Id: null,
SubjectId: null,
SubjectVisitId: null,
QuestionType: 0,
QuestionDescription: null,
State: 0,
TrialSiteId: null,
TrialId: null,
VisitTaskId: null,
SubjectVisitId: null,
ScreenshotList: [],
ScreenshotListStr: null,
},
rules: {
QuestionType: [
{
required: true,
message: this.$t('common:ruleMessage:specify'),
trigger: 'blur',
},
],
QuestionDescription: [
{
required: true,
message: this.$t('common:ruleMessage:specify'),
trigger: 'blur',
},
{
validator: (rule, value, callback) => {
if (value.length < 5) {
callback(
new Error(this.$t('feedBack:ruleMessage:lengthLimitMin5'))
)
}
callback()
},
trigger: 'blur',
},
],
},
isUpload: false,
}
},
computed: {
level() {
if (this.hasPermi(['role:dev', 'role:admin'])) {
return 9
}
if (this.hasPermi(['role:pm', 'role:apm'])) {
return 8
}
if (this.hasPermi(['role:ir', 'role:crc'])) {
return 7
}
return 0
},
QuestionTypeOptions() {
if (this.level > 7) {
return [
...this.$d.FeedBackTypeToCRC.filter((item) => item.value > 0),
...this.$d.FeedBackTypeToIR,
]
}
if (this.hasPermi(['role:ir'])) {
return this.$d.FeedBackTypeToIR
}
if (this.hasPermi(['role:crc'])) {
return this.$d.FeedBackTypeToCRC
}
return []
},
},
methods: {
open(data) {
let { type, trialId, Id, visitTaskId, SubjectVisitId } = data
this.type = type
this.trialId = trialId
this.Id = Id
this.visitTaskId = visitTaskId
this.SubjectVisitId = SubjectVisitId
if (visitTaskId) {
this.isImgfail = true
}
this.setTypeOption()
if (!Id) {
this.title = this.setTitle()
}
if (Id || visitTaskId) {
this.getInfo(Id, visitTaskId)
}
this.visible = true
},
cancel() {
this.visible = false
this.$emit('closed')
},
async save() {
try {
let validate = await this.$refs.feedBackForm.validate()
if (!validate) return
if (this.trialId) {
this.form.TrialId = this.trialId
}
if (this.visitTaskId) {
this.form.VisitTaskId = this.visitTaskId
}
if (this.SubjectVisitId) {
this.form.SubjectVisitId = this.SubjectVisitId
}
if (this.Id) {
this.form.Id = this.Id
}
this.loading = true
let res = await addOrUpdateUserFeedBack(this.form)
this.loading = false
if (res.IsSuccess) {
this.$emit('success')
this.$message.success(this.$t('feedBack:save:success'))
this.cancel()
}
} catch (err) {
this.loading = false
console.log(err)
}
},
//
async changeState() {
if (this.isImgfail) return
try {
let data = {
IdList: [this.Id],
State: this.form.State,
}
let res = await batchUpdateFeedBackState(data)
if (res.IsSuccess) {
this.$message.success(this.$t('feedBack:changeState:success'))
this.$emit('success')
// this.cancel();
this.getInfo(this.Id, this.visitTaskId)
}
} catch (err) {
console.log(err)
}
},
//
async getInfo(Id, visitTaskId) {
try {
let data = {
Id,
visitTaskId,
}
let res = await getUserFeedBackInfo(data)
if (res.IsSuccess && res.Result) {
this.form = res.Result
this.form.ScreenshotList = this.form.ScreenshotList || []
this.Id = res.Result.Id
if (res.Result.State > 0) {
this.isStateChange = false
}
if (res.Result.VisitTaskId) {
this.visitTaskId = res.Result.VisitTaskId
}
if (res.Result.SubjectVisitId) {
this.SubjectVisitId = res.Result.SubjectVisitId
}
let code = this.$fd('UserType', res.Result.UserTypeEnum)
this.title = this.setTitle(code, res.Result.FeedBackFullName)
if (visitTaskId) {
code = `${res.Result.SubjectCode}-${res.Result.SubjectVisitName}`
this.title = this.setTitle(code, res.Result.FeedBackFullName)
}
this.$refs.uploadImage.initFileList(res.Result.ScreenshotList)
}
} catch (err) {
console.log(err)
}
},
setTypeOption() {
if (!this.trialId) return (this.options = [])
if (this.hasPermi(['role:ir']))
return (this.option = this.$d.FeedBackTypeToIR)
if (this.hasPermi(['role:crc']))
return (this.option = this.$d.FeedBackTypeToCRC)
},
setTitle(code, name) {
if (this.hasPermi(['role:pm']) && this.visitTaskId) {
return `${this.$t('feedBack:form:title:pm2')}(${code}/${name})`
}
if (this.hasPermi(['role:pm', 'role:dev', 'role:admin'])) {
return `${this.$t('feedBack:form:title:pm')}(${code},${name})`
}
if (this.hasPermi(['role:ir', 'role:crc']) && this.type === 'detail') {
return `${this.$t('feedBack:form:detail:title')}`
}
if (this.hasPermi(['role:ir', 'role:crc'])) {
return `${this.$t('feedBack:form:title')}`
}
},
},
}
</script>
<style lang="scss" scoped>
.tip {
width: 86%;
margin: auto;
margin-bottom: 20px;
text-align: left;
padding: 0 10px;
display: flex;
align-items: center;
// border-radius: 5px;
// background-color: #eee;
i {
margin-right: 5px;
}
}
.trialsBox {
margin: auto;
margin-bottom: 20px;
text-align: left;
padding: 0 10px;
display: flex;
align-items: center;
border-radius: 5px;
background-color: #eee;
}
.trialsForm {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
.el-form-item {
margin-bottom: 10px;
}
}
</style>

View File

@ -0,0 +1,250 @@
<template>
<div class="upload-container">
<el-upload
class="upload-demo"
:class="{ uploadDisabled: disabled ? true : false }"
action
multiple
:http-request="uploadFile"
:before-upload="beforeUpload"
:file-list="fileList"
:on-preview="handlePreview"
:on-remove="remove"
:on-exceed="handleExceed"
accept=".png,.jpg,.jpeg"
list-type="picture-card"
>
<i slot="default" class="el-icon-plus"></i>
<div slot="file" slot-scope="{ file }" style="width: 100%; height: 100%">
<viewer
:ref="file.url"
:images="fileList"
style="
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
"
>
<img
class="el-upload-list__item-thumbnail"
:src="`${file.url}`"
alt=""
crossorigin="anonymous"
style="max-width: 100%; max-height: 100%"
/>
<span class="el-upload-list__item-actions" v-if="!isUpload">
<span
class="el-upload-list__item-preview"
@click="handlePictureCardPreview(file)"
>
<i class="el-icon-zoom-in"></i>
</span>
<span
class="el-upload-list__item-delete"
v-if="!disabled"
@click="handleRemove(file)"
>
<i class="el-icon-delete"></i>
</span>
</span>
<div class="loadingBox" v-else>
<i class="el-icon-loading" style="color: #fff; margin: auto"></i>
</div>
</viewer>
</div>
</el-upload>
</div>
</template>
<script>
const type = 'Statement of Work'
export default {
name: 'UploadImage',
props: {
path: {
required: true,
default: () => {
return []
},
},
disabled: {
required: true,
default: false,
},
isUpload: {
required: true,
default: false,
},
trialId: {
type: String,
default: '',
},
},
data() {
return {
fileList: [],
btnDisabled: false,
}
},
methods: {
remove(file, fileList) {
// this.$emit("update:path", null);
},
fileToBlob(file) {
// FileReader
const reader = new FileReader()
return new Promise((resolve) => {
// FileReader load
reader.addEventListener('load', (e) => {
let blob
if (typeof e.target.result === 'object') {
blob = new Blob([e.target.result])
} else {
blob = e.target.result
}
resolve(blob)
})
// FileReader ArrayBuffer File
reader.readAsArrayBuffer(file)
})
},
// oss
async uploadToOSS(name, file) {
try {
let defaultPath = '/System/FeedBack/'
if (this.trialId) {
defaultPath = `/${this.trialId}/FeedBack/`
}
let res = await this.OSSclient.put(`${defaultPath}${name}`, file)
return res
} catch (err) {
console.log(err)
return false
}
},
initFileList(list) {
if (list && list.length > 0) {
this.fileList = []
list.forEach((item, index) => {
let name = item.split('/')
this.fileList.push({
name: name[name.length - 1],
path: item,
fullPath: this.OSSclientConfig.basePath + item,
url: this.OSSclientConfig.basePath + item,
uid: `${name[name.length - 1]}${index}`,
})
})
}
},
async uploadFile(param) {
var fileName = param.file.name
this.$emit('update:isUpload', true)
this.btnDisabled = true
this.fileList.push({
url: param.file.url,
path: fileName,
uid: param.file.uid,
})
let file = await this.fileToBlob(param.file)
let res = await this.uploadToOSS(fileName, file)
this.btnDisabled = false
let index = this.fileList.findIndex((item) => item.uid === param.file.uid)
if (!res) {
if (index >= 0) {
this.fileList.splice(index, 1)
}
return this.$emit('update:isUpload', false)
}
let name = this.$getObjectName(res.url)
this.fileList[index].url = this.OSSclientConfig.basePath + name
this.fileList[index].path = name
this.$emit('update:path', [...this.path, res.name])
this.$emit('update:isUpload', false)
return false
},
beforeUpload(file, fileList) {
const isValidFile = this.fileValid(file.name, ['png', 'jpg', 'jpeg'])
if (isValidFile) {
// this.fileList = [];
} else {
this.$alert(this.$t('feedBack:uploadImg:format'))
return false
}
},
handlePreview(file) {
file.fullPath ? window.open(file.fullPath, '_blank') : ''
},
handleExceed(files, fileList) {
this.$message.warning(`Upload is currently limited to 1 file`)
},
fileValid(fileName, typeArr) {
var extendName = fileName
.substring(fileName.lastIndexOf('.') + 1)
.toLocaleLowerCase()
if (typeArr.indexOf(extendName) > -1) {
return true
} else {
return false
}
},
handlePictureCardPreview(file) {
this.$refs[file.url].$viewer.show()
},
handleRemove(file) {
let index = this.fileList.findIndex((item) => item.uid === file.uid)
this.fileList.splice(index, 1)
let arr = this.fileList.map((item) => item.path)
this.$emit('update:path', arr)
},
},
}
</script>
<style>
.upload-container .el-upload--text {
border: none;
width: 80px;
height: 30px;
}
.upload-container .el-form-item__label {
font-size: 12px;
}
.upload-container .el-upload-list__item {
font-size: 12px;
}
.logoAMessage {
font-size: 12px;
cursor: pointer;
}
.upload-container .uploadDisabled .el-upload--picture-card {
display: none;
}
.upload-container .el-upload--picture-card {
width: 100px;
height: 100px;
line-height: 100px;
}
.upload-container .el-upload-list--picture-card .el-upload-list__item {
width: 100px;
height: 100px;
line-height: 100px;
}
.loadingBox {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
width: 100px;
height: 100px;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
}
.el-upload-list--picture-card .el-upload-list__item-thumbnail {
width: auto;
height: auto;
}
</style>

View File

@ -0,0 +1,35 @@
import Vue from "vue";
import FEEDBACKCOMP from "./index.vue";
const FBConstructor = Vue.extend(FEEDBACKCOMP);
let FBCTABLEINSTANCELIST = [];
const FBT = (options = {}) => {
const { data = {}, callBack } = options;
// if (!UserId) throw `UserId is requred.but ${UserId}`
const id = `FB${new Date().getTime()}`;
const instance = new FBConstructor();
FBCTABLEINSTANCELIST.push(instance);
instance.id = id;
instance.vm = instance.$mount();
if (instance.vm.visible) return;
document.body.appendChild(instance.vm.$el);
instance.vm.open({ ...data });
instance.vm.$on("success", (Id) => {
if (callBack) callBack();
});
instance.vm.$on("closed", () => {
document.body.removeChild(instance.vm.$el);
instance.vm.$destroy();
let index = FBCTABLEINSTANCELIST.findIndex(item => item.id === id);
FBCTABLEINSTANCELIST.splice(index, 1)
});
return instance.vm;
}
FBT.close = () => {
if (FBCTABLEINSTANCELIST.length <= 0) return;
FBCTABLEINSTANCELIST.forEach(item => {
document.body.removeChild(item.vm.$el);
item.vm.$destroy();
})
FBCTABLEINSTANCELIST = [];
}
export default FBT;

View File

@ -0,0 +1,7 @@
import FEEDBACKCOMP from "./index.vue";
import FBT from "./fun";
export default Vue => {
Vue.component(FEEDBACKCOMP.name, FEEDBACKCOMP);
Vue.prototype.$FBT = FBT;
};

View File

@ -0,0 +1,62 @@
<template>
<div v-if="visible" @click.stop="() => false" class="feedBack-box">
<el-dialog
:visible.sync="visible"
v-dialogDrag
width="1200px"
:close-on-click-modal="false"
@close="cancel"
:fullscreen="true"
>
<div slot="title">
{{ title }}
</div>
<feedBackTable :trialId="trialId" @success="success" />
</el-dialog>
</div>
</template>
<script>
import feedBackTable from "@/views/feedBack/index.vue";
export default {
name: "FBT",
components: { feedBackTable },
data() {
return {
title: null,
visible: false,
trialId: null,
};
},
computed: {},
methods: {
open(data) {
let { code, name, trialId } = data;
this.title = this.setTitle(code, name);
this.trialId = trialId;
this.visible = true;
},
cancel() {
this.visible = false;
this.$emit("closed");
},
setTitle(code, name) {
if (this.hasPermi(["role:pm"])) {
return `${this.$t("feedBack:table:title:pm")}(${code},${name})`;
}
if (this.hasPermi(["role:ir", "role:crc"])) {
return `${this.$t("feedBack:table:title")}`;
}
},
success() {
this.$emit("success");
},
},
};
</script>
// <style lang="scss" scoped>
// ::v-deep .el-dialog__body {
// padding-bottom: 0;
// height: 500px;
// }
//
</style>

View File

@ -0,0 +1,126 @@
<template>
<el-dialog
v-if="visible"
:visible.sync="visible"
v-dialogDrag
width="540px"
:close-on-click-modal="false"
:close-on-press-escape="false"
append-to-body
:title="$t('toggleRole:tip:title')"
center
top="30vh"
:show-close="false"
:before-close="cancel"
>
<template v-if="hasRole">
<el-radio-group v-model="form.userRoleId" class="roles">
<el-radio
v-for="item in roles"
:key="item.Id"
:label="item.Id"
:disabled="item.IsUserRoleDisabled"
style="margin-bottom: 10px"
>
{{ item.UserTypeShortName }}
</el-radio>
</el-radio-group>
</template>
<div v-else style="text-align: center">
{{ $t('toggleRole:tip:noRole') }}
</div>
<div slot="footer">
<!-- 取消 -->
<el-button size="small" @click="cancel()">
{{ $t('common:button:cancel') }}
</el-button>
<!-- 保存 -->
<el-button
type="primary"
size="small"
@click="save"
:disabled="saveDisabled"
:loading="loading"
v-if="hasRole"
>
{{ $t('common:button:confirm') }}
</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
name: 'toggleRole',
props: {
visible: {
type: Boolean,
default: false,
},
loading: {
type: Boolean,
default: false,
},
},
data() {
return {
form: {
userRoleId: null,
},
}
},
created() {
this.form.userRoleId = zzSessionStorage.getItem('userId')
},
computed: {
roles() {
return this.$store.state.user.roles
},
hasRole() {
return this.roles && this.roles.length > 0
},
saveDisabled() {
return this.form.userRoleId === zzSessionStorage.getItem('userId')
},
},
methods: {
cancel() {
this.$emit('update:visible', false)
this.$emit('cancel')
},
async save() {
try {
if (!this.form.userRoleId)
return this.$message.warning(this.$t('toggleRole:ruleMessage:select'))
zzSessionStorage.removeItem('lastWorkbench')
this.$emit('save', this.form.userRoleId)
} catch (err) {
console.log(err)
}
},
},
}
</script>
<style lang="scss" scoped>
.roles {
max-width: 365px;
width: fit-content;
display: flex;
align-content: center;
// justify-content: center;
flex-wrap: wrap;
margin: auto;
}
::v-deep .el-radio__original {
display: none !important; /* 隐藏原生 radio 输入,但仍然允许交互 */
}
::v-deep.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled)
.el-radio__inner {
box-shadow: none !important;
}
.el-radio {
width: 60px;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,117 @@
<template>
<el-dialog
:visible.sync="visible"
:fullscreen="true"
:close-on-click-modal="false"
:before-close="beforeClose"
:append-to-body="true"
class="uploadDicomAndNonedicom"
>
<span slot="title">{{ title }}</span>
<el-tabs type="border-card" v-model="activeName">
<el-tab-pane
:label="$t('uploadDicomAndNonedicom:label:dicom')"
name="dicom"
>
<dicomFile
v-if="activeName === 'dicom'"
:SubjectId="SubjectId"
:SubjectCode="SubjectCode"
:Criterion="Criterion"
:TaskId="VisitTaskId"
:isUpload.sync="isUpload"
:isReadingTaskViewInOrder="isReadingTaskViewInOrder"
/>
</el-tab-pane>
<el-tab-pane
:label="$t('uploadDicomAndNonedicom:label:nonedicom')"
name="nonedicom"
>
<nonedicomFile
v-if="activeName === 'nonedicom'"
:SubjectId="SubjectId"
:SubjectCode="SubjectCode"
:Criterion="Criterion"
:VisitTaskId="VisitTaskId"
:isUpload.sync="isUpload"
/>
</el-tab-pane>
</el-tabs>
</el-dialog>
</template>
<script>
import dicomFile from './dicomFile.vue'
import nonedicomFile from './nonedicomFile.vue'
import store from '@/store'
export default {
name: 'uploadDicomAndNonedicom',
components: { dicomFile, nonedicomFile },
props: {
visible: {
required: true,
type: Boolean,
default: false,
},
SubjectId: {
type: String,
default: '',
},
SubjectCode: {
type: String,
default: '',
},
Criterion: {
type: Object,
default: () => {
return {}
},
},
VisitTaskId: {
type: String,
default: '',
},
isReadingTaskViewInOrder: {
type: Number,
default: 0,
},
},
data() {
return {
title: '',
activeName: 'dicom',
isUpload: false,
}
},
mounted() {
this.title = `Upload Images${this.SubjectCode}${this.Criterion.TrialReadingCriterionName}`
store.dispatch('trials/setUnLock', true)
},
methods: {
beforeClose() {
if (
this.$route.path !== '/trials/trials-panel/reading/readingTask' &&
this.isUpload
) {
return window.location.reload()
}
this.$emit('update:visible', false)
},
},
}
</script>
<style lang="scss" scoped>
::v-deep.el-tabs--left .el-tabs__header.is-left {
margin-right: 0;
}
.uploadDicomAndNonedicom {
::v-deep.el-tabs--border-card > .el-tabs__header .el-tabs__item {
color: #909399;
}
::v-deep.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
color: #428bca;
background-color: #fff;
border-right-color: #dcdfe6;
border-left-color: #dcdfe6;
}
}
</style>

View File

@ -0,0 +1,740 @@
<template>
<div class="nonedicomFile">
<div class="top">
<span>{{ $t('upload:nonedicom:title') }}</span>
<div class="tip">
<i class="el-icon-warning-outline"></i>
<div v-html="$t('upload:nonedicom:tip:message')"></div>
</div>
</div>
<!--检查列表-->
<el-table :data="list" style="width: 100%" v-adaptive="{ bottomOffset: 60 }" :loading="loading"
@sort-change="handleSortByColumn" :default-sort="{ prop: 'TaskBlindName', order: 'descending' }">
<!--受试者-->
<el-table-column prop="SubjectCode" :label="$t('upload:nonedicom:table:subject')" />
<!--任务名称-->
<el-table-column prop="TaskBlindName" :label="$t('upload:nonedicom:table:taskName')" sortable="custom" />
<!--检查类型-->
<el-table-column prop="Modality" :label="$t('upload:nonedicom:table:molityType')" sortable="custom">
</el-table-column>
<!--检查部位-->
<el-table-column prop="BodyPart" :label="$t('upload:nonedicom:table:bodyPart')" sortable="custom" />
<!--原文件数-->
<el-table-column prop="FileCount" :label="$t('upload:nonedicom:table:fileCount')">
<template slot-scope="scope">
<el-popover v-if="scope.row.FileCount" trigger="click" placement="bottom">
<el-table :data="scope.row.FileList" height="300" size="small">
<!-- 文件名称 -->
<el-table-column prop="FileName" :label="$t('trials:audit:table:nonDicomsFileName')" width="200" />
<el-table-column prop="FileSize" :label="$t('trials:audit:table:nonDicomsFileSize')" width="100">
<template slot-scope="scope">
<span>{{
scope.row.FileSize && scope.row.FileSize > 0
? `${(scope.row.FileSize / 1024 / 1024).toFixed(3)}MB`
: ''
}}</span>
</template>
</el-table-column>
<el-table-column :label="$t('common:action:action')" width="120">
<template slot-scope="files">
<!-- 预览 -->
<viewer :ref="files.row.Path" style="margin: 0 10px"
:images="[`${OSSclientConfig.basePath}${files.row.Path}`]">
<el-button circle icon="el-icon-view" :title="$t('upload:nonedicom:button:preview')" :disabled="files.row.FileType &&
files.row.FileType.indexOf('zip') >= 0
" @click.native.prevent="previewFile(files.row)" />
<img v-show="false" crossorigin="anonymous" :src="`${OSSclientConfig.basePath}${files.row.Path}`"
alt="Image" />
</viewer>
</template>
</el-table-column>
</el-table>
<div slot="reference" class="name-wrapper">
<el-button type="text">
{{ scope.row.FileCount }}
</el-button>
</div>
</el-popover>
<span v-else>{{ scope.row.FileCount }}</span>
</template>
</el-table-column>
<!--后处理文件数-->
<el-table-column prop="UploadedFileCount" :label="$t('upload:nonedicom:table:uploadFileCount')">
<template slot-scope="scope">
<el-popover v-if="scope.row.UploadedFileCount" trigger="click" placement="bottom">
<el-table :data="scope.row.UploadedFileList" height="300" size="small">
<!-- 文件名称 -->
<el-table-column prop="FileName" :label="$t('trials:audit:table:nonDicomsFileName')" width="200" />
<el-table-column prop="FileSize" :label="$t('trials:audit:table:nonDicomsFileSize')" width="100">
<template slot-scope="scope">
<span>{{
scope.row.FileSize && scope.row.FileSize > 0
? `${(scope.row.FileSize / 1024 / 1024).toFixed(3)}MB`
: ''
}}</span>
</template>
</el-table-column>
<el-table-column :label="$t('common:action:action')" width="120">
<template slot-scope="files">
<!-- 预览 -->
<viewer :ref="files.row.Path" style="margin: 0 10px"
:images="[`${OSSclientConfig.basePath}${files.row.Path}`]">
<el-button circle icon="el-icon-view" :title="$t('upload:nonedicom:button:preview')" :disabled="files.row.FileType &&
files.row.FileType.indexOf('zip') >= 0
" @click.native.prevent="previewFile(files.row)" />
<img v-show="false" crossorigin="anonymous" :src="`${OSSclientConfig.basePath}${files.row.Path}`"
alt="Image" />
</viewer>
</template>
</el-table-column>
</el-table>
<div slot="reference" class="name-wrapper">
<el-button type="text">
{{ scope.row.UploadedFileCount }}
</el-button>
</div>
</el-popover>
<span v-else>{{ scope.row.UploadedFileCount }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('common:action:action')" fixed="right" width="180">
<template slot-scope="scope">
<!--预览--->
<el-button circle :disabled="scope.row.UploadedFileCount <= 0" icon="el-icon-view"
:title="$t('upload:nonedicom:button:preview')" @click.stop="handlePreviewNoneDicomFiles(scope.row)" />
<!--上传--->
<el-button circle icon="el-icon-upload2" :title="$t('upload:nonedicom:button:upload')"
@click.native.prevent="handleUpload(scope.row)" />
<!--删除--->
<el-button :disabled="scope.row.UploadedFileCount <= 0 ||
scope.row.ReadingTaskState === 2
" circle icon="el-icon-delete" :title="$t('upload:nonedicom:button:delete')"
@click.stop="remove(scope.row)" />
</template>
</el-table-column>
</el-table>
<!-- 预览单个图像 -->
<el-dialog v-if="imgObj.visible" :visible.sync="imgObj.visible" :title="$t('upload:nonedicom:dialogTitle:preview')"
append-to-body width="565px">
<div v-loading="imgObj.loading" class="base-modal-body" style="border: 2px solid #ccc; padding: 10px">
<el-image :src="`${OSSclientConfig.basePath}${imgObj.url}`" crossorigin="anonymous" fit="fit"
style="height: 500px; width: 500px" @error="imgObj.loading = false" @load="imgObj.loading = false" />
</div>
</el-dialog>
<!-- 上传非dicom文件 -->
<el-dialog v-if="uploadVisible" :visible.sync="uploadVisible" :close-on-click-modal="false"
:title="$t('trials:uploadNonDicoms:dialogTitle:upload')" width="800px" append-to-body
custom-class="base-dialog-wrapper" @close="resetFileDiaolg">
<!-- 多文件上传 -->
<form id="inputForm" ref="uploadForm">
<el-divider content-position="left">{{
$t('trials:uploadNonDicoms:label:fileType')
}}</el-divider>
<div class="form-group">
<div class="upload" style="margin-right: 10px">
<input multiple="multiple" webkitdirectory="" directory accept="*/*" type="file" name="uploadFolder"
class="select-file" title="" @change="beginScanFiles($event)" v-if="!btnLoading" />
<div class="btn-select">
{{ $t('trials:uploadNonDicoms:button:selectFolder') }}
</div>
</div>
<div class="upload">
<input class="select-file" multiple="" :accept="faccept.join(',')" type="file" name="uploadFile" title=""
@change="beginScanFiles($event)" v-if="!btnLoading" />
<div class="btn-select">
{{ $t('trials:uploadNonDicoms:button:select') }}
</div>
</div>
<!-- <span style="margin-left: 10px">{{
$store.state.trials.uploadTip
}}</span> -->
</div>
</form>
<!-- 文件列表 -->
<el-table ref="filesTable" :data="fileList" class="dicomFiles-table" height="300"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" :selectable="(row, index) => row.status !== 2 && !btnLoading" />
<el-table-column type="index" width="50" />
<!-- 文件名称 -->
<el-table-column prop="name" :label="$t('trials:uploadNonDicoms:table:fileName')" min-width="100" />
<!-- 文件大小 -->
<el-table-column prop="size" :label="$t('trials:uploadNonDicoms:table:fileSize')">
<template slot-scope="scope">
<span>{{
scope.row.size && scope.row.size > 0
? `${(scope.row.size / 1024 / 1024).toFixed(3)}MB`
: '0MB'
}}</span>
</template>
</el-table-column>
<!-- 文件类型 -->
<el-table-column prop="type" :label="$t('trials:uploadNonDicoms:table:fileType')" />
<!-- 上传状态 -->
<el-table-column prop="status" :label="$t('trials:uploadNonDicoms:table:uploadStatus')" min-width="100">
<template slot-scope="scope">
<el-tag :type="['warning', 'info', 'success', 'danger'][scope.row.status]"
v-if="scope.row.status || scope.row.status === 0">{{ $fd('NoneDicomUploadStatus', scope.row.status) }}
</el-tag>
</template>
</el-table-column>
<el-table-column :label="$t('trials:uploadNonDicoms:table:failedFileCount')" min-width="150"
show-overflow-tooltip>
<template slot-scope="scope">
<el-progress color="#409eff" :percentage="scope.row.size && scope.row.size > 0 ? ((scope.row.uploadFileSize * 100) / scope.row.size).toFixed(2) *
1
: ((scope.row.uploadFileSize * 100) / 1).toFixed(2) *
1
" />
</template>
</el-table-column>
<el-table-column :label="$t('common:action:action')">
<template slot-scope="scope">
<el-button size="mini" icon="el-icon-delete" circle :disabled="btnLoading"
:title="$t('trials:crcUpload:action:delete')" @click="handleRemoveFile(scope.row)" />
</template>
</el-table-column>
</el-table>
<div style="text-align: right; padding: 10px 0px">
<span style="margin-right: 10px">{{
$store.state.trials.uploadTip
}}</span>
<el-button size="small" type="primary" :disabled="selectArr.length == 0" :loading="btnLoading"
@click="beginUpload">
{{ $t('trials:uploadNonDicoms:action:upload') }}
</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
getIRUploadTaskNoneDicomStudyList,
deleteTaskStudy,
} from '@/api/load.js'
import { preArchiveStudy, uploadNoneDicomFile } from '@/api/trials'
import store from '@/store'
import { getToken } from '@/utils/auth'
let defaultSearchData = () => {
return {
SubjectId: null,
TrialReadingCriterionId: null,
SubjectCode: null,
Asc: false,
SortField: 'TaskBlindName',
}
}
export default {
name: 'nonedicomFile',
props: {
SubjectId: {
type: String,
default: '',
},
SubjectCode: {
type: String,
default: '',
},
Criterion: {
type: Object,
default: () => {
return {}
},
},
VisitTaskId: {
type: String,
default: '',
},
isUpload: {
type: Boolean,
default: false,
},
},
data() {
return {
loading: false,
list: [],
searchData: defaultSearchData(),
imgObj: { url: '', visible: false, loading: false },
uploadVisible: false,
fileList: [],
selectArr: [],
successFileList: [],
isFail: false,
faccept: ['.jpg', '.jpeg', '.png', '.bmp', '.zip'],
fCount: 0,
btnLoading: false,
currentRow: {},
studyMonitorId: null,
open: null,
}
},
watch: {
isFail() {
if (this.isFail) {
this.$confirm(
this.$t('trials:visit:crcUpload:nomDicomFiles:failUpload'),
{
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: this.$t('common:button:confirm'),
cancelButtonText: this.$t('common:button:cancel'),
}
)
.then(() => {
this.beginUpload()
})
.catch((err) => {
this.btnLoading = false
console.log(err)
})
}
},
btnLoading() {
store.dispatch('trials/setUnLock', this.btnLoading)
},
},
created() {
this.getList()
},
beforeDestroy() {
store.dispatch('trials/setUnLock', false)
},
methods: {
async getList() {
try {
this.searchData.SubjectId = this.SubjectId
this.searchData.TrialReadingCriterionId =
this.Criterion.TrialReadingCriterionId
this.searchData.SubjectCode = this.SubjectCode
if (this.VisitTaskId) {
this.searchData.VisitTaskId = this.VisitTaskId
}
this.loading = true
let res = await getIRUploadTaskNoneDicomStudyList(this.searchData)
this.loading = false
if (res.IsSuccess) {
this.list = res.Result
}
} catch (err) {
this.loading = false
console.log(err)
}
},
//
beginScanFiles(e) {
var files = [...e.target.files]
var sameFiles = []
files.forEach((file) => {
var extendName = file.name
.substring(file.name.lastIndexOf('.'))
.toLocaleLowerCase()
if (
this.faccept.indexOf(extendName) !== -1 &&
this.fileList.findIndex((v) => v.name === file.name) > -1
) {
sameFiles.push(file.name)
}
})
var scope = this
if (sameFiles.length > 0) {
const h = this.$createElement
var msg = this.$t(
'trials:uploadNonDicoms:message:exsitSameFile'
).replace('xxx', sameFiles.join(', '))
this.$msgbox({
message: h('div', { style: 'maxHeight:300px;overflow: auto;' }, [
h('p', null, msg),
h(
'p',
null,
this.$t('trials:uploadNonDicoms:message:isContinueUpload')
),
]),
type: 'warning',
showCancelButton: true,
})
.then(() => {
scope.pendingUploadQuene(files)
})
.catch(() => {
scope.resetUploadForm()
})
} else {
scope.pendingUploadQuene(files)
}
},
pendingUploadQuene(files) {
for (var i = 0; i < files.length; ++i) {
const fileName = files[i].name
var extendName = fileName
.substring(fileName.lastIndexOf('.'))
.toLocaleLowerCase()
if (this.faccept.indexOf(extendName) !== -1) {
files[i].id = `${files[i].lastModified}${files[i].name}`
let obj = {
name: files[i].name,
size: files[i].size,
type: extendName.split('.')[1],
status: 0,
file: files[i],
id: `${files[i].lastModified}${files[i].name}`,
fileType: files[i].type,
uploadFileSize: 0,
}
this.fileList.push(obj)
this.$refs.filesTable.toggleRowSelection(obj, true)
}
}
this.resetUploadForm()
},
handleRemoveFile(row) {
this.$confirm(this.$t('trials:uploadNonDicoms:message:delete'), {
type: 'warning',
distinguishCancelAndClose: true,
})
.then(() => {
this.fileList.splice(
this.fileList.findIndex((item) => item.id === row.id),
1
)
let flag = this.successFileList.some((item) => item.id === row.id)
if (flag) {
this.successFileList.splice(
this.successFileList.findIndex((item) => item.id === row.id),
1
)
}
})
.catch(() => { })
},
resetUploadForm() {
this.$nextTick(() => {
this.$refs.uploadForm.reset()
})
},
//
handleUpload(row) {
this.fileList = []
this.uploadVisible = true
this.fCount = 0
this.currentRow = { ...row }
},
resetFileDiaolg() {
this.btnLoading = false
this.uploadVisible = false
this.selectArr = []
this.successFileList = []
this.OSSclient.close()
},
//
previewFile(row) {
// window.open(row.FullFilePath, '_blank')
// this.imgObj.url = row.FullFilePath || row.Path
// this.imgObj.loading = true
// this.imgObj.visible = true
this.$refs[row.Path].$viewer.show()
},
// Dicom
handlePreviewNoneDicomFiles(row) {
if (this.open) {
this.open.close()
}
let trialId = this.$route.query.trialId
var token = getToken()
const routeData = this.$router.resolve({
path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${row.SourceSubjectVisitId}&studyId=${row.Id}&visitTaskId=${row.VisitTaskId}&TokenKey=${token}`,
})
this.open = window.open(routeData.href, '_blank')
},
//
async remove(item) {
try {
let confirm = await this.$confirm(
this.$t('upload:nonedicom:confirm:delMessage'),
{
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: this.$t('common:button:confirm'),
cancelButtonText: this.$t('common:button:cancel'),
}
)
if (confirm !== 'confirm') return
let params = {
VisitTaskId: item.VisitTaskId,
IsDicom: false,
NoneDicomStudyId: item.Id,
}
let res = await deleteTaskStudy(params)
if (res.IsSuccess) {
this.getList()
this.$emit('update:isUpload', true)
this.$message.success(
this.$t('trials:uploadImage:message:delSuccess')
)
}
} catch (err) {
console.log(err)
}
},
//
handleSortByColumn(column) {
if (column.order === 'ascending') {
this.searchData.Asc = true
} else {
this.searchData.Asc = false
}
this.searchData.SortField = column.prop
this.searchData.PageIndex = 1
this.getList()
},
//
handleSelectionChange(selection) {
this.selectArr = selection
},
//
async beginUpload() {
this.btnLoading = true
this.isFail = false
const fileMaxSize = 1024 * 1024 * 1024 * 2 // 1G
var currentFilesSize = 0
this.selectArr.forEach((item) => {
currentFilesSize += item.size
})
if (currentFilesSize / fileMaxSize > 1) {
// 'Upload file size cannot exceed 1G'
this.$alert(this.$t('trials:uploadNonDicoms:message:uploadSize'))
this.btnLoading = false
} else {
this.selectArr.forEach((item) => (item.status = 0))
let num = this.selectArr.length > 6 ? 6 : this.selectArr.length
let funArr = []
let res = await preArchiveStudy({
subjectVisitId: this.currentRow.SourceSubjectVisitId,
isDicom: false,
FileCount: this.selectArr.length,
})
if (res.IsSuccess) {
this.studyMonitorId = res.Result
for (let i = 0; i < num; i++) {
funArr.push(this.handleUploadTask(this.selectArr, i))
}
if (funArr.length > 0) {
let res = await Promise.all(funArr)
}
} else {
this.isFail = true
}
}
},
//
async handleUploadTask(arr, index) {
if (!this.uploadVisible) return
let file = this.fileList.filter((item) => item.id === arr[index].id)[0]
file.status = 1
let path = `/${this.$route.query.trialId}/TaskImage/${this.currentRow.SubjectId
}/${this.currentRow.VisitTaskId}/${this.$guid()}${file.name
.substring(file.name.lastIndexOf('.'))
.toLocaleLowerCase()}`
file.curPath = path
const fileData = await this.fileToBlob(file.file)
let res = await this.fileToOss(path, fileData, file)
if (res) {
file.status = 2
this.successFileList.push({
fileName: file.name,
filePath: this.$getObjectName(res.url),
fileFize: file.size,
fileType: file.fileType,
})
let flag = arr.every((item) => item.status === 2)
if (flag) {
let RecordPath = await this.uploadRecord(arr)
return this.submitFile(this.successFileList, RecordPath)
}
} else {
file.status = 3
}
let flag = arr.every((item) => item.status > 1)
if (flag) {
let failFileList = arr.filter((item) => item.status === 3)
if (failFileList && failFileList.length > 0) {
let RecordPath = await this.uploadRecord(arr)
this.$refs.filesTable.clearSelection()
failFileList.forEach((row) => {
row.uploadFileSize = 0
this.$refs.filesTable.toggleRowSelection(row)
})
this.isFail = true
this.submitFile(this.successFileList, RecordPath, true)
return false
}
}
let ind = arr.findIndex((item) => item.status === 0)
if (ind >= 0) {
return this.handleUploadTask(arr, ind)
} else {
return false
}
},
// fileoss
async fileToOss(path, file, item) {
try {
let res = await this.OSSclient.multipartUpload(
{
path,
file,
speed: true,
},
(percentage, checkpoint, lastPer) => {
item.uploadFileSize += checkpoint.size * (percentage - lastPer)
if (item.uploadFileSize > file.fileSize) {
item.uploadFileSize = file.fileSize > 0 ? file.fileSize : 1
}
}
)
if (res) {
return res
} else {
return false
}
} catch (err) {
console.log(err)
return false
}
},
// Dicom
submitFile(uploadedFileList, RecordPath, isReLoad = false) {
if (!this.uploadVisible) return
this.btnLoading = true
var params = {
trialId: this.$route.query.trialId,
subjectVisitId: this.currentRow.SourceSubjectVisitId,
noneDicomStudyId: this.currentRow.Id,
studyMonitorId: this.studyMonitorId,
VisitTaskId: this.currentRow.VisitTaskId,
uploadedFileList: uploadedFileList,
}
if (RecordPath) {
params.RecordPath = RecordPath.path
params.FailedFileCount = RecordPath.Record.Failed.length
}
uploadNoneDicomFile(params)
.then((res) => {
if (!isReLoad) {
this.resetFileDiaolg()
}
this.getList()
this.$emit('update:isUpload', true)
//
this.$emit('getList')
this.$message.success(
this.$t('trials:uploadNonDicoms:message:uploadedSuccessfully')
)
})
.catch(() => {
this.btnLoading = false
})
},
//
uploadRecord(arr) {
return new Promise(async (resolve) => {
try {
let Record = {
Failed: [],
Existed: [],
Uploaded: [],
FileCount: arr.length,
}
arr.forEach((item) => {
let file = this.fileList.find((data) => data.id === item.id)
if (file.status === 2) {
Record.Uploaded.push(file.curPath)
}
if (file.status === 3) {
Record.Failed.push(file.curPath)
}
})
let text = JSON.stringify(Record)
let logJsonBlob = this.generateTxtFile(text)
let logJsonObjectName = `/${this.$route.query.trialId}/TaskImage/${this.currentRow.SubjectId}/${this.currentRow.VisitTaskId}/${this.studyMonitorId}.txt`
let logRes
try {
logRes = await this.OSSclient.put(logJsonObjectName, logJsonBlob)
if (logRes && logRes.url) {
resolve({ path: this.$getObjectName(logRes.url), Record })
} else {
resolve(false)
}
} catch (e) {
resolve(false)
}
} catch (err) {
console.log(err)
resolve(false)
}
})
},
generateTxtFile(text) {
let blob = new Blob(['\ufeff', text], { type: 'text/plain' })
return blob
},
},
}
</script>
<style lang="scss" scoped>
.top {
margin: 10px 0;
}
.upload {
display: inline-block;
height: 30px;
width: 90px;
padding: 2px 10px;
line-height: 23px;
position: relative;
text-decoration: none;
border-radius: 3px;
overflow: hidden;
text-align: center;
background: #428bca;
border-color: #428bca;
color: #fff;
.select-file {
height: 30px;
width: 90px;
position: absolute;
overflow: hidden;
left: 0;
top: 0;
opacity: 0;
font-size: 0;
}
.btn-select {
//
width: 90px;
height: 30px;
line-height: 30px;
text-align: center;
cursor: pointer;
border-radius: 24px;
overflow: hidden;
position: absolute;
top: 0;
left: 0;
pointer-events: none; //pointer-events:none穿
}
}
.tip {
display: flex;
align-items: flex-start;
margin-top: 5px;
i {
margin: 3px 5px 0 0;
}
}
</style>

View File

@ -0,0 +1,291 @@
<template>
<div v-if="model_cfg.visible">
<base-model :config="model_cfg">
<div slot="dialog-body">
<el-table :data="modelList" style="width: 100%" height="300">
<!--检查编号-->
<el-table-column
prop="StudyCode"
:label="$t('trials:uploadImage:table:StudyCode')"
/>
<!--检查类型-->
<el-table-column
prop="ModalityForEdit"
:label="$t('trials:uploadImage:table:ModalityForEdit')"
v-if="IsDicom"
/>
<!--检查模态-->
<el-table-column
prop="Modalities"
:label="$t('trials:uploadImage:table:Modalities')"
v-if="IsDicom"
/>
<!--检查部位-->
<el-table-column
prop="BodyPartForEdit"
:label="$t('trials:uploadImage:table:BodyPartForEdit')"
v-if="IsDicom"
>
<template slot-scope="scope">
<span>{{
$fd(
'Bodypart',
scope.row.BodyPartForEdit,
'Code',
{ Bodypart: bodyPart },
'Name'
)
}}</span>
</template>
</el-table-column>
<!--序列数量-->
<el-table-column
prop="SeriesCount"
:label="$t('trials:uploadImage:table:SeriesCount')"
v-if="IsDicom"
/>
<!--图像数量-->
<el-table-column
prop="InstanceCount"
:label="$t('trials:uploadImage:table:InstanceCount')"
v-if="IsDicom"
/>
<!--检查时间-->
<el-table-column
prop="StudyTime"
:label="$t('trials:uploadImage:table:StudyTime')"
v-if="IsDicom"
min-width="130"
/>
<!--检查模态-->
<el-table-column
prop="Modality"
:label="$t('trials:uploadImage:table:Modalities')"
v-if="!IsDicom"
/>
<!--检查部位-->
<el-table-column
prop="BodyPart"
:label="$t('trials:uploadImage:table:BodyPartForEdit')"
v-if="!IsDicom"
>
<template slot-scope="scope">
<span>{{
$fd(
'Bodypart',
scope.row.BodyPart,
'Code',
{ Bodypart: bodyPart },
'Name'
)
}}</span>
</template>
</el-table-column>
<!--文件数量-->
<el-table-column
prop="FileCount"
:label="$t('trials:uploadImage:table:FileCount')"
v-if="!IsDicom"
/>
<!--检查时间-->
<el-table-column
prop="ImageDate"
:label="$t('trials:uploadImage:table:StudyTime')"
v-if="!IsDicom"
min-width="130"
/>
<el-table-column
:label="$t('common:action:action')"
fixed="right"
width="80"
>
<template slot-scope="scope">
<!--预览--->
<el-button
circle
icon="el-icon-view"
:title="$t('trials:uploadImage:button:preview')"
v-if="!isUpload"
@click.stop="preview(scope.row)"
/>
<!--编辑--->
<el-button
circle
icon="el-icon-edit-outline"
:title="$t('trials:uploadImage:button:edit')"
v-else
@click.stop="openEdit(scope.row)"
/>
</template>
</el-table-column>
</el-table>
</div>
</base-model>
<!--新增检查部位-->
<base-model v-if="editModality_model.visible" :config="editModality_model">
<template slot="dialog-body">
<el-form
ref="editModalityform"
:inline="true"
:model="form"
class="demo-form-inline"
:rules="rules"
>
<el-form-item
:label="$t('trials:uploadImage:form:ModalityForEdit')"
prop="Modality"
label-width="150px"
>
<el-select v-model="form.Modality" placeholder="">
<el-option
v-for="item in TrialModality"
:key="item"
:label="item"
:value="item"
>
</el-option>
</el-select>
</el-form-item>
</el-form>
</template>
<template slot="dialog-footer">
<el-button
type="primary"
@click="updateTaskStudyModality"
:loading="loading"
>
{{ $t('common:button:confirm') }}
</el-button>
<el-button
@click="editModality_model.visible = false"
:loading="loading"
>
{{ $t('common:button:cancel') }}
</el-button>
</template>
</base-model>
</div>
</template>
<script>
import baseModel from '@/components/BaseModel'
import { getToken } from '@/utils/auth'
import { updateTaskStudyModality } from '@/api/load.js'
export default {
name: 'studyView',
props: {
model_cfg: {
type: Object,
default: () => {
return {}
},
},
bodyPart: {
type: Array,
default: () => {
return []
},
},
modelList: {
type: Array,
default: () => {
return []
},
},
TrialModality: {
type: Array,
default: () => {
return []
},
},
visitTaskId: {
type: String,
},
IsDicom: {
required: true,
type: Boolean,
default: true,
},
isUpload: {
required: true,
type: Boolean,
default: false,
},
},
components: {
'base-model': baseModel,
},
data() {
return {
form: {
Modality: null,
TaskStudyId: null,
},
editModality_model: {
visible: false,
title: this.$t('trials:uploadImage:button:edit'),
width: '500px',
appendToBody: true,
},
rules: {
Modality: [
{
required: true,
message: this.$t('trials:uploadImage:format:notModality'),
trigger: ['blur', 'change'],
},
],
},
loading: false,
}
},
methods: {
//
preview(row) {
let routeData = null
if (this.IsDicom) {
var token = getToken()
routeData = this.$router.resolve({
path: `/showdicom?studyId=${row.Id}&TokenKey=${token}&type=Study&visitTaskId=${this.visitTaskId}`,
})
} else {
let trialId = this.$route.query.trialId
var token = getToken()
routeData = this.$router.resolve({
path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${row.SourceSubjectVisitId}&studyId=${row.Id}&TokenKey=${token}`,
})
}
window.open(routeData.href, '_blank')
},
//
openEdit(row) {
this.form.TaskStudyId = row.Id
this.form.Modality = row.ModalityForEdit
this.editModality_model.visible = true
},
//
async updateTaskStudyModality() {
try {
let validate = await this.$refs.editModalityform.validate()
if (!validate) return false
this.loading = true
let res = await updateTaskStudyModality(this.form)
this.loading = false
if (res.IsSuccess) {
this.modelList.some((item) => {
if (this.form.TaskStudyId === item.Id) {
item.ModalityForEdit = this.form.Modality
}
return this.form.TaskStudyId === item.Id
})
this.editModality_model.visible = false
this.$emit('getList')
}
} catch (err) {
console.log(err)
}
},
},
}
</script>
<style lang="scss" scoped>
</style>

View File

@ -224,6 +224,7 @@ import {
addOrUpdateArchiveTaskStudy, addOrUpdateArchiveTaskStudy,
} from "@/api/load.js"; } from "@/api/load.js";
import { parseDicom, getThumbnail, dicomToOSS } from "@/utils/parseDicom.js"; import { parseDicom, getThumbnail, dicomToOSS } from "@/utils/parseDicom.js";
import store from "@/store";
export default { export default {
name: "uploadList", name: "uploadList",
props: { props: {
@ -262,6 +263,7 @@ export default {
}, },
watch: { watch: {
isLoad() { isLoad() {
store.dispatch("trials/setUnLock", this.isLoad);
if (!this.isLoad) { if (!this.isLoad) {
this.$refs.file.value = null; this.$refs.file.value = null;
if (this.dicomList.some((item) => item.isUpload === 3)) { if (this.dicomList.some((item) => item.isUpload === 3)) {
@ -565,7 +567,7 @@ export default {
for (let i = 0; i < arr.length; i++) { for (let i = 0; i < arr.length; i++) {
let dicom = arr[i]; let dicom = arr[i];
if (dicom.StudyInstanceUid !== StudyInstanceUid) continue; if (dicom.StudyInstanceUid !== StudyInstanceUid) continue;
let thumbnailPath = `/${dicom.params.TrialId}/TaskImage/${dicom.params.SubjectId}/${dicom.params.VisitTaskId}/${dicom.StudyInstanceUid}/${dicom.SeriesInstanceUid}.png`; let thumbnailPath = `/${dicom.params.TrialId}/TaskImage/${dicom.params.SubjectId}/${dicom.params.VisitTaskId}/${dicom.StudyInstanceUid}/${dicom.SeriesInstanceUid}.jpg`;
if (!studyObj[dicom.StudyId]) { if (!studyObj[dicom.StudyId]) {
studyObj[dicom.StudyId] = { studyObj[dicom.StudyId] = {
StudyId: dicom.StudyId, StudyId: dicom.StudyId,
@ -747,6 +749,7 @@ export default {
}, },
beforeDestroy() { beforeDestroy() {
this.isClose = true; this.isClose = true;
store.dispatch("trials/setUnLock", false);
}, },
}; };
</script> </script>

View File

@ -66,13 +66,13 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<!--下载---> <!--下载--->
<el-button <!-- <el-button
v-if="!isUpload && Criterion.ImageDownloadEnum > 0" v-if="!isUpload && Criterion.ImageDownloadEnum > 0"
circle circle
icon="el-icon-download" icon="el-icon-download"
:title="$t('trials:uploadImage:button:download')" :title="$t('trials:uploadImage:button:download')"
@click.stop="downloadImage(scope.row)" @click.stop="downloadImage(scope.row)"
/> /> -->
<!--删除---> <!--删除--->
<el-button <el-button
v-if="isUpload" v-if="isUpload"
@ -102,7 +102,7 @@
import uploadList from "./components/upload-list.vue"; import uploadList from "./components/upload-list.vue";
import studyView from "./components/study-view.vue"; import studyView from "./components/study-view.vue";
import { getSubjectImageUploadList, deleteTaskStudy } from "@/api/load.js"; import { getSubjectImageUploadList, deleteTaskStudy } from "@/api/load.js";
import { downloadImage } from "@/utils/uploadZip.js"; import store from "@/store";
export default { export default {
name: "uploadImage", name: "uploadImage",
props: { props: {
@ -247,16 +247,356 @@ export default {
}, },
// //
async downloadImage(item) { async downloadImage(item) {
try { let zipName = "压缩包.zip";
await downloadImage( let InstanceInfoList = [
this.$route.query.trialId, {
item.SourceSubjectVisitId Id: "e634352c-6465-32ba-04b3-824ec8d346a8",
); Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/e634352c-6465-32ba-04b3-824ec8d346a8",
} catch (err) { HtmlPath: "",
console.log(err); NumberOfFrames: 0,
InstanceNumber: 1,
},
{
Id: "d4ad1dd2-747b-6de7-8ad4-3e81c58943dd",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/d4ad1dd2-747b-6de7-8ad4-3e81c58943dd",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 2,
},
{
Id: "6a1d1d12-2b4a-0368-c7e1-d44f7180b280",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/6a1d1d12-2b4a-0368-c7e1-d44f7180b280",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 3,
},
{
Id: "7a8fb1b4-9ea8-1189-4ca6-b9a9b9547a39",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/7a8fb1b4-9ea8-1189-4ca6-b9a9b9547a39",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 4,
},
{
Id: "8d00be19-5ac5-c608-dbd0-41f84cfacd95",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/8d00be19-5ac5-c608-dbd0-41f84cfacd95",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 5,
},
{
Id: "729ded91-0eca-78f2-1c17-5182d4f27e3a",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/729ded91-0eca-78f2-1c17-5182d4f27e3a",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 6,
},
{
Id: "9e2fd28c-72fe-bb66-e0ce-40115cd82260",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/9e2fd28c-72fe-bb66-e0ce-40115cd82260",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 7,
},
{
Id: "9b31613f-3c9e-28ad-fd9e-7001a69e09b5",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/9b31613f-3c9e-28ad-fd9e-7001a69e09b5",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 8,
},
{
Id: "4982b453-d068-7e56-2acd-a361d8584f35",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/4982b453-d068-7e56-2acd-a361d8584f35",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 9,
},
{
Id: "8279cf5a-2551-43ea-3fe4-673e88ba7e5a",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/8279cf5a-2551-43ea-3fe4-673e88ba7e5a",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 10,
},
{
Id: "6424e9c5-d31b-9388-3b64-a56705ab6fc8",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/6424e9c5-d31b-9388-3b64-a56705ab6fc8",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 11,
},
{
Id: "a73cf3f9-defa-0c22-dfdc-8c5bfb93c9a7",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/a73cf3f9-defa-0c22-dfdc-8c5bfb93c9a7",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 12,
},
{
Id: "dbfaafea-f721-0a93-37c6-69bcc0d957c3",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/dbfaafea-f721-0a93-37c6-69bcc0d957c3",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 13,
},
{
Id: "52000ac1-6a5b-83e2-5468-4dfdf394e455",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/52000ac1-6a5b-83e2-5468-4dfdf394e455",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 14,
},
{
Id: "de34a347-41f4-1018-a710-48d81fa9aadc",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/de34a347-41f4-1018-a710-48d81fa9aadc",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 15,
},
{
Id: "251d6a13-26b7-935b-d765-0c5db1ed7dfc",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/251d6a13-26b7-935b-d765-0c5db1ed7dfc",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 16,
},
{
Id: "b22e93c8-3f6a-484a-a32b-f7626689f8da",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/b22e93c8-3f6a-484a-a32b-f7626689f8da",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 17,
},
{
Id: "6517400b-d4b5-db65-d026-8c06c40bf244",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/6517400b-d4b5-db65-d026-8c06c40bf244",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 18,
},
{
Id: "8e70df99-525a-4ecd-5cf1-6c32698eaa3f",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/8e70df99-525a-4ecd-5cf1-6c32698eaa3f",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 19,
},
{
Id: "7df907f2-b6a6-fd03-67ab-be86c497d412",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/7df907f2-b6a6-fd03-67ab-be86c497d412",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 20,
},
{
Id: "ba31ba5b-728e-8301-273d-459fd3c65a43",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/ba31ba5b-728e-8301-273d-459fd3c65a43",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 21,
},
{
Id: "7528c70c-5ba1-59c1-413c-7bfc984c0066",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/7528c70c-5ba1-59c1-413c-7bfc984c0066",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 22,
},
{
Id: "15dd574d-fc82-c5b7-fefb-497346d4abbb",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/15dd574d-fc82-c5b7-fefb-497346d4abbb",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 23,
},
{
Id: "6cd76aca-91fa-64ce-6077-af48c5e5b18b",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/6cd76aca-91fa-64ce-6077-af48c5e5b18b",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 24,
},
{
Id: "2f0f9f4e-12b8-a6a8-d3f9-f43e2055653d",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/2f0f9f4e-12b8-a6a8-d3f9-f43e2055653d",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 25,
},
{
Id: "3c49f379-8548-67cd-1333-dde28219c6e9",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/3c49f379-8548-67cd-1333-dde28219c6e9",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 26,
},
{
Id: "910f43c8-123a-0753-aaf7-11081eef4268",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/910f43c8-123a-0753-aaf7-11081eef4268",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 27,
},
{
Id: "ffad6b36-74aa-1c7d-01eb-18524da91f6e",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/ffad6b36-74aa-1c7d-01eb-18524da91f6e",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 28,
},
{
Id: "9e2bf22d-8734-62ae-881a-7404064a95ce",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/9e2bf22d-8734-62ae-881a-7404064a95ce",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 29,
},
{
Id: "eef8b291-ffdf-dbfb-244d-5e63dc5b8cc7",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/eef8b291-ffdf-dbfb-244d-5e63dc5b8cc7",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 30,
},
{
Id: "12b0de3a-243c-78b9-b006-82f2cc633a0f",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/12b0de3a-243c-78b9-b006-82f2cc633a0f",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 31,
},
{
Id: "4341ea87-7d54-2608-184e-01e5c976ce9f",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/4341ea87-7d54-2608-184e-01e5c976ce9f",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 32,
},
{
Id: "4db2bac2-18eb-0589-d520-f297b2840e1d",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/4db2bac2-18eb-0589-d520-f297b2840e1d",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 33,
},
{
Id: "9442c2a3-0972-67f7-afc3-6f1a47abefab",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/9442c2a3-0972-67f7-afc3-6f1a47abefab",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 34,
},
{
Id: "a7fb75b0-0b09-5340-70cf-a11afd84b1ec",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/a7fb75b0-0b09-5340-70cf-a11afd84b1ec",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 35,
},
{
Id: "753d7795-451a-bd32-69ea-fd58c1e89d63",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/753d7795-451a-bd32-69ea-fd58c1e89d63",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 36,
},
{
Id: "33bf7274-de0a-e8f9-f97a-c58fb2ea3aaf",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/33bf7274-de0a-e8f9-f97a-c58fb2ea3aaf",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 37,
},
{
Id: "adadae31-37a1-818d-3721-09a1d371c6a5",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/adadae31-37a1-818d-3721-09a1d371c6a5",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 38,
},
{
Id: "f64e8b0d-d2ab-b112-5705-92c23cfc5df6",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/f64e8b0d-d2ab-b112-5705-92c23cfc5df6",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 39,
},
{
Id: "781088b0-5afd-6eb3-5f87-9bfec210d490",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/781088b0-5afd-6eb3-5f87-9bfec210d490",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 40,
},
{
Id: "56df4cef-8053-bff3-21f7-1b1841a3d6e6",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/56df4cef-8053-bff3-21f7-1b1841a3d6e6",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 41,
},
{
Id: "a3e3dab9-7a61-f822-d113-42f46bc5e8ce",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/a3e3dab9-7a61-f822-d113-42f46bc5e8ce",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 42,
},
{
Id: "1cc195b9-e498-179d-b927-6d706266decb",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/1cc195b9-e498-179d-b927-6d706266decb",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 43,
},
{
Id: "7dca834f-d959-898e-a0cb-5c8244c4c4a9",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/7dca834f-d959-898e-a0cb-5c8244c4c4a9",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 44,
},
{
Id: "13eeba83-2e93-800e-e934-a56061633c64",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/13eeba83-2e93-800e-e934-a56061633c64",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 45,
},
{
Id: "971f0a62-92a3-6d04-53c5-51fa9155e28c",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/971f0a62-92a3-6d04-53c5-51fa9155e28c",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 46,
},
{
Id: "2959d06c-5ac7-f3b9-63d4-1a56e3974fc7",
Path: "/01000000-c0a8-0242-ff9a-08dc8a84633c/Image/01000000-c0a8-0242-2179-08dc8a9e55b4/01000000-c0a8-0242-7f99-08dc8abdc649/01000000-c0a8-0242-89ca-08dc8abdc65d/1.2.840.113619.2.334.3.2831181473.554.1419910103.185/2959d06c-5ac7-f3b9-63d4-1a56e3974fc7",
HtmlPath: "",
NumberOfFrames: 0,
InstanceNumber: 47,
},
];
let path = "https://zy-irc-test-store.oss-cn-shanghai.aliyuncs.com";
let files = new Array();
for (let i = 0; i < InstanceInfoList.length; i++) {
let item = InstanceInfoList[i];
let obj = {
name: "file" + i,
url: path + item.Path,
};
files.push(obj);
} }
store.dispatch("trials/setUnLock", true);
// let res = await downloadImage(zipName, files);
store.dispatch("trials/setUnLock", false);
}, },
}, },
beforeDestroy() {
store.dispatch("trials/setUnLock", false);
},
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -1,180 +0,0 @@
<template>
<div style="text-align: center">
<div style="display: flex;justify-content: center">
<video v-if="videoSrc" id="video" controls crossorigin="anonymous" width="400" height="270"">
<source :src="videoSrc" type="video/mp4">
无法播放请点击转码
</video>
<div v-else style="border:2px dashed #999;border-radius: 10px;cursor:pointer;width:400px;height:270px;display: flex;justify-content: center;align-items: center" @click="$refs.fileInput.click()">
请选择视频文件
</div>
</div>
<input v-show="false" ref="fileInput" type="file" accept="video/*" @change="fileChange">
<div v-if="isVideoToMp4" style="display: flex;align-items: center;justify-content: right;margin-top: 10px;">
<div>转码进度: </div>
<el-progress style="width: 200px" :percentage="percentage" :format="() => {return percentage + '%'}" />
</div>
<div style="margin-top: 10px;display: flex;justify-content: right;align-items: center">
<el-button size="small" type="primary" :disabled="isVideoToMp4 || isDisabled" @click="$refs.fileInput.click()"></el-button>
<el-button v-if="isNeedToMp4" size="small" type="primary" :disabled="(videoSrc ? false : true) || isVideoToMp4 || isDisabled" @click="videoToMp4"></el-button>
<el-button size="small" type="primary" :disabled="(videoSrc ? false : true) || isVideoToMp4 || isDisabled" @click="upload"></el-button>
</div>
</div>
</template>
<script>
import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg'
const ffmpeg = createFFmpeg({
log: true,
corePath: './ffmpeg-core.js'
})
export default {
props: {
},
data() {
return {
isDisabled: false,
imgList: [],
fileObj: null,
videoList: [],
videoSrc: null,
file: null,
dataBuffer: null,
percentage: 0,
isVideoToMp4: false,
isNeedToMp4: false
}
},
watch: {
},
mounted() {
},
methods: {
async uploadVideo(objectName, file) {
try {
this.isDisabled = true
const result = await this.OSSclient.put(objectName, file)
this.$emit('uploadOver', true, result, this.file.name)
} catch (e) {
console.log(e)
this.isDisabled = false
this.$emit('uploadOver', false)
}
},
upload() {
if (document.querySelector('#video').readyState === 0 && document.querySelector('#video').buffered.length === 0) {
this.$alert(this.$t('components:uploadvideo:message:xf2'))
this.isNeedToMp4 = true
return
}
this.uploadVideo(`file/videofile/${this.file.name.split('.')[0]}${new Date().getTime()}.mp4`, this.dataBuffer)
},
async videoToMp4() {
//
// https
if (!window.isSecureContext) {
this.$alert(this.$t('components:uploadvideo:message:xf3'))
return
}
//
if (!window.crossOriginIsolated) {
this.$alert(this.$t('components:uploadvideo:message:xf4'))
return
}
this.$message.success(this.$t('components:uploadvideo:message:xf5'))
if (!ffmpeg.isLoaded()) {
await ffmpeg.load()
}
this.percentage = 0
this.isVideoToMp4 = true
ffmpeg.setProgress(({ ratio }) => {
console.log(ratio)
if (ratio * 100 < 1) {
this.percentage = parseInt(0)
} else {
this.percentage = parseInt(ratio * 100)
}
})
ffmpeg.FS('writeFile', 'input.mp4', await fetchFile(this.videoSrc))
await ffmpeg.run('-i', 'input.mp4', 'output.mp4')
this.videoSrc = null
const data = ffmpeg.FS('readFile', 'output.mp4')
this.dataBuffer = new Blob([data.buffer], { type: 'video/mp4' })
this.$message.success(this.$t('components:uploadvideo:message:xf6'))
setTimeout(() => {
this.videoSrc = URL.createObjectURL(this.dataBuffer)
this.isVideoToMp4 = false
this.isNeedToMp4 = false
process.exit(0)
}, 50)
},
fileChange(e) {
this.videoSrc = null
const files = e.target.files || e.dataTransfer.files
this.file = files[0]
var reader = new FileReader()
reader.readAsArrayBuffer(this.file)
reader.onloadend = async(e) => {
this.dataBuffer = new Blob([e.target.result], { type: 'video/mp4' })
this.videoSrc = URL.createObjectURL(this.dataBuffer)
this.$message.success(this.$t('components:uploadvideo:message:xf7'))
e.target.files = []
}
},
deleteimg(index) {
this.imgList.splice(index, 1)
},
jietu() {
this.screenShot('video')
},
screenShot(id) {
var player = document.getElementById(id)
var canvas = document.createElement('canvas')
var img = document.createElement('img')
canvas.width = player.videoWidth
canvas.height = player.videoHeight
canvas.getContext('2d').drawImage(player, 0, 0, canvas.width, canvas.height)
var dataURL = canvas.toDataURL('image/png')
img.src = dataURL
img.width = player.clientWidth
img.height = player.clientHeight
img.style.objectFit = 'contain'
this.imgList.push(dataURL)
},
downFile(data, fileName) {
var save_link = document.createElementNS(
'http://www.jumi.com',
'a'
)
save_link.href = data
save_link.download = fileName
var event = document.createEvent('MouseEvents')
event.initMouseEvent(
'click',
true,
false,
window,
0,
0,
0,
0,
0,
false,
false,
false,
false,
0,
null
)
save_link.dispatchEvent(event)
}
}
}
</script>
<style lang='scss'>
#cutImage{
img{
}
}
</style>

View File

@ -1,6 +1,5 @@
import { SubjectCheckConfig } from './module/Subject' import { SubjectCheckConfig } from './module/Subject'
console.log(SubjectCheckConfig.moduleType)
export const checkConfig = { export const checkConfig = {
ModuleType: { ModuleType: {
...SubjectCheckConfig.ModuleType ...SubjectCheckConfig.ModuleType

View File

@ -1,6 +1,5 @@
<script> <script>
export default export default {
{
processSignature: { processSignature: {
LogicalConfigConfirmation: 101, // LogicalConfigConfirmation: 101, //
ProcessConfigConfirmation: 102, // ProcessConfigConfirmation: 102, //
@ -9,6 +8,8 @@ export default
ProcessConfigUpdates: 105, // ProcessConfigUpdates: 105, //
ExpeditedConfigUpdates: 106, // ExpeditedConfigUpdates: 106, //
QCConfirmation: 107, // QCConfirmation: 107, //
DicomConfigConfirmation: 110, // DICOM AE
DicomConfigUpdates: 111, // DICOM AE
ClinicalDataConfirmation: 201, // ClinicalDataConfirmation: 201, //
AgreeToRetransmit: 202, // AgreeToRetransmit: 202, //
QCSingleReviewPassed: 203, // QCSingleReviewPassed: 203, //
@ -25,9 +26,9 @@ export default
ImageAssessmentReportConfirmation: 214, // ImageAssessmentReportConfirmation: 214, //
MedicalAuditConfirmation: 109, // MedicalAuditConfirmation: 109, //
ReadingUnitConfirmation: 108, // ReadingUnitConfirmation: 108, //
MedicalAudit: 215,// MedicalAudit: 215, //
HeavyReadingApproval: 216,// HeavyReadingApproval: 216, //
ResetAndAsyncCriterion: 218, // ResetAndAsyncCriterion: 218, //
} },
} };
</script> </script>

Some files were not shown because too many files have changed in this diff Show More