285 Commits

Author SHA1 Message Date
caiyiling a66e15eb39 MRI-PDFF测量逻辑更改
continuous-integration/drone/push Build encountered an error
2025-06-04 16:25:48 +08:00
caiyiling 895e3a6bed MRI-PDFF更改
continuous-integration/drone/push Build encountered an error
2025-06-04 13:35:42 +08:00
caiyiling 9dddc0c012 MRI-PDFF测量逻辑更改
continuous-integration/drone/push Build encountered an error
2025-06-04 10:53:45 +08:00
caiyiling a965f08a1e MRI-PDFF标准更改
continuous-integration/drone/push Build encountered an error
2025-06-04 09:24:41 +08:00
caiyiling 9962b1a829 反色bug修复
continuous-integration/drone/push Build encountered an error
2025-05-28 18:46:53 +08:00
caiyiling 049128b90e 添加阅片完成支持添加临时标注(历史标注不允许更改)功能及阅片页面双击放大缺陷修复
continuous-integration/drone/push Build encountered an error
2025-05-28 15:44:38 +08:00
wangxiaoshuang 45e6a20988 Merge branch 'uat'
continuous-integration/drone/push Build encountered an error
# Conflicts:
#	src/utils/metaDataProvider.js
2025-05-26 12:30:44 +08:00
wangxiaoshuang 5141eb5cbd 发布配置修改
continuous-integration/drone/push Build is passing
2025-05-23 18:12:49 +08:00
wangxiaoshuang 073b06a76f 1
continuous-integration/drone/push Build is passing
2025-05-23 17:10:45 +08:00
wangxiaoshuang 20723e8d2c 1
continuous-integration/drone/push Build is passing
2025-05-23 16:25:30 +08:00
wangxiaoshuang fba00157a1 crc一致性核查回复弹窗添加取消按钮
continuous-integration/drone/push Build is passing
2025-05-23 16:06:12 +08:00
wangxiaoshuang f0e6708533 1
continuous-integration/drone/push Build is passing
2025-05-23 15:24:49 +08:00
wangxiaoshuang e770dc1078 1 2025-05-23 15:24:07 +08:00
wangxiaoshuang e15934d7ba iqc质控页面数据已退回禁用所有按钮
continuous-integration/drone/push Build is passing
2025-05-23 13:49:36 +08:00
wangxiaoshuang 4baf039d71 iqc下载非dicom文件夹名称问题
continuous-integration/drone/push Build is passing
2025-05-23 13:38:59 +08:00
wangxiaoshuang 5c4bc96a26 pm重传审批样式修改
continuous-integration/drone/push Build is passing
2025-05-23 13:27:51 +08:00
wangxiaoshuang 30f9e807b7 crc一致性核查逻辑变更
continuous-integration/drone/push Build is passing
2025-05-23 11:07:17 +08:00
wangxiaoshuang 269f9f9477 pm重传审批修改
continuous-integration/drone/push Build is passing
2025-05-23 10:11:52 +08:00
wangxiaoshuang 810c786512 1
continuous-integration/drone/push Build is passing
2025-05-22 18:04:29 +08:00
wangxiaoshuang e27705eb22 IRC国际化替换
continuous-integration/drone/push Build is passing
2025-05-22 17:49:43 +08:00
wangxiaoshuang 83bf082c43 crc一致性核查回复信息有误
continuous-integration/drone/push Build is passing
2025-05-22 16:52:50 +08:00
wangxiaoshuang 37f12b30cc 阅片跟踪影像退回添加退回原因
continuous-integration/drone/push Build is passing
2025-05-22 15:30:14 +08:00
wangxiaoshuang f045f68115 一致性核查回复修改
continuous-integration/drone/push Build is passing
2025-05-22 14:06:38 +08:00
wangxiaoshuang 64e67ad106 一致性核查回复修改
continuous-integration/drone/push Build is passing
2025-05-22 13:54:27 +08:00
wangxiaoshuang f2ee666083 重阅审批的弹框,国际化取值不正确修改
continuous-integration/drone/push Build is passing
2025-05-22 11:04:30 +08:00
caiyiling 8ece8915ff 高亮颜色更改
continuous-integration/drone/push Build is passing
2025-05-21 16:01:04 +08:00
caiyiling 8270841ca1 典型肝内病灶鼠标悬浮显示
continuous-integration/drone/push Build is passing
2025-05-21 15:21:33 +08:00
caiyiling e99c4527b9 阅片页面radio样式更改及病灶信息高亮更改
continuous-integration/drone/push Build is passing
2025-05-21 15:10:49 +08:00
caiyiling e295bff859 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-05-21 14:06:54 +08:00
caiyiling 7a53a75038 影像质量不正常时维护病灶默认状态 2025-05-21 14:06:06 +08:00
wangxiaoshuang d96822818c 1
continuous-integration/drone/push Build is passing
2025-05-21 14:02:23 +08:00
caiyiling 9e2255e324 阅片标准更改
continuous-integration/drone/push Build is passing
2025-05-21 10:37:12 +08:00
caiyiling dbdd18dcf6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-05-21 09:49:22 +08:00
caiyiling 4ae2504278 阅片标准更改 2025-05-21 09:48:54 +08:00
wangxiaoshuang 6a0a5f4724 1
continuous-integration/drone/push Build is passing
2025-05-20 16:14:40 +08:00
wangxiaoshuang ee2e33405c 申请原因必填添加星号
continuous-integration/drone/push Build is passing
2025-05-20 11:07:41 +08:00
wangxiaoshuang 286865ba8f 影像质疑列表操作栏样式调整
continuous-integration/drone/push Build is passing
2025-05-20 09:43:02 +08:00
wangxiaoshuang 75a0f3a91a 影像退回添加申请原因、备注
continuous-integration/drone/push Build is passing
2025-05-19 17:53:54 +08:00
wangxiaoshuang 4fbcd8f8f5 项目培训新增默认字段IsPublish修改
continuous-integration/drone/push Build is passing
2025-05-19 16:05:36 +08:00
wangxiaoshuang 3c2edbffc5 1
continuous-integration/drone/push Build is passing
2025-05-19 15:39:04 +08:00
caiyiling 38fb56e09e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-05-19 15:19:18 +08:00
caiyiling 105537c49e 非淋巴结靶病灶保存验证更改 2025-05-19 15:18:48 +08:00
wangxiaoshuang 355f6bcf86 培训文档管理预览附件
continuous-integration/drone/push Build is passing
2025-05-19 14:48:47 +08:00
wangxiaoshuang d6e9f9ddc2 培训文档管理预览附件
continuous-integration/drone/push Build is passing
2025-05-19 14:35:17 +08:00
wangxiaoshuang 16e005e664 test环境新增onlyoffice地址配置
continuous-integration/drone/push Build is passing
2025-05-19 14:27:00 +08:00
wangxiaoshuang b92b55a45a 培训课程管理问题
continuous-integration/drone/push Build is passing
2025-05-19 14:18:59 +08:00
wangxiaoshuang 0ed070ecd7 【临床数据】新增临床数据时,选择模板同时存在中文模板和英文模板,根据语言环境只显示一个 2025-05-19 14:18:45 +08:00
caiyiling 49940ab034 lugano更改
continuous-integration/drone/push Build is passing
2025-05-19 14:15:41 +08:00
caiyiling aca5b0c721 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-05-19 11:28:14 +08:00
caiyiling 8ea7540581 阅片报告页更改 2025-05-19 11:27:50 +08:00
wangxiaoshuang ec6a72e143 影像质控问题配置未勾选问题提交会报错
continuous-integration/drone/push Build is passing
2025-05-15 16:44:16 +08:00
wangxiaoshuang f512c1456a 阅片结果查看跳转修改
continuous-integration/drone/push Build is passing
2025-05-15 15:39:23 +08:00
wangxiaoshuang 4aa74b5420 阅片结果查看跳转修改
continuous-integration/drone/push Build is passing
2025-05-15 15:32:24 +08:00
wangxiaoshuang 50c37824aa ir已阅查看跳转修改
continuous-integration/drone/push Build is passing
2025-05-15 15:21:47 +08:00
wangxiaoshuang 358864c6c6 onlyoffice引入方式修改
continuous-integration/drone/push Build is passing
2025-05-15 11:08:33 +08:00
wangxiaoshuang e2db9c2d51 通用培训文档修改 2025-05-15 11:08:06 +08:00
wangxiaoshuang 78fbae1c1f 通用培训记录的相关文件添加/编辑弹框需要增加标题
continuous-integration/drone/push Build is passing
2025-05-15 09:46:25 +08:00
wangxiaoshuang 26c58f14fa 稽查轨迹关联操作页面的标题需要区分
continuous-integration/drone/push Build is passing
2025-05-14 16:14:05 +08:00
caiyiling f8774224b3 视角信息更改
continuous-integration/drone/push Build is passing
2025-05-14 16:05:43 +08:00
caiyiling bc41f4b4c1 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-05-14 15:48:29 +08:00
caiyiling 0280dfb959 lugano更改 2025-05-14 15:48:08 +08:00
wangxiaoshuang 49aa98af9f suv融合pt图像调整
continuous-integration/drone/push Build is passing
2025-05-14 15:06:52 +08:00
wangxiaoshuang 9ce6ff25b9 1
continuous-integration/drone/push Build is passing
2025-05-14 14:23:04 +08:00
wangxiaoshuang fca8c1c9bf suv问题修复
continuous-integration/drone/push Build is passing
2025-05-14 14:12:31 +08:00
wangxiaoshuang d0ebc3e791 融合影像数存在较大差距校验
continuous-integration/drone/push Build is passing
2025-05-14 13:39:45 +08:00
caiyiling ea4f23fb16 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-05-14 13:18:17 +08:00
caiyiling 01d01b1126 视口信息更改 2025-05-14 13:17:56 +08:00
wangxiaoshuang 040d9309b9 影像质控问题配置未勾选问题提交会报错
continuous-integration/drone/push Build is passing
2025-05-14 13:05:00 +08:00
caiyiling 1d6656a5b8 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-05-14 11:25:22 +08:00
caiyiling 76e328dcca 阅片页面视角信息更改 2025-05-14 11:24:49 +08:00
wangxiaoshuang 9852d99a4a crc上传文件大小统计修改
continuous-integration/drone/push Build is passing
2025-05-13 15:40:30 +08:00
wangxiaoshuang 39f7ba7181 标记缓存修改
continuous-integration/drone/push Build is passing
2025-05-13 15:24:32 +08:00
wangxiaoshuang fb68892cd4 基线二维上的病灶被渲染到了随访的融合上
continuous-integration/drone/push Build is passing
2025-05-12 17:22:05 +08:00
caiyiling 1e6ec0df27 1
continuous-integration/drone/push Build is passing
2025-05-12 17:02:08 +08:00
caiyiling 4ff6416edb 矩形工具更改
continuous-integration/drone/push Build is passing
2025-05-12 16:45:48 +08:00
wangxiaoshuang b2645f6423 从随访切到基线再切到随访,测量工具会被禁用,当前访视无法标记
continuous-integration/drone/push Build is passing
2025-05-12 15:38:21 +08:00
wangxiaoshuang 122c76d9b2 suv部分问题解决
continuous-integration/drone/push Build is passing
2025-05-12 14:58:07 +08:00
wangxiaoshuang 2d155612e5 1
continuous-integration/drone/push Build is passing
2025-05-12 13:31:41 +08:00
wangxiaoshuang 329d6b1ff6 【NM自定义】三维MIP视口影像显示异常
continuous-integration/drone/push Build is passing
2025-05-12 13:22:36 +08:00
wangxiaoshuang 7006cf849e suv融合部分问题修复
continuous-integration/drone/push Build is passing
2025-05-12 13:13:36 +08:00
wangxiaoshuang 71f3519769 suv融合部分问题修复
continuous-integration/drone/push Build is passing
2025-05-09 17:54:14 +08:00
wangxiaoshuang bbf2dd16e6 【NM自定义】pet视口放大缩小,标记显示的位置产生了偏移
continuous-integration/drone/push Build is passing
2025-05-09 15:58:27 +08:00
wangxiaoshuang 520d499a0b 1
continuous-integration/drone/push Build is passing
2025-05-09 14:26:23 +08:00
wangxiaoshuang 00cfb92087 suv融合
continuous-integration/drone/push Build is passing
2025-05-09 14:20:24 +08:00
wangxiaoshuang 8eb0b96c8e 重传审批操作添加权限判断
continuous-integration/drone/push Build is passing
2025-05-09 10:05:22 +08:00
wangxiaoshuang 24b9120a0a 部分问题解决
continuous-integration/drone/push Build is passing
2025-05-08 14:47:26 +08:00
wangxiaoshuang 02fcc4a2c1 suv融合
continuous-integration/drone/push Build is passing
2025-05-08 10:36:57 +08:00
wangxiaoshuang f53412acbf 复制、粘贴快捷方式不禁用默认事件
continuous-integration/drone/push Build is passing
2025-05-07 13:39:30 +08:00
caiyiling 3948596014 阅片页面更改
continuous-integration/drone/push Build is passing
2025-05-06 09:13:59 +08:00
wangxiaoshuang e899c0814e 部分问题修复
continuous-integration/drone/push Build is passing
2025-04-30 14:51:13 +08:00
wangxiaoshuang d12b4adb68 部分问题修复
continuous-integration/drone/push Build is passing
2025-04-30 13:43:23 +08:00
wangxiaoshuang 3551a521c8 suv融合
continuous-integration/drone/push Build is passing
2025-04-29 17:51:54 +08:00
caiyiling e80d439377 阅片更改
continuous-integration/drone/push Build is passing
2025-04-28 18:32:16 +08:00
caiyiling f499557c01 1
continuous-integration/drone/push Build is passing
2025-04-28 17:37:34 +08:00
caiyiling ecaca550ab 自定义阅片工具更改
continuous-integration/drone/push Build is passing
2025-04-28 17:32:40 +08:00
caiyiling b7d7b93c4a 获取病灶截图更改
continuous-integration/drone/push Build is passing
2025-04-28 17:07:15 +08:00
caiyiling 7bf92c60ea 阅片完成后禁用“更多”操作
continuous-integration/drone/push Build is passing
2025-04-28 16:38:49 +08:00
caiyiling 36a08d1055 自定义阅片报告页更改
continuous-integration/drone/push Build is passing
2025-04-28 16:31:45 +08:00
caiyiling 5ebf9032a5 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-04-28 16:12:02 +08:00
caiyiling 1896c58b50 自定义阅片bug修复 2025-04-28 16:11:08 +08:00
wangxiaoshuang 9168ef3ad7 1
continuous-integration/drone/push Build is passing
2025-04-28 15:55:27 +08:00
wangxiaoshuang 4ad299e243 suv融合
continuous-integration/drone/push Build is passing
2025-04-28 15:47:07 +08:00
caiyiling 5d337b0b26 自定义阅片bug修复
continuous-integration/drone/push Build is passing
2025-04-28 14:22:35 +08:00
caiyiling ca579f8731 自定义阅片更改
continuous-integration/drone/push Build is passing
2025-04-28 10:19:37 +08:00
caiyiling 92d41dff28 1
continuous-integration/drone/push Build is passing
2025-04-27 18:00:53 +08:00
wangxiaoshuang 8d6ae3a49f suv融合
continuous-integration/drone/push Build is passing
2025-04-27 17:04:54 +08:00
caiyiling 18f23d2bba 阅片交互更改
continuous-integration/drone/push Build is passing
2025-04-25 15:27:00 +08:00
caiyiling 0a428bf954 多帧图像保存病灶更改及关键帧渲染更改
continuous-integration/drone/push Build is passing
2025-04-25 15:02:13 +08:00
caiyiling a6b5d0b196 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-04-25 10:53:09 +08:00
caiyiling 8bf6d5f515 自定义标准工具添加 2025-04-25 10:52:37 +08:00
wangxiaoshuang 74f3852ecc Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-04-25 09:39:03 +08:00
wangxiaoshuang 9408ce12e2 稽查文档删除添加二次确定 2025-04-25 09:38:08 +08:00
wangxiaoshuang 06a2361ea0 【通用培训管理】新员工培训时限默认值设为14天 2025-04-25 09:37:45 +08:00
caiyiling e3313edefd mRecist标准bug修复
continuous-integration/drone/push Build is passing
2025-04-24 16:47:08 +08:00
caiyiling 2676ff4295 阅片单元配置更改
continuous-integration/drone/push Build is passing
2025-04-24 10:34:24 +08:00
caiyiling 41b3a98594 recist1.1标准bug修复
continuous-integration/drone/push Build is passing
2025-04-23 16:59:54 +08:00
caiyiling c2aba6c3fe 自定义阅片更改
continuous-integration/drone/push Build is passing
2025-04-23 15:14:35 +08:00
caiyiling 81a5d5af17 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-04-23 14:10:26 +08:00
caiyiling 23ac15f978 布局更改 2025-04-23 14:10:08 +08:00
wangxiaoshuang 1ec4c25472 稽查文档通用培训记录导出
continuous-integration/drone/push Build is running
2025-04-23 14:10:06 +08:00
wangxiaoshuang ac8710b26b 稽查文档右键下载问题
continuous-integration/drone/push Build is passing
2025-04-23 11:44:05 +08:00
caiyiling 1130b55677 视口滚动图像翻页更改
continuous-integration/drone/push Build is passing
2025-04-23 09:21:32 +08:00
caiyiling fb57dfe90c 新版本阅片添加iRecist标准
continuous-integration/drone/push Build is failing
2025-04-22 17:44:50 +08:00
caiyiling 2784958ccb 多帧对齐更改
continuous-integration/drone/push Build is passing
2025-04-22 15:00:35 +08:00
caiyiling d6a3bcba30 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-04-22 13:43:19 +08:00
caiyiling 4ff9a7c482 多帧渲染更改 2025-04-22 13:42:58 +08:00
wangxiaoshuang 33b3818a9e 测试
continuous-integration/drone/push Build is passing
2025-04-22 10:44:48 +08:00
wangxiaoshuang 38c31af137 已发布、已下线的培训文档默认不可多选
continuous-integration/drone/push Build is passing
2025-04-21 11:28:41 +08:00
wangxiaoshuang fb671defb5 1
continuous-integration/drone/push Build is passing
2025-04-21 11:09:55 +08:00
wangxiaoshuang a25aa2482f 通用培训材料发布、下线功能修改
continuous-integration/drone/push Build is passing
2025-04-21 10:57:32 +08:00
wangxiaoshuang 4249ccd9d6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-04-21 09:47:31 +08:00
wangxiaoshuang 9a88930a04 通用培训创建默认设置为失效 2025-04-21 09:47:20 +08:00
caiyiling aea6a3f8c8 病灶对齐逻辑更改
continuous-integration/drone/push Build is passing
2025-04-18 17:02:52 +08:00
caiyiling c657bb8783 标注序列图标维护
continuous-integration/drone/push Build is passing
2025-04-18 16:46:27 +08:00
caiyiling b0ae3cbd27 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-04-18 16:01:28 +08:00
caiyiling 10487640cd 视图工具维护 2025-04-18 16:01:00 +08:00
wangxiaoshuang 83fa937537 通用培训文档新增发布功能
continuous-integration/drone/push Build is passing
2025-04-18 14:23:29 +08:00
wangxiaoshuang dd1fb94562 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-04-18 09:55:17 +08:00
wangxiaoshuang 116402f865 【账号登录日志】去除用户类型查询条件 2025-04-18 09:55:06 +08:00
caiyiling 76fe08ed23 重置视口时重置窗宽窗位
continuous-integration/drone/push Build is passing
2025-04-18 09:43:21 +08:00
caiyiling 993d97e205 测量时病灶默认状态维护
continuous-integration/drone/push Build is passing
2025-04-18 09:21:47 +08:00
caiyiling 11471525af 任务切换或者单个病灶保存时前端缓存当前状态不刷新ecrf
continuous-integration/drone/push Build is passing
2025-04-17 17:36:35 +08:00
caiyiling 600abc3ce1 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-04-17 16:02:57 +08:00
caiyiling 9609768e5e 全局阅片更改 2025-04-17 16:02:39 +08:00
wangxiaoshuang ce565e00ff Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-04-17 15:14:00 +08:00
wangxiaoshuang e49fe23396 通用培训问题修复 2025-04-17 15:13:56 +08:00
caiyiling 85463ad240 典型肝内病灶提示更改
continuous-integration/drone/push Build is passing
2025-04-17 14:59:19 +08:00
caiyiling fc228622e1 病灶保存更改
continuous-integration/drone/push Build is passing
2025-04-17 14:20:00 +08:00
caiyiling 8840ddc77a 病灶清除修复
continuous-integration/drone/push Build is passing
2025-04-17 11:40:34 +08:00
caiyiling 3b31132616 mRecist表单更改
continuous-integration/drone/push Build is passing
2025-04-17 10:22:28 +08:00
caiyiling c7df59e564 1
continuous-integration/drone/push Build is passing
2025-04-17 09:29:23 +08:00
caiyiling aeef8eaacf 清除病灶信息bug修复
continuous-integration/drone/push Build is passing
2025-04-17 09:07:46 +08:00
caiyiling b0c4cfd0bf 阅片页面矩形工具补充
continuous-integration/drone/push Build is passing
2025-04-16 17:26:48 +08:00
caiyiling 38c06595aa 病灶保存bug修复
continuous-integration/drone/push Build is passing
2025-04-16 17:10:15 +08:00
caiyiling a0c5c7d304 病灶验证更改
continuous-integration/drone/push Build is passing
2025-04-16 16:43:30 +08:00
caiyiling 2323cbdd27 病灶保存成功时关闭窗口
continuous-integration/drone/push Build is passing
2025-04-16 15:57:33 +08:00
caiyiling c2f3e02ef1 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running
2025-04-16 15:55:44 +08:00
caiyiling b069c881f2 mRecist病灶验证更改 2025-04-16 15:55:13 +08:00
wangxiaoshuang faaaf8f28f 附件数量为0时不打开预览弹框
continuous-integration/drone/push Build is passing
2025-04-15 17:39:54 +08:00
wangxiaoshuang 1e5bd46a40 附件预览筛选是否下线
continuous-integration/drone/push Build is passing
2025-04-15 17:27:54 +08:00
wangxiaoshuang 7d2af46845 通用培训问题解决
continuous-integration/drone/push Build is passing
2025-04-15 16:29:56 +08:00
wangxiaoshuang e1c41d2327 通用培训文档优化:增加附件、培训时限
continuous-integration/drone/push Build is passing
2025-04-15 15:49:22 +08:00
wangxiaoshuang d4ae366fa6 非dicom上传去除限制
continuous-integration/drone/push Build is passing
2025-04-15 11:13:52 +08:00
wangxiaoshuang 26963b0f94 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-04-15 10:01:10 +08:00
wangxiaoshuang c391e3e2e7 通用培训新增附件 2025-04-15 10:00:59 +08:00
caiyiling 23feb84e30 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-04-14 16:46:00 +08:00
caiyiling d5ae075aa8 多帧图像渲染更改 2025-04-14 16:45:40 +08:00
wangxiaoshuang b22374db9e Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-04-14 14:04:37 +08:00
wangxiaoshuang ba17d51f72 文档模板需要区分Elevate和Extensive的需要。 2025-04-14 14:04:28 +08:00
caiyiling 0f9963d939 箭头工具更改
continuous-integration/drone/push Build is passing
2025-04-14 13:41:42 +08:00
caiyiling ca0d406e45 recist标准更改
continuous-integration/drone/push Build is passing
2025-04-14 13:11:00 +08:00
caiyiling 8e0ad5ca9d mRecist标准更改
continuous-integration/drone/push Build is passing
2025-04-14 11:39:53 +08:00
wangxiaoshuang e0321bae72 影像预览问题解决
continuous-integration/drone/push Build encountered an error
2025-04-12 12:04:20 +08:00
wangxiaoshuang 10c1fb0bbc 重传审批添加默认查询条件
continuous-integration/drone/push Build is passing
2025-04-11 15:42:24 +08:00
wangxiaoshuang 3ab9b48842 工作台增加通用培训
continuous-integration/drone/push Build is passing
2025-04-11 15:17:05 +08:00
wangxiaoshuang 58a590bbb7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-04-10 17:46:47 +08:00
wangxiaoshuang b331b43b28 表格双击、授权按钮区分 2025-04-10 17:46:35 +08:00
caiyiling 162b649c3c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-04-10 17:12:06 +08:00
caiyiling fcc5398bcb 阅片更改 2025-04-10 17:11:47 +08:00
wangxiaoshuang 9df1444e3d 版本记录删除与下载问题
continuous-integration/drone/push Build is passing
2025-04-10 16:23:45 +08:00
wangxiaoshuang 0f944343b3 历史版本打开有误
continuous-integration/drone/push Build is passing
2025-04-10 15:46:14 +08:00
wangxiaoshuang adeecf0b07 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-04-10 15:41:23 +08:00
wangxiaoshuang 1965abc9fd 设置忽略异地登录 2025-04-10 15:41:13 +08:00
caiyiling 1c19301f28 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-04-10 15:26:31 +08:00
caiyiling 42711dadb5 dicom阅片更改 2025-04-10 15:26:11 +08:00
wangxiaoshuang d9d2a2169e 表格双击、展开行事件区分
continuous-integration/drone/push Build is passing
2025-04-10 14:53:16 +08:00
wangxiaoshuang 9775ef24c8 1
continuous-integration/drone/push Build is failing
2025-04-10 14:42:10 +08:00
wangxiaoshuang 9af3cd4280 稽查文档管理问题修复
continuous-integration/drone/push Build is passing
2025-04-10 14:32:21 +08:00
wangxiaoshuang ab058d6659 稽查文档排序、新增文件夹更换接口
continuous-integration/drone/push Build is passing
2025-04-10 13:27:10 +08:00
wangxiaoshuang 0d446746e6 稽查文档管理问题修复
continuous-integration/drone/push Build is passing
2025-04-10 10:29:25 +08:00
wangxiaoshuang aaa366934b 影像退回
continuous-integration/drone/push Build is passing
2025-04-10 09:56:02 +08:00
wangxiaoshuang 7614f7a327 1
continuous-integration/drone/push Build is passing
2025-04-09 15:59:36 +08:00
wangxiaoshuang 0035ac1266 邮件管理中子页的操作列中文显示为英文,英文环境下按钮位置需要调整
continuous-integration/drone/push Build is passing
2025-04-09 13:56:49 +08:00
wangxiaoshuang 298d335a03 【忘记密码】点击上一步无法退回到上一个页面
continuous-integration/drone/push Build is passing
2025-04-09 13:50:21 +08:00
wangxiaoshuang 1bddd30709 账户日志的操作类型支持多选
continuous-integration/drone/push Build is passing
2025-04-09 13:43:47 +08:00
wangxiaoshuang 1d6ebe6388 项目切换时,需要根据项目状态过滤项目
continuous-integration/drone/push Build is passing
2025-04-09 13:37:39 +08:00
wangxiaoshuang 236a565250 工作台稽查文档
continuous-integration/drone/push Build is passing
2025-04-09 10:05:30 +08:00
wangxiaoshuang 318954b360 稽查文档管理新增文件夹
continuous-integration/drone/push Build is passing
2025-04-08 17:28:40 +08:00
wangxiaoshuang 91d31b4226 稽查文档预览
continuous-integration/drone/push Build is passing
2025-04-08 16:17:54 +08:00
wangxiaoshuang 1fb76ca72d 稽查文档预览
continuous-integration/drone/push Build is passing
2025-04-08 15:09:04 +08:00
wangxiaoshuang b76d157fca 稽查文档管理
continuous-integration/drone/push Build is passing
2025-04-07 18:00:10 +08:00
wangxiaoshuang fa71af24ad 1
continuous-integration/drone/push Build is passing
2025-04-07 10:12:32 +08:00
wangxiaoshuang a9edab9227 稽查文档管理
continuous-integration/drone/push Build is failing
2025-04-03 17:35:25 +08:00
wangxiaoshuang 1e720e399d 确认收入项,修改选项后,其他文件也改了
continuous-integration/drone/push Build encountered an error
2025-04-03 11:15:54 +08:00
wangxiaoshuang 1368397da9 项目总览—>上传记录:中心编号 查询条件,查询结果不对 2025-04-03 11:15:36 +08:00
wangxiaoshuang c8c049b5d0 DICOM影像中,存在Tag最大像素值、最小像素值等,但是和实际的数据统计结果不同 2025-04-03 11:15:22 +08:00
wangxiaoshuang 31c9db368c 稽查文档管理
continuous-integration/drone/push Build is failing
2025-04-03 10:28:59 +08:00
wangxiaoshuang 866dc923c7 中心查询条件修改trialSiteId
continuous-integration/drone/push Build is failing
2025-04-03 09:46:21 +08:00
wangxiaoshuang a6b958ce4e dicom文件maxValue tag有问题 2025-04-03 09:45:50 +08:00
wangxiaoshuang 662cc93d85 稽查文档管理
continuous-integration/drone/push Build is failing
2025-04-01 17:59:24 +08:00
caiyiling e3ad114207 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-04-01 16:48:50 +08:00
caiyiling 0960b480a6 阅片页面更改 2025-04-01 16:48:04 +08:00
wangxiaoshuang 9a4eb1b210 工作台稽查文档
continuous-integration/drone/push Build is passing
2025-03-28 18:01:45 +08:00
wangxiaoshuang 0567534367 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-03-27 13:31:59 +08:00
wangxiaoshuang 481a436169 项目文档确认收入项问题解决 2025-03-27 13:31:54 +08:00
caiyiling 4188c0110f 非dicom阅片受试者内随机初始化图像逻辑更改
continuous-integration/drone/push Build is passing
2025-03-26 15:23:29 +08:00
wangxiaoshuang 01206716ab 1
continuous-integration/drone/push Build is passing
2025-03-24 16:56:27 +08:00
wangxiaoshuang 7fcbd7f983 生产环境配置修改
continuous-integration/drone/push Build encountered an error
2025-03-24 13:59:21 +08:00
wangxiaoshuang 779badb041 项目文档系统数据中英文转换
continuous-integration/drone/push Build is passing
2025-03-24 09:31:49 +08:00
caiyiling ef5e5527fd 标注更改及检查名称更改
continuous-integration/drone/push Build is passing
2025-03-21 16:29:47 +08:00
caiyiling 52ac12d6b6 阅片页面显示检查名称
continuous-integration/drone/push Build is passing
2025-03-21 15:36:23 +08:00
caiyiling 272c28a988 自定义阅片更改及非dicom阅片添加个性化配置
continuous-integration/drone/push Build is passing
2025-03-21 15:03:21 +08:00
caiyiling 6b10d07e2a 自定义阅片预览paf更改
continuous-integration/drone/push Build is passing
2025-03-21 14:03:53 +08:00
caiyiling 032e710890 阅片工具及报告页查看pdf更改
continuous-integration/drone/push Build is passing
2025-03-21 13:09:36 +08:00
caiyiling 032150904e 非dicom阅片更改
continuous-integration/drone/push Build is passing
2025-03-20 19:23:20 +08:00
wangxiaoshuang d91161a139 网速监控改为三位小数
continuous-integration/drone/push Build is passing
2025-03-19 15:53:41 +08:00
wangxiaoshuang bba2237337 文件大小改为保留3位小数
continuous-integration/drone/push Build is passing
2025-03-19 15:36:53 +08:00
wangxiaoshuang 707ca5602c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-03-18 17:59:20 +08:00
wangxiaoshuang 3b03d6ba76 项目文档搜索栏样式问题 2025-03-18 17:59:10 +08:00
caiyiling 9277d48c85 1
continuous-integration/drone/push Build is passing
2025-03-18 17:55:22 +08:00
caiyiling d753fbc2ab 非dicom阅片测量工具更改
continuous-integration/drone/push Build is passing
2025-03-18 16:53:03 +08:00
caiyiling 5678e3302b 国际化补充
continuous-integration/drone/push Build is passing
2025-03-18 15:34:12 +08:00
caiyiling c25cb097ab 1
continuous-integration/drone/push Build is passing
2025-03-18 15:28:13 +08:00
caiyiling 070db5158d Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running
2025-03-18 15:27:16 +08:00
caiyiling 121bf497bb 非dicom阅片更改 2025-03-18 15:26:51 +08:00
wangxiaoshuang e2ffd76504 阅片人筛选机构城市国家中英文显示
continuous-integration/drone/push Build is passing
2025-03-18 15:18:26 +08:00
wangxiaoshuang cfbe3b4839 项目文档培训记录培训人数校验修改
continuous-integration/drone/push Build is running
2025-03-18 15:16:31 +08:00
wangxiaoshuang 81bef8abe0 项目文档培训记录培训人数添加校验
continuous-integration/drone/push Build is passing
2025-03-18 14:15:31 +08:00
wangxiaoshuang 84b1263340 浏览器页签标题修改
continuous-integration/drone/push Build is passing
2025-03-18 13:57:07 +08:00
wangxiaoshuang 4016e71c37 项目文档阅片人问题修复
continuous-integration/drone/push Build is passing
2025-03-18 13:51:25 +08:00
wangxiaoshuang 3b0afd3913 1
continuous-integration/drone/push Build is passing
2025-03-18 13:45:13 +08:00
wangxiaoshuang 3672892451 项目文档阅片人问题修复
continuous-integration/drone/push Build is passing
2025-03-18 09:54:33 +08:00
wangxiaoshuang c46ca18a42 项目文档菜单与列表是否适用字段联动
continuous-integration/drone/push Build is passing
2025-03-17 16:38:14 +08:00
wangxiaoshuang 0e0b5c2c4c 项目文档同意入项记录上传方式修改
continuous-integration/drone/push Build is passing
2025-03-17 14:34:24 +08:00
wangxiaoshuang 5339e2df63 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-03-17 13:23:25 +08:00
wangxiaoshuang 66d5591d50 项目文档同意入项记录上传更改为弹框 2025-03-17 13:23:21 +08:00
caiyiling bfe2f1dbfb Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-03-17 11:37:30 +08:00
caiyiling 24806f57ed 自定义阅片bug修复 2025-03-17 11:37:09 +08:00
wangxiaoshuang b0ff8e7163 项目文档培训记录效果改为可输入所有字符
continuous-integration/drone/push Build is passing
2025-03-17 11:34:03 +08:00
caiyiling c9ef6cd19f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-03-17 11:24:01 +08:00
caiyiling 00cc5d5d27 非dicom阅片ecrf更改 2025-03-17 11:23:24 +08:00
wangxiaoshuang 25ddd422a3 1
continuous-integration/drone/push Build is passing
2025-03-17 09:29:56 +08:00
wangxiaoshuang a060c1745d 项目文档资质材料
continuous-integration/drone/push Build is passing
2025-03-14 17:09:38 +08:00
wangxiaoshuang 1a4bfe64f9 项目文档上传文件路径更改
continuous-integration/drone/push Build is passing
2025-03-14 13:15:44 +08:00
caiyiling 2fd6e1893b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-03-14 10:35:46 +08:00
caiyiling dc0229810d 国际化补充 2025-03-14 10:35:20 +08:00
wangxiaoshuang 08c911d4a0 项目文档申报方同意入项记录审核人角色字段更改
continuous-integration/drone/push Build is passing
2025-03-14 10:25:35 +08:00
wangxiaoshuang 08cdcffd82 项目文档申报方同意入项记录
continuous-integration/drone/push Build is passing
2025-03-13 17:10:42 +08:00
wangxiaoshuang a5f16c866d 检查名称配置更改
continuous-integration/drone/push Build is passing
2025-03-13 16:37:08 +08:00
caiyiling 3167c2bea7 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-03-13 15:01:16 +08:00
caiyiling 26cca57f75 系统标准国际化补充 2025-03-13 15:00:50 +08:00
wangxiaoshuang ff88cbd6e2 1
continuous-integration/drone/push Build is passing
2025-03-13 13:23:56 +08:00
wangxiaoshuang c4a498d953 检查被IQC标记删除:在crc查看时,该行记录增加删除线
continuous-integration/drone/push Build is passing
2025-03-13 11:14:34 +08:00
wangxiaoshuang f58e2ff82f 影像重传,确认完成时,签名中XXX未替换 2025-03-13 11:14:00 +08:00
wangxiaoshuang 1696fb6294 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-03-12 17:33:10 +08:00
wangxiaoshuang 3c81a8a678 1 2025-03-12 17:32:58 +08:00
caiyiling afcd1b82c0 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main 2025-03-12 17:22:44 +08:00
caiyiling 96864b808c 配置文件更改 2025-03-12 17:22:18 +08:00
wangxiaoshuang 5ba2abb8f5 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is failing
2025-03-12 17:11:15 +08:00
wangxiaoshuang dc0329032e 项目文档菜单添加滚动条 2025-03-12 17:11:05 +08:00
caiyiling 4097389447 图片渲染窗口滚动条优化
continuous-integration/drone/push Build is passing
2025-03-12 16:11:16 +08:00
caiyiling cf39a84370 全局和裁判阅片签名更改
continuous-integration/drone/push Build is passing
2025-03-12 15:42:56 +08:00
caiyiling aae2d6a1c5 非dicom全局和裁判阅片更改
continuous-integration/drone/push Build is passing
2025-03-12 15:18:23 +08:00
caiyiling 10f4bf7480 pdf文件替换
continuous-integration/drone/push Build is passing
2025-03-12 14:56:17 +08:00
caiyiling 57f0938efc 非dicom文件交互更改
continuous-integration/drone/push Build is passing
2025-03-12 14:50:55 +08:00
caiyiling 615580331b 后台管理页面调整
continuous-integration/drone/push Build is passing
2025-03-12 14:42:05 +08:00
caiyiling 4b4058b0da 文件渲染视口样式更改
continuous-integration/drone/push Build is passing
2025-03-12 13:16:47 +08:00
caiyiling f77820df79 临床数据查看更改
continuous-integration/drone/push Build is running
2025-03-12 13:14:31 +08:00
caiyiling 398bc21666 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-03-12 13:10:53 +08:00
caiyiling 7db8e231b6 切换pdf时取消取消全屏 2025-03-12 13:10:26 +08:00
wangxiaoshuang 581e2c3879 培训记录备注可输入值变更
continuous-integration/drone/push Build is passing
2025-03-12 11:47:27 +08:00
caiyiling ce030d23cd Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-03-12 11:35:06 +08:00
caiyiling f3c073286b 非dicom表单更改及渲染视口双击事件优化 2025-03-12 11:34:18 +08:00
wangxiaoshuang d5b342ddc6 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-03-12 11:22:32 +08:00
wangxiaoshuang d616512a72 项目文档按钮权限更改 2025-03-12 11:22:20 +08:00
219 changed files with 27346 additions and 8273 deletions
+2 -1
View File
@@ -5,7 +5,8 @@ NODE_ENV = 'development'
VUE_APP_BASE_PATH = '/' VUE_APP_BASE_PATH = '/'
VUE_APP_IS_TEST = false VUE_APP_IS_TEST = false
# onlyoffice地址
VUE_APP_ONLYOFFICE_URL = "https://onlyoffice.test.extimaging.com"
# base api # base api
VUE_APP_BASE_API = 'http://123.56.94.154:7000' VUE_APP_BASE_API = 'http://123.56.94.154:7000'
+3
View File
@@ -5,6 +5,9 @@ NODE_ENV = 'prod'
# base public path # base public path
VUE_APP_BASE_PATH = '/' VUE_APP_BASE_PATH = '/'
# onlyoffice地址
VUE_APP_ONLYOFFICE_URL = "https://office.extimaging.com"
# 是否开启登陆限制 true:是 false:否 # 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true VUE_APP_LOGIN_FOR_PERMISSION = true
+2
View File
@@ -3,6 +3,8 @@ ENV = 'production'
NODE_ENV = 'production' NODE_ENV = 'production'
# base public path # base public path
VUE_APP_BASE_PATH = '/' VUE_APP_BASE_PATH = '/'
# onlyoffice地址
VUE_APP_ONLYOFFICE_URL = "https://onlyoffice.test.extimaging.com"
VUE_APP_IS_TEST = true VUE_APP_IS_TEST = true
+3
View File
@@ -2,6 +2,9 @@
ENV = 'prop' ENV = 'prop'
NODE_ENV = 'prop' NODE_ENV = 'prop'
# base public path
VUE_APP_BASE_PATH = '/'
# 是否开启登陆限制 true:是 false:否 # 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true VUE_APP_LOGIN_FOR_PERMISSION = true
+3
View File
@@ -4,6 +4,9 @@ NODE_ENV = 'production'
# base public path # base public path
VUE_APP_BASE_PATH = '/' VUE_APP_BASE_PATH = '/'
# onlyoffice地址
VUE_APP_ONLYOFFICE_URL = "https://onlyoffice.test.extimaging.com"
# base public path # base public path
VUE_APP_BASE_PATH = '/' VUE_APP_BASE_PATH = '/'
+197
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -252,7 +252,7 @@ export default {
} }
}, },
handleSave() { handleSave() {
this.$confirm('确定修改当前页面国际化内容?') this.$confirm(this.$t("i18n:confirm:updatei18n"))
.then(() => { .then(() => {
batchAddOrUpdateFrontInternationalization(this.tableData).then( batchAddOrUpdateFrontInternationalization(this.tableData).then(
async (res) => { async (res) => {
@@ -270,7 +270,7 @@ export default {
i18n.mergeLocaleMessage('zh', zhMessages) i18n.mergeLocaleMessage('zh', zhMessages)
i18n.mergeLocaleMessage('en', enMessages) i18n.mergeLocaleMessage('en', enMessages)
this.drawer = false this.drawer = false
this.$message.success('国际化修改成功') this.$message.success(this.$t("i18n:message:updatei18nSuccessfully"))
if (this.il8nExternal) { if (this.il8nExternal) {
this.$EventBus.$emit('il8nUpdate') this.$EventBus.$emit('il8nUpdate')
} }
+109 -1
View File
@@ -212,7 +212,20 @@ export function getSystemDocumentList(param) {
data: param data: param
}) })
} }
export function publishSystemDocument(param) {
return request({
url: `/SystemDocument/publishSystemDocument`,
method: 'post',
data: param
})
}
export function outLineSystemDocument(param) {
return request({
url: `/SystemDocument/outLineSystemDocument`,
method: 'post',
data: param
})
}
export function addOrUpdateSystemDocument(param) { export function addOrUpdateSystemDocument(param) {
return request({ return request({
url: `/SystemDocument/addOrUpdateSystemDocument`, url: `/SystemDocument/addOrUpdateSystemDocument`,
@@ -220,6 +233,29 @@ export function addOrUpdateSystemDocument(param) {
data: param data: param
}) })
} }
// 新增/修改通用培训附件
export function addOrUpdateSystemDocumentAttachment(param) {
return request({
url: `/SystemDocument/addOrUpdateSystemDocumentAttachment`,
method: 'post',
data: param
})
}
// 通用培训附件列表
export function getSystemDocumentAttachmentList(param) {
return request({
url: `/SystemDocument/getSystemDocumentAttachmentList`,
method: 'post',
data: param
})
}
// 删除通用培训附件
export function deleteSystemDocumentAttachment(systemDocumentAttachmentId) {
return request({
url: `/SystemDocument/deleteSystemDocumentAttachment/${systemDocumentAttachmentId}`,
method: 'delete',
})
}
export function deleteSystemDocument(id) { export function deleteSystemDocument(id) {
return request({ return request({
@@ -1249,3 +1285,75 @@ export function getTrialDoctorList(data) {
data data
}) })
} }
// 项目文档-上传同意入项记录
export function uploadTrialFileTypeFile(data) {
return request({
url: `/TrialFileType/uploadTrialFileTypeFile`,
method: 'post',
data
})
}
// 项目文档-获取上传同意入项记录
export function getTrialFileTypeFile(data) {
return request({
url: `/TrialFileType/getTrialFileTypeFile`,
method: 'post',
data
})
}
// 项目文档-删除上传同意入项记录
export function deleteTrialTypeFile(params) {
return request({
url: `/TrialFileType/deleteTrialTypeFile`,
method: 'post',
params
})
}
// 项目文档-获取资质材料列表
export function getTrialAttachments(data) {
return request({
url: `/Attachment/getTrialAttachments`,
method: 'post',
data
})
}
// 项目文档-修改资质材料稽查状态
export function setAuthorizedViewC(data) {
return request({
url: `/Attachment/setAuthorizedView`,
method: 'post',
data
})
}
// 项目文档-上传资质材料
export function saveTrialAttachments(data) {
return request({
url: `/Attachment/saveTrialAttachments`,
method: 'post',
data
})
}
// 项目文档-资质材料(获取医生列表)
export function getTrialDoctorListC(data) {
return request({
url: `/Attachment/getTrialDoctorList`,
method: 'post',
data
})
}
// 项目文档-修改资质材料
export function updateTrialAttachments(data) {
return request({
url: `/Attachment/updateTrialAttachments`,
method: 'post',
data
})
}
// 项目文档-删除资质材料
export function deleteAttachment(data) {
return request({
url: `/Attachment/deleteAttachment`,
method: 'post',
data
})
}
+9
View File
@@ -178,6 +178,15 @@ export function pMTrainingRecordList_Export(data) {
data data
}) })
} }
// 导出系统培训记录
export function getSysDocumentConfirmList_Export(data) {
return requestDownload({
url: `/ExcelExport/getSysDocumentConfirmList_Export`,
responseType: 'blob',
method: 'post',
data
})
}
// 导出影像指控 // 导出影像指控
export function qCVisitList_Export(data) { export function qCVisitList_Export(data) {
return requestDownload({ return requestDownload({
+130 -1
View File
@@ -1035,7 +1035,27 @@ export function getQCVisitList(param) {
data: param data: param
}) })
} }
export function getImageBackList(param) {
return request({
url: `/QCList/getImageBackList`,
method: 'post',
data: param
})
}
export function getImageBackApplyUserList(params) {
return request({
url: `/QCList/getImageBackApplyUserList`,
method: 'get',
params
})
}
export function auditImageBack(params) {
return request({
url: `/QCOperation/auditImageBack`,
method: 'put',
params
})
}
export function getQCChallengeList(param) { export function getQCChallengeList(param) {
return request({ return request({
url: `/QCList/getQCChallengeList`, url: `/QCList/getQCChallengeList`,
@@ -1599,6 +1619,13 @@ export function getDocumentConfirmList(param) {
data: param data: param
}) })
} }
export function getSysDocumentConfirmList(param) {
return request({
url: `/TrialDocument/getSysDocumentConfirmList`,
method: 'post',
data: param
})
}
export function getTrialUserSelect(trialId) { export function getTrialUserSelect(trialId) {
return request({ return request({
url: `/TrialDocument/getTrialUserSelect/${trialId}`, url: `/TrialDocument/getTrialUserSelect/${trialId}`,
@@ -1613,6 +1640,13 @@ export function getTrialDocAndSystemDocType(trialId) {
}) })
} }
export function getSysDocSignUserList() {
return request({
url: `/TrialDocument/getSysDocSignUserList`,
method: 'get'
})
}
export function updateSubjectStatus(param) { export function updateSubjectStatus(param) {
return request({ return request({
url: `/Subject/updateSubjectStatus`, url: `/Subject/updateSubjectStatus`,
@@ -3308,6 +3342,13 @@ export function getReReadingApplyToBeDoneList(param) {
data: param data: param
}) })
} }
export function getPMImageBackToBeDoneList(param) {
return request({
url: `/PersonalWorkstation/getPMImageBackToBeDoneList`,
method: 'post',
data: param
})
}
export function deleteClinicalForm(param) { export function deleteClinicalForm(param) {
return request({ return request({
@@ -3995,3 +4036,91 @@ export function deleteTrialFileType(id) {
}) })
} }
// 工作台-获取稽查文档
export function getAuditDocumentData(data) {
return request({
url: `/AuditDocument/getAuditDocumentData`,
method: 'post',
data
})
}
// 工作台-新增稽查文档
export function addAuditDocument(data) {
return request({
url: `/AuditDocument/addAuditDocument`,
method: 'post',
data
})
}
// 工作台-获取当前目录层级
export function getBreadcrumbData(data) {
return request({
url: `/AuditDocument/getBreadcrumbData`,
method: 'post',
data
})
}
// 工作台-修改稽查文档
export function updateAuditDocument(data) {
return request({
url: `/AuditDocument/updateAuditDocument`,
method: 'post',
data
})
}
// 工作台-删除稽查文档
export function deleteAuditDocument(data) {
return request({
url: `/AuditDocument/deleteAuditDocument`,
method: 'post',
data
})
}
// 工作台-稽查文档获取历史版本
export function getHistoricalVersion(data) {
return request({
url: `/AuditDocument/getHistoricalVersion`,
method: 'post',
data
})
}
// 工作台-稽查文档设置当前版本
export function setCurrentVersion(data) {
return request({
url: `/AuditDocument/setCurrentVersion`,
method: 'post',
data
})
}
// 工作台-稽查文档移动
export function movieFileOrFolder(data) {
return request({
url: `/AuditDocument/movieFileOrFolder`,
method: 'post',
data
})
}
// 工作台-稽查文档复制
export function copyFileOrFolder(data) {
return request({
url: `/AuditDocument/copyFileOrFolder`,
method: 'post',
data
})
}
// 工作台-稽查文档授权
export function setIsAuthorization(data) {
return request({
url: `/AuditDocument/setIsAuthorization`,
method: 'post',
data
})
}
// 工作台-稽查文档新增文件夹
export function addFolder(data) {
return request({
url: `/AuditDocument/addFolder`,
method: 'post',
data
})
}
+2 -2
View File
@@ -346,9 +346,9 @@ export function getReReadingOrBackInfluenceTaskList(taskId, isReReading, applyId
}) })
} }
export function PMSetTaskBack(trialId, taskId) { export function PMSetTaskBack(trialId, taskId, pmBackReason) {
return request({ return request({
url: `/VisitTask/PMSetTaskBack/${trialId}/${taskId}`, url: `/VisitTask/PMSetTaskBack/${trialId}/${taskId}/${pmBackReason}`,
method: 'put' method: 'put'
}) })
} }
+8
View File
@@ -110,4 +110,12 @@ export function addOrUpdateTrialBodyPart(data) {
data data
}) })
} }
// 修改检查名称列表
export function updateTrialStudyNameList(data) {
return request({
url: `/TrialConfig/updateTrialStudyNameList`,
method: 'post',
data
})
}
+8
View File
@@ -287,4 +287,12 @@ export function forwardSVDicomImage(param) {
data: param data: param
}) })
} }
// crc、iqc申请影像退回
export function requestImageBack(params) {
return request({
url: `/QCOperation/requestImageBack`,
method: 'put',
params
})
}
+8
View File
@@ -209,3 +209,11 @@ export function loginSelectUserRole(params) {
params, params,
}) })
} }
// 忽略异地登录
export function setIsIgnoreUncommonly(data) {
return request({
url: `/User/setIsIgnoreUncommonly`,
method: 'post',
data,
})
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

+1 -2
View File
@@ -1,7 +1,7 @@
<!-- 搜索表单 --> <!-- 搜索表单 -->
<template> <template>
<div class="base-search-form"> <div class="base-search-form">
<el-form :size="size" :inline="true" :label-width="labelWidth"> <el-form :inline="true" :label-width="labelWidth">
<el-form-item <el-form-item
v-for="item in searchForm" v-for="item in searchForm"
:key="item.prop" :key="item.prop"
@@ -152,7 +152,6 @@
<el-button <el-button
v-else v-else
:type="item.type" :type="item.type"
:size="item.size || size"
:icon="item.icon || ''" :icon="item.icon || ''"
@click="handleClick(item.emitKey)" @click="handleClick(item.emitKey)"
>{{ item.label }}</el-button >{{ item.label }}</el-button
-1
View File
@@ -62,7 +62,6 @@
</a> --> </a> -->
<span v-for="(operate, i) in column.operates" :key="i"> <span v-for="(operate, i) in column.operates" :key="i">
<el-button <el-button
:size="operate.size || 'mini'"
:type="operate.type || 'primary'" :type="operate.type || 'primary'"
v-if=" v-if="
(operate.show && scope.row[operate.show]) || (operate.show && scope.row[operate.show]) ||
+28 -15
View File
@@ -1,28 +1,28 @@
<template> <template>
<div class="preview-wrapper"> <div class="preview-wrapper">
<iframe <iframe v-if="fileType.indexOf('jpg') !== -1 || fileType.indexOf('png') !== -1" frameborder="0" :src="filePath"
v-if="fileType.indexOf('jpg') !== -1 || fileType.indexOf('png') !== -1" width="100%" height="100%" />
frameborder="0"
:src="filePath"
width="100%"
height="100%"
/>
<!-- <embed v-else-if="fileType.indexOf('pdf') !== -1" :src="filePath+'#toolbar=0'" style="width: 100%; height: 100%"> --> <!-- <embed v-else-if="fileType.indexOf('pdf') !== -1" :src="filePath+'#toolbar=0'" style="width: 100%; height: 100%"> -->
<!-- <iframe v-else-if="fileType.indexOf('pdf') !== -1" :src="filePath+'#toolbar=0'" width="100%" height="100%" frameborder="0" /> --> <!-- <iframe v-else-if="fileType.indexOf('pdf') !== -1" :src="filePath+'#toolbar=0'" width="100%" height="100%" frameborder="0" /> -->
<iframe v-else-if="fileType.indexOf('pdf') !== -1" :src="`/static/pdfjs/web/viewer.html?file=${OSSclientConfig.basePath}${filePath}?userName=${currentUser}&COMPANY=${COMPANY}`" width="100%" height="100%" frameborder="0" crossorigin="anonymous" /> <iframe v-else-if="fileType.indexOf('pdf') !== -1"
:src="`/static/pdfjs/web/viewer.html?file=${OSSclientConfig.basePath}${filePath}?userName=${currentUser}&COMPANY=${COMPANY}`"
width="100%" height="100%" frameborder="0" crossorigin="anonymous" />
<!-- <pdf--> <!-- <pdf-->
<!-- v-else-if="fileType.indexOf('pdf') !== -1"--> <!-- v-else-if="fileType.indexOf('pdf') !== -1"-->
<!-- :src="`/static/pdfjs/web/viewer.html?file=${filePath}`">--> <!-- :src="`/static/pdfjs/web/viewer.html?file=${filePath}`">-->
<!-- </pdf>--> <!-- </pdf>-->
<div v-else> <iframe v-else
:src="`/static/onlyOffice/viewer.html?url=${OSSclientConfig.basePath}${filePath}?onlyOffice_url=${onlyOffice_url}&type=${fileType}&title=${title}&documentType=${documentType}&userName=${currentUser}`"
width="100%" height="100%" frameborder="0" crossorigin="anonymous" />
<!-- <div v-else>
{{ $t('common:message:downloadFile') }} {{ $t('common:message:downloadFile') }}
<el-link type="primary" @click="downLoadFile">{{ $t('common:button:download') }}</el-link> <el-link type="primary" @click="downLoadFile">{{ $t('common:button:download') }}</el-link>
</div> </div> -->
</div> </div>
</template> </template>
<script> <script>
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import DOCUMENTTYPE from "@/utils/onlyOffice_type.js"
export default { export default {
name: 'PreviewFile', name: 'PreviewFile',
computed: { computed: {
@@ -36,12 +36,23 @@ export default {
fileType: { fileType: {
type: String, type: String,
required: true required: true
} },
title: {
type: String,
default: ''
},
}, },
data() { data() {
return { return {
currentUser: zzSessionStorage.getItem('userName'), currentUser: zzSessionStorage.getItem('userName'),
COMPANY:process.env.VUE_APP_COMPANY_NAME COMPANY: process.env.VUE_APP_COMPANY_NAME,
onlyOffice_url: process.env.VUE_APP_ONLYOFFICE_URL
}
},
computed: {
documentType() {
console.log(DOCUMENTTYPE[`.${this.fileType}`], 'documentType')
return DOCUMENTTYPE[`.${this.fileType}`]
} }
}, },
mounted() { mounted() {
@@ -62,14 +73,16 @@ export default {
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.preview-wrapper{ .preview-wrapper {
height: 100%; height: 100%;
width:100%; width: 100%;
padding: 10px; padding: 10px;
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 7px; width: 7px;
height: 7px; height: 7px;
} }
::-webkit-scrollbar-thumb { ::-webkit-scrollbar-thumb {
border-radius: 10px; border-radius: 10px;
background: #d0d0d0; background: #d0d0d0;
+23
View File
@@ -0,0 +1,23 @@
import Vue from "vue";
import OnlyOffice from "./index.vue";
const PreviewConstructor = Vue.extend(OnlyOffice);
const onlyOffice = options => {
const { path, type, title } = options;
if (!path) throw `path is requred.but ${path}`
const id = `OnlyOffice_${new Date().getTime()}`;
const instance = new PreviewConstructor();
instance.id = id;
instance.vm = instance.$mount();
if (instance.vm.visible) return;
document.body.appendChild(instance.vm.$el);
instance.vm.open(path, type, title);
instance.vm.$on("closed", () => {
instance.vm.docEditor = null
document.body.removeChild(instance.vm.$el);
instance.vm.$destroy();
});
return instance.vm;
}
export default onlyOffice;
@@ -0,0 +1,7 @@
import OnlyOffice from "./index.vue";
import onlyOffice from "./fun";
export default Vue => {
Vue.component(OnlyOffice.name, OnlyOffice);
Vue.prototype.$onlyOffice = onlyOffice;
};
@@ -0,0 +1,46 @@
<template>
<el-dialog v-if="visible" :visible.sync="visible" :title="title" :fullscreen="true" append-to-body
custom-class="base-dialog-wrapper" @close="handleClose">
<div class="base-modal-body" style="border: 2px solid #ccc; padding: 10px">
<iframe v-if="visible"
:src="`/static/onlyOffice/viewer.html?url=${OSSclientConfig.basePath}${path}?onlyOffice_url=${onlyOffice_url}&type=${type}&title=${title}&documentType=${documentType}&userName=${currentUser}`"
width="100%" height="99%" frameborder="0" crossorigin="anonymous" />
</div>
</el-dialog>
</template>
<script>
import DOCUMENTTYPE from "@/utils/onlyOffice_type.js"
export default {
name: "OnlyOffice",
data() {
return {
visible: false,
path: null,
type: null,
title: null,
documentType: null,
currentUser: zzSessionStorage.getItem('userName'),
onlyOffice_url: process.env.VUE_APP_ONLYOFFICE_URL
};
},
methods: {
open(path, type, title) {
this.path = path;
this.type = type.toLowerCase();
this.documentType = DOCUMENTTYPE[`.${this.type}`]
this.title = title;
this.visible = true;
},
handleClose() {
this.$emit("closed");
},
},
};
</script>
<style lang="scss" scoped>
#placeholder {
width: 100%;
height: 100%;
}
</style>
@@ -316,9 +316,9 @@
scope.row.dicomInfo.fileCount scope.row.dicomInfo.fileCount
}} }}
({{ ({{
(scope.row.dicomInfo.uploadFileSize / 1024 / 1024).toFixed(2) (scope.row.dicomInfo.uploadFileSize / 1024 / 1024).toFixed(3)
}}MB/{{ }}MB/{{
(scope.row.dicomInfo.fileSize / 1024 / 1024).toFixed(2) (scope.row.dicomInfo.fileSize / 1024 / 1024).toFixed(3)
}}MB) }}MB)
</span> </span>
</template> </template>
@@ -8,65 +8,29 @@
</div> </div>
</div> </div>
<!--检查列表--> <!--检查列表-->
<el-table <el-table :data="list" style="width: 100%" v-adaptive="{ bottomOffset: 60 }" :loading="loading"
:data="list" @sort-change="handleSortByColumn" :default-sort="{ prop: 'TaskBlindName', order: 'descending' }">
style="width: 100%"
v-adaptive="{ bottomOffset: 60 }"
:loading="loading"
@sort-change="handleSortByColumn"
:default-sort="{ prop: 'TaskBlindName', order: 'descending' }"
>
<!--受试者--> <!--受试者-->
<el-table-column <el-table-column prop="SubjectCode" :label="$t('upload:nonedicom:table:subject')" />
prop="SubjectCode"
:label="$t('upload:nonedicom:table:subject')"
/>
<!--任务名称--> <!--任务名称-->
<el-table-column <el-table-column prop="TaskBlindName" :label="$t('upload:nonedicom:table:taskName')" sortable="custom" />
prop="TaskBlindName"
:label="$t('upload:nonedicom:table:taskName')"
sortable="custom"
/>
<!--检查类型--> <!--检查类型-->
<el-table-column <el-table-column prop="Modality" :label="$t('upload:nonedicom:table:molityType')" sortable="custom">
prop="Modality"
:label="$t('upload:nonedicom:table:molityType')"
sortable="custom"
>
</el-table-column> </el-table-column>
<!--检查部位--> <!--检查部位-->
<el-table-column <el-table-column prop="BodyPart" :label="$t('upload:nonedicom:table:bodyPart')" sortable="custom" />
prop="BodyPart"
:label="$t('upload:nonedicom:table:bodyPart')"
sortable="custom"
/>
<!--原文件数--> <!--原文件数-->
<el-table-column <el-table-column prop="FileCount" :label="$t('upload:nonedicom:table:fileCount')">
prop="FileCount"
:label="$t('upload:nonedicom:table:fileCount')"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-popover <el-popover v-if="scope.row.FileCount" trigger="click" placement="bottom">
v-if="scope.row.FileCount"
trigger="click"
placement="bottom"
>
<el-table :data="scope.row.FileList" height="300" size="small"> <el-table :data="scope.row.FileList" height="300" size="small">
<!-- 文件名称 --> <!-- 文件名称 -->
<el-table-column <el-table-column prop="FileName" :label="$t('trials:audit:table:nonDicomsFileName')" width="200" />
prop="FileName" <el-table-column prop="FileSize" :label="$t('trials:audit:table:nonDicomsFileSize')" width="100">
:label="$t('trials:audit:table:nonDicomsFileName')"
width="200"
/>
<el-table-column
prop="FileSize"
:label="$t('trials:audit:table:nonDicomsFileSize')"
width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ <span>{{
scope.row.FileSize && scope.row.FileSize > 0 scope.row.FileSize && scope.row.FileSize > 0
? `${(scope.row.FileSize / 1024 / 1024).toFixed(2)}MB` ? `${(scope.row.FileSize / 1024 / 1024).toFixed(3)}MB`
: '' : ''
}}</span> }}</span>
</template> </template>
@@ -74,27 +38,13 @@
<el-table-column :label="$t('common:action:action')" width="120"> <el-table-column :label="$t('common:action:action')" width="120">
<template slot-scope="files"> <template slot-scope="files">
<!-- 预览 --> <!-- 预览 -->
<viewer <viewer :ref="files.row.Path" style="margin: 0 10px"
:ref="files.row.Path" :images="[`${OSSclientConfig.basePath}${files.row.Path}`]">
style="margin: 0 10px" <el-button circle icon="el-icon-view" :title="$t('upload:nonedicom:button:preview')" :disabled="files.row.FileType &&
:images="[`${OSSclientConfig.basePath}${files.row.Path}`]" files.row.FileType.indexOf('zip') >= 0
> " @click.native.prevent="previewFile(files.row)" />
<el-button <img v-show="false" crossorigin="anonymous" :src="`${OSSclientConfig.basePath}${files.row.Path}`"
circle alt="Image" />
icon="el-icon-view"
:title="$t('upload:nonedicom:button:preview')"
:disabled="
files.row.FileType &&
files.row.FileType.indexOf('zip') >= 0
"
@click.native.prevent="previewFile(files.row)"
/>
<img
v-show="false"
crossorigin="anonymous"
:src="`${OSSclientConfig.basePath}${files.row.Path}`"
alt="Image"
/>
</viewer> </viewer>
</template> </template>
</el-table-column> </el-table-column>
@@ -109,36 +59,17 @@
</template> </template>
</el-table-column> </el-table-column>
<!--后处理文件数--> <!--后处理文件数-->
<el-table-column <el-table-column prop="UploadedFileCount" :label="$t('upload:nonedicom:table:uploadFileCount')">
prop="UploadedFileCount"
:label="$t('upload:nonedicom:table:uploadFileCount')"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-popover <el-popover v-if="scope.row.UploadedFileCount" trigger="click" placement="bottom">
v-if="scope.row.UploadedFileCount" <el-table :data="scope.row.UploadedFileList" height="300" size="small">
trigger="click"
placement="bottom"
>
<el-table
:data="scope.row.UploadedFileList"
height="300"
size="small"
>
<!-- 文件名称 --> <!-- 文件名称 -->
<el-table-column <el-table-column prop="FileName" :label="$t('trials:audit:table:nonDicomsFileName')" width="200" />
prop="FileName" <el-table-column prop="FileSize" :label="$t('trials:audit:table:nonDicomsFileSize')" width="100">
:label="$t('trials:audit:table:nonDicomsFileName')"
width="200"
/>
<el-table-column
prop="FileSize"
:label="$t('trials:audit:table:nonDicomsFileSize')"
width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ <span>{{
scope.row.FileSize && scope.row.FileSize > 0 scope.row.FileSize && scope.row.FileSize > 0
? `${(scope.row.FileSize / 1024 / 1024).toFixed(2)}MB` ? `${(scope.row.FileSize / 1024 / 1024).toFixed(3)}MB`
: '' : ''
}}</span> }}</span>
</template> </template>
@@ -146,27 +77,13 @@
<el-table-column :label="$t('common:action:action')" width="120"> <el-table-column :label="$t('common:action:action')" width="120">
<template slot-scope="files"> <template slot-scope="files">
<!-- 预览 --> <!-- 预览 -->
<viewer <viewer :ref="files.row.Path" style="margin: 0 10px"
:ref="files.row.Path" :images="[`${OSSclientConfig.basePath}${files.row.Path}`]">
style="margin: 0 10px" <el-button circle icon="el-icon-view" :title="$t('upload:nonedicom:button:preview')" :disabled="files.row.FileType &&
:images="[`${OSSclientConfig.basePath}${files.row.Path}`]" files.row.FileType.indexOf('zip') >= 0
> " @click.native.prevent="previewFile(files.row)" />
<el-button <img v-show="false" crossorigin="anonymous" :src="`${OSSclientConfig.basePath}${files.row.Path}`"
circle alt="Image" />
icon="el-icon-view"
:title="$t('upload:nonedicom:button:preview')"
:disabled="
files.row.FileType &&
files.row.FileType.indexOf('zip') >= 0
"
@click.native.prevent="previewFile(files.row)"
/>
<img
v-show="false"
crossorigin="anonymous"
:src="`${OSSclientConfig.basePath}${files.row.Path}`"
alt="Image"
/>
</viewer> </viewer>
</template> </template>
</el-table-column> </el-table-column>
@@ -180,75 +97,34 @@
<span v-else>{{ scope.row.UploadedFileCount }}</span> <span v-else>{{ scope.row.UploadedFileCount }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column :label="$t('common:action:action')" fixed="right" width="180">
:label="$t('common:action:action')"
fixed="right"
width="180"
>
<template slot-scope="scope"> <template slot-scope="scope">
<!--预览---> <!--预览--->
<el-button <el-button circle :disabled="scope.row.UploadedFileCount <= 0" icon="el-icon-view"
circle :title="$t('upload:nonedicom:button:preview')" @click.stop="handlePreviewNoneDicomFiles(scope.row)" />
:disabled="scope.row.UploadedFileCount <= 0"
icon="el-icon-view"
:title="$t('upload:nonedicom:button:preview')"
@click.stop="handlePreviewNoneDicomFiles(scope.row)"
/>
<!--上传---> <!--上传--->
<el-button <el-button circle icon="el-icon-upload2" :title="$t('upload:nonedicom:button:upload')"
circle @click.native.prevent="handleUpload(scope.row)" />
icon="el-icon-upload2"
:title="$t('upload:nonedicom:button:upload')"
@click.native.prevent="handleUpload(scope.row)"
/>
<!--删除---> <!--删除--->
<el-button <el-button :disabled="scope.row.UploadedFileCount <= 0 ||
:disabled=" scope.row.ReadingTaskState === 2
scope.row.UploadedFileCount <= 0 || " circle icon="el-icon-delete" :title="$t('upload:nonedicom:button:delete')"
scope.row.ReadingTaskState === 2 @click.stop="remove(scope.row)" />
"
circle
icon="el-icon-delete"
:title="$t('upload:nonedicom:button:delete')"
@click.stop="remove(scope.row)"
/>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 预览单个图像 --> <!-- 预览单个图像 -->
<el-dialog <el-dialog v-if="imgObj.visible" :visible.sync="imgObj.visible" :title="$t('upload:nonedicom:dialogTitle:preview')"
v-if="imgObj.visible" append-to-body width="565px">
:visible.sync="imgObj.visible" <div v-loading="imgObj.loading" class="base-modal-body" style="border: 2px solid #ccc; padding: 10px">
:title="$t('upload:nonedicom:dialogTitle:preview')" <el-image :src="`${OSSclientConfig.basePath}${imgObj.url}`" crossorigin="anonymous" fit="fit"
append-to-body style="height: 500px; width: 500px" @error="imgObj.loading = false" @load="imgObj.loading = false" />
width="565px"
>
<div
v-loading="imgObj.loading"
class="base-modal-body"
style="border: 2px solid #ccc; padding: 10px"
>
<el-image
:src="`${OSSclientConfig.basePath}${imgObj.url}`"
crossorigin="anonymous"
fit="fit"
style="height: 500px; width: 500px"
@error="imgObj.loading = false"
@load="imgObj.loading = false"
/>
</div> </div>
</el-dialog> </el-dialog>
<!-- 上传非dicom文件 --> <!-- 上传非dicom文件 -->
<el-dialog <el-dialog v-if="uploadVisible" :visible.sync="uploadVisible" :close-on-click-modal="false"
v-if="uploadVisible" :title="$t('trials:uploadNonDicoms:dialogTitle:upload')" width="800px" append-to-body
:visible.sync="uploadVisible" custom-class="base-dialog-wrapper" @close="resetFileDiaolg">
:close-on-click-modal="false"
:title="$t('trials:uploadNonDicoms:dialogTitle:upload')"
width="800px"
append-to-body
custom-class="base-dialog-wrapper"
@close="resetFileDiaolg"
>
<!-- 多文件上传 --> <!-- 多文件上传 -->
<form id="inputForm" ref="uploadForm"> <form id="inputForm" ref="uploadForm">
<el-divider content-position="left">{{ <el-divider content-position="left">{{
@@ -256,33 +132,15 @@
}}</el-divider> }}</el-divider>
<div class="form-group"> <div class="form-group">
<div class="upload" style="margin-right: 10px"> <div class="upload" style="margin-right: 10px">
<input <input multiple="multiple" webkitdirectory="" directory accept="*/*" type="file" name="uploadFolder"
multiple="multiple" class="select-file" title="" @change="beginScanFiles($event)" v-if="!btnLoading" />
webkitdirectory=""
directory
accept="*/*"
type="file"
name="uploadFolder"
class="select-file"
title=""
@change="beginScanFiles($event)"
v-if="!btnLoading"
/>
<div class="btn-select"> <div class="btn-select">
{{ $t('trials:uploadNonDicoms:button:selectFolder') }} {{ $t('trials:uploadNonDicoms:button:selectFolder') }}
</div> </div>
</div> </div>
<div class="upload"> <div class="upload">
<input <input class="select-file" multiple="" :accept="faccept.join(',')" type="file" name="uploadFile" title=""
class="select-file" @change="beginScanFiles($event)" v-if="!btnLoading" />
multiple=""
:accept="faccept.join(',')"
type="file"
name="uploadFile"
title=""
@change="beginScanFiles($event)"
v-if="!btnLoading"
/>
<div class="btn-select"> <div class="btn-select">
{{ $t('trials:uploadNonDicoms:button:select') }} {{ $t('trials:uploadNonDicoms:button:select') }}
</div> </div>
@@ -293,82 +151,46 @@
</div> </div>
</form> </form>
<!-- 文件列表 --> <!-- 文件列表 -->
<el-table <el-table ref="filesTable" :data="fileList" class="dicomFiles-table" height="300"
ref="filesTable" @selection-change="handleSelectionChange">
:data="fileList" <el-table-column type="selection" width="55" :selectable="(row, index) => row.status !== 2 && !btnLoading" />
class="dicomFiles-table"
height="300"
@selection-change="handleSelectionChange"
>
<el-table-column
type="selection"
width="55"
:selectable="(row, index) => row.status !== 2 && !btnLoading"
/>
<el-table-column type="index" width="50" /> <el-table-column type="index" width="50" />
<!-- 文件名称 --> <!-- 文件名称 -->
<el-table-column <el-table-column prop="name" :label="$t('trials:uploadNonDicoms:table:fileName')" min-width="100" />
prop="name"
:label="$t('trials:uploadNonDicoms:table:fileName')"
min-width="100"
/>
<!-- 文件大小 --> <!-- 文件大小 -->
<el-table-column <el-table-column prop="size" :label="$t('trials:uploadNonDicoms:table:fileSize')">
prop="size"
:label="$t('trials:uploadNonDicoms:table:fileSize')"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ <span>{{
scope.row.size && scope.row.size > 0 scope.row.size && scope.row.size > 0
? `${(scope.row.size / 1024 / 1024).toFixed(2)}MB` ? `${(scope.row.size / 1024 / 1024).toFixed(3)}MB`
: '' : '0MB'
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- 文件类型 --> <!-- 文件类型 -->
<el-table-column <el-table-column prop="type" :label="$t('trials:uploadNonDicoms:table:fileType')" />
prop="type"
:label="$t('trials:uploadNonDicoms:table:fileType')"
/>
<!-- 上传状态 --> <!-- 上传状态 -->
<el-table-column <el-table-column prop="status" :label="$t('trials:uploadNonDicoms:table:uploadStatus')" min-width="100">
prop="status"
:label="$t('trials:uploadNonDicoms:table:uploadStatus')"
min-width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag <el-tag :type="['warning', 'info', 'success', 'danger'][scope.row.status]"
:type="['warning', 'info', 'success', 'danger'][scope.row.status]" v-if="scope.row.status || scope.row.status === 0">{{ $fd('NoneDicomUploadStatus', scope.row.status) }}
v-if="scope.row.status || scope.row.status === 0"
>{{ $fd('NoneDicomUploadStatus', scope.row.status) }}
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column :label="$t('trials:uploadNonDicoms:table:failedFileCount')" min-width="150"
:label="$t('trials:uploadNonDicoms:table:failedFileCount')" show-overflow-tooltip>
min-width="150"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-progress <el-progress color="#409eff" :percentage="scope.row.size && scope.row.size > 0 ? ((scope.row.uploadFileSize * 100) / scope.row.size).toFixed(2) *
color="#409eff" 1
:percentage=" : ((scope.row.uploadFileSize * 100) / 1).toFixed(2) *
((scope.row.uploadFileSize * 100) / scope.row.size).toFixed(2) * 1
1 " />
"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('common:action:action')"> <el-table-column :label="$t('common:action:action')">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button size="mini" icon="el-icon-delete" circle :disabled="btnLoading"
size="mini" :title="$t('trials:crcUpload:action:delete')" @click="handleRemoveFile(scope.row)" />
icon="el-icon-delete"
circle
:disabled="btnLoading"
:title="$t('trials:crcUpload:action:delete')"
@click="handleRemoveFile(scope.row)"
/>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -376,13 +198,8 @@
<span style="margin-right: 10px">{{ <span style="margin-right: 10px">{{
$store.state.trials.uploadTip $store.state.trials.uploadTip
}}</span> }}</span>
<el-button <el-button size="small" type="primary" :disabled="selectArr.length == 0" :loading="btnLoading"
size="small" @click="beginUpload">
type="primary"
:disabled="selectArr.length == 0"
:loading="btnLoading"
@click="beginUpload"
>
{{ $t('trials:uploadNonDicoms:action:upload') }} {{ $t('trials:uploadNonDicoms:action:upload') }}
</el-button> </el-button>
</div> </div>
@@ -588,7 +405,7 @@ export default {
) )
} }
}) })
.catch(() => {}) .catch(() => { })
}, },
resetUploadForm() { resetUploadForm() {
this.$nextTick(() => { this.$nextTick(() => {
@@ -714,11 +531,10 @@ export default {
if (!this.uploadVisible) return if (!this.uploadVisible) return
let file = this.fileList.filter((item) => item.id === arr[index].id)[0] let file = this.fileList.filter((item) => item.id === arr[index].id)[0]
file.status = 1 file.status = 1
let path = `/${this.$route.query.trialId}/TaskImage/${ let path = `/${this.$route.query.trialId}/TaskImage/${this.currentRow.SubjectId
this.currentRow.SubjectId }/${this.currentRow.VisitTaskId}/${this.$guid()}${file.name
}/${this.currentRow.VisitTaskId}/${this.$guid()}${file.name .substring(file.name.lastIndexOf('.'))
.substring(file.name.lastIndexOf('.')) .toLocaleLowerCase()}`
.toLocaleLowerCase()}`
file.curPath = path file.curPath = path
const fileData = await this.fileToBlob(file.file) const fileData = await this.fileToBlob(file.file)
let res = await this.fileToOss(path, fileData, file) let res = await this.fileToOss(path, fileData, file)
@@ -772,7 +588,7 @@ export default {
(percentage, checkpoint, lastPer) => { (percentage, checkpoint, lastPer) => {
item.uploadFileSize += checkpoint.size * (percentage - lastPer) item.uploadFileSize += checkpoint.size * (percentage - lastPer)
if (item.uploadFileSize > file.fileSize) { if (item.uploadFileSize > file.fileSize) {
item.uploadFileSize = file.fileSize item.uploadFileSize = file.fileSize > 0 ? file.fileSize : 1
} }
} }
) )
@@ -869,6 +685,7 @@ export default {
.top { .top {
margin: 10px 0; margin: 10px 0;
} }
.upload { .upload {
display: inline-block; display: inline-block;
height: 30px; height: 30px;
@@ -883,6 +700,7 @@ export default {
background: #428bca; background: #428bca;
border-color: #428bca; border-color: #428bca;
color: #fff; color: #fff;
.select-file { .select-file {
height: 30px; height: 30px;
width: 90px; width: 90px;
@@ -893,6 +711,7 @@ export default {
opacity: 0; opacity: 0;
font-size: 0; font-size: 0;
} }
.btn-select { .btn-select {
//给显示在页面上的按钮写样式 //给显示在页面上的按钮写样式
width: 90px; width: 90px;
@@ -908,10 +727,12 @@ export default {
pointer-events: none; //pointer-events:none用来控制该标签的点击穿透事件 pointer-events: none; //pointer-events:none用来控制该标签的点击穿透事件
} }
} }
.tip { .tip {
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;
margin-top: 5px; margin-top: 5px;
i { i {
margin: 3px 5px 0 0; margin: 3px 5px 0 0;
} }
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 26 KiB

+7
View File
@@ -54,6 +54,8 @@ import upload from '@/components/element-ui/upload'
Vue.use(upload) Vue.use(upload)
import Preview from '@/components/Preview/index' import Preview from '@/components/Preview/index'
Vue.use(Preview) Vue.use(Preview)
import Onlyoffice from '@/components/Preview_onlyoffice/index'
Vue.use(Onlyoffice)
import MFA from '@/components/MFA/index' import MFA from '@/components/MFA/index'
Vue.use(MFA) Vue.use(MFA)
import FB from '@/components/feedBack/index' import FB from '@/components/feedBack/index'
@@ -308,6 +310,11 @@ async function VueInit() {
text = text.replace(test, item.TrialName) text = text.replace(test, item.TrialName)
}) })
} }
let CompanyInfo = JSON.parse(localStorage.getItem('CompanyInfo'))
if(CompanyInfo&&CompanyInfo.SystemShortName){
let test = new RegExp('IRC', 'ig')
text = text.replace(test, CompanyInfo.SystemShortName)
}
// return i18n.t(key) // return i18n.t(key)
return text; return text;
} }
+1 -1
View File
@@ -1,7 +1,7 @@
// eslint-disable-next-line no-undef // eslint-disable-next-line no-undef
module.exports = { module.exports = {
title: 'IRCIS', title: 'IRC Imaging System',
/** /**
* @type {boolean} true | false * @type {boolean} true | false
+1
View File
@@ -862,6 +862,7 @@ const actions = {
const data = {} const data = {}
data.StudyId = study.StudyId data.StudyId = study.StudyId
data.StudyCode = study.StudyCode data.StudyCode = study.StudyCode
data.StudyName = study.StudyName
data.Modalities = study.Modalities data.Modalities = study.Modalities
data.SeriesCount = study.SeriesCount data.SeriesCount = study.SeriesCount
data.InstanceCount = study.InstanceCount data.InstanceCount = study.InstanceCount
+6
View File
@@ -68,6 +68,12 @@ body .el-table th.gutter {
} }
} }
.text-ellipsis {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.el-loading-mask { .el-loading-mask {
background-color: rgba(255, 255, 255, 0.5); background-color: rgba(255, 255, 255, 0.5);
} }
+1 -1
View File
@@ -1,6 +1,6 @@
import defaultSettings from '@/settings' import defaultSettings from '@/settings'
const title = defaultSettings.title || 'IRCIS' const title = defaultSettings.title || 'IRC Imaging System'
export default function getPageTitle(pageTitle) { export default function getPageTitle(pageTitle) {
if (pageTitle) { if (pageTitle) {
+149
View File
@@ -39,6 +39,108 @@ function getNumberValues(dataSet, tag, minimumLength) {
return values; return values;
} }
function getLutDescriptor(dataSet, tag) {
if (!dataSet.elements[tag] || dataSet.elements[tag].length !== 6) {
return;
}
return [
dataSet.uint16(tag, 0),
dataSet.uint16(tag, 1),
dataSet.uint16(tag, 2),
];
}
function getLutData(lutDataSet, tag, lutDescriptor) {
const lut = [];
const lutData = lutDataSet.elements[tag];
for (let i = 0; i < lutDescriptor[0]; i++) {
// Output range is always unsigned
if (lutDescriptor[2] === 16) {
lut[i] = lutDataSet.uint16(tag, i);
} else {
lut[i] = lutDataSet.byteArray[i + lutData.dataOffset];
}
}
return lut;
}
function populateSmallestLargestPixelValues(dataSet, imagePixelModule) {
const pixelRepresentation = dataSet.uint16('x00280103');
if (pixelRepresentation === 0) {
imagePixelModule.smallestPixelValue = dataSet.uint16('x00280106');
imagePixelModule.largestPixelValue = dataSet.uint16('x00280107');
} else {
imagePixelModule.smallestPixelValue = dataSet.int16('x00280106');
imagePixelModule.largestPixelValue = dataSet.int16('x00280107');
}
imagePixelModule.largestPixelValue = imagePixelModule.largestPixelValue === 0 ? undefined : imagePixelModule.largestPixelValue;
}
function populatePaletteColorLut(dataSet, imagePixelModule) {
imagePixelModule.redPaletteColorLookupTableDescriptor = getLutDescriptor(
dataSet,
'x00281101'
);
imagePixelModule.greenPaletteColorLookupTableDescriptor = getLutDescriptor(
dataSet,
'x00281102'
);
imagePixelModule.bluePaletteColorLookupTableDescriptor = getLutDescriptor(
dataSet,
'x00281103'
);
// The first Palette Color Lookup Table Descriptor value is the number of entries in the lookup table.
// When the number of table entries is equal to 2ˆ16 then this value shall be 0.
// See http://dicom.nema.org/MEDICAL/DICOM/current/output/chtml/part03/sect_C.7.6.3.html#sect_C.7.6.3.1.5
if (imagePixelModule.redPaletteColorLookupTableDescriptor[0] === 0) {
imagePixelModule.redPaletteColorLookupTableDescriptor[0] = 65536;
imagePixelModule.greenPaletteColorLookupTableDescriptor[0] = 65536;
imagePixelModule.bluePaletteColorLookupTableDescriptor[0] = 65536;
}
// The third Palette Color Lookup Table Descriptor value specifies the number of bits for each entry in the Lookup Table Data.
// It shall take the value of 8 or 16.
// The LUT Data shall be stored in a format equivalent to 8 bits allocated when the number of bits for each entry is 8, and 16 bits allocated when the number of bits for each entry is 16, where in both cases the high bit is equal to bits allocated-1.
// The third value shall be identical for each of the Red, Green and Blue Palette Color Lookup Table Descriptors.
//
// Note: Some implementations have encoded 8 bit entries with 16 bits allocated, padding the high bits;
// this can be detected by comparing the number of entries specified in the LUT Descriptor with the actual value length of the LUT Data entry.
// The value length in bytes should equal the number of entries if bits allocated is 8, and be twice as long if bits allocated is 16.
const numLutEntries =
imagePixelModule.redPaletteColorLookupTableDescriptor[0];
const lutData = dataSet.elements.x00281201;
const lutBitsAllocated = lutData.length === numLutEntries ? 8 : 16;
// If the descriptors do not appear to have the correct values, correct them
if (
imagePixelModule.redPaletteColorLookupTableDescriptor[2] !==
lutBitsAllocated
) {
imagePixelModule.redPaletteColorLookupTableDescriptor[2] = lutBitsAllocated;
imagePixelModule.greenPaletteColorLookupTableDescriptor[2] =
lutBitsAllocated;
imagePixelModule.bluePaletteColorLookupTableDescriptor[2] =
lutBitsAllocated;
}
imagePixelModule.redPaletteColorLookupTableData = getLutData(
dataSet,
'x00281201',
imagePixelModule.redPaletteColorLookupTableDescriptor
);
imagePixelModule.greenPaletteColorLookupTableData = getLutData(
dataSet,
'x00281202',
imagePixelModule.greenPaletteColorLookupTableDescriptor
);
imagePixelModule.bluePaletteColorLookupTableData = getLutData(
dataSet,
'x00281203',
imagePixelModule.bluePaletteColorLookupTableDescriptor
);
}
function metaDataProvider(type, imageId) { function metaDataProvider(type, imageId) {
const parsedImageId = parseImageId(imageId); const parsedImageId = parseImageId(imageId);
const dataSet = cornerstoneWADOImageLoader.wadouri.dataSetCacheManager.get(parsedImageId.url); const dataSet = cornerstoneWADOImageLoader.wadouri.dataSetCacheManager.get(parsedImageId.url);
@@ -99,5 +201,52 @@ function metaDataProvider(type, imageId) {
columnPixelSpacing, columnPixelSpacing,
}; };
} }
if (type === 'imagePixelModule') {
const imagePixelModule = {
samplesPerPixel: dataSet.uint16('x00280002'),
photometricInterpretation: dataSet.string('x00280004'),
rows: dataSet.uint16('x00280010'),
columns: dataSet.uint16('x00280011'),
bitsAllocated: dataSet.uint16('x00280100'),
bitsStored: dataSet.uint16('x00280101'),
highBit: dataSet.uint16('x00280102'),
pixelRepresentation: dataSet.uint16('x00280103'),
planarConfiguration: dataSet.uint16('x00280006'),
pixelAspectRatio: dataSet.string('x00280034'),
};
populateSmallestLargestPixelValues(dataSet, imagePixelModule);
if (
imagePixelModule.photometricInterpretation === 'PALETTE COLOR' &&
dataSet.elements.x00281101
) {
populatePaletteColorLut(dataSet, imagePixelModule);
}
return imagePixelModule;
}
// if (type === 'imagePixelModule') {
// return {
// samplesPerPixel: dataSet.uint16('x00280002'),
// photometricInterpretation: dataSet.string('x00280004'),
// rows: dataSet.uint16('x00280010'),
// columns: dataSet.uint16('x00280011'),
// bitsAllocated: dataSet.uint16('x00280100'),
// bitsStored: dataSet.uint16('x00280101'),
// highBit: dataSet.uint16('x00280102'),
// pixelRepresentation: dataSet.uint16('x00280103'),
// planarConfiguration: dataSet.uint16('x00280006'),
// pixelAspectRatio: dataSet.uint16('x00280034'),
// smallestPixelValue: null,
// largestPixelValue: null,
// // smallestPixelValue: dataSet.uint16('x00280106'),
// // largestPixelValue: dataSet.uint16('x00280107'),
// redPaletteColorLookupTableDescriptor: dataSet.string('x00281101'),
// greenPaletteColorLookupTableDescriptor: dataSet.string('x00281102'),
// bluePaletteColorLookupTableDescriptor: dataSet.string('x00281103'),
// redPaletteColorLookupTableData: dataSet.string('x00281201'),
// greenPaletteColorLookupTableData: dataSet.string('x00281202'),
// bluePaletteColorLookupTableData: dataSet.string('x00281203')
// }
// }
} }
export default metaDataProvider; export default metaDataProvider;
+1 -1
View File
@@ -445,7 +445,7 @@ function setTimer() {
totalBytes = totalBytes / 1024; totalBytes = totalBytes / 1024;
unit = "MB/s"; unit = "MB/s";
} }
store.state.trials.uploadTip = totalBytes.toFixed(2) + unit; store.state.trials.uploadTip = totalBytes.toFixed(3) + unit;
} }
if (timeList.length >= 5) { if (timeList.length >= 5) {
delete bytesReceivedPerSecond[timeList[0]] delete bytesReceivedPerSecond[timeList[0]]
+1 -1
View File
@@ -150,7 +150,7 @@ function setTimer() {
totalBytes = totalBytes / 1024; totalBytes = totalBytes / 1024;
unit = "MB/s"; unit = "MB/s";
} }
store.state.trials.uploadTip = totalBytes.toFixed(2) + unit; store.state.trials.uploadTip = totalBytes.toFixed(3) + unit;
} }
if (timeList.length >= 5) { if (timeList.length >= 5) {
delete bytesReceivedPerSecond[timeList[0]] delete bytesReceivedPerSecond[timeList[0]]
+66
View File
@@ -0,0 +1,66 @@
let TYPES = ['word', 'cell', 'slide', 'pdf']
let DOCUMENTTYPE = {
'.doc': TYPES[0],
'.docm': TYPES[0],
'.docx': TYPES[0],
'.dot': TYPES[0],
'.dotm': TYPES[0],
'.dotx': TYPES[0],
'.epub': TYPES[0],
'.fb2': TYPES[0],
'.fodt': TYPES[0],
'.htm': TYPES[0],
'.html': TYPES[0],
'.mht': TYPES[0],
'.mhtml': TYPES[0],
'.odt': TYPES[0],
'.ott': TYPES[0],
'.pages': TYPES[0],
'.rtf': TYPES[0],
'.stw': TYPES[0],
'.sxw': TYPES[0],
'.txt': TYPES[0],
'.wps': TYPES[0],
'.wpt': TYPES[0],
'.xml': TYPES[0],
'.csv': TYPES[1],
'.et': TYPES[1],
'.ett': TYPES[1],
'.fods': TYPES[1],
'.numbers': TYPES[1],
'.ods': TYPES[1],
'.ots': TYPES[1],
'.sxc': TYPES[1],
'.xls': TYPES[1],
'.xlsb': TYPES[1],
'.xlsm': TYPES[1],
'.xlsx': TYPES[1],
'.xlt': TYPES[1],
'.xltm': TYPES[1],
'.xltx': TYPES[1],
'.xml': TYPES[1],
'.dps': TYPES[2],
'.dpt': TYPES[2],
'.fodp': TYPES[2],
'.key': TYPES[2],
'.odp': TYPES[2],
'.otp': TYPES[2],
'.pot': TYPES[2],
'.potm': TYPES[2],
'.potx': TYPES[2],
'.pps': TYPES[2],
'.ppsm': TYPES[2],
'.ppsx': TYPES[2],
'.ppt': TYPES[2],
'.pptm': TYPES[2],
'.pptx': TYPES[2],
'.sxi': TYPES[2],
'.djvu': TYPES[3],
'.docxf': TYPES[3],
'.oform': TYPES[3],
'.oxps': TYPES[3],
'.pdf': TYPES[3],
'.xps': TYPES[3]
}
export default DOCUMENTTYPE
+3
View File
@@ -9,6 +9,7 @@ const ROUTER = require('@/router');
axios.defaults.withCredentials = false axios.defaults.withCredentials = false
const service = axios.create({ const service = axios.create({
baseURL: '/api', baseURL: '/api',
// baseURL: process.env.NODE_ENV === 'prod' ? "https://api.irc.extimaging.com" : '/api',
timeout: 2 * 360000, // request timeout timeout: 2 * 360000, // request timeout
withCredentials: false withCredentials: false
}) })
@@ -20,6 +21,8 @@ service.interceptors.request.use(
async config => { async config => {
path = router && router.app && router.app._route && router.app._route.path path = router && router.app && router.app._route && router.app._route.path
config.headers['Content-Type'] = 'application/json;charset=UTF-8' config.headers['Content-Type'] = 'application/json;charset=UTF-8'
// config.baseURL = process.env.NODE_ENV === 'prod' ? "https://api.irc.extimaging.com" : '/api'
config.headers['Self-Referer'] = window.location.href
var language = zzSessionStorage.getItem('lang') 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['Accept-Language'] = language === 'en' ? 'en-US,en;q=0.5' : 'zh-CN,zh;q=0.9'
config.headers['TimeZoneId'] = moment.tz.guess() config.headers['TimeZoneId'] = moment.tz.guess()
@@ -39,7 +39,6 @@
</el-form> </el-form>
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus"
style="margin-left:auto;" style="margin-left:auto;"
size="small" size="small"
@click="handleAdd" @click="handleAdd"
@@ -105,7 +104,7 @@
sortable="custom" sortable="custom"
/> />
<el-table-column label="Action"> <el-table-column label="Action" width="300">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="text" type="text"
@@ -39,7 +39,6 @@
</el-form-item> </el-form-item>
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus"
style="float: right" style="float: right"
size="small" size="small"
@click="handleAdd" @click="handleAdd"
@@ -120,7 +119,7 @@
sortable="custom" sortable="custom"
/> />
<el-table-column :label="$t('common:action:action')"> <el-table-column :label="$t('common:action:action')" width="300">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="PreviewFile(scope.row)"> <el-button type="text" @click="PreviewFile(scope.row)">
{{ $t('common:button:preview') }} {{ $t('common:button:preview') }}
@@ -1,100 +1,45 @@
<template> <template>
<el-form <el-form ref="sysAttachmentFrom" v-loading="loading" :model="form" label-width="190px" size="small" :rules="rules"
ref="sysAttachmentFrom" class="upload-temporary-file">
v-loading="loading"
:model="form"
label-width="190px"
size="small"
:rules="rules"
class="upload-temporary-file"
>
<div class="base-dialog-body"> <div class="base-dialog-body">
<el-form-item <el-form-item :label="$t('dictionary:signature:form:FileTypeId')" prop="FileTypeId">
:label="$t('dictionary:signature:form:FileTypeId')" <el-select v-model="form.FileTypeId" style="width: 100%" size="small" filterable>
prop="FileTypeId" <el-option v-for="item of dictionaryList.Sys_Document" :key="item.Id" :label="item.Value" :value="item.Id" />
>
<el-select
v-model="form.FileTypeId"
style="width: 100%"
size="small"
filterable
>
<el-option
v-for="item of dictionaryList.Sys_Document"
:key="item.Id"
:label="item.Value"
:value="item.Id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('dictionary:signature:form:File')"> <el-form-item :label="$t('dictionary:signature:form:File')">
<div class="upload-container"> <div class="upload-container">
<el-upload <el-upload class="upload-demo" action accept=".pdf" :before-upload="beforeUpload"
class="upload-demo" :http-request="handleUploadFile" :on-preview="handlePreview" :on-remove="handleRemoveFile"
action :show-file-list="true" :file-list="fileList" :limit="1" :on-exceed="handleExceed"
accept=".pdf" :disabled="form.Type === ''">
:before-upload="beforeUpload" <el-button size="small" type="primary" :disabled="form.FileTypeId === ''" :loading="btnLoading">{{
:http-request="handleUploadFile" $t('common:button:check') }}</el-button>
:on-preview="handlePreview"
:on-remove="handleRemoveFile"
:show-file-list="true"
:file-list="fileList"
:limit="1"
:on-exceed="handleExceed"
:disabled="form.Type === ''"
>
<el-button
size="small"
type="primary"
:disabled="form.FileTypeId === ''"
:loading="btnLoading"
>{{ $t('common:button:check') }}</el-button
>
<span slot="tip" style="margin-left: 10px" class="el-upload__tip"> <span slot="tip" style="margin-left: 10px" class="el-upload__tip">
({{ $t('trials:signature:label:mustBepdf') }}) ({{ $t('trials:signature:label:mustBepdf') }})
</span> </span>
</el-upload> </el-upload>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :label="$t('dictionary:signature:form:NeedConfirmedUserTypeIdList')"
:label="$t('dictionary:signature:form:NeedConfirmedUserTypeIdList')" prop="NeedConfirmedUserTypeIdList">
prop="NeedConfirmedUserTypeIdList" <el-select v-model="form.NeedConfirmedUserTypeIdList" style="width: 100%" multiple>
> <el-option v-for="item of userTypeOptions" :key="item.Id" :label="item.UserTypeShortName" :value="item.Id" />
<el-select
v-model="form.NeedConfirmedUserTypeIdList"
style="width: 100%"
multiple
>
<el-option
v-for="item of userTypeOptions"
:key="item.Id"
:label="item.UserTypeShortName"
:value="item.Id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :label="$t('dictionary:signature:form:DocUserSignType')" prop="DocUserSignType">
:label="$t('dictionary:signature:form:DocUserSignType')" <el-switch v-model="form.DocUserSignType" :active-value="1" :inactive-value="0">
prop="DocUserSignType"
>
<el-switch
v-model="form.DocUserSignType"
:active-value="1"
:inactive-value="0"
>
</el-switch> </el-switch>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :label="$t('dictionary:signature:form:SignViewMinimumMinutes')" prop="SignViewMinimumMinutes">
:label="$t('dictionary:signature:form:SignViewMinimumMinutes')" <el-input-number v-model="form.SignViewMinimumMinutes" controls-position="right" :min="1" :max="50" />
prop="SignViewMinimumMinutes" </el-form-item>
> <el-form-item :label="$t('dictionary:signature:form:CurrentStaffTrainDays')" prop="CurrentStaffTrainDays">
<el-input-number <el-input-number v-model="form.CurrentStaffTrainDays" controls-position="right" :min="0" :max="1000" />
v-model="form.SignViewMinimumMinutes" </el-form-item>
controls-position="right" <el-form-item :label="$t('dictionary:signature:form:NewStaffTrainDays')" prop="NewStaffTrainDays">
:min="1" <el-input-number v-model="form.NewStaffTrainDays" controls-position="right" :min="0" :max="1000" />
:max="50"
/>
</el-form-item> </el-form-item>
<!-- <el-form-item v-if="form.Id !== ''" label="是否废除: "> <!-- <el-form-item v-if="form.Id !== ''" label="是否废除: ">
<el-radio-group v-model="form.IsDeleted"> <el-radio-group v-model="form.IsDeleted">
@@ -105,14 +50,8 @@
</div> </div>
<div class="base-dialog-footer" style="text-align: right; margin-top: 10px"> <div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
<el-form-item style="text-align: right"> <el-form-item style="text-align: right">
<el-button <el-button size="small" type="primary" :disabled="form.FileTypeId === '' || form.Name === ''"
size="small" :loading="saveBtnLoading" @click="handleSave">{{ $t('common:button:save') }}</el-button>
type="primary"
:disabled="form.FileTypeId === '' || form.Name === ''"
:loading="saveBtnLoading"
@click="handleSave"
>{{ $t('common:button:save') }}</el-button
>
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
@@ -138,9 +77,12 @@ export default {
FileTypeId: '', FileTypeId: '',
Name: '', Name: '',
Path: '', Path: '',
IsDeleted: false, IsPublish: false,
IsDeleted: true,
SignViewMinimumMinutes: null, SignViewMinimumMinutes: null,
DocUserSignType: 0, DocUserSignType: 0,
CurrentStaffTrainDays: 1,
NewStaffTrainDays: 14,
}, },
rules: { rules: {
FileTypeId: [ FileTypeId: [
@@ -196,8 +138,11 @@ export default {
this.form.Name = this.data.Name this.form.Name = this.data.Name
this.form.Path = this.data.Path this.form.Path = this.data.Path
this.form.IsDeleted = this.data.IsDeleted this.form.IsDeleted = this.data.IsDeleted
this.form.IsPublish = this.data.IsPublish
this.form.SignViewMinimumMinutes = this.data.SignViewMinimumMinutes this.form.SignViewMinimumMinutes = this.data.SignViewMinimumMinutes
this.form.DocUserSignType = this.data.DocUserSignType this.form.DocUserSignType = this.data.DocUserSignType
this.form.CurrentStaffTrainDays = this.data.CurrentStaffTrainDays
this.form.NewStaffTrainDays = this.data.NewStaffTrainDays
} }
this.loading = false this.loading = false
}, },
@@ -207,7 +152,7 @@ export default {
.then((res) => { .then((res) => {
this.dictionaryList = { ...res.Result } this.dictionaryList = { ...res.Result }
}) })
.catch(() => {}) .catch(() => { })
}, },
// 获取用户类型下拉数据 // 获取用户类型下拉数据
getUserType() { getUserType() {
@@ -305,13 +250,16 @@ export default {
width: 80px; width: 80px;
height: 40px; height: 40px;
} }
.upload-container .el-input--small { .upload-container .el-input--small {
margin-bottom: 5px; margin-bottom: 5px;
} }
.upload-container .el-icon-circle-check { .upload-container .el-icon-circle-check {
color: #428bca; color: #428bca;
font-size: 13px; font-size: 13px;
} }
.account_item_clear { .account_item_clear {
.el-tag__close { .el-tag__close {
display: none !important; display: none !important;
@@ -0,0 +1,223 @@
<template>
<el-form ref="attachmentFrom" v-loading="loading" :model="form" label-width="190px" size="small" :rules="rules"
class="upload-temporary-file">
<div class="base-dialog-body">
<el-form-item :label="$t('dictionary:signature:form:FileName')" prop="Name">
<el-input v-model="form.Name" clearable></el-input>
</el-form-item>
<el-form-item :label="$t('dictionary:signature:form:OffLine')" prop="OffLine">
<el-switch v-model="form.OffLine" :active-value="true" :inactive-value="false"
:active-text="$fd('YesOrNo', true)" :inactive-text="$fd('YesOrNo', false)">
</el-switch>
</el-form-item>
<el-form-item :label="$t('dictionary:signature:form:File')">
<div class="upload-container">
<el-upload class="upload-demo" action :accept="this.accept.join(',')" :before-upload="beforeUpload"
:http-request="handleUploadFile" :on-preview="handlePreview" :on-remove="handleRemoveFile"
:show-file-list="true" :file-list="fileList" :limit="1" :on-exceed="handleExceed">
<el-button size="small" type="primary" :loading="btnLoading">{{ $t('common:button:check')
}}</el-button>
<span slot="tip" style="margin-left: 10px" class="el-upload__tip">
({{ $t('trials:signature:label:type').replace("xxx", this.accept.join(", ")) }})
</span>
</el-upload>
</div>
</el-form-item>
</div>
<div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
<el-form-item style="text-align: right">
<el-button size="small" type="primary" :disabled="form.FileTypeId === '' || form.Name === ''"
:loading="saveBtnLoading" @click="handleSave">{{ $t('common:button:save') }}</el-button>
</el-form-item>
</div>
</el-form>
</template>
<script>
import { addOrUpdateSystemDocumentAttachment } from '@/api/dictionary'
export default {
props: {
data: {
type: Object,
default() {
return {}
},
},
SystemDocumentId: {
type: String,
default: ''
}
},
data() {
return {
form: {
Id: '',
Name: null,
FileFormat: null,
FileName: null,
FilePath: null,
FileSize: null,
OffLine: false,
SystemDocumentId: null,
},
rules: {
Name: [
{
required: true,
message: this.$t('common:ruleMessage:specify'),
trigger: ['change'],
},
],
},
fileList: [],
btnLoading: false,
saveBtnLoading: false,
loading: false,
accept: ['.jpg',
'.jpeg',
'.png',
'.pdf',
'.ppt',
'.pptx',
'.doc',
'.docx',
'.xls',
'.xlsx']
}
},
mounted() {
this.initForm()
},
methods: {
async initForm() {
this.loading = true
if (this.data && this.data.Id) {
Object.keys(this.form).forEach(key => {
this.form[key] = this.data[key]
})
this.fileList = [
{
name: this.data.FileName,
url: this.data.FilePath,
path: this.data.FilePath,
},
]
}
this.loading = false
},
beforeUpload(file) {
// 检测文件类型是否符合要求
if (this.checkFileSuffix(file.name)) {
this.fileList = []
return true
} else {
this.$alert(this.$t('trials:signature:label:type').replace("xxx", this.accept.join(", ")))
return false
}
},
async handleUploadFile(param) {
this.loading = true
var file = await this.fileToBlob(param.file)
const res = await this.OSSclient.put(
`/System/DocumentToSign/${param.file.name}${new Date().getTime()}`,
file
)
this.fileList.push({
name: param.file.name,
path: this.$getObjectName(res.url),
url: this.$getObjectName(res.url),
})
this.form.Name = param.file.name
this.form.FileName = param.file.name
this.form.FilePath = this.$getObjectName(res.url)
this.form.FileSize = param.file.size
this.form.FileFormat = param.file.name
.substring(param.file.name.lastIndexOf('.'))
.toLocaleLowerCase().split('.')[1]
this.loading = false
},
handleSave() {
this.$refs.attachmentFrom.validate((valid) => {
if (!valid) return false
if (!this.form.FilePath)
return this.$alert(this.$t('trials:signature:message:selectFile'))
this.saveBtnLoading = true
if (this.SystemDocumentId) this.form.SystemDocumentId = this.SystemDocumentId
addOrUpdateSystemDocumentAttachment(this.form)
.then((res) => {
this.saveBtnLoading = false
this.$emit('closeDialog')
this.$emit('getList')
this.$message.success(this.$t('common:message:updatedSuccessfully'))
})
.catch(() => {
this.saveBtnLoading = false
})
})
},
handleRemoveFile() {
this.fileList = []
this.form.FilePath = ''
this.form.FileSize = ''
this.form.FileFormat = ''
this.form.FileName = ''
},
handlePreview(file) {
if (file.fullPath) {
window.open(file.fullPath, '_blank')
}
},
handleExceed(files, fileList) {
this.$message.warning(this.$t('upload:rule:maxFile1'))
},
checkFileSuffix(fileName) {
var typeArr = [
'jpg',
'jpeg',
'png',
'pdf',
'ppt',
'pptx',
'doc',
'docx',
'xls',
'xlsx',
]
var extendName = fileName
.substring(fileName.lastIndexOf('.') + 1)
.toLocaleLowerCase()
if (typeArr.indexOf(extendName) !== -1) {
return true
} else {
return false
}
},
},
}
</script>
<style lang="scss">
.upload-temporary-file {
.upload-container .el-upload--text {
border: none;
width: 80px;
height: 40px;
}
.upload-container .el-input--small {
margin-bottom: 5px;
}
.upload-container .el-icon-circle-check {
color: #428bca;
font-size: 13px;
}
.account_item_clear {
.el-tag__close {
display: none !important;
}
}
}
</style>
@@ -0,0 +1,258 @@
<template>
<div v-if="config.visible">
<base-model :config="config">
<template slot="dialog-body">
<el-form ref="form" :model="rowData" label-width="80px" style="width: 80%;display: inline-block;">
<el-form-item :label="`${$t('dictionary:signature:table:Name')}: `">
<span class="name text-ellipsis" :title="rowData.Name">{{ rowData.Name }}</span>
</el-form-item>
</el-form>
<el-button size="mini" type="primary" style="float:right" @click.stop="edit({})" v-if="!isView">
{{ $t('common:button:add') }}</el-button>
<el-table :data="list" style="width: 100%" max-height="300px" v-loading="loading"
@sort-change="handleSortByColumn">
<el-table-column type="index" width="60" />
<el-table-column prop="Name" :label="$t('dictionary:signature:attachmentList:FileName')"
sortable="custom" />
<el-table-column prop="OffLine" :label="$t('dictionary:signature:attachmentList:OffLine')"
sortable="custom" v-if="!isView">
<template slot-scope="scope">
<el-switch v-model="scope.row.OffLine" @change="(val) => OffLine(scope.row, val)"
:active-value="true" :inactive-value="false" :active-text="$fd('YesOrNo', true)"
:inactive-text="$fd('YesOrNo', false)">
</el-switch>
</template>
</el-table-column>
<el-table-column prop="CreateTime" :label="$t('dictionary:signature:attachmentList:CreateTime')"
sortable="custom" />
<el-table-column :label="$t('common:action:action')" min-width="120px">
<template slot-scope="scope">
<el-button size="mini" type="text" @click.stop="preview(scope.row)">
{{ $t('common:button:preview') }}
</el-button>
<el-button size="mini" type="text" @click.stop="edit(scope.row)" v-if="!isView">
{{ $t('common:button:edit') }}
</el-button>
<!-- <el-button size="mini" type="text" @click.stop="OffLine(scope.row, true)"
:disabled="scope.row.OffLine">
{{ $t('dictionary:signature:attachmentList:OffLine') }}
</el-button> -->
<el-button size="mini" type="text" @click.stop="del(scope.row)" v-if="!isView">
{{ $t('common:button:delete') }}
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 新增/编辑附件 -->
<el-dialog :visible.sync="visible" :close-on-click-modal="false" :append-to-body="true" :title="title"
width="800px" custom-class="base-dialog-wrapper">
<attachmentForm v-if="visible" :data="rowData" :SystemDocumentId="SystemDocumentId"
@closeDialog="closeDialog" @getList="getAllList" />
</el-dialog>
</template>
</base-model>
<viewer ref="picture_perview2" style="margin: 0 10px"
v-if="rowData.FileFormat && ['png', 'jpg', 'jpeg'].includes(rowData.FileFormat.toLowerCase())"
:images="[`${OSSclientConfig.basePath}${rowData.FilePath}`]" :options="viewerOptions">
<img v-show="false" :src="`${OSSclientConfig.basePath}${rowData.FilePath}`" alt="Image" />
</viewer>
<!-- <attachmentPreview :SystemDocumentId="SystemDocumentId" :visible.sync="perview_visible"
v-if="perview_visible" /> -->
</div>
</template>
<script>
import BaseModel from '@/components/BaseModel'
import attachmentForm from './attachmentForm'
// import attachmentPreview from './attachmentPreview'
import { addOrUpdateSystemDocumentAttachment, getSystemDocumentAttachmentList, deleteSystemDocumentAttachment } from '@/api/dictionary'
const defaultSearchData = () => {
return {
PageIndex: 1,
PageSize: 1000,
Asc: false,
OffLine: null,
SortField: null
}
}
export default {
components: {
BaseModel,
attachmentForm,
// attachmentPreview
},
props: {
config: {
type: Object,
default: () => {
return {
visible: false,
title: this.$t('dictionary:signature:attachmentList:title'),
width: '800px',
}
}
},
isView: {
type: Boolean,
default: false
},
rowData: {
type: Object,
default: () => {
return {}
}
},
SystemDocumentId: {
type: String,
default: ''
}
},
data() {
return {
searchData: defaultSearchData(),
visible: false,
title: null,
list: [],
rowData: {},
loading: false,
viewerOptions: {
toolbar: {
zoomIn: true,
zoomOut: true,
reset: true,
prev: false,
next: false,
rotateLeft: true,
rotateRight: true,
flipHorizontal: true,
flipVertical: true,
}
},
// perview_visible: false
}
},
watch: {
SystemDocumentId: {
handler() {
this.getList()
},
immediate: true,
}
},
methods: {
closeDialog() {
this.visible = false
},
getAllList() {
this.getList()
this.$emit("getList")
},
async del(row) {
try {
let confirm = await this.$confirm(this.$t("dictionary:signature:attachmentList:message:del"))
if (!confirm) return false
this.loading = true
let res = await deleteSystemDocumentAttachment(row.Id)
this.loading = false
if (res.IsSuccess) {
this.getAllList()
}
} catch (err) {
console.log(err)
this.loading = false
}
},
edit(row) {
this.title = this.$t('dictionary:signature:attachmentForm:title:update')
if (!row.Id) {
this.title = this.$t('dictionary:signature:attachmentForm:title:add')
}
this.rowData = Object.assign({}, row)
this.visible = true
},
async getList() {
try {
if (!this.SystemDocumentId) return false
this.loading = true
this.searchData.SystemDocumentId = this.SystemDocumentId
if (this.isView) {
this.searchData.OffLine = false
}
let res = await getSystemDocumentAttachmentList(this.searchData)
this.loading = false
if (res.IsSuccess) {
this.list = res.Result.CurrentPageData
}
} catch (err) {
this.loading = false
console.log(err)
}
},
async OffLine(row, val) {
try {
let data = Object.assign({}, row)
data.OffLine = val
this.loading = true
let res = await addOrUpdateSystemDocumentAttachment(data)
this.loading = false
if (res.IsSuccess) {
this.$t('dictionary:signature:attachmentList:updateSuccessfully')
this.getList()
}
} catch (err) {
this.loading = false
row.OffLine = !row.OffLine
console.log(err)
}
},
preview(data) {
// return this.perview_visible = true
this.rowData = Object.assign({}, data)
if (['.ppt',
'.pptx',
'.doc',
'.docx',
'.xls',
'.xlsx'].includes(`.${data.FileFormat.toLowerCase()}`)) {
this.$onlyOffice({
path: data.FilePath,
type: data.FileFormat,
title: data.Name
})
}
if (['.jpg',
'.jpeg',
'.png'].includes(`.${data.FileFormat.toLowerCase()}`)) {
this.$nextTick(() => {
this.$refs['picture_perview2'].$viewer.show()
})
}
if (['.pdf'].includes(`.${data.FileFormat.toLowerCase()}`)) {
this.$preview({
path: data.Path || data.FilePath,
type: 'pdf',
title: data.Name,
})
}
},
// 排序
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()
},
}
}
</script>
<style lang="scss" scoped>
.name {
display: block;
width: 90%;
}
</style>
@@ -0,0 +1,312 @@
<template>
<el-dialog :visible.sync="visible" :title="title" :fullscreen="true" append-to-body
custom-class="base-dialog-wrapper" :before-close="handleClose">
<div v-loading="loading" class="img-container" v-if="visible">
<el-card class="box-card left">
<div class="title">
{{ $t('dictionary:signature:fileList') }}
</div>
<div class="left-content">
<!-- 检查层级 -->
<div id="imgList" style="height: 100%; overflow: hidden">
<template v-for="(item, index) in list">
<div :id="`img${item.Id}`" :key="item.Id" :class="{
'is-boxActive': item.Id === rowData.Id,
}" class="img-box" @click="selected(item)">
<div class="file-image">
<el-image v-if="
[
'jpeg',
'jpg',
'png',
].includes(item.FileFormat)
" style="width: 100%; height: 100%"
:src="`${OSSclientConfig.basePath}${item.FilePath}?x-oss-process=image/resize,w_50,h_50/format,png`"
fit="contain" crossorigin="anonymous" />
<el-image v-else style="width: 100%; height: 100%" :src="getsrc(item.FileFormat)"
fit="contain" crossorigin="anonymous" />
</div>
<div v-if="item.Name.length < 15" class="img-text">
{{ `${index + 1}. ${item.Name}` }}
</div>
<el-tooltip v-else :content="item.Name" placement="bottom">
<div class="img-text">
{{ `${index + 1}. ${item.Name}` }}
</div>
</el-tooltip>
</div>
</template>
</div>
</div>
</el-card>
<!-- 预览图像 -->
<el-card class="box-card right">
<div style="width: 100%; height: 100%" v-if="[
'jpeg',
'jpg',
'png',
].includes(rowData.FileFormat)">
<imageViewer :rowData="rowData" />
</div>
<div style="width: 100%; height: 100%" v-else>
<PreviewFile v-if='rowData.FilePath' :file-path="rowData.FilePath" :file-type="rowData.FileFormat"
:title="rowData.Name" />
</div>
</el-card>
<!-- <el-card class="box-card" style="width:300px;height:100%;padding: 10px;margin-left:10px;">
<CheckForm />
</el-card> -->
</div>
</el-dialog>
</template>
<script>
import pdf from '@/assets/file_icon/pdf.png'
import zip from '@/assets/file_icon/zip.png'
import doc from '@/assets/file_icon/doc.png'
import docx from '@/assets/file_icon/docx.png'
import ppt from '@/assets/file_icon/ppt.png'
import pptx from '@/assets/file_icon/pptx.png'
import xls from '@/assets/file_icon/xls.png'
import xlsx from '@/assets/file_icon/xlsx.png'
import PreviewFile from '@/components/PreviewFile'
import imageViewer from './image-viewer'
import { getSystemDocumentAttachmentList } from '@/api/dictionary'
const defaultSearchData = () => {
return {
PageIndex: 1,
PageSize: 1000,
Asc: false,
OffLine: null,
SortField: null
}
}
export default {
name: 'Notice',
components: {
PreviewFile,
imageViewer
},
props: {
SystemDocumentId: {
type: String,
default: ''
},
visible: {
type: Boolean,
default: false
},
isView: {
type: Boolean,
default: false
}
},
data() {
return {
pdf,
zip,
doc,
docx,
ppt,
pptx,
xls,
xlsx,
rowData: {},
list: [],
searchData: defaultSearchData(),
title: this.$t('dictionary:signature:fileList')
}
},
watch: {
SystemDocumentId: {
handler() {
this.getList()
},
immediate: true,
}
},
methods: {
getsrc(type) {
return this[type.toLowerCase()]
},
selected(row) {
this.rowData = row
},
handleClose() {
this.$emit("update:visible", false)
},
async getList() {
try {
if (!this.SystemDocumentId) return false
this.loading = true
this.searchData.SystemDocumentId = this.SystemDocumentId
if (this.isView) {
this.searchData.OffLine = false
}
let res = await getSystemDocumentAttachmentList(this.searchData)
this.loading = false
if (res.IsSuccess) {
this.list = res.Result.CurrentPageData
this.rowData = this.list[0] || {}
}
} catch (err) {
this.loading = false
console.log(err)
}
},
},
}
</script>
<style lang="scss" scoped>
.img-container {
position: relative;
width: 100%;
height: 100%;
padding: 10px;
display: flex;
::-webkit-scrollbar {
width: 7px;
height: 7px;
}
::-webkit-scrollbar-thumb {
border-radius: 10px;
background: #d0d0d0;
}
::v-deep .el-card__body {
padding: 0px;
}
}
.study-desc {
padding: 10px 5px;
line-height: 20px;
background-color: #d5d5d5;
font-weight: 500;
}
.left {
width: 220px;
height: 100%;
::v-deep .el-card__body {
height: 100%;
width: 100%;
display: flex;
flex-direction: column;
}
.title {
height: 40px;
line-height: 40px;
border: 1ppx solid;
border: 1px solid #ebe7e7;
padding-left: 10px;
background-color: #4e4e4e;
color: #ffffff;
}
.left-content {
flex: 1;
overflow-y: auto;
}
// ::v-deep .el-tabs{
// height: 100%;
// }
// ::v-deep .el-tabs__header{
// height: 40px;
// }
// ::v-deep .el-tabs__content{
// flex: 1;
// overflow-y: auto;
// padding: 0;
// }
.img-box {
// position: relative;
display: inline-block;
box-sizing: border-box;
border-bottom: 2px solid #f3f3f3;
display: flex;
align-items: center;
flex-wrap: wrap;
justify-content: flex-start;
padding: 5px 10px;
cursor: pointer;
// margin-bottom: 5px;
padding-left: 5px;
}
.img-text {
display: inline-block;
width: calc(100% - 60px);
margin-left: 5px;
height: 50px;
line-height: 50px;
overflow: hidden;
text-overflow: ellipsis;
/* 用省略号表示溢出的文本 */
white-space: nowrap;
}
.img-box:nth-last-child(1) {
margin-bottom: 0px;
}
.is-boxActive {
// border-color: #409eff;
color: #409eff;
}
.is-boxActiv:after {
opacity: 0;
}
}
.right {
flex: 1;
height: 100%;
margin-left: 10px;
::v-deep .el-card__body {
height: 100%;
width: 100%;
}
}
.switchBox {
width: 100%;
margin: 5px 0;
color: #4e4e4e;
.item {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 5px;
}
}
.file-image {
width: 50px;
height: 50px;
}
::v-deep .el-collapse-item__header {
background-color: #d5d5d5;
}
::v-deep .el-collapse-item__header {
min-height: 48px;
height: auto;
}
::v-deep .el-collapse-item__content {
padding-bottom: 0;
}
</style>
@@ -0,0 +1,381 @@
/* eslint-disable no-unused-vars */
<template>
<div style="width: 100%; height: 100%">
<transition name="viewer-fade">
<div ref="image-viewer__wrapper" tabindex="-1" class="image-viewer__wrapper" :style="{ 'z-index': 5 }">
<!-- Arrow -->
<!-- 工具栏 -->
<div class="image-viewer__btn image-viewer__actions">
<div class="image-viewer__actions__inner">
<i class="el-icon-zoom-out" @click="handleActions('zoomOut')" />
<i class="el-icon-zoom-in" @click="handleActions('zoomIn')" />
<i class="el-image-viewer__actions__divider" />
<i class="el-icon-c-scale-to-original" @click="toggleMode" />
<i class="el-image-viewer__actions__divider" />
<i class="el-icon-refresh-left" @click="handleActions('anticlocelise')" />
<i class="el-icon-refresh-right" @click="handleActions('clocelise')" />
</div>
</div>
<!-- 图片 -->
<div id="image-viewer__canvas" class="image-viewer__canvas">
<img crossorigin="anonymous" :src="`${OSSclientConfig.basePath}${rowData.FilePath}`
" :style="imgStyle" style="max-width: 100%; max-height: 100%" @load="handleImgLoad" @error="handleImgError"
@mousedown="handleMouseDown" />
</div>
</div>
</transition>
</div>
</template>
<script>
import { on, off } from 'element-ui/src/utils/dom'
import { rafThrottle, isFirefox } from 'element-ui/src/utils/util'
const mousewheelEventName = isFirefox() ? 'DOMMouseScroll' : 'mousewheel'
export default {
name: 'ImageViewer',
props: {
onSwitch: {
type: Function,
default: () => { },
},
onClose: {
type: Function,
default: () => { },
},
rowData:{
type: Object,
default: () => {
return {}
},
}
},
data() {
return {
loading: false,
transform: {
scale: 1,
deg: 0,
offsetX: 0,
offsetY: 0,
enableTransition: false,
},
}
},
computed: {
imgStyle() {
const { scale, deg, offsetX, offsetY, enableTransition } = this.transform
const style = {
transform: `scale(${scale}) rotate(${deg}deg)`,
transition: enableTransition ? 'transform .3s' : '',
'margin-left': `${offsetX}px`,
'margin-top': `${offsetY}px`,
}
return style
},
},
mounted() {
document.getElementById('image-viewer__canvas').onmousewheel = (event) => {
if (event.deltaY > 0) {
// 缩小
this.handleActions('zoomOut', {
zoomRate: 0.015,
enableTransition: false,
})
} else {
// 放大
this.handleActions('zoomIn', {
zoomRate: 0.015,
enableTransition: false,
})
}
return false
}
this.deviceSupportInstall()
},
methods: {
hide() {
this.deviceSupportUninstall()
this.onClose()
},
deviceSupportInstall() {
this._keyDownHandler = (e) => {
e.stopPropagation()
const keyCode = e.keyCode
switch (keyCode) {
// ESC
case 27:
this.hide()
break
// SPACE
case 32:
this.toggleMode()
break
// LEFT_ARROW
case 37:
this.prev()
break
// UP_ARROW
case 38:
this.handleActions('zoomIn')
break
// RIGHT_ARROW
case 39:
this.next()
break
// DOWN_ARROW
case 40:
this.handleActions('zoomOut')
break
}
}
this._mouseWheelHandler = rafThrottle((e) => {
const delta = e.wheelDelta ? e.wheelDelta : -e.detail
if (delta > 0) {
this.handleActions('zoomIn', {
zoomRate: 0.015,
enableTransition: false,
})
} else {
this.handleActions('zoomOut', {
zoomRate: 0.015,
enableTransition: false,
})
}
})
on(document, 'keydown', this._keyDownHandler)
on(document, mousewheelEventName, null)
// on(document, mousewheelEventName, this._mouseWheelHandler)
},
deviceSupportUninstall() {
off(document, 'keydown', this._keyDownHandler)
off(document, mousewheelEventName, this._mouseWheelHandler)
this._keyDownHandler = null
this._mouseWheelHandler = null
},
handleImgLoad(e) {
this.loading = false
},
handleImgError(e) {
this.loading = false
e.target.alt = '加载失败'
},
handleMouseDown(e) {
if (this.loading || e.button !== 0) return
const { offsetX, offsetY } = this.transform
const startX = e.pageX
const startY = e.pageY
this._dragHandler = rafThrottle((ev) => {
this.transform.offsetX = offsetX + ev.pageX - startX
this.transform.offsetY = offsetY + ev.pageY - startY
})
on(document, 'mousemove', this._dragHandler)
on(document, 'mouseup', (ev) => {
off(document, 'mousemove', this._dragHandler)
})
e.preventDefault()
},
reset() {
this.transform = {
scale: 1,
deg: 0,
offsetX: 0,
offsetY: 0,
enableTransition: false,
}
},
toggleMode() {
if (this.loading) return
this.reset()
},
handleActions(action, options = {}) {
if (this.loading) return
const { zoomRate, rotateDeg, enableTransition } = {
zoomRate: 0.2,
rotateDeg: 90,
enableTransition: true,
...options,
}
const { transform } = this
switch (action) {
case 'zoomOut':
if (transform.scale > 0.2) {
transform.scale = parseFloat(
(transform.scale - zoomRate).toFixed(3)
)
}
break
case 'zoomIn':
if (transform.scale < 5) {
transform.scale = parseFloat(
(transform.scale + zoomRate).toFixed(3)
)
}
break
case 'clocelise':
transform.deg += rotateDeg
break
case 'anticlocelise':
transform.deg -= rotateDeg
break
}
transform.enableTransition = enableTransition
},
},
}
</script>
<style lang="scss" scoped>
.image-viewer__wrapper {
position: relative;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
}
.image-viewer__btn {
position: absolute;
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
opacity: 0.8;
cursor: pointer;
box-sizing: border-box;
user-select: none;
}
.image-viewer__close {
display: none;
top: 40px;
right: 40px;
width: 40px;
height: 40px;
font-size: 40px;
}
.image-viewer_desc {
position: absolute;
top: 40px;
left: 40px;
font-size: 15px;
padding: 5px;
height: 30px;
width: 70px;
line-height: 20px;
text-align: center;
color: #fff;
background-color: #606266;
border-color: #fff;
z-index: 1;
border-radius: 17px;
// border-radius: 2%;
}
.image-viewer__canvas {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.image-viewer__actions {
left: 50%;
bottom: 30px;
transform: translateX(-50%);
width: 282px;
height: 44px;
padding: 0 23px;
background-color: #606266;
border-color: #fff;
border-radius: 22px;
}
.image-viewer__actions__inner {
width: 100%;
height: 100%;
text-align: justify;
cursor: default;
font-size: 23px;
color: #fff;
display: flex;
align-items: center;
justify-content: space-around;
}
.image-viewer__next,
.image-viewer__prev {
top: 50%;
width: 44px;
height: 44px;
font-size: 24px;
color: #fff;
background-color: #606266;
border-color: #fff;
}
.image-viewer__prev {
transform: translateY(-50%);
left: 40px;
}
.image-viewer__next {
transform: translateY(-50%);
right: 40px;
text-indent: 2px;
}
.image-viewer__mask {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
opacity: 0.5;
// background:#000
}
.viewer-fade-enter-active {
animation: viewer-fade-in 0.3s;
}
.viewer-fade-leave-active {
animation: viewer-fade-out 0.3s;
}
@keyframes viewer-fade-in {
0% {
transform: translate3d(0, -20px, 0);
opacity: 0;
}
100% {
transform: translate3d(0, 0, 0);
opacity: 1;
}
}
@keyframes viewer-fade-out {
0% {
transform: translate3d(0, 0, 0);
opacity: 1;
}
100% {
transform: translate3d(0, -20px, 0);
opacity: 0;
}
}
</style>
@@ -1,81 +1,103 @@
<template> <template>
<BaseContainer> <BaseContainer>
<template slot="title-container">
<el-row v-if="isSystem" style="width: 100%;">
<el-col :span="12">
<h3>{{ TITLE }}</h3>
</el-col>
<el-col :span="12" style="text-align:right;">
<h3>
<Pagination class="page" :total="total" :page.sync="searchData.pageIndex" :limit.sync="searchData.pageSize"
layout="total, sizes, prev, pager, next" :background="false" style="display: inline-block;"
@pagination="getList" />
<el-button icon="el-icon-refresh-left" size="small" circle :title="$t('common:button:reset')"
@click="handleReset" />
</h3>
</el-col>
</el-row>
</template>
<template slot="search-container"> <template slot="search-container">
<el-form :inline="true" size="small"> <el-form :inline="true" size="small">
<el-form-item :label="$t('dictionary:signature:search:FileTypeId')"> <el-form-item :label="$t('dictionary:signature:search:FileTypeId')">
<el-select v-model="searchData.FileTypeId" style="width: 150px"> <el-select v-model="searchData.FileTypeId" style="width: 150px" clearable>
<el-option <el-option v-for="item of $d.Sys_Document" :key="item.id" :label="item.label" :value="item.id" />
v-for="item of dict.type.Sys_Document"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('dictionary:signature:search:Name')"> <el-form-item :label="$t('dictionary:signature:search:Name')">
<el-input v-model="searchData.Name" style="width: 130px" clearable /> <el-input v-model="searchData.Name" style="width: 130px" clearable />
</el-form-item> </el-form-item>
<el-form-item :label="$t('dictionary:signature:table:NeedConfirmedUserTypes')">
<el-select v-model="searchData.UserTypeId" style="width: 150px" clearable>
<el-option v-for="item of userTypeOptions" :key="item.Id" :label="item.UserTypeShortName"
:value="item.Id" />
</el-select>
</el-form-item>
<el-form-item :label="$t('dictionary:signature:table:IsDeleted')">
<el-select v-model="searchData.IsDeleted" style="width: 150px" clearable>
<el-option v-for="item of $d.TrainingStatus" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('dictionary:signature:table:DocUserSignType')">
<el-select v-model="searchData.DocUserSignType" style="width: 150px" clearable>
<el-option v-for="item of $d.ReadingYesOrNo" :key="item.id" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('dictionary:signature:table:createTime')">
<el-date-picker v-model="timeList" @change="changeTimeList" value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00', '23:59:59']" type="datetimerange">
</el-date-picker>
</el-form-item>
<el-form-item> <el-form-item>
<!-- 查询 --> <!-- 查询 -->
<el-button type="primary" icon="el-icon-search" @click="handleSearch"> <el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }} {{ $t('common:button:search') }}
</el-button> </el-button>
<!-- 重置 --> <!-- 重置 -->
<el-button <el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }} {{ $t('common:button:reset') }}
</el-button> </el-button>
<el-button type="primary" size="small" @click="handleAdd">
{{ $t('common:button:new') }}
</el-button>
<el-button type="primary" size="small" :disabled="multipleSelection.length <= 0"
@click="publishSystemDocument(multipleSelection)">
{{ $t('dictionary:signature:button:publish') }}
</el-button>
<el-button type="primary" size="small" :disabled="multipleSelection.length <= 0"
@click="handleRepeal(multipleSelection)">
{{ $t('common:button:revoke') }}
</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-button
type="primary"
icon="el-icon-plus"
style="margin-left: auto; margin-bottom: 10px"
size="small"
@click="handleAdd"
>
{{ $t('common:button:new') }}
</el-button>
</template> </template>
<template slot="main-container"> <template slot="main-container">
<el-table <el-table v-adaptive="{ bottomOffset: 60 }" v-loading="loading" :data="list" stripe height="100"
v-adaptive="{ bottomOffset: 60 }" @sort-change="handleSortByColumn" @selection-change="handleSelectionChange">
v-loading="loading" <!-- <el-table-column type="index" width="40" /> -->
:data="list" <el-table-column type="selection" width="55" :selectable="handleSelectable">
stripe </el-table-column>
height="100" <el-table-column prop="FileType" :label="$t('dictionary:signature:table:FileType')" show-overflow-tooltip
@sort-change="handleSortByColumn" sortable="custom" min-width="120px" />
> <el-table-column prop="Name" :label="$t('dictionary:signature:table:Name')" show-overflow-tooltip
<el-table-column type="index" width="40" /> sortable="custom" min-width="120px" />
<el-table-column <el-table-column prop="AttachmentCount" :label="$t('dictionary:signature:table:AttachmentCount')"
prop="FileType" show-overflow-tooltip sortable="custom" min-width="150px">
:label="$t('dictionary:signature:table:FileType')" <template slot-scope="scope">
show-overflow-tooltip <el-button type="text" @click.stop="openAttachment(scope.row, true)">
sortable="custom" {{ scope.row.AttachmentCount }}
/> <i class="el-icon-upload2" />
<el-table-column </el-button>
prop="Name" </template>
:label="$t('dictionary:signature:table:Name')" </el-table-column>
show-overflow-tooltip <el-table-column prop="SignViewMinimumMinutes" :label="$t('dictionary:signature:table:SignViewMinimumMinutes')"
sortable="custom" show-overflow-tooltip sortable="custom" min-width="200px" />
/> <el-table-column prop="CurrentStaffTrainDays" :label="$t('dictionary:signature:table:CurrentStaffTrainDays')"
show-overflow-tooltip sortable="custom" min-width="200px" />
<el-table-column <el-table-column prop="NewStaffTrainDays" :label="$t('dictionary:signature:table:NewStaffTrainDays')"
prop="SignViewMinimumMinutes" show-overflow-tooltip sortable="custom" min-width="200px" />
:label="$t('dictionary:signature:table:SignViewMinimumMinutes')" <el-table-column prop="NeedConfirmedUserTypes" :label="$t('dictionary:signature:table:NeedConfirmedUserTypes')"
show-overflow-tooltip show-overflow-tooltip>
sortable="custom"
min-width="110"
/>
<el-table-column
prop="NeedConfirmedUserTypes"
:label="$t('dictionary:signature:table:NeedConfirmedUserTypes')"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ {{
scope.row.NeedConfirmedUserTypes scope.row.NeedConfirmedUserTypes
@@ -84,12 +106,8 @@
}} }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="IsDeleted" :label="$t('dictionary:signature:table:IsDeleted')" show-overflow-tooltip
prop="IsDeleted" sortable="custom" min-width="120px">
:label="$t('dictionary:signature:table:IsDeleted')"
show-overflow-tooltip
sortable="custom"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsDeleted" type="danger">{{ <el-tag v-if="scope.row.IsDeleted" type="danger">{{
$fd('TrainingStatus', scope.row.IsDeleted) $fd('TrainingStatus', scope.row.IsDeleted)
@@ -99,103 +117,89 @@
}}</el-tag> }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="IsPublish" :label="$t('dictionary:signature:table:IsPublish')" show-overflow-tooltip
prop="DocUserSignType" sortable="custom" min-width="120px">
:label="$t('dictionary:signature:table:DocUserSignType')" <template slot-scope="scope">
show-overflow-tooltip <el-tag :type="scope.row.IsPublish ? 'primary' : 'danger'">{{
sortable="custom" $fd('AttachmentPublishStatus', scope.row.IsPublish)
min-width="90" }}</el-tag>
> </template>
</el-table-column>
<el-table-column prop="DocUserSignType" :label="$t('dictionary:signature:table:DocUserSignType')"
show-overflow-tooltip sortable="custom" min-width="150px">
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd('ReadingYesOrNo', Number(scope.row.DocUserSignType)) }} {{ $fd('ReadingYesOrNo', Number(scope.row.DocUserSignType)) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="CreateTime" :label="$t('dictionary:signature:table:CreateTime')" show-overflow-tooltip
prop="CreateTime" sortable="custom" min-width="180px" />
:label="$t('dictionary:signature:table:CreateTime')"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column :label="$t('common:action:action')" min-width="100"> <el-table-column :label="$t('common:action:action')" min-width="240px" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="handlePreview(scope.row)"> <el-button circle icon="el-icon-view" @click="handlePreview(scope.row)"
{{ $t('common:button:preview') }} :title="$t('common:button:preview')">
</el-button> </el-button>
<el-button type="text" @click="handleEdit(scope.row)"> <el-button circle icon="el-icon-edit-outline" :title="$t('common:button:edit')"
{{ $t('common:button:edit') }} @click="handleEdit(scope.row)">
</el-button> </el-button>
<el-button <el-button :disabled="scope.row.IsPublish" circle icon="el-icon-position"
:disabled="scope.row.IsDeleted" :title="$t('dictionary:signature:button:publish')" @click="publishSystemDocument([scope.row])">
type="text"
@click="handleRepeal(scope.row)"
>
{{ $t('common:button:revoke') }}
</el-button> </el-button>
<el-button type="text" @click="handleDelete(scope.row)"> <el-button :disabled="scope.row.IsDeleted" circle icon="el-icon-close" :title="$t('common:button:revoke')"
{{ $t('common:button:delete') }} @click="handleRepeal([scope.row])">
</el-button>
<el-button circle icon="el-icon-delete" :title="$t('common:button:delete')"
@click="handleDelete(scope.row)">
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页组件 -->
<pagination <pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
class="page" @pagination="getList" v-if="!isSystem" />
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
<!-- 新增/编辑 --> <!-- 新增/编辑 -->
<el-dialog <el-dialog v-if="editVisible" :visible.sync="editVisible" :close-on-click-modal="false" :title="title"
v-if="editVisible" width="600px" custom-class="base-dialog-wrapper">
:visible.sync="editVisible" <TemplateForm :data="currentRow" @closeDialog="closeDialog" @getList="getList" />
:close-on-click-modal="false"
:title="title"
width="600px"
custom-class="base-dialog-wrapper"
>
<TemplateForm
:data="currentRow"
@closeDialog="closeDialog"
@getList="getList"
/>
</el-dialog> </el-dialog>
<!--附件列表-->
<attachmentList v-if="config.visible" :config="config" :rowData="currentRow" :SystemDocumentId="SystemDocumentId"
@getList="getList" />
<!-- 预览文件 --> <!-- 预览文件 -->
<el-dialog <attachmentPreview :SystemDocumentId="SystemDocumentId" :visible.sync="perview_visible" :isView="true"
v-if="previewVisible" v-if="perview_visible" />
:visible.sync="previewVisible" <el-dialog v-if="previewVisible" :visible.sync="previewVisible" :title="$t('common:button:preview')"
:title="$t('common:button:preview')" :fullscreen="true" append-to-body custom-class="base-dialog-wrapper">
:fullscreen="true" <span style="position: fixed; left: 16px; top: 45px;cursor: pointer;font-size: 18px;color:#409EFF"
append-to-body @click.stop="openAttachment(currentRow)" v-if="currentRow.AttachmentCount">{{
custom-class="base-dialog-wrapper" $t('trials:signRecords:table:AttachmentCount') }} ({{
> currentRow.AttachmentCount }})</span>
<div <div class="base-modal-body" style="border: 2px solid #ccc; padding: 10px">
class="base-modal-body" <PreviewFile v-if="previewVisible" :file-path="currentPath" :file-type="currentType" />
style="border: 2px solid #ccc; padding: 10px"
>
<PreviewFile
v-if="previewVisible"
:file-path="currentPath"
:file-type="currentType"
/>
</div> </div>
</el-dialog> </el-dialog>
</template> </template>
</BaseContainer> </BaseContainer>
</template> </template>
<script> <script>
import { getSystemDocumentList, deleteSystemDocument } from '@/api/dictionary' import { getSystemDocumentList, deleteSystemDocument, publishSystemDocument, outLineSystemDocument, getSystemDocumentAttachmentList } from '@/api/dictionary'
import { userAbandonDoc } from '@/api/trials' import { userAbandonDoc, getTrialUserTypeList } from '@/api/trials'
import BaseContainer from '@/components/BaseContainer' import BaseContainer from '@/components/BaseContainer'
import Pagination from '@/components/Pagination' import Pagination from '@/components/Pagination'
import TemplateForm from './TemplateForm' import TemplateForm from './TemplateForm'
import attachmentList from './attachmentList'
import PreviewFile from '@/components/PreviewFile/index' import PreviewFile from '@/components/PreviewFile/index'
import attachmentPreview from './attachmentPreview'
const searchDataDefault = () => { const searchDataDefault = () => {
return { return {
FileTypeId: '', FileTypeId: '',
BeginCreateTime: null,
EndCreateTime: null,
IsDeleted: null,
DocUserSignType: null,
UserTypeId: null,
Name: '', Name: '',
PageIndex: 1, PageIndex: 1,
PageSize: 20, PageSize: 20,
@@ -203,8 +207,18 @@ const searchDataDefault = () => {
} }
export default { export default {
name: 'SignatureTemplate', name: 'SignatureTemplate',
components: { BaseContainer, Pagination, TemplateForm, PreviewFile }, components: { BaseContainer, Pagination, TemplateForm, PreviewFile, attachmentList, attachmentPreview },
dicts: ['Sys_Document'], dicts: ['Sys_Document'],
props: {
isSystem: {
type: Boolean,
default: false
},
TITLE: {
type: String,
default: ''
}
},
data() { data() {
return { return {
searchData: searchDataDefault(), searchData: searchDataDefault(),
@@ -217,12 +231,82 @@ export default {
previewVisible: false, previewVisible: false,
title: '', title: '',
loading: false, loading: false,
userTypeOptions: [],
timeList: [],
attachment_Visible: false,
SystemDocumentId: null,
config: {
visible: false,
title: this.$t('dictionary:signature:attachmentList:title'),
width: '800px',
},
multipleSelection: [],
perview_visible: false
} }
}, },
mounted() { mounted() {
this.getList() this.getList()
this.getUserType()
}, },
methods: { methods: {
handleSelectable(row) {
return !row.IsDeleted || !row.IsPublish
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
// 发布
async publishSystemDocument(list) {
try {
let confirm = await this.$confirm(this.$t('dictionary:signature:confirm:publishFile'), {
type: 'warning',
distinguishCancelAndClose: true,
})
if (!confirm) return false
let arr = list.filter(item => !item.IsPublish)
if (arr.length <= 0) return this.getList()
let data = {
ids: arr.map(item => item.Id)
}
this.loading = true
let res = await publishSystemDocument(data)
this.loading = false
if (res.IsSuccess) {
this.getList()
}
} catch (err) {
this.loading = false
console.log(err)
}
},
openAttachment(row, isList = false) {
this.SystemDocumentId = row.Id
this.currentRow = { ...row }
if (!isList) {
this.perview_visible = true
} else {
this.config.visible = true
}
},
changeTimeList() {
if (this.timeList) {
this.searchData.BeginCreateTime = this.timeList[0]
this.searchData.EndCreateTime = this.timeList[1]
} else {
this.searchData.BeginCreateTime = null
this.searchData.EndCreateTime = null
}
},
// 获取用户类型下拉数据
getUserType() {
getTrialUserTypeList()
.then((res) => {
this.userTypeOptions = res.Result
})
.catch(() => {
this.loading = false
})
},
// 获取系统文件数据 // 获取系统文件数据
getList() { getList() {
this.loading = true this.loading = true
@@ -252,12 +336,23 @@ export default {
this.editVisible = true this.editVisible = true
}, },
// 预览 // 预览
handlePreview(row) { async handlePreview(row) {
const { Name, FullFilePath } = row const { Name, FullFilePath } = row
this.currentPath = FullFilePath this.currentPath = FullFilePath
this.currentType = row.Name this.currentType = row.Name
? Name.substring(Name.lastIndexOf('.') + 1).toLocaleLowerCase() ? Name.substring(Name.lastIndexOf('.') + 1).toLocaleLowerCase()
: '' : ''
let searchData = {
OffLine: false,
PageIndex: 1,
PageSize: 1000,
Asc: false,
SortField: null,
SystemDocumentId: row.Id
}
this.currentRow = Object.assign({}, row)
let res = await getSystemDocumentAttachmentList(searchData)
this.currentRow.AttachmentCount = res.Result.CurrentPageData.length
this.previewVisible = true this.previewVisible = true
}, },
// 编辑 // 编辑
@@ -273,8 +368,13 @@ export default {
distinguishCancelAndClose: true, distinguishCancelAndClose: true,
}) })
.then(() => { .then(() => {
let arr = row.filter(item => !item.IsDeleted)
if (arr.length <= 0) return this.getList()
let data = {
Ids: arr.map(item => item.Id)
}
this.loading = true this.loading = true
userAbandonDoc(row.Id, true) outLineSystemDocument(data)
.then((res) => { .then((res) => {
this.loading = false this.loading = false
if (res.IsSuccess) { if (res.IsSuccess) {
@@ -288,7 +388,7 @@ export default {
this.loading = false this.loading = false
}) })
}) })
.catch(() => {}) .catch(() => { })
}, },
// 删除 // 删除
handleDelete(row) { handleDelete(row) {
@@ -318,6 +418,7 @@ export default {
// 关闭弹窗 // 关闭弹窗
closeDialog() { closeDialog() {
this.editVisible = false this.editVisible = false
this.attachment_Visible = false
}, },
// 重置 // 重置
handleReset() { handleReset() {
@@ -37,7 +37,6 @@
</el-form-item> </el-form-item>
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus"
style="float: right" style="float: right"
size="small" size="small"
@click="handleAdd" @click="handleAdd"
@@ -121,7 +120,7 @@
sortable="custom" sortable="custom"
/> />
<el-table-column :label="$t('common:action:action')"> <el-table-column :label="$t('common:action:action')" width="300">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="PreviewFile(scope.row)"> <el-button type="text" @click="PreviewFile(scope.row)">
{{ $t('common:button:preview') }} {{ $t('common:button:preview') }}
+3 -15
View File
@@ -2,13 +2,13 @@
<div class="app-container my_menu" > <div class="app-container my_menu" >
<el-form :inline="true"> <el-form :inline="true">
<el-form-item label="模块"> <el-form-item label="模块">
<el-select v-model="queryParams.ModuleTypeId" placeholder="模块" clearable size="small"> <el-select v-model="queryParams.ModuleTypeId" placeholder="模块" clearable >
<el-option v-for="item of dict.type.ModuleType" :key="`ModuleTypeId${item.value}`" :value="item.value" :label="item.raw.ValueCN" /> <el-option v-for="item of dict.type.ModuleType" :key="`ModuleTypeId${item.value}`" :value="item.value" :label="item.raw.ValueCN" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button> <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div> <div>
@@ -66,42 +66,30 @@
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-if="scope.row.ModuleTypeValueCN && scope.row.ObjectTypeValueCN && scope.row.OptTypeValueCN && scope.row.ChildrenTypeValueCN " v-if="scope.row.ModuleTypeValueCN && scope.row.ObjectTypeValueCN && scope.row.OptTypeValueCN && scope.row.ChildrenTypeValueCN "
size="mini"
type="text" type="text"
icon="el-icon-top"
@click="handleUpMove(scope.row)" @click="handleUpMove(scope.row)"
>上移</el-button> >上移</el-button>
<el-button <el-button
size="mini"
type="text" type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
>修改</el-button> >修改</el-button>
<el-button <el-button
v-if="!(scope.row.ModuleTypeValueCN && scope.row.ObjectTypeValueCN && scope.row.OptTypeValueCN && scope.row.ChildrenTypeValueCN)" v-if="!(scope.row.ModuleTypeValueCN && scope.row.ObjectTypeValueCN && scope.row.OptTypeValueCN && scope.row.ChildrenTypeValueCN)"
size="mini"
type="text" type="text"
icon="el-icon-plus"
@click="handleAdd(scope.row)" @click="handleAdd(scope.row)"
>新增</el-button> >新增</el-button>
<el-button <el-button
v-if="scope.row.ModuleTypeValueCN && scope.row.ObjectTypeValueCN && scope.row.OptTypeValueCN && scope.row.ChildrenTypeValueCN " v-if="scope.row.ModuleTypeValueCN && scope.row.ObjectTypeValueCN && scope.row.OptTypeValueCN && scope.row.ChildrenTypeValueCN "
size="mini"
type="text" type="text"
icon="el-icon-plus"
@click="handleChildren(scope.row)" @click="handleChildren(scope.row)"
>Children</el-button> >Children</el-button>
<el-button <el-button
v-if="scope.row.ModuleTypeValueCN && scope.row.ObjectTypeValueCN && scope.row.OptTypeValueCN && scope.row.ChildrenTypeValueCN " v-if="scope.row.ModuleTypeValueCN && scope.row.ObjectTypeValueCN && scope.row.OptTypeValueCN && scope.row.ChildrenTypeValueCN "
size="mini"
type="text" type="text"
icon="el-icon-plus"
@click="handleCopy(scope.row)" @click="handleCopy(scope.row)"
>复制到</el-button> >复制到</el-button>
<el-button <el-button
size="mini"
type="text" type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
>删除</el-button> >删除</el-button>
</template> </template>
@@ -1,7 +1,7 @@
<template> <template>
<box-content> <box-content>
<div class="search"> <div class="search">
<el-form :inline="true" size="small" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<!-- CRO Name --> <!-- CRO Name -->
<el-form-item :label="$t('institutions:cros:label:croName')"> <el-form-item :label="$t('institutions:cros:label:croName')">
<el-input v-model="searchData.CROName" style="width: 100px" /> <el-input v-model="searchData.CROName" style="width: 100px" />
@@ -21,10 +21,7 @@
</el-form> </el-form>
<span style="margin-left: auto"> <span style="margin-left: auto">
<el-button <el-button
size="small"
type="primary" type="primary"
style="margin-left: auto"
icon="el-icon-plus"
@click="handleAddCro" @click="handleAddCro"
>{{ $t('common:button:new') }}</el-button >{{ $t('common:button:new') }}</el-button
> >
@@ -77,17 +74,17 @@
<el-table-column :label="$t('common:action:action')" min-width="200"> <el-table-column :label="$t('common:action:action')" min-width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
circle type="text"
icon="el-icon-edit-outline"
:title="$t('common:button:edit')"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
/> >
{{ $t('common:button:edit') }}
</el-button>
<el-button <el-button
circle type="text"
icon="el-icon-delete"
:title="$t('common:button:delete')"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
/> >
{{ $t('common:button:delete') }}
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -1,7 +1,7 @@
<template> <template>
<box-content> <box-content>
<div class="search"> <div class="search">
<el-form :inline="true" size="small" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<!-- Hospital --> <!-- Hospital -->
<el-form-item :label="$t('institutions:hospitals:label:hospital')"> <el-form-item :label="$t('institutions:hospitals:label:hospital')">
<el-input v-model="searchData.HospitalName" style="width:100px;" /> <el-input v-model="searchData.HospitalName" style="width:100px;" />
@@ -29,10 +29,7 @@
</el-form> </el-form>
<span style="margin-left:auto;"> <span style="margin-left:auto;">
<el-button <el-button
size="small"
type="primary" type="primary"
style="margin-left:auto;"
icon="el-icon-plus"
@click="handleAddHospital" @click="handleAddHospital"
>{{ $t('common:button:new') }}</el-button> >{{ $t('common:button:new') }}</el-button>
</span> </span>
@@ -132,17 +129,17 @@
<el-table-column :label="$t('common:action:action')" width="150"> <el-table-column :label="$t('common:action:action')" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
circle type="text"
icon="el-icon-edit-outline"
:title="$t('common:button:edit')"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
/> >
{{ $t('common:button:edit') }}
</el-button>
<el-button <el-button
circle type="text"
icon="el-icon-delete"
:title="$t('common:button:delete')"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
/> >
{{ $t('common:button:delete') }}
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -1,7 +1,7 @@
<template> <template>
<box-content> <box-content>
<div class="search"> <div class="search">
<el-form :inline="true" size="small" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<!-- Site Name --> <!-- Site Name -->
<el-form-item :label="$t('institutions:sites:label:siteName')"> <el-form-item :label="$t('institutions:sites:label:siteName')">
<el-input v-model="searchData.SiteName" style="width: 120px" /> <el-input v-model="searchData.SiteName" style="width: 120px" />
@@ -34,16 +34,13 @@
<div style="margin-left: auto"> <div style="margin-left: auto">
<el-button <el-button
type="primary" type="primary"
size="small"
icon="el-icon-plus" icon="el-icon-plus"
@click="handleAddSystemSite" @click="handleAddSystemSite"
>{{ $t("trial:dictionary:institutions:site:addSystemSite") }} >{{ $t("trial:dictionary:institutions:site:addSystemSite") }}
</el-button> </el-button>
<el-button <el-button
type="primary" type="primary"
size="small"
style="margin-left: 10px" style="margin-left: 10px"
icon="el-icon-plus"
@click="handleAddSite" @click="handleAddSite"
> >
{{ $t('common:button:new') }} {{ $t('common:button:new') }}
@@ -173,17 +170,17 @@
<el-table-column :label="$t('common:action:action')" fixed="right" width="150"> <el-table-column :label="$t('common:action:action')" fixed="right" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
circle type="text"
icon="el-icon-edit-outline"
:title="$t('common:button:edit')"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
/> >
{{ $t('common:button:edit') }}
</el-button>
<el-button <el-button
circle type="text"
icon="el-icon-delete"
:title="$t('common:button:delete')"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
/> >
{{ $t('common:button:delete') }}
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -1,7 +1,7 @@
<template> <template>
<box-content> <box-content>
<div class="search"> <div class="search">
<el-form :inline="true" size="small" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<!-- Sponsor Name --> <!-- Sponsor Name -->
<el-form-item :label="$t('institutions:sponsors:label:sponsorName')"> <el-form-item :label="$t('institutions:sponsors:label:sponsorName')">
<el-input v-model="searchData.SponsorName" style="width: 100px" /> <el-input v-model="searchData.SponsorName" style="width: 100px" />
@@ -21,10 +21,8 @@
</el-form> </el-form>
<span style="margin-left: auto"> <span style="margin-left: auto">
<el-button <el-button
size="small"
type="primary" type="primary"
style="margin-left: auto" style="margin-left: auto"
icon="el-icon-plus"
@click="handleAddSponsor" @click="handleAddSponsor"
>{{ $t('common:button:new') }}</el-button >{{ $t('common:button:new') }}</el-button
> >
@@ -77,17 +75,17 @@
<el-table-column :label="$t('common:action:action')" min-width="150"> <el-table-column :label="$t('common:action:action')" min-width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
circle type="text"
icon="el-icon-edit-outline"
:title="$t('common:button:edit')"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
/> >
{{ $t('common:button:edit') }}
</el-button>
<el-button <el-button
circle type="text"
icon="el-icon-delete"
:title="$t('common:button:delete')"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
/> >
{{ $t('common:button:delete') }}
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -2,7 +2,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<el-form-item label="字典表名称:"> <el-form-item label="字典表名称:">
<el-input v-model="searchData.Code" clearable style="width:120px;" /> <el-input v-model="searchData.Code" clearable style="width:120px;" />
</el-form-item> </el-form-item>
@@ -12,12 +12,24 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleReset">Reset</el-button> <el-button
<el-button type="primary" @click="handleSearch">Search</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-form-item> </el-form-item>
</el-form> </el-form>
<span style="margin-left:auto"> <span style="margin-left:auto">
<el-button type="primary" size="mini" @click="handleAdd">新建</el-button> <el-button type="primary" @click="handleAdd">新建</el-button>
</span> </span>
</div> </div>
<el-table <el-table
@@ -68,25 +80,22 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="300" fixed="right"> <el-table-column label="操作" width="200" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
编辑 编辑
</el-button> </el-button>
<el-button <el-button
type="success" type="text"
size="mini"
@click="handleChild(scope.row)" @click="handleChild(scope.row)"
> >
子项 子项
</el-button> </el-button>
<el-button <el-button
type="danger" type="text"
size="mini"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
删除 删除
@@ -63,18 +63,16 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="300" fixed="right"> <el-table-column label="操作" width="150" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
编辑 编辑
</el-button> </el-button>
<el-button <el-button
type="danger" type="text"
size="mini"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
删除 删除
@@ -2,7 +2,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<el-form-item label="字典表名称:"> <el-form-item label="字典表名称:">
<el-input v-model="searchData.Code" clearable style="width:120px;" /> <el-input v-model="searchData.Code" clearable style="width:120px;" />
</el-form-item> </el-form-item>
@@ -12,12 +12,24 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleReset">Reset</el-button> <el-button
<el-button type="primary" @click="handleSearch">Search</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-form-item> </el-form-item>
</el-form> </el-form>
<span style="margin-left:auto"> <span style="margin-left:auto">
<el-button type="primary" size="mini" @click="handleAdd">新建</el-button> <el-button type="primary" @click="handleAdd">新建</el-button>
</span> </span>
</div> </div>
<el-table <el-table
@@ -68,25 +80,22 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="300" fixed="right"> <el-table-column label="操作" width="200" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
编辑 编辑
</el-button> </el-button>
<el-button <el-button
type="success" type="text"
size="mini"
@click="handleChild(scope.row)" @click="handleChild(scope.row)"
> >
子项 子项
</el-button> </el-button>
<el-button <el-button
type="danger" type="text"
size="mini"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
删除 删除
@@ -183,16 +183,13 @@
<el-button <el-button
size="small" size="small"
type="primary" type="primary"
icon="el-icon-plus"
@click="handleAdd" @click="handleAdd"
>{{ $t('common:button:new') }}</el-button> >{{ $t('common:button:new') }}</el-button>
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 删除 --> <!-- 删除 -->
<el-button <el-button
size="mini"
type="text" type="text"
icon="el-icon-delete"
@click="handleDelete(scope.$index)" @click="handleDelete(scope.$index)"
>{{ $t('common:button:delete') }}</el-button> >{{ $t('common:button:delete') }}</el-button>
</template> </template>
@@ -65,15 +65,13 @@
<el-table-column label="操作" width="300" fixed="right"> <el-table-column label="操作" width="300" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
编辑 编辑
</el-button> </el-button>
<el-button <el-button
type="danger" type="text"
size="mini"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
删除 删除
@@ -2,7 +2,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<el-form-item label="字典表名称:"> <el-form-item label="字典表名称:">
<el-input v-model="searchData.Code" clearable style="width:120px;" /> <el-input v-model="searchData.Code" clearable style="width:120px;" />
</el-form-item> </el-form-item>
@@ -15,13 +15,25 @@
<el-input v-model="searchData.KeyInfo" clearable style="width:120px;" /> <el-input v-model="searchData.KeyInfo" clearable style="width:120px;" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleReset">Reset</el-button> <el-button
<el-button type="primary" @click="handleSearch">Search</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-form-item> </el-form-item>
</el-form> </el-form>
<span style="margin-left:auto"> <span style="margin-left:auto">
<el-button type="primary" size="mini" @click="handleAdd">新建</el-button> <el-button type="primary" @click="handleAdd">新建</el-button>
<el-button type="primary" size="mini" @click="handleBatchAdd">批量新建</el-button> <el-button type="primary" @click="handleBatchAdd">批量新建</el-button>
</span> </span>
</div> </div>
<el-table <el-table
@@ -86,22 +98,19 @@
<el-table-column label="操作" width="300" fixed="right"> <el-table-column label="操作" width="300" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
编辑 编辑
</el-button> </el-button>
<el-button <el-button
type="success" type="text"
size="mini"
@click="handleChild(scope.row)" @click="handleChild(scope.row)"
> >
子项 子项
</el-button> </el-button>
<el-button <el-button
type="danger" type="text"
size="mini"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
删除 删除
@@ -2,7 +2,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<el-form-item label="字典表名称:"> <el-form-item label="字典表名称:">
<el-input v-model="searchData.Code" clearable style="width:120px;" /> <el-input v-model="searchData.Code" clearable style="width:120px;" />
</el-form-item> </el-form-item>
@@ -12,13 +12,25 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleReset">Reset</el-button> <el-button
<el-button type="primary" @click="handleSearch">Search</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-form-item> </el-form-item>
</el-form> </el-form>
<span style="margin-left:auto"> <span style="margin-left:auto">
<el-button type="primary" size="mini" @click="handleSetting">配置字典分组</el-button> <el-button type="primary" @click="handleSetting">配置字典分组</el-button>
<el-button type="primary" size="mini" @click="handleAdd">新建</el-button> <el-button type="primary" @click="handleAdd">新建</el-button>
</span> </span>
</div> </div>
<el-table <el-table
@@ -72,22 +84,19 @@
<el-table-column label="操作" width="300" fixed="right"> <el-table-column label="操作" width="300" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
编辑 编辑
</el-button> </el-button>
<el-button <el-button
type="success" type="text"
size="mini"
@click="handleChild(scope.row)" @click="handleChild(scope.row)"
> >
子项 子项
</el-button> </el-button>
<el-button <el-button
type="danger" type="text"
size="mini"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
删除 删除
@@ -2,7 +2,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<el-form-item label="Code:"> <el-form-item label="Code:">
<el-input v-model="searchData.Code" clearable style="width:120px;" /> <el-input v-model="searchData.Code" clearable style="width:120px;" />
</el-form-item> </el-form-item>
@@ -10,12 +10,24 @@
<el-input v-model="searchData.KeyName" clearable style="width:120px;" /> <el-input v-model="searchData.KeyName" clearable style="width:120px;" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleReset">Reset</el-button> <el-button
<el-button type="primary" @click="handleSearch">Search</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-form-item> </el-form-item>
</el-form> </el-form>
<span style="margin-left:auto"> <span style="margin-left:auto">
<el-button type="primary" size="mini" @click="handleAdd">New</el-button> <el-button type="primary" @click="handleAdd">New</el-button>
</span> </span>
</div> </div>
<el-table <el-table
@@ -50,18 +62,16 @@
<el-table-column label="Action" width="200" fixed="right"> <el-table-column label="Action" width="200" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
Edit 编辑
</el-button> </el-button>
<el-button <el-button
type="danger" type="text"
size="mini"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
Delete 删除
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
@@ -2,7 +2,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<el-form-item :label="$t('dictionary:browser:search:title')"> <el-form-item :label="$t('dictionary:browser:search:title')">
<el-input v-model="searchData.Title" style="width: 100px" /> <el-input v-model="searchData.Title" style="width: 100px" />
</el-form-item> </el-form-item>
@@ -23,7 +23,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<span style="margin-left: auto"> <span style="margin-left: auto">
<el-button type="primary" size="mini" @click="handleAdd"> <el-button type="primary" @click="handleAdd">
{{ $t("dictionary:browser:button:add") }} {{ $t("dictionary:browser:button:add") }}
</el-button> </el-button>
</span> </span>
@@ -2,7 +2,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<!-- Group --> <!-- Group -->
<el-form-item :label="$t('template:anonymization:label:group')"> <el-form-item :label="$t('template:anonymization:label:group')">
<el-input v-model="searchData.Group" clearable style="width:120px;" /> <el-input v-model="searchData.Group" clearable style="width:120px;" />
@@ -33,7 +33,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<span style="margin-left:auto"> <span style="margin-left:auto">
<el-button type="primary" size="mini" @click="handleAdd">{{ $t('common:button:new') }}</el-button> <el-button type="primary" @click="handleAdd">{{ $t('common:button:new') }}</el-button>
</span> </span>
</div> </div>
@@ -107,15 +107,13 @@
<el-table-column :label="$t('common:action:action')" width="200" fixed="right"> <el-table-column :label="$t('common:action:action')" width="200" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
{{ $t('common:button:edit') }} {{ $t('common:button:edit') }}
</el-button> </el-button>
<el-button <el-button
type="danger" type="text"
size="mini"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
{{ $t('common:button:delete') }} {{ $t('common:button:delete') }}
@@ -2,7 +2,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<!-- 临床数据名称 --> <!-- 临床数据名称 -->
<el-form-item :label="$t('trials:processCfg:title:clinicalDataCfg')"> <el-form-item :label="$t('trials:processCfg:title:clinicalDataCfg')">
<el-input v-model="searchData.ClinicalDataSetName" /> <el-input v-model="searchData.ClinicalDataSetName" />
@@ -44,7 +44,7 @@
</el-form> </el-form>
<span style="margin-left:auto"> <span style="margin-left:auto">
<!-- 新增 --> <!-- 新增 -->
<el-button type="primary" size="mini" @click="handleAdd">{{ $t('common:button:new') }}</el-button> <el-button type="primary" @click="handleAdd">{{ $t('common:button:new') }}</el-button>
</span> </span>
</div> </div>
@@ -158,12 +158,11 @@
min-width="140" min-width="140"
/> />
<el-table-column :label="$t('common:action:action')" min-width="350" fixed="right"> <el-table-column :label="$t('common:action:action')" min-width="250" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 问题配置 --> <!-- 问题配置 -->
<el-button <el-button
type="primary" type="text"
size="mini"
:disabled="scope.row.ClinicalUploadType !== 2" :disabled="scope.row.ClinicalUploadType !== 2"
@click="handleConfigQuestion(scope.row)" @click="handleConfigQuestion(scope.row)"
> >
@@ -172,8 +171,7 @@
<!-- 下载 --> <!-- 下载 -->
<el-button <el-button
v-if="$i18n.locale === 'zh'" v-if="$i18n.locale === 'zh'"
type="primary" type="text"
size="mini"
:disabled="!scope.row.FileName" :disabled="!scope.row.FileName"
@click="handleDownloadTpl(scope.row.Path)" @click="handleDownloadTpl(scope.row.Path)"
> >
@@ -182,8 +180,7 @@
<!-- 下载 --> <!-- 下载 -->
<el-button <el-button
v-else v-else
type="primary" type="text"
size="mini"
:disabled="!scope.row.EnFileName" :disabled="!scope.row.EnFileName"
@click="handleDownloadTpl(scope.row.EnPath)" @click="handleDownloadTpl(scope.row.EnPath)"
> >
@@ -191,16 +188,14 @@
</el-button> </el-button>
<!-- 编辑 --> <!-- 编辑 -->
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
{{ $t('common:action:edit') }} {{ $t('common:action:edit') }}
</el-button> </el-button>
<!-- 删除 --> <!-- 删除 -->
<el-button <el-button
type="danger" type="text"
size="mini"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
{{ $t('common:button:delete') }} {{ $t('common:button:delete') }}
@@ -68,13 +68,12 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 配置 --> <!-- 配置 -->
<el-button size="small" :disabled="isCompleteConfig" type="primary" @click="openChildren(scope.row)"> <el-button :disabled="isCompleteConfig" type="text" @click="openChildren(scope.row)">
{{ $t('dictionary:template:criterionDictionary:button:config') }} {{ $t('dictionary:template:criterionDictionary:button:config') }}
</el-button> </el-button>
<!-- 删除 --> <!-- 删除 -->
<el-button <el-button
type="danger" type="text"
size="small"
:disabled="isCompleteConfig" :disabled="isCompleteConfig"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
@@ -108,7 +107,7 @@
@click="handleSave" @click="handleSave"
v-loading="loading" v-loading="loading"
> >
保存 {{ $t('common:button:save')}}
</el-button> </el-button>
</div> </div>
<el-table <el-table
@@ -227,7 +226,8 @@ export default {
}) })
}, },
handleAdd() { handleAdd() {
this.drawer_cfg2 = { drawerChild: true, title: '选择标准字典' } //
this.drawer_cfg2 = { drawerChild: true, title: this.$t('template:criterionDictionary:title:selectDictionary') }
this.config.visible = true this.config.visible = true
this.$nextTick(() => { this.$nextTick(() => {
var a = this.dicList.filter(v => { var a = this.dicList.filter(v => {
@@ -262,9 +262,10 @@ export default {
}, },
handleDelete(row) { handleDelete(row) {
this.loading = true this.loading = true
this.$confirm('确定要删除该系统标准字典吗?').then(() => { //
this.$confirm(this.$t('template:criterionDictionary:message:msg1')).then(() => {
deleteSystemCriterionDictionary({Id: row.Id}).then(res => { deleteSystemCriterionDictionary({Id: row.Id}).then(res => {
this.$message.success('删除成功') this.$message.success(this.$t('common:message:deletedSuccessfully'))
this.loading = false this.loading = false
this.getList() this.getList()
}).catch(() => { this.loading = false }) }).catch(() => { this.loading = false })
@@ -10,7 +10,7 @@
@click="handleAdd" @click="handleAdd"
style="margin-right: 10px;" style="margin-right: 10px;"
> >
配置 {{ $t('dictionary:template:criterionDictionary:button:config') }}
</el-button> </el-button>
</div> </div>
</div> </div>
@@ -24,39 +24,44 @@
> >
<el-table-column <el-table-column
prop="" prop=""
label="序号" label=""
width="50" width="50"
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.$index + 1}} {{scope.$index + 1}}
</template> </template>
</el-table-column> </el-table-column>
<!-- 键值 -->
<el-table-column <el-table-column
prop="Code" prop="Code"
label="键值" :label="$t('dictionary:template:criterionDictionary:table:code')"
show-overflow-tooltip show-overflow-tooltip
/> />
<!-- 中文值 -->
<el-table-column <el-table-column
prop="ValueCN" prop="ValueCN"
label="中文值" :label="$t('dictionary:template:criterionDictionary:table:valueCN')"
show-overflow-tooltip show-overflow-tooltip
> >
</el-table-column> </el-table-column>
<!-- 英文值 -->
<el-table-column <el-table-column
prop="Value" prop="Value"
label="英文值" :label="$t('dictionary:template:criterionDictionary:table:value')"
show-overflow-tooltip show-overflow-tooltip
> >
</el-table-column> </el-table-column>
<!-- 描述 -->
<el-table-column <el-table-column
prop="Description" prop="Description"
label="描述" :label="$t('dictionary:template:criterionDictionary:table:description')"
show-overflow-tooltip show-overflow-tooltip
> >
</el-table-column> </el-table-column>
<!-- 分组 -->
<el-table-column <el-table-column
prop="Description" prop="Description"
label="分组" :label="$t('dictionary:template:criterionDictionary:table:group')"
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
@@ -84,7 +89,7 @@
@click="handleSave" @click="handleSave"
v-loading="loading" v-loading="loading"
> >
保存 {{ $t('common:button:save')}}
</el-button> </el-button>
</div> </div>
<el-table <el-table
@@ -100,27 +105,31 @@
type="selection" type="selection"
width="55"> width="55">
</el-table-column> </el-table-column>
<!-- 键值 -->
<el-table-column <el-table-column
prop="raw.Code" prop="raw.Code"
label="键值" :label="$t('dictionary:template:criterionDictionary:table:code')"
show-overflow-tooltip show-overflow-tooltip
> >
</el-table-column> </el-table-column>
<!-- 中文值 -->
<el-table-column <el-table-column
prop="raw.ValueCN" prop="raw.ValueCN"
label="中文值" :label="$t('dictionary:template:criterionDictionary:table:valueCN')"
show-overflow-tooltip show-overflow-tooltip
> >
</el-table-column> </el-table-column>
<!-- 英文值 -->
<el-table-column <el-table-column
prop="raw.Value" prop="raw.Value"
label="英文值" :label="$t('dictionary:template:criterionDictionary:table:value')"
show-overflow-tooltip show-overflow-tooltip
> >
</el-table-column> </el-table-column>
<!-- 描述 -->
<el-table-column <el-table-column
prop="raw.Description" prop="raw.Description"
label="描述" :label="$t('dictionary:template:criterionDictionary:table:description')"
show-overflow-tooltip show-overflow-tooltip
> >
</el-table-column> </el-table-column>
@@ -152,7 +161,7 @@ export default {
activeName: '0', activeName: '0',
addOrEdit: { visible: false, title: '' }, addOrEdit: { visible: false, title: '' },
preview: { visible: false, title: 'eCRF预览' }, preview: { visible: false, title: 'eCRF预览' },
config: { visible: false, title: '标准字典值' }, config: { visible: false, title: this.$t('template:criterionDictionary:message:msg2') }, //
selectedList: [] selectedList: []
} }
}, },
@@ -167,7 +176,7 @@ export default {
CrterionDictionaryGroup: v CrterionDictionaryGroup: v
}).then(res => { }).then(res => {
this.loading = false this.loading = false
this.$message.success('设置成功') this.$message.success(this.$t('common:message:savedSuccessfully'))
this.getList() this.getList()
}).catch(() => {this.loading = false}) }).catch(() => {this.loading = false})
}, },
@@ -206,30 +206,27 @@
<el-table-column <el-table-column
prop="" prop=""
:label="$t('common:action:action')" :label="$t('common:action:action')"
width="250" width="200"
show-overflow-tooltip show-overflow-tooltip
fixed="right" fixed="right"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-if="Object.keys(data).length > 0 && !(data.IsCompleteConfig || data.IsBeUsed)" v-if="Object.keys(data).length > 0 && !(data.IsCompleteConfig || data.IsBeUsed)"
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
{{ $t('trials:readingUnit:qsList:title:edit') }} {{ $t('trials:readingUnit:qsList:title:edit') }}
</el-button> </el-button>
<el-button <el-button
v-else v-else
type="primary" type="text"
size="mini"
@click="handleLook(scope.row)" @click="handleLook(scope.row)"
> >
{{ $t('trials:readingUnit:qsList:title:view') }} {{ $t('trials:readingUnit:qsList:title:view') }}
</el-button> </el-button>
<el-button <el-button
type="primary" type="text"
size="mini"
:disabled="!(scope.row.Type === 'table' || scope.row.Type === 'basicTable')" :disabled="!(scope.row.Type === 'table' || scope.row.Type === 'basicTable')"
@click="handleConfig(scope.row)" @click="handleConfig(scope.row)"
> >
@@ -237,8 +234,7 @@
</el-button> </el-button>
<el-button <el-button
v-if="Object.keys(data).length > 0 && !(data.IsCompleteConfig || data.IsBeUsed)" v-if="Object.keys(data).length > 0 && !(data.IsCompleteConfig || data.IsBeUsed)"
type="danger" type="text"
size="mini"
:disabled="scope.row.IsEnable" :disabled="scope.row.IsEnable"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
@@ -2,7 +2,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<el-form-item <el-form-item
:label="$t('trials:auditRecord:table:criterion')" :label="$t('trials:auditRecord:table:criterion')"
> >
@@ -75,7 +75,7 @@
</el-form> </el-form>
<span style="margin-left:auto"> <span style="margin-left:auto">
<!-- 添加 --> <!-- 添加 -->
<el-button type="primary" size="mini" @click="handleAdd">{{$t('common:button:new')}}</el-button> <el-button type="primary" @click="handleAdd">{{$t('common:button:new')}}</el-button>
</span> </span>
</div> </div>
@@ -173,36 +173,32 @@
{{ $fd('YesOrNo', scope.row.IseCRFShowInDicomReading) }} {{ $fd('YesOrNo', scope.row.IseCRFShowInDicomReading) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('common:action:action')" min-width="200px"> <el-table-column :label="$t('common:action:action')" min-width="220px">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 编辑 --> <!-- 编辑 -->
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
{{ $t('common:button:edit') }} {{ $t('common:button:edit') }}
</el-button> </el-button>
<!-- eCRF --> <!-- eCRF -->
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleConfig(scope.row)" @click="handleConfig(scope.row)"
> >
{{ $t('dictionary:template:criterionConfig:button:eCRF') }} {{ $t('dictionary:template:criterionConfig:button:eCRF') }}
</el-button> </el-button>
<!-- 基础数据 --> <!-- 基础数据 -->
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleBaseDataConfig(scope.row)" @click="handleBaseDataConfig(scope.row)"
> >
{{ $t('dictionary:template:criterionConfig:button:basicData') }} {{ $t('dictionary:template:criterionConfig:button:basicData') }}
</el-button> </el-button>
<!-- 删除 --> <!-- 删除 -->
<el-button <el-button
type="danger" type="text"
size="mini"
:disabled="scope.row.IsCompleteConfig" :disabled="scope.row.IsCompleteConfig"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
@@ -2,7 +2,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<!-- Group --> <!-- Group -->
<el-form-item :label="$t('template:anonymization:label:group')"> <el-form-item :label="$t('template:anonymization:label:group')">
<el-input v-model="searchData.Group" clearable style="width:120px;" /> <el-input v-model="searchData.Group" clearable style="width:120px;" />
@@ -33,7 +33,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<span style="margin-left:auto"> <span style="margin-left:auto">
<el-button type="primary" size="mini" @click="handleAdd">{{ $t('common:button:new') }}</el-button> <el-button type="primary" @click="handleAdd">{{ $t('common:button:new') }}</el-button>
</span> </span>
</div> </div>
@@ -107,15 +107,13 @@
<el-table-column :label="$t('common:action:action')" width="200" fixed="right"> <el-table-column :label="$t('common:action:action')" width="200" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
{{ $t('common:action:edit') }} {{ $t('common:action:edit') }}
</el-button> </el-button>
<el-button <el-button
type="danger" type="text"
size="mini"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
{{ $t('common:button:delete') }} {{ $t('common:button:delete') }}
@@ -2,7 +2,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<!-- 问题名称 --> <!-- 问题名称 -->
<el-form-item :label="$t('trials:MIMqcCfg:table:questionName')"> <el-form-item :label="$t('trials:MIMqcCfg:table:questionName')">
<el-input v-model="searchData.QuestionName" clearable style="width:120px;" /> <el-input v-model="searchData.QuestionName" clearable style="width:120px;" />
@@ -54,7 +54,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<span style="margin-left:auto"> <span style="margin-left:auto">
<el-button type="primary" size="mini" @click="handleAdd"> <el-button type="primary" @click="handleAdd">
{{ $t('common:button:new') }} {{ $t('common:button:new') }}
</el-button> </el-button>
</span> </span>
@@ -190,18 +190,16 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('common:action:action')" width="200" fixed="right"> <el-table-column :label="$t('common:action:action')" width="150" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
{{ $t('common:button:edit') }} {{ $t('common:button:edit') }}
</el-button> </el-button>
<el-button <el-button
type="danger" type="text"
size="mini"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
{{ $t('common:button:delete') }} {{ $t('common:button:delete') }}
@@ -216,17 +216,17 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
circle type="text"
:title="$t('common:button:edit')"
icon="el-icon-edit-outline"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
/> >
{{ $t('common:button:edit') }}
</el-button>
<el-button <el-button
circle type="text"
:title="$t('common:button:delete')"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
/> >
{{ $t('common:button:delete') }}
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -2,7 +2,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<!-- 问题名称 --> <!-- 问题名称 -->
<el-form-item :label="$t('trials:qcCfg:table:questionName')"> <el-form-item :label="$t('trials:qcCfg:table:questionName')">
<el-input v-model="searchData.QuestionName" clearable style="width:120px;" /> <el-input v-model="searchData.QuestionName" clearable style="width:120px;" />
@@ -42,13 +42,12 @@
<span style="margin-left:auto"> <span style="margin-left:auto">
<el-button <el-button
:disabled="list.length === 0" :disabled="list.length === 0"
size="mini"
type="primary" type="primary"
@click="preview.visible = true" @click="preview.visible = true"
> >
{{$t('common:button:preview')}} {{$t('common:button:preview')}}
</el-button> </el-button>
<el-button type="primary" size="mini" @click="handleAdd">{{$t('common:button:new')}}</el-button> <el-button type="primary" @click="handleAdd">{{$t('common:button:new')}}</el-button>
</span> </span>
</div> </div>
@@ -136,15 +135,13 @@
<el-table-column :label="$t('common:action:action')" width="200" fixed="right"> <el-table-column :label="$t('common:action:action')" width="200" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
{{ $t('common:button:edit') }} {{ $t('common:button:edit') }}
</el-button> </el-button>
<el-button <el-button
type="danger" type="text"
size="mini"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
{{ $t('common:button:delete') }} {{ $t('common:button:delete') }}
@@ -204,24 +204,21 @@
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-if="isCompleteConfig" v-if="isCompleteConfig"
type="primary" type="text"
size="mini"
@click="handleLook(scope.row)" @click="handleLook(scope.row)"
> >
{{ $t('trials:readingPeriod:button:view') }} {{ $t('trials:readingPeriod:button:view') }}
</el-button> </el-button>
<el-button <el-button
v-if="!isCompleteConfig" v-if="!isCompleteConfig"
type="primary" type="text"
size="mini"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
{{ $t('common:button:edit') }} {{ $t('common:button:edit') }}
</el-button> </el-button>
<el-button <el-button
v-if="!isCompleteConfig" v-if="!isCompleteConfig"
type="danger" type="text"
size="mini"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
{{ $t('common:button:delete') }} {{ $t('common:button:delete') }}
@@ -1,322 +1,163 @@
<template> <template>
<box-content> <box-content>
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<!-- 是否需要回执 --> <!-- 是否需要回执 -->
<el-form-item :label="$t('trials:emailManageCfg:title:isReturnRequired')" v-if="!systemLevel"> <el-form-item :label="$t('trials:emailManageCfg:title:isReturnRequired')" v-if="!systemLevel">
<el-select <el-select v-model="searchData.IsReturnRequired" clearable style="width: 100px">
v-model="searchData.IsReturnRequired" <el-option v-for="item of $d.YesOrNo" :value="item.value" :label="item.label" :key="item.id" />
clearable
style="width: 100px"
>
<el-option
v-for="item of $d.YesOrNo"
:value="item.value"
:label="item.label"
:key="item.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 是否加急 --> <!-- 是否加急 -->
<el-form-item :label="$t('dictionary:email:label:IsUrgent')" v-if="!systemLevel"> <el-form-item :label="$t('dictionary:email:label:IsUrgent')" v-if="!systemLevel">
<el-select <el-select v-model="searchData.IsUrgent" clearable style="width: 100px">
v-model="searchData.IsUrgent" <el-option v-for="item of $d.YesOrNo" :value="item.value" :label="item.label" :key="item.id" />
clearable
style="width: 100px"
>
<el-option
v-for="item of $d.YesOrNo"
:value="item.value"
:label="item.label"
:key="item.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 是否启用 --> <!-- 是否启用 -->
<el-form-item :label="$t('trials:emailManageCfg:table:IsEnable')" v-if="!systemLevel"> <el-form-item :label="$t('trials:emailManageCfg:table:IsEnable')" v-if="!systemLevel">
<el-select <el-select v-model="searchData.IsEnable" clearable style="width: 100px">
v-model="searchData.IsEnable" <el-option v-for="item of $d.YesOrNo" :value="item.value" :label="item.label" :key="item.id" />
clearable
style="width: 100px"
>
<el-option
v-for="item of $d.YesOrNo"
:value="item.value"
:label="item.label"
:key="item.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :label="$t('trials:auditRecord:table:criterion')" v-if="isDistinguishCriteria && !systemLevel">
:label="$t('trials:auditRecord:table:criterion')" <el-select v-model="searchData.CriterionTypeEnum" clearable style="width: 100px">
v-if="isDistinguishCriteria && !systemLevel" <el-option v-for="item of $d.CriterionType" :value="item.value" :label="item.label" :key="item.id" />
>
<el-select
v-model="searchData.CriterionTypeEnum"
clearable
style="width: 100px"
>
<el-option
v-for="item of $d.CriterionType"
:value="item.value"
:label="item.label"
:key="item.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('trials:emailManageCfg:form:BusinessModule')"> <el-form-item :label="$t('trials:emailManageCfg:form:BusinessModule')">
<el-select <el-select v-model="searchData.BusinessModuleEnum" clearable style="width: 100px">
v-model="searchData.BusinessModuleEnum" <el-option v-for="item of $d.BusinessModule" :value="item.value" :label="item.label" :key="item.id" />
clearable
style="width: 100px"
>
<el-option
v-for="item of $d.BusinessModule"
:value="item.value"
:label="item.label"
:key="item.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :label="$t('trials:emailManageCfg:form:BusinessScenario')">
:label="$t('trials:emailManageCfg:form:BusinessScenario')" <el-select v-model="searchData.BusinessScenarioEnum" clearable style="width: 100px">
> <el-option v-for="item of $d.Email_BusinessScenario" :value="item.value" :label="item.label"
<el-select :key="item.id" />
v-model="searchData.BusinessScenarioEnum"
clearable
style="width: 100px"
>
<el-option
v-for="item of $d.Email_BusinessScenario"
:value="item.value"
:label="item.label"
:key="item.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('trials:emailManageCfg:form:ToUserType')"> <el-form-item :label="$t('trials:emailManageCfg:form:ToUserType')">
<el-select <el-select v-model="searchData.ToUserType" clearable style="width: 100px">
v-model="searchData.ToUserType" <el-option v-for="item of UserTypeList" :value="item.value" :label="item.label" :key="item.id" />
clearable
style="width: 100px"
>
<el-option
v-for="item of UserTypeList"
:value="item.value"
:label="item.label"
:key="item.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :label="$t('trials:emailManageCfg:form:EmailUrgent')" v-if="systemLevel === 1">
:label="$t('trials:emailManageCfg:form:EmailUrgent')" <el-select v-model="searchData.EmailUrgentEnum" clearable style="width: 100px">
v-if="systemLevel === 1" <el-option v-for="item of $d.EmailUrgent" :value="item.value" :label="item.label" :key="item.id" />
>
<el-select
v-model="searchData.EmailUrgentEnum"
clearable
style="width: 100px"
>
<el-option
v-for="item of $d.EmailUrgent"
:value="item.value"
:label="item.label"
:key="item.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleSearch"> <el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }} {{ $t('common:button:search') }}
</el-button> </el-button>
<el-button <el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }} {{ $t('common:button:reset') }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> <el-form-item>
<span style="margin-left: auto"> <el-button type="primary" @click="handleExport">
<el-button type="primary" size="mini" @click="handleExport"> {{ $t('common:button:export') }}
{{ $t('common:button:export') }} </el-button>
</el-button> <!-- <el-button
<!-- <el-button
type="primary" type="primary"
size="mini" size="mini"
> >
场景配置 场景配置
</el-button> --> </el-button> -->
<el-button type="primary" size="mini" @click="handleAdd"> <el-button type="primary" @click="handleAdd">
{{ $t('common:button:new') }} {{ $t('common:button:new') }}
</el-button> </el-button>
</span> </el-form-item>
</el-form>
</div> </div>
<!-- 受试者列表 --> <!-- 受试者列表 -->
<el-table <el-table v-loading="loading" v-adaptive="{ bottomOffset: 45 }" :data="list" stripe height="100" style="width: 100%"
v-loading="loading" @sort-change="handleSortByColumn">
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 type="index" width="40" />
<!-- Code --> <!-- Code -->
<el-table-column <el-table-column prop="Code" :label="$t('trials:emailManageCfg:title:code')" sortable="custom"
prop="Code" show-overflow-tooltip min-width="100" />
:label="$t('trials:emailManageCfg:title:code')" <el-table-column v-if="isDistinguishCriteria" prop="TrialReadingCriterionId"
sortable="custom" :label="$t('trials:reviewTrack:table:criterionName')" show-overflow-tooltip sortable="custom" min-width="120">
show-overflow-tooltip
min-width="100"
/>
<el-table-column
v-if="isDistinguishCriteria"
prop="TrialReadingCriterionId"
:label="$t('trials:reviewTrack:table:criterionName')"
show-overflow-tooltip
sortable="custom"
min-width="120"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd('CriterionType', scope.row.CriterionTypeEnum) }} {{ $fd('CriterionType', scope.row.CriterionTypeEnum) }}
</template> </template>
</el-table-column> </el-table-column>
<!-- 邮件主题中文 --> <!-- 邮件主题中文 -->
<el-table-column <el-table-column prop="EmailTopicCN" :label="$t('trials:emailManageCfg:table:EmailTopicCN')" sortable="custom"
prop="EmailTopicCN" show-overflow-tooltip min-width="160" />
:label="$t('trials:emailManageCfg:table:EmailTopicCN')"
sortable="custom"
show-overflow-tooltip
min-width="160"
/>
<!-- 邮件主题英文 --> <!-- 邮件主题英文 -->
<el-table-column <el-table-column prop="EmailTopic" :label="$t('trials:emailManageCfg:table:EmailTopic')" sortable="custom"
prop="EmailTopic" show-overflow-tooltip min-width="160" />
:label="$t('trials:emailManageCfg:table:EmailTopic')"
sortable="custom"
show-overflow-tooltip
min-width="160"
/>
<!-- 业务层级 --> <!-- 业务层级 -->
<el-table-column <el-table-column prop="BusinessLevelEnum" :label="$t('dictionary:email:label:businessLevel')" sortable="custom"
prop="BusinessLevelEnum" show-overflow-tooltip min-width="150">
:label="$t('dictionary:email:label:businessLevel')"
sortable="custom"
show-overflow-tooltip
min-width="150"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd('BusinessLevel', scope.row.BusinessLevelEnum) }} {{ $fd('BusinessLevel', scope.row.BusinessLevelEnum) }}
</template> </template>
</el-table-column> </el-table-column>
<!-- 业务模块 --> <!-- 业务模块 -->
<el-table-column <el-table-column prop="BusinessModuleEnum" :label="$t('dictionary:email:label:businessModule')" sortable="custom"
prop="BusinessModuleEnum" show-overflow-tooltip min-width="160">
:label="$t('dictionary:email:label:businessModule')"
sortable="custom"
show-overflow-tooltip
min-width="160"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd('BusinessModule', scope.row.BusinessModuleEnum) }} {{ $fd('BusinessModule', scope.row.BusinessModuleEnum) }}
</template> </template>
</el-table-column> </el-table-column>
<!-- 业务场景 --> <!-- 业务场景 -->
<el-table-column <el-table-column prop="BusinessScenarioEnum" :label="$t('trials:emailManageCfg:table:BusinessScenarioEnum')"
prop="BusinessScenarioEnum" sortable="custom" show-overflow-tooltip min-width="130">
:label="$t('trials:emailManageCfg:table:BusinessScenarioEnum')"
sortable="custom"
show-overflow-tooltip
min-width="130"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd('Email_BusinessScenario', scope.row.BusinessScenarioEnum) }} {{ $fd('Email_BusinessScenario', scope.row.BusinessScenarioEnum) }}
</template> </template>
</el-table-column> </el-table-column>
<!-- 收件人v-if="systemLevel !== 1" --> <!-- 收件人v-if="systemLevel !== 1" -->
<el-table-column <el-table-column prop="ToUserTypeList" :label="$t('trials:emailManageCfg:title:toUserTypeList')"
prop="ToUserTypeList" show-overflow-tooltip min-width="100">
:label="$t('trials:emailManageCfg:title:toUserTypeList')"
show-overflow-tooltip
min-width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ {{
scope.row.ToUserTypeList.length > 0 scope.row.ToUserTypeList.length > 0
? scope.row.ToUserTypeList.map((v) => $fd('UserType', v)).join( ? scope.row.ToUserTypeList.map((v) => $fd('UserType', v)).join(
'、' '、'
) )
: '' : ''
}} }}
</template> </template>
</el-table-column> </el-table-column>
<!-- 抄送人v-if="!systemLevel" --> <!-- 抄送人v-if="!systemLevel" -->
<el-table-column <el-table-column prop="CopyUserTypeList" :label="$t('trials:emailManageCfg:title:copyUserTypeList')"
prop="CopyUserTypeList" show-overflow-tooltip min-width="100">
:label="$t('trials:emailManageCfg:title:copyUserTypeList')"
show-overflow-tooltip
min-width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ {{
scope.row.CopyUserTypeList.length > 0 scope.row.CopyUserTypeList.length > 0
? scope.row.CopyUserTypeList.map((v) => $fd('UserType', v)).join( ? scope.row.CopyUserTypeList.map((v) => $fd('UserType', v)).join(
'、' '、'
) )
: '' : ''
}} }}
</template> </template>
</el-table-column> </el-table-column>
<!-- 加急状态 --> <!-- 加急状态 -->
<el-table-column <el-table-column prop="EmailUrgentEnum" :label="$t('dictionary:email:label:IsUrgent')" sortable="custom"
prop="EmailUrgentEnum" show-overflow-tooltip min-width="110">
:label="$t('dictionary:email:label:IsUrgent')"
sortable="custom"
show-overflow-tooltip
min-width="110"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd('EmailUrgent', scope.row.EmailUrgentEnum) }} {{ $fd('EmailUrgent', scope.row.EmailUrgentEnum) }}
</template> </template>
</el-table-column> </el-table-column>
<!-- 发送周期和时间 --> <!-- 发送周期和时间 -->
<el-table-column <el-table-column prop="EmailCron" :label="$t('trials:emailManageCfg:table:EmailCron')" sortable="custom"
prop="EmailCron" show-overflow-tooltip min-width="180" />
:label="$t('trials:emailManageCfg:table:EmailCron')"
sortable="custom"
show-overflow-tooltip
min-width="180"
/>
<!-- 附件 --> <!-- 附件 -->
<el-table-column <el-table-column prop="FileName" :label="$t('trials:emailManageCfg:title:fileName')" show-overflow-tooltip
prop="FileName" min-width="100" v-if="!systemLevel">
:label="$t('trials:emailManageCfg:title:fileName')"
show-overflow-tooltip
min-width="100"
v-if="!systemLevel"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button v-if="scope.row.FilePath" type="text" @click="handlePreview(scope.row.FilePath)">
v-if="scope.row.FilePath"
type="text"
@click="handlePreview(scope.row.FilePath)"
>
{{ scope.row.FileName }} {{ scope.row.FileName }}
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
<!-- 是否需要回执 --> <!-- 是否需要回执 -->
<el-table-column <el-table-column prop="IsReturnRequired" :label="$t('trials:emailManageCfg:title:isReturnRequired')"
prop="IsReturnRequired" show-overflow-tooltip sortable="custom" min-width="160" v-if="!systemLevel">
:label="$t('trials:emailManageCfg:title:isReturnRequired')"
show-overflow-tooltip
sortable="custom"
min-width="160"
v-if="!systemLevel"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsReturnRequired" type="danger"> <el-tag v-if="scope.row.IsReturnRequired" type="danger">
{{ $fd('YesOrNo', scope.row.IsReturnRequired) }} {{ $fd('YesOrNo', scope.row.IsReturnRequired) }}
@@ -327,14 +168,8 @@
</template> </template>
</el-table-column> </el-table-column>
<!-- 是否自动发送 --> <!-- 是否自动发送 -->
<el-table-column <el-table-column prop="IsAutoSend" :label="$t('trials:emailManageCfg:title:isAutoSend')" show-overflow-tooltip
prop="IsAutoSend" sortable="custom" min-width="160" v-if="!systemLevel">
:label="$t('trials:emailManageCfg:title:isAutoSend')"
show-overflow-tooltip
sortable="custom"
min-width="160"
v-if="!systemLevel"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsAutoSend" type="danger"> <el-tag v-if="scope.row.IsAutoSend" type="danger">
{{ $fd('YesOrNo', scope.row.IsAutoSend) }} {{ $fd('YesOrNo', scope.row.IsAutoSend) }}
@@ -344,14 +179,8 @@
}}</el-tag> }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="IsEnable" :label="$t('trials:emailManageCfg:table:IsEnable')" show-overflow-tooltip
prop="IsEnable" sortable="custom" min-width="160" v-if="!systemLevel">
:label="$t('trials:emailManageCfg:table:IsEnable')"
show-overflow-tooltip
sortable="custom"
min-width="160"
v-if="!systemLevel"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsEnable" type="danger"> <el-tag v-if="scope.row.IsEnable" type="danger">
{{ $fd('YesOrNo', scope.row.IsEnable) }} {{ $fd('YesOrNo', scope.row.IsEnable) }}
@@ -362,22 +191,12 @@
</template> </template>
</el-table-column> </el-table-column>
<!-- 更新时间 --> <!-- 更新时间 -->
<el-table-column <el-table-column prop="UpdateTime" :label="$t('trials:emailManageCfg:title:updateTime')" show-overflow-tooltip
prop="UpdateTime" sortable="custom" min-width="160" />
:label="$t('trials:emailManageCfg:title:updateTime')"
show-overflow-tooltip
sortable="custom"
min-width="160"
/>
<!-- 创建时间 --> <!-- 创建时间 -->
<el-table-column <el-table-column prop="CreateTime" :label="$t('trials:emailManageCfg:title:createTime')" show-overflow-tooltip
prop="CreateTime" sortable="custom" min-width="160" />
:label="$t('trials:emailManageCfg:title:createTime')" <el-table-column :label="$t('common:action:action')" min-width="180" fixed="right">
show-overflow-tooltip
sortable="custom"
min-width="160"
/>
<el-table-column label="Action" min-width="180" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="handleEdit(scope.row)"> <el-button type="text" @click="handleEdit(scope.row)">
{{ $t('common:button:edit') }} {{ $t('common:button:edit') }}
@@ -386,77 +205,38 @@
<el-button type="text" @click="handleDelete(scope.row)"> <el-button type="text" @click="handleDelete(scope.row)">
{{ $t('common:button:delete') }} {{ $t('common:button:delete') }}
</el-button> </el-button>
<el-button <el-button type="text" @click="
type="text" preview(scope.row.EmailHtmlContentCN, scope.row.EmailHtmlContent)
@click=" ">{{ $t('common:button:preview') }}</el-button>
preview(scope.row.EmailHtmlContentCN, scope.row.EmailHtmlContent)
"
>{{ $t('common:button:preview') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页组件 -->
<pagination <pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
class="page" @pagination="getList" />
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
<!-- 搜索框 --> <!-- 搜索框 -->
<!-- 修改受试者状态 --> <!-- 修改受试者状态 -->
<el-dialog <el-dialog v-if="editVisible" :visible.sync="editVisible" :close-on-click-modal="false" :title="title" width="700px"
v-if="editVisible" fullscreen custom-class="base-dialog-wrapper">
:visible.sync="editVisible" <EmailForm :data="rowData" :system-level="systemLevel" :isDistinguishCriteria="isDistinguishCriteria"
:close-on-click-modal="false" @closeDialog="closeDialog" @getList="getList" @PreviewHTML="preview" />
:title="title"
width="700px"
fullscreen
custom-class="base-dialog-wrapper"
>
<EmailForm
:data="rowData"
:system-level="systemLevel"
:isDistinguishCriteria="isDistinguishCriteria"
@closeDialog="closeDialog"
@getList="getList"
@PreviewHTML="preview"
/>
</el-dialog> </el-dialog>
<!-- 修改受试者状态 --> <!-- 修改受试者状态 -->
<el-dialog <el-dialog v-if="attachmentVisible" :visible.sync="attachmentVisible" :close-on-click-modal="false"
v-if="attachmentVisible" :title="$t('trials:emailManageCfg:title:fileName')" width="80%" custom-class="base-dialog-wrapper" append-to-body>
:visible.sync="attachmentVisible" <AttachmentList :business-scenario-enum="rowData.BusinessScenarioEnum"
:close-on-click-modal="false" :is-distinguish-criteria="rowData.IsDistinguishCriteria" @getList="getList" />
:title="$t('trials:emailManageCfg:title:fileName')"
width="80%"
custom-class="base-dialog-wrapper"
append-to-body
>
<AttachmentList
:business-scenario-enum="rowData.BusinessScenarioEnum"
:is-distinguish-criteria="rowData.IsDistinguishCriteria"
@getList="getList"
/>
</el-dialog> </el-dialog>
<!-- 预览模板 --> <!-- 预览模板 -->
<el-dialog <el-dialog v-if="previewVisible" :visible.sync="previewVisible" :close-on-click-modal="false"
v-if="previewVisible" :title="$t('common:button:preview')" fullscreen custom-class="base-dialog-wrapper">
:visible.sync="previewVisible" <div style="
:close-on-click-modal="false"
:title="$t('common:button:preview')"
fullscreen
custom-class="base-dialog-wrapper"
>
<div
style="
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;
justify-content: space-around; justify-content: space-around;
flex-wrap: wrap; flex-wrap: wrap;
" ">
>
<div style="min-width: 50%"> <div style="min-width: 50%">
<!-- 邮件内容模版CN --> <!-- 邮件内容模版CN -->
<h3>{{ $t('dictionary:email:title:title1') }}</h3> <h3>{{ $t('dictionary:email:title:title1') }}</h3>
@@ -630,3 +410,8 @@ export default {
}, },
} }
</script> </script>
<style lang="scss" scoped>
.box-body .search .base-search-form .el-form-item {
margin-bottom: 10px;
}
</style>
+27 -63
View File
@@ -1,85 +1,41 @@
<template> <template>
<base-model :config="config"> <base-model :config="config">
<div slot="dialog-body"> <div slot="dialog-body">
<el-form <el-form ref="fileForm" :model="form" label-width="100px" size="small" :rules="rules">
ref="fileForm"
:model="form"
label-width="100px"
size="small"
:rules="rules"
>
<div class="base-dialog-body"> <div class="base-dialog-body">
<el-form-item :label="$t('dictionary:file:form:name')" prop="Name"> <el-form-item :label="$t('dictionary:file:form:name')" prop="Name">
<el-input v-model="form.Name" /> <el-input v-model="form.Name" />
</el-form-item> </el-form-item>
<el-form-item <el-form-item :label="$t('dictionary:file:form:nameCN')" prop="NameCN">
:label="$t('dictionary:file:form:nameCN')"
prop="NameCN"
>
<el-input v-model="form.NameCN" /> <el-input v-model="form.NameCN" />
</el-form-item> </el-form-item>
<el-form-item <el-form-item :label="$t('dictionary:browser:form:ArchiveTypeEnum')" prop="ArchiveTypeEnum">
:label="$t('dictionary:browser:form:ArchiveTypeEnum')" <el-select v-model="form.ArchiveTypeEnum" clearable placeholder="" style="width: 100%">
prop="ArchiveTypeEnum" <el-option v-for="item in $d.ArchiveType" :key="item.id" :label="item.label" :value="item.value">
>
<el-select
v-model="form.ArchiveTypeEnum"
clearable
placeholder=""
style="width: 100%"
>
<el-option
v-for="item in $d.ArchiveType"
:key="item.id"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :label="$t('dictionary:browser:form:SubIdentificationEnum')" prop="SubIdentificationEnum">
:label="$t('dictionary:browser:form:SubIdentificationEnum')" <el-select style="width: 100%" v-model="form.SubIdentificationEnum" clearable placeholder="">
prop="SubIdentificationEnum" <el-option v-for="item in $d.SubIdentification" :key="item.id" :label="item.label" :value="item.value">
>
<el-select
style="width: 100%"
v-model="form.SubIdentificationEnum"
clearable
placeholder=""
>
<el-option
v-for="item in $d.SubIdentification"
:key="item.id"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :label="$t('dictionary:browser:form:SysTemplateTypeEnum')" prop="SysTemplateTypeEnum">
:label="$t('dictionary:file:form:ShowOrder')" <el-select style="width: 100%" v-model="form.SysTemplateTypeEnum" clearable placeholder="">
prop="ShowOrder" <el-option v-for="item in $d.SysTemplateType" :key="item.id" :label="item.label" :value="item.value">
> </el-option>
<el-input-number </el-select>
v-model="form.ShowOrder" </el-form-item>
:step="1" <el-form-item :label="$t('dictionary:file:form:ShowOrder')" prop="ShowOrder">
step-strictly <el-input-number v-model="form.ShowOrder" :step="1" step-strictly></el-input-number>
></el-input-number>
</el-form-item> </el-form-item>
<el-form-item :label="$t('dictionary:file:form:IsEnable')"> <el-form-item :label="$t('dictionary:file:form:IsEnable')">
<el-switch <el-switch v-model="form.IsEnable" :active-value="true" :inactive-value="false">
v-model="form.IsEnable"
:active-value="true"
:inactive-value="false"
>
</el-switch> </el-switch>
</el-form-item> </el-form-item>
<el-form-item :label="$t('dictionary:file:form:IsConfirmRecord')"> <el-form-item :label="$t('dictionary:file:form:IsConfirmRecord')">
<el-switch <el-switch v-model="form.IsConfirmRecord" :active-value="true" :inactive-value="false">
v-model="form.IsConfirmRecord"
:active-value="true"
:inactive-value="false"
>
</el-switch> </el-switch>
</el-form-item> </el-form-item>
</div> </div>
@@ -95,7 +51,7 @@
</div> </div>
</base-model> </base-model>
</template> </template>
<script> <script>
import baseModel from '@/components/BaseModel' import baseModel from '@/components/BaseModel'
import { addOrUpdateSysFileType } from '@/api/dictionary' import { addOrUpdateSysFileType } from '@/api/dictionary'
export default { export default {
@@ -126,6 +82,7 @@ export default {
NameCN: null, NameCN: null,
SubIdentificationEnum: null, SubIdentificationEnum: null,
ShowOrder: 0, ShowOrder: 0,
SysTemplateTypeEnum: null
}, },
rules: { rules: {
Name: [ Name: [
@@ -149,6 +106,13 @@ export default {
trigger: ['blur', 'change'], trigger: ['blur', 'change'],
}, },
], ],
SysTemplateTypeEnum: [
{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: ['blur', 'change'],
},
],
ArchiveTypeEnum: [ ArchiveTypeEnum: [
{ {
required: true, required: true,
+55 -152
View File
@@ -3,7 +3,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<el-form-item :label="$t('dictionary:file:search:Name')"> <el-form-item :label="$t('dictionary:file:search:Name')">
<el-input v-model="searchData.Name" style="width: 100px" /> <el-input v-model="searchData.Name" style="width: 100px" />
</el-form-item> </el-form-item>
@@ -11,196 +11,106 @@
<el-input v-model="searchData.NameCN" style="width: 100px" /> <el-input v-model="searchData.NameCN" style="width: 100px" />
</el-form-item> </el-form-item>
<el-form-item :label="$t('dictionary:file:search:archiveTypeEnum')"> <el-form-item :label="$t('dictionary:file:search:archiveTypeEnum')">
<el-select <el-select v-model="searchData.ArchiveTypeEnum" clearable placeholder="" style="width: 100px">
v-model="searchData.ArchiveTypeEnum" <el-option v-for="item in $d.ArchiveType" :key="item.id" :label="item.label" :value="item.value">
clearable
placeholder=""
style="width: 100px"
>
<el-option
v-for="item in $d.ArchiveType"
:key="item.id"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :label="$t('dictionary:file:search:subIdentificationEnum')">
:label="$t('dictionary:file:search:subIdentificationEnum')" <el-select v-model="searchData.SubIdentificationEnum" clearable placeholder="" style="width: 100px">
> <el-option v-for="item in $d.SubIdentification" :key="item.id" :label="item.label" :value="item.value">
<el-select </el-option>
v-model="searchData.SubIdentificationEnum" </el-select>
clearable </el-form-item>
placeholder="" <el-form-item :label="$t('dictionary:file:search:SysTemplateTypeEnum')">
style="width: 100px" <el-select v-model="searchData.SysTemplateTypeEnum" clearable placeholder="" style="width: 100px">
> <el-option v-for="item in $d.SysTemplateType" :key="item.id" :label="item.label" :value="item.value">
<el-option
v-for="item in $d.SubIdentification"
:key="item.id"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('dictionary:file:search:isEnable')"> <el-form-item :label="$t('dictionary:file:search:isEnable')">
<el-select <el-select v-model="searchData.IsEnable" clearable placeholder="" style="width: 100px">
v-model="searchData.IsEnable" <el-option v-for="item in $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value">
clearable
placeholder=""
style="width: 100px"
>
<el-option
v-for="item in $d.YesOrNo"
:key="item.id"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('dictionary:file:search:isConfirmRecord')"> <el-form-item :label="$t('dictionary:file:search:isConfirmRecord')">
<el-select <el-select v-model="searchData.IsConfirmRecord" clearable placeholder="" style="width: 100px">
v-model="searchData.IsConfirmRecord" <el-option v-for="item in $d.YesOrNo" :key="item.id" :label="item.label" :value="item.value">
clearable
placeholder=""
style="width: 100px"
>
<el-option
v-for="item in $d.YesOrNo"
:key="item.id"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button type="primary" icon="el-icon-search" @click="handleSearch">
type="primary"
icon="el-icon-search"
@click="handleSearch"
>
{{ $t('common:button:search') }} {{ $t('common:button:search') }}
</el-button> </el-button>
<el-button <el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }} {{ $t('common:button:reset') }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span style="margin-left: auto"> <span style="margin-left: auto">
<el-button type="primary" size="mini" @click="handleAdd"> <el-button type="primary" @click="handleAdd">
{{ $t('dictionary:browser:button:add') }} {{ $t('dictionary:browser:button:add') }}
</el-button> </el-button>
</span> </span>
</div> </div>
<el-table <el-table v-loading="loading" v-adaptive="{ bottomOffset: 45 }" :data="list" stripe height="100"
v-loading="loading" style="width: 100%" @sort-change="handleSortByColumn">
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 type="index" width="40" />
<el-table-column <el-table-column prop="Name" :label="$t('dictionary:file:table:Name')" sortable="custom" show-overflow-tooltip
prop="Name" min-width="150px" />
:label="$t('dictionary:file:table:Name')" <el-table-column prop="NameCN" :label="$t('dictionary:file:table:NameCN')" show-overflow-tooltip
sortable="custom" sortable="custom" min-width="150px" />
show-overflow-tooltip <el-table-column prop="ArchiveTypeEnum" :label="$t('dictionary:file:table:archiveTypeEnum')"
/> show-overflow-tooltip sortable="custom" min-width="120px">
<el-table-column
prop="NameCN"
:label="$t('dictionary:file:table:NameCN')"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
prop="ArchiveTypeEnum"
:label="$t('dictionary:file:table:archiveTypeEnum')"
show-overflow-tooltip
sortable="custom"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd('ArchiveType', scope.row.ArchiveTypeEnum) }} {{ $fd('ArchiveType', scope.row.ArchiveTypeEnum) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="SubIdentificationEnum" :label="$t('dictionary:file:table:subIdentificationEnum')"
prop="SubIdentificationEnum" show-overflow-tooltip sortable="custom" min-width="120px">
:label="$t('dictionary:file:table:subIdentificationEnum')"
show-overflow-tooltip
sortable="custom"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd('SubIdentification', scope.row.SubIdentificationEnum) }} {{ $fd('SubIdentification', scope.row.SubIdentificationEnum) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="SysTemplateTypeEnum" :label="$t('dictionary:file:table:SysTemplateTypeEnum')"
prop="ShowOrder" show-overflow-tooltip sortable="custom">
:label="$t('dictionary:file:table:ShowOrder')" <template slot-scope="scope">
show-overflow-tooltip {{ $fd('SysTemplateType', scope.row.SysTemplateTypeEnum) }}
sortable="custom" </template>
/> </el-table-column>
<el-table-column <el-table-column prop="ShowOrder" :label="$t('dictionary:file:table:ShowOrder')" show-overflow-tooltip
:label="$t('dictionary:file:table:IsEnable')" sortable="custom" />
prop="IsEnable" <el-table-column :label="$t('dictionary:file:table:IsEnable')" prop="IsEnable" show-overflow-tooltip
show-overflow-tooltip sortable="custom" min-width="120px">
sortable="custom"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag :type="!scope.row.IsEnable ? 'info' : ''"> <el-tag :type="!scope.row.IsEnable ? 'info' : ''">
{{ $fd('YesOrNo', scope.row.IsEnable) }} {{ $fd('YesOrNo', scope.row.IsEnable) }}
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column :label="$t('dictionary:file:table:isConfirmRecord')" prop="IsConfirmRecord"
:label="$t('dictionary:file:table:isConfirmRecord')" show-overflow-tooltip sortable="custom" min-width="150px">
prop="IsConfirmRecord"
show-overflow-tooltip
sortable="custom"
width="200"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag :type="!scope.row.IsEnable ? 'info' : ''"> <el-tag :type="!scope.row.IsEnable ? 'info' : ''">
{{ $fd('YesOrNo', scope.row.IsConfirmRecord) }} {{ $fd('YesOrNo', scope.row.IsConfirmRecord) }}
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="CreateTime" :label="$t('dictionary:file:table:createTime')" show-overflow-tooltip
prop="CreateTime" sortable="custom" min-width="180px" />
:label="$t('dictionary:file:table:createTime')" <el-table-column prop="UpdateTime" :label="$t('dictionary:file:table:updateTime')" show-overflow-tooltip
show-overflow-tooltip sortable="custom" min-width="180px" />
sortable="custom" <el-table-column :label="$t('dictionary:file:table:action')" width="200" fixed="right">
/>
<el-table-column
prop="UpdateTime"
:label="$t('dictionary:file:table:updateTime')"
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
:label="$t('dictionary:file:table:action')"
width="200"
fixed="right"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="handleEdit(scope.row)"> <el-button type="text" @click="handleEdit(scope.row)">
{{ $t('dictionary:file:button:edit') }} {{ $t('dictionary:file:button:edit') }}
</el-button> </el-button>
<el-button <el-button type="text" @click="handleDelete(scope.row)" v-if="hasPermi(['dictionary:template:file:del'])">
type="text"
@click="handleDelete(scope.row)"
v-if="hasPermi(['dictionary:template:file:del'])"
>
{{ $t('dictionary:file:button:delete') }} {{ $t('dictionary:file:button:delete') }}
</el-button> </el-button>
</template> </template>
@@ -208,20 +118,9 @@
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页组件 -->
<pagination <pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
class="page" @pagination="getList" />
:total="total" <File-form :config="config" :data="rowData" v-if="config.visible" @close="close" @getList="getList" />
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
<File-form
:config="config"
:data="rowData"
v-if="config.visible"
@close="close"
@getList="getList"
/>
</box-content> </box-content>
</BoxContent> </BoxContent>
</template> </template>
@@ -238,10 +137,11 @@ const searchDataDefault = () => {
Name: null, Name: null,
NameCN: null, NameCN: null,
SubIdentificationEnum: null, SubIdentificationEnum: null,
SysTemplateTypeEnum: null,
PageIndex: 1, PageIndex: 1,
PageSize: 20, PageSize: 20,
asc: false, asc: false,
sortField: 'CreateTime', sortField: '',
} }
} }
export default { export default {
@@ -344,4 +244,7 @@ export default {
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.box-body .search .base-search-form .el-form-item {
margin-bottom: 10px;
}
</style> </style>
+1 -2
View File
@@ -2,7 +2,7 @@
<box-content> <box-content>
<!-- 搜索框 --> <!-- 搜索框 -->
<div class="search"> <div class="search">
<el-form :inline="true" size="mini" class="base-search-form"> <el-form :inline="true" class="base-search-form">
<!-- Code --> <!-- Code -->
<el-form-item :label="$t('dictionary:sign:label:code')"> <el-form-item :label="$t('dictionary:sign:label:code')">
<el-input v-model="searchData.Code" style="width:100px;" /> <el-input v-model="searchData.Code" style="width:100px;" />
@@ -27,7 +27,6 @@
<span style="margin-left:auto;"> <span style="margin-left:auto;">
<el-button <el-button
type="primary" type="primary"
size="mini"
@click="handleAdd" @click="handleAdd"
> >
{{ $t('common:button:new') }} {{ $t('common:button:new') }}
+3 -6
View File
@@ -111,14 +111,12 @@
<el-button <el-button
type="primary" type="primary"
icon="el-icon-search" icon="el-icon-search"
size="mini"
@click="getList" @click="getList"
> >
{{ $t('common:button:search') }} {{ $t('common:button:search') }}
</el-button> </el-button>
<!-- 重置 --> <!-- 重置 -->
<el-button <el-button
size="mini"
icon="el-icon-refresh-left" icon="el-icon-refresh-left"
@click="handleReset" @click="handleReset"
> >
@@ -135,7 +133,6 @@
</el-form-item> </el-form-item>
<el-button <el-button
type="primary" type="primary"
size="mini"
@click="resolve" @click="resolve"
style="float: right" style="float: right"
v-if="level > 7" v-if="level > 7"
@@ -205,7 +202,7 @@
<el-table-column <el-table-column
:label="$t('feedBack:form:role')" :label="$t('feedBack:form:role')"
prop="FeedBackUserName" prop="FeedBackUserName"
min-width="80" min-width="100"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
v-if="level > 7" v-if="level > 7"
@@ -273,11 +270,11 @@
:label="$t('common:action:action')" :label="$t('common:action:action')"
fixed="right" fixed="right"
prop="UserTypeShortName" prop="UserTypeShortName"
width="80" width="100"
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="text" @click="getDetail(scope.row)"> <el-button type="text" @click="getDetail(scope.row)">
{{ $t('common:button:view') }} {{ $t('common:button:view') }}
</el-button> </el-button>
</template> </template>
+24 -67
View File
@@ -9,71 +9,36 @@
<!-- Reset Password --> <!-- Reset Password -->
<div class="box-wrapper" v-if="active === 0"> <div class="box-wrapper" v-if="active === 0">
<el-form <el-form ref="resetForm" v-loading="formLoading" :model="form" label-width="130px" :rules="rules"
ref="resetForm" class="demo-ruleForm" size="small">
v-loading="formLoading"
:model="form"
label-width="130px"
:rules="rules"
class="demo-ruleForm"
size="small"
>
<!-- 邮箱 --> <!-- 邮箱 -->
<el-form-item <el-form-item :label="$t('passwordReset:form:email')" prop="EmailOrPhone">
:label="$t('passwordReset:form:email')"
prop="EmailOrPhone"
>
<el-col :span="18"> <el-col :span="18">
<el-input <el-input v-model="form.EmailOrPhone" autocomplete="off" @change="handleEmailChange" />
v-model="form.EmailOrPhone"
autocomplete="off"
@change="handleEmailChange"
/>
</el-col> </el-col>
</el-form-item> </el-form-item>
<!-- 验证码 --> <!-- 验证码 -->
<el-form-item <el-form-item :label="$t('trials:researchForm:form:verifyCode')" required>
:label="$t('trials:researchForm:form:verifyCode')"
required
>
<el-col :span="18"> <el-col :span="18">
<el-form-item prop="VerificationCode"> <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-form-item>
</el-col> </el-col>
<el-col :span="6" style="text-align: right"> <el-col :span="6" style="text-align: right">
<el-button <el-button size="small" type="primary" style="width: 80%" :disabled="sendDisabled"
size="small" @click="handleSendCode">{{ sendTitle }}</el-button>
type="primary"
style="width: 80%"
:disabled="sendDisabled"
@click="handleSendCode"
>{{ sendTitle }}</el-button
>
</el-col> </el-col>
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- 校验 --> <!-- 校验 -->
<el-button <el-button size="small" type="primary" style="width: 50%; margin: auto; display: block"
size="small" :disabled="form.VerificationCode === '' || form.EmailOrPhone === ''" @click="verifyCode">
type="primary"
style="width: 50%; margin: auto; display: block"
:disabled="form.VerificationCode === '' || form.EmailOrPhone === ''"
@click="verifyCode"
>
{{ $t('passwordReset:button:verify') }} {{ $t('passwordReset:button:verify') }}
</el-button> </el-button>
</div> </div>
<div class="box-wrapper" v-show="active === 1"> <div class="box-wrapper" v-show="active === 1">
<el-form <el-form ref="resetForm2" v-loading="formLoading" :model="form"
ref="resetForm2" :label-width="$i18n.locale === 'en' ? '180px' : '100px'" :rules="rules2" class="demo-ruleForm" size="small">
v-loading="formLoading"
:model="form"
:label-width="$i18n.locale === 'en' ? '180px' : '100px'"
:rules="rules2"
class="demo-ruleForm"
size="small"
>
<!-- 用户名 --> <!-- 用户名 -->
<el-form-item :label="$t('passwordReset:form:userName')" prop="UserId"> <el-form-item :label="$t('passwordReset:form:userName')" prop="UserId">
<el-input v-model="form.UserName" disabled /> <el-input v-model="form.UserName" disabled />
@@ -105,27 +70,17 @@
<el-input v-model="form.UserType" disabled /> <el-input v-model="form.UserType" disabled />
</el-form-item> --> </el-form-item> -->
<!-- 新密码 --> <!-- 新密码 -->
<el-form-item <el-form-item class="my_new_pwd" :label="$t('passwordReset:form:password')" prop="NewPwd"
class="my_new_pwd" style="position: relative">
:label="$t('passwordReset:form:password')"
prop="NewPwd"
style="position: relative"
>
<el-input v-model="form.NewPwd" show-password autocomplete="off" /> <el-input v-model="form.NewPwd" show-password autocomplete="off" />
<span style="position: absolute; right: -30px"> <span style="position: absolute; right: -30px">
<el-tooltip <el-tooltip :content="$t('passwordReset:form:passwordCentent')" placement="top">
:content="$t('passwordReset:form:passwordCentent')"
placement="top"
>
<i class="el-icon-question" /> <i class="el-icon-question" />
</el-tooltip> </el-tooltip>
</span> </span>
</el-form-item> </el-form-item>
<!-- 确认密码 --> <!-- 确认密码 -->
<el-form-item <el-form-item :label="$t('passwordReset:form:confirmPassword')" prop="CheckPass">
:label="$t('passwordReset:form:confirmPassword')"
prop="CheckPass"
>
<el-input v-model="form.CheckPass" show-password autocomplete="off" /> <el-input v-model="form.CheckPass" show-password autocomplete="off" />
</el-form-item> </el-form-item>
</el-form> </el-form>
@@ -135,12 +90,7 @@
{{ $t('passwordReset:button:cancel') }} {{ $t('passwordReset:button:cancel') }}
</el-button> </el-button>
<!-- 提交 --> <!-- 提交 -->
<el-button <el-button size="small" type="primary" @click="onSubmit" style="width: 46%">
size="small"
type="primary"
@click="onSubmit"
style="width: 46%"
>
{{ $t('passwordReset:button:submit') }} {{ $t('passwordReset:button:submit') }}
</el-button> </el-button>
</div> </div>
@@ -388,10 +338,14 @@ export default {
} }
}, },
onCancel() { onCancel() {
this.$refs['resetForm'].resetFields() // this.$refs['resetForm'].resetFields()
Object.keys(this.form).forEach((key) => { Object.keys(this.form).forEach((key) => {
this.form[key] = '' this.form[key] = ''
}) })
this.sendDisabled = false
this.sendTitle = this.$t('passwordReset:button:send')
countdown = 60
clearTimeout(timer)
this.active = 0 this.active = 0
}, },
goBack() { goBack() {
@@ -404,12 +358,14 @@ export default {
.reset-wrapper { .reset-wrapper {
padding: 20px; padding: 20px;
} }
.reset-wrapper .el-page-header { .reset-wrapper .el-page-header {
line-height: 50px; line-height: 50px;
border: 1px solid #ebeef5; border: 1px solid #ebeef5;
border-radius: 4px; border-radius: 4px;
background-color: #fff; background-color: #fff;
} }
.reset-wrapper .box-wrapper { .reset-wrapper .box-wrapper {
width: 700px; width: 700px;
margin: 20px auto; margin: 20px auto;
@@ -425,6 +381,7 @@ export default {
.is-error.my_new_pwd { .is-error.my_new_pwd {
margin-bottom: 45px; margin-bottom: 45px;
} }
.flexBox { .flexBox {
display: flex; display: flex;
justify-content: center; justify-content: center;
+1 -1
View File
@@ -138,7 +138,7 @@
<script> <script>
import { getNoneDicomStudyList, setNodicomStudyState } from '@/api/trials' import { getNoneDicomStudyList, setNodicomStudyState } from '@/api/trials'
import store from '@/store' import store from '@/store'
import pdf from '@/assets/pdf.jpg' import pdf from '@/assets/pdf.png'
import zip from '@/assets/zip.jpg' import zip from '@/assets/zip.jpg'
import { changeURLStatic } from '@/utils/history.js' import { changeURLStatic } from '@/utils/history.js'
import Preview from './components/preview' import Preview from './components/preview'
+2 -4
View File
@@ -36,13 +36,11 @@
<el-button <el-button
type="primary" type="primary"
icon="el-icon-search" icon="el-icon-search"
size="mini"
@click="getList" @click="getList"
> >
{{ $t('common:button:search') }} {{ $t('common:button:search') }}
</el-button> </el-button>
<el-button <el-button
size="mini"
icon="el-icon-refresh-left" icon="el-icon-refresh-left"
@click="handleReset" @click="handleReset"
> >
@@ -97,10 +95,10 @@
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="text" @click="view(scope.row)"> <el-button type="text" @click="view(scope.row)">
{{ $t('common:button:view') }} {{ $t('common:button:view') }}
</el-button> </el-button>
<el-button size="mini" type="text" @click="rePublish(scope.row)"> <el-button type="text" @click="rePublish(scope.row)">
{{ $t('system:event:button:rePublish') }} {{ $t('system:event:button:rePublish') }}
</el-button> </el-button>
</template> </template>
@@ -176,7 +176,6 @@
<el-button <el-button
size="small" size="small"
type="primary" type="primary"
icon="el-icon-plus"
@click="handleAdd" @click="handleAdd"
>{{ $t('common:button:new') }}</el-button >{{ $t('common:button:new') }}</el-button
> >
@@ -184,9 +183,7 @@
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 删除 --> <!-- 删除 -->
<el-button <el-button
size="mini"
type="text" type="text"
icon="el-icon-delete"
@click="handleDelete(scope.$index)" @click="handleDelete(scope.$index)"
>{{ $t('common:button:delete') }}</el-button >{{ $t('common:button:delete') }}</el-button
> >
+1 -22
View File
@@ -22,7 +22,6 @@
<el-form-item :label="$t('system:l18n:search:Module')"> <el-form-item :label="$t('system:l18n:search:Module')">
<el-input <el-input
v-model="searchData.Module" v-model="searchData.Module"
size="small"
clearable clearable
style="width: 130px" style="width: 130px"
/> />
@@ -30,7 +29,6 @@
<el-form-item :label="$t('system:l18n:search:Code')"> <el-form-item :label="$t('system:l18n:search:Code')">
<el-input <el-input
v-model="searchData.Code" v-model="searchData.Code"
size="small"
clearable clearable
style="width: 130px" style="width: 130px"
/> />
@@ -38,7 +36,6 @@
<el-form-item :label="$t('system:l18n:search:ValueCN')"> <el-form-item :label="$t('system:l18n:search:ValueCN')">
<el-input <el-input
v-model="searchData.ValueCN" v-model="searchData.ValueCN"
size="small"
clearable clearable
style="width: 130px" style="width: 130px"
/> />
@@ -46,7 +43,6 @@
<el-form-item :label="$t('system:l18n:search:Value')"> <el-form-item :label="$t('system:l18n:search:Value')">
<el-input <el-input
v-model="searchData.Value" v-model="searchData.Value"
size="small"
style="width: 130px" style="width: 130px"
clearable clearable
/> />
@@ -69,7 +65,6 @@
<el-form-item :label="$t('system:l18n:search:Description')"> <el-form-item :label="$t('system:l18n:search:Description')">
<el-input <el-input
v-model="searchData.Description" v-model="searchData.Description"
size="small"
clearable clearable
style="width: 130px" style="width: 130px"
/> />
@@ -117,14 +112,12 @@
<el-button <el-button
type="primary" type="primary"
icon="el-icon-search" icon="el-icon-search"
size="mini"
@click="getList" @click="getList"
> >
{{ $t('common:button:search') }} {{ $t('common:button:search') }}
</el-button> </el-button>
<!-- 重置 --> <!-- 重置 -->
<el-button <el-button
size="mini"
type="primary" type="primary"
icon="el-icon-refresh-left" icon="el-icon-refresh-left"
@click="handleReset" @click="handleReset"
@@ -133,24 +126,18 @@
</el-button> </el-button>
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd" @click="handleAdd"
> >
{{ $t('common:button:new') }} {{ $t('common:button:new') }}
</el-button> </el-button>
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus"
size="mini"
@click="handleBatchAdd" @click="handleBatchAdd"
> >
{{ $t('system:l18n:button:batchAdd') }} {{ $t('system:l18n:button:batchAdd') }}
</el-button> </el-button>
<el-button <el-button
type="primary" type="primary"
icon="el-icon-edit-outline"
size="mini"
:disabled="selectTableList.length <= 0" :disabled="selectTableList.length <= 0"
@click="handleBatchUpdate" @click="handleBatchUpdate"
> >
@@ -158,17 +145,13 @@
</el-button> </el-button>
<el-button <el-button
type="primary" type="primary"
icon="el-icon-edit-outline"
size="mini"
:disabled="selectTableList.length <= 0" :disabled="selectTableList.length <= 0"
@click="handleBatchUpdateToChange" @click="handleBatchUpdateToChange"
> >
{{ $t('system:l18n:button:batchEdit') }} {{ $t('system:l18n:button:batchEdit') }}
</el-button> </el-button>
<el-button <el-button
size="mini"
type="primary" type="primary"
icon="el-icon-download"
@click="exportTable" @click="exportTable"
> >
{{ $t('common:button:export') }} {{ $t('common:button:export') }}
@@ -275,7 +258,7 @@
<el-table-column <el-table-column
:label="$t('system:l18n:search:Description')" :label="$t('system:l18n:search:Description')"
prop="Description" prop="Description"
min-width="100" min-width="110"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
/> />
@@ -309,18 +292,14 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini"
type="text" type="text"
icon="el-icon-edit-outline"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
{{ $t('common:button:edit') }} {{ $t('common:button:edit') }}
</el-button> </el-button>
<el-button <el-button
:disabled="scope.row.State === 1" :disabled="scope.row.State === 1"
size="mini"
type="text" type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
{{ $t('common:button:delete') }} {{ $t('common:button:delete') }}
+4 -10
View File
@@ -3,22 +3,21 @@
<div ref="leftContainer" class="left"> <div ref="leftContainer" class="left">
<el-form :inline="true"> <el-form :inline="true">
<el-form-item :label="$t('system:log:table:version')" prop="Version"> <el-form-item :label="$t('system:log:table:version')" prop="Version">
<el-input v-model="searchData.Version" size="small" clearable /> <el-input v-model="searchData.Version" clearable />
</el-form-item> </el-form-item>
<el-form-item :label="$t('system:log:table:versionUS')" prop="Version"> <el-form-item :label="$t('system:log:table:versionUS')" prop="Version">
<el-input v-model="searchData.Version_US" size="small" clearable /> <el-input v-model="searchData.Version_US" clearable />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
:label="$t('system:log:table:UpdateContent')" :label="$t('system:log:table:UpdateContent')"
prop="UpdateContent" prop="UpdateContent"
> >
<el-input v-model="searchData.UpdateContent" size="small" clearable /> <el-input v-model="searchData.UpdateContent" clearable />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button
type="primary" type="primary"
icon="el-icon-search" icon="el-icon-search"
size="mini"
@click="getList" @click="getList"
> >
{{ $t('common:button:search') }} {{ $t('common:button:search') }}
@@ -26,7 +25,6 @@
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="mini"
@click="handleAdd" @click="handleAdd"
> >
{{ $t('common:button:new') }} {{ $t('common:button:new') }}
@@ -102,22 +100,18 @@
:label="$t('common:action:action')" :label="$t('common:action:action')"
fixed="right" fixed="right"
prop="" prop=""
min-width="200" min-width="150"
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini"
type="text" type="text"
icon="el-icon-edit-outline"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
> >
{{ $t('common:button:edit') }} {{ $t('common:button:edit') }}
</el-button> </el-button>
<el-button <el-button
size="mini"
type="text" type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
> >
{{ $t('common:button:delete') }} {{ $t('common:button:delete') }}
+82 -159
View File
@@ -2,152 +2,76 @@
<div class="log"> <div class="log">
<div ref="leftContainer" class="left"> <div ref="leftContainer" class="left">
<el-form :inline="true"> <el-form :inline="true">
<el-form-item <el-form-item :label="$t('system:loginLog:label:OptType')" prop="OptType">
:label="$t('system:loginLog:label:OptType')" <el-select v-model="searchData.OptTypeList" clearable style="width: 200px" multiple :collapse-tags="true">
prop="OptType" <el-option v-for="item of $d.UserOptType" :key="'UserOptType' + item.label" :value="item.value"
> :label="item.label" />
<el-select
v-model="searchData.OptType"
clearable
style="width: 120px"
>
<el-option
v-for="item of $d.UserOptType"
:key="'UserOptType' + item.label"
:value="item.value"
:label="item.label"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="IP" prop="IP"> <el-form-item label="IP" prop="IP">
<el-input <el-input v-model="searchData.IP" size="small" clearable style="width: 120px" />
v-model="searchData.IP"
size="small"
clearable
style="width: 120px"
/>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :label="$t('system:loginLog:label:LoginFaildName')" prop="LoginFaildName">
:label="$t('system:loginLog:label:LoginFaildName')" <el-input v-model="searchData.LoginFaildName" size="small" clearable style="width: 120px" />
prop="LoginFaildName"
>
<el-input
v-model="searchData.LoginFaildName"
size="small"
clearable
style="width: 120px"
/>
</el-form-item> </el-form-item>
<el-form-item <el-form-item :label="$t('system:loginLog:table:LoginUserName')" prop="LoginFaildName">
:label="$t('system:loginLog:table:LoginUserName')" <el-input v-model="searchData.LoginUserName" size="small" clearable style="width: 120px" />
prop="LoginFaildName"
>
<el-input
v-model="searchData.LoginUserName"
size="small"
clearable
style="width: 120px"
/>
</el-form-item> </el-form-item>
<el-form-item <!-- <el-form-item :label="$t('system:loginLog:table:LoginUserType')" prop="LoginUserTypeEnum">
:label="$t('system:loginLog:table:LoginUserType')" <el-select v-model="searchData.LoginUserTypeEnum" clearable style="width: 120px">
prop="LoginUserTypeEnum" <el-option v-for="item of $d.UserType" :key="'UserType' + item.label" :value="item.value"
> :label="item.label" />
<el-select </el-select>
v-model="searchData.LoginUserTypeEnum" </el-form-item> -->
clearable <el-form-item :label="$t('system:loginLog:label:IsLoginUncommonly')" prop="IsLoginUncommonly ">
style="width: 120px" <el-select v-model="searchData.IsLoginUncommonly" clearable style="width: 120px">
> <el-option v-for="item of $d.YesOrNo" :key="item.id" :value="item.value" :label="item.label" />
<el-option
v-for="item of $d.UserType"
:key="'UserType' + item.label"
:value="item.value"
:label="item.label"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('system:loginLog:label:CreateTime')"> <el-form-item :label="$t('system:loginLog:label:CreateTime')">
<el-date-picker <el-date-picker v-model="datetimerange" type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss"
v-model="datetimerange" :default-time="['00:00:00', '23:59:59']" @change="handleDatetimeChange" style="width: 380px" />
type="datetimerange"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00', '23:59:59']"
@change="handleDatetimeChange"
style="width: 380px"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getList"> <el-button type="primary" icon="el-icon-search" @click="getList">
{{ $t('common:button:search') }} {{ $t('common:button:search') }}
</el-button> </el-button>
<el-button <el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }} {{ $t('common:button:reset') }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table <el-table v-loading="loading" v-adaptive="{ bottomOffset: 45 }" height="100" :data="list" class="table"
v-loading="loading" @sort-change="handleSortByColumn">
v-adaptive="{ bottomOffset: 45 }"
height="100"
:data="list"
class="table"
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="50"> <el-table-column type="index" width="50">
<template slot-scope="scope"> <template slot-scope="scope">
<span <span style="
style="
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: flex-end; justify-content: flex-end;
" ">
> <el-tooltip class="item" effect="dark" :content="$t('system:loginLog:label:IsLoginUncommonly')"
<el-tooltip placement="top" style="margin-right: 3px" v-if="scope.row.IsIgnoreUncommonly">
class="item" <i v-if="scope.row.IsLoginUncommonly" class="el-icon-warning icon-i icon-success"></i>
effect="dark" </el-tooltip>
:content="$t('system:loginLog:label:IsLoginUncommonly')" <el-tooltip class="item" effect="dark" :content="$t('system:loginLog:label:IsLoginUncommonly')"
placement="top" placement="top" style="margin-right: 3px" v-else-if="scope.row.IsLoginUncommonly">
style="margin-right: 3px" <i v-if="scope.row.IsLoginUncommonly" class="el-icon-warning icon-i"
v-if="scope.row.IsLoginUncommonly" @click.stop="setIsIgnoreUncommonly(scope.row)"></i>
>
<i
v-if="scope.row.IsLoginUncommonly"
class="el-icon-warning icon-i"
></i>
</el-tooltip> </el-tooltip>
<span>{{ scope.$index + 1 }}</span> <span>{{ scope.$index + 1 }}</span>
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column :label="$t('system:loginLog:table:OptType')" prop="OptType" min-width="150"
:label="$t('system:loginLog:table:OptType')" show-overflow-tooltip sortable="custom">
prop="OptType"
min-width="150"
show-overflow-tooltip
sortable="custom"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd('UserOptType', scope.row.OptType) }} {{ $fd('UserOptType', scope.row.OptType) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="IP" prop="IP" min-width="150" sortable="custom" show-overflow-tooltip />
label="IP" <el-table-column :label="$t('trials:loginLog:table:IPRegion')" prop="IPRegion" min-width="120"
prop="IP" show-overflow-tooltip sortable="custom" />
min-width="150"
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
:label="$t('trials:loginLog:table:IPRegion')"
prop="IPRegion"
min-width="120"
show-overflow-tooltip
sortable="custom"
/>
<!-- <el-table-column <!-- <el-table-column
:label="$t('system:loginLog:table:LoginFaildName')" :label="$t('system:loginLog:table:LoginFaildName')"
prop="LoginFaildName" prop="LoginFaildName"
@@ -155,20 +79,10 @@
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
/> --> /> -->
<el-table-column <el-table-column :label="$t('system:loginLog:table:LoginUserName')" prop="ActionUserName" min-width="140"
:label="$t('system:loginLog:table:LoginUserName')" show-overflow-tooltip sortable="custom" />
prop="ActionUserName" <el-table-column :label="$t('system:loginLog:table:Aetionlserlype')" prop="ActionUserType" min-width="100"
min-width="140" show-overflow-tooltip sortable="custom" />
show-overflow-tooltip
sortable="custom"
/>
<el-table-column
:label="$t('system:loginLog:table:Aetionlserlype')"
prop="ActionUserType"
min-width="100"
show-overflow-tooltip
sortable="custom"
/>
<!-- <el-table-column <!-- <el-table-column
:label="$t('system:loginLog:table:LoginUserType')" :label="$t('system:loginLog:table:LoginUserType')"
prop="LoginUserTypeEnum" prop="LoginUserTypeEnum"
@@ -180,13 +94,8 @@
{{ $fd("UserType", scope.row.LoginUserTypeEnum) }} {{ $fd("UserType", scope.row.LoginUserTypeEnum) }}
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column <el-table-column :label="$t('system:loginLog:table:OptUserName')" prop="TargetIdentityUserName" min-width="200"
:label="$t('system:loginLog:table:OptUserName')" sortable="custom" show-overflow-tooltip />
prop="TargetIdentityUserName"
min-width="200"
sortable="custom"
show-overflow-tooltip
/>
<!-- <el-table-column <!-- <el-table-column
:label="$t('system:loginLog:table:OptUserType')" :label="$t('system:loginLog:table:OptUserType')"
prop="OptUserTypeEnum" prop="OptUserTypeEnum"
@@ -198,51 +107,36 @@
{{ $fd("UserType", scope.row.OptUserTypeEnum) }} {{ $fd("UserType", scope.row.OptUserTypeEnum) }}
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column <el-table-column :label="$t('system:loginLog:table:detail')" min-width="120" show-overflow-tooltip>
:label="$t('system:loginLog:table:detail')"
min-width="120"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button v-if="scope.row.JsonObj" type="text" @click="handleOpenDialog(scope.row)">
v-if="scope.row.JsonObj"
type="text"
@click="handleOpenDialog(scope.row)"
>
<span>{{ $t('system:loginLog:message:detail') }}</span> <span>{{ $t('system:loginLog:message:detail') }}</span>
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column :label="$t('system:loginLog:table:CreateTime')" prop="CreateTime" min-width="180"
:label="$t('system:loginLog:table:CreateTime')" sortable="custom" show-overflow-tooltip />
prop="CreateTime"
min-width="180"
sortable="custom"
show-overflow-tooltip
/>
</el-table> </el-table>
<div class="pagination" style="text-align: right; margin-top: 5px"> <div class="pagination" style="text-align: right; margin-top: 5px">
<pagination <pagination :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
:total="total" @pagination="getList" />
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</div> </div>
</div> </div>
<detail :config="config" :JsonObj="JsonObj" /> <detail :config="config" :JsonObj="JsonObj" />
</div> </div>
</template> </template>
<script> <script>
import { getUserLogList } from '@/api/user' import { getUserLogList, setIsIgnoreUncommonly } from '@/api/user'
import Pagination from '@/components/Pagination' import Pagination from '@/components/Pagination'
import detail from './detail.vue' import detail from './detail.vue'
import moment from 'moment' import moment from 'moment'
const searchDataDefault = () => { const searchDataDefault = () => {
return { return {
OptType: null, OptType: null,
OptTypeList: [],
Ip: '', Ip: '',
LoginFaildName: '', LoginFaildName: '',
IsLoginUncommonly: null,
LoginUserName: '', LoginUserName: '',
LoginUserTypeEnum: null, LoginUserTypeEnum: null,
BeginDate: '', BeginDate: '',
@@ -276,6 +170,26 @@ export default {
this.getList() this.getList()
}, },
methods: { methods: {
//
async setIsIgnoreUncommonly(row) {
try {
let confirm = await this.$confirm(this.$t("system:loginLog:confirmMessage:setIsIgnoreUncommonly"))
if (!confirm) return false
let data = {
IsIgnoreUncommonly: true,
Id: row.Id
}
this.loading = true
let res = await setIsIgnoreUncommonly(data)
this.loading = false
if (res.IsSuccess) {
this.getList()
}
} catch (err) {
this.loading = false
console.log(err)
}
},
handleOpenDialog(row) { handleOpenDialog(row) {
if (!row.JsonObj) if (!row.JsonObj)
return this.$message.warning(this.$t('system:loginLog:message:noJSON')) return this.$message.warning(this.$t('system:loginLog:message:noJSON'))
@@ -334,28 +248,37 @@ export default {
display: flex; display: flex;
padding: 10px; padding: 10px;
border-radius: 5px; border-radius: 5px;
.left { .left {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 0; width: 0;
flex-grow: 4; flex-grow: 4;
// border-right: 1px solid #ccc; // border-right: 1px solid #ccc;
.filter-container { .filter-container {
display: flex; display: flex;
align-items: center; align-items: center;
margin: 5px; margin: 5px;
} }
.data-table { .data-table {
flex: 1; flex: 1;
padding: 5px 0px; padding: 5px 0px;
} }
.pagination-container { .pagination-container {
text-align: right; text-align: right;
} }
} }
.icon-i { .icon-i {
color: #f56c6c; color: #f56c6c;
cursor: pointer; cursor: pointer;
} }
.icon-success {
color: #67C23A
}
} }
</style> </style>
-11
View File
@@ -6,7 +6,6 @@
v-model="queryParams.menuName" v-model="queryParams.menuName"
placeholder="" placeholder=""
clearable clearable
size="small"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
@@ -15,21 +14,18 @@
v-model="queryParams.visible" v-model="queryParams.visible"
placeholder="" placeholder=""
clearable clearable
size="small"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button
type="primary" type="primary"
icon="el-icon-search" icon="el-icon-search"
size="mini"
@click="handleQuery" @click="handleQuery"
>{{ $t("system:menu:button:search") }}</el-button >{{ $t("system:menu:button:search") }}</el-button
> >
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="mini"
@click="handleAdd" @click="handleAdd"
>{{ $t("system:menu:button:add") }}</el-button >{{ $t("system:menu:button:add") }}</el-button
> >
@@ -40,7 +36,6 @@
type="info" type="info"
plain plain
icon="el-icon-sort" icon="el-icon-sort"
size="mini"
@click="toggleExpandAll" @click="toggleExpandAll"
>{{ $t("system:menu:button:foldAndExpand") }}</el-button >{{ $t("system:menu:button:foldAndExpand") }}</el-button
> >
@@ -154,25 +149,19 @@
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-hasPermi="['system:menu:edit']" v-hasPermi="['system:menu:edit']"
size="mini"
type="text" type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
>{{ $t("system:menu:button:edit") }}</el-button >{{ $t("system:menu:button:edit") }}</el-button
> >
<el-button <el-button
v-hasPermi="['system:menu:add']" v-hasPermi="['system:menu:add']"
size="mini"
type="text" type="text"
icon="el-icon-plus"
@click="handleAdd(scope.row)" @click="handleAdd(scope.row)"
>{{ $t("system:menu:button:add") }}</el-button >{{ $t("system:menu:button:add") }}</el-button
> >
<el-button <el-button
v-hasPermi="['system:menu:delete']" v-hasPermi="['system:menu:delete']"
size="mini"
type="text" type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
>{{ $t("system:menu:button:remove") }}</el-button >{{ $t("system:menu:button:remove") }}</el-button
> >
+7 -13
View File
@@ -3,7 +3,7 @@
<div ref="leftContainer" class="left"> <div ref="leftContainer" class="left">
<el-form :inline="true"> <el-form :inline="true">
<el-form-item :label="$t('system:notice:label:NoticeLevel')" prop="NoticeLevelEnum"> <el-form-item :label="$t('system:notice:label:NoticeLevel')" prop="NoticeLevelEnum">
<el-select v-model="searchData.NoticeLevelEnum" clearable size="small"> <el-select v-model="searchData.NoticeLevelEnum" clearable>
<el-option <el-option
v-for="item of $d.NoteLevel" v-for="item of $d.NoteLevel"
:key="item.value" :key="item.value"
@@ -13,7 +13,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('system:notice:label:NoticeType')" prop="NoticeTypeEnum"> <el-form-item :label="$t('system:notice:label:NoticeType')" prop="NoticeTypeEnum">
<el-select v-model="searchData.NoticeTypeEnum" clearable size="small"> <el-select v-model="searchData.NoticeTypeEnum" clearable>
<el-option <el-option
v-for="item of $d.NoteType" v-for="item of $d.NoteType"
:key="item.value" :key="item.value"
@@ -23,7 +23,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('system:notice:label:ApplicableProject')" prop="ApplicableProjectEnum"> <el-form-item :label="$t('system:notice:label:ApplicableProject')" prop="ApplicableProjectEnum">
<el-select v-model="searchData.ApplicableProjectEnum" clearable size="small"> <el-select v-model="searchData.ApplicableProjectEnum" clearable>
<el-option <el-option
v-for="item of $d.NoticeApplicableTrial" v-for="item of $d.NoticeApplicableTrial"
:key="item.value" :key="item.value"
@@ -33,7 +33,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('system:notice:label:NoticeUserTypeIdList')" prop="NoticeUserTypeIdList"> <el-form-item :label="$t('system:notice:label:NoticeUserTypeIdList')" prop="NoticeUserTypeIdList">
<el-select v-model="searchData.NoticeUserTypeIdList" multiple clearable size="small"> <el-select v-model="searchData.NoticeUserTypeIdList" multiple clearable>
<el-option <el-option
v-for="item of roleList" v-for="item of roleList"
:key="item.Id" :key="item.Id"
@@ -43,7 +43,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('system:notice:label:NoticeMode')" prop="NoticeModeEnum"> <el-form-item :label="$t('system:notice:label:NoticeMode')" prop="NoticeModeEnum">
<el-select v-model="searchData.NoticeModeEnum" clearable size="small"> <el-select v-model="searchData.NoticeModeEnum" clearable>
<el-option <el-option
v-for="item of $d.NoticeMode" v-for="item of $d.NoticeMode"
:key="item.value" :key="item.value"
@@ -53,8 +53,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="getList">{{ $t('common:button:search') }}</el-button> <el-button type="primary" icon="el-icon-search" @click="getList">{{ $t('common:button:search') }}</el-button>
<el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd">{{ $t('common:button:add') }}</el-button> <el-button type="primary" icon="el-icon-plus" @click="handleAdd">{{ $t('common:button:add') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table v-loading="loading" v-adaptive="{bottomOffset:45}" height="100" :data="list" class="table"> <el-table v-loading="loading" v-adaptive="{bottomOffset:45}" height="100" :data="list" class="table">
@@ -116,23 +116,17 @@
<el-table-column :label="$t('common:action:action')" fixed="right" prop="UserTypeShortName" min-width="200" show-overflow-tooltip> <el-table-column :label="$t('common:action:action')" fixed="right" prop="UserTypeShortName" min-width="200" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini"
type="text" type="text"
icon="el-icon-edit-outline"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
>{{$t('common:action:edit')}}</el-button> >{{$t('common:action:edit')}}</el-button>
<el-button <el-button
v-if="scope.row.NoticeStateEnum === 0" v-if="scope.row.NoticeStateEnum === 0"
size="mini"
type="text" type="text"
icon="el-icon-s-promotion"
@click="handlePush(scope.row)" @click="handlePush(scope.row)"
>{{$t('common:action:push')}}</el-button> >{{$t('common:action:push')}}</el-button>
<el-button <el-button
v-if="scope.row.NoticeStateEnum === 1" v-if="scope.row.NoticeStateEnum === 1"
size="mini"
type="text" type="text"
icon="el-icon-s-release"
@click="handleGet(scope.row)" @click="handleGet(scope.row)"
>{{$t('common:action:pull')}}</el-button> >{{$t('common:action:pull')}}</el-button>
</template> </template>
+1 -8
View File
@@ -6,12 +6,11 @@
<el-input <el-input
v-model="queryParams.SearchFilter" v-model="queryParams.SearchFilter"
clearable clearable
size="small"
@keyup.enter.native="getList" @keyup.enter.native="getList"
/> />
</el-form-item> </el-form-item>
<el-form-item :label="$t('system:role:title:Group')"> <el-form-item :label="$t('system:role:title:Group')">
<el-select v-model="queryParams.GroupId" clearable size="small"> <el-select v-model="queryParams.GroupId" clearable>
<el-option <el-option
v-for="item of dict.type.UserTypeGroup" v-for="item of dict.type.UserTypeGroup"
:key="item.value" :key="item.value"
@@ -24,7 +23,6 @@
<el-button <el-button
type="primary" type="primary"
icon="el-icon-search" icon="el-icon-search"
size="mini"
@click="getList" @click="getList"
>{{ $t('common:button:search') }}</el-button >{{ $t('common:button:search') }}</el-button
> >
@@ -32,7 +30,6 @@
v-hasPermi="['system:role:add']" v-hasPermi="['system:role:add']"
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="mini"
@click="handleAddRole" @click="handleAddRole"
>{{ $t('common:button:add') }}</el-button >{{ $t('common:button:add') }}</el-button
> >
@@ -111,17 +108,13 @@
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-hasPermi="['system:role:edit']" v-hasPermi="['system:role:edit']"
size="mini"
type="text" type="text"
icon="el-icon-edit"
@click="handleEditRole(scope.row)" @click="handleEditRole(scope.row)"
>{{ $t('common:button:edit') }}</el-button >{{ $t('common:button:edit') }}</el-button
> >
<el-button <el-button
v-hasPermi="['system:role:delete']" v-hasPermi="['system:role:delete']"
size="mini"
type="text" type="text"
icon="el-icon-delete"
@click="handleDeleteRole(scope.row)" @click="handleDeleteRole(scope.row)"
>{{ $t('common:button:delete') }}</el-button >{{ $t('common:button:delete') }}</el-button
> >
@@ -227,7 +227,7 @@
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 详情 --> <!-- 详情 -->
<el-button <el-button
circle type="text"
:disabled=" :disabled="
(scope.row.TrialStatusStr === 'Initializing' && (scope.row.TrialStatusStr === 'Initializing' &&
!hasPermi(['role:pm'])) || !hasPermi(['role:pm'])) ||
@@ -240,10 +240,10 @@
hasPermi(['role:pm']) hasPermi(['role:pm'])
)) ))
" "
icon="el-icon-info"
:title="$t('system:retrospect:table:detail')"
@click.stop="handleDetail(scope.row)" @click.stop="handleDetail(scope.row)"
/> >
{{ $t('system:retrospect:table:detail') }}
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
+2 -3
View File
@@ -2,7 +2,6 @@
<box-content> <box-content>
<div class="search" style="position: relative"> <div class="search" style="position: relative">
<SearchForm <SearchForm
size="mini"
:that="this" :that="this"
:search-data="searchData" :search-data="searchData"
:search-form="searchForm" :search-form="searchForm"
@@ -249,12 +248,12 @@ export default {
operates: [ operates: [
{ {
name: this.$t('common:button:edit'), name: this.$t('common:button:edit'),
type: 'primary', type: 'text',
emitKey: 'editCb', emitKey: 'editCb',
}, },
{ {
name: this.$t('common:button:email'), name: this.$t('common:button:email'),
type: 'primary', type: 'text',
emitKey: 'sendCb', emitKey: 'sendCb',
show: 'IsFirstAdd', show: 'IsFirstAdd',
}, },

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