Compare commits

...

464 Commits

Author SHA1 Message Date
wangxiaoshuang 0ce246689b Merge commit '49dcab2a0e6e2b5a2de22a4256ec383b3b9ddb28' into uat
# Conflicts:
#	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/visit/crc-upload/index.vue
#	vue.config.js
2024-05-29 16:19:16 +08:00
caiyiling 49dcab2a0e 非淋巴结靶病灶状态自动赋值逻辑及肿瘤学阅片更改 2024-04-30 12:59:52 +08:00
caiyiling e9188115fc 退回修改用户real name
continuous-integration/drone/push Build is pending Details
2024-04-29 18:10:13 +08:00
caiyiling 264e0ee7c4 美国环境隐藏菜单栏切换语言功能
continuous-integration/drone/push Build is pending Details
2024-04-29 16:58:56 +08:00
caiyiling 434fe551b3 更改用户姓名同步更新缓存中的姓名
continuous-integration/drone/push Build is pending Details
2024-04-29 15:53:28 +08:00
caiyiling cd95f0b018 阅片期临床数据签名成功刷新列表
continuous-integration/drone/push Build is pending Details
2024-04-29 15:29:55 +08:00
caiyiling f16f5adfd6 临床数据配置更改
continuous-integration/drone/push Build is passing Details
2024-04-29 14:33:00 +08:00
caiyiling 26009d0626 全局阅片显示字段调整
continuous-integration/drone/push Build is passing Details
2024-04-29 13:09:29 +08:00
caiyiling ec41415305 随访状态为存在的淋巴结靶病灶保存验证条件更改
continuous-integration/drone/push Build is passing Details
2024-04-29 11:24:29 +08:00
caiyiling 3a4967e6ab Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-04-29 11:06:55 +08:00
caiyiling 384d7197a2 工作台系统文件签署刷新数据 2024-04-29 11:06:23 +08:00
wangxiaoshuang 5a98d503f8 美国环境发布
continuous-integration/drone/push Build is passing Details
2024-04-29 09:37:38 +08:00
caiyiling 782324b19c 系统日志列表设置默认排序 2024-04-28 17:26:14 +08:00
caiyiling 7c7573cdc4 独立阅片人列表调整 2024-04-28 17:09:17 +08:00
caiyiling ff87692f69 看检查级别的影像信息样式调整 2024-04-28 13:45:10 +08:00
caiyiling 1cbe9ce258 医生列表bug修复 2024-04-28 13:40:30 +08:00
caiyiling 3dfa1ae296 页面样式调整 2024-04-28 10:44:37 +08:00
caiyiling f5492e42d5 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-26 17:39:30 +08:00
caiyiling cc0b201036 自定义阅片附件下载 2024-04-26 17:39:10 +08:00
wangxiaoshuang de545a0847 一致性分析操作按钮disabled还原 2024-04-26 16:46:37 +08:00
caiyiling 8a6a7962ae mim项目列表调整 2024-04-26 14:40:56 +08:00
caiyiling 806010c6d4 表格根据列的数量动态固定列 2024-04-26 14:38:49 +08:00
caiyiling e744cbda51 全局、裁判列表展示优化 2024-04-26 14:21:15 +08:00
caiyiling 1e098c44c1 裁判任务表格样式处理 2024-04-26 14:16:45 +08:00
caiyiling 9feb906c3e 医学审核裁判任务列表优化 2024-04-26 13:44:49 +08:00
caiyiling 79a5e67b59 医学审核全局任务列表优化 2024-04-26 13:35:47 +08:00
caiyiling 6c4f022764 医学审核全局任务取消固定操作列 2024-04-26 13:12:01 +08:00
caiyiling 519e1519e2 修改用户名时登出处理 2024-04-25 17:53:46 +08:00
caiyiling 830cd1e93e 删除病灶时,更新FDG-PET评估 2024-04-25 16:09:29 +08:00
caiyiling 1e7237e7ac lugano靶病灶保存如果必填信息填写不全,将滚动条滚到顶部 2024-04-25 15:02:49 +08:00
caiyiling 13ac2e2834 未画标注是,不上传截图 2024-04-25 14:45:45 +08:00
caiyiling 04b22f5b50 自定义标准阅片单元配置优化 2024-04-25 13:15:00 +08:00
caiyiling 8d36fde03d 系统自动保存全局阅片配置时刷新再保存 2024-04-25 11:26:54 +08:00
caiyiling 0680bdf805 全局阅片配置bug修复 2024-04-25 11:25:54 +08:00
caiyiling 88f2c34db9 肝脏及pet5ps逻辑优化 2024-04-24 17:03:27 +08:00
caiyiling 612724cbea 解决未标注病灶信息则不上传截图问题 2024-04-24 16:25:19 +08:00
caiyiling afd362ba72 肝脏评估和PET5PS评估逻辑优化 2024-04-24 15:58:28 +08:00
caiyiling 1825ac34e1 脾脏评估和PET 5PS评估逻辑修改 2024-04-24 12:57:45 +08:00
caiyiling 0e33b60681 国际化处理及阅片单元配置和分配阅片人bug修复 2024-04-23 16:29:01 +08:00
caiyiling 1fdbdc4103 自定义标准获取病灶bug修复及修改用户名登出处理 2024-04-23 16:05:09 +08:00
caiyiling be6fdf2277 退出账号时调用退出接口 2024-04-23 10:11:00 +08:00
caiyiling 96c35e1736 在账号信息修改用户名后,修改前端缓存中的用户信息 2024-04-22 10:17:12 +08:00
caiyiling f3f826d60a 保存病灶只更新SUVmax所在病灶及病灶最大SUV值 2024-04-19 17:06:12 +08:00
caiyiling 300a9ad536 与基线摄取值变化数值维护 2024-04-19 15:57:17 +08:00
caiyiling 5ec96c76bf 多行文本框限制字符长度 2024-04-19 15:46:41 +08:00
caiyiling d96c4c743b 标记定位重复触发代码优化 2024-04-19 15:15:04 +08:00
caiyiling 227f583e7a pet-5ps评分为2分计算规则更改 2024-04-19 11:15:53 +08:00
caiyiling 3646acf378 与基线摄取值变化bug修复 2024-04-19 11:09:16 +08:00
caiyiling 8618b188ae 与基线摄取值变化自动计算逻辑更改 2024-04-18 16:45:45 +08:00
caiyiling 28b644a0ce 靶病灶评估列表下拉框滚动事件优化 2024-04-18 15:57:39 +08:00
caiyiling c886900005 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-18 15:25:09 +08:00
caiyiling 7dbe8c92e1 本地影像预览bug修复 2024-04-18 15:24:45 +08:00
wangxiaoshuang 7623264487 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-04-18 15:02:11 +08:00
wangxiaoshuang db0d5f7ff6 质控临床数据按钮图标更改 2024-04-18 15:01:48 +08:00
caiyiling 1b5c62df75 pet 5ps评分逻辑修改 2024-04-18 14:31:31 +08:00
caiyiling 0ad25e273a pet 5PS评分计算bug修复 2024-04-18 14:29:20 +08:00
caiyiling 437c571b57 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-18 14:26:21 +08:00
caiyiling 138ea2cfb8 提示优化及影像评估设置pet 5PS评分问题修复 2024-04-18 14:25:40 +08:00
wangxiaoshuang 08f0d76aa7 中心调研按钮显示修改 2024-04-18 11:11:03 +08:00
caiyiling 967edf7378 阅片单元同步阅片标准loading加载bug 2024-04-17 10:15:58 +08:00
caiyiling 236f07e46b 接口登出场景补充 2024-04-16 18:00:03 +08:00
caiyiling 6d4ae0a616 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-16 14:20:51 +08:00
caiyiling a576204ac3 lugano标准病灶评估表单滚动时下拉框触发失去焦点事件 2024-04-16 14:19:50 +08:00
wangxiaoshuang fc0ea89d74 访视详情添加检查临床数据查看按钮 2024-04-16 10:33:02 +08:00
caiyiling 7d2fdd222a 影像质量问题为不正常时刷新融合页面 2024-04-15 14:27:15 +08:00
caiyiling 56783a6f3a 非dicom文件预览及阅片结果预览bug修复 2024-04-15 14:09:55 +08:00
caiyiling df6a1cb412 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-15 13:50:07 +08:00
caiyiling cb24021c0d 病灶评估保存时刷新脾脏评估 2024-04-15 13:48:59 +08:00
wangxiaoshuang 917f95030b pet-ct临床数据未上传弹框判断条件更改 2024-04-15 13:47:25 +08:00
wangxiaoshuang bf131e09e4 简历采集跳转路由修改 2024-04-15 13:13:51 +08:00
wangxiaoshuang 17ed3d4dca 简历采集页tab国际化 2024-04-15 11:44:24 +08:00
caiyiling 6fa4a6349c 会话窗口字体颜色调整 2024-04-15 11:28:10 +08:00
caiyiling 2f722f8c0e 待阅和阅片跟踪去除部分排序字段 2024-04-15 11:06:35 +08:00
caiyiling 15a7b6d1ac 登录日志添加登录用户和角色搜索条件 2024-04-15 10:19:20 +08:00
caiyiling 852a794c44 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-15 10:07:04 +08:00
caiyiling 14d71fc3f9 自定义阅片临床数据查看及上传时基线查看访视级别临床数据 2024-04-15 09:21:12 +08:00
wangxiaoshuang c02ce4b350 PET-CT临床数据的上传与临床数据采集Tab的的显示关系 2024-04-12 17:45:42 +08:00
caiyiling 4ca0f35cad 融合页面保存状态去除病灶信息不完整判断 2024-04-12 17:30:45 +08:00
caiyiling 62dd650447 当纵隔或肝脏血池suvmax未发生改变时不计算PET 5PS评分 2024-04-12 17:24:51 +08:00
caiyiling 06761092e3 PET 5PS评分自动计算调整 2024-04-12 16:56:57 +08:00
caiyiling b4f58fddb7 病灶删除不重新获取标注 2024-04-12 15:20:03 +08:00
caiyiling 33e836cd81 脾脏状态备注显隐bug修复 2024-04-12 14:44:56 +08:00
caiyiling 790e828257 会话窗字体颜色调整 2024-04-12 14:02:28 +08:00
caiyiling e7d799ceb5 脾脏评估算法优化 2024-04-12 13:59:00 +08:00
caiyiling 3a69256a04 脾脏评估算法优化:显著增大和部分缓解均增加了当前垂直径>130 mm的条件 2024-04-12 13:58:11 +08:00
caiyiling 425782e015 稽查文件记录及路由跳转查看bug修复 2024-04-12 13:43:43 +08:00
caiyiling db1d2cc4e1 稽查查看图片功能修复 2024-04-12 11:42:42 +08:00
caiyiling 3283f7f5f2 临床数据模板配置校验更改 2024-04-12 10:37:16 +08:00
caiyiling 892b71c011 临床数据配置保存前添加校验 2024-04-11 16:51:51 +08:00
caiyiling 82b3ca055f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-11 15:49:04 +08:00
caiyiling 15cc9c00be dicom上传时排除DICOMDIR文件 2024-04-11 15:48:36 +08:00
wangxiaoshuang 6740e584ae 临床数据访视者级别显示问题 2024-04-11 15:34:46 +08:00
caiyiling d8401d57f7 在阅片人选择影像质量为PET-CT影像无法融合后,保存时,弹框提示 2024-04-11 14:22:04 +08:00
caiyiling c04aaf2db6 有pet影像但无法融合/无法测量的处理 2024-04-11 13:38:42 +08:00
caiyiling c29b60cbbe 修复影像上传页面权限绑定错误问题 2024-04-10 16:45:17 +08:00
caiyiling 6f0cfb0122 修复医学审核页面配置自定义问题保存报错 2024-04-10 15:37:52 +08:00
caiyiling bfdd137cba 密码重置页面验证码验证通过添加提示 2024-04-10 15:21:32 +08:00
caiyiling 15f7e35de5 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-10 15:14:47 +08:00
caiyiling 0accca7ec1 修复部分列表点击重置或排序查询问题 2024-04-10 15:13:28 +08:00
wangxiaoshuang 606d637d21 admin角色去掉中心调研 2024-04-09 11:01:21 +08:00
caiyiling 94e80cbb38 全局任务类型的医学审核任务点击访视名称跳转 2024-04-08 17:11:10 +08:00
caiyiling 63a4a56feb PetCt页面viewport图像以最大的图像张数滚动 2024-04-08 16:39:44 +08:00
caiyiling 55085438aa 同步数据时只刷新病灶列表部分信息 2024-04-08 14:50:47 +08:00
caiyiling c8e7645fa5 阅片页面FDG-PET评估更改 2024-04-08 14:09:29 +08:00
caiyiling 59543a383c 阅片页面ecrf表单更改 2024-04-08 14:03:07 +08:00
caiyiling 92a92ac353 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-08 13:55:34 +08:00
caiyiling 91ee952707 阅片页面ecrf表单保存接口更改 2024-04-08 13:54:42 +08:00
wangxiaoshuang d5cb03209a 阅片期临床数据表格数据为空时tip展示选项内容 2024-04-08 10:39:01 +08:00
caiyiling c2aad16566 流程配置添加阅片标准国际化 2024-04-07 14:29:01 +08:00
caiyiling dd006a6269 系统级别的临床数据不允许编辑 2024-04-07 14:02:47 +08:00
caiyiling 4896aabe3d 临床数据配置更改 2024-04-07 13:55:32 +08:00
caiyiling 8164ef38eb 流程配置阅片标准变化清除临床数据配置 2024-04-07 13:37:01 +08:00
caiyiling 0401a95635 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-07 13:20:24 +08:00
caiyiling b461716195 脾脏状态自动计算调整 2024-04-07 13:20:02 +08:00
wangxiaoshuang ada50a7e73 crc工作台左侧菜单顺序变更 2024-04-03 16:13:46 +08:00
wangxiaoshuang 4f51946c3f 简历采集国际化 2024-04-03 16:13:17 +08:00
caiyiling edfa41291b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-03 14:09:39 +08:00
caiyiling f34de6073f 历史融合弹窗添加取消事件 2024-04-03 14:09:12 +08:00
wangxiaoshuang 1d1805f8cc 自定义标准不添加默认问题 2024-04-03 13:34:03 +08:00
caiyiling 0a56880080 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-03 13:03:13 +08:00
caiyiling bcf69f6194 全局类型的医学审核任务去除操作列固定 2024-04-03 13:02:23 +08:00
wangxiaoshuang 72b7cdbc71 临床数据判断条件变更 2024-04-03 13:01:56 +08:00
wangxiaoshuang 90c1123113 头部名称换行问题解决 2024-04-03 10:27:47 +08:00
caiyiling 6a5f6b0da3 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-02 17:06:24 +08:00
caiyiling 9b601c0f9a 调整工作台一致性核查列表列头间距 2024-04-02 17:05:47 +08:00
wangxiaoshuang fa2bf66dd1 虚拟中心编号添加输入长度限制 2024-04-02 15:15:13 +08:00
caiyiling 7969db76fe 临床数据上传pdf时文件名称添加时间戳 2024-04-01 15:18:29 +08:00
caiyiling 08462786de Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-01 15:17:58 +08:00
caiyiling 990c152a99 临床数据上传pdf文件名称添加时间戳 2024-04-01 15:17:29 +08:00
wangxiaoshuang a00a4957fd Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-04-01 13:57:43 +08:00
wangxiaoshuang 1351a9192c 阅片人筛选,下载简历为空问题修复 2024-04-01 13:57:32 +08:00
caiyiling 51c59a7be9 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-01 13:18:02 +08:00
caiyiling 773aa65116 修复新增reviewer时获取文件信息报错问题 2024-04-01 13:17:20 +08:00
wangxiaoshuang 139e4ab5e2 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-04-01 11:38:02 +08:00
wangxiaoshuang e4fa9c7afd ir项目列表排序报错问题解决 2024-04-01 11:37:55 +08:00
caiyiling aa04344503 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-04-01 11:25:19 +08:00
caiyiling 7278841b0c 阅片页面重载时关闭子页签 2024-04-01 11:24:49 +08:00
wangxiaoshuang a9cbdf9b08 crc加急影像提交菜单位置变更 2024-04-01 11:14:20 +08:00
wangxiaoshuang cafd40d83e iqc项目列表加急量展示字段重复 2024-04-01 11:04:48 +08:00
wangxiaoshuang cdf26294d0 独立阅片人页面,启用按钮的字体颜色修改 2024-04-01 11:04:04 +08:00
wangxiaoshuang a8fa74b270 独立阅片人页面,启用按钮的字体颜色修改 2024-04-01 09:25:45 +08:00
wangxiaoshuang 2c97e1d441 一致性分析导出弹框大小更改 2024-03-29 17:14:42 +08:00
caiyiling d3244cee7c 融合视口显示信息格式优化 2024-03-29 16:22:58 +08:00
caiyiling cd0e62fbef 历史融合按钮调整 2024-03-29 15:02:43 +08:00
caiyiling c0519613e2 待签署系统文件添加获取下一签署文档信息 2024-03-29 14:48:57 +08:00
caiyiling 10ff7f31d8 阅片期访视级别的任务添加检查级别的临床数据 2024-03-29 13:36:50 +08:00
caiyiling 5729f2246e 删除console 2024-03-29 13:01:02 +08:00
caiyiling 7b475b4873 关闭融合页面关闭历史记录页面 2024-03-29 12:56:00 +08:00
caiyiling 12db782153 融合页面显示历史融合记录 2024-03-29 12:16:22 +08:00
caiyiling f4b2c8a6a4 lugano报告页pdd标红 2024-03-29 12:15:27 +08:00
caiyiling 9aaf2e4ad5 融合页面关闭历史记录页面同时关闭 2024-03-29 11:33:23 +08:00
caiyiling 5bcd7cfa59 阅片期临床数据是否完备为否是显示感叹号 2024-03-29 10:36:20 +08:00
caiyiling efa7c61fe4 首次渲染不更新标识优化 2024-03-29 10:20:54 +08:00
caiyiling 82e5142bac 首次渲染不更新保存标识 2024-03-29 10:17:29 +08:00
caiyiling 3083ee1e8b 肝脏血池纵隔血池保存提示 2024-03-29 09:44:16 +08:00
caiyiling c7d362e1d0 消息提示显示时间 2024-03-29 09:23:22 +08:00
caiyiling 1f3cb0284a 保存提示显示时间 2024-03-29 09:14:52 +08:00
caiyiling 431d8a0682 lugano去除提示 2024-03-28 17:53:26 +08:00
caiyiling fe40027765 逻辑配置优化 2024-03-28 17:14:06 +08:00
caiyiling 3eeefaaa2c 检查部位分割格式 2024-03-28 17:02:03 +08:00
caiyiling d4ea8bb4d5 质控提示更改 2024-03-28 16:24:37 +08:00
caiyiling 1812877f88 去除console 2024-03-28 15:38:42 +08:00
caiyiling f5ded882ee Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-28 15:37:39 +08:00
caiyiling 711373075c 脾尖、脾底标注添加限制 2024-03-28 15:37:06 +08:00
wangxiaoshuang afa835e3b9 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-28 14:06:06 +08:00
wangxiaoshuang 06b3632bf8 PET-CT感叹号提示及时更新 2024-03-28 14:06:02 +08:00
caiyiling 1a9f6c37b8 影像视角信息slice Location添加单位 2024-03-28 13:26:36 +08:00
caiyiling 0de0e887b4 影像保存截图文件命名添加时间戳 2024-03-28 13:15:13 +08:00
caiyiling 07a32b9b2a 去除console 2024-03-28 11:39:19 +08:00
caiyiling 7e1165888b 阅片期添加临床数据是否完备字段 2024-03-28 11:19:15 +08:00
caiyiling 0e5d1fb718 病灶历史记录同时只打开一个窗口 2024-03-28 10:53:10 +08:00
caiyiling db7498938f 列表展示信息优化 2024-03-28 10:24:31 +08:00
caiyiling fd5cce0ed9 界面展示信息格式优化 2024-03-28 09:41:42 +08:00
caiyiling 9c16e74d3e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-28 09:31:19 +08:00
caiyiling 88cc255c56 列表展示信息格式优化 2024-03-28 09:30:23 +08:00
wangxiaoshuang 372213c7e5 预览计算问题修改 2024-03-28 08:58:33 +08:00
wangxiaoshuang 0343ba6043 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-28 08:55:13 +08:00
wangxiaoshuang 595da0a7de 预览计算问题修改 2024-03-27 18:06:07 +08:00
caiyiling 4fabe3fa14 影像工具下载图像功能优化 2024-03-27 16:45:09 +08:00
caiyiling c745756c8c 重阅保存表单标记渲染问题修复 2024-03-27 15:09:44 +08:00
caiyiling 6407cd8264 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-27 14:55:05 +08:00
caiyiling f4842ba34d MIP图移除VOLUME_NEW_IMAGE监听事件 2024-03-27 14:54:06 +08:00
wangxiaoshuang 1724e020f6 部分页面添加默认排序规则新增排序字段 2024-03-27 14:39:22 +08:00
wangxiaoshuang 5e2522147f 部分页面添加默认排序规则新增排序字段 2024-03-27 14:32:03 +08:00
wangxiaoshuang 05bc41f5e2 登录日志列表排序变更 2024-03-27 13:58:29 +08:00
wangxiaoshuang 9d47ae2561 提醒窗口多次弹出问题修复 2024-03-27 13:58:07 +08:00
caiyiling 2d94f07796 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-27 11:02:33 +08:00
caiyiling 3ea4617d45 阅片界面样式优化 2024-03-27 11:02:15 +08:00
wangxiaoshuang bbcb092f3e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-26 17:58:41 +08:00
wangxiaoshuang 2cd92b1dcd 一致性分析导出按钮合并 2024-03-26 17:58:30 +08:00
caiyiling 81171f6486 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-26 17:53:01 +08:00
caiyiling 0df518f025 suv测量没有标注时默认激活工具 2024-03-26 17:52:30 +08:00
wangxiaoshuang 0f87682432 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-26 17:31:51 +08:00
wangxiaoshuang e6107ffe70 前端优化 2024-03-26 17:31:01 +08:00
caiyiling 3e24df32f0 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-26 17:11:25 +08:00
caiyiling 9233dff4ba 基线任务不显示历史融合记录 2024-03-26 17:10:51 +08:00
wangxiaoshuang 33f5bcb079 医学审核筛查阅片人排序问题解决 2024-03-26 15:59:53 +08:00
wangxiaoshuang 92d34d59f4 一致性分析操作按钮disabled放开 2024-03-26 15:59:17 +08:00
caiyiling 7db7e91468 流程配置:获取临床数据配置根据阅片标准进行过滤 2024-03-26 14:59:13 +08:00
caiyiling d74a4506c9 旋转拖拽条添加点击事件 2024-03-26 14:38:13 +08:00
caiyiling 956e3b7152 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-26 13:52:02 +08:00
caiyiling 9bc0b7b02a MIP添加旋转拖拽条 2024-03-26 13:51:24 +08:00
wangxiaoshuang 33747d1317 虚拟中心编号修改记录列表样式调整 2024-03-26 12:17:18 +08:00
wangxiaoshuang 88da86504d 未上传临床数据的pet-ct数据添加tip标识 2024-03-26 10:09:34 +08:00
wangxiaoshuang c2dc340a1d 文件水印修改 2024-03-25 16:22:45 +08:00
wangxiaoshuang f17c230267 临床资料详情tip字段替换 2024-03-25 15:43:45 +08:00
wangxiaoshuang 5e56098750 虚拟中心弹框样式优化 2024-03-25 15:12:48 +08:00
wangxiaoshuang eed3cac20e 阅片期临床数据相关功能隐藏 2024-03-25 15:03:11 +08:00
wangxiaoshuang 5df5836571 国际化问题修改 2024-03-25 13:20:50 +08:00
wangxiaoshuang 3fbc2710a3 当上传了pet序列图像时,校验提醒上传PET临床数据 2024-03-25 12:20:41 +08:00
caiyiling 16f943dd50 肿瘤学阅片的医学审核任务列表调整 2024-03-22 17:43:54 +08:00
caiyiling f960eeb445 访视级别的医学审核任务列表调整 2024-03-22 17:35:28 +08:00
caiyiling d18d61ee01 病灶保存状态提示 2024-03-22 16:58:59 +08:00
caiyiling a86c4bdd0e 病灶保存代码优化 2024-03-22 16:52:47 +08:00
caiyiling 83c441b7de 病灶保存提示语优化 2024-03-22 14:00:39 +08:00
caiyiling 49d3247f27 脾脏保存添加提示 2024-03-22 13:49:45 +08:00
caiyiling efc40de310 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-22 13:27:32 +08:00
caiyiling 0cd33687ee 保存评估结果时验证是否有标注测量为完成 2024-03-22 13:26:50 +08:00
caiyiling 994598c216 纵隔血池、肝脏血池、脾尖、脾底标记保存优化 2024-03-22 13:26:04 +08:00
wangxiaoshuang c31a92fbaa 影像质控无后续任务刷新列表 2024-03-21 14:45:59 +08:00
wangxiaoshuang 7bbf60dd7c 影像质控审核判断是否拥有下一任务逻辑变更 2024-03-21 14:15:00 +08:00
caiyiling a51d613633 历史记录融合表单优化 2024-03-20 13:44:27 +08:00
caiyiling 20480cfad6 截图无数据时点击确认关闭当前页签 2024-03-20 10:13:25 +08:00
caiyiling 9577d1d90e lugano病灶标记无截图时添加提示 2024-03-20 10:11:28 +08:00
caiyiling 9fbeb4ce04 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-20 09:53:39 +08:00
caiyiling f34f7a0656 lugano融合添加历史访视融合记录查看 2024-03-20 09:51:37 +08:00
wangxiaoshuang ee049b4017 一致性分析即首次自身/组间一致性分析时虚拟中心编号可编辑 2024-03-20 09:21:11 +08:00
wangxiaoshuang d5594e87b2 一致性分析即首次自身/组间一致性分析时虚拟中心编号可编辑 2024-03-19 17:45:32 +08:00
wangxiaoshuang 3524e7730c 中心调研审核提示信息修改 2024-03-19 12:14:53 +08:00
caiyiling 18c31112b3 lugano病灶分裂代码优化 2024-03-19 09:22:58 +08:00
caiyiling 0ae82ff145 分裂后PPD计算 2024-03-18 17:35:27 +08:00
caiyiling af9ad72798 分裂主病灶状态计算逻辑优化 2024-03-18 17:26:24 +08:00
caiyiling dc6340f65c slice location显示值根据项目标准配置的保留小数位数进行处理 2024-03-18 16:06:38 +08:00
caiyiling cd45362a07 第一个标记渲染时,不触发更新 2024-03-18 15:53:29 +08:00
caiyiling a048572403 lugano病灶截图预览路径由绝对路径改为相对路径 2024-03-18 15:05:07 +08:00
caiyiling 766a2a786f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-18 13:57:16 +08:00
caiyiling 0cca8f71b4 lugano标准病灶列表添加既往标记截图预览 2024-03-18 13:55:56 +08:00
wangxiaoshuang 76392409f6 医院修改中英文自动带入 2024-03-18 13:12:43 +08:00
caiyiling a298048ed0 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-18 11:05:16 +08:00
caiyiling b6f46cec28 lugano标准病灶分裂,分裂病灶状态计算疾病进展逻辑更改 2024-03-18 11:04:02 +08:00
wangxiaoshuang 94b0aeb239 取消console 2024-03-18 11:01:54 +08:00
wangxiaoshuang ce5bbaaa4a 简历工作信息部分中英文切换问题修改 2024-03-18 11:01:09 +08:00
熊飞 482d37b4cf Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-16 14:50:05 +08:00
熊飞 531c2a5146 是否测试用户反向 2024-03-16 14:49:57 +08:00
wangxiaoshuang eb4d058c8a 分配角色去除GR,部分代码优化 2024-03-15 10:33:57 +08:00
熊飞 c09b1a2322 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-15 10:07:59 +08:00
熊飞 40f142e1d2 上传路径 2024-03-15 10:07:52 +08:00
wangxiaoshuang c266b9fcf1 版本日期修改 2024-03-15 08:59:20 +08:00
熊飞 586d406b4a 工作台限制我的项目进入 2024-03-14 17:58:27 +08:00
熊飞 54efc9b1ed Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-14 17:34:56 +08:00
熊飞 f487792d8e IQC去除语言 2024-03-14 17:34:49 +08:00
wangxiaoshuang 4290f51ce1 医学审核问题配置表格高度调整 2024-03-14 17:18:37 +08:00
wangxiaoshuang c08db443c9 医学审核问题配置按钮位置调整 2024-03-14 17:03:01 +08:00
wangxiaoshuang 9fc1628cce 中心人员列表授权时间字段变更 2024-03-14 16:42:47 +08:00
wangxiaoshuang 77e1eba8d5 pm阅片人筛选部分信息添加间隔 2024-03-14 15:43:17 +08:00
caiyiling b707c09d2d 添加获取病灶历史记录截图接口 2024-03-14 15:32:08 +08:00
caiyiling b195e6d7ce Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-14 15:31:54 +08:00
caiyiling 8c38700b51 病灶查看suv测量历史截图 2024-03-14 15:22:52 +08:00
wangxiaoshuang a675d5d79e pm阅片人筛选部分信息添加间隔 2024-03-14 15:04:15 +08:00
wangxiaoshuang 54c7bb055a 工作台中心调研数量分角色统计 2024-03-14 14:58:30 +08:00
wangxiaoshuang 9a63a206d5 项目配置检查部位和检查技术全选标识问题修复 2024-03-14 14:44:15 +08:00
熊飞 dfaa255427 IQC去除语言 2024-03-14 14:39:25 +08:00
熊飞 7f9589427f 一致性核查默认值 2024-03-14 14:11:51 +08:00
wangxiaoshuang 145655f8fc spm工作台添加中心调研入口 2024-03-14 14:09:03 +08:00
wangxiaoshuang eadd5b0223 spm阅片人筛选信息展示添加空格 2024-03-14 13:54:16 +08:00
wangxiaoshuang 46ea20a9f5 【阅片任务分配】增加筛选条件,取消筛选条件限制 2024-03-14 13:49:38 +08:00
wangxiaoshuang 37c415c0ef 【阅片任务分配】增加筛选条件 2024-03-14 11:09:48 +08:00
wangxiaoshuang 84ade87b25 【阅片任务分配】增加筛选条件 2024-03-14 10:59:42 +08:00
wangxiaoshuang 157b65c507 ea、qa权限配置 2024-03-14 10:23:26 +08:00
wangxiaoshuang 68ea60857d ea权限配置 2024-03-14 09:27:06 +08:00
熊飞 78685918a9 工作台用户名 2024-03-13 17:50:33 +08:00
熊飞 56a8e738d3 工作台用户名 2024-03-13 16:38:33 +08:00
熊飞 ccf5830fa0 工作台用户名 2024-03-13 16:21:49 +08:00
熊飞 c73c84b15d 工作台用户名 2024-03-13 15:49:48 +08:00
熊飞 d131953beb 工作台用户名 2024-03-13 14:45:43 +08:00
熊飞 6e4a674b62 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-13 14:28:19 +08:00
熊飞 3b7f141956 工作台用户名 2024-03-13 14:28:09 +08:00
caiyiling c114f1bb23 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-13 13:54:52 +08:00
caiyiling d9b5d76ac7 病灶标记截图更改 2024-03-13 13:54:22 +08:00
熊飞 53dc05a48c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-13 13:31:06 +08:00
熊飞 e457df9325 上传进度条处理 2024-03-13 13:28:35 +08:00
caiyiling 72c6b433b6 修改长短径工具标注信息 2024-03-13 13:18:08 +08:00
caiyiling 5edd252a12 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-13 11:48:47 +08:00
caiyiling e96a4a4d7b 影像融合时,显示的访视及检查信息与当前高亮窗口一致 2024-03-13 11:47:14 +08:00
熊飞 f126d8c40b 组间一致性 原阅片人字段 2024-03-13 11:13:52 +08:00
熊飞 d15eab1a8e 1 2024-03-13 11:07:40 +08:00
熊飞 3fb2c5ca40 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-13 10:50:34 +08:00
熊飞 8afaf8a39e 1 2024-03-13 10:50:24 +08:00
caiyiling 9827baf122 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-13 09:31:30 +08:00
caiyiling ae77e4f048 脾尖、脾底标记命名更改 2024-03-13 09:30:49 +08:00
熊飞 0928fef04c 工作台改版 2024-03-12 18:02:48 +08:00
熊飞 d91f07bba6 工作台改版 2024-03-12 17:40:07 +08:00
熊飞 2ff15bc2b8 工作台改版 2024-03-12 17:09:37 +08:00
熊飞 f66f0da07e 工作台改版 2024-03-12 16:46:56 +08:00
熊飞 661f0e5dfb 工作台改版 2024-03-12 16:36:52 +08:00
熊飞 a4070374c6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-12 16:14:00 +08:00
熊飞 9aa68bf5f4 阅片单元配置 2024-03-12 16:13:53 +08:00
caiyiling 88887e5d92 lugano表单提交按钮未更改信息时禁用 2024-03-12 16:02:50 +08:00
caiyiling 437e224f1a Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-12 15:41:34 +08:00
caiyiling 22e22c3901 脾脏垂直径测量 2024-03-12 15:41:16 +08:00
熊飞 73a054ad27 邮箱@被转%40的bug解决 2024-03-12 15:29:37 +08:00
熊飞 4fff154ad6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-12 15:19:43 +08:00
熊飞 6914926567 工作台改版 2024-03-12 15:19:36 +08:00
caiyiling 998c8bc701 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-12 14:10:00 +08:00
caiyiling 058bf39c6e 添加关闭页签的请求标识 2024-03-12 14:09:26 +08:00
熊飞 727d4f8c19 工作台改版 2024-03-12 11:26:01 +08:00
熊飞 277ffa5def 工作台改版 2024-03-12 09:25:26 +08:00
熊飞 283533ff6d 工作台改版 2024-03-11 18:22:04 +08:00
熊飞 70adad29e4 工作台改版 2024-03-11 18:15:09 +08:00
熊飞 195c176c34 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-11 17:54:09 +08:00
熊飞 0ac75d7c44 工作台改版 2024-03-11 17:54:02 +08:00
caiyiling c23e9fb081 医学审核任务布局调整 2024-03-11 15:52:21 +08:00
caiyiling 2a4ddaf6f2 非表格问题清除病灶,添加定位及确认提示 2024-03-11 14:51:18 +08:00
caiyiling f67a5a9f43 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-11 14:06:50 +08:00
caiyiling d0e67f6937 suv测量工具默认激活 2024-03-11 14:05:28 +08:00
熊飞 c3a0d3e361 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-11 13:32:59 +08:00
熊飞 64691a2833 工作台待办任务换行 2024-03-11 13:32:52 +08:00
caiyiling 10fdbc427d 报告页查看历史影像 2024-03-11 11:08:31 +08:00
caiyiling 313bc28a96 bug修复 2024-03-11 10:53:16 +08:00
caiyiling ebddc9beb2 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-11 09:09:58 +08:00
caiyiling b2290ca739 脾脏状态计算更改 2024-03-11 09:09:33 +08:00
熊飞 81bc7f281d 工作台待办任务换行 2024-03-08 17:27:00 +08:00
熊飞 451fa0078d 工作台待办任务换行 2024-03-08 17:17:02 +08:00
熊飞 5d113f128f 工作台待办任务换行 2024-03-08 17:02:37 +08:00
熊飞 ad99367224 工作台待办任务换行 2024-03-08 16:42:16 +08:00
熊飞 8dedf6ee42 工作台待办任务换行 2024-03-08 15:01:06 +08:00
熊飞 f413ca60f3 工作台待办任务换行 2024-03-08 15:00:37 +08:00
熊飞 2ed3dd1376 工作台待办任务换行 2024-03-08 14:30:33 +08:00
熊飞 d5e41679c4 工作台待办任务换行 2024-03-08 13:56:52 +08:00
熊飞 0728220a2d 工作台待办任务换行 2024-03-08 13:29:52 +08:00
熊飞 15f0154b5d 工作台待办任务换行 2024-03-08 13:18:28 +08:00
熊飞 8ec94d0fa5 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-08 13:05:38 +08:00
熊飞 b574da9edf 国际化修改 2024-03-08 13:05:33 +08:00
caiyiling c559ff52b5 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-08 11:06:21 +08:00
caiyiling ab0744d550 基线摄取值变化 2024-03-08 11:05:59 +08:00
熊飞 80b4f123f8 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-08 10:07:42 +08:00
熊飞 25c14bc463 AWS 2024-03-08 10:07:35 +08:00
caiyiling cbec716a6d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-08 09:59:20 +08:00
caiyiling 2dc2383d9d 影像融合布局调整及国际化处理 2024-03-08 09:58:45 +08:00
熊飞 c1c52f007f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-07 17:45:21 +08:00
熊飞 299995dd09 中心医院关系 2024-03-07 17:45:15 +08:00
caiyiling aea1bf16bf lugano全局阅片列宽调整 2024-03-07 17:41:20 +08:00
caiyiling 6fa98f8deb Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-07 17:35:28 +08:00
caiyiling 2aef040a34 自动计算与基线相比摄取值变化 2024-03-07 17:33:39 +08:00
熊飞 2d50b6f320 临床数据PDF模版下载 2024-03-07 15:31:11 +08:00
熊飞 3fcefdb1f4 工作台 2024-03-07 15:10:04 +08:00
熊飞 f3c992bfc9 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-07 13:46:25 +08:00
熊飞 84ada9bc73 医学审核 2024-03-07 13:46:18 +08:00
caiyiling c34146ae76 医学审核签名保存 2024-03-07 13:37:29 +08:00
caiyiling ef4fab35b4 医学审核跳过任务 2024-03-07 13:34:00 +08:00
caiyiling 265f8771f5 国际化 2024-03-07 11:25:54 +08:00
caiyiling 48f3d4e40c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-07 10:09:01 +08:00
caiyiling bd0f07aaed 全局阅片添加截止访视信息 2024-03-07 10:08:38 +08:00
熊飞 644cca6d0f 一致性分析 2024-03-06 17:50:50 +08:00
熊飞 0977570575 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-06 17:29:20 +08:00
熊飞 5acac110b1 一致性分析 2024-03-06 17:29:13 +08:00
caiyiling 7308f43f81 融合列表样式调整 2024-03-06 17:16:13 +08:00
caiyiling 22c9732382 融合界面国际化及布局调整 2024-03-06 17:12:15 +08:00
caiyiling 1154c700c3 医学审核布局调整 2024-03-06 16:53:05 +08:00
caiyiling 10a1238ab5 医学审核国际化 2024-03-06 16:09:24 +08:00
caiyiling 5782fa5f38 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-06 15:09:47 +08:00
caiyiling 8c5a364d23 医学审核优化 2024-03-06 15:09:33 +08:00
熊飞 ccb6aed115 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-06 14:19:08 +08:00
熊飞 a048167ab0 1 2024-03-06 14:19:03 +08:00
caiyiling d42bb57ee4 优化代码 2024-03-06 14:03:38 +08:00
caiyiling 91fee13101 优化代码 2024-03-06 13:58:19 +08:00
caiyiling d14b23761b 优化融合页面下载影像 2024-03-06 13:55:05 +08:00
caiyiling 1d3fa6a837 阅片期bug修复 2024-03-06 11:09:08 +08:00
caiyiling fb79702a65 融合病灶在后续访视添加标注 2024-03-05 17:35:52 +08:00
caiyiling d95e0958eb 融合病灶在后续访视添加标注 2024-03-05 17:20:10 +08:00
caiyiling b8384d111a 医学审核优化 2024-03-04 17:56:51 +08:00
caiyiling 2ba19fd395 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-04 17:56:22 +08:00
caiyiling 5859102225 医学审核优化 2024-03-04 17:55:47 +08:00
熊飞 19bc56bb66 国际化内容 2024-03-04 14:43:15 +08:00
熊飞 4d63318d8b 1 2024-03-01 15:14:00 +08:00
熊飞 7101276aab 工作台改版 2024-03-01 14:53:13 +08:00
熊飞 ee20254cf8 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-03-01 13:33:44 +08:00
熊飞 bd024773bd 工作台改版 2024-03-01 13:33:37 +08:00
caiyiling de40cb6ec5 医学审核样式修改 2024-03-01 09:47:55 +08:00
caiyiling c197e22f92 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-03-01 09:28:27 +08:00
caiyiling 8512b91ebd 肿瘤学bug修复 2024-03-01 09:27:49 +08:00
熊飞 0b82a73c9c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-02-29 17:06:57 +08:00
熊飞 e7842282bf 工作台改版 2024-02-29 17:06:50 +08:00
caiyiling 9c4fc174d0 肿瘤学阅片bug修复 2024-02-29 15:22:04 +08:00
caiyiling 196dd3de92 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-02-29 14:25:09 +08:00
caiyiling f21d8871b5 阅片完成隐藏分裂融合 2024-02-29 14:24:45 +08:00
熊飞 95de39abcd Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-02-29 10:14:12 +08:00
熊飞 4f9022a18e 系统字典 2024-02-29 10:14:04 +08:00
caiyiling 62b69e8591 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-02-29 09:26:31 +08:00
caiyiling 6a4bffd8ab 非靶病灶分裂样式调整 2024-02-29 09:26:10 +08:00
熊飞 b2965e8c69 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-02-28 17:00:02 +08:00
熊飞 d3a88c0f55 配置 2024-02-28 16:59:57 +08:00
caiyiling 6cd8d2de5c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-02-28 14:14:47 +08:00
caiyiling 74a8fa2524 lugano病灶保存验证 2024-02-28 14:14:23 +08:00
熊飞 1bbdf57fdb bug修复 2024-02-27 17:54:01 +08:00
熊飞 66c586009e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-02-27 16:43:44 +08:00
熊飞 d224bf8700 bug修复 2024-02-27 16:43:38 +08:00
caiyiling 29e535a10a lugano病灶保存 2024-02-27 15:42:47 +08:00
caiyiling 1b905f1f9d 1 2024-02-27 15:10:41 +08:00
caiyiling 30c411d03f lugano病灶保存 2024-02-27 15:01:59 +08:00
caiyiling 6eb8957d1c lugano病灶保存提示 2024-02-27 14:05:00 +08:00
caiyiling 47288bcca0 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-02-27 14:03:48 +08:00
caiyiling 95d1207a45 lugano病灶保存提示 2024-02-27 14:02:54 +08:00
熊飞 33be113d8d 系统问题配置 2024-02-27 13:27:08 +08:00
熊飞 ad7b9054da 1 2024-02-27 13:26:14 +08:00
caiyiling f6eab06c78 suv测量工具优化 2024-02-26 17:23:16 +08:00
caiyiling ef732066f4 lugano suv测量工具更改 2024-02-26 13:25:14 +08:00
熊飞 82c80b71cc 阅片滑块在canvas外滑动 2024-02-23 17:15:42 +08:00
熊飞 ae69036777 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-02-23 17:14:46 +08:00
熊飞 c1008810d6 阅片滑块在canvas外滑动 2024-02-23 17:14:39 +08:00
caiyiling 0c4065102c lugano病灶融合 2024-02-23 14:46:54 +08:00
caiyiling c1faaf9ef0 lugano病灶融合 2024-02-23 14:35:55 +08:00
caiyiling 770df06c88 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-02-23 14:33:17 +08:00
caiyiling fcc239b54e lugano病灶融合 2024-02-23 14:33:01 +08:00
熊飞 2cc0b81c90 复制稽查记录 2024-02-23 14:27:02 +08:00
熊飞 e9a4509ced Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-02-23 13:09:57 +08:00
熊飞 ce3065d88f 切换国际化刷新 2024-02-23 13:09:50 +08:00
caiyiling f0dd5398c8 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-02-23 13:00:52 +08:00
caiyiling c1a9e848b0 lugano病灶融合 2024-02-23 12:59:42 +08:00
熊飞 89eaccf1c2 添加英文logo 2024-02-23 11:08:39 +08:00
熊飞 791746097d 添加英文logo 2024-02-23 10:50:25 +08:00
熊飞 1bf99379a8 1 2024-02-23 10:49:44 +08:00
熊飞 1cb52de265 去除MIM导表按钮 2024-02-23 10:27:40 +08:00
熊飞 0d9fabb596 修改邮箱修改按钮不能点 2024-02-23 10:07:15 +08:00
熊飞 101dd3210e 稽查二级页面空白处理 2024-02-23 09:50:37 +08:00
熊飞 6c0f148a77 稽查二级页面空白处理 2024-02-22 17:18:51 +08:00
熊飞 05cdf17282 稽查二级页面空白处理 2024-02-22 17:09:21 +08:00
熊飞 89f924d077 切换国际化刷新 2024-02-22 17:05:34 +08:00
熊飞 fa831ed6cc 1 2024-02-22 13:25:51 +08:00
熊飞 b9eaab1900 1 2024-02-22 09:58:33 +08:00
熊飞 ee15957aa7 空格问题 2024-02-22 09:47:04 +08:00
熊飞 f30e859e33 国际化问题 2024-02-22 09:44:40 +08:00
熊飞 949a09ac50 国际化问题 2024-02-21 16:52:16 +08:00
熊飞 e3ffd6d6c9 国际化问题 2024-02-21 16:44:13 +08:00
熊飞 8085585cfa 国际化问题 2024-02-21 16:41:11 +08:00
熊飞 d8cd8d336d 国际化问题 2024-02-21 16:22:13 +08:00
熊飞 8d9790f68e 国际化问题 2024-02-21 16:19:24 +08:00
熊飞 a1dc9e4031 国际化问题 2024-02-21 16:00:17 +08:00
熊飞 734e574713 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-02-21 15:43:37 +08:00
熊飞 9033119fb1 国际化问题 2024-02-21 15:43:31 +08:00
caiyiling 59b36aee8b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-02-21 13:29:31 +08:00
caiyiling c5f86d0557 被融合的病灶在下次随访任务状态为消失且不能再操作 2024-02-21 13:28:38 +08:00
熊飞 f09901bcf6 1 2024-02-21 10:48:08 +08:00
熊飞 80597d1f98 1 2024-02-21 10:41:24 +08:00
熊飞 b56f3f1eb7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-02-21 09:57:05 +08:00
熊飞 7e39c67fc2 1 2024-02-21 09:56:55 +08:00
caiyiling d995e1f729 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-02-21 09:11:27 +08:00
caiyiling 246e9a5bbd 弹窗布局调整 2024-02-21 09:10:41 +08:00
熊飞 dc60128cae 国际化问题 2024-02-20 17:11:51 +08:00
熊飞 052fdbcdbf 国际化问题 2024-02-20 16:49:59 +08:00
caiyiling 9929045d4b 添加融合标识 2024-02-20 16:37:11 +08:00
caiyiling 893a528bfc Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2024-02-20 15:54:42 +08:00
caiyiling 6e95127522 lugano病灶融合 2024-02-20 15:54:22 +08:00
熊飞 9906f44677 Go to next document?国际化 2024-02-20 11:44:34 +08:00
熊飞 4de108cd42 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web 2024-02-20 11:41:15 +08:00
熊飞 be96b2e93e 滑块跳动 2024-02-20 11:41:08 +08:00
caiyiling ee8b630806 lugano病灶分裂 2024-02-20 10:06:30 +08:00
熊飞 6778784111 1
continuous-integration/drone/push Build is passing Details
2024-02-05 09:52:06 +08:00
熊飞 6a8308fe5f 1 2024-02-05 09:51:03 +08:00
caiyiling 227009eb39 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details
2024-02-05 09:44:00 +08:00
caiyiling f09bf427e5 临床数据图标 2024-02-05 09:43:42 +08:00
熊飞 2a6d0faf11 1
continuous-integration/drone/push Build is passing Details
2024-02-05 09:25:14 +08:00
熊飞 61993e331b 1
continuous-integration/drone/push Build is passing Details
2024-02-04 18:01:33 +08:00
熊飞 ddd7e4638c 1 2024-02-04 18:00:34 +08:00
276 changed files with 15873 additions and 7945 deletions

View File

@ -27,7 +27,7 @@ VUE_APP_LOGOUT_FOR_PERMISSION = false
VUE_APP_LOGOUT_FOR_TIME = 1800
# 是否开启密码正则验证 true:是 false:否
VUE_APP_PASSWORD_FOR_PERMISSION = true
VUE_APP_PASSWORD_FOR_PERMISSION = false
# 密码校验规则
VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$
@ -35,6 +35,9 @@ VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!
# 是否开启文档签署验证 true:是 false:否
VUE_APP_WORD_FOR_PERMISSION = false
# 公司名称
VUE_APP_COMPANY_NAME = "Extensive Imaging"
# dicom文件地址
VUE_APP_DICOM_PATH = 'https://zyypacs.oss-cn-shanghai.aliyuncs.com'

View File

@ -29,6 +29,9 @@ VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!
# 是否开启文档签署验证 true:是 false:否
VUE_APP_WORD_FOR_PERMISSION = true
# 公司名称
VUE_APP_COMPANY_NAME = "Extensive Imaging"
# dicom文件地址
# VUE_APP_DICOM_PATH = 'http://101.132.193.237:7080'
VUE_APP_DICOM_PATH = 'https://zyypacs-prod.oss-cn-shanghai.aliyuncs.com'

View File

@ -31,6 +31,9 @@ VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!
# 是否开启文档签署验证 true:是 false:否
VUE_APP_WORD_FOR_PERMISSION = true
# 公司名称
VUE_APP_COMPANY_NAME = "Extensive Imaging"
# dicom文件地址
VUE_APP_DICOM_PATH = 'https://zyypacs-uat.oss-cn-shanghai.aliyuncs.com'

View File

@ -2,7 +2,7 @@
ENV = 'production'
NODE_ENV = 'production'
# base public path
VUE_APP_BASE_PATH = 'https://ei-code-prod.s3.amazonaws.com/2024-01-31/'
VUE_APP_BASE_PATH = 'https://ei-code-prod.s3.amazonaws.com/2024-04-29/'
# 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = false
@ -28,6 +28,9 @@ VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!
# 是否开启文档签署验证 true:是 false:否
VUE_APP_WORD_FOR_PERMISSION = true
# 公司名称
VUE_APP_COMPANY_NAME = "Elevate Imaging"
# dicom文件地址
VUE_APP_DICOM_PATH = 'https://zyypacs-usa.oss-us-west-1.aliyuncs.com'

9
package-lock.json generated
View File

@ -11520,6 +11520,15 @@
"resolved": "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz",
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
},
"moment-timezone": {
"version": "0.5.45",
"resolved": "https://registry.npmmirror.com/moment-timezone/-/moment-timezone-0.5.45.tgz",
"integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==",
"dev": true,
"requires": {
"moment": "^2.29.4"
}
},
"move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz",

View File

@ -2,7 +2,7 @@
"name": "EICS",
"version": "1.3.2",
"scripts": {
"dev": "vue-cli-service serve --open",
"dev": "vue-cli-service serve --open --mode development",
"build": "vue-cli-service build",
"build:prod": "vue-cli-service build --mode prod",
"build:uat": "vue-cli-service build --mode uat",
@ -83,6 +83,7 @@
"eslint-plugin-vue": "^6.2.2",
"html-webpack-plugin": "3.2.0",
"minio": "^7.1.3",
"moment-timezone": "^0.5.45",
"node-xlsx": "^0.21.0",
"runjs": "^4.3.2",
"script-ext-html-webpack-plugin": "2.1.3",

View File

@ -148,8 +148,8 @@ export default {
} else {
this.tableData = Object.assign([], this.arr)
}
console.log(JSON.stringify(this.$path))
console.log(JSON.stringify(this.tableData))
// console.log(JSON.stringify(this.$path))
// console.log(JSON.stringify(this.tableData))
}
}
}

View File

@ -22,9 +22,9 @@ export function getBasicDataSelects(param) {
})
}
export function getBasicDataAllSelect(params) {
export function getBasicDataAllSelect(params, isSystem) {
return request({
url: params ? `/Dictionary/getBasicDataAllSelect?TrialReadingCriterionId=${params}` : `/Dictionary/getBasicDataAllSelect`,
url: params ? (isSystem ? `/Dictionary/getBasicDataAllSelect?SystemReadingCriterionId=${params}` : `/Dictionary/getBasicDataAllSelect?TrialReadingCriterionId=${params}`) : `/Dictionary/getBasicDataAllSelect`,
method: 'get'
})
}

View File

@ -1747,6 +1747,21 @@ export function deleteTrialExternalUser(id) {
method: 'delete'
})
}
export function getUserTobeDoneRecord() {
return request({
url: `/PersonalWorkstation/getUserTobeDoneRecord`,
method: 'get'
})
}
export function getNeedSignTrialDocTrialIdList() {
return request({
url: `/PersonalWorkstation/getNeedSignTrialDocTrialIdList`,
method: 'get'
})
}
export function getBasicStat() {
return request({
url: `/PersonalWorkstation/getBasicStat`,
@ -2795,6 +2810,29 @@ export function saveImageQuality(param) {
data: param
})
}
export function getIsSuvMaxLesion(param) {
return request({
url: `/LuganoCalculate/getIsSuvMaxLesion`,
method: 'post',
data: param
})
}
export function getCanChooseNotMerge(param) {
return request({
url: `/LuganoCalculate/getCanChooseNotMerge`,
method: 'post',
data: param
})
}
export function saveTaskQuestion(saveQuestionType, param) {
return request({
url: `/SaveTaskQuestion/${saveQuestionType}`,
method: 'post',
data: param
})
}
export function deleteReadingRowAnswer(param) {
return request({
url: `/ReadingImageTask/deleteReadingRowAnswer`,
@ -2864,6 +2902,14 @@ export function asyncTrialCriterionDictionary(param) {
})
}
export function configTrialProcessInfoVerification(param) {
return request({
url: `/TrialConfig/configTrialProcessInfoVerification`,
method: 'post',
data: param
})
}
export function getTrialEmailNoticeConfigList(param) {
return request({
url: `/TrialEmailNoticeConfig/getTrialEmailNoticeConfigList`,
@ -3519,3 +3565,105 @@ export function getTrialSiteSurveySelectList(param) {
data: param
})
}
export function getCanMergeLesion(param) {
return request({
url: `/ReadingImageTask/getCanMergeLesion`,
method: 'post',
data: param
})
}
export function mergeLesion(param) {
return request({
url: `/ReadingImageTask/mergeLesion`,
method: 'post',
data: param
})
}
export function resetAndAsyncCriterion(param) {
return request({
url: `/Inspection/ReadingCriterion/ResetAndAsyncCriterion`,
method: 'post',
data: param
})
}
export function batchSetCriterionJoinJoinAnalysis(param) {
return request({
url: `/DoctorWorkload/batchSetCriterionJoinJoinAnalysis`,
method: 'post',
data: param
})
}
export function updateTrialVirtualSiteCode(param) {
return request({
url: `/TaskConsistentRule/updateTrialVirtualSiteCode`,
method: 'post',
data: param
})
}
export function getUpdateVirtualSiteCodeList(param) {
return request({
url: `/TaskConsistentRule/getUpdateVirtualSiteCodeList?trialId=${param.trialId}`,
method: 'get'
})
}
export function addDefaultQuestions(param) {
return request({
url: `/ReadingMedicineQuestion/addDefaultQuestions`,
method: 'post',
data: param
})
}
export function getReadingCalculationData(param) {
return request({
url: `/ReadingImageTask/getReadingCalculationData`,
method: 'post',
data: param
})
}
export function getTrialSignDocumentList(param) {
return request({
url: `/TrialDocument/getTrialSignDocumentList`,
method: 'post',
data: param
})
}
export function getPreviousOtherPicturePath(param) {
return request({
url: `/ReadingImageTask/getPreviousOtherPicturePath`,
method: 'post',
data: param
})
}
export function verifyIsCanConfirm(param) {
return request({
url: `/ReadingMedicineQuestion/verifyIsCanConfirm`,
method: 'post',
data: param
})
}
export function getPTAndCtSeries(param) {
return request({
url: `/SubjectVisit/getPTAndCtSeries`,
method: 'post',
data: param
})
}
export function getDicomSeriesInfo(param) {
return request({
url: `/SubjectVisit/getDicomSeriesInfo`,
method: 'post',
data: param
})
}

View File

@ -7,7 +7,12 @@ export function login(data) {
data
})
}
export function loginOut() {
return request({
url: `/User/loginOut`,
method: 'get'
})
}
export function getAllDictionary() {
return request({
url: '/dictionary/getAllDictionary',

BIN
src/assets/pic-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
src/assets/zzlogo4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -2,13 +2,13 @@
<template>
<div class="trialsTab">
<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" :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-tab-pane
v-for="item1 of item.children"
v-if="TrialConfig && isShow(item1.path)"
:key="`tab1${item1.path}`"
:disabled="TotalNeedSignTrialDocCount !== 0 || (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)"
:name="item1.path"
/>

View File

@ -14,8 +14,8 @@
:on-exceed="handleExceed"
accept=".pdf"
>
<el-button size="small" type="primary" :disabled="btnDisabled || $route.query.ReviewStatus === '1'" >Upload</el-button>
<span slot="tip" class="el-upload__tip">(must be in pdf format. 1/2 pages, please confirm information integrity)</span>
<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>
</el-upload>
</div>
</template>
@ -45,6 +45,7 @@ export default {
},
methods: {
initFileList() {
if(!this.doctorId) return
getAttachmentByType(this.doctorId, this.type)
.then(res => {
if (res.IsSuccess) {
@ -129,7 +130,7 @@ export default {
this.fileList = []
this.$emit('getFileList', '', '')
this.$message({
message: 'Deleted successfully!',
message: this.$t('common:message:deletedSuccessfully'),
type: 'success'
})
}

View File

@ -9,7 +9,7 @@
:file-list="fileList"
:accept="accept"
>
<el-button size="small" type="primary" :disabled="isDisabled">Upload</el-button>
<el-button size="small" type="primary" :disabled="isDisabled">{{ $t('common:button:upload') }}</el-button>
</el-upload>
</div>
</template>
@ -39,6 +39,7 @@ export default {
}
},
mounted() {
if(!this.doctorId) return
this.initFileList()
},
methods: {
@ -143,8 +144,7 @@ export default {
this.$confirm('Sure to remove?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
}).then(() => {
deleteAttachment(file.Id, file.Path)
.then(res => {
@ -152,7 +152,7 @@ export default {
this.fileList.splice(this.fileList.findIndex(item => item.Id === file.Id), 1)
this.$emit('getFileList', this.fileList)
this.$message({
message: 'Deleted successfully!',
message: this.$t('common:message:deletedSuccessfully'),
type: 'success'
})
}

View File

@ -64,7 +64,7 @@
</template>
</el-table-column>
<el-table-column
v-if="hasPermi(['trials:trials-panel:visit:crc-upload:upload']) && allowAddOrEdit"
v-if="hasPermi(['trials:trials-panel:visit:crc-upload:edit']) && allowAddOrEdit"
:label="$t('common:action:action')"
min-width="120"
>
@ -81,7 +81,6 @@
<!-- 移除 -->
<el-button
v-if="(data.SubmitState*1 < 2 || (data.SubmitState === 2 && data.IsQCConfirmedReupload))"
v-hasPermi="['trials:trials-panel:visit:crc-upload:upload']"
icon="el-icon-delete"
circle
:title="$t('common:button:delete')"
@ -127,7 +126,7 @@
</el-table-column>
<el-table-column
v-if="hasPermi(['trials:trials-panel:visit:crc-upload:upload']) && allowAddOrEdit"
v-if="hasPermi(['trials:trials-panel:visit:crc-upload:edit']) && allowAddOrEdit"
:label="$t('common:action:action')"
min-width="200"
>
@ -144,7 +143,6 @@
<!-- 移除 -->
<el-button
v-if="data.SubmitState*1 < 2 || (data.SubmitState === 2 && data.IsQCConfirmedReupload)"
v-hasPermi="['trials:trials-panel:visit:crc-upload:upload']"
icon="el-icon-delete"
circle
:title="$t('common:button:delete')"
@ -200,7 +198,7 @@
</el-table-column>
<el-table-column
v-if="hasPermi(['trials:trials-panel:visit:crc-upload:upload']) && allowAddOrEdit"
v-if="hasPermi(['trials:trials-panel:visit:crc-upload:edit']) && allowAddOrEdit"
:label="$t('common:action:action')"
min-width="200"
>
@ -237,7 +235,7 @@
icon="el-icon-download"
size="small"
:loading="downloadLoading"
@click.native.prevent="handleDownloadTpl(cd.ClinicalDataTrialSetId)"
@click.native.prevent="handleDownloadTpl(cd)"
>
{{ $t('trials:uploadClinicalData:button:downloadTemplate') }}
</el-button>
@ -551,11 +549,8 @@ export default {
})
})
},
handleDownloadTpl(clinicalDataTrialSetId) {
this.downloadLoading = true
DownloadTrialClinicalFile(clinicalDataTrialSetId).then(data => {
this.downloadLoading = false
}).catch(() => { this.downloadLoading = false })
handleDownloadTpl(cd) {
window.open(this.OSSclientConfig.basePath + cd.Path)
}
}

View File

@ -27,6 +27,7 @@ export default
ReadingUnitConfirmation: 108, //
MedicalAudit: 215,//
HeavyReadingApproval: 216,//
ResetAndAsyncCriterion: 218, //
}
}
</script>

1
src/icons/svg/record.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1710814433132" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6202" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M509.48 9.666C232.874 9.666 8.666 233.874 8.666 510.48c0 276.618 224.206 500.818 500.814 500.818 276.618 0 500.818-224.202 500.818-500.818 0-276.606-224.2-500.814-500.818-500.814z m0 896.198c-218.384 0-395.378-176.994-395.378-395.382 0-218.384 176.996-395.378 395.378-395.378 218.388 0 395.382 176.996 395.382 395.378 0.002 218.388-176.992 395.382-395.382 395.382z m26.362-390.848v-189.042c0-29.136-23.578-52.718-52.718-52.718s-52.716 23.582-52.716 52.718v210.87c0 0.18 0.012 0.356 0.014 0.534 0.006 0.686 0.018 1.37 0.052 2.054 0.026 0.52 0.072 1.036 0.112 1.55 0.026 0.334 0.042 0.666 0.076 1 0.06 0.632 0.142 1.258 0.226 1.884 0.028 0.21 0.05 0.422 0.08 0.63 0.102 0.698 0.222 1.388 0.35 2.076 0.026 0.136 0.046 0.276 0.074 0.412 0.142 0.732 0.304 1.458 0.476 2.178 0.022 0.098 0.042 0.196 0.068 0.292 0.182 0.744 0.382 1.48 0.596 2.21l0.068 0.244c0.22 0.74 0.46 1.474 0.71 2.202l0.078 0.228c0.256 0.732 0.532 1.454 0.818 2.17 0.032 0.076 0.06 0.154 0.09 0.23 0.292 0.718 0.602 1.428 0.926 2.13l0.104 0.228c0.334 0.716 0.684 1.424 1.05 2.124 0.032 0.058 0.06 0.12 0.09 0.178 0.386 0.732 0.79 1.454 1.208 2.164l0.044 0.078a52.9 52.9 0 0 0 8.716 11.054l148.508 148.506c20.594 20.598 53.956 20.598 74.548 0 20.586-20.586 20.586-53.95 0-74.542l-133.648-133.642z" fill="#FFFFFF" p-id="6203"></path></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -23,23 +23,22 @@
<div style="margin-left:20px;">
<el-dropdown class="dropdown-container" trigger="click">
<span class="el-dropdown-link">
{{ name }}
<span v-if="userTypeShortName">({{ userTypeShortName }})</span>
{{ `${name} (${userTypeShortName})` }}
<!-- {{ name }}
<span v-if="userTypeShortName"> ({{ userTypeShortName }}) </span> -->
<i class="el-icon-caret-bottom" />
</span>
<el-dropdown-menu slot="dropdown" class="user-dropdown">
<el-dropdown-item v-if="!isReviewer">
<span style="display:block;" @click="editInfo">Edit Info</span>
</el-dropdown-item>
<el-dropdown-item>
<span style="display:block;" @click="account">Account</span>
<span style="display:block;" @click="editInfo">{{$t('system:navbar:button:Profile')}}</span>
</el-dropdown-item>
<el-dropdown-item divided>
<span style="display:block;" @click="logout">Log Out</span>
<span style="display:block;" @click="logout">{{$t('system:navbar:button:Log Out')}}</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<TopLang></TopLang>
</div>
</div>
</div>
@ -50,12 +49,15 @@ import {mapGetters, mapMutations} from 'vuex'
import Breadcrumb from '@/components/Breadcrumb'
import Hamburger from '@/components/Hamburger'
import Screenfull from '@/components/Screenfull'
import TopLang from './topLang'
export default {
components: {
Breadcrumb,
Hamburger,
Screenfull
Screenfull,
TopLang
},
data() {
return {
@ -89,9 +91,6 @@ export default {
editInfo() {
this.$router.push({ name: 'BaiscInfo' })
},
account() {
this.$router.push({ name: 'Account' })
}
}
}
</script>

View File

@ -0,0 +1,54 @@
<template>
<el-dropdown
style="height:50px;line-height: 60px;"
@command="handleSetLanguage"
>
<span class="el-dropdown-link">
<svg-icon icon-class="language" style="font-size:25px;margin:0 10px;" />
<!-- {{ language==='zh'?'语言:中文':'Language: English' }} -->
<!-- <i class="el-icon-arrow-down el-icon--right" /> -->
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item
:disabled="language==='zh'"
command="zh"
>中文
</el-dropdown-item>
<el-dropdown-item
:disabled="language==='en'"
command="en"
>English
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
<script>
import { mapGetters, mapMutations } from 'vuex'
export default {
name: 'TopLang',
data() {
return {}
},
computed: {
...mapGetters({
language: 'language'
})
},
methods: {
...mapMutations({ setLanguage: 'lang/setLanguage' }),
handleSetLanguage(lang) {
this.$i18n.locale = lang
this.setLanguage(lang)
this.$updateDictionary()
window.location.reload()
}
}
}
</script>
<style lang="scss" scoped>
</style>

View File

@ -160,10 +160,16 @@ Vue.prototype.fileToBlob = (file) => {
var _vm
async function VueInit () {
var params
var res
if (~window.location.href.indexOf('/readingDicoms') || ~window.location.href.indexOf('/noneDicomReading') || ~window.location.href.indexOf('/criterionquestions') || ~window.location.href.indexOf('/petct')) {
params = $q('TrialReadingCriterionId')
res = await getBasicDataAllSelect(params)
} else if (~window.location.href.indexOf('/ecrfPreview')) {
params = $q('SystemReadingCriterionId')
res = await getBasicDataAllSelect(params, true)
} else {
res = await getBasicDataAllSelect(params)
}
var res = await getBasicDataAllSelect(params)
var Internationalization = await getFrontInternationalizationList()
Vue.prototype.$tl = Internationalization.Result
let zhMessages = {}, enMessages = {}
@ -326,6 +332,7 @@ async function VueInit () {
}
const h = _vm.$createElement
/* eslint-disable */
window.VUE_APP_COMPANY_NAME = process.env.VUE_APP_COMPANY_NAME;
waitOperate(eval(process.env.VUE_APP_LOGOUT_FOR_PERMISSION) ? () => {
var lang = zzSessionStorage.getItem('lang')?zzSessionStorage.getItem('lang'):'zh'
if ( _vm.$route.path === '/ReviewersResearchForm' || _vm.$route.path === '/ReviewersResearch' || _vm.$route.path === '/login' || _vm.$route.path === '/researchForm' || _vm.$route.path === '/researchLogin' || _vm.$route.path === '/email-recompose' || _vm.$route.path === '/recompose' || _vm.$route.path === '/resetpassword' || _vm.$route.path === '/error') {

View File

@ -56,6 +56,9 @@ router.beforeEach(async(to, from, next) => {
/* has no token*/
if (whiteList.indexOf(to.path) !== -1) {
// 在免登录whiteList中直接进入
if (to.path === '/readingDicoms' || to.path === '/noneDicomReading'){
OSSclient()
}
next()
} else {
if (to.path === '/researchForm') {

View File

@ -139,6 +139,13 @@ export const constantRoutes = [
hidden: true,
component: () => import('@/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt')
},
{
path: '/historyScreenshot',
name: 'historyScreenshot',
hidden: true,
component: () => import('@/views/trials/trials-panel/reading/dicoms/components/Fusion/HistoryScreenshot')
},
{
path: '/visitDicomReview',
name: 'visitDicomReview',
@ -242,6 +249,11 @@ export const constantRoutes = [
component: () => import('@/views/404'),
hidden: true
},
{
path: '/ecrfPreview',
component: () => import('@/views/dictionary/template/components/ECRF'),
hidden: true
},
{
path: '/editUser',
component: Layout,
@ -250,12 +262,7 @@ export const constantRoutes = [
children: [{
path: 'baiscInfo',
name: 'BaiscInfo',
component: () => import('@/views/user/editInfo')
},
{
path: 'account',
name: 'Account',
component: () => import('@/views/user/account')
component: () => import('@/views/user/myInfo')
}
]
}

View File

@ -40,6 +40,7 @@ const getters = {
activeSeries: state => state.reading.activeSeries,
lastCanvasTaskId: state => state.reading.lastCanvasTaskId,
imageQuality: state => state.reading.imageQuality,
imageQualityIssues: state => state.reading.imageQualityIssues,
language: state => state.lang.language,
TotalNeedSignSystemDocCount: state => state.user.TotalNeedSignSystemDocCount,
TotalNeedSignTrialDocCount: state => state.user.TotalNeedSignTrialDocCount,

View File

@ -29,7 +29,8 @@ const getDefaultState = () => {
currentReadingTaskState: 2,
activeSeries: {},
lastCanvasTaskId: '',
imageQuality: null
imageQuality: null,
imageQualityIssues: null
}
}
function getQuestions(questions) {
@ -183,6 +184,7 @@ const actions = {
state.activeSeries = {}
state.lastCanvasTaskId = ''
state.imageQuality = null
state.imageQualityIssues = null
resolve()
})
},
@ -875,6 +877,9 @@ const actions = {
setImageQuality({ state }, imageQuality) {
state.imageQuality = isNaN(parseInt(imageQuality)) ? null : parseInt(imageQuality)
},
setImageQualityIssues({ state }, imageQualityIssues) {
state.imageQualityIssues = isNaN(parseInt(imageQualityIssues)) ? null : parseInt(imageQualityIssues)
},
addQuestionMeasuredData({ state }, obj) {
return new Promise(resolve => {
var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)

View File

@ -1,5 +1,5 @@
import { getToken, setToken, removeToken, setName, removeName } from '@/utils/auth'
import { login, getUserMenuTree, getUserPermissions } from '@/api/user'
import { login,loginOut,getUserMenuTree, getUserPermissions } from '@/api/user'
import { resetRouter } from '@/router'
import md5 from 'js-md5'
@ -78,6 +78,9 @@ const mutations = {
}
const actions = {
changeUserName({ commit }, userName) {
commit('SET_USERNAME', userName)
},
// user login
login({ commit }, userInfo) {
const { username, password } = userInfo
@ -175,12 +178,17 @@ const actions = {
commit('SET_NAME', zzSessionStorage.getItem('realName'))
},
// user logout
logout({ commit, state }) {
removeToken() // must remove token first
resetRouter()
removeName()
zzSessionStorage.clear()
commit('RESET_STATE')
async logout({ commit, state }) {
try{
await loginOut()
removeToken() // must remove token first
resetRouter()
removeName()
zzSessionStorage.clear()
commit('RESET_STATE')
}catch(e){
console.log(e)
}
},
setToken({ commit }, token) {
commit('SET_TOKEN', token)

View File

@ -54,7 +54,7 @@ export const anonymization = function (file, config) {
}
}
}
console.log(dataset)
// console.log(dataset)
let newDicomFile = dataset.write()
const bufferArray = new Uint8Array(newDicomFile)
const blob = new Blob([bufferArray], { type: 'application/octet-stream' })

View File

@ -3,6 +3,8 @@ import { Message, MessageBox, Alert } from 'element-ui'
import store from '@/store'
import router from '@/router'
import Vue from 'vue'
import moment from 'moment-timezone';
console.log(moment.tz.guess())
axios.defaults.withCredentials = false
const service = axios.create({
baseURL: '/api',
@ -19,6 +21,7 @@ service.interceptors.request.use(
config.headers['Content-Type'] = 'application/json;charset=UTF-8'
var language = zzSessionStorage.getItem('lang')
config.headers['Accept-Language'] = language === 'en'?'en-US,en;q=0.5':'zh-CN,zh;q=0.9'
config.headers['TimeZoneId'] = moment.tz.guess()
if (store.getters.token) {
config.headers.Authorization = `Bearer ${store.getters.token}`
}
@ -59,7 +62,11 @@ service.interceptors.response.use(
MessageBox.confirm(res.ErrorMessage, {
type: 'warning',
showCancelButton: false,
callback: action => {}
callback: action => {
if(res.Code === 6) {
window.close()
}
}
})
}
return Promise.reject(res)
@ -71,7 +78,7 @@ service.interceptors.response.use(
var message = ''
if (error && error.response) {
const status = error.response.status
if (error.response.data && error.response.data.Code === -1) {
if (error.response.data && (error.response.data.Code === -1 || error.response.data.Code === -2)) {
store.dispatch('user/logout').then(() => {
router.push(`/login`)
this.$i18n.locale = 'zh'

View File

@ -1,137 +1,135 @@
<template>
<div class="app-container menu">
<el-tree
:props="defaultProps"
:data="treeData"
node-key="Id"
:default-expand-all="true"
:expand-on-click-node="false"
style="width:80%;"
>
<span slot-scope="{ node, data }" class="custom-tree-node">
<span v-if="data.FunctionName">{{ node.label }} --------------------(Function)</span>
<span v-else>{{ node.label }}</span>
<span>
<el-button type="text" icon="el-icon-plus" size="small" @click="() => append(data)">Append</el-button>
<el-button
type="text"
icon="el-icon-edit"
size="small"
@click="() => edit(data)"
>Edit</el-button>
<el-button type="text" icon="el-icon-delete" size="small" @click="() => remove(data)">Delete</el-button>
</span>
</span>
</el-tree>
<menu-form v-if="model_cfg.visible" :form="currenNode" width="500px" @close="closeModel" />
</div>
</template>
<script>
import { getMenuFunction, deleteMenuFunction } from '@/api/admin'
import MenuForm from './components/MenuForm'
import { model_cfg } from './menu'
export default {
name: 'Menu',
components: { MenuForm },
data() {
return {
model_cfg,
treeData: [],
defaultProps: {
label: 'MenuName',
children: 'Children'
},
dialogVisible: false,
title: '',
currenNode: {},
nodeId: '',
parentId: ''
}
},
mounted() {
this.getlist()
},
methods: {
//
getlist() {
const loading = this.$loading({
target: document.querySelector('.menu'),
fullscreen: false,
lock: true,
text: 'Loading',
spinner: 'el-icon-loading'
})
getMenuFunction().then(res => {
loading.close()
this.treeData = res.Result
}).catch(() => { loading.close() })
},
//
append(node) {
this.currenNode = {}
this.currenNode.ParentId = node.Id
this.currenNode.Status = 1
// this.currenNode.ShowOrder = 0
this.nodeId = node.Id
this.model_cfg.title = 'Append'
this.model_cfg.visible = true
},
//
edit(node) {
// eslint-disable-next-line no-unused-vars
const { Children, CreateTime, CreateUserId, UpdateTime, UpdateUserId, ...obj } = JSON.parse(JSON.stringify(node))
obj.MetaBreadcrumb = obj.MetaBreadcrumb ? 1 : 0
obj.Hidden = obj.Hidden ? 1 : 0
this.currenNode = obj
this.nodeId = node.Id
this.model_cfg.title = 'Edit'
this.model_cfg.visible = true
},
//
remove(node) {
this.$confirm('Sure to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
deleteMenuFunction(node.Id)
.then(res => {
if (res.IsSuccess) {
this.getlist()
this.$message.success('Deleted successfully!')
}
})
})
},
//
closeModel() {
this.model_cfg.visible = false
this.getlist()
}
}
}
</script>
<style lang="scss">
.menu{
.el-tree {
margin-top: 20px;
}
.el-tree-node{
margin-top: 5px;
}
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
padding-right: 8px;
}
.el-dialog__body{
padding: 10px;
}
}
</style>
<template>
<div class="app-container menu">
<el-tree
:props="defaultProps"
:data="treeData"
node-key="Id"
:default-expand-all="true"
:expand-on-click-node="false"
style="width:80%;"
>
<span slot-scope="{ node, data }" class="custom-tree-node">
<span v-if="data.FunctionName">{{ node.label }} --------------------(Function)</span>
<span v-else>{{ node.label }}</span>
<span>
<el-button type="text" icon="el-icon-plus" size="small" @click="() => append(data)">Append</el-button>
<el-button
type="text"
icon="el-icon-edit"
size="small"
@click="() => edit(data)"
>Edit</el-button>
<el-button type="text" icon="el-icon-delete" size="small" @click="() => remove(data)">Delete</el-button>
</span>
</span>
</el-tree>
<menu-form v-if="model_cfg.visible" :form="currenNode" width="500px" @close="closeModel" />
</div>
</template>
<script>
import { getMenuFunction, deleteMenuFunction } from '@/api/admin'
import MenuForm from './components/MenuForm'
import { model_cfg } from './menu'
export default {
name: 'Menu',
components: { MenuForm },
data() {
return {
model_cfg,
treeData: [],
defaultProps: {
label: 'MenuName',
children: 'Children'
},
dialogVisible: false,
title: '',
currenNode: {},
nodeId: '',
parentId: ''
}
},
mounted() {
this.getlist()
},
methods: {
//
getlist() {
const loading = this.$loading({
target: document.querySelector('.menu'),
fullscreen: false,
lock: true,
text: 'Loading',
spinner: 'el-icon-loading'
})
getMenuFunction().then(res => {
loading.close()
this.treeData = res.Result
}).catch(() => { loading.close() })
},
//
append(node) {
this.currenNode = {}
this.currenNode.ParentId = node.Id
this.currenNode.Status = 1
// this.currenNode.ShowOrder = 0
this.nodeId = node.Id
this.model_cfg.title = 'Append'
this.model_cfg.visible = true
},
//
edit(node) {
// eslint-disable-next-line no-unused-vars
const { Children, CreateTime, CreateUserId, UpdateTime, UpdateUserId, ...obj } = JSON.parse(JSON.stringify(node))
obj.MetaBreadcrumb = obj.MetaBreadcrumb ? 1 : 0
obj.Hidden = obj.Hidden ? 1 : 0
this.currenNode = obj
this.nodeId = node.Id
this.model_cfg.title = 'Edit'
this.model_cfg.visible = true
},
//
remove(node) {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true
})
.then(() => {
deleteMenuFunction(node.Id)
.then(res => {
if (res.IsSuccess) {
this.getlist()
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
})
})
},
//
closeModel() {
this.model_cfg.visible = false
this.getlist()
}
}
}
</script>
<style lang="scss">
.menu{
.el-tree {
margin-top: 20px;
}
.el-tree-node{
margin-top: 5px;
}
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
padding-right: 8px;
}
.el-dialog__body{
padding: 10px;
}
}
</style>

View File

@ -89,16 +89,15 @@ export default {
})
},
handleDeleteRole(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
}).then(() => {
deleteUserTypeRole(row.Id).then((res) => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex((item) => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
})
})

View File

@ -1,39 +1,38 @@
<template>
<el-card class="box-card" style="width:800px;" size="small">
<!-- <div slot="header" class="clearfix">
<span>Security</span>
</div> -->
<div>
<el-button type="danger" @click="handleReset">Reset Password</el-button>
</div>
</el-card>
</template>
<script>
import { resetPassword } from '@/api/admin'
export default {
name: 'Account',
props: {
userId: { type: String, default: '' }
},
methods: {
handleReset() {
this.$confirm('Sure to reset password?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
resetPassword(this.userId).then(res => {
if (res.IsSuccess) {
this.$message({
message: 'Reset password successfully',
type: 'success'
})
}
})
})
}
}
}
</script>
<template>
<el-card class="box-card" style="width:800px;" size="small">
<!-- <div slot="header" class="clearfix">
<span>Security</span>
</div> -->
<div>
<el-button type="danger" @click="handleReset">Reset Password</el-button>
</div>
</el-card>
</template>
<script>
import { resetPassword } from '@/api/admin'
export default {
name: 'Account',
props: {
userId: { type: String, default: '' }
},
methods: {
handleReset() {
this.$confirm('Sure to reset password?', {
type: 'warning',
distinguishCancelAndClose: true,
})
.then(() => {
resetPassword(this.userId).then(res => {
if (res.IsSuccess) {
this.$message({
message: 'Reset password successfully',
type: 'success'
})
}
})
})
}
}
}
</script>

View File

@ -113,18 +113,17 @@ export default {
},
//
handleDeleteUser(data) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
deleteSysUser(data.Id)
.then(res => {
if (res.IsSuccess) {
this.users.splice(this.users.findIndex(item => item.Id === data.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
})
})

View File

@ -14,27 +14,26 @@
<span v-else>{{ employment.RankCN }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('resumeInfo:label:Physician')">
<span v-if="isEnglish">{{ employment.Physician }}</span>
<span v-else>{{ employment.PhysicianCN }}</span>
</el-form-item>
</el-col>
<!-- <el-col :span="6">-->
<!-- <el-form-item :label="$t('resumeInfo:label:Physician')">-->
<!-- <span v-if="isEnglish">{{ employment.Physician }}</span>-->
<!-- <span v-else>{{ employment.PhysicianCN }}</span>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="6">
<el-form-item :label="$t('resumeInfo:label:Position')">
<span v-if="isEnglish">{{ employment.Position }}</span>
<span v-else>{{ employment.PositionCN }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item :label="$t('resumeInfo:label:Hospital')">
<span v-if="isEnglish">{{ employment.HospitalName }}</span>
<span v-else>{{ employment.HospitalNameCN }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item :label="$t('resumeInfo:label:Affiliated')">
<span v-if="isEnglish">{{ employment.UniversityAffiliated }}</span>

View File

@ -90,11 +90,12 @@ export default {
this.setLanguage('zh')
this.$updateDictionary()
}
this.title = this.doctorInfo.BasicInfoView?`${this.doctorInfo.BasicInfoView.FirstName} ${this.doctorInfo.BasicInfoView.LastName}${this.$t('resumeInfo:title:Details')}`:''
this.title = this.doctorInfo.BasicInfoView?`${this.doctorInfo.BasicInfoView.BlindName}${this.$t('resumeInfo:title:Details')}`:''
}
},
mounted() {
this.isEnglish = !!((this.$route.query.isEnglish === true || this.$route.query.isEnglish === 'true'))
this.isEnglish = this.$i18n.locale === 'zh' ? false : true
this.doctorId = this.$route.query.doctorId
this.initForm()
},
@ -135,6 +136,7 @@ export default {
} else {
this.workInfo.Position = this.workInfo.Position
this.workInfo.PositionCN = this.workInfo.PositionCN
//
}
this.workInfo.PositionOther = this.workInfo.PositionOther ? 'Other - ' + this.workInfo.PositionOther : 'Other'
}
@ -179,7 +181,7 @@ export default {
this.holiday = res.Result.InHoliday ? 'Yes' : 'No'
this.doctorInfo = res.Result
!this.doctorInfo.ResearchPublicationView ? this.doctorInfo.ResearchPublicationView = {} : '';
this.title = `${this.doctorInfo.BasicInfoView.BlindName} 's Details`
this.title = this.doctorInfo.BasicInfoView?`${this.doctorInfo.BasicInfoView.BlindName}${this.$t('resumeInfo:title:Details')}`:''
this.htmlTitle = this.title
this.initStatus()
this.initEmploymentInfo()

View File

@ -126,8 +126,7 @@ export default {
this.$confirm('Sure to sign out', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.$store.dispatch('user/logout').then(res => {

View File

@ -63,7 +63,7 @@
import * as dicomParser from 'dicom-parser'
import * as cornerstone from 'cornerstone-core'
import * as cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader'
import dicomStore from '@/utils/dicom-store.js'
import dicomStore from '@/utils/dicom-store'
import dicomViewer from '@/components/Dicom/DicomViewer'
import dicomPreview from '@/components/Dicom/DicomPreview'
@ -86,6 +86,10 @@ export default {
uid: {
type: String,
default: ''
},
studyList: {
type: Array,
default: []
}
},
@ -102,7 +106,7 @@ export default {
var totalHeight = window.innerHeight || document.body.clientHeight
var wrapper = this.$refs['preview-wrapper']
wrapper.style.height = (totalHeight - 70) + 'px'
if (!dicomStore.studyList || !this.uid) return
if (!this.studyList || !this.uid) return
this.loadStudy()
},
@ -120,7 +124,7 @@ export default {
return newObj
},
loadStudy() {
var studyList = dicomStore.studyList
var studyList = this.studyList
var studyUid = this.uid
var studyItem = studyList.find(function(item) {
return item.dicomInfo.studyUid === studyUid

View File

@ -64,21 +64,24 @@
</div>
</div>
<div v-if="showDelete" @click.stop="">
<div v-if="showDelete" @click.stop="" style="display: flex;flex-direction: row;justify-content: space-between;">
<span style="font-size: 12px;">{{ $t('trials:audit:table:isReading') }}</span>
<el-switch
v-model="item.isReading"
size="mini"
@change="changeReadingStatus($event, item)"
/>
<span style="font-size: 12px;">{{ $t('trials:audit:table:isDelete') }}</span>
<el-switch
v-model="item.isDeleted"
size="mini"
@change="changeDeleteStatus($event, item)"
/>
<div>
<span style="font-size: 12px;margin-right: 5px">{{ $t('trials:audit:table:isReading') }}</span>
<el-switch
v-model="item.isReading"
size="mini"
@change="changeReadingStatus($event, item)"
/>
</div>
<div>
<span style="font-size: 12px;margin-right: 5px">{{ $t('trials:audit:table:isDelete') }}</span>
<el-switch
v-model="item.isDeleted"
size="mini"
@change="changeDeleteStatus($event, item)"
/>
</div>
</div>
<div v-if="item.prefetchInstanceCount>0 && item.prefetchInstanceCount<item.instanceCount">
<el-progress :percentage="parseInt(((item.prefetchInstanceCount/item.instanceCount)*100).toFixed(2))" />
@ -403,6 +406,7 @@ export default {
data.isReading = true
}
var message = this.$t('trials:audit:message:changeSeriesStatus').replace('xxx', statusStr)
message = message.replace('yyy', this.$fd('YesOrNo', !data.isReading))
this.$confirm(message, {
distinguishCancelAndClose: true,
type: 'warning'
@ -430,6 +434,7 @@ export default {
data.isDeleted = true
}
var message = this.$t('trials:audit:message:changeSeriesStatus').replace('xxx', statusStr)
message = message.replace('yyy', this.$fd('YesOrNo', !data.isDeleted))
this.$confirm(message, {
distinguishCancelAndClose: true,
type: 'warning'

View File

@ -83,21 +83,24 @@
</div>
</div>
<div v-if="showDelete" @click.stop="">
<div v-if="showDelete" @click.stop="" style="display: flex;flex-direction: row;justify-content: space-between;">
<span style="font-size: 12px;">{{ $t('trials:audit:table:isReading') }}</span>
<el-switch
v-model="series.isReading"
size="mini"
@change="changeReadingStatus($event, series)"
/>
<span style="font-size: 12px;">{{ $t('trials:audit:table:isDelete') }}</span>
<el-switch
v-model="series.isDeleted"
size="mini"
@change="changeDeleteStatus($event, series)"
/>
<div>
<span style="font-size: 12px;">{{ $t('trials:audit:table:isReading') }}</span>
<el-switch
v-model="series.isReading"
size="mini"
@change="changeReadingStatus($event, series)"
/>
</div>
<div>
<span style="font-size: 12px;">{{ $t('trials:audit:table:isDelete') }}</span>
<el-switch
v-model="series.isDeleted"
size="mini"
@change="changeDeleteStatus($event, series)"
/>
</div>
</div>
<!-- <div style="position: absolute;bottom: -10px;left: 0;width: 100%;">
<el-progress v-if="series.prefetchInstanceCount>0 && series.prefetchInstanceCount<series.instanceCount" :percentage="Number(series.prefetchInstanceCount/series.instanceCount)*100" />
@ -353,6 +356,7 @@ export default {
data.isReading = true
}
var message = this.$t('trials:audit:message:changeSeriesStatus').replace('xxx', statusStr)
message = message.replace('yyy', this.$fd('YesOrNo', !data.isReading))
this.$confirm(message, {
distinguishCancelAndClose: true,
type: 'warning'
@ -380,6 +384,7 @@ export default {
data.isDeleted = true
}
var message = this.$t('trials:audit:message:changeSeriesStatus').replace('xxx', statusStr)
message = message.replace('yyy', this.$fd('YesOrNo', !data.isDeleted))
this.$confirm(message, {
distinguishCancelAndClose: true,
type: 'warning'

View File

@ -244,8 +244,7 @@ export default {
this.$confirm('是否确认废除此文件?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true

View File

@ -33,7 +33,7 @@
<el-table-column prop="ModuleTypeValueCN" label="模块" show-overflow-tooltip align="left" min-width="230px" />
<el-table-column prop="Description" label="操作名称" :show-overflow-tooltip="true" min-width="200px">
<template slot-scope="scope">
<span>{{ scope.row.Description }}{{scope.row.DescriptionCN}}</span>
<span>{{ scope.row.DescriptionCN }}{{scope.row.Description}}</span>
</template>
</el-table-column>
<el-table-column prop="DescriptionCN" label="其他" :show-overflow-tooltip="true" min-width="140px">
@ -608,11 +608,11 @@
<div style="padding: 0 40px;display: flex;flex-direction: column">
<div style="text-align: right;height: 50px;">
<el-select v-model="copeParams.FromItemId" collapse-tags filterable placeholder="完全拷贝对象" clearable size="small">
<el-option v-for="item of list" v-if="drawer_cfg.drawerChild && item.ConfigType === 'M' && item.ObjectTypeId === selectRow.ObjectTypeId && item.OptTypeId && item.ChildrenTypeId " :value="item.Id" :label="item.Description" />
<el-option v-for="item of list" v-if="drawer_cfg.drawerChild && item.ConfigType === 'M' && item.ObjectTypeId === selectRow.ObjectTypeId && item.OptTypeId && item.ChildrenTypeId " :value="item.Id" :label="item.DescriptionCN" />
</el-select>
<el-button type="primary" size="mini" style="margin-right: 10px" @click="handleOverCope(selectRow)"></el-button>
<el-select v-model="copeParams.DataSourceGuids" multiple collapse-tags filterable placeholder="拷贝对象" clearable size="small">
<el-option v-for="item of list" v-if="drawer_cfg.drawerChild && item.ConfigType === 'M' && item.ObjectTypeId === selectRow.ObjectTypeId && item.OptTypeId && item.ChildrenTypeId " :value="item.Id" :label="item.Description" />
<el-option v-for="item of list" v-if="drawer_cfg.drawerChild && item.ConfigType === 'M' && item.ObjectTypeId === selectRow.ObjectTypeId && item.OptTypeId && item.ChildrenTypeId " :value="item.Id" :label="item.DescriptionCN" />
</el-select>
<el-button type="primary" size="mini" @click="handleCope(selectRow)"></el-button>
<el-button type="primary" size="mini" @click="handleAdd(selectRow)"></el-button>
@ -668,6 +668,12 @@
<el-table-column prop="TrialConfigRelyFieldName" label="依赖字段" min-width="120px" :show-overflow-tooltip="true" />
<el-table-column label="操作" align="center" min-width="180" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleCopyData(scope.row)"
>复制</el-button>
<el-button
size="mini"
type="text"
@ -1146,6 +1152,16 @@ export default {
this.title = '修改'
this.rowDrop2()
},
handleCopyData (row) {
this.$confirm('确定复制该条记录到当前稽查下吗?').then(() => {
let params = {...row}
delete params.Id
addOrUpdateFrontAuditConfig(params).then(() => {
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.getList()
})
})
},
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {

View File

@ -125,18 +125,17 @@ export default {
},
//
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
deleteDictionary(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
this.$store.dispatch('global/setDictionary', {})
}
})

View File

@ -239,18 +239,17 @@ export default {
},
//
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
deleteEmailNoticeConfig(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
})
})

View File

@ -139,11 +139,10 @@ export default {
},
// CRO
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -152,7 +151,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => {
this.loading = false

View File

@ -8,12 +8,15 @@
label-width="170px"
>
<div class="base-dialog-body">
<el-form-item label="Hospital CN: " prop="SiteId">
<el-select v-model="form.SiteId" style="width: 100%" filterable @change="siteChange">
<el-form-item label="Site: ">
<el-select v-model="form.SiteId" style="width: 100%" clearable filterable @change="siteChange">
<el-option v-for="item of siteList" :value="item.Id" :key="item.Id" :label="item.SiteName">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="Hospital CN: " prop="HospitalNameCN">
<el-input v-model="form.HospitalNameCN" />
</el-form-item>
<el-form-item label="Hospital EN: " prop="HospitalName">
<el-input v-model="form.HospitalName" />
</el-form-item>
@ -88,9 +91,7 @@ export default {
},
siteList: [],
rules: {
SiteId: [{ required: true, message: 'Please specify', trigger: 'blur' },
{ max: 50, message: 'The maximum length is 50' }],
HospitalName: [{ required: true, message: 'Please specify', trigger: 'blur' }, { max: 50, message: 'The maximum length is 50' }],
HospitalNameCN: [{ required: true, message: 'Please specify', trigger: 'blur' }, { max: 50, message: 'The maximum length is 50' }],
UniversityAffiliated: [{ max: 100, message: 'The maximum length is 100' }],
UniversityAffiliatedCN: [{ max: 100, message: 'The maximum length is 100' }],
Country: [{ required: true, message: 'Please specify', trigger: 'blur' },
@ -116,7 +117,8 @@ export default {
this.siteList.forEach(o => {
if (o.Id === v) {
this.form.CityCN = o.City
this.form.HospitalNameCN = o.SiteName
this.form.HospitalNameCN = o.SiteNameCN
this.form.HospitalName = o.SiteName
this.form.ProvinceCN = o.Province
this.form.CountryCN = o.Country
}

View File

@ -1,256 +1,255 @@
<template>
<box-content>
<div class="search">
<el-form :inline="true" size="small" class="base-search-form">
<el-form-item label="Hospital:">
<el-input v-model="searchData.HospitalName" style="width:100px;" />
</el-form-item>
<el-form-item label="Province:">
<el-input v-model="searchData.Province" style="width:100px;" />
</el-form-item>
<el-form-item label="City:">
<el-input v-model="searchData.City" style="width:100px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">Search</el-button>
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">Reset</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto;">
<el-button
size="small"
type="primary"
style="margin-left:auto;"
icon="el-icon-plus"
@click="handleAddHospital"
>New</el-button>
</span>
</div>
<!-- hospital列表 -->
<el-table
v-loading="loading"
v-adaptive="{bottomOffset:60}"
:data="list"
stripe
height="100"
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<el-table-column
prop="HospitalName"
label="Hospital"
min-width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="HospitalNameCN"
label="Hospital CN"
min-width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="UniversityAffiliated"
label="University Affiliated"
min-width="170"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="UniversityAffiliatedCN"
label="University Affiliated CN"
min-width="170"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Country"
label="Country"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CountryCN"
label="Country CN"
width="140"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Province"
label="Province"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="ProvinceCN"
label="Province CN"
width="140"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="City"
label="City"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CityCN"
label="City CN"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column label="Action" width="150">
<template slot-scope="scope">
<el-button
circle
icon="el-icon-edit-outline"
title="编辑"
@click="handleEdit(scope.row)"
/>
<el-button
circle
icon="el-icon-delete"
title="删除"
@click="handleDelete(scope.row)"
/>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<el-dialog
v-if="editDialog.visible"
:visible.sync="editDialog.visible"
:close-on-click-modal="false"
:title="editDialog.title"
width="600px"
custom-class="base-dialog-wrapper"
>
<hospital-form v-if="editDialog.visible" :data="rowData" @close="close" @getList="getList" />
</el-dialog>
</box-content>
</template>
<script>
import { getHospitalPageList, deleteHospital } from '@/api/dictionary'
import BoxContent from '@/components/BoxContent'
import Pagination from '@/components/Pagination'
import HospitalForm from './HospitalForm'
const searchDataDefault = () => {
return {
HospitalName: '',
Province: '',
City: '',
PageIndex: 1,
PageSize: 20,
Asc: true,
SortField: ''
}
}
export default {
name: 'Hospitals',
components: { BoxContent, Pagination, HospitalForm },
data() {
return {
searchData: searchDataDefault(),
editDialog: { visible: false, title: '' },
list: [],
total: 0,
loading: false,
rowData: {}
}
},
mounted() {
this.getList()
},
methods: {
//
getList() {
this.loading = true
getHospitalPageList(this.searchData).then(res => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => {
this.loading = false
})
},
//
handleAddHospital() {
this.rowData = {}
this.editDialog.title = 'Add'
this.editDialog.visible = true
},
//
handleEdit(row) {
this.rowData = row
this.editDialog.title = 'Edit'
this.editDialog.visible = true
},
//
handleDelete(row) {
this.$confirm('Sure to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
deleteHospital(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
}
this.loading = false
}).catch(() => {
this.loading = false
})
})
},
//
handleSearch() {
this.searchData.PageIndex = 1
this.getList()
},
//
handleReset() {
this.searchData = searchDataDefault()
this.getList()
},
//
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()
},
//
close() {
this.editDialog.visible = false
}
}
}
</script>
<style lang="scss" scoped>
.hospitals{
height: 100%;
}
</style>
<template>
<box-content>
<div class="search">
<el-form :inline="true" size="small" class="base-search-form">
<el-form-item label="Hospital:">
<el-input v-model="searchData.HospitalName" style="width:100px;" />
</el-form-item>
<el-form-item label="Province:">
<el-input v-model="searchData.Province" style="width:100px;" />
</el-form-item>
<el-form-item label="City:">
<el-input v-model="searchData.City" style="width:100px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">Search</el-button>
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">Reset</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto;">
<el-button
size="small"
type="primary"
style="margin-left:auto;"
icon="el-icon-plus"
@click="handleAddHospital"
>New</el-button>
</span>
</div>
<!-- hospital列表 -->
<el-table
v-loading="loading"
v-adaptive="{bottomOffset:60}"
:data="list"
stripe
height="100"
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<el-table-column
prop="HospitalName"
label="Hospital"
min-width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="HospitalNameCN"
label="Hospital CN"
min-width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="UniversityAffiliated"
label="University Affiliated"
min-width="170"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="UniversityAffiliatedCN"
label="University Affiliated CN"
min-width="170"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Country"
label="Country"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CountryCN"
label="Country CN"
width="140"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Province"
label="Province"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="ProvinceCN"
label="Province CN"
width="140"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="City"
label="City"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CityCN"
label="City CN"
width="120"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column label="Action" width="150">
<template slot-scope="scope">
<el-button
circle
icon="el-icon-edit-outline"
title="编辑"
@click="handleEdit(scope.row)"
/>
<el-button
circle
icon="el-icon-delete"
title="删除"
@click="handleDelete(scope.row)"
/>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<el-dialog
v-if="editDialog.visible"
:visible.sync="editDialog.visible"
:close-on-click-modal="false"
:title="editDialog.title"
width="600px"
custom-class="base-dialog-wrapper"
>
<hospital-form v-if="editDialog.visible" :data="rowData" @close="close" @getList="getList" />
</el-dialog>
</box-content>
</template>
<script>
import { getHospitalPageList, deleteHospital } from '@/api/dictionary'
import BoxContent from '@/components/BoxContent'
import Pagination from '@/components/Pagination'
import HospitalForm from './HospitalForm'
const searchDataDefault = () => {
return {
HospitalName: '',
Province: '',
City: '',
PageIndex: 1,
PageSize: 20,
Asc: true,
SortField: ''
}
}
export default {
name: 'Hospitals',
components: { BoxContent, Pagination, HospitalForm },
data() {
return {
searchData: searchDataDefault(),
editDialog: { visible: false, title: '' },
list: [],
total: 0,
loading: false,
rowData: {}
}
},
mounted() {
this.getList()
},
methods: {
//
getList() {
this.loading = true
getHospitalPageList(this.searchData).then(res => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => {
this.loading = false
})
},
//
handleAddHospital() {
this.rowData = {}
this.editDialog.title = 'Add'
this.editDialog.visible = true
},
//
handleEdit(row) {
this.rowData = row
this.editDialog.title = 'Edit'
this.editDialog.visible = true
},
//
handleDelete(row) {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
})
.then(() => {
this.loading = true
deleteHospital(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
this.loading = false
}).catch(() => {
this.loading = false
})
})
},
//
handleSearch() {
this.searchData.PageIndex = 1
this.getList()
},
//
handleReset() {
this.searchData = searchDataDefault()
this.getList()
},
//
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()
},
//
close() {
this.editDialog.visible = false
}
}
}
</script>
<style lang="scss" scoped>
.hospitals{
height: 100%;
}
</style>

View File

@ -213,11 +213,10 @@ export default {
},
// Site
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -227,7 +226,7 @@ export default {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$store.dispatch('global/setSite', {})
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => {
this.loading = false

View File

@ -139,11 +139,10 @@ export default {
},
// Sponsor
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -152,7 +151,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => {
this.loading = false

View File

@ -182,11 +182,10 @@ export default {
})
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -195,7 +194,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => { this.loading = false })
})

View File

@ -154,11 +154,10 @@ export default {
})
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -167,7 +166,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => { this.loading = false })
})

View File

@ -183,11 +183,10 @@ export default {
})
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -196,7 +195,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => { this.loading = false })
})

View File

@ -182,11 +182,10 @@ export default {
})
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -195,7 +194,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => { this.loading = false })
})

View File

@ -153,11 +153,10 @@ export default {
})
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -166,7 +165,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => { this.loading = false })
})

View File

@ -206,11 +206,10 @@ export default {
})
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -219,7 +218,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => { this.loading = false })
})

View File

@ -183,11 +183,10 @@ export default {
})
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -196,7 +195,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => { this.loading = false })
})

View File

@ -122,11 +122,10 @@ export default {
})
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -135,7 +134,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => { this.loading = false })
})

View File

@ -1,162 +1,161 @@
<template>
<box-content>
<!-- 搜索框 -->
<div class="search">
<span style="margin-left:auto;">
<el-button
type="primary"
size="mini"
@click="handleAdd"
>
Add
</el-button>
</span>
</div>
<!-- 受试者列表 -->
<el-table
v-loading="loading"
v-adaptive="{bottomOffset:45}"
:data="list"
stripe
height="100"
style="width:100%"
>
<el-table-column type="index" width="40" />
<el-table-column
prop="Code"
label="编号"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
prop="Name"
label="场景类型"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Value"
label="签名内容(EN)"
show-overflow-tooltip
/>
<el-table-column
prop="ValueCN"
label="签名内容(CN)"
show-overflow-tooltip
/>
<el-table-column
prop="UpdateTime"
label="更新时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CreateTime"
label="创建时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column label="Action" width="200" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.row)"
>
Edit
</el-button>
<el-button type="text" @click="handleDelete(scope.row)">Delete</el-button>
</template>
</el-table-column>
</el-table>
<!-- 场景配置 -->
<el-dialog
v-if="editVisible"
:visible.sync="editVisible"
:close-on-click-modal="false"
:title="title"
width="700px"
append-to-body
custom-class="base-dialog-wrapper"
>
<SceneConfigForm :parent-id="parentId" :data="rowData" @closeDialog="closeDialog" @getList="getList" />
</el-dialog>
</box-content>
</template>
<script>
import { getChildList, deleteSystemBasicData } from '@/api/dictionary'
import BoxContent from '@/components/BoxContent'
import SceneConfigForm from './SceneConfigForm'
export default {
name: 'SignTemplate',
components: { BoxContent, SceneConfigForm },
props: {
parentId: {
type: String,
required: true
}
},
data() {
return {
loading: false,
list: [],
rowData: {},
title: '',
editVisible: false
}
},
mounted() {
this.getList()
},
methods: {
//
getList() {
this.loading = true
getChildList(this.parentId).then(res => {
this.loading = false
this.list = res.Result
}).catch(() => { this.loading = false })
},
//
handleAdd() {
this.rowData = {}
this.title = 'Add'
this.editVisible = true
},
//
handleEdit(row) {
this.rowData = { ...row }
this.title = 'Edit'
this.editVisible = true
},
//
handleDelete(row) {
this.$confirm('Sure to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
deleteSystemBasicData(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
}
})
})
},
//
closeDialog() {
this.editVisible = false
}
}
}
</script>
<template>
<box-content>
<!-- 搜索框 -->
<div class="search">
<span style="margin-left:auto;">
<el-button
type="primary"
size="mini"
@click="handleAdd"
>
Add
</el-button>
</span>
</div>
<!-- 受试者列表 -->
<el-table
v-loading="loading"
v-adaptive="{bottomOffset:45}"
:data="list"
stripe
height="100"
style="width:100%"
>
<el-table-column type="index" width="40" />
<el-table-column
prop="Code"
label="编号"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
prop="Name"
label="场景类型"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Value"
label="签名内容(EN)"
show-overflow-tooltip
/>
<el-table-column
prop="ValueCN"
label="签名内容(CN)"
show-overflow-tooltip
/>
<el-table-column
prop="UpdateTime"
label="更新时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CreateTime"
label="创建时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column label="Action" width="200" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.row)"
>
Edit
</el-button>
<el-button type="text" @click="handleDelete(scope.row)">Delete</el-button>
</template>
</el-table-column>
</el-table>
<!-- 场景配置 -->
<el-dialog
v-if="editVisible"
:visible.sync="editVisible"
:close-on-click-modal="false"
:title="title"
width="700px"
append-to-body
custom-class="base-dialog-wrapper"
>
<SceneConfigForm :parent-id="parentId" :data="rowData" @closeDialog="closeDialog" @getList="getList" />
</el-dialog>
</box-content>
</template>
<script>
import { getChildList, deleteSystemBasicData } from '@/api/dictionary'
import BoxContent from '@/components/BoxContent'
import SceneConfigForm from './SceneConfigForm'
export default {
name: 'SignTemplate',
components: { BoxContent, SceneConfigForm },
props: {
parentId: {
type: String,
required: true
}
},
data() {
return {
loading: false,
list: [],
rowData: {},
title: '',
editVisible: false
}
},
mounted() {
this.getList()
},
methods: {
//
getList() {
this.loading = true
getChildList(this.parentId).then(res => {
this.loading = false
this.list = res.Result
}).catch(() => { this.loading = false })
},
//
handleAdd() {
this.rowData = {}
this.title = 'Add'
this.editVisible = true
},
//
handleEdit(row) {
this.rowData = { ...row }
this.title = 'Edit'
this.editVisible = true
},
//
handleDelete(row) {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
})
.then(() => {
deleteSystemBasicData(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
})
})
},
//
closeDialog() {
this.editVisible = false
}
}
}
</script>

View File

@ -1,229 +1,228 @@
<template>
<box-content>
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item label="编号:">
<el-input v-model="searchData.Code" style="width:100px;" />
</el-form-item>
<el-form-item label="模板:">
<el-input v-model="searchData.Name" style="width:100px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto;">
<el-button
type="primary"
size="mini"
@click="handleAdd"
>
New
</el-button>
</span>
</div>
<!-- 受试者列表 -->
<el-table
v-loading="loading"
v-adaptive="{bottomOffset:45}"
:data="list"
stripe
height="100"
style="width:100%"
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<el-table-column
prop="Code"
label="Code"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
prop="Name"
label="模板"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Value"
label="签名内容(EN)"
show-overflow-tooltip
/>
<el-table-column
prop="ValueCN"
label="签名内容(CN)"
show-overflow-tooltip
/>
<el-table-column
prop="UpdateTime"
label="更新时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CreateTime"
label="创建时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column label="Action" width="200" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.row)"
>
Edit
</el-button>
<el-button
type="text"
@click="handleConfig(scope.row)"
>
场景配置
</el-button>
<el-button type="text" @click="handleDelete(scope.row)">Delete</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<!-- 新增编辑 -->
<el-dialog
v-if="editVisible"
:visible.sync="editVisible"
:close-on-click-modal="false"
:title="title"
width="700px"
custom-class="base-dialog-wrapper"
>
<SignTemplateForm :data="rowData" @closeDialog="closeDialog" @getList="getList" />
</el-dialog>
<!-- 场景配置 -->
<el-dialog
v-if="configVisible"
:visible.sync="configVisible"
title="场景配置"
:fullscreen="true"
append-to-body
custom-class="base-dialog-wrapper"
>
<SceneList :parent-id="rowData.Id" @closeDialog="closeDialog" />
</el-dialog>
</box-content>
</template>
<script>
import { getSystemBasicDataList, deleteSystemBasicData } from '@/api/dictionary'
import BoxContent from '@/components/BoxContent'
import SignTemplateForm from './components/SignTemplateForm'
import SceneList from './components/SceneList'
import Pagination from '@/components/Pagination'
const searchDataDefault = () => {
return {
Code: '',
Name: '',
PageIndex: 1,
PageSize: 20
}
}
export default {
name: 'SignTemplate',
components: { BoxContent, SignTemplateForm, Pagination, SceneList },
data() {
return {
searchData: searchDataDefault(),
loading: false,
list: [],
total: 0,
rowData: {},
title: '',
editVisible: false,
configVisible: false
}
},
mounted() {
this.getList()
},
methods: {
//
getList() {
this.loading = true
getSystemBasicDataList(this.searchData).then(res => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => { this.loading = false })
},
//
handleAdd() {
this.rowData = {}
this.title = 'Add'
this.editVisible = true
},
//
handleEdit(row) {
this.rowData = { ...row }
this.title = 'Edit'
this.editVisible = true
},
//
handleDelete(row) {
this.$confirm('Sure to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
deleteSystemBasicData(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
}
})
})
},
//
handleConfig(row) {
this.rowData = { ...row }
this.configVisible = true
},
//
handleSearch() {
this.searchData.PageIndex = 1
this.getList()
},
//
handleReset() {
this.searchData = searchDataDefault()
this.getList()
},
//
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()
},
//
closeDialog() {
this.editVisible = false
}
}
}
</script>
<template>
<box-content>
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item label="编号:">
<el-input v-model="searchData.Code" style="width:100px;" />
</el-form-item>
<el-form-item label="模板:">
<el-input v-model="searchData.Name" style="width:100px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto;">
<el-button
type="primary"
size="mini"
@click="handleAdd"
>
New
</el-button>
</span>
</div>
<!-- 受试者列表 -->
<el-table
v-loading="loading"
v-adaptive="{bottomOffset:45}"
:data="list"
stripe
height="100"
style="width:100%"
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<el-table-column
prop="Code"
label="Code"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
prop="Name"
label="模板"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Value"
label="签名内容(EN)"
show-overflow-tooltip
/>
<el-table-column
prop="ValueCN"
label="签名内容(CN)"
show-overflow-tooltip
/>
<el-table-column
prop="UpdateTime"
label="更新时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CreateTime"
label="创建时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column label="Action" width="200" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.row)"
>
Edit
</el-button>
<el-button
type="text"
@click="handleConfig(scope.row)"
>
场景配置
</el-button>
<el-button type="text" @click="handleDelete(scope.row)">Delete</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<!-- 新增编辑 -->
<el-dialog
v-if="editVisible"
:visible.sync="editVisible"
:close-on-click-modal="false"
:title="title"
width="700px"
custom-class="base-dialog-wrapper"
>
<SignTemplateForm :data="rowData" @closeDialog="closeDialog" @getList="getList" />
</el-dialog>
<!-- 场景配置 -->
<el-dialog
v-if="configVisible"
:visible.sync="configVisible"
title="场景配置"
:fullscreen="true"
append-to-body
custom-class="base-dialog-wrapper"
>
<SceneList :parent-id="rowData.Id" @closeDialog="closeDialog" />
</el-dialog>
</box-content>
</template>
<script>
import { getSystemBasicDataList, deleteSystemBasicData } from '@/api/dictionary'
import BoxContent from '@/components/BoxContent'
import SignTemplateForm from './components/SignTemplateForm'
import SceneList from './components/SceneList'
import Pagination from '@/components/Pagination'
const searchDataDefault = () => {
return {
Code: '',
Name: '',
PageIndex: 1,
PageSize: 20
}
}
export default {
name: 'SignTemplate',
components: { BoxContent, SignTemplateForm, Pagination, SceneList },
data() {
return {
searchData: searchDataDefault(),
loading: false,
list: [],
total: 0,
rowData: {},
title: '',
editVisible: false,
configVisible: false
}
},
mounted() {
this.getList()
},
methods: {
//
getList() {
this.loading = true
getSystemBasicDataList(this.searchData).then(res => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => { this.loading = false })
},
//
handleAdd() {
this.rowData = {}
this.title = 'Add'
this.editVisible = true
},
//
handleEdit(row) {
this.rowData = { ...row }
this.title = 'Edit'
this.editVisible = true
},
//
handleDelete(row) {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
})
.then(() => {
deleteSystemBasicData(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
})
})
},
//
handleConfig(row) {
this.rowData = { ...row }
this.configVisible = true
},
//
handleSearch() {
this.searchData.PageIndex = 1
this.getList()
},
//
handleReset() {
this.searchData = searchDataDefault()
this.getList()
},
//
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()
},
//
closeDialog() {
this.editVisible = false
}
}
}
</script>

View File

@ -162,11 +162,10 @@ export default {
})
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -175,7 +174,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => { this.loading = false })
})

View File

@ -7,6 +7,7 @@
<el-button
size="mini"
type="primary"
:disabled="isCompleteConfig"
@click="handleAdd"
style="margin-right: 10px;"
>
@ -59,12 +60,13 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<el-button size="small" type="primary" @click="openChildren(scope.row)">
<el-button size="small" :disabled="isCompleteConfig" type="primary" @click="openChildren(scope.row)">
配置
</el-button>
<el-button
type="danger"
size="small"
:disabled="isCompleteConfig"
@click="handleDelete(scope.row)"
>
删除
@ -151,6 +153,10 @@ export default {
criterionId: {
type: String,
required: true
},
isCompleteConfig: {
type: Boolean,
required: true
}
},
components: {

View File

@ -19,6 +19,52 @@
/>
</el-select>
</el-form-item>
<el-form-item
v-if="form.Type === 'group'"
label="分组名称"
prop="GroupName"
>
<el-input v-model="form.GroupName" />
</el-form-item>
<el-form-item
label="分组标识"
v-if="form.Type === 'group'"
prop="GroupClassify"
>
<el-select
v-model="form.GroupClassify"
clearable
>
<el-option
v-for="item of groupClassifyList"
:key="item.Id"
:value="parseInt(item.Code)"
:label="item.ValueCN"
/>
</el-select>
</el-form-item>
<el-form-item
v-if="form.Type === 'group'"
label="分组名称EN"
prop="GroupEnName"
>
<el-input v-model="form.GroupEnName" />
</el-form-item>
<el-form-item
v-if="form.Type !== 'group'"
label="问题名称"
prop="QuestionName"
>
<el-input v-model="form.QuestionName" />
</el-form-item>
<el-form-item
v-if="form.Type !== 'group'"
label="问题名称EN"
prop="QuestionEnName"
>
<el-input v-model="form.QuestionEnName" />
</el-form-item>
<!-- 数值类型 -->
<el-form-item
v-if="form.Type === 'number' || form.Type === 'calculation'"
@ -75,52 +121,6 @@
/>
</el-select>
</el-form-item>
<el-form-item
v-if="form.Type === 'group'"
label="分组名称"
prop="GroupName"
>
<el-input v-model="form.GroupName" />
</el-form-item>
<el-form-item
label="分组标识"
prop="GroupClassify"
>
<el-select
v-model="form.GroupClassify"
clearable
>
<el-option
v-for="item of groupClassifyList"
:key="item.Id"
:value="parseInt(item.Code)"
:label="item.ValueCN"
/>
</el-select>
</el-form-item>
<el-form-item
v-if="form.Type === 'group'"
label="分组名称EN"
prop="GroupEnName"
>
<el-input v-model="form.GroupEnName" />
</el-form-item>
<el-form-item
v-if="form.Type !== 'group'"
label="问题名称"
prop="QuestionName"
>
<el-input v-model="form.QuestionName" />
</el-form-item>
<el-form-item
v-if="form.Type !== 'group'"
label="问题名称EN"
prop="QuestionEnName"
>
<el-input v-model="form.QuestionEnName" />
</el-form-item>
<!-- <el-form-item
v-if="form.Type === 'select' || form.Type === 'radio'"
label="选项"
@ -170,7 +170,7 @@
placeholder="选项请用‘|’分割多个选项"
/>
</el-form-item>
<el-form-item label="问题分类">
<el-form-item label="问题分类" v-if="form.Type !== 'group'">
<!-- <el-radio-group v-model="form.QuestionClassify">
<el-radio v-for="item of $d.QuestionClassify" :key="item.id" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group> -->
@ -406,6 +406,7 @@
</el-form-item>
<el-form-item
label="问题标识"
v-if="form.Type !== 'group'"
prop="QuestionType"
>
<el-select

View File

@ -1,7 +1,7 @@
<template>
<div class="criterion-config">
<el-tabs v-model="activeName">
<el-tab-pane label="访视阅片" name="0">
<el-tab-pane :label="'访视阅片'" name="0">
<div class="search-form" style="display:flex;justify-content: space-between;">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item label="名称">
@ -18,7 +18,7 @@
:disabled="list.length === 0"
size="mini"
type="primary"
@click="preview.visible = true"
@click="handlePreview"
>
预览
</el-button>
@ -200,7 +200,7 @@
v-if="addOrEdit.visible"
:visible.sync="addOrEdit.visible"
:close-on-click-modal="false"
:title="addOrEdit.title"
:title="`${addOrEdit.title}`"
width="600px"
append-to-body
custom-class="base-dialog-wrapper"
@ -303,6 +303,9 @@ export default {
this.getList()
},
methods: {
handlePreview() {
window.open(`/ecrfPreview?SystemReadingCriterionId=${this.criterionId}&lang=${this.$i18n.locale}`)
},
getList() {
this.loading = true
this.searchData.ReadingQuestionCriterionSystemId = this.criterionId

View File

@ -104,6 +104,7 @@
<el-button
type="danger"
size="mini"
:disabled="scope.row.IsCompleteConfig"
@click="handleDelete(scope.row)"
>
删除
@ -133,7 +134,7 @@
<el-dialog
v-if="configVisible"
title="eCRF"
:title="'eCRF' + `(${rowData.CriterionName})`"
:visible.sync="configVisible"
:close-on-click-modal="false"
:fullscreen="true"
@ -145,7 +146,7 @@
<el-dialog
v-if="configBaseDataVisible"
title="基础数据配置"
:title="'基础数据配置' + `(${rowData.CriterionName})`"
:visible.sync="configBaseDataVisible"
:close-on-click-modal="false"
:fullscreen="true"
@ -190,6 +191,7 @@ export default {
addDialog: { title: '', visible: false }
}
},
mounted() {
this.getList()
},

View File

@ -137,11 +137,10 @@ export default {
})
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -150,7 +149,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => { this.loading = false })
})

View File

@ -1,109 +1,109 @@
<template>
<div v-loading="loading" style="min-height:400px;">
<el-form
v-if="isRender"
ref="questions"
size="small"
:model="questionForm"
>
<CriterionFormItem
v-for="question of questions"
:key="question.Id"
:question="question"
:question-form="questionForm"
:reading-task-state="readingTaskState"
:criterion-id="criterionId"
@resetFormItemData="resetFormItemData"
@setFormItemData="setFormItemData"
/>
</el-form>
</div>
</template>
<script>
import { getSystemReadingQuestion } from '@/api/dictionary'
import CriterionFormItem from './CriterionFormItem'
export default {
name: 'EcrfPreview',
components: {
CriterionFormItem
},
props: {
criterionId: {
type: String,
required: true
}
},
data() {
return {
loading: false,
questions: [],
questionForm: {},
publicQuestions: [],
isRender: false,
readingTaskState: 0,
activeName: 0
}
},
mounted() {
this.getQuestions()
},
methods: {
getQuestions() {
this.loading = true
var param = {
id: this.criterionId
}
getSystemReadingQuestion(param).then(res => {
res.Result.SinglePage.map((v) => {
if (v.Type === 'group' && v.Childrens.length === 0) return
if (!v.IsPage && v.Type !== 'group' && v.Type !== 'summary') {
this.$set(this.questionForm, v.Id, v.DefaultValue)
}
if (v.Childrens && v.Childrens.length > 0) {
this.setChild(v.Childrens)
}
})
this.questions = res.Result.SinglePage
this.isRender = true
this.loading = false
}).catch(() => { this.loading = false })
},
setChild(obj) {
obj.forEach(i => {
if (i.Type !== 'group' && i.Type !== 'summary' && i.Id) {
this.$set(this.questionForm, i.Id, '')
}
if (i.Childrens && i.Childrens.length > 0) {
this.setChild(i.Childrens)
}
})
},
resetFormItemData(v) {
this.questionForm[v] = ''
},
setFormItemData(obj) {
this.$set(this.questionForm, obj.key, obj.val)
}
}
}
</script>
<style lang="scss" scoped>
::-webkit-scrollbar {
width: 7px;
height: 7px;
}
::-webkit-scrollbar-thumb {
border-radius: 10px;
background: #d0d0d0;
}
.tabContent{
height:300px;
overflow-y: auto;
}
</style>
<template>
<div v-loading="loading" style="min-height:400px;">
<el-form
v-if="isRender"
ref="questions"
size="small"
:model="questionForm"
>
<CriterionFormItem
v-for="question of questions"
:key="question.Id"
:question="question"
:question-form="questionForm"
:reading-task-state="readingTaskState"
:criterion-id="criterionId"
@resetFormItemData="resetFormItemData"
@setFormItemData="setFormItemData"
/>
</el-form>
</div>
</template>
<script>
import { getSystemReadingQuestion } from '@/api/dictionary'
import CriterionFormItem from './CriterionFormItem'
import {mapMutations} from "vuex";
export default {
name: 'EcrfPreview',
components: {
CriterionFormItem
},
data() {
return {
loading: false,
questions: [],
questionForm: {},
publicQuestions: [],
isRender: false,
readingTaskState: 0,
activeName: 0
}
},
mounted() {
this.$i18n.locale = this.$route.query.lang
this.setLanguage(this.$route.query.lang)
this.$updateDictionary()
this.criterionId = this.$route.query.SystemReadingCriterionId
this.getQuestions()
},
methods: {
...mapMutations({ setLanguage: 'lang/setLanguage' }),
getQuestions() {
this.loading = true
var param = {
id: this.criterionId
}
getSystemReadingQuestion(param).then(res => {
res.Result.SinglePage.map((v) => {
if (v.Type === 'group' && v.Childrens.length === 0) return
if (!v.IsPage && v.Type !== 'group' && v.Type !== 'summary') {
this.$set(this.questionForm, v.Id, v.DefaultValue)
}
if (v.Childrens && v.Childrens.length > 0) {
this.setChild(v.Childrens)
}
})
this.questions = res.Result.SinglePage
this.isRender = true
this.loading = false
}).catch(() => { this.loading = false })
},
setChild(obj) {
obj.forEach(i => {
if (i.Type !== 'group' && i.Type !== 'summary' && i.Id) {
this.$set(this.questionForm, i.Id, '')
}
if (i.Childrens && i.Childrens.length > 0) {
this.setChild(i.Childrens)
}
})
},
resetFormItemData(v) {
this.questionForm[v] = ''
},
setFormItemData(obj) {
this.$set(this.questionForm, obj.key, obj.val)
}
}
}
</script>
<style lang="scss" scoped>
::-webkit-scrollbar {
width: 7px;
height: 7px;
}
::-webkit-scrollbar-thumb {
border-radius: 10px;
background: #d0d0d0;
}
.tabContent{
height:300px;
overflow-y: auto;
}
</style>

View File

@ -104,7 +104,7 @@
v-if="config.configType === 2"
v-loading="loading"
ref="multipleTable"
:data="$d && $d.GlobalAssessType"
:data="GlobalAssessType"
stripe
@selection-change="handleSelectionChange"
>
@ -165,7 +165,7 @@
<script>
import BaseModel from '@/components/BaseModel'
import { getAssessType, setAssessType, setDictionaryBaseLineUse, setDictionaryFollowVisitUse, setSystemGlobalInfo, getSystemGlobalInfo } from '@/api/dictionary'
import { getCriterionDictionary, getAssessType, setAssessType, setDictionaryBaseLineUse, setDictionaryFollowVisitUse, setSystemGlobalInfo, getSystemGlobalInfo } from '@/api/dictionary'
export default {
props: {
data: {
@ -192,7 +192,8 @@ export default {
IsMustGlobalReading: false,
form: {
IsMustGlobalReading: false
}
},
GlobalAssessType: []
}
},
beforecreate() {
@ -204,8 +205,17 @@ export default {
mounted() {
this.getList()
this.getSystemGlobalInfo()
this.getCriterionDictionary()
},
methods: {
getCriterionDictionary() {
getCriterionDictionary({
ReadingCriterionId: this.criterionId,
DictionaryCode: 'GlobalAssessType'
}).then(res => {
this.GlobalAssessType = res.Result.GlobalAssessType
})
},
getSystemGlobalInfo() {
getSystemGlobalInfo({
SystemCriterionId: this.criterionId

View File

@ -72,7 +72,7 @@
v-loading="loading"
style="width: 100%"
ref="multipleTable"
:data="$d.OncologyAssessType"
:data="OncologyAssessType"
stripe
@selection-change="handleSelectionChange"
>
@ -81,13 +81,13 @@
width="55">
</el-table-column>
<el-table-column
prop="raw.ValueCN"
prop="ValueCN"
label="中文值"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop="raw.Value"
prop="Value"
label="英文值"
show-overflow-tooltip
>
@ -105,7 +105,7 @@
<script>
import BaseModel from '@/components/BaseModel'
import { getSystemOncologyInfo, setSystemOncologyInfo } from '@/api/dictionary'
import { getSystemOncologyInfo, setSystemOncologyInfo, getCriterionDictionary } from '@/api/dictionary'
export default {
props: {
data: {
@ -132,13 +132,23 @@ export default {
preview: { visible: false, title: 'eCRF预览' },
config: { visible: false, title: '肿瘤学阅片结果', appendToBody: true, width: '600px', configType: 0 },
selectedList: [],
OncologyAssessType: [],
IsOncologyReading: true
}
},
mounted() {
this.getList()
this.getCriterionDictionary()
},
methods: {
getCriterionDictionary() {
getCriterionDictionary({
ReadingCriterionId: this.criterionId,
DictionaryCode: 'OncologyAssessType'
}).then(res => {
this.OncologyAssessType = res.Result.OncologyAssessType
})
},
toggleSelection(rows) {
console.log(this.$refs.multipleTable)
if (rows) {
@ -173,9 +183,9 @@ export default {
this.config.title = '肿瘤学阅片结果'
this.config.visible = true
this.$nextTick(() => {
var a = this.$d.OncologyAssessType.filter(v => {
var a = this.OncologyAssessType.filter(v => {
return !!this.list.find(v1 => {
return v1.DictionaryId === v.id
return v1.DictionaryId === v.Id
})
})
this.toggleSelection(a)
@ -184,15 +194,15 @@ export default {
},
handleSave() {
this.loading = true
var a = this.$d.OncologyAssessType.filter(v => {
var a = this.OncologyAssessType.filter(v => {
return !!this.list.find(v1 => {
return v1.DictionaryId === v.id
return v1.DictionaryId === v.Id
})
})
var params = {
SystemCriterionId: this.criterionId,
ParentCode: 'OncologyAssessType',
DictionaryIds: this.config.configType === 1 ? a.map(v => v.id) : this.selectedList.map(v => v.id),
DictionaryIds: this.config.configType === 1 ? a.map(v => v.Id) : this.selectedList.map(v => v.Id),
IsSystemCriterion: true,
IsOncologyReading: this.form.IsOncologyReading
}

View File

@ -170,11 +170,10 @@ export default {
})
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -183,7 +182,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => { this.loading = false })
})

View File

@ -217,11 +217,10 @@ export default {
},
//
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading = true
@ -230,7 +229,7 @@ export default {
this.loading = false
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => { this.loading = false })
})

View File

@ -1,188 +1,187 @@
<template>
<div class="template-wrapper">
<div class="left-wrapper">
<box-content>
<div class="search">
<SearchForm
size="mini"
:that="this"
:search-data="searchData"
:search-form="template_form"
:search-handle="template_handle"
@search="handleSearch"
@reset="handleReset"
/>
<span style="margin-left:auto;">
<el-button type="primary" size="small" style="margin-left:auto;" @click="handleAdd">New</el-button>
<el-button type="primary" size="small" @click="handleSetting">Setting</el-button>
</span>
</div>
<base-table
v-loading="loading"
:columns="template_cols"
:list="list"
:search-data="searchData"
:total="total"
@getList="getList"
@items="handleView"
@edit="handleEdit"
@delete="handleDelete"
@sortByColumn="sortByColumn"
/>
</box-content>
</div>
<div class="right-wrapper">
<div v-if="template.Name">
<span>Name:</span>
<el-input v-model="template.Name" size="small" style="width:150px;" readonly />
</div>
<el-table v-if="template.Name" ref="itemList" v-loading="itemLoading" :data="itmeList" class="table" size="small" @select="onTableSelect">
<el-table-column type="selection" width="50" />
<el-table-column type="index" width="40" />
<el-table-column prop="Name" label="Item" show-overflow-tooltip />
</el-table>
</div>
<template-form v-if="template_model.visible" :data="rowData" @close="closeModel" />
</div>
</template>
<script>
import { getQaTemplateList, deleteQATemplate, getQaTemplateConfigList, configQATemplateItem } from '@/api/dictionary'
import { template_cols, template_form, template_handle, template_model } from './template'
import BoxContent from '@/components/BoxContent'
import SearchForm from '@/components/BaseForm/search-form'
import BaseTable from '@/components/BaseTable'
import TemplateForm from './components/TemplateForm'
import tableMixins from '@/mixins/table'
const searchDataDefault = () => {
return {
Name: '',
PageIndex: 1,
PageSize: 20
}
}
export default {
name: 'TemplateList',
components: { BoxContent, SearchForm, BaseTable, TemplateForm },
mixins: [tableMixins],
data() {
return {
template_cols,
template_form,
template_handle,
template_model,
searchData: searchDataDefault(),
list: [],
total: 0,
loading: false,
rowData: {},
template: {},
itmeList: [],
itemLoading: false
}
},
mounted() {
this.getList()
},
methods: {
getList() {
this.loading = true
getQaTemplateList(this.searchData).then(res => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
this.template = {}
this.itmeList = []
})
},
handleAdd() {
this.rowData = {}
this.template_model.title = 'New'
this.template_model.visible = true
},
handleSetting() {
this.$router.push({ name: 'TemplateOfSetting' })
},
handleEdit(row) {
this.rowData = row
this.template_model.title = 'Edit'
this.template_model.visible = true
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
deleteQATemplate(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
}
})
})
},
handleView(row) {
this.template = row
this.itemLoading = true
getQaTemplateConfigList(row.Id, row.ModalityId).then(res => {
this.itmeList = res.Result
this.itmeList.forEach(val => {
this.$nextTick(
function() {
this.$refs.itemList.toggleRowSelection(val, val.IsSelect)
}.bind(this)
)
})
this.itemLoading = false
})
},
onTableSelect(rows, row) {
const param = {
qaTemplateItemId: row.Id,
qaTemplateId: this.template.Id,
isSelect: rows.indexOf(row) !== -1
}
configQATemplateItem(param).then(res => {
this.$message.success('Updated successfully')
})
},
handleReset() {
this.searchData = searchDataDefault()
this.getList()
this.template = {}
this.itmeList = []
},
closeModel() {
this.template_model.visible = false
this.getList()
}
}
}
</script>
<style lang="scss">
.template-wrapper{
height: 100%;
display: flex;
.left-wrapper{
width: 0;
flex-grow: 4;
border-right: 1px solid #ccc;
}
.right-wrapper{
width: 0;
flex-grow: 3;
padding: 5px;
thead{
.el-table-column--selection{
.cell {
display: none;
}
}
}
}
}
</style>
<template>
<div class="template-wrapper">
<div class="left-wrapper">
<box-content>
<div class="search">
<SearchForm
size="mini"
:that="this"
:search-data="searchData"
:search-form="template_form"
:search-handle="template_handle"
@search="handleSearch"
@reset="handleReset"
/>
<span style="margin-left:auto;">
<el-button type="primary" size="small" style="margin-left:auto;" @click="handleAdd">New</el-button>
<el-button type="primary" size="small" @click="handleSetting">Setting</el-button>
</span>
</div>
<base-table
v-loading="loading"
:columns="template_cols"
:list="list"
:search-data="searchData"
:total="total"
@getList="getList"
@items="handleView"
@edit="handleEdit"
@delete="handleDelete"
@sortByColumn="sortByColumn"
/>
</box-content>
</div>
<div class="right-wrapper">
<div v-if="template.Name">
<span>Name:</span>
<el-input v-model="template.Name" size="small" style="width:150px;" readonly />
</div>
<el-table v-if="template.Name" ref="itemList" v-loading="itemLoading" :data="itmeList" class="table" size="small" @select="onTableSelect">
<el-table-column type="selection" width="50" />
<el-table-column type="index" width="40" />
<el-table-column prop="Name" label="Item" show-overflow-tooltip />
</el-table>
</div>
<template-form v-if="template_model.visible" :data="rowData" @close="closeModel" />
</div>
</template>
<script>
import { getQaTemplateList, deleteQATemplate, getQaTemplateConfigList, configQATemplateItem } from '@/api/dictionary'
import { template_cols, template_form, template_handle, template_model } from './template'
import BoxContent from '@/components/BoxContent'
import SearchForm from '@/components/BaseForm/search-form'
import BaseTable from '@/components/BaseTable'
import TemplateForm from './components/TemplateForm'
import tableMixins from '@/mixins/table'
const searchDataDefault = () => {
return {
Name: '',
PageIndex: 1,
PageSize: 20
}
}
export default {
name: 'TemplateList',
components: { BoxContent, SearchForm, BaseTable, TemplateForm },
mixins: [tableMixins],
data() {
return {
template_cols,
template_form,
template_handle,
template_model,
searchData: searchDataDefault(),
list: [],
total: 0,
loading: false,
rowData: {},
template: {},
itmeList: [],
itemLoading: false
}
},
mounted() {
this.getList()
},
methods: {
getList() {
this.loading = true
getQaTemplateList(this.searchData).then(res => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
this.template = {}
this.itmeList = []
})
},
handleAdd() {
this.rowData = {}
this.template_model.title = 'New'
this.template_model.visible = true
},
handleSetting() {
this.$router.push({ name: 'TemplateOfSetting' })
},
handleEdit(row) {
this.rowData = row
this.template_model.title = 'Edit'
this.template_model.visible = true
},
handleDelete(row) {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
})
.then(() => {
deleteQATemplate(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
})
})
},
handleView(row) {
this.template = row
this.itemLoading = true
getQaTemplateConfigList(row.Id, row.ModalityId).then(res => {
this.itmeList = res.Result
this.itmeList.forEach(val => {
this.$nextTick(
function() {
this.$refs.itemList.toggleRowSelection(val, val.IsSelect)
}.bind(this)
)
})
this.itemLoading = false
})
},
onTableSelect(rows, row) {
const param = {
qaTemplateItemId: row.Id,
qaTemplateId: this.template.Id,
isSelect: rows.indexOf(row) !== -1
}
configQATemplateItem(param).then(res => {
this.$message.success('Updated successfully')
})
},
handleReset() {
this.searchData = searchDataDefault()
this.getList()
this.template = {}
this.itmeList = []
},
closeModel() {
this.template_model.visible = false
this.getList()
}
}
}
</script>
<style lang="scss">
.template-wrapper{
height: 100%;
display: flex;
.left-wrapper{
width: 0;
flex-grow: 4;
border-right: 1px solid #ccc;
}
.right-wrapper{
width: 0;
flex-grow: 3;
padding: 5px;
thead{
.el-table-column--selection{
.cell {
display: none;
}
}
}
}
}
</style>

View File

@ -1,182 +1,181 @@
<template>
<box-content>
<div class="search">
<SearchForm
size="mini"
:that="this"
:search-data="searchData"
:search-form="setting_form"
:search-handle="setting_handle"
@search="handleSearch"
@reset="handleReset"
/>
<span style="margin-left:auto;">
<el-button type="primary" size="small" style="margin-left:auto;" @click="handleAdd">New</el-button>
</span>
</div>
<base-table
v-loading="loading"
:columns="setting_cols"
:list="list"
:search-data="searchData"
:total="total"
@getList="getList"
@edit="handleEdit"
@delete="handleDelete"
@sortByColumn="sortByColumn"
>
<!-- 选择自定义slot -->
<template slot="modalitySlot" slot-scope="{scope}">
{{ scope.row.ModalityList && scope.row.ModalityList.length>0?scope.row.ModalityList.join(', '):'' }}
</template>
</base-table>
<setting-form v-if="setting_model.visible" :data="rowData" @close="closeModel" />
</box-content>
</template>
<script>
import { getQATemplateItemList, deleteQATemplateItem } from '@/api/dictionary'
import { getBasicDataSelects } from '@/api/dictionary/dictionary'
import { setting_cols, setting_form, setting_handle, setting_model } from './template'
import BoxContent from '@/components/BoxContent'
import SearchForm from '@/components/BaseForm/search-form'
import BaseTable from '@/components/BaseTable'
import SettingForm from './components/SettingForm.vue'
const searchDataDefault = () => {
return {
ModalityId: '',
PageIndex: 1,
PageSize: 20
}
}
export default {
name: 'TemplateSettings',
components: { BoxContent, SearchForm, BaseTable, SettingForm },
data() {
return {
setting_cols,
setting_form,
setting_handle,
setting_model,
list: [],
loading: false,
total: 0,
searchData: searchDataDefault(),
rowData: {},
readingType: {}
}
},
mounted() {
this.getList()
this.getInfo()
},
methods: {
getList() {
this.loading = true
getQATemplateItemList(this.searchData).then(res => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => { this.loading = false })
},
findItemIndex(key) {
return this.setting_form.findIndex(value => value.prop && value.prop === key
)
},
async getInfo() {
await this.getDicData()
if (this.readingType.length > 0) {
const index = this.findItemIndex('ModalityId')
this.$set(this.setting_form[index], 'options', this.readingType)
}
},
getDicData() {
getBasicDataSelects(['ReadingType']).then(res => {
const { ReadingType } = { ...res.Result }
this.readingType = ReadingType || {}
}).catch(() => {})
},
handleAdd() {
this.rowData = {}
this.setting_model.title = 'Add'
this.setting_model.visible = true
},
handleEdit(row) {
this.rowData = row
this.setting_model.title = 'Add'
this.setting_model.visible = true
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
deleteQATemplateItem(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
}
})
})
},
sortByColumn(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()
},
handleReset() {
this.searchData = searchDataDefault()
this.getList()
},
closeModel() {
this.setting_model.visible = false
this.getList()
}
}
}
</script>
<style lang="scss">
.template-setting{
height: 100%;
.el-header{
.filter-container{
margin-top: 10px;
display: flex;
align-items: center;
span{
font-size:13px;
margin-right:5px;
}
.mr{
margin-right: 5px;
width: 120px;
}
}
}
.el-main{
height:calc(100% - 40px);
padding: 0 20px;
.data-table{
height: 100%;
}
}
.el-footer{
padding: 0 20px;
}
.el-dialog__header{
padding:10px;
}
.el-dialog__body{
padding:10px;
}
}
</style>
<template>
<box-content>
<div class="search">
<SearchForm
size="mini"
:that="this"
:search-data="searchData"
:search-form="setting_form"
:search-handle="setting_handle"
@search="handleSearch"
@reset="handleReset"
/>
<span style="margin-left:auto;">
<el-button type="primary" size="small" style="margin-left:auto;" @click="handleAdd">New</el-button>
</span>
</div>
<base-table
v-loading="loading"
:columns="setting_cols"
:list="list"
:search-data="searchData"
:total="total"
@getList="getList"
@edit="handleEdit"
@delete="handleDelete"
@sortByColumn="sortByColumn"
>
<!-- 选择自定义slot -->
<template slot="modalitySlot" slot-scope="{scope}">
{{ scope.row.ModalityList && scope.row.ModalityList.length>0?scope.row.ModalityList.join(', '):'' }}
</template>
</base-table>
<setting-form v-if="setting_model.visible" :data="rowData" @close="closeModel" />
</box-content>
</template>
<script>
import { getQATemplateItemList, deleteQATemplateItem } from '@/api/dictionary'
import { getBasicDataSelects } from '@/api/dictionary/dictionary'
import { setting_cols, setting_form, setting_handle, setting_model } from './template'
import BoxContent from '@/components/BoxContent'
import SearchForm from '@/components/BaseForm/search-form'
import BaseTable from '@/components/BaseTable'
import SettingForm from './components/SettingForm.vue'
const searchDataDefault = () => {
return {
ModalityId: '',
PageIndex: 1,
PageSize: 20
}
}
export default {
name: 'TemplateSettings',
components: { BoxContent, SearchForm, BaseTable, SettingForm },
data() {
return {
setting_cols,
setting_form,
setting_handle,
setting_model,
list: [],
loading: false,
total: 0,
searchData: searchDataDefault(),
rowData: {},
readingType: {}
}
},
mounted() {
this.getList()
this.getInfo()
},
methods: {
getList() {
this.loading = true
getQATemplateItemList(this.searchData).then(res => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => { this.loading = false })
},
findItemIndex(key) {
return this.setting_form.findIndex(value => value.prop && value.prop === key
)
},
async getInfo() {
await this.getDicData()
if (this.readingType.length > 0) {
const index = this.findItemIndex('ModalityId')
this.$set(this.setting_form[index], 'options', this.readingType)
}
},
getDicData() {
getBasicDataSelects(['ReadingType']).then(res => {
const { ReadingType } = { ...res.Result }
this.readingType = ReadingType || {}
}).catch(() => {})
},
handleAdd() {
this.rowData = {}
this.setting_model.title = 'Add'
this.setting_model.visible = true
},
handleEdit(row) {
this.rowData = row
this.setting_model.title = 'Add'
this.setting_model.visible = true
},
handleDelete(row) {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
})
.then(() => {
deleteQATemplateItem(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
})
})
},
sortByColumn(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()
},
handleReset() {
this.searchData = searchDataDefault()
this.getList()
},
closeModel() {
this.setting_model.visible = false
this.getList()
}
}
}
</script>
<style lang="scss">
.template-setting{
height: 100%;
.el-header{
.filter-container{
margin-top: 10px;
display: flex;
align-items: center;
span{
font-size:13px;
margin-right:5px;
}
.mr{
margin-right: 5px;
width: 120px;
}
}
}
.el-main{
height:calc(100% - 40px);
padding: 0 20px;
.data-table{
height: 100%;
}
}
.el-footer{
padding: 0 20px;
}
.el-dialog__header{
padding:10px;
}
.el-dialog__body{
padding:10px;
}
}
</style>

View File

@ -1,162 +1,161 @@
<template>
<box-content>
<!-- 搜索框 -->
<div class="search">
<span style="margin-left:auto;">
<el-button
type="primary"
size="mini"
@click="handleAdd"
>
Add
</el-button>
</span>
</div>
<!-- 受试者列表 -->
<el-table
v-loading="loading"
v-adaptive="{bottomOffset:45}"
:data="list"
stripe
height="100"
style="width:100%"
>
<el-table-column type="index" width="40" />
<el-table-column
prop="Code"
label="编号"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
prop="Name"
label="场景类型"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Value"
label="签名内容(EN)"
show-overflow-tooltip
/>
<el-table-column
prop="ValueCN"
label="签名内容(CN)"
show-overflow-tooltip
/>
<el-table-column
prop="UpdateTime"
label="更新时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CreateTime"
label="创建时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column label="Action" width="200" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.row)"
>
Edit
</el-button>
<el-button type="text" @click="handleDelete(scope.row)">Delete</el-button>
</template>
</el-table-column>
</el-table>
<!-- 场景配置 -->
<el-dialog
v-if="editVisible"
:visible.sync="editVisible"
:close-on-click-modal="false"
:title="title"
width="700px"
append-to-body
custom-class="base-dialog-wrapper"
>
<SceneConfigForm :parent-id="parentId" :data="rowData" @closeDialog="closeDialog" @getList="getList" />
</el-dialog>
</box-content>
</template>
<script>
import { getChildList, deleteSystemBasicData } from '@/api/dictionary'
import BoxContent from '@/components/BoxContent'
import SceneConfigForm from './SceneConfigForm'
export default {
name: 'SignTemplate',
components: { BoxContent, SceneConfigForm },
props: {
parentId: {
type: String,
required: true
}
},
data() {
return {
loading: false,
list: [],
rowData: {},
title: '',
editVisible: false
}
},
mounted() {
this.getList()
},
methods: {
//
getList() {
this.loading = true
getChildList(this.parentId).then(res => {
this.loading = false
this.list = res.Result
}).catch(() => { this.loading = false })
},
//
handleAdd() {
this.rowData = {}
this.title = 'Add'
this.editVisible = true
},
//
handleEdit(row) {
this.rowData = { ...row }
this.title = 'Edit'
this.editVisible = true
},
//
handleDelete(row) {
this.$confirm('Sure to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
deleteSystemBasicData(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
}
})
})
},
//
closeDialog() {
this.editVisible = false
}
}
}
</script>
<template>
<box-content>
<!-- 搜索框 -->
<div class="search">
<span style="margin-left:auto;">
<el-button
type="primary"
size="mini"
@click="handleAdd"
>
Add
</el-button>
</span>
</div>
<!-- 受试者列表 -->
<el-table
v-loading="loading"
v-adaptive="{bottomOffset:45}"
:data="list"
stripe
height="100"
style="width:100%"
>
<el-table-column type="index" width="40" />
<el-table-column
prop="Code"
label="编号"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
prop="Name"
label="场景类型"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Value"
label="签名内容(EN)"
show-overflow-tooltip
/>
<el-table-column
prop="ValueCN"
label="签名内容(CN)"
show-overflow-tooltip
/>
<el-table-column
prop="UpdateTime"
label="更新时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CreateTime"
label="创建时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column label="Action" width="200" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.row)"
>
Edit
</el-button>
<el-button type="text" @click="handleDelete(scope.row)">Delete</el-button>
</template>
</el-table-column>
</el-table>
<!-- 场景配置 -->
<el-dialog
v-if="editVisible"
:visible.sync="editVisible"
:close-on-click-modal="false"
:title="title"
width="700px"
append-to-body
custom-class="base-dialog-wrapper"
>
<SceneConfigForm :parent-id="parentId" :data="rowData" @closeDialog="closeDialog" @getList="getList" />
</el-dialog>
</box-content>
</template>
<script>
import { getChildList, deleteSystemBasicData } from '@/api/dictionary'
import BoxContent from '@/components/BoxContent'
import SceneConfigForm from './SceneConfigForm'
export default {
name: 'SignTemplate',
components: { BoxContent, SceneConfigForm },
props: {
parentId: {
type: String,
required: true
}
},
data() {
return {
loading: false,
list: [],
rowData: {},
title: '',
editVisible: false
}
},
mounted() {
this.getList()
},
methods: {
//
getList() {
this.loading = true
getChildList(this.parentId).then(res => {
this.loading = false
this.list = res.Result
}).catch(() => { this.loading = false })
},
//
handleAdd() {
this.rowData = {}
this.title = 'Add'
this.editVisible = true
},
//
handleEdit(row) {
this.rowData = { ...row }
this.title = 'Edit'
this.editVisible = true
},
//
handleDelete(row) {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
})
.then(() => {
deleteSystemBasicData(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
})
})
},
//
closeDialog() {
this.editVisible = false
}
}
}
</script>

View File

@ -1,229 +1,228 @@
<template>
<box-content>
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item label="编号:">
<el-input v-model="searchData.Code" style="width:100px;" />
</el-form-item>
<el-form-item label="模板:">
<el-input v-model="searchData.Name" style="width:100px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto;">
<el-button
type="primary"
size="mini"
@click="handleAdd"
>
New
</el-button>
</span>
</div>
<!-- 受试者列表 -->
<el-table
v-loading="loading"
v-adaptive="{bottomOffset:45}"
:data="list"
stripe
height="100"
style="width:100%"
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<el-table-column
prop="Code"
label="Code"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
prop="Name"
label="模板"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Value"
label="签名内容(EN)"
show-overflow-tooltip
/>
<el-table-column
prop="ValueCN"
label="签名内容(CN)"
show-overflow-tooltip
/>
<el-table-column
prop="UpdateTime"
label="更新时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CreateTime"
label="创建时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column label="Action" width="200" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.row)"
>
Edit
</el-button>
<el-button
type="text"
@click="handleConfig(scope.row)"
>
场景配置
</el-button>
<el-button type="text" @click="handleDelete(scope.row)">Delete</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<!-- 新增编辑 -->
<el-dialog
v-if="editVisible"
:visible.sync="editVisible"
:close-on-click-modal="false"
:title="title"
width="700px"
custom-class="base-dialog-wrapper"
>
<SignTemplateForm :data="rowData" @closeDialog="closeDialog" @getList="getList" />
</el-dialog>
<!-- 场景配置 -->
<el-dialog
v-if="configVisible"
:visible.sync="configVisible"
title="场景配置"
:fullscreen="true"
append-to-body
custom-class="base-dialog-wrapper"
>
<SceneList :parent-id="rowData.Id" @closeDialog="closeDialog" />
</el-dialog>
</box-content>
</template>
<script>
import { getSystemBasicDataList, deleteSystemBasicData } from '@/api/dictionary'
import BoxContent from '@/components/BoxContent'
import SignTemplateForm from './components/SignTemplateForm'
import SceneList from './components/SceneList'
import Pagination from '@/components/Pagination'
const searchDataDefault = () => {
return {
Code: '',
Name: '',
PageIndex: 1,
PageSize: 20
}
}
export default {
name: 'SignTemplate',
components: { BoxContent, SignTemplateForm, Pagination, SceneList },
data() {
return {
searchData: searchDataDefault(),
loading: false,
list: [],
total: 0,
rowData: {},
title: '',
editVisible: false,
configVisible: false
}
},
mounted() {
this.getList()
},
methods: {
//
getList() {
this.loading = true
getSystemBasicDataList(this.searchData).then(res => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => { this.loading = false })
},
//
handleAdd() {
this.rowData = {}
this.title = 'Add'
this.editVisible = true
},
//
handleEdit(row) {
this.rowData = { ...row }
this.title = 'Edit'
this.editVisible = true
},
//
handleDelete(row) {
this.$confirm('Sure to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
deleteSystemBasicData(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
}
})
})
},
//
handleConfig(row) {
this.rowData = { ...row }
this.configVisible = true
},
//
handleSearch() {
this.searchData.PageIndex = 1
this.getList()
},
//
handleReset() {
this.searchData = searchDataDefault()
this.getList()
},
//
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()
},
//
closeDialog() {
this.editVisible = false
}
}
}
</script>
<template>
<box-content>
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item label="编号:">
<el-input v-model="searchData.Code" style="width:100px;" />
</el-form-item>
<el-form-item label="模板:">
<el-input v-model="searchData.Name" style="width:100px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto;">
<el-button
type="primary"
size="mini"
@click="handleAdd"
>
New
</el-button>
</span>
</div>
<!-- 受试者列表 -->
<el-table
v-loading="loading"
v-adaptive="{bottomOffset:45}"
:data="list"
stripe
height="100"
style="width:100%"
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<el-table-column
prop="Code"
label="Code"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
prop="Name"
label="模板"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="Value"
label="签名内容(EN)"
show-overflow-tooltip
/>
<el-table-column
prop="ValueCN"
label="签名内容(CN)"
show-overflow-tooltip
/>
<el-table-column
prop="UpdateTime"
label="更新时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="CreateTime"
label="创建时间"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column label="Action" width="200" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.row)"
>
Edit
</el-button>
<el-button
type="text"
@click="handleConfig(scope.row)"
>
场景配置
</el-button>
<el-button type="text" @click="handleDelete(scope.row)">Delete</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<!-- 新增编辑 -->
<el-dialog
v-if="editVisible"
:visible.sync="editVisible"
:close-on-click-modal="false"
:title="title"
width="700px"
custom-class="base-dialog-wrapper"
>
<SignTemplateForm :data="rowData" @closeDialog="closeDialog" @getList="getList" />
</el-dialog>
<!-- 场景配置 -->
<el-dialog
v-if="configVisible"
:visible.sync="configVisible"
title="场景配置"
:fullscreen="true"
append-to-body
custom-class="base-dialog-wrapper"
>
<SceneList :parent-id="rowData.Id" @closeDialog="closeDialog" />
</el-dialog>
</box-content>
</template>
<script>
import { getSystemBasicDataList, deleteSystemBasicData } from '@/api/dictionary'
import BoxContent from '@/components/BoxContent'
import SignTemplateForm from './components/SignTemplateForm'
import SceneList from './components/SceneList'
import Pagination from '@/components/Pagination'
const searchDataDefault = () => {
return {
Code: '',
Name: '',
PageIndex: 1,
PageSize: 20
}
}
export default {
name: 'SignTemplate',
components: { BoxContent, SignTemplateForm, Pagination, SceneList },
data() {
return {
searchData: searchDataDefault(),
loading: false,
list: [],
total: 0,
rowData: {},
title: '',
editVisible: false,
configVisible: false
}
},
mounted() {
this.getList()
},
methods: {
//
getList() {
this.loading = true
getSystemBasicDataList(this.searchData).then(res => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => { this.loading = false })
},
//
handleAdd() {
this.rowData = {}
this.title = 'Add'
this.editVisible = true
},
//
handleEdit(row) {
this.rowData = { ...row }
this.title = 'Edit'
this.editVisible = true
},
//
handleDelete(row) {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
})
.then(() => {
deleteSystemBasicData(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
})
})
},
//
handleConfig(row) {
this.rowData = { ...row }
this.configVisible = true
},
//
handleSearch() {
this.searchData.PageIndex = 1
this.getList()
},
//
handleReset() {
this.searchData = searchDataDefault()
this.getList()
},
//
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()
},
//
closeDialog() {
this.editVisible = false
}
}
}
</script>

View File

@ -5,7 +5,7 @@
<!-- 首次登录修改密码 -->
{{ $t('recompose:title:init') }}
</div>
<el-form ref="passwordForm" v-loading="loading" label-position="right" :model="password" :rules="passwordFormRules" label-width="180px">
<el-form ref="passwordForm" v-loading="loading" label-position="right" :model="password" :rules="passwordFormRules" label-width="200px">
<!-- 邮箱 -->
<el-form-item :label="$t('recompose:form:email')" prop="Email">
<el-input v-model="password.Email" disabled />

View File

@ -1,242 +1,241 @@
<template>
<div class="app-container adjustment-container data-list">
<div class="filter-container">
<el-input v-model="listQuery.Reviewer" style="width:220px" size="small" placeholder="Reviewer ID" class="mr" />
<el-date-picker
v-model="listQuery.BeginMonth"
size="small"
placeholder="Beginning date"
type="month"
value-format="yyyy-MM"
disabled
class="mr"
/>
<el-button size="small" type="text" @click="handleReset">Reset</el-button>
<el-button type="primary" size="small" @click="handleSearch">Search</el-button>
<el-button style="margin-left:auto" type="primary" size="small" @click="handleNew">New</el-button>
</div>
<div class="data-table">
<el-table
v-loading="listLoading"
stripe
:data="list"
height="100%"
size="small"
@sort-change="sortByColumn"
>
<el-table-column type="index" width="50" />
<el-table-column
prop="LastName"
label="Name"
min-width="100"
sortable="custom"
show-overflow-tooltip
>
<template slot-scope="scope">{{ scope.row.LastName + ' / ' + scope.row.FirstName }}</template>
</el-table-column>
<el-table-column
prop="ChineseName"
label="Name CN"
min-width="120"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
prop="ReviewerCode"
label="Reviewer ID"
min-width="110"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
prop="AdjustPaymentUSD"
label="Amount($)"
min-width="120"
sortable="custom"
show-overflow-tooltip
>
<template slot-scope="scope">{{ scope.row.AdjustPaymentUSD | rounding }}</template>
</el-table-column>
<el-table-column
prop="AdjustPaymentCNY"
label="Amount(¥)"
min-width="120"
sortable="custom"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.AdjustPaymentCNY | rounding }}</span>
</template>
</el-table-column>
<el-table-column prop="Note" label="Note" min-width="120" show-overflow-tooltip />
<el-table-column
prop="YearMonth"
label="Adjust Month"
min-width="120"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column label="Action">
<template slot-scope="scope">
<el-button size="small" type="text" :disabled="scope.row.IsLock" @click="handleEdit(scope.row)">Edit</el-button>
<el-button
size="small"
type="text"
:disabled="scope.row.IsLock"
@click="handleDelete(scope.row)"
>Delete</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination">
<pagination :total="total" :page.sync="listQuery.PageIndex" :limit.sync="listQuery.PageSize" @pagination="getList" />
</div>
<el-dialog
:title="title"
:visible.sync="dialogVisible"
:close-on-click-modal="false"
width="600px"
>
<adjustment-form
:key="timer"
:row="row"
:date="date"
:exchange-rate="exchangeRate"
@closeDialog="closeDialog"
@getList="getList"
/>
</el-dialog>
</div>
</template>
<script>
import Pagination from '@/components/Pagination'
import AdjustmentForm from './components/AdjustmentForm'
import { getPaymentAdjustmentList, deletePaymentAdjustment } from '@/api/financials'
import { FormatTime } from '@/utils/formatter'
export default {
filters: {
rounding(value) {
return value ? Number(value).toFixed(2) : value
}
},
components: { Pagination, AdjustmentForm },
data() {
return {
listQuery: {
TrialCode: '',
Reviewer: '',
BeginMonth: '',
EndMonth: '',
PageIndex: 1,
PageSize: 20,
Asc: false,
SortField: ''
},
listLoading: false,
list: [],
total: 0,
exchangeRate: '',
date: '',
timer: '',
dialogVisible: false,
title: '',
row: ''
}
},
mounted() {
this.date = this.$router.currentRoute.query.date
this.listQuery.BeginMonth = this.date
this.listQuery.EndMonth = this.date
// this.exchangeRate = this.$router.currentRoute.query.exchangeRate ? parseInt(this.$router.currentRoute.query.exchangeRate) : 0
this.exchangeRate = this.$router.currentRoute.query.exchangeRate ? this.$router.currentRoute.query.exchangeRate : 0
this.getList()
},
methods: {
getList() {
this.listLoading = true
getPaymentAdjustmentList(this.listQuery).then(res => {
this.listLoading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
})
},
handleNew() {
this.title = 'New'
this.row = {}
this.timer = new Date().getTime()
this.dialogVisible = true
},
handleEdit(row) {
this.title = 'Edit'
this.row = JSON.parse(JSON.stringify(row))
this.timer = new Date().getTime()
this.dialogVisible = true
},
handleDelete(row) {
this.$confirm('Confirm to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
deletePaymentAdjustment(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.indexOf(row), 1)
this.total = this.total - 1
this.$message.success('Deleted successfully !')
}
})
})
},
handleSearch() {
this.listQuery.PageIndex = 1
this.getList()
},
handleReset() {
this.listQuery.PageIndex = 1
this.listQuery.Reviewer = ''
this.getList()
},
sortByColumn(column) {
if (column.order === 'ascending') {
this.listQuery.Asc = true
} else {
this.listQuery.Asc = false
}
this.listQuery.SortField = column.prop
this.listQuery.PageIndex = 1
this.getList()
},
closeDialog() {
this.dialogVisible = false
},
adjustMonthFormatter(row) {
if (row.AdjustedYearMonth) {
const date = new Date(row.AdjustedYearMonth)
return FormatTime(date, 'yyyy-MM')
} else {
return ''
}
}
}
}
</script>
<style lang="scss">
.adjustment-container{
.filter-container{
display: flex;
align-items: center;
.mr{
margin-right:5px;
}
}
.list-container{
height: calc(100% - 80px);
}
}
</style>
<template>
<div class="app-container adjustment-container data-list">
<div class="filter-container">
<el-input v-model="listQuery.Reviewer" style="width:220px" size="small" placeholder="Reviewer ID" class="mr" />
<el-date-picker
v-model="listQuery.BeginMonth"
size="small"
placeholder="Beginning date"
type="month"
value-format="yyyy-MM"
disabled
class="mr"
/>
<el-button size="small" type="text" @click="handleReset">Reset</el-button>
<el-button type="primary" size="small" @click="handleSearch">Search</el-button>
<el-button style="margin-left:auto" type="primary" size="small" @click="handleNew">New</el-button>
</div>
<div class="data-table">
<el-table
v-loading="listLoading"
stripe
:data="list"
height="100%"
size="small"
@sort-change="sortByColumn"
>
<el-table-column type="index" width="50" />
<el-table-column
prop="LastName"
label="Name"
min-width="100"
sortable="custom"
show-overflow-tooltip
>
<template slot-scope="scope">{{ scope.row.LastName + ' / ' + scope.row.FirstName }}</template>
</el-table-column>
<el-table-column
prop="ChineseName"
label="Name CN"
min-width="120"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
prop="ReviewerCode"
label="Reviewer ID"
min-width="110"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
prop="AdjustPaymentUSD"
label="Amount($)"
min-width="120"
sortable="custom"
show-overflow-tooltip
>
<template slot-scope="scope">{{ scope.row.AdjustPaymentUSD | rounding }}</template>
</el-table-column>
<el-table-column
prop="AdjustPaymentCNY"
label="Amount(¥)"
min-width="120"
sortable="custom"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.AdjustPaymentCNY | rounding }}</span>
</template>
</el-table-column>
<el-table-column prop="Note" label="Note" min-width="120" show-overflow-tooltip />
<el-table-column
prop="YearMonth"
label="Adjust Month"
min-width="120"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column label="Action">
<template slot-scope="scope">
<el-button size="small" type="text" :disabled="scope.row.IsLock" @click="handleEdit(scope.row)">Edit</el-button>
<el-button
size="small"
type="text"
:disabled="scope.row.IsLock"
@click="handleDelete(scope.row)"
>Delete</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination">
<pagination :total="total" :page.sync="listQuery.PageIndex" :limit.sync="listQuery.PageSize" @pagination="getList" />
</div>
<el-dialog
:title="title"
:visible.sync="dialogVisible"
:close-on-click-modal="false"
width="600px"
>
<adjustment-form
:key="timer"
:row="row"
:date="date"
:exchange-rate="exchangeRate"
@closeDialog="closeDialog"
@getList="getList"
/>
</el-dialog>
</div>
</template>
<script>
import Pagination from '@/components/Pagination'
import AdjustmentForm from './components/AdjustmentForm'
import { getPaymentAdjustmentList, deletePaymentAdjustment } from '@/api/financials'
import { FormatTime } from '@/utils/formatter'
export default {
filters: {
rounding(value) {
return value ? Number(value).toFixed(2) : value
}
},
components: { Pagination, AdjustmentForm },
data() {
return {
listQuery: {
TrialCode: '',
Reviewer: '',
BeginMonth: '',
EndMonth: '',
PageIndex: 1,
PageSize: 20,
Asc: false,
SortField: ''
},
listLoading: false,
list: [],
total: 0,
exchangeRate: '',
date: '',
timer: '',
dialogVisible: false,
title: '',
row: ''
}
},
mounted() {
this.date = this.$router.currentRoute.query.date
this.listQuery.BeginMonth = this.date
this.listQuery.EndMonth = this.date
// this.exchangeRate = this.$router.currentRoute.query.exchangeRate ? parseInt(this.$router.currentRoute.query.exchangeRate) : 0
this.exchangeRate = this.$router.currentRoute.query.exchangeRate ? this.$router.currentRoute.query.exchangeRate : 0
this.getList()
},
methods: {
getList() {
this.listLoading = true
getPaymentAdjustmentList(this.listQuery).then(res => {
this.listLoading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
})
},
handleNew() {
this.title = 'New'
this.row = {}
this.timer = new Date().getTime()
this.dialogVisible = true
},
handleEdit(row) {
this.title = 'Edit'
this.row = JSON.parse(JSON.stringify(row))
this.timer = new Date().getTime()
this.dialogVisible = true
},
handleDelete(row) {
this.$confirm('Confirm to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
})
.then(() => {
deletePaymentAdjustment(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.indexOf(row), 1)
this.total = this.total - 1
this.$message.success('Deleted successfully !')
}
})
})
},
handleSearch() {
this.listQuery.PageIndex = 1
this.getList()
},
handleReset() {
this.listQuery.PageIndex = 1
this.listQuery.Reviewer = ''
this.getList()
},
sortByColumn(column) {
if (column.order === 'ascending') {
this.listQuery.Asc = true
} else {
this.listQuery.Asc = false
}
this.listQuery.SortField = column.prop
this.listQuery.PageIndex = 1
this.getList()
},
closeDialog() {
this.dialogVisible = false
},
adjustMonthFormatter(row) {
if (row.AdjustedYearMonth) {
const date = new Date(row.AdjustedYearMonth)
return FormatTime(date, 'yyyy-MM')
} else {
return ''
}
}
}
}
</script>
<style lang="scss">
.adjustment-container{
.filter-container{
display: flex;
align-items: center;
.mr{
margin-right:5px;
}
}
.list-container{
height: calc(100% - 80px);
}
}
</style>

View File

@ -1,198 +1,198 @@
<template>
<div class="app-container exchange-rate data-list">
<div class="filter-container">
<el-date-picker
v-model="listQuery.SearchMonth"
size="small"
placeholder="Search Month"
value-format="yyyy-MM"
format="yyyy-MM"
type="month"
style="width:150px;margin-right:5px"
:picker-options="pickerOption"
/>
<el-button size="small" type="text" @click="handleReset">Reset</el-button>
<el-button type="primary" size="small" @click="handleSearch">Search</el-button>
<el-button style="margin-left:auto" type="primary" size="small" @click="handleNew">New</el-button>
</div>
<div class="list-container">
<el-table
v-loading="listLoading"
:data="list"
stripe
class="table"
height="100%"
size="small"
>
<el-table-column type="index" width="50" />
<el-table-column prop="YearMonth" label="Month" min-width="60" show-overflow-tooltip />
<el-table-column prop="Rate" label="Rate" min-width="60" show-overflow-tooltip />
<el-table-column prop="UpdateTime" label="Update Time" min-width="70" show-overflow-tooltip />
<el-table-column fixed="right" label="Action" min-width="150">
<template slot-scope="scope" min-width="130">
<el-button
size="small"
type="text"
@click="handleEdit(scope.row)"
>Edit</el-button>
<el-button
size="small"
type="text"
@click="handleDelete(scope.row)"
>Delete</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination">
<pagination :total="total" :page.sync="listQuery.PageIndex" :limit.sync="listQuery.PageSize" @pagination="getList" />
</div>
<el-dialog
:key="timer"
:title="title"
:visible.sync="dialogVisible"
width="500px"
:close-on-click-modal="false"
size="small"
>
<el-form ref="rateForm" label-width="150px" :rules="rules" :model="form" size="small">
<el-form-item label="Month: " prop="YearMonth">
<el-date-picker
v-model="form.YearMonth"
type="month"
value-format="yyyy-MM"
:disabled="form.Id !=''&& form.Id !=undefined"
/>
</el-form-item>
<el-form-item label="Exchange Rate: " prop="Rate">
<el-input v-model="form.Rate" type="number" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="small" @click="dialogVisible = false">Cancel</el-button>
<el-button type="primary" :disabled="btnDisabled" size="small" @click="handleSave">Ok</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getRateList, addOrUpdateExchangeRate, deleteExchangeRate } from '@/api/financials'
import Pagination from '@/components/Pagination'
export default {
name: 'ExchangeRate',
components: { Pagination },
data() {
return {
listQuery: { SearchMonth: '', PageIndex: 1, PageSize: 20 },
list: [],
listLoading: false,
total: 0,
dialogVisible: false,
title: '',
timer: '',
form: {},
rules: {
Rate: [{ required: true, message: 'Please specify', trigger: 'blur' }],
YearMonth: [{ required: true, message: 'Please specify', trigger: 'blur' }]
},
btnDisabled: false,
pickerOption: {
disabledDate: time => {
return time.getTime() > Date.now()
}
}
}
},
mounted() { this.getList() },
methods: {
getList() {
this.listLoading = true
getRateList(this.listQuery).then(res => {
this.listLoading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => { this.listLoading = false })
},
handleNew() {
this.form = {}
this.title = 'Add'
this.timer = new Date().getTime()
this.dialogVisible = true
},
handleEdit(row) {
this.title = 'Edit'
this.form = JSON.parse(JSON.stringify(row))
this.timer = new Date().getTime()
this.dialogVisible = true
},
handleSave() {
this.$refs.rateForm.validate(valid => {
if (valid) {
this.btnDisabled = true
const param = {
Rate: this.form.Rate,
YearMonth: this.form.YearMonth
}
this.form.Id ? param.Id = this.form.Id : ''
addOrUpdateExchangeRate(param).then(res => {
if (res.IsSuccess) {
this.getList()
this.$message.success('Updated successfully!')
this.dialogVisible = false
}
this.btnDisabled = false
})
.catch(() => { this.btnDisabled = false })
}
})
},
handleDelete(row) {
this.$confirm('Confirm to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Yes',
cancelButtonText: 'No'
})
.then(() => {
deleteExchangeRate(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
}
})
})
.catch(action => {})
},
handleSearch() {
this.listQuery.PageIndex = 1
this.getList()
},
handleReset() {
this.listQuery.SearchMonth = ''
this.listQuery.PageIndex = 1
this.getList()
}
}
}
</script>
<style lang="scss" scoped>
.exchange-rate{
padding: 0;
.filter-container{
display: flex;
align-items: center;
}
.list-container{
height: calc(100% - 70px);
}
.el-date-editor.el-input{
width: 100%;
}
.el-date-editor.el-input__inner {
width: 100%;
}
}
</style>
<template>
<div class="app-container exchange-rate data-list">
<div class="filter-container">
<el-date-picker
v-model="listQuery.SearchMonth"
size="small"
placeholder="Search Month"
value-format="yyyy-MM"
format="yyyy-MM"
type="month"
style="width:150px;margin-right:5px"
:picker-options="pickerOption"
/>
<el-button size="small" type="text" @click="handleReset">Reset</el-button>
<el-button type="primary" size="small" @click="handleSearch">Search</el-button>
<el-button style="margin-left:auto" type="primary" size="small" @click="handleNew">New</el-button>
</div>
<div class="list-container">
<el-table
v-loading="listLoading"
:data="list"
stripe
class="table"
height="100%"
size="small"
>
<el-table-column type="index" width="50" />
<el-table-column prop="YearMonth" label="Month" min-width="60" show-overflow-tooltip />
<el-table-column prop="Rate" label="Rate" min-width="60" show-overflow-tooltip />
<el-table-column prop="UpdateTime" label="Update Time" min-width="70" show-overflow-tooltip />
<el-table-column fixed="right" label="Action" min-width="150">
<template slot-scope="scope" min-width="130">
<el-button
size="small"
type="text"
@click="handleEdit(scope.row)"
>Edit</el-button>
<el-button
size="small"
type="text"
@click="handleDelete(scope.row)"
>Delete</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination">
<pagination :total="total" :page.sync="listQuery.PageIndex" :limit.sync="listQuery.PageSize" @pagination="getList" />
</div>
<el-dialog
:key="timer"
:title="title"
:visible.sync="dialogVisible"
width="500px"
:close-on-click-modal="false"
size="small"
>
<el-form ref="rateForm" label-width="150px" :rules="rules" :model="form" size="small">
<el-form-item label="Month: " prop="YearMonth">
<el-date-picker
v-model="form.YearMonth"
type="month"
value-format="yyyy-MM"
:disabled="form.Id !=''&& form.Id !=undefined"
/>
</el-form-item>
<el-form-item label="Exchange Rate: " prop="Rate">
<el-input v-model="form.Rate" type="number" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="small" @click="dialogVisible = false">Cancel</el-button>
<el-button type="primary" :disabled="btnDisabled" size="small" @click="handleSave">Ok</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getRateList, addOrUpdateExchangeRate, deleteExchangeRate } from '@/api/financials'
import Pagination from '@/components/Pagination'
export default {
name: 'ExchangeRate',
components: { Pagination },
data() {
return {
listQuery: { SearchMonth: '', PageIndex: 1, PageSize: 20 },
list: [],
listLoading: false,
total: 0,
dialogVisible: false,
title: '',
timer: '',
form: {},
rules: {
Rate: [{ required: true, message: 'Please specify', trigger: 'blur' }],
YearMonth: [{ required: true, message: 'Please specify', trigger: 'blur' }]
},
btnDisabled: false,
pickerOption: {
disabledDate: time => {
return time.getTime() > Date.now()
}
}
}
},
mounted() { this.getList() },
methods: {
getList() {
this.listLoading = true
getRateList(this.listQuery).then(res => {
this.listLoading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => { this.listLoading = false })
},
handleNew() {
this.form = {}
this.title = 'Add'
this.timer = new Date().getTime()
this.dialogVisible = true
},
handleEdit(row) {
this.title = 'Edit'
this.form = JSON.parse(JSON.stringify(row))
this.timer = new Date().getTime()
this.dialogVisible = true
},
handleSave() {
this.$refs.rateForm.validate(valid => {
if (valid) {
this.btnDisabled = true
const param = {
Rate: this.form.Rate,
YearMonth: this.form.YearMonth
}
this.form.Id ? param.Id = this.form.Id : ''
addOrUpdateExchangeRate(param).then(res => {
if (res.IsSuccess) {
this.getList()
this.$message.success('Updated successfully!')
this.dialogVisible = false
}
this.btnDisabled = false
})
.catch(() => { this.btnDisabled = false })
}
})
},
handleDelete(row) {
this.$confirm('Confirm to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Yes',
cancelButtonText: 'No'
})
.then(() => {
deleteExchangeRate(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
})
})
.catch(action => {})
},
handleSearch() {
this.listQuery.PageIndex = 1
this.getList()
},
handleReset() {
this.listQuery.SearchMonth = ''
this.listQuery.PageIndex = 1
this.getList()
}
}
}
</script>
<style lang="scss" scoped>
.exchange-rate{
padding: 0;
.filter-container{
display: flex;
align-items: center;
}
.list-container{
height: calc(100% - 70px);
}
.el-date-editor.el-input{
width: 100%;
}
.el-date-editor.el-input__inner {
width: 100%;
}
}
</style>

View File

@ -1,324 +1,323 @@
<template>
<div class="rates-container">
<div class="title">
<p>Rank-Based Rates</p>
<el-button
type="primary"
class="addBtn"
size="small"
@click="handleAdd"
>New</el-button>
</div>
<el-table
v-loading="listLoading"
size="small"
:data="list"
max-height="300"
stripe
class="table"
>
<el-table-column type="index" width="40" />
<el-table-column prop="RankName" label="Rank" show-overflow-tooltip min-width="100" />
<el-table-column prop="Training" label="Training ($)" min-width="90" show-overflow-tooltip>
<template slot-scope="scope">
<span>{{ scope.row.Training | rounding }}</span>
</template>
</el-table-column>
<el-table-column prop="RefresherTraining" label="Refresher Training ($)" min-width="130" show-overflow-tooltip>
<template slot-scope="scope">
<span>{{ scope.row.RefresherTraining | rounding }}</span>
</template>
</el-table-column>
<el-table-column label="Timepoint" align="center">
<el-table-column
prop="Timepoint"
label="Regular ($)"
min-width="90"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.Timepoint | rounding }}</span>
</template>
</el-table-column>
<el-table-column
prop="TimepointIn48H"
label="48-hour ($)"
min-width="90"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.TimepointIn48H | rounding }}</span>
</template>
</el-table-column>
<el-table-column
prop="TimepointIn24H"
label="24-hour ($)"
min-width="90"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.TimepointIn24H | rounding }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="Adjudication" align="center">
<el-table-column
prop="Adjudication"
label="Regular ($)"
min-width="90"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.Adjudication | rounding }}</span>
</template>
</el-table-column>
<el-table-column
prop="AdjudicationIn48H"
label="48-hour ($)"
min-width="90"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.AdjudicationIn48H | rounding }}</span>
</template>
</el-table-column>
<el-table-column
prop="AdjudicationIn24H"
label="24-hour ($)"
min-width="90"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.AdjudicationIn24H | rounding }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column prop="Global" label="Global ($)" min-width="100" show-overflow-tooltip>
<template slot-scope="scope">
<span>{{ scope.row.Global | rounding }}</span>
</template>
</el-table-column>
<el-table-column prop="Downtime" label="Downtime ($)" min-width="100" show-overflow-tooltip>
<template slot-scope="scope">
<span>{{ scope.row.Downtime | rounding }}</span>
</template>
</el-table-column>
<el-table-column
fixed="right"
label="Action"
min-width="100"
>
<template slot-scope="scope" min-width="130">
<el-button
size="small"
type="text"
@click="handleEdit(scope.row)"
>Edit</el-button>
<el-button
size="small"
type="text"
@click="handleDelete(scope.row)"
>Delete</el-button>
</template>
</el-table-column>
</el-table>
<pagination style="text-align:right;margin-top:5px;" :total="total" :page.sync="listQuery.PageIndex" :limit.sync="listQuery.PageSize" @pagination="getList" />
<el-dialog
:key="timer"
:title="title"
:visible.sync="dialogVisible"
width="500px"
:close-on-click-modal="false"
>
<el-form ref="baseRateForm" label-width="190px" :rules="rules" :model="baseRateForm" size="small">
<el-form-item label="Rank: " prop="RankName">
<el-input v-model="baseRateForm.RankName" />
</el-form-item>
<el-form-item label="Training ($): " prop="Training">
<!-- <el-input v-model="baseRateForm.Training" type="number" /> -->
<el-input-number v-model="baseRateForm.Training" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Refresher Training ($): " prop="RefresherTraining">
<el-input-number v-model="baseRateForm.RefresherTraining" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Timepoint ($): " prop="Timepoint">
<!-- <el-input v-model="baseRateForm.Timepoint" type="number" /> -->
<el-input-number v-model="baseRateForm.Timepoint" style="width:100%;" :min="0" @input="timepointChange" />
</el-form-item>
<el-form-item label="Timepoint 48H ($): " prop="TimepointIn48H">
<!-- <el-input v-model="baseRateForm.TimepointIn48H" type="number" /> -->
<el-input-number v-model="baseRateForm.TimepointIn48H" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Timepoint 24H ($): " prop="TimepointIn24H">
<!-- <el-input v-model="baseRateForm.TimepointIn24H" type="number" /> -->
<el-input-number v-model="baseRateForm.TimepointIn24H" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Adjudication ($): " prop="Adjudication">
<!-- <el-input v-model="baseRateForm.Adjudication" type="number" /> -->
<el-input-number v-model="baseRateForm.Adjudication" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Adjudication 48H ($): " prop="AdjudicationIn48H">
<!-- <el-input v-model="baseRateForm.AdjudicationIn48H" type="number" /> -->
<el-input-number v-model="baseRateForm.AdjudicationIn48H" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Adjudication 24H ($): " prop="AdjudicationIn24H">
<!-- <el-input v-model="baseRateForm.AdjudicationIn24H" type="number" /> -->
<el-input-number v-model="baseRateForm.AdjudicationIn24H" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Global ($): " prop="Global">
<el-input v-model="baseRateForm.Global" disabled type="number" />
</el-form-item>
<el-form-item label="Downtime ($): " prop="Downtime">
<el-input-number v-model="baseRateForm.Downtime" style="width:100%;" :min="0" />
<!-- <el-input v-model="baseRateForm.Downtime" type="number" /> -->
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="small" @click="dialogVisible = false">Cancel</el-button>
<el-button type="primary" :disabled="btnDisabled" size="small" @click="handleSave">Ok</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import Pagination from '@/components/Pagination'
import { getRankPriceList, addOrUpdateRankPrice, deleteRankPrice } from '@/api/financials'
const getListQueryDefault = () => {
return {
PageSize: 20,
PageIndex: 1,
Asc: false,
SortField: ''
}
}
export default {
name: 'RankBasedRates',
components: { Pagination },
filters: {
rounding(value) {
return value ? Number(value).toFixed(2) : value
}
},
data() {
return {
listQuery: getListQueryDefault(),
list: [],
listLoading: false,
total: 0,
baseRateForm: {},
dialogVisible: false,
btnDisabled: false,
title: '',
timer: '',
rules: {
RankName: [
{ required: true, message: 'Please specify', trigger: 'blur' },
{ max: 50, message: 'The maximum length is 50' }
],
Training: [{ required: true, message: 'Please specify', trigger: 'blur' }],
Timepoint: [{ required: true, message: 'Please specify', trigger: 'blur' }],
TimepointIn24H: [{ required: true, message: 'Please specify', trigger: 'blur' }],
TimepointIn48H: [{ required: true, message: 'Please specify', trigger: 'blur' }],
Adjudication: [{ required: true, message: 'Please specify', trigger: 'blur' }],
AdjudicationIn24H: [{ required: true, message: 'Please specify', trigger: 'blur' }],
AdjudicationIn48H: [{ required: true, message: 'Please specify', trigger: 'blur' }],
Global: [{ required: true, message: 'Please specify', trigger: 'blur' }],
Downtime: [{ required: true, message: 'Please specify', trigger: 'blur' }],
RefresherTraining: [{ required: true, message: 'Please specify', trigger: 'blur' }]
}
}
},
mounted() { this.getList() },
methods: {
getList() {
this.listLoading = true
getRankPriceList(this.listQuery).then(res => {
this.listLoading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => { this.listLoading = false })
},
handleAdd() {
this.baseRateForm = {}
this.timer = new Date().getTime()
this.title = 'Add'
this.dialogVisible = true
},
handleEdit(row) {
this.title = 'Edit'
this.timer = new Date().getTime()
this.baseRateForm = JSON.parse(JSON.stringify(row))
this.dialogVisible = true
},
handleDelete(row) {
this.$confirm('Confirm to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
deleteRankPrice(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success('Deleted successfully!')
}
})
.catch(err => {
console.log(err)
})
})
},
handleSave() {
this.$refs.baseRateForm.validate(valid => {
if (valid) {
this.btnDisabled = true
addOrUpdateRankPrice(this.baseRateForm).then(res => {
this.getList()
this.btnDisabled = false
this.$message.success('Saved successfully!')
this.dialogVisible = false
}).catch(() => { this.btnDisabled = false })
}
})
},
timepointChange() {
this.baseRateForm.Global = this.baseRateForm.Timepoint / 2
}
}
}
</script>
<style lang="scss" scoped>
.rates-container {
.title {
position: relative;
height: 35px;
line-height: 35px;
background: #e4ebf1;
border-left: 3px solid #0fc8e0;
padding-left: 5px;
margin-bottom:10px;
font-size: 13px;
p{
margin: 0;
}
.addBtn {
position: absolute;
right: 0px;
top: 50%;
height: 30px;
margin-top: -15px;
}
}
}
</style>
<template>
<div class="rates-container">
<div class="title">
<p>Rank-Based Rates</p>
<el-button
type="primary"
class="addBtn"
size="small"
@click="handleAdd"
>New</el-button>
</div>
<el-table
v-loading="listLoading"
size="small"
:data="list"
max-height="300"
stripe
class="table"
>
<el-table-column type="index" width="40" />
<el-table-column prop="RankName" label="Rank" show-overflow-tooltip min-width="100" />
<el-table-column prop="Training" label="Training ($)" min-width="90" show-overflow-tooltip>
<template slot-scope="scope">
<span>{{ scope.row.Training | rounding }}</span>
</template>
</el-table-column>
<el-table-column prop="RefresherTraining" label="Refresher Training ($)" min-width="130" show-overflow-tooltip>
<template slot-scope="scope">
<span>{{ scope.row.RefresherTraining | rounding }}</span>
</template>
</el-table-column>
<el-table-column label="Timepoint" align="center">
<el-table-column
prop="Timepoint"
label="Regular ($)"
min-width="90"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.Timepoint | rounding }}</span>
</template>
</el-table-column>
<el-table-column
prop="TimepointIn48H"
label="48-hour ($)"
min-width="90"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.TimepointIn48H | rounding }}</span>
</template>
</el-table-column>
<el-table-column
prop="TimepointIn24H"
label="24-hour ($)"
min-width="90"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.TimepointIn24H | rounding }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="Adjudication" align="center">
<el-table-column
prop="Adjudication"
label="Regular ($)"
min-width="90"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.Adjudication | rounding }}</span>
</template>
</el-table-column>
<el-table-column
prop="AdjudicationIn48H"
label="48-hour ($)"
min-width="90"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.AdjudicationIn48H | rounding }}</span>
</template>
</el-table-column>
<el-table-column
prop="AdjudicationIn24H"
label="24-hour ($)"
min-width="90"
show-overflow-tooltip
>
<template slot-scope="scope">
<span>{{ scope.row.AdjudicationIn24H | rounding }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column prop="Global" label="Global ($)" min-width="100" show-overflow-tooltip>
<template slot-scope="scope">
<span>{{ scope.row.Global | rounding }}</span>
</template>
</el-table-column>
<el-table-column prop="Downtime" label="Downtime ($)" min-width="100" show-overflow-tooltip>
<template slot-scope="scope">
<span>{{ scope.row.Downtime | rounding }}</span>
</template>
</el-table-column>
<el-table-column
fixed="right"
label="Action"
min-width="100"
>
<template slot-scope="scope" min-width="130">
<el-button
size="small"
type="text"
@click="handleEdit(scope.row)"
>Edit</el-button>
<el-button
size="small"
type="text"
@click="handleDelete(scope.row)"
>Delete</el-button>
</template>
</el-table-column>
</el-table>
<pagination style="text-align:right;margin-top:5px;" :total="total" :page.sync="listQuery.PageIndex" :limit.sync="listQuery.PageSize" @pagination="getList" />
<el-dialog
:key="timer"
:title="title"
:visible.sync="dialogVisible"
width="500px"
:close-on-click-modal="false"
>
<el-form ref="baseRateForm" label-width="190px" :rules="rules" :model="baseRateForm" size="small">
<el-form-item label="Rank: " prop="RankName">
<el-input v-model="baseRateForm.RankName" />
</el-form-item>
<el-form-item label="Training ($): " prop="Training">
<!-- <el-input v-model="baseRateForm.Training" type="number" /> -->
<el-input-number v-model="baseRateForm.Training" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Refresher Training ($): " prop="RefresherTraining">
<el-input-number v-model="baseRateForm.RefresherTraining" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Timepoint ($): " prop="Timepoint">
<!-- <el-input v-model="baseRateForm.Timepoint" type="number" /> -->
<el-input-number v-model="baseRateForm.Timepoint" style="width:100%;" :min="0" @input="timepointChange" />
</el-form-item>
<el-form-item label="Timepoint 48H ($): " prop="TimepointIn48H">
<!-- <el-input v-model="baseRateForm.TimepointIn48H" type="number" /> -->
<el-input-number v-model="baseRateForm.TimepointIn48H" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Timepoint 24H ($): " prop="TimepointIn24H">
<!-- <el-input v-model="baseRateForm.TimepointIn24H" type="number" /> -->
<el-input-number v-model="baseRateForm.TimepointIn24H" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Adjudication ($): " prop="Adjudication">
<!-- <el-input v-model="baseRateForm.Adjudication" type="number" /> -->
<el-input-number v-model="baseRateForm.Adjudication" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Adjudication 48H ($): " prop="AdjudicationIn48H">
<!-- <el-input v-model="baseRateForm.AdjudicationIn48H" type="number" /> -->
<el-input-number v-model="baseRateForm.AdjudicationIn48H" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Adjudication 24H ($): " prop="AdjudicationIn24H">
<!-- <el-input v-model="baseRateForm.AdjudicationIn24H" type="number" /> -->
<el-input-number v-model="baseRateForm.AdjudicationIn24H" style="width:100%;" :min="0" />
</el-form-item>
<el-form-item label="Global ($): " prop="Global">
<el-input v-model="baseRateForm.Global" disabled type="number" />
</el-form-item>
<el-form-item label="Downtime ($): " prop="Downtime">
<el-input-number v-model="baseRateForm.Downtime" style="width:100%;" :min="0" />
<!-- <el-input v-model="baseRateForm.Downtime" type="number" /> -->
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="small" @click="dialogVisible = false">Cancel</el-button>
<el-button type="primary" :disabled="btnDisabled" size="small" @click="handleSave">Ok</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import Pagination from '@/components/Pagination'
import { getRankPriceList, addOrUpdateRankPrice, deleteRankPrice } from '@/api/financials'
const getListQueryDefault = () => {
return {
PageSize: 20,
PageIndex: 1,
Asc: false,
SortField: ''
}
}
export default {
name: 'RankBasedRates',
components: { Pagination },
filters: {
rounding(value) {
return value ? Number(value).toFixed(2) : value
}
},
data() {
return {
listQuery: getListQueryDefault(),
list: [],
listLoading: false,
total: 0,
baseRateForm: {},
dialogVisible: false,
btnDisabled: false,
title: '',
timer: '',
rules: {
RankName: [
{ required: true, message: 'Please specify', trigger: 'blur' },
{ max: 50, message: 'The maximum length is 50' }
],
Training: [{ required: true, message: 'Please specify', trigger: 'blur' }],
Timepoint: [{ required: true, message: 'Please specify', trigger: 'blur' }],
TimepointIn24H: [{ required: true, message: 'Please specify', trigger: 'blur' }],
TimepointIn48H: [{ required: true, message: 'Please specify', trigger: 'blur' }],
Adjudication: [{ required: true, message: 'Please specify', trigger: 'blur' }],
AdjudicationIn24H: [{ required: true, message: 'Please specify', trigger: 'blur' }],
AdjudicationIn48H: [{ required: true, message: 'Please specify', trigger: 'blur' }],
Global: [{ required: true, message: 'Please specify', trigger: 'blur' }],
Downtime: [{ required: true, message: 'Please specify', trigger: 'blur' }],
RefresherTraining: [{ required: true, message: 'Please specify', trigger: 'blur' }]
}
}
},
mounted() { this.getList() },
methods: {
getList() {
this.listLoading = true
getRankPriceList(this.listQuery).then(res => {
this.listLoading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => { this.listLoading = false })
},
handleAdd() {
this.baseRateForm = {}
this.timer = new Date().getTime()
this.title = 'Add'
this.dialogVisible = true
},
handleEdit(row) {
this.title = 'Edit'
this.timer = new Date().getTime()
this.baseRateForm = JSON.parse(JSON.stringify(row))
this.dialogVisible = true
},
handleDelete(row) {
this.$confirm('Confirm to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
})
.then(() => {
deleteRankPrice(row.Id)
.then(res => {
if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
})
.catch(err => {
console.log(err)
})
})
},
handleSave() {
this.$refs.baseRateForm.validate(valid => {
if (valid) {
this.btnDisabled = true
addOrUpdateRankPrice(this.baseRateForm).then(res => {
this.getList()
this.btnDisabled = false
this.$message.success('Saved successfully!')
this.dialogVisible = false
}).catch(() => { this.btnDisabled = false })
}
})
},
timepointChange() {
this.baseRateForm.Global = this.baseRateForm.Timepoint / 2
}
}
}
</script>
<style lang="scss" scoped>
.rates-container {
.title {
position: relative;
height: 35px;
line-height: 35px;
background: #e4ebf1;
border-left: 3px solid #0fc8e0;
padding-left: 5px;
margin-bottom:10px;
font-size: 13px;
p{
margin: 0;
}
.addBtn {
position: absolute;
right: 0px;
top: 50%;
height: 30px;
margin-top: -15px;
}
}
}
</style>

View File

@ -340,11 +340,10 @@ export default {
},
handleView(row) { row.SowFullPath ? window.open(row.SowFullPath, '_blank') : '' },
handleDeleteSOW(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'OK',
cancelButtonText: 'Cancel'
})
.then(() => {
const param = { SowPath: row.SowPath, TrialId: row.TrialId }

View File

@ -92,7 +92,7 @@ export default {
if (res.IsSuccess) {
this.fileList = []
this.$message({
message: 'Deleted successfully!',
message: this.$t('common:message:deletedSuccessfully'),
type: 'success'
})
this.$emit('getFileList', this.fileList)

View File

@ -7,7 +7,7 @@
ref="resetForm"
v-loading="formLoading"
:model="form"
label-width="150px"
label-width="200px"
:rules="rules"
class="demo-ruleForm"
size="small"
@ -31,7 +31,7 @@
<el-form-item :label="$t('trials:researchForm:form:verifyCode')" required>
<el-col :span="18">
<el-form-item prop="VerificationCode">
<el-input v-model="form.VerificationCode" autocomplete="off" />
<el-input v-model="form.VerificationCode" autocomplete="off" />
</el-form-item>
</el-col>
<el-col :span="6" style="text-align:right;">
@ -122,17 +122,17 @@ export default {
}
}
}
var validatePass = (rule, value, callback) => {
if (value === '') {
//
callback(new Error(this.$t('passwordReset:formRule:password')))
} else {
if (this.CheckPass !== '') {
this.$refs.resetForm.validateField('CheckPass')
}
callback()
}
}
// var validatePass = (rule, value, callback) => {
// if (value === '') {
// //
// callback(new Error(this.$t('passwordReset:formRule:password')))
// } else {
// if (this.CheckPass !== '') {
// this.$refs.resetForm.validateField('CheckPass')
// }
// callback()
// }
// }
var validatePass2 = (rule, value, callback) => {
if (value === '' || value === undefined) {
//
@ -205,6 +205,8 @@ export default {
verifyAnonymousVerifyCode(this.form.EmailOrPhone, this.form.VerificationCode).then(res => {
this.formLoading = false
this.users = res.Result
//
this.$message.success(this.$t('passwordReset:message:verifiedSuccessfully'))
}).catch(() => { this.formLoading = false })
},
handleEmailChange() {
@ -268,7 +270,7 @@ export default {
/*/deep/ .is-error{*/
/* margin-bottom: 40px;*/
/*}*/
/deep/ .is-error.my_new_pwd{
.is-error.my_new_pwd{
margin-bottom: 40px;
}
</style>

View File

@ -7,7 +7,7 @@
<div class="login-l">
<div class="login-logo">
<img v-if="language === 'zh'" src="@/assets/zzlogo2.png" alt="">
<img v-else src="@/assets/zzlogo3.png" alt="">
<img v-else src="@/assets/zzlogo4.png" alt="">
</div>
<div class="login-image">
<img src="@/assets/login-bg.png">
@ -78,7 +78,7 @@
type="primary"
style="width:100%;margin-bottom:10px;"
size="medium"
@click.native.prevent="loginIn"
@click.native.prevent="handleLogin"
>
{{ $t('login:button:login') }}
</el-button>
@ -109,7 +109,7 @@
<span style="color:#428bca">关于</span>
</a>
</div>
<Vcode :show="isShow" slider-text="" :imgs="[Img1]" @success="onSuccess" />
<Vcode :show="isShow" :fail-text="$t('login:button:failText')" :success-text="$t('login:button:successText')" :slider-text="$t('login:button:sliderText')" :imgs="[Img1]" @success="onSuccess" />
<el-dialog
v-if="aboutVisible"
:visible.sync="aboutVisible"
@ -148,7 +148,7 @@ import { mapGetters, mapMutations } from 'vuex'
import TopLang from './topLang'
// import NoticeMarquee from '../trials/trials-layout/components/noticeMarquee'
import Vcode from 'vue-puzzle-vcode'
import Img1 from '@/assets/pic-1.png'
import Img1 from '@/assets/pic-2.png'
export default {
name: 'Login',
components: { TopLang, Vcode },
@ -180,6 +180,7 @@ export default {
loginType: null,
location: null,
isShow: false,
showCode: false,
Img1
}
},
@ -230,7 +231,11 @@ export default {
this.loginType = this.$route.query.loginType
this.$refs.loginForm.validate(valid => {
if (valid) {
this.isShow = true
if (this.showCode) {
this.isShow = true
} else {
this.onSuccess()
}
} else {
// console.log('error submit!!')
return false
@ -239,6 +244,7 @@ export default {
},
loginIn() {
this.loading = true
this.showCode = false
this.$store.dispatch('user/login', this.loginForm).then((res) => {
if (!res) {
// ,
@ -273,6 +279,7 @@ export default {
})
})
.catch(() => {
this.showCode = true
this.loading = false
})
},

View File

@ -14,7 +14,7 @@
v-if="(state === 0 && userTypeEnumInt === 0)"
type="primary"
size="small"
@click="handleSubmit"
@click="handleSubmit('submit')"
>
{{ $t('trials:researchForm:button:submit') }}
</el-button>
@ -23,7 +23,7 @@
v-if="(state === 1 && hasPermi(['role:spm','role:cpm']))"
type="primary"
size="small"
@click="handleSubmit"
@click="handleSubmit('approve')"
>
{{ $t('trials:researchForm:button:auditPasses') }}
</el-button>
@ -243,35 +243,22 @@ export default {
}).catch(() => { this.loading = false })
},
//
handleSubmit() {
handleSubmit(type) {
if (this.userTypeEnumInt === 0) {
// if (this.$refs['researchParticipants'].list.length === 0 && this.$refs['researchEquipments'].list.length === 0) {
// this.$alert(this.$t('trials:researchForm:message:saveWarning'))
// return
// }
// var list = this.$refs['researchParticipants'].list
// var cIdx = list.findIndex(i => parseInt(i.TrialRoleCode) === 1)
// var pIdx = list.findIndex(i => parseInt(i.TrialRoleCode) === 4)
// if (cIdx === -1 || pIdx === -1) {
// // crc1
// this.$alert(this.$t('trials:researchForm:message:saveWarning1'))
// return
// }
this.loading = true
this.$refs['baseResearchInfo'].handleSave(true).then(res => {
this.loading = false
if (res) {
this.submit()
this.submit(type)
}
}).catch(() => { this.loading = false })
} else {
this.submit()
this.submit(type)
}
},
submit() {
//
this.$confirm(this.$t('trials:researchForm:message:submitWarning'), {
this.$confirm(this.userTypeEnumInt === 0 ? this.$t('trials:researchForm:message:submitWarning') : this.$t('trials:researchForm:message:submitWarning2'), {
type: 'warning',
distinguishCancelAndClose: true
}).then(() => {
@ -287,7 +274,12 @@ export default {
if (this.userTypeEnumInt !== 0) {
this.$emit('refreshPage')
}
this.$message.success(this.$t('common:message:savedSuccessfully'))
// this.$message.success(this.$t('common:message:savedSuccessfully'))
if(type === 'approve'){
this.$message.success(this.$t('common:message:approvedSuccessfully'))
}else{
this.$message.success(this.$t('trials:researchForm:message:savedSuccessfully'))
}
}
}).catch(() => { this.loading = false })
}).catch(() => {})
@ -320,7 +312,7 @@ export default {
if (res.IsSuccess) {
this.initPage()
this.$emit('refreshPage')
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.$message.success(this.$t('common:message:approvedSuccessfully'))
}
}).catch(() => {
this.loading = false

View File

@ -53,13 +53,13 @@
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item :label="$t('resumeInfo:label:WeChat')">
<span>{{ basicInfo.WeChat }}</span>
</el-form-item>
</el-col>
</el-row>
<!-- <el-row>-->
<!-- <el-col :span="6">-->
<!-- <el-form-item :label="$t('resumeInfo:label:WeChat')">-->
<!-- <span>{{ basicInfo.WeChat }}</span>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
</el-form>
</div>
</template>

View File

@ -14,27 +14,27 @@
<span v-else>{{ employment.RankCN }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('resumeInfo:label:Physician')">
<span v-if="isEnglish">{{ employment.Physician }}</span>
<span v-else>{{ employment.PhysicianCN }}</span>
</el-form-item>
</el-col>
<!-- <el-col :span="6">-->
<!-- <el-form-item :label="$t('resumeInfo:label:Physician')">-->
<!-- <span v-if="isEnglish">{{ employment.Physician }}</span>-->
<!-- <span v-else>{{ employment.PhysicianCN }}</span>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="6">
<el-form-item :label="$t('resumeInfo:label:Position')">
<span v-if="isEnglish">{{ employment.Position }}</span>
<span v-else>{{ employment.PositionCN }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item :label="$t('resumeInfo:label:Hospital')">
<span v-if="isEnglish">{{ employment.HospitalName }}</span>
<span v-else>{{ employment.HospitalNameCN }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item :label="$t('resumeInfo:label:Affiliated')">
<span v-if="isEnglish">{{ employment.UniversityAffiliated }}</span>

View File

@ -189,8 +189,8 @@ export default {
this.pageLoading = false
if (res.IsSuccess) {
if (res.Result) {
this.holiday = res.Result.InHoliday ? 'Yes' : 'No'
this.doctorInfo = res.Result
this.holiday = res.Result.InHoliday ? 'Yes' : 'No'
!this.doctorInfo.ResearchPublicationView ? this.doctorInfo.ResearchPublicationView = {} : '';
this.title = `${this.doctorInfo.BasicInfoView.FirstName} ${this.doctorInfo.BasicInfoView.LastName}${this.$t('resumeInfo:title:Details')}`
this.htmlTitle = this.title

View File

@ -3,7 +3,8 @@
<div class="box-wrapper">
<h2 style="text-align:center;">
<!-- 中心调研表 -->
独立阅片人信息填写
<!-- 独立阅片人信息填写 -->
{{$t("trials:researchForm:form:title")}}
</h2>
<el-card shadow="hover" style="padding-top: 40px">
<el-form
@ -58,6 +59,7 @@ import { sendVerifyCode, verifySendCode, getTrialSurveyInitInfo } from '@/api/re
import { verifyEmialGetDoctorInfo, sendEmialVerifyCode } from '@/api/reviewers'
import { login, getUserMenuTree, getUserPermissions } from '@/api/user'
import store from '@/store'
import { mapMutations } from 'vuex'
export default {
data() {
var checkPhone = (rule, value, callback) => {
@ -149,9 +151,14 @@ export default {
isHaveSiteSurveyRecord: false
}
},
created(){
this.$i18n.locale = this.$route.query.lang
this.setLanguage(this.$route.query.lang)
},
mounted() {
},
methods: {
...mapMutations({ setLanguage: 'lang/setLanguage' }),
//
onSubmit() {
this.$refs['resetForm'].validate(valid => {
@ -176,7 +183,7 @@ export default {
store.dispatch('user/setTree', menuTree.Result)
store.dispatch('user/setPermissions', permissions.Result)
// this.$router.push({ path: `/researchForm?trialId=${this.trialId}&trialSiteSurveyId=${res.Result.TrialSiteSurveyId}` })
this.$router.push({path: `/ReviewersResearchForm?Id=${res.Result.DoctorId ? res.Result.DoctorId : ''}&tabActive=BasicInfo&ReviewStatus=${res.Result.ReviewStatus}`})
this.$router.push({path: `/ReviewersResearchForm?Id=${res.Result.DoctorId ? res.Result.DoctorId : ''}&tabActive=BasicInfo&ReviewStatus=${res.Result.ReviewStatus}&lang=${this.$route.query.lang}`})
}).catch(() => {
this.btnLoading = false
this.sendDisabled = false

View File

@ -1,32 +1,33 @@
<template>
<div class="app-container">
<el-tabs v-model="active" :before-leave="checkLeave" @tab-click="clickTab">
<el-tab-pane label="Basic Info" name="BasicInfo">
<el-tab-pane :label="$t('system:reviewer:tab:BasicInfo')" name="BasicInfo">
<basic-info v-if="load.BasicInfo" />
</el-tab-pane>
<el-tab-pane label="Employment" name="Employment">
<el-tab-pane :label="$t('system:reviewer:tab:Employment')" name="Employment">
<Employment v-if="load.Employment" />
</el-tab-pane>
<el-tab-pane label="Specialty" name="Specialty">
<el-tab-pane :label="$t('system:reviewer:tab:Specialty')" name="Specialty">
<specialty v-if="load.Specialty" />
</el-tab-pane>
<el-tab-pane label="Education & Training" name="EducationTraining">
<!--Education & Training-->
<el-tab-pane :label="$t('system:reviewer:tab:Education&Training')" name="EducationTraining">
<education-training v-if="load.EducationTraining" />
</el-tab-pane>
<el-tab-pane label="Research & Publication" name="ResearchPublication">
<!--Research & Publication-->
<el-tab-pane :label="$t('system:reviewer:tab:Research&Publication')" name="ResearchPublication">
<research-publication v-if="load.ResearchPublication" />
</el-tab-pane>
<el-tab-pane label="Trial Experience" name="TrialExperience">
<el-tab-pane :label="$t('system:reviewer:tab:TrialExperience')" name="TrialExperience">
<trial-experience v-if="load.TrialExperience" />
</el-tab-pane>
<el-tab-pane label="Credentials" name="Credentials">
<el-tab-pane :label="$t('system:reviewer:tab:Credentials')" name="Credentials">
<Credentials v-if="load.Credentials" />
</el-tab-pane>
<el-tab-pane label="Resumes" name="Resumes">
<el-tab-pane :label="$t('system:reviewer:tab:Resumes')" name="Resumes">
<Resumes v-if="load.Resumes" />
</el-tab-pane>
<el-tab-pane label="Agreements" name="Agreements">
<el-tab-pane :label="$t('system:reviewer:tab:Agreements')" name="Agreements">
<Agreements v-if="load.Agreements" />
</el-tab-pane>
</el-tabs>
@ -44,6 +45,7 @@ import Resumes from './components/Resumes'
import Agreements from './components/Agreements'
import Setting from './components/Setting'
import { changeURLStatic, getQueryString } from '@/utils/history.js'
import { mapMutations } from 'vuex'
export default {
components: {
BasicInfo,
@ -74,6 +76,10 @@ export default {
}
}
},
created(){
this.$i18n.locale = this.$route.query.lang
this.setLanguage(this.$route.query.lang)
},
mounted() {
this.active = this.$route.query.tabActive
if (this.$route.query.Id === '' && this.active !== 'BasicInfo') {
@ -82,13 +88,14 @@ export default {
this.load[this.active] = true
},
methods: {
...mapMutations({ setLanguage: 'lang/setLanguage' }),
clickTab(tab, event) {
if (this.load[tab.name] === false) {
this.load[tab.name] = true
}
changeURLStatic('tabActive', tab.name)
const id = getQueryString('Id')
this.$router.push({ path: `/ReviewersResearchForm?Id=${id}&tabActive=${tab.name}&ReviewStatus=${getQueryString('ReviewStatus')}` })
this.$router.push({ path: `/ReviewersResearchForm?Id=${id}&tabActive=${tab.name}&ReviewStatus=${getQueryString('ReviewStatus')}&lang=${this.$i18n.locale}` })
},
checkLeave() {
const id = getQueryString('Id')

View File

@ -1,21 +1,21 @@
<template>
<div v-loading="loading" class="resumes-container">
<div class="resume-content" v-if="!$route.query.ReviewStatus">
<p>Consultant Agreement</p>
<p>{{$t('system:Agreements:title:Consultant Agreement')}}</p>
<div class="upload-content">
<upload-files ref="uploadAgreement" :disabled="$route.query.ReviewStatus === '1'" :doctor-id="doctorId" type="Consultant Agreement" accept=".pdf" @getFileList="getFileList" />
</div>
<p>(must be in pdf format)</p>
<p>{{ $t('system:GcpCertificate:tap:must') }}</p>
</div>
<div v-if="!$route.query.ReviewStatus">
<el-table :data="agreementList" size="small">
<el-table-column type="index" width="40" />
<el-table-column prop="FileName" label="Consultant Agreement" width="300" />
<el-table-column prop="CreateTime" label="Upload Time" width="150" />
<el-table-column label="Action" width="400">
<el-table-column prop="FileName" :label="$t('system:Agreements:table:Consultant Agreement')" width="300" />
<el-table-column prop="CreateTime" :label="$t('system:Agreements:table:Upload Time')" width="150" />
<el-table-column :label="$t('common:action:action')" width="400">
<template slot-scope="scope">
<el-button type="text" size="small" @click="handlePreview(scope.row)">View</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleRemoveFile(scope.row)">Delete</el-button>
<el-button type="text" size="small" @click="handlePreview(scope.row)">{{$t('trials:enrolledReviews:button:view')}}</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleRemoveFile(scope.row)">{{$t('common:button:delete')}}</el-button>
</template>
</el-table-column>
</el-table>
@ -24,21 +24,22 @@
<span style="margin-right: 20px">
{{$t('trials:enrolledReviews:message:SOW')}}
</span>
<el-button size="small" type="primary" :disabled="$route.query.ReviewStatus === '1'" @click="addCol(0, $t('trials:enrolledReviews:message:SOW'))">Upload</el-button>
<el-button size="small" type="primary" :disabled="$route.query.ReviewStatus === '1'" @click="addCol(0, $t('trials:enrolledReviews:message:SOW'))">
{{ $t('common:button:upload') }}</el-button>
<el-button size="small" type="primary" @click="handleDownload('Reviewer_SOW_Template')">
<i class="el-icon-view el-icon-download"></i>
Template
{{ $t('common:button:template') }}
</el-button>
</div>
<el-table :data="sowList" size="small">
<el-table-column type="index" width="40" />
<el-table-column label="Criterion Type" width="120">
<el-table-column :label="$t('system:Agreements:table:Criterion Type')" width="120">
<template slot-scope="scope">
{{ scope.row.CriterionName }}
</template>
</el-table-column>
<el-table-column prop="FileName" label="Statement of Work" width="400" />
<el-table-column prop="IsEnable" label="Is Enable" width="100">
<el-table-column prop="FileName" :label="$t('system:Agreements:table:Statement of Work')" width="400" />
<el-table-column prop="IsEnable" :label="$t('system:Agreements:table:Is Enable')" width="100">
<template slot-scope="scope">
<el-switch
v-model="scope.row.IsEnable"
@ -48,13 +49,14 @@
/>
</template>
</el-table-column>
<el-table-column prop="Remark" label="Remark" width="200" />
<el-table-column prop="CreateTime" label="Upload Time" width="150" />
<el-table-column label="Action" width="400">
<el-table-column prop="Remark" :label="$t('system:Agreements:Remark')" width="200" />
<el-table-column prop="CreateTime" :label="$t('system:Agreements:Upload Time')" width="150" />
<el-table-column :label="$t('common:action:action')" width="400">
<template slot-scope="scope">
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handlePreview3(scope.row)">View</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleEditCol(scope.row, 0, $t('trials:enrolledReviews:message:SOW'))">Edit</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleRemoveFile3(scope.row)">Delete</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handlePreview3(scope.row)">{{$t('trials:enrolledReviews:button:view')}}</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleEditCol(scope.row, 0, $t('trials:enrolledReviews:message:SOW'))">
{{ $t('common:button:edit') }}</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleRemoveFile3(scope.row)">{{ $t('common:button:delete') }}</el-button>
</template>
</el-table-column>
</el-table>
@ -62,17 +64,17 @@
<span style="margin-right: 20px">
{{$t('trials:enrolledReviews:message:EQC')}}
</span>
<el-button size="small" type="primary" :disabled="$route.query.ReviewStatus === '1'" @click="addCol(1, $t('trials:enrolledReviews:message:EQC'))">Upload</el-button>
<el-button size="small" type="primary" :disabled="$route.query.ReviewStatus === '1'" @click="addCol(1, $t('trials:enrolledReviews:message:EQC'))">{{$t('common:button:upload')}}</el-button>
</div>
<el-table :data="ackSowList" size="small" v-if="!$route.query.ReviewStatus">
<el-table-column type="index" width="40" />
<el-table-column label="Criterion Type" width="120">
<el-table-column :label="$t('system:Agreements:table:Criterion Type')" width="120">
<template slot-scope="scope">
{{ scope.row.CriterionName }}
</template>
</el-table-column>
<el-table-column prop="FileName" label="Acknowledgement of SOW" width="400" />
<el-table-column prop="IsEnable" label="Is Enable" width="100">
<el-table-column prop="FileName" :label="$t('system:Agreements:table:Acknowledgement of SOW')" width="400" />
<el-table-column prop="IsEnable" :label="$t('system:Agreements:table:Is Enable')" width="100">
<template slot-scope="scope">
<el-switch
v-model="scope.row.IsEnable"
@ -82,13 +84,13 @@
/>
</template>
</el-table-column>
<el-table-column prop="Remark" label="Remark" width="200" />
<el-table-column prop="CreateTime" label="Upload Time" width="150" />
<el-table-column prop="Remark" :label="$t('system:Agreements:table:Remark')" width="200" />
<el-table-column prop="CreateTime" :label="$t('system:Agreements:table:Upload Time')" width="150" />
<el-table-column label="Action" width="400">
<template slot-scope="scope">
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handlePreview3(scope.row)">View</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleEditCol(scope.row, 1, $t('trials:enrolledReviews:message:EQC'))">Edit</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleRemoveFile3(scope.row)">Delete</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handlePreview3(scope.row)">{{$t('common:button:view')}}</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleEditCol(scope.row, 1, $t('trials:enrolledReviews:message:EQC'))">{{$t('common:button:edit')}}</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleRemoveFile3(scope.row)">{{$t('common:button:delete')}}</el-button>
</template>
</el-table-column>
</el-table>
@ -101,7 +103,7 @@
label-width="120px"
size="small"
>
<el-form-item label="Criterion Type " prop="CriterionType">
<el-form-item :label="$t('system:Agreements:label:Criterion Type')" prop="CriterionType">
<el-select v-model="form.CriterionType">
<el-option
v-for="item of $d.CriterionType"
@ -111,7 +113,7 @@
/>
</el-select>
</el-form-item>
<el-form-item label="File" prop="FilePath">
<el-form-item :label="$t('system:Agreements:label:File')" prop="FilePath">
<el-upload
class="upload-demo"
action
@ -126,11 +128,11 @@
<el-button size="small" type="primary" :disabled="fileList.length > 0">{{$t('common:button:upload')}}</el-button>
</el-upload>
</el-form-item>
<el-form-item label="Remark">
<el-form-item :label="$t('system:Agreements:label:Remark')">
<el-input v-model="form.Remark" type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"></el-input>
</el-form-item>
<el-form-item label="Is Enable">
<el-form-item :label="$t('system:Agreements:label:Is Enable')">
<el-switch
v-model="form.IsEnable"
:active-value="true"
@ -140,8 +142,8 @@
</el-form>
</template>
<template slot="dialog-footer">
<el-button :disabled="btnLoading" size="small" type="primary" @click="handleCancle">Cancel</el-button>
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave">Save</el-button>
<el-button :disabled="btnLoading" size="small" type="primary" @click="handleCancle">{{ $t('common:button:cancel') }}</el-button>
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave">{{ $t('common:button:save') }}</el-button>
</template>
</BaseModel>
</div>
@ -272,6 +274,7 @@ export default {
this.model_cfg.title = title
},
initSowList() {
if (!this.doctorId) return
getDoctorCriterionFile({
fileType: 0,
DoctorId: this.doctorId

View File

@ -15,31 +15,31 @@
>
<el-row>
<el-col :span="12">
<el-form-item v-if="basicInfo.ReviewerCode" label="ID: ">
<el-form-item v-if="basicInfo.ReviewerCode" :label="$t('system:reviewer:label:Id')">
<el-input v-model="basicInfo.ReviewerCode" disabled size="small" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="Surname: " prop="LastName">
<el-form-item :label="$t('system:reviewer:label:LastName')" prop="LastName">
<el-input v-model="basicInfo.LastName" :disabled="$route.query.ReviewStatus === '1'" size="small" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="Given Name: " prop="FirstName">
<el-form-item :label="$t('system:reviewer:label:FirstName')" prop="FirstName">
<el-input v-model="basicInfo.FirstName" :disabled="$route.query.ReviewStatus === '1'" size="small" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="Name CN: " prop="ChineseName">
<el-form-item :label="$t('system:reviewer:label:NameCN')" prop="ChineseName">
<el-input v-model="basicInfo.ChineseName" :disabled="$route.query.ReviewStatus === '1'" size="small" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="Gender: " prop="Sex">
<el-form-item :label="$t('system:reviewer:label:Gender')" prop="Sex">
<el-select
v-model="basicInfo.Sex"
prop="Sex"
@ -59,12 +59,12 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="Phone: " prop="Phone">
<el-form-item :label="$t('system:reviewer:label:Phone')" prop="Phone">
<el-input :disabled="$route.query.ReviewStatus === '1'" v-model="basicInfo.Phone" size="small" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="Title: " prop="TitleIds">
<el-form-item :label="$t('system:reviewer:label:Title')" prop="TitleIds">
<el-select
:disabled="$route.query.ReviewStatus === '1'"
v-model="basicInfo.TitleIds[0]"
@ -89,17 +89,15 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="EMail: " prop="EMail">
<el-form-item :label="$t('system:reviewer:label:Email')" prop="EMail">
<el-input v-model="basicInfo.EMail" :disabled="$route.query.ReviewStatus === '1'" size="small" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="WeChat: " prop="WeChat">
<el-input v-model="basicInfo.WeChat" :disabled="$route.query.ReviewStatus === '1'" size="small" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<!-- <el-col :span="12">-->
<!-- <el-form-item label="WeChat: " prop="WeChat">-->
<!-- <el-input v-model="basicInfo.WeChat" :disabled="$route.query.ReviewStatus === '1'" size="small" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="12">
<!-- <el-form-item label="Payment Type: " prop="Nation">
<el-radio-group v-model="basicInfo.Nation">
@ -108,7 +106,7 @@
</el-radio-group>
</el-form-item> -->
<el-form-item label="Payment Type: " prop="Nation">
<el-form-item :label="$t('system:reviewer:label:Country')" prop="Nation">
<el-select
:disabled="$route.query.ReviewStatus === '1'"
v-model="basicInfo.Nation"
@ -116,11 +114,13 @@
clearable
class="mr"
>
<el-option v-for="item of $d.AttendedReviewerType" :value="item.value" :label="item.label" />
<el-option v-for="item of $d.AttendedReviewerType" :value="item.value" :label="item.label" :key="item.id"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<!-- <el-row>-->
<!-- </el-row>-->
<el-row>
<el-form-item style="margin-left: 120px">
<el-button
@ -129,7 +129,7 @@
:loading="isDisabled"
size="small"
@click="handleSave"
>Save</el-button>
> {{ $t('common:button:save') }}</el-button>
</el-form-item>
</el-row>
</el-form>

View File

@ -2,7 +2,7 @@
<div class="credentials-container">
<div class="clearfix">
<el-card class="e-card">
<p class="title">Diploma of the highest medical degree 最高医学学位毕业证书
<p class="title">{{$t('system:Credentials:title:Diploma of the highest medical degree')}}
</p>
<upload-file :doctor-id="doctorId" type="Diploma of the highest medical degree" />
<!-- <el-button size="mini" type="primary" style="position: absolute;bottom:10px;right: 10px;" @click="handleDownload('Reviewer_DiplomaOfTheHighestMedicalDegree_Template')">-->
@ -12,7 +12,7 @@
</el-card>
<el-card class="e-card">
<p class="title">Medical Qualification Certificate 医师资格证
<p class="title">{{$t('system:Credentials:title:Medical Qualification Certificate')}}
<!-- <el-button size="mini" type="primary" style="position: absolute;bottom:10px;right: 10px;" @click="handleDownload('Reviewer_MedicalQualificationCertificate_Template')">-->
<!-- <i class="el-icon-view el-icon-download"></i>-->
<!-- Template-->
@ -22,7 +22,7 @@
</el-card>
<el-card class="e-card">
<p class="title">Practice License 医师执业证
<p class="title">{{$t('system:Credentials:title:Practice License')}}
<!-- <el-button size="mini" type="primary" style="position: absolute;bottom:10px;right: 10px;" @click="handleDownload('Reviewer_PracticeLicense_Template')">-->
<!-- <i class="el-icon-view el-icon-download"></i>-->
<!-- Template-->
@ -31,7 +31,7 @@
<upload-file :doctor-id="doctorId" type="Practice License" />
</el-card>
</div>
<h6 style="line-height:30px;font-size:13px;">Modality Certificate 大型医用设备上岗证</h6>
<h6 style="line-height:30px;font-size:13px;">{{$t('system:Credentials:title:Modality Certificate')}}</h6>
<div class="clearfix">
<el-card class="e-card">
<p class="title">CT

View File

@ -1,8 +1,9 @@
<template>
<div v-loading="loading" class="form-container">
<div class="title-wrapper">
<p>Education (in chronological order)</p>
<el-button class="add" :disabled="$route.query.ReviewStatus === '1'" size="small" @click="handleAddEducation">Add</el-button>
<p>{{ $t('system:reviewer:title:Education') }}</p>
<el-button class="add" :disabled="$route.query.ReviewStatus === '1'" size="small" @click="handleAddEducation">
{{ $t('common:button:add') }}</el-button>
</div>
<el-table
ref="educationTbl"
@ -14,29 +15,29 @@
<el-table-column type="index" width="30" />
<el-table-column
prop="BeginDateStr"
label="Start"
:label="$t('system:EducationTraining:table:Start')"
min-width="55"
show-overflow-tooltip
/>
<el-table-column
prop="EndDateStr"
label="End"
:label="$t('system:EducationTraining:table:End')"
min-width="55"
show-overflow-tooltip
/>
<el-table-column prop="Degree" label="Degree" min-width="70" show-overflow-tooltip>
<el-table-column prop="Degree" :label="$t('system:EducationTraining:table:Degree')" min-width="70" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.DegreeCN?`${scope.row.Degree} / ${scope.row.DegreeCN}`:scope.row.Degree }}
</template>
</el-table-column>
<el-table-column prop="Major" label="Major" min-width="120" show-overflow-tooltip>
<el-table-column prop="Major" :label="$t('system:EducationTraining:table:Major')" min-width="120" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.MajorCN?`${scope.row.Major} / ${scope.row.MajorCN}`:scope.row.Major }}
</template>
</el-table-column>
<el-table-column
prop="Organization"
label="Institution"
:label="$t('system:EducationTraining:table:Institution')"
min-width="150"
show-overflow-tooltip
>
@ -44,32 +45,35 @@
{{ scope.row.OrganizationCN?`${scope.row.Organization} / ${scope.row.OrganizationCN}`:scope.row.Organization }}
</template>
</el-table-column>
<el-table-column prop="City" label="City" min-width="90" show-overflow-tooltip>
<el-table-column prop="City" :label="$t('system:EducationTraining:table:City')" min-width="90" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.CityCN?`${scope.row.City} / ${scope.row.CityCN}`:scope.row.City }}
</template>
</el-table-column>
<el-table-column prop="Province" label="State/Province" min-width="90" show-overflow-tooltip>
<el-table-column prop="Province" :label="$t('system:EducationTraining:table:State/Province')" min-width="90" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.ProvinceCN?`${scope.row.Province} / ${scope.row.ProvinceCN}`:scope.row.Province }}
</template>
</el-table-column>
<el-table-column prop="Country" label="Country" min-width="80" show-overflow-tooltip>
<el-table-column prop="Country" :label="$t('system:EducationTraining:table:Country')" min-width="80" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.CountryCN?`${scope.row.Country} / ${scope.row.CountryCN}`:scope.row.Country }}
</template>
</el-table-column>
<el-table-column label="Operation" min-width="120">
<el-table-column :label="$t('system:EducationTraining:table:Operation')" min-width="120">
<template slot-scope="scope">
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleEducationEdit(scope.row)">Edit</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleEducationDelete(scope.row)">Delete</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleEducationEdit(scope.row)">
{{ $t('common:button:edit') }}</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleEducationDelete(scope.row)">
{{ $t('common:button:delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<div class="title-wrapper" style="margin-top:40px;">
<p>Postgraduate Training (in chronological order)</p>
<el-button class="add" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleAddPostgraduate">Add</el-button>
<p>{{ $t('system:reviewer:title:Postgraduate') }}</p>
<el-button class="add" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleAddPostgraduate">
{{ $t('common:button:add') }}</el-button>
</div>
<el-table
ref="postgraduateTbl"
@ -81,24 +85,24 @@
<el-table-column type="index" width="30" />
<el-table-column
prop="BeginDateStr"
label="Start"
:label="$t('system:EducationTraining:table:Start')"
min-width="55"
show-overflow-tooltip
/>
<el-table-column
prop="EndDateStr"
label="End"
:label="$t('system:EducationTraining:table:End')"
min-width="55"
show-overflow-tooltip
/>
<el-table-column prop="Training" label="Training" min-width="70" show-overflow-tooltip>
<el-table-column prop="Training" :label="$t('system:EducationTraining:table:Training')" min-width="70" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.TrainingCN?`${scope.row.Training} / ${scope.row.TrainingCN}`:scope.row.Training }}
</template>
</el-table-column>
<el-table-column
prop="Major"
label="Specialty/Research Field"
:label="$t('system:EducationTraining:table:Specialty/Research Field')"
min-width="155"
show-overflow-tooltip
>
@ -106,32 +110,32 @@
{{ scope.row.MajorCN?`${scope.row.Major} / ${scope.row.MajorCN}`:scope.row.Major }}
</template>
</el-table-column>
<el-table-column prop="Hospital" label="Hospital" min-width="120" show-overflow-tooltip>
<el-table-column prop="Hospital" :label="$t('system:EducationTraining:table:Hospital')" min-width="120" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.HospitalCN?`${scope.row.Hospital} / ${scope.row.HospitalCN}`:scope.row.Hospital }}
</template>
</el-table-column>
<el-table-column prop="School" label="University" min-width="120" show-overflow-tooltip>
<el-table-column prop="School" :label="$t('system:EducationTraining:table:University')" min-width="120" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.SchoolCN?`${scope.row.School} / ${scope.row.SchoolCN}`:scope.row.School }}
</template>
</el-table-column>
<el-table-column prop="City" label="City" min-width="100" show-overflow-tooltip>
<el-table-column prop="City" :label="$t('system:EducationTraining:table:City')" min-width="100" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.CityCN?`${scope.row.City} / ${scope.row.CityCN}`:scope.row.City }}
</template>
</el-table-column>
<el-table-column prop="Province" label="State/Province" min-width="100" show-overflow-tooltip>
<el-table-column prop="Province" :label="$t('system:EducationTraining:table:State/Province')" min-width="100" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.ProvinceCN?`${scope.row.Province} / ${scope.row.ProvinceCN}`:scope.row.Province }}
</template>
</el-table-column>
<el-table-column prop="Country" label="Country" min-width="90" show-overflow-tooltip>
<el-table-column prop="Country" :label="$t('system:EducationTraining:table:Country')" min-width="90" show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.CountryCN?`${scope.row.Country} / ${scope.row.CountryCN}`:scope.row.Country }}
</template>
</el-table-column>
<el-table-column label="Operation" min-width="120">
<el-table-column :label="$t('system:EducationTraining:table:Operation')" min-width="120">
<template slot-scope="scope">
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handlePostgraduateEdit(scope.row)">Edit</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handlePostgraduateDelete(scope.row)">Delete</el-button>
@ -147,7 +151,7 @@
:close-on-click-modal="false"
>
<el-form v-if="educationDialogVisible" ref="educationForm" size="small" label-width="120px" :model="educationForm" :rules="educationRules">
<el-form-item label="Start" prop="BeginDate">
<el-form-item :label="$t('system:EducationTraining:table:Start')" prop="BeginDate">
<el-date-picker
v-model="educationForm.BeginDate"
type="month"
@ -158,7 +162,7 @@
:picker-options="beginPickerOption"
/>
</el-form-item>
<el-form-item label="End" prop="EndDate">
<el-form-item :label="$t('system:EducationTraining:table:End')" prop="EndDate">
<el-date-picker
v-model="educationForm.EndDate"
type="month"
@ -169,8 +173,8 @@
:picker-options="endpickerOption"
/>
</el-form-item>
<el-form-item label="Degree" prop="Degree">
<el-select v-model="educationForm.Degree" placeholder="Please select" size="small">
<el-form-item :label="$t('system:EducationTraining:table:Degree')" prop="Degree">
<el-select v-model="educationForm.Degree" size="small">
<el-option
v-for="item in degreeOptions"
:key="item.value"
@ -180,7 +184,7 @@
</el-select>
</el-form-item>
<el-form-item label="Major" prop="Major">
<el-form-item :label="$t('system:EducationTraining:table:Major')" prop="Major">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input v-model="educationForm.Major" placeholder="Please specify in English" size="small" />
@ -190,7 +194,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="Institution" prop="Organization">
<el-form-item :label="$t('system:EducationTraining:table:Institution')" prop="Organization">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input v-model="educationForm.Organization" placeholder="Please specify in English" size="small" />
@ -200,7 +204,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="City" prop="City">
<el-form-item :label="$t('system:EducationTraining:table:City')" prop="City">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input v-model="educationForm.City" placeholder="Please specify in English" size="small" />
@ -211,7 +215,7 @@
</el-row>
</el-form-item>
<el-form-item label="State/Province" prop="Province">
<el-form-item :label="$t('system:EducationTraining:table:State/Province')" prop="Province">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input v-model="educationForm.Province" placeholder="Please specify in English" size="small" />
@ -221,7 +225,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="Country" prop="Country">
<el-form-item :label="$t('system:EducationTraining:table:Country')" prop="Country">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input v-model="educationForm.Country" placeholder="Please specify in English" size="small" />
@ -233,7 +237,7 @@
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" size="small" :loading="isDisabled" @click="handleEducationSave">Save</el-button>
<el-button type="primary" size="small" :loading="isDisabled" @click="handleEducationSave">{{ $t('common:button:save') }}</el-button>
</span>
</el-dialog>
@ -245,7 +249,7 @@
:close-on-click-modal="false"
>
<el-form v-if="postgraduateDialogVisible" ref="postgraduateForm" size="small" label-width="190px" :model="postgraduateForm" :rules="postgraduateRules">
<el-form-item label="Start" prop="BeginDate">
<el-form-item :label="$t('system:EducationTraining:table:Start')" prop="BeginDate">
<el-date-picker
v-model="postgraduateForm.BeginDate"
type="month"
@ -256,7 +260,7 @@
size="small"
/>
</el-form-item>
<el-form-item label="End" prop="EndDate">
<el-form-item :label="$t('system:EducationTraining:table:End')" prop="EndDate">
<el-date-picker
v-model="postgraduateForm.EndDate"
type="month"
@ -267,7 +271,7 @@
size="small"
/>
</el-form-item>
<el-form-item label="Training" prop="Training">
<el-form-item :label="$t('system:EducationTraining:table:Training')" prop="Training">
<el-select v-model="postgraduateForm.Training" placeholder="Please select" size="small">
<el-option
v-for="item in TrainingOptions"
@ -277,7 +281,7 @@
/>
</el-select>
</el-form-item>
<el-form-item label="Specialty / Research Field" prop="Major">
<el-form-item :label="$t('system:EducationTraining:table:Specialty/Research Field')" prop="Major">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input v-model="postgraduateForm.Major" placeholder="Please specify in English" size="small" />
@ -287,7 +291,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="Hospital" prop="Hospital">
<el-form-item :label="$t('system:EducationTraining:table:Hospital')" prop="Hospital">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input v-model="postgraduateForm.Hospital" placeholder="Please specify in English" size="small" />
@ -297,7 +301,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="University" prop="School">
<el-form-item :label="$t('system:EducationTraining:table:University')" prop="School">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input v-model="postgraduateForm.School" placeholder="Please specify in English" size="small" />
@ -308,7 +312,7 @@
</el-row>
</el-form-item>
<el-form-item label="City" prop="City">
<el-form-item :label="$t('system:EducationTraining:table:City')" prop="City">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input v-model="postgraduateForm.City" placeholder="Please specify in English" size="small" />
@ -318,7 +322,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="State/Province" prop="Province">
<el-form-item :label="$t('system:EducationTraining:table:State/Province')" prop="Province">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input v-model="postgraduateForm.Province" placeholder="Please specify in English" size="small" />
@ -328,7 +332,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="Country" prop="Country">
<el-form-item :label="$t('system:EducationTraining:table:Country')" prop="Country">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input v-model="postgraduateForm.Country" placeholder="Please specify in English" size="small" />
@ -340,7 +344,7 @@
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="small" type="primary" :loading="isDisabled" @click="handlePostgraduateSave">Save</el-button>
<el-button size="small" type="primary" :loading="isDisabled" @click="handlePostgraduateSave">{{ $t('common:button:save') }}</el-button>
</span>
</el-dialog>
</div>
@ -528,7 +532,6 @@ export default {
if (valid) {
this.isDisabled = true
this.educationForm.DoctorId = this.$route.query.Id
if (this.educationForm.Degree === 'Bachelor') {
this.educationForm.DegreeCN = '学士'
} else if (this.educationForm.Degree === 'Master') {
@ -564,8 +567,7 @@ export default {
this.$confirm('Confirm to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'OK',
cancelButtonText: 'Cancel'
})
.then(() => {
deleteEducationInfo(row.Id)
@ -633,8 +635,7 @@ export default {
this.$confirm('Confirm to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'OK',
cancelButtonText: 'Cancel'
})
.then(() => {
deletePostgraduateInfo(row.Id)

View File

@ -13,7 +13,7 @@
<el-row>
<el-col :span="14">
<el-form-item label="Hospital: " prop="HospitalId">
<el-form-item :label="$t('system:reviewer:label:Hospital')" prop="HospitalId">
<el-select
v-model="employmentForm.HospitalId"
placeholder="select"
@ -39,13 +39,12 @@
<el-row>
<el-col :span="14">
<el-form-item label="Affiliated University: ">
<el-form-item :label="$t('system:reviewer:label:AffiliatedUniversity')">
<el-input
:disabled="$route.query.ReviewStatus === '1'"
v-model="UniversityAffiliated"
type="textarea"
autosize
disabled
size="small"
/>
</el-form-item>
@ -53,29 +52,29 @@
</el-row>
<el-row>
<el-col :span="14">
<el-form-item label="City: ">
<el-input :disabled="$route.query.ReviewStatus === '1'" v-model="City" disabled size="small" />
<el-form-item :label="$t('system:reviewer:label:City')">
<el-input :disabled="$route.query.ReviewStatus === '1'" v-model="City" size="small" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="14">
<el-form-item label="State/Province: ">
<el-input :disabled="$route.query.ReviewStatus === '1'" v-model="Province" disabled size="small" />
<el-form-item :label="$t('system:reviewer:label:State/Province')">
<el-input :disabled="$route.query.ReviewStatus === '1'" v-model="Province" size="small" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="14">
<el-form-item label="Country: ">
<el-input :disabled="$route.query.ReviewStatus === '1'" v-model="Country" disabled size="small" />
<el-form-item :label="$t('system:reviewer:label:Country')">
<el-input :disabled="$route.query.ReviewStatus === '1'" v-model="Country" size="small" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="14">
<el-form-item label="Department: " prop="DepartmentId">
<el-form-item :label="$t('system:reviewer:label:Department')" prop="DepartmentId">
<el-select
v-model="employmentForm.DepartmentId"
placeholder="select"
@ -123,7 +122,7 @@
<el-row>
<el-col :span="14">
<el-form-item label="Rank: " prop="RankId">
<el-form-item :label="$t('system:reviewer:label:Rank')" prop="RankId">
<el-select
:disabled="$route.query.ReviewStatus === '1'"
v-model="employmentForm.RankId"
@ -141,7 +140,7 @@
<el-option
v-for="item of $d.Rank"
:key="item.id"
:label="item.raw.Value"
:label="item.label"
:value="item.id"
/>
<!-- <el-option label="Other" :value="otherId" />-->
@ -170,99 +169,98 @@
</el-col>
</el-row>
<el-row>
<el-col :span="14">
<el-form-item label="Physician: " prop="PhysicianId" >
<el-select
v-model="employmentForm.PhysicianId"
placeholder="select"
:disabled="$route.query.ReviewStatus === '1'"
@change="PhysicianChange"
style="width:100%;"
size="small"
>
<el-option
v-for="item of $d.PhysicianOriginal"
:key="item.id"
:label="item.raw.Value"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item v-if="$fd('PhysicianOriginal', employmentForm.PhysicianId, 'id') === '其它' || $fd('PhysicianOriginal', employmentForm.PhysicianId, 'id') === 'Other'" class="other-item" prop="Physician">
<el-input
:disabled="$route.query.ReviewStatus === '1'"
v-model="employmentForm.Physician"
placeholder="Please specify"
size="small"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item v-if="$fd('PhysicianOriginal', employmentForm.PhysicianId, 'id') === '其它' || $fd('PhysicianOriginal', employmentForm.PhysicianId, 'id') === 'Other'" class="other-item" prop="PhysicianCN">
<el-input
:disabled="$route.query.ReviewStatus === '1'"
v-model="employmentForm.PhysicianCN"
placeholder="请用中文注明"
size="small"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="14">
<el-form-item label="Position: " prop="PositionId">
<el-select
:disabled="$route.query.ReviewStatus === '1'"
v-model="employmentForm.PositionId"
placeholder="select"
style="width:100%;"
size="small"
>
<!-- <el-option
v-for="(key,value) of dictionaryList.Position"
:key="key"
:label="key"
:value="value"
/> -->
<el-option
v-for="item of dictionaryList.Position"
:key="item.Id"
:label="item.Value"
:value="item.Id"
/>
<el-option label="Other" :value="otherId" />
<el-option label="None" value="f30a074b-2b47-4a92-97ec-e15086d37883" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item v-if="employmentForm.PositionId===otherId" class="other-item" prop="PositionOther">
<el-input
:disabled="$route.query.ReviewStatus === '1'"
v-model="employmentForm.PositionOther"
placeholder="Please specify"
size="small"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item v-if="employmentForm.PositionId===otherId" class="other-item" prop="PositionOtherCN">
<el-input
:disabled="$route.query.ReviewStatus === '1'"
v-model="employmentForm.PositionOtherCN"
placeholder="请用中文注明"
size="small"
/>
</el-form-item>
</el-col>
</el-row>
<!-- <el-row>-->
<!-- <el-col :span="14">-->
<!-- <el-form-item label="Physician: " prop="PhysicianId" >-->
<!-- <el-select-->
<!-- v-model="employmentForm.PhysicianId"-->
<!-- placeholder="select"-->
<!-- :disabled="$route.query.ReviewStatus === '1'"-->
<!-- @change="PhysicianChange"-->
<!-- style="width:100%;"-->
<!-- size="small"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="item of $d.PhysicianOriginal"-->
<!-- :key="item.id"-->
<!-- :label="item.raw.Value"-->
<!-- :value="item.id"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="5">-->
<!-- <el-form-item v-if="$fd('PhysicianOriginal', employmentForm.PhysicianId, 'id') === '其它' || $fd('PhysicianOriginal', employmentForm.PhysicianId, 'id') === 'Other'" class="other-item" prop="Physician">-->
<!-- <el-input-->
<!-- :disabled="$route.query.ReviewStatus === '1'"-->
<!-- v-model="employmentForm.Physician"-->
<!-- placeholder="Please specify"-->
<!-- size="small"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="5">-->
<!-- <el-form-item v-if="$fd('PhysicianOriginal', employmentForm.PhysicianId, 'id') === '其它' || $fd('PhysicianOriginal', employmentForm.PhysicianId, 'id') === 'Other'" class="other-item" prop="PhysicianCN">-->
<!-- <el-input-->
<!-- :disabled="$route.query.ReviewStatus === '1'"-->
<!-- v-model="employmentForm.PhysicianCN"-->
<!-- placeholder="请用中文注明"-->
<!-- size="small"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row>-->
<!-- <el-col :span="14">-->
<!-- <el-form-item label="Position: " prop="PositionId">-->
<!-- <el-select-->
<!-- :disabled="$route.query.ReviewStatus === '1'"-->
<!-- v-model="employmentForm.PositionId"-->
<!-- placeholder="select"-->
<!-- style="width:100%;"-->
<!-- size="small"-->
<!-- >-->
<!-- &lt;!&ndash; <el-option-->
<!-- v-for="(key,value) of dictionaryList.Position"-->
<!-- :key="key"-->
<!-- :label="key"-->
<!-- :value="value"-->
<!-- /> &ndash;&gt;-->
<!-- <el-option-->
<!-- v-for="item of dictionaryList.Position"-->
<!-- :key="item.Id"-->
<!-- :label="item.Value"-->
<!-- :value="item.Id"-->
<!-- />-->
<!-- <el-option label="Other" :value="otherId" />-->
<!-- <el-option label="None" value="f30a074b-2b47-4a92-97ec-e15086d37883" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="5">-->
<!-- <el-form-item v-if="employmentForm.PositionId===otherId" class="other-item" prop="PositionOther">-->
<!-- <el-input-->
<!-- :disabled="$route.query.ReviewStatus === '1'"-->
<!-- v-model="employmentForm.PositionOther"-->
<!-- placeholder="Please specify"-->
<!-- size="small"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="5">-->
<!-- <el-form-item v-if="employmentForm.PositionId===otherId" class="other-item" prop="PositionOtherCN">-->
<!-- <el-input-->
<!-- :disabled="$route.query.ReviewStatus === '1'"-->
<!-- v-model="employmentForm.PositionOtherCN"-->
<!-- placeholder="请用中文注明"-->
<!-- size="small"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-form-item>
<el-button type="primary" :disabled="isDisabled || $route.query.ReviewStatus === '1'" size="small" @click="handleSave">Save</el-button>
<el-button type="primary" :disabled="isDisabled || $route.query.ReviewStatus === '1'" size="small" @click="handleSave">{{ $t('common:button:save') }}</el-button>
</el-form-item>
</el-form>
</div>
@ -377,9 +375,9 @@ export default {
this.loading = true
this.isDisabled = true
const param = {}
var o = this.$d.PhysicianOriginal.find(v => {
return v.id === this.employmentForm.PhysicianId
})
// var o = this.$d.PhysicianOriginal.find(v => {
// return v.id === this.employmentForm.PhysicianId
// })
param.Id = this.$route.query.Id
param.DepartmentId = this.employmentForm.DepartmentId
param.DepartmentOther = this.employmentForm.DepartmentId === this.otherId ? this.employmentForm.DepartmentOther : ''
@ -387,9 +385,9 @@ export default {
param.RankId = this.employmentForm.RankId
param.RankOther = this.employmentForm.RankId === this.otherId ? this.employmentForm.RankOther : ''
param.RankOtherCN = this.employmentForm.RankId === this.otherId ? this.employmentForm.RankOtherCN : ''
param.PhysicianId = this.employmentForm.PhysicianId
param.Physician = o.label !== '其它' && o.label !== 'Other' ? o.raw.Value : this.employmentForm.Physician
param.PhysicianCN = o.label !== '其它' && o.label !== 'Other' ? o.raw.ValueCN : this.employmentForm.PhysicianCN
// param.PhysicianId = this.employmentForm.PhysicianId
// param.Physician = o.label !== '' && o.label !== 'Other' ? o.raw.Value : this.employmentForm.Physician
// param.PhysicianCN = o.label !== '' && o.label !== 'Other' ? o.raw.ValueCN : this.employmentForm.PhysicianCN
param.PositionId = this.employmentForm.PositionId
param.PositionOther = this.employmentForm.PositionId === this.otherId ? this.employmentForm.PositionOther : ''
param.PositionOtherCN = this.employmentForm.PositionId === this.otherId ? this.employmentForm.PositionOtherCN : ''

View File

@ -1,8 +1,8 @@
<template>
<div class="gcp-container">
<el-radio-group v-model="GCP" style="margin-bottom:20px">
<el-radio :label="1">Yes</el-radio>
<el-radio :label="0">No</el-radio>
<el-radio :label="1">{{ $t('system:GcpCertificate:radio:Yes') }}</el-radio>
<el-radio :label="0">{{ $t('system:GcpCertificate:radio:No') }}</el-radio>
</el-radio-group>
<div v-if="GCP" class="upload-container">
<!-- <upload-file :doctor-id="doctorId" type="GCP" />-->
@ -19,13 +19,13 @@
:on-exceed="handleExceed"
accept=".pdf"
>
<el-button size="small" type="primary" :loading="btnDisabled">Upload</el-button>
<span slot="tip" style="margin-left:10px;" class="el-upload__tip">(must be in pdf format)</span>
<el-button size="small" type="primary" :loading="btnDisabled">{{ $t('system:GcpCertificate:upload:Upload') }}</el-button>
<span slot="tip" style="margin-left:10px;" class="el-upload__tip">{{ $t('system:GcpCertificate:tap:must') }}</span>
</el-upload>
</div>
<div>
<el-button :loading="saveBtnLoading" :disabled="(fileList.length === 0 && GCP === 1)" type="primary" size="small" style="margin-top:20px" @click="handleSaveGCP">
Save
{{ $t('common:button:save') }}
</el-button>
</div>
</div>
@ -97,6 +97,7 @@ export default {
})
},
initFileList() {
if(!this.doctorId) return
getAttachmentByType(this.doctorId, 'GCP')
.then(res => {
if (res.IsSuccess) {
@ -181,7 +182,7 @@ export default {
this.fileList = []
this.GCPID = ''
this.$message({
message: 'Deleted successfully!',
message: this.$t('common:message:deletedSuccessfully'),
type: 'success'
})
}

View File

@ -1,7 +1,7 @@
<template>
<div class="form-container" style="width:80%;">
<el-form ref="researchForm" v-loading="loading" label-width="140px" :model="researchForm" size="small">
<el-form-item label="Field of Research: ">
<el-form-item :label="$t('system:reviewer:label:Field of Research')">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input :disabled="$route.query.ReviewStatus === '1'" v-model="researchForm.Research" type="textarea" rows="5" placeholder="Please specify in English" size="small" />
@ -11,7 +11,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="Grants: ">
<el-form-item :label="$t('system:reviewer:label:Grants')">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input :disabled="$route.query.ReviewStatus === '1'" v-model="researchForm.Grants" type="textarea" rows="5" placeholder="Please specify in English" size="small" />
@ -21,7 +21,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="Publications: ">
<el-form-item :label="$t('system:reviewer:label:Publications')">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input :disabled="$route.query.ReviewStatus === '1'" v-model="researchForm.Publications" type="textarea" rows="5" placeholder="Please specify in English" size="small" />
@ -31,7 +31,7 @@
</el-col>
</el-row>
</el-form-item>
<el-form-item label="Awards & Honors: ">
<el-form-item :label="$t('system:reviewer:label:Awards & Honors')">
<el-row type="flex" justify="space-between">
<el-col :span="11">
<el-input :disabled="$route.query.ReviewStatus === '1'" v-model="researchForm.AwardsHonors" type="textarea" rows="5" placeholder="Please specify in English" size="small" />
@ -42,7 +42,8 @@
</el-row>
</el-form-item>
<el-form-item>
<el-button :disabled="$route.query.ReviewStatus === '1'" type="primary" :loading="isDisabled" @click="handleSave">Save</el-button>
<el-button :disabled="$route.query.ReviewStatus === '1'" type="primary" :loading="isDisabled" @click="handleSave">
{{ $t('common:button:save') }}</el-button>
</el-form-item>
</el-form>
</div>

View File

@ -1,7 +1,7 @@
<template>
<div v-loading="loading" class="resumes-container">
<div class="resume-content">
<p>Resume</p>
<p>{{ $t('system:Resumes:title:Resume') }}</p>
<div class="upload-content">
<!-- <upload-files ref="uploadResume" :doctor-id="doctorId" :data-list="resumeList" :language="2" btn-name="Upload(English)" type="Resume" accept=".doc, .docx" @getFileList="getFileList" /> -->
<div class="uploadFile-container">
@ -14,21 +14,21 @@
:file-list="resumeList"
accept=".doc,.docx"
>
<el-button size="small" type="primary" :disabled="isDisabled || $route.query.ReviewStatus === '1'">Upload</el-button>
<el-button size="small" type="primary" :disabled="isDisabled || $route.query.ReviewStatus === '1'">{{ $t('system:GcpCertificate:upload:Upload') }}</el-button>
</el-upload>
</div>
</div>
<p>(must be in doc,docx format)</p>
<p>{{ $t('system:GcpCertificate:tap:must') }}</p>
</div>
<div class="resumeTbl">
<el-table :data="resumeListEN" size="small">
<el-table-column type="index" width="40" />
<el-table-column prop="FileName" label="Resume" width="180" show-overflow-tooltip />
<el-table-column prop="CreateTime" label="Upload Time" width="150" show-overflow-tooltip />
<el-table-column prop="FileName" :label="$t('system:Resumes:table:Resume')" width="180" show-overflow-tooltip />
<el-table-column prop="CreateTime" :label="$t('system:Resumes:table:Upload Time')" width="150" show-overflow-tooltip />
<el-table-column
prop="IsOfficial"
label="Official"
:label="$t('system:Resumes:table:Official')"
width="100"
>
<template slot-scope="scope">
@ -37,7 +37,7 @@
</el-table-column>
<el-table-column
prop="Language"
label="Language"
:label="$t('system:Resumes:table:Language')"
width="100"
show-overflow-tooltip
>
@ -46,23 +46,23 @@
<!-- <el-button size="small" type="text" @click="handleLanguageClick(scope.row)">{{ scope.row.Language===1?'CH':scope.row.Language===2?'EN':'Setting' }}</el-button> -->
</template>
</el-table-column>
<el-table-column label="Action" width="400">
<el-table-column :label="$t('common:action:action')" width="400">
<template slot-scope="scope">
<el-button type="text" size="small" @click="handlePreview(scope.row)">Download</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleRemoveFile(scope.row)">Delete</el-button>
<el-button type="text" size="small" @click="handlePreview(scope.row)">{{ $t('common:button:download') }}</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleRemoveFile(scope.row)">{{ $t('common:button:delete') }}</el-button>
<el-button
type="text"
size="small"
:disabled="scope.row.IsOfficial || $route.query.ReviewStatus === '1'"
@click="handleSetOfiical(scope.row)"
>Set as Official</el-button>
>{{ $t('system:Resumes:button:Set as Official') }}</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="resume-content" style="margin-top:10px;">
<p>中文简历</p>
<p>{{ $t('system:Resumes:title:ResumeCN') }}</p>
<div class="upload-content">
<div class="uploadFile-container">
<el-upload
@ -74,20 +74,20 @@
:file-list="resumeList"
accept=".doc, .docx"
>
<el-button size="small" type="primary" :disabled="isDisabled || $route.query.ReviewStatus === '1'">上传</el-button>
<el-button size="small" type="primary" :disabled="isDisabled || $route.query.ReviewStatus === '1'">{{ $t('system:GcpCertificate:upload:Upload') }}</el-button>
</el-upload>
</div>
</div>
<p>(必须是 doc,docx 格式)</p>
<p>{{ $t('system:GcpCertificate:tap:must') }}</p>
</div>
<div class="resumeTbl">
<el-table :data="resumeListCN" size="small">
<el-table-column type="index" width="40" />
<el-table-column prop="FileName" label="Resume" width="180" show-overflow-tooltip />
<el-table-column prop="CreateTime" label="Upload Time" width="150" show-overflow-tooltip />
<el-table-column prop="FileName" :label="$t('system:Resumes:table:Resume')" width="180" show-overflow-tooltip />
<el-table-column prop="CreateTime" :label="$t('system:Resumes:table:Upload Time')" width="150" show-overflow-tooltip />
<el-table-column
prop="IsOfficial"
label="Official"
:label="$t('system:Resumes:table:Official')"
width="100"
>
<template slot-scope="scope">
@ -96,7 +96,7 @@
</el-table-column>
<el-table-column
prop="Language"
label="Language"
:label="$t('system:Resumes:table:Language')"
width="100"
show-overflow-tooltip
>
@ -105,16 +105,16 @@
<!-- <el-button size="small" type="text" @click="handleLanguageClick(scope.row)">{{ scope.row.Language===1?'CH':scope.row.Language===2?'EN':'Setting' }}</el-button> -->
</template>
</el-table-column>
<el-table-column label="Action" width="400">
<el-table-column :label="$t('common:action:action')" width="400">
<template slot-scope="scope">
<el-button type="text" size="small" @click="handlePreview(scope.row)">Download</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleRemoveFile(scope.row)">Delete</el-button>
<el-button type="text" size="small" @click="handlePreview(scope.row)">{{ $t('common:button:download') }}</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleRemoveFile(scope.row)">{{ $t('common:button:delete') }}</el-button>
<el-button
type="text"
size="small"
:disabled="scope.row.IsOfficial"
:disabled="scope.row.IsOfficial || $route.query.ReviewStatus === '1'"
@click="handleSetOfiical(scope.row)"
>Set as Official</el-button>
>{{ $t('system:Resumes:button:Set as Official') }}</el-button>
</template>
</el-table-column>
</el-table>
@ -163,6 +163,7 @@ export default {
}
},
created() {
if(!this.doctorId) return
this.getResumeList()
},
methods: {
@ -266,11 +267,10 @@ export default {
}
},
handleRemoveFile(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
}).then(() => {
deleteAttachment(row.Id, row.Path)
.then(res => {
@ -278,7 +278,7 @@ export default {
this.resumeList.splice(this.resumeList.findIndex(item => item.Id === row.Id), 1)
this.filterByLanguage()
this.$message({
message: 'Deleted successfully!',
message: this.$t('common:message:deletedSuccessfully'),
type: 'success'
})
}

View File

@ -2,68 +2,68 @@
<div v-loading="loading" class="check-container form-container">
<el-form ref="checkForm" :model="checkForm" label-width="200px" size="small" :rules="rules">
<div class="title-wrapper">
<p>盲化信息</p>
<p>{{$t('system:Setting:title:Blinded information') }}</p>
</div>
<div class="check-content">
<el-form-item label="Blind Name" prop="BlindName">
<el-form-item :label="$t('system:Setting:label:Blind Name')" prop="BlindName">
<el-input
v-model="checkForm.BlindName"
style="width:300px"
/>
</el-form-item>
<el-form-item label="Blind NameCN" prop="BlindNameCN">
<el-form-item :label="$t('system:Setting:label:Blind NameCN')" prop="BlindNameCN">
<el-input
v-model="checkForm.BlindNameCN"
style="width:300px"
/>
</el-form-item>
<el-form-item label="Blind Publications" prop="BlindPublications">
<el-form-item :label="$t('system:Setting:label:Blind Publications')" prop="BlindPublications">
<el-input v-model="checkForm.BlindPublications" type="textarea" rows="8" style="width:60%;" size="small" />
</el-form-item>
</div>
<div class="title-wrapper">
<p>Setting</p>
<p>{{$t('system:Setting:title:Blinded Setting') }}</p>
</div>
<div class="check-content">
<el-form-item label="Information Confirmed?">
<el-form-item :label="$t('system:Setting:label:Information Confirmed?')">
<el-radio-group v-model="checkForm.ReviewStatus" @change="handleChange">
<el-radio :label="1">Yes</el-radio>
<el-radio :label="2">No</el-radio>
<el-radio :label="1">{{$t('system:Setting:label:Information Confirmed?:Yes')}}</el-radio>
<el-radio :label="2">{{$t('system:Setting:label:Information Confirmed?:No')}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="Contractor Status?">
<el-form-item :label="$t('system:Setting:label:Contractor Status?')">
<el-radio-group v-model="checkForm.CooperateStatus" @change="handleChange">
<el-radio :label="1">Yes</el-radio>
<el-radio :label="2">No</el-radio>
<el-radio :label="1">{{$t('system:Setting:label:Information Confirmed?:Yes')}}</el-radio>
<el-radio :label="2">{{$t('system:Setting:label:Information Confirmed?:No')}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="Accepting New Trials?">
<el-form-item :label="$t('system:Setting:label:Accepting New Trials?')">
<el-radio-group v-model="checkForm.AcceptingNewTrial" :disabled="radioDisabled">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
<el-radio :label="true">{{$t('system:Setting:label:Information Confirmed?:Yes')}}</el-radio>
<el-radio :label="false">{{$t('system:Setting:label:Information Confirmed?:No')}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="Actively Reading?">
<el-form-item :label="$t('system:Setting:label:Actively Reading?')">
<el-radio-group v-model="checkForm.ActivelyReading" :disabled="radioDisabled">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
<el-radio :label="true">{{$t('system:Setting:label:Information Confirmed?:Yes')}}</el-radio>
<el-radio :label="false">{{$t('system:Setting:label:Information Confirmed?:No')}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="Is Virtual?">
<el-form-item :label="$t('system:Setting:label:Is Virtual?')">
<el-radio-group v-model="checkForm.IsVirtual" :disabled="radioDisabled">
<el-radio :label="true">Yes</el-radio>
<el-radio :label="false">No</el-radio>
<el-radio :label="true">{{$t('system:Setting:label:Information Confirmed?:Yes')}}</el-radio>
<el-radio :label="false">{{$t('system:Setting:label:Information Confirmed?:No')}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="On Vacation: ">
<el-form-item :label="$t('system:Setting:label:On Vacation:')">
<span style="font-size:12px;margin-right:20px;">{{ checkForm.InHoliday }}</span>
<el-button type="text" @click="handleView">Planned Vacation</el-button>
<el-button type="text" @click="handleView">{{ $t('system:Setting:Planned Vacation') }}</el-button>
</el-form-item>
<el-form-item label="Comment: " prop="AdminComment">
<el-form-item :label="$t('system:Setting:label:Comment:')" prop="AdminComment">
<el-input
v-model="checkForm.AdminComment"
type="textarea"
@ -73,12 +73,12 @@
</el-form-item>
<el-form-item style="margin-top:20px">
<el-button type="primary" :disabled="isDisabled" @click="handleSave">Save</el-button>
<el-button type="primary" :disabled="isDisabled" @click="handleSave">{{ $t('common:button:save') }}</el-button>
</el-form-item>
</div>
</el-form>
<el-dialog
title="Vacation"
:title="$t('system:Setting:title:Vacation')"
:visible.sync="dialogVisible"
width="50%"
:close-on-click-modal="false"
@ -87,37 +87,38 @@
<div>
<el-date-picker
v-model="daterange"
style="width: 360px"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="daterange"
range-separator="to"
start-placeholder="Beginning Date"
end-placeholder="End Date"
:start-placeholder="$t('system:Setting:label:Beginning Date')"
:end-placeholder="$t('system:Setting:label:End Date')"
size="small"
/>
<el-button style="margin-left:10px;" type="primary" size="small" @click="handleAddHoliday">Add</el-button>
<el-button style="margin-left:10px;" type="primary" size="small" @click="handleAddHoliday">{{ $t('common:button:add') }}</el-button>
</div>
<el-table v-loading="loading2" :data="gridData" size="small">
<el-table-column type="index" />
<el-table-column
property="StartDate"
label="Beginning Date"
:label="$t('system:Setting:table:Beginning Date')"
min-width="120"
:formatter="beginTimeFormatter"
/>
<el-table-column
property="EndDate"
label="End Date"
:label="$t('system:Setting:table:End Date')"
min-width="120"
:formatter="endTimeFormatter"
/>
<el-table-column label="Action" fixed="right" min-width="200">
<el-table-column :label="$t('common:action:action')" fixed="right" min-width="200">
<template slot-scope="scope">
<el-button type="text" @click="handleDelete(scope.row)">Delete</el-button>
<el-button type="text" @click="handleDelete(scope.row)">{{ $t('common:button:delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<div class="pagination" style="padding: 10px 0;text-align: right">
<el-pagination
background
layout="total,sizes,prev, pager, next"
@ -165,7 +166,6 @@ export default {
rules: {
AdminComment: [{ max: 500, message: 'The maximum length is 500' }],
BlindName: [{ required: true, message: 'Please specify', trigger: 'blur' }],
BlindNameCN: [{ required: true, message: 'Please specify', trigger: 'blur' }]
},
doctorId: this.$route.query.Id,
isDisabled: false,
@ -184,6 +184,7 @@ export default {
},
methods: {
initForm() {
if (!this.doctorId) return
getAuditState(this.doctorId).then(res => {
if (res.Result) {
this.checkForm = res.Result
@ -204,7 +205,7 @@ export default {
if (res.IsSuccess) {
if (res.Result) { this.checkForm.Id = res.Result }
this.isDisabled = false
this.$message.success('Saved successfully')
this.$message.success(this.$t('common:message:savedSuccessfully'))
}
})
.catch(() => {
@ -258,11 +259,9 @@ export default {
}
},
handleDelete(row) {
this.$confirm('Sure to delete?', {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'Ok',
cancelButtonText: 'Cancel'
})
.then(() => {
this.loading2 = true
@ -274,7 +273,7 @@ export default {
this.gridData.splice(index, 1)
this.totalItems = this.totalItems - 1
}
this.$message.success('Deleted successfully!')
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
this.loading2 = false
})

View File

@ -12,7 +12,7 @@
>
<el-row>
<el-col :span="12">
<el-form-item label="Specialty: " prop="SpecialityId">
<el-form-item :label="$t('system:reviewer:label:Specialty')" prop="SpecialityId">
<el-select
v-model="specialtyForm.SpecialityId"
:disabled="$route.query.ReviewStatus === '1'"
@ -59,7 +59,7 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="Subspeciality: " prop="SubspecialityIds">
<el-form-item :label="$t('system:reviewer:label:Subspeciality')" prop="SubspecialityIds">
<el-select
v-model="specialtyForm.SubspecialityIds"
:disabled="$route.query.ReviewStatus === '1'"
@ -116,7 +116,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="Modality: " prop="ReadingTypeIds">
<el-form-item :label="$t('system:reviewer:label:Modality')" prop="ReadingTypeIds">
<el-select
:disabled="$route.query.ReviewStatus === '1'"
v-model="specialtyForm.ReadingTypeIds"
@ -171,7 +171,8 @@
</el-col>
</el-row>
<el-form-item>
<el-button type="primary" :disabled="isDisabled || $route.query.ReviewStatus === '1'" size="small" @click="handleSave">Save</el-button>
<el-button type="primary" :disabled="isDisabled || $route.query.ReviewStatus === '1'" size="small" @click="handleSave">
{{ $t('common:button:save') }}</el-button>
</el-form-item>
</el-form>
</div>

View File

@ -1,8 +1,8 @@
<template>
<div class="form-container">
<div class="title-wrapper">
<p>Clinical Trial Experience</p>
<el-button :disabled="$route.query.ReviewStatus === '1'" class="add" size="small" @click="handleAddClinicalTrial">Add</el-button>
<p>{{$t('system:TrialExperience:title:Clinical Trial Experience')}}</p>
<el-button :disabled="$route.query.ReviewStatus === '1'" class="add" size="small" @click="handleAddClinicalTrial">{{$t('common:button:add')}}</el-button>
</div>
<div style="padding:0 40px;">
<el-table
@ -13,36 +13,37 @@
size="small"
>
<el-table-column type="index" width="40" />
<el-table-column prop="Phase" label="Phase" min-width="50" />
<el-table-column prop="EvaluationCriteriaList" label="Review Criteria" min-width="100">
<el-table-column prop="Phase" :label="$t('system:TrialExperience:title:Phase')" min-width="50" />
<el-table-column prop="EvaluationCriteriaList" :label="$t('system:TrialExperience:title:Review Criteria')" min-width="100">
<template slot-scope="scope">
{{ scope.row.EvaluationCriteriaList.length>0? scope.row.EvaluationCriteriaList.join(', '):'' }}
</template>
</el-table-column>
<el-table-column prop="EvaluationCriteriaList" label="Starting And Ending Date" min-width="100">
<el-table-column prop="EvaluationCriteriaList" :label="$t('system:TrialExperience:title:Starting And Ending Date')" min-width="100">
<template slot-scope="scope">
<span v-if="scope.row.StartTime">{{ scope.row.StartTime.split('-')[0] }}-{{scope.row.EndTime ? scope.row.EndTime.split('-')[0] : ''}}</span>
</template>
</el-table-column>
<el-table-column prop="VisitReadingCount" label="Visit Reading Count" min-width="70" />
<el-table-column prop="EvaluationContent" label="Indication" min-width="70" />
<el-table-column label="Operation" min-width="200">
<el-table-column prop="VisitReadingCount" :label="$t('system:TrialExperience:title:Visit Reading Count')" min-width="70" />
<el-table-column prop="EvaluationContent" :label="$t('system:TrialExperience:Indication')" min-width="70" />
<el-table-column :label="$t('system:TrialExperience:Operation')" min-width="200">
<template slot-scope="scope">
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleEdit(scope.row)">Edit</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleDel(scope.row)">Delete</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleEdit(scope.row)">
{{ $t('common:button:edit') }}</el-button>
<el-button type="text" size="small" :disabled="$route.query.ReviewStatus === '1'" @click="handleDel(scope.row)">{{ $t('common:button:delete') }}</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="title-wrapper" style="margin-top:10px;">
<p>GCP Certificate</p>
<p>{{$t('system:TrialExperience:title:GCP Certificate')}}</p>
</div>
<div style="margin-left:40px;width:40%">
<gcp-certificate :doctor-id="doctorId" :gcp="GCP" :gcp-id="GCPID" />
</div>
<div class="title-wrapper" style="margin-top:10px;">
<p>Other Relevant Experience</p>
<p>{{$t('system:TrialExperience:title:Other Relevant Experience')}}</p>
</div>
<div style="padding:0 40px;">
<el-row type="flex" justify="space-between">
@ -59,7 +60,8 @@
<el-input v-model="OtherClinicalExperienceCN" :disabled="$route.query.ReviewStatus === '1'" type="textarea" rows="5" placeholder="请用中文注明" size="small" />
</el-col>
</el-row>
<el-button type="primary" size="small" style="margin-top:20px" :disabled="isBtnDisabled || $route.query.ReviewStatus === '1'" @click="handleSaveOtherClinical">Save</el-button>
<el-button type="primary" size="small" style="margin-top:20px" :disabled="isBtnDisabled || $route.query.ReviewStatus === '1'" @click="handleSaveOtherClinical">
{{ $t('common:button:save') }}</el-button>
</div>
<el-dialog v-if="clinicalTrialDialogVisible" :title="clinicalTrialDialogTitle" :visible.sync="clinicalTrialDialogVisible" width="480px" :close-on-click-modal="false">
<el-form
@ -70,8 +72,8 @@
:model="clinicalTrialForm"
size="small"
>
<el-form-item label="Phase" prop="PhaseId">
<el-select v-model="clinicalTrialForm.PhaseId" placeholder="Please select">
<el-form-item :label="$t('system:TrialExperience:label:Phase')" prop="PhaseId">
<el-select v-model="clinicalTrialForm.PhaseId">
<!-- <el-option
v-for="(key,value) of dictionaryList.Phase"
:key="value"
@ -86,10 +88,9 @@
/>
</el-select>
</el-form-item>
<el-form-item label="Review Criteria" prop="EvaluationCriteriaIdList">
<el-form-item :label="$t('system:TrialExperience:label:Review Criteria')" prop="EvaluationCriteriaIdList">
<el-select
v-model="clinicalTrialForm.EvaluationCriteriaIdList"
placeholder="Please select"
multiple
>
<!-- <el-option v-for="(key,value) of dictionaryList.ReadingStandard" :key="value" :label="key" :value="value" /> -->
@ -101,29 +102,29 @@
/>
</el-select>
</el-form-item>
<el-form-item label="Start Time" prop="StartTime">
<el-form-item :label="$t('system:TrialExperience:label:Start Time')" prop="StartTime">
<el-date-picker
v-model="clinicalTrialForm.StartTime"
type="year"
placeholder="Select Start Time">
>
</el-date-picker>
</el-form-item>
<el-form-item label="End Time" prop="EndTime">
<el-form-item :label="$t('system:TrialExperience:label:End Time')" prop="EndTime">
<el-date-picker
v-model="clinicalTrialForm.EndTime"
type="year"
placeholder="Select End Time">
>
</el-date-picker>
</el-form-item>
<el-form-item label="Visit Reading Count" prop="VisitReadingCount">
<el-form-item :label="$t('system:TrialExperience:Visit Reading Count')" prop="VisitReadingCount">
<el-input style="width: 100%" oninput="value=value.replace(/[^\d]/g,'')" v-model="clinicalTrialForm.VisitReadingCount" controls-position="right" :min="0" />
</el-form-item>
<el-form-item label="Indication" prop="EvaluationContent">
<el-form-item :label="$t('system:TrialExperience:Indication')" prop="EvaluationContent">
<el-input v-model="clinicalTrialForm.EvaluationContent" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" size="small" :loading="isDisabled" @click="handleSave">Save</el-button>
<el-button type="primary" size="small" :loading="isDisabled" @click="handleSave">{{ $t('common:button:save') }}</el-button>
</span>
</el-dialog>
</div>
@ -265,8 +266,7 @@ export default {
this.$confirm('Confirm to delete?', {
type: 'warning',
distinguishCancelAndClose: true,
confirmButtonText: 'OK',
cancelButtonText: 'Cancel'
})
.then(() => {
deleteTrialExperience(row.Id)

View File

@ -1,39 +1,34 @@
<template>
<div class="app-container">
<el-tabs v-model="active" @tab-click="clickTab">
<el-tab-pane label="Basic Info" name="BasicInfo">
<el-tab-pane :label="$t('system:reviewer:tab:BasicInfo')" name="BasicInfo">
<basic-info v-if="load.BasicInfo" />
</el-tab-pane>
<el-tab-pane label="Employment" name="Employment">
<el-tab-pane :label="$t('system:reviewer:tab:Employment')" name="Employment">
<Employment v-if="load.Employment" />
</el-tab-pane>
<el-tab-pane label="Specialty" name="Specialty">
<el-tab-pane :label="$t('system:reviewer:tab:Specialty')" name="Specialty">
<specialty v-if="load.Specialty" />
</el-tab-pane>
<el-tab-pane label="Education & Training" name="EducationTraining">
<el-tab-pane :label="$t('system:reviewer:tab:Education&Training')" name="EducationTraining">
<education-training v-if="load.EducationTraining" />
</el-tab-pane>
<el-tab-pane label="Research & Publication" name="ResearchPublication">
<el-tab-pane :label="$t('system:reviewer:tab:Research&Publication')" name="ResearchPublication">
<research-publication v-if="load.ResearchPublication" />
</el-tab-pane>
<el-tab-pane label="Trial Experience" name="TrialExperience">
<el-tab-pane :label="$t('system:reviewer:tab:TrialExperience')" name="TrialExperience">
<trial-experience v-if="load.TrialExperience" />
</el-tab-pane>
<el-tab-pane label="Credentials" name="Credentials">
<el-tab-pane :label="$t('system:reviewer:tab:Credentials')" name="Credentials">
<Credentials v-if="load.Credentials" />
</el-tab-pane>
<el-tab-pane label="Resumes" name="Resumes">
<el-tab-pane :label="$t('system:reviewer:tab:Resumes')" name="Resumes">
<Resumes v-if="load.Resumes" />
</el-tab-pane>
<el-tab-pane label="Agreements" name="Agreements">
<el-tab-pane :label="$t('system:reviewer:tab:Agreements')" name="Agreements">
<Agreements v-if="load.Agreements" />
</el-tab-pane>
<el-tab-pane label="Setting" name="Setting">
<el-tab-pane :label="$t('system:reviewer:tab:Setting')" name="Setting">
<Setting v-if="load.Setting" />
</el-tab-pane>
</el-tabs>

View File

@ -4,14 +4,14 @@
<div class="search">
<div class="base-search-form">
<el-form size="small" :inline="true">
<el-form-item label="Name:">
<el-form-item :label="$t('reviewers-list:label:Name')">
<el-input
v-model="searchData.Name"
style="width:100px;"
clearable
/>
</el-form-item>
<el-form-item label="Modality:">
<el-form-item :label="$t('reviewers-list:label:Modality')">
<el-select
v-model="searchData.ReadingTypeIdList"
clearable
@ -33,7 +33,7 @@
/>
</el-select>
</el-form-item>
<el-form-item label="Subspeciality:">
<el-form-item :label="$t('reviewers-list:label:Subspeciality')">
<el-select
v-model="searchData.SubspecialityIdList"
multiple
@ -50,271 +50,36 @@
</el-select>
</el-form-item>
<el-form-item>
<!-- <el-button type="text" @click="handleMore">More</el-button> -->
<el-button type="primary" icon="el-icon-search" @click="handleSearch">Search</el-button>
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">Reset</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">{{ $t('common:button:search') }}</el-button>
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">{{ $t('common:button:reset') }}</el-button>
<el-button
icon="el-icon-download"
type="primary"
:disabled="!(selectArr.length>0)"
@click="handleDownLoadOffical"
>Download CV</el-button>
>{{$t('reviewers-list:label:DownloadCV')}}</el-button>
<el-button
type="primary"
icon="el-icon-link"
@click="showResearchLink"
>
采集链接
{{$t('reviewers-list:label:showResearchLink')}}
</el-button>
</el-form-item>
</el-form>
</div>
<span style="margin-left:auto;">
<el-switch
v-model="isEN"
active-text="EN"
inactive-text="中文"
style="margin-right:10px;"
@change="handleIsEnChange"
/>
<el-button size="small" icon="el-icon-plus" type="primary" @click="handleNew">New</el-button>
<!-- <el-switch-->
<!-- v-model="isEN"-->
<!-- active-text="EN"-->
<!-- inactive-text="中文"-->
<!-- style="margin-right:10px;"-->
<!-- @change="handleIsEnChange"-->
<!-- />-->
<el-button size="small" icon="el-icon-plus" type="primary" @click="handleNew">{{$t('common:button:new')}}</el-button>
</span>
</div>
<!-- 更多搜索条件 -->
<el-drawer
:visible.sync="isShow"
:with-header="false"
size="410px"
>
<div style="padding:10px;">
<el-form label-width="160px" size="mini">
<el-form-item label="Name">
<el-input
v-model="searchData.Name"
placeholder="Name"
style="width:100%;"
clearable
/>
</el-form-item>
<el-form-item label="Modality">
<el-select
v-model="searchData.ReadingTypeIdList"
placeholder="Modality"
clearable
multiple
style="width:100%;"
>
<!-- <el-option
v-for="(key,value) of dictionaryList.ReadingType"
:key="key"
:label="key"
:value="value"
/> -->
<el-option
v-for="item of dict.type.ReadingType"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="Subspeciality">
<el-select
v-model="searchData.SubspecialityIdList"
placeholder="Subspeciality"
multiple
clearable
style="width:100%;"
>
<!-- <el-option
v-for="(key,value) of dictionaryList.Subspeciality"
:key="key"
:label="key"
:value="value"
/> -->
<el-option
v-for="item of dict.type.Subspeciality"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="Department">
<el-select
v-model="searchData.DepartmentId"
placeholder="Department"
style="width:100%;"
clearable
>
<!-- <el-option
v-for="(key,value) of dictionaryList.Department"
:key="key"
:label="key"
:value="value"
/> -->
<el-option
v-for="item of dict.type.Department"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="Rank">
<el-select
v-model="searchData.RankId"
placeholder="Rank"
style="width:100%;"
clearable
>
<!-- <el-option
v-for="(key,value) of dictionaryList.Rank"
:key="key"
:label="key"
:value="value"
/> -->
<el-option
v-for="item of dict.type.Rank"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="Position">
<el-select
v-model="searchData.PositionId"
placeholder="Position"
style="width:100%;"
clearable
>
<!-- <el-option
v-for="(key,value) of dictionaryList.Position"
:key="key"
:label="key"
:value="value"
/> -->
<el-option
v-for="item of dict.type.Position"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="Institution">
<el-select
v-model="searchData.HospitalId"
placeholder="Institution"
style="width:100%;"
clearable
>
<el-option
v-for="(item,index) in hospitalList"
:key="index"
:label="item.HospitalName"
:value="item.Id"
/>
</el-select>
</el-form-item>
<el-form-item label="Review Criteria">
<el-select
v-model="searchData.EvaluationCriteriaIdList"
placeholder="Please select"
style="width:100%;"
clearable
multiple
>
<!-- <el-option v-for="(key,value) of dictionaryList.ReadingStandard" :key="key" :label="key" :value="value" /> -->
<el-option
v-for="item of dict.type.ReadingStandard"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="Enrollment">
<el-select
v-model="searchData.EnrollStatus"
placeholder="Enrollment"
style="width:100%;"
clearable
>
<el-option key="2" label="Yes" :value="2" />
<el-option key="1" label="No" :value="1" />
</el-select>
</el-form-item>
<el-form-item label="Information Confirmed">
<el-select
v-model="searchData.InformationConfirmed"
placeholder="Information Confirmed"
style="width:100%;"
clearable
>
<el-option key="1" label="Yes" :value="1" />
<el-option key="2" label="No" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="Contractor Status">
<el-select
v-model="searchData.ContractorStatus"
placeholder="Contractor Status"
style="width:100%;"
clearable
>
<el-option key="1" label="Yes" :value="1" />
<el-option key="2" label="No" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="Accepting New Trials">
<el-select
v-model="searchData.AcceptingNewTrial"
placeholder="Accepting New Trials"
style="width:100%;"
clearable
>
<el-option key="2" label="Yes" :value="true" />
<el-option key="1" label="No" :value="false" />
</el-select>
</el-form-item>
<el-form-item label="Actively Reading">
<el-select
v-model="searchData.ActivelyReading"
placeholder="Actively Reading"
style="width:100%;"
clearable
>
<el-option key="2" label="Yes" :value="true" />
<el-option key="1" label="No" :value="false" />
</el-select>
</el-form-item>
<el-form-item label="Payment Type: ">
<el-select
v-model="searchData.Nation"
clearable
style="width:100%;"
>
<el-option v-for="item of $d.AttendedReviewerType" :value="item.value" :label="item.label" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSelectSearch">Search</el-button>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="isShow=false">Back</el-button>
</el-form-item>
</el-form>
</div>
</el-drawer>
<!-- 医生列表 -->
<el-table
v-adaptive="{bottomOffset:55}"
@ -330,7 +95,7 @@
<el-table-column
align="left"
prop="LastName"
label="Name"
:label="$t('reviewers-list:table:Name')"
show-overflow-tooltip
width="130"
sortable="custom"
@ -341,15 +106,15 @@
</el-table-column>
<el-table-column
prop="ChineseName"
label="Name CN"
:label="$t('reviewers-list:table:NameCN')"
show-overflow-tooltip
width="90"
align="left"
/>
<el-table-column prop="ReviewerCode" label="ID" width="80" show-overflow-tooltip sortable="custom" />
<el-table-column prop="AccountUserName" label="User Name" width="140" show-overflow-tooltip sortable="custom" />
<el-table-column prop="ReviewerCode" :label="$t('reviewers-list:table:ID')" width="80" show-overflow-tooltip sortable="custom" />
<el-table-column prop="AccountUserName" :label="$t('reviewers-list:table:UserName')" width="140" show-overflow-tooltip sortable="custom" />
<el-table-column
label="Reading"
:label="$t('reviewers-list:table:Reading')"
width="100"
show-overflow-tooltip
sortable="custom"
@ -370,7 +135,7 @@
</template>
</el-table-column>
<el-table-column
label="Finished"
:label="$t('reviewers-list:table:Finished')"
width="100"
show-overflow-tooltip
sortable="custom"
@ -393,7 +158,7 @@
<el-table-column
align="left"
prop="SpecialityId"
label="Specialty"
:label="$t('reviewers-list:table:Specialty')"
sortable="custom"
show-overflow-tooltip
width="130"
@ -407,7 +172,7 @@
<el-table-column
align="left"
prop="Subspeciality"
label="Subspecialty"
:label="$t('reviewers-list:table:Subspecialty')"
show-overflow-tooltip
min-width="150"
>
@ -422,7 +187,7 @@
</el-table-column>
<el-table-column
prop="HospitalName"
label="Institution"
:label="$t('reviewers-list:table:Institution')"
min-width="110"
align="left"
sortable="custom"
@ -436,7 +201,7 @@
</el-table-column>
<el-table-column
prop="City"
label="Location"
:label="$t('reviewers-list:table:Location')"
width="110"
align="left"
sortable="custom"
@ -450,7 +215,7 @@
</el-table-column>
<el-table-column
prop="IsVirtual"
label="Virtual"
:label="$t('reviewers-list:table:Virtual')"
min-width="80"
align="left"
sortable="custom"
@ -464,7 +229,7 @@
</el-table-column>
<el-table-column
prop="ReviewStatus"
label="Confirmed"
:label="$t('reviewers-list:table:Confirmed')"
min-width="80"
align="left"
sortable="custom"
@ -476,27 +241,27 @@
</span>
</template>
</el-table-column>
<el-table-column label="Action" min-width="200" align="left" fixed="right">
<el-table-column :label="$t('common:action:action')" min-width="200" align="left" fixed="right">
<template slot-scope="scope">
<el-button
size="mini"
circle
icon="el-icon-info"
title="Detail"
:title="$t('reviewers-list:table:Detail')"
@click="handleDetail(scope.row)"
/>
<el-button
size="mini"
circle
icon="el-icon-edit-outline"
title="Edit"
:title="$t('reviewers-list:table:Edit')"
@click="handleEdit(scope.row)"
/>
<el-button
size="mini"
icon="el-icon-view"
circle
title="盲态简历"
:title="$t('reviewers-list:table:Blind')"
@click="lookResumeInfo(scope.row)"
/>
</template>
@ -515,13 +280,13 @@
<template slot="dialog-body">
<div>
<i style="color:#428bca;" class="el-icon-success" />
<span>成功创建分享链接</span>
<span>{{ $t('reviewers-list:message:msg1')}}</span>
</div>
<div style="margin:10px 0;">
<span style="">个人简历填写链接</span><el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4}" v-model="shareLink" readonly style="width: 100%;margin-top: 10px" />
<span style="">{{ $t('reviewers-list:message:msg2') }}</span><el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4}" v-model="shareLink" readonly style="width: 100%;margin-top: 10px" />
</div>
<div>
<el-button type="primary" round @click="copyCode"></el-button>
<el-button type="primary" round @click="copyCode">{{ $t('reviewers-list:button:copyCode') }}</el-button>
</div>
</template>
</base-model>
@ -602,17 +367,20 @@ export default {
},
tokenKey: getToken(),
share_model: { visible: false, title: '', width: '500px' },
shareLink: null
shareLink: null,
isEnglish: false
}
},
dicts: ['ReadingType', 'Subspeciality', 'Department', 'Rank', 'Position', 'ReadingStandard'],
computed: {
...mapGetters(['hospitalList', 'reviewersQuery', 'isEnglish'])
...mapGetters(['hospitalList', 'reviewersQuery'])
},
created() {
this.isEN = this.isEnglish
this.reviewersQuery ? this.listQuery = this.reviewersQuery : ''
this.initPage()
// this.isEnglish = !!((this.$route.query.isEnglish === true || this.$route.query.isEnglish === 'true'))
this.isEnglish = this.$i18n.locale === 'zh' ? false : true
this.isEN = this.isEnglish
},
methods: {
copyCode() {
@ -637,7 +405,7 @@ export default {
},
showResearchLink() {
const trialId = this.trialId
this.shareLink = `${location.protocol}//${location.host}/ReviewersResearch`
this.shareLink = `${location.protocol}//${location.host}/ReviewersResearch?lang=${this.$store.getters.language}`
this.share_model.visible = true
},
lookResumeInfo(row) {

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