Compare commits
22 Commits
e51e7d0e66
...
v1.5.3
| Author | SHA1 | Date | |
|---|---|---|---|
| 04bd72e90f | |||
| d7fcd79cb2 | |||
| bebd4c4aa0 | |||
| 81506cc337 | |||
| 13f105faa5 | |||
| 32ded49982 | |||
| 05ab287e81 | |||
| de16944fd6 | |||
| be96158a73 | |||
| 5368538d52 | |||
| 4a659fdde4 | |||
| 198e580288 | |||
| 3ada3585e5 | |||
| 38ce7c1f56 | |||
| afb1d17853 | |||
| 01c2a29085 | |||
| c94abac896 | |||
| fd0679dbd8 | |||
| 6137d9deff | |||
| 8a4674452f | |||
| a78195fbca | |||
| 1a139af448 |
@@ -2,28 +2,28 @@
|
||||
ENV = 'usa'
|
||||
NODE_ENV = 'usa'
|
||||
# base public path
|
||||
VUE_APP_BASE_PATH = 'https://ei-code-prod.s3.amazonaws.com/2024-07-10/'
|
||||
VUE_APP_BASE_PATH = 'https://ei-code-prod.s3.amazonaws.com/2024-07-12/'
|
||||
|
||||
# 是否开启登陆限制 true:是 false:否
|
||||
VUE_APP_LOGIN_FOR_PERMISSION = false
|
||||
VUE_APP_LOGIN_FOR_PERMISSION = true
|
||||
|
||||
# 是否开启长时间无操作锁定弹框MFA验证 true:是 false:否
|
||||
VUE_APP_LOCK_FOR_PERMISSION_MFA = true
|
||||
|
||||
# 是否开启长时间无操作锁定弹框 true:是 false:否
|
||||
VUE_APP_LOCK_FOR_PERMISSION = false
|
||||
VUE_APP_LOCK_FOR_PERMISSION = true
|
||||
|
||||
# 无操作锁定弹框判断时间 单位:秒
|
||||
VUE_APP_LOCK_FOR_TIME = 900
|
||||
|
||||
# 是否开启长时间无操作登出 true:是 false:否
|
||||
VUE_APP_LOGOUT_FOR_PERMISSION = false
|
||||
VUE_APP_LOGOUT_FOR_PERMISSION = true
|
||||
|
||||
# 无操作锁定弹框判断时间 单位:秒
|
||||
VUE_APP_LOGOUT_FOR_TIME = 1800
|
||||
|
||||
# 是否开启密码正则验证 true:是 false:否
|
||||
VUE_APP_PASSWORD_FOR_PERMISSION = false
|
||||
VUE_APP_PASSWORD_FOR_PERMISSION = true
|
||||
|
||||
# 是否开启密码正则验证 true:是 false:否
|
||||
VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
# just a flag
|
||||
ENV = 'usa'
|
||||
NODE_ENV = 'usa'
|
||||
# base public path
|
||||
VUE_APP_BASE_PATH = 'https://ei-med-s3-code.s3.amazonaws.com/2024-07-11/'
|
||||
|
||||
# 是否开启登陆限制 true:是 false:否
|
||||
VUE_APP_LOGIN_FOR_PERMISSION = true
|
||||
|
||||
# 是否开启长时间无操作锁定弹框MFA验证 true:是 false:否
|
||||
VUE_APP_LOCK_FOR_PERMISSION_MFA = true
|
||||
|
||||
# 是否开启长时间无操作锁定弹框 true:是 false:否
|
||||
VUE_APP_LOCK_FOR_PERMISSION = true
|
||||
|
||||
# 无操作锁定弹框判断时间 单位:秒
|
||||
VUE_APP_LOCK_FOR_TIME = 900
|
||||
|
||||
# 是否开启长时间无操作登出 true:是 false:否
|
||||
VUE_APP_LOGOUT_FOR_PERMISSION = true
|
||||
|
||||
# 无操作锁定弹框判断时间 单位:秒
|
||||
VUE_APP_LOGOUT_FOR_TIME = 1800
|
||||
|
||||
# 是否开启密码正则验证 true:是 false:否
|
||||
VUE_APP_PASSWORD_FOR_PERMISSION = true
|
||||
|
||||
# 是否开启密码正则验证 true:是 false:否
|
||||
VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$
|
||||
|
||||
# 是否开启文档签署验证 true:是 false:否
|
||||
VUE_APP_WORD_FOR_PERMISSION = true
|
||||
|
||||
# 公司名称
|
||||
VUE_APP_COMPANY_NAME = "Elevate Imaging"
|
||||
|
||||
# dicom文件地址
|
||||
VUE_APP_DICOM_PATH = 'https://zyypacs-usa.oss-us-west-1.aliyuncs.com'
|
||||
|
||||
VUE_APP_DICOM_USA_PATH = 'https://zyypacs-usa.oss-us-west-1.aliyuncs.com'
|
||||
|
||||
VUE_APP_OSS_CONFIG_REGION = 'oss-us-west-1'
|
||||
|
||||
VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs-usa'
|
||||
|
||||
VUE_APP_OSS_PATH = '/usa/dist'
|
||||
+5
-36
@@ -10,51 +10,20 @@ clone:
|
||||
disable: true #禁用默认克隆
|
||||
|
||||
server:
|
||||
host: 106.14.89.110
|
||||
host: 47.117.164.182
|
||||
user: root
|
||||
password:
|
||||
from_secret: local_pwd
|
||||
|
||||
steps:
|
||||
- name: publish-test-irc-vue
|
||||
- name: uat-branch-publish-irc-vue
|
||||
commands:
|
||||
- echo start publish test-irc-vue
|
||||
- cd /opt/1panel/hang/vue/test-irc
|
||||
- sh test-irc.sh v${DRONE_BUILD_NUMBER}
|
||||
- cd /opt/1panel/vue-devops/Uat_IRC/Uat-To-Uat
|
||||
- sh uat-to-uat.sh v${DRONE_BUILD_NUMBER}
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- main
|
||||
- uat
|
||||
|
||||
---
|
||||
|
||||
|
||||
kind: pipeline
|
||||
type: ssh
|
||||
name: ssh-linux-test-study-publish
|
||||
|
||||
platform:
|
||||
os: Linux
|
||||
arch: 386
|
||||
|
||||
clone:
|
||||
disable: true #禁用默认克隆
|
||||
|
||||
server:
|
||||
host: 106.14.89.110
|
||||
user: root
|
||||
password:
|
||||
from_secret: local_pwd
|
||||
|
||||
steps:
|
||||
- name: publish-test-study
|
||||
commands:
|
||||
- echo start publish test-study-api
|
||||
- cd /opt/1panel/hang/devops/test-study
|
||||
- sh test-study.sh v${DRONE_BUILD_NUMBER}
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- Test.Study
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
"build:prod": "vue-cli-service build --mode prod",
|
||||
"build:uat": "vue-cli-service build --mode uat",
|
||||
"build:usa": "vue-cli-service build --mode usa",
|
||||
"build:usa_prod": "vue-cli-service build --mode usa_prod",
|
||||
"pre": "vue-cli-service build --mode pre",
|
||||
"i18n": "npm run i18n:zh && npm run i18n:en",
|
||||
"i18n:zh": "node i18nGenerate.js lang=zh keyCol=5 valCol=6",
|
||||
|
||||
+23
@@ -89,6 +89,7 @@ import {
|
||||
batchAddOrUpdateFrontInternationalization,
|
||||
getFrontInternationalizationList,
|
||||
} from "@/api/dictionary/dictionary";
|
||||
import { getTrialExtralConfig } from "@/api/trials";
|
||||
import Vue from "vue";
|
||||
import i18n from "./lang";
|
||||
export default {
|
||||
@@ -105,6 +106,28 @@ export default {
|
||||
mounted() {
|
||||
this.show = process.env.VUE_APP_OSS_PATH === "/test/dist";
|
||||
},
|
||||
watch: {
|
||||
"$route.query": {
|
||||
async handler() {
|
||||
if (
|
||||
this.$route.query.trialId &&
|
||||
this.$route.query.trialId !== this.$store.state.trials.config.trialId
|
||||
) {
|
||||
let res = await getTrialExtralConfig({
|
||||
TrialId: this.$route.query.trialId,
|
||||
});
|
||||
if (res.IsSuccess) {
|
||||
this.$store.dispatch("trials/setConfig", {
|
||||
trialId: this.$route.query.trialId,
|
||||
...res.Result,
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
immediate: true,
|
||||
deep: true,
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
changeValue(target, attr, e) {
|
||||
this.$set(target, attr, e);
|
||||
|
||||
@@ -171,3 +171,19 @@ export function getCustomTag(param) {
|
||||
data: param
|
||||
})
|
||||
}
|
||||
|
||||
export function clearSkipReadingCache(param) {
|
||||
return request({
|
||||
url: `/ReadingImageTask/clearSkipReadingCache`,
|
||||
method: 'post',
|
||||
data: param
|
||||
})
|
||||
}
|
||||
|
||||
export function setSkipReadingCache(param) {
|
||||
return request({
|
||||
url: `/ReadingImageTask/setSkipReadingCache`,
|
||||
method: 'post',
|
||||
data: param
|
||||
})
|
||||
}
|
||||
|
||||
@@ -3675,3 +3675,11 @@ export function getTrialSiteSelectList(params) {
|
||||
params
|
||||
})
|
||||
}
|
||||
// 获取项目配置
|
||||
export function getTrialExtralConfig(params) {
|
||||
return request({
|
||||
url: `/TrialConfig/getTrialExtralConfig`,
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 39 KiB |
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 98 KiB |
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="_图层_2" data-name="图层 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 454.72 126.1">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #0093dd;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #5b5b5b;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<g id="_图层_1-2" data-name="图层 1">
|
||||
<g>
|
||||
<path class="cls-1" d="m162.51,68.1h14.37c5.59,0,9.79,4.03,8.73,8.37l-1.38,5.61h-44.66c-2.41,0-4.3-.44-5.66-1.32-1.36-.82-1.84-2.17-1.42-4.06L148.68,6.71c.52-1.95,1.97-3.56,4.32-4.82,2.36-1.26,5.16-1.89,8.41-1.89h16.82l-15.72,68.1Z"/>
|
||||
<path class="cls-1" d="m204.2,25.41c.52-1.76,1.86-3.21,4.01-4.34,2.15-1.13,4.69-1.7,7.62-1.7h15.88l-11.32,49.4c-.94,3.97-3.83,7.19-8.64,9.68-4.82,2.49-10.43,3.73-16.82,3.73h-3.61l12.89-56.77ZM219.29.38h17.6l-2.04,8.78c-.42,1.26-1.36,2.28-2.83,3.07-1.47.79-3.2,1.18-5.19,1.18h-19.02l1.89-8.12c.31-1.45,1.39-2.63,3.22-3.54,1.83-.91,3.95-1.37,6.36-1.37Z"/>
|
||||
<path class="cls-1" d="m262.55,68.1h14.37c5.59,0,9.79,4.03,8.73,8.37l-1.38,5.61h-44.66c-2.41,0-4.3-.44-5.66-1.32-1.36-.82-1.84-2.17-1.42-4.06L248.72,6.71c.52-1.95,1.97-3.56,4.32-4.82,2.36-1.26,5.16-1.89,8.41-1.89h16.82l-15.72,68.1Z"/>
|
||||
<path class="cls-1" d="m304.25,25.41c.52-1.76,1.86-3.21,4.01-4.34,2.15-1.13,4.69-1.7,7.62-1.7h15.88l-11.32,49.4c-.94,3.97-3.83,7.19-8.64,9.68-4.82,2.49-10.43,3.73-16.82,3.73h-3.61l12.89-56.77ZM319.33.38h17.6l-2.04,8.78c-.42,1.26-1.36,2.28-2.83,3.07-1.47.79-3.2,1.18-5.19,1.18h-19.02l1.89-8.12c.31-1.45,1.39-2.63,3.22-3.54,1.83-.91,3.95-1.37,6.36-1.37Z"/>
|
||||
<g>
|
||||
<path class="cls-2" d="m0,101.17h2.51v19.36H0v-19.36Z"/>
|
||||
<path class="cls-2" d="m28.37,110.12v10.4h-2.4v-9.54c0-2.31-.64-3.65-2.9-3.65-1.76,0-3.26.5-3.91,2.65v10.54h-2.4v-9.54c0-2.31-.56-3.65-2.76-3.65-1.87,0-3.24.42-3.99,2.73v10.46h-2.4v-15.06h2.4v1.98c.92-1.79,2.54-2.26,4.35-2.26,2.37,0,3.74.95,4.38,2.45.89-1.95,2.84-2.45,4.69-2.45,3.51,0,4.94,2.04,4.94,4.94Z"/>
|
||||
<path class="cls-2" d="m45.28,109.84v10.68h-2.04l-.36-2.29c-.86,1.65-3.12,2.57-5.38,2.57-3.6,0-5.19-1.65-5.19-4.49,0-3.57,2.37-4.8,5.97-4.8h4.6v-1.26c0-1.81-.64-3.07-3.71-3.07-1,0-2.23.11-3.32.33v-2.12c1.12-.14,2.34-.22,3.43-.22,4.74,0,6,1.95,6,4.66Zm-2.4,6.08v-2.48h-4.43c-2.48,0-3.65.5-3.65,2.85,0,1.65.81,2.51,2.93,2.51,2.51,0,4.38-1.09,5.16-2.87Z"/>
|
||||
<path class="cls-2" d="m63.05,105.46v14c0,4.16-2.26,6.64-7.36,6.64-1.28,0-2.71-.17-3.65-.36v-2.04c1.14.22,2.4.33,3.68.33,3.35,0,4.94-1.37,4.94-4.83v-1.51c-.61,1.76-1.98,2.82-4.88,2.82-5.02,0-6.25-3.07-6.25-7.67,0-4.16,1.23-7.67,6.25-7.67,3.04,0,4.29,1.31,4.88,3.1v-2.82h2.4Zm-2.32,7.39c0-3.46-1-5.66-4.63-5.66s-4.02,2.73-4.02,5.66c0,3.15.47,5.66,4.02,5.66s4.63-2.06,4.63-5.66Z"/>
|
||||
<path class="cls-2" d="m67.9,101.28c0-1.26.39-1.42,1.45-1.42,1,0,1.42.17,1.42,1.42s-.42,1.42-1.42,1.42c-1.06,0-1.45-.2-1.45-1.42Zm.22,4.18h2.4v15.06h-2.4v-15.06Z"/>
|
||||
<path class="cls-2" d="m87.87,110.09v10.43h-2.43v-9.54c0-2.31-.47-3.65-2.87-3.65-1.9,0-3.74.36-4.57,3.01v10.18h-2.4v-15.06h2.4v2.15c.92-1.92,2.98-2.43,4.83-2.43,3.93,0,5.05,2.04,5.05,4.91Z"/>
|
||||
<path class="cls-2" d="m105.5,105.46v14c0,4.16-2.26,6.64-7.36,6.64-1.28,0-2.71-.17-3.65-.36v-2.04c1.14.22,2.4.33,3.68.33,3.35,0,4.94-1.37,4.94-4.83v-1.51c-.61,1.76-1.98,2.82-4.88,2.82-5.02,0-6.25-3.07-6.25-7.67,0-4.16,1.23-7.67,6.25-7.67,3.04,0,4.29,1.31,4.88,3.1v-2.82h2.4Zm-2.32,7.39c0-3.46-1-5.66-4.63-5.66s-4.02,2.73-4.02,5.66c0,3.15.47,5.66,4.02,5.66s4.63-2.06,4.63-5.66Z"/>
|
||||
<path class="cls-2" d="m129.47,103.4h-5.63v17.13h-2.51v-17.13h-5.66v-2.23h13.81v2.23Z"/>
|
||||
<path class="cls-2" d="m138.31,105.18l-.08,2.18h-.33c-1.92,0-3.82.64-4.66,3.32v9.85h-2.4v-15.06h2.4v2.73c.95-2.51,2.98-3.01,4.8-3.01h.28Z"/>
|
||||
<path class="cls-2" d="m141.19,101.28c0-1.26.39-1.42,1.45-1.42,1,0,1.42.17,1.42,1.42s-.42,1.42-1.42,1.42c-1.06,0-1.45-.2-1.45-1.42Zm.22,4.18h2.4v15.06h-2.4v-15.06Z"/>
|
||||
<path class="cls-2" d="m160.85,109.84v10.68h-2.04l-.36-2.29c-.86,1.65-3.12,2.57-5.38,2.57-3.6,0-5.19-1.65-5.19-4.49,0-3.57,2.37-4.8,5.97-4.8h4.6v-1.26c0-1.81-.64-3.07-3.71-3.07-1,0-2.23.11-3.32.33v-2.12c1.12-.14,2.34-.22,3.43-.22,4.74,0,6,1.95,6,4.66Zm-2.4,6.08v-2.48h-4.43c-2.48,0-3.65.5-3.65,2.85,0,1.65.81,2.51,2.93,2.51,2.51,0,4.38-1.09,5.16-2.87Z"/>
|
||||
<path class="cls-2" d="m165.96,117.48v-18.16h2.4v17.54c0,1.51.42,1.81,1.39,1.81.33,0,.75-.03,1.14-.14v1.98c-.45.11-.92.17-1.59.17-2.23,0-3.35-.95-3.35-3.21Z"/>
|
||||
<path class="cls-2" d="m181.13,101.17h4.02l4.94,12.47h.17l4.94-12.47h3.96v19.36h-2.51v-16.82h-.17l-4.96,12.44h-2.73l-5.02-12.44h-.17v16.82h-2.45v-19.36Z"/>
|
||||
<path class="cls-2" d="m216.23,109.84v10.68h-2.04l-.36-2.29c-.86,1.65-3.12,2.57-5.38,2.57-3.6,0-5.19-1.65-5.19-4.49,0-3.57,2.37-4.8,5.97-4.8h4.6v-1.26c0-1.81-.64-3.07-3.71-3.07-1,0-2.23.11-3.32.33v-2.12c1.12-.14,2.34-.22,3.43-.22,4.74,0,6,1.95,6,4.66Zm-2.4,6.08v-2.48h-4.43c-2.48,0-3.65.5-3.65,2.85,0,1.65.81,2.51,2.93,2.51,2.51,0,4.38-1.09,5.16-2.87Z"/>
|
||||
<path class="cls-2" d="m233.61,110.09v10.43h-2.43v-9.54c0-2.31-.47-3.65-2.87-3.65-1.9,0-3.74.36-4.57,3.01v10.18h-2.4v-15.06h2.4v2.15c.92-1.92,2.98-2.43,4.83-2.43,3.93,0,5.05,2.04,5.05,4.91Z"/>
|
||||
<path class="cls-2" d="m250.54,109.84v10.68h-2.04l-.36-2.29c-.86,1.65-3.12,2.57-5.38,2.57-3.6,0-5.19-1.65-5.19-4.49,0-3.57,2.37-4.8,5.97-4.8h4.6v-1.26c0-1.81-.64-3.07-3.71-3.07-1,0-2.23.11-3.32.33v-2.12c1.12-.14,2.34-.22,3.43-.22,4.74,0,6,1.95,6,4.66Zm-2.4,6.08v-2.48h-4.43c-2.48,0-3.65.5-3.65,2.85,0,1.65.81,2.51,2.93,2.51,2.51,0,4.38-1.09,5.16-2.87Z"/>
|
||||
<path class="cls-2" d="m268.31,105.46v14c0,4.16-2.26,6.64-7.36,6.64-1.28,0-2.71-.17-3.65-.36v-2.04c1.14.22,2.4.33,3.68.33,3.35,0,4.94-1.37,4.94-4.83v-1.51c-.61,1.76-1.98,2.82-4.88,2.82-5.02,0-6.25-3.07-6.25-7.67,0-4.16,1.23-7.67,6.25-7.67,3.04,0,4.29,1.31,4.88,3.1v-2.82h2.4Zm-2.32,7.39c0-3.46-1-5.66-4.63-5.66s-4.02,2.73-4.02,5.66c0,3.15.47,5.66,4.02,5.66s4.63-2.06,4.63-5.66Z"/>
|
||||
<path class="cls-2" d="m285.22,113.24l-10.21.64c.03,3.29,1.17,4.8,4.83,4.8,1.65,0,3.57-.42,4.71-.98v2.2c-.86.45-2.93.89-5.08.89-4.44,0-6.97-1.81-6.97-7.81s2.54-7.81,6.83-7.81c5.13,0,6.02,3.38,6.02,6.3,0,.42-.06,1.06-.14,1.76Zm-2.23-1.73c0-2.32-.39-4.35-3.65-4.35-3.46,0-4.24,1.87-4.32,4.94l7.98-.59Z"/>
|
||||
<path class="cls-2" d="m310.27,110.12v10.4h-2.4v-9.54c0-2.31-.64-3.65-2.9-3.65-1.76,0-3.26.5-3.91,2.65v10.54h-2.4v-9.54c0-2.31-.56-3.65-2.76-3.65-1.87,0-3.24.42-3.99,2.73v10.46h-2.4v-15.06h2.4v1.98c.92-1.79,2.54-2.26,4.35-2.26,2.37,0,3.74.95,4.38,2.45.89-1.95,2.84-2.45,4.69-2.45,3.51,0,4.94,2.04,4.94,4.94Z"/>
|
||||
<path class="cls-2" d="m327.03,113.24l-10.21.64c.03,3.29,1.17,4.8,4.83,4.8,1.65,0,3.57-.42,4.71-.98v2.2c-.86.45-2.93.89-5.08.89-4.44,0-6.97-1.81-6.97-7.81s2.54-7.81,6.83-7.81c5.13,0,6.03,3.38,6.03,6.3,0,.42-.06,1.06-.14,1.76Zm-2.23-1.73c0-2.32-.39-4.35-3.65-4.35-3.46,0-4.24,1.87-4.32,4.94l7.98-.59Z"/>
|
||||
<path class="cls-2" d="m343.6,110.09v10.43h-2.43v-9.54c0-2.31-.47-3.65-2.87-3.65-1.9,0-3.74.36-4.57,3.01v10.18h-2.4v-15.06h2.4v2.15c.92-1.92,2.98-2.43,4.83-2.43,3.93,0,5.05,2.04,5.05,4.91Z"/>
|
||||
<path class="cls-2" d="m354.9,118.52v2.04c-.59.08-1.06.14-1.7.14-3.32,0-4.52-.81-4.52-4.77v-8.45h-2.23v-2.01h2.23v-3.57h2.4v3.57h3.74v2.01h-3.74v8.31c0,2.34.33,2.9,2.18,2.9.67,0,1.12-.06,1.65-.17Z"/>
|
||||
<path class="cls-2" d="m364.19,120.05v-2.32c1.14.42,3.46.86,5.75.86,2.9,0,4.41-.86,4.41-3.26s-.84-3.01-4.46-3.88c-3.96-.95-5.41-1.92-5.41-5.36s2.06-5.24,6.44-5.24c1.87,0,3.93.33,4.85.7v2.29c-1.12-.42-3.07-.78-4.83-.78-2.71,0-3.99.53-3.99,3.04,0,1.81.47,2.45,3.96,3.26,4.32,1,5.88,2.15,5.88,5.94s-2.4,5.49-6.86,5.49c-2.4,0-4.8-.42-5.75-.75Z"/>
|
||||
<path class="cls-2" d="m379.71,124.04c2.62,0,3.68-1.12,4.43-3.54l-6.02-15.03h2.59l4.6,12.5h.17l4.35-12.5h2.43l-5.41,14.56c-1.42,3.77-2.71,6.08-7.14,6.08v-2.06Z"/>
|
||||
<path class="cls-2" d="m394.18,120.22v-2.06c1.06.31,2.98.59,4.35.59,2.29,0,3.49-.56,3.49-2.31s-.5-2.15-3.38-2.82c-3.32-.75-4.21-1.81-4.21-4.35s1.84-4.07,5.41-4.07c1.45,0,3.07.22,3.79.5l-.17,2.04c-.86-.33-2.2-.59-3.6-.59-2.12,0-3.18.47-3.18,2.18,0,1.53.53,1.87,2.87,2.4,3.46.78,4.71,1.73,4.71,4.63s-2.04,4.35-5.72,4.35c-1.45,0-3.54-.22-4.38-.47Z"/>
|
||||
<path class="cls-2" d="m414.77,118.52v2.04c-.59.08-1.06.14-1.7.14-3.32,0-4.52-.81-4.52-4.77v-8.45h-2.23v-2.01h2.23v-3.57h2.4v3.57h3.74v2.01h-3.74v8.31c0,2.34.33,2.9,2.18,2.9.67,0,1.12-.06,1.65-.17Z"/>
|
||||
<path class="cls-2" d="m429.67,113.24l-10.21.64c.03,3.29,1.17,4.8,4.83,4.8,1.65,0,3.57-.42,4.71-.98v2.2c-.86.45-2.93.89-5.08.89-4.44,0-6.97-1.81-6.97-7.81s2.54-7.81,6.83-7.81c5.13,0,6.02,3.38,6.02,6.3,0,.42-.06,1.06-.14,1.76Zm-2.23-1.73c0-2.32-.39-4.35-3.65-4.35-3.46,0-4.24,1.87-4.32,4.94l7.98-.59Z"/>
|
||||
<path class="cls-2" d="m454.72,110.12v10.4h-2.4v-9.54c0-2.31-.64-3.65-2.9-3.65-1.76,0-3.26.5-3.91,2.65v10.54h-2.4v-9.54c0-2.31-.56-3.65-2.76-3.65-1.87,0-3.24.42-3.99,2.73v10.46h-2.4v-15.06h2.4v1.98c.92-1.79,2.54-2.26,4.35-2.26,2.37,0,3.74.95,4.38,2.45.89-1.95,2.84-2.45,4.69-2.45,3.51,0,4.94,2.04,4.94,4.94Z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.8 KiB |
@@ -44,7 +44,6 @@ Viewer.setDefaults({
|
||||
'rotatable': true,
|
||||
'scalable': true,
|
||||
'transition': true,
|
||||
'fullscreen': true,
|
||||
'keyboard': true,
|
||||
'url': 'data-source'
|
||||
}
|
||||
|
||||
+3
-3
@@ -12,7 +12,7 @@ NProgress.configure({ showSpinner: false })
|
||||
|
||||
const whiteList = ['/ReviewersResearch', '/login', '/error', '/resetpassword', '/recompose', '/email-recompose', '/trialStats', '/showdicom', '/imagesShare', '/audit', '/preview', '/researchLogin', '/blindResumeInfo', '/trialsResume', '/joinVerify', '/showNoneDicoms', '/noneDicomReading', '/clinicalData', '/readingDicoms', '/readingPage', '/visitDicomReview', '/visitNondicomReview', '/globalReview', '/adReview', '/oncologyReview', '/nonedicoms']
|
||||
|
||||
router.beforeEach(async(to, from, next) => {
|
||||
router.beforeEach(async (to, from, next) => {
|
||||
NProgress.start()
|
||||
// 设置页面标题
|
||||
// document.title = getPageTitle(to.meta.title)
|
||||
@@ -56,7 +56,7 @@ router.beforeEach(async(to, from, next) => {
|
||||
/* has no token*/
|
||||
if (whiteList.indexOf(to.path) !== -1) {
|
||||
// 在免登录whiteList中,直接进入
|
||||
if (to.path === '/readingDicoms' || to.path === '/noneDicomReading'){
|
||||
if (to.path === '/readingDicoms' || to.path === '/noneDicomReading') {
|
||||
OSSclient()
|
||||
}
|
||||
next()
|
||||
@@ -68,7 +68,7 @@ router.beforeEach(async(to, from, next) => {
|
||||
next(`/ReviewersResearch?`)
|
||||
NProgress.done()
|
||||
} else {
|
||||
// 其他无权访问的页面将重定向到登录页面。
|
||||
// 其他无权访问的页面将重定向到登录页面。
|
||||
next(`/login?`)
|
||||
NProgress.done()
|
||||
}
|
||||
|
||||
@@ -493,11 +493,10 @@ const actions = {
|
||||
})
|
||||
},
|
||||
removeCustomizeMeasuredData({ state }, obj) {
|
||||
|
||||
return new Promise(async resolve => {
|
||||
var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
|
||||
var measureData = state.visitTaskList[index].MeasureData
|
||||
console.log('removeCustomizeMeasuredData',obj, state.visitTaskList[index].MeasureData)
|
||||
console.log('removeCustomizeMeasuredData', obj, state.visitTaskList[index].MeasureData)
|
||||
// var uuid = obj.measureData.data.uuid
|
||||
// var idx = measureData.findIndex(item => item.MeasureData && item.MeasureData.data && item.MeasureData.data.uuid === uuid)
|
||||
// console.log(obj, measureData)
|
||||
@@ -682,7 +681,7 @@ const actions = {
|
||||
} else {
|
||||
// state.visitTaskList[index].MeasureData.push(obj.MeasureData.data)
|
||||
state.visitTaskList[index].MeasureData.push({
|
||||
MeasureData: obj.measureData ,
|
||||
MeasureData: obj.measureData,
|
||||
SeriesId: obj.measureData.seriesId,
|
||||
StudyId: obj.measureData.studyId,
|
||||
InstanceId: obj.measureData.instanceId,
|
||||
@@ -898,7 +897,7 @@ const actions = {
|
||||
},
|
||||
setImageloadedInfo({ state }, obj) {
|
||||
var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
|
||||
let prefetchInstanceCount = state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].prefetchInstanceCount
|
||||
const prefetchInstanceCount = state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].prefetchInstanceCount
|
||||
state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].prefetchInstanceCount = prefetchInstanceCount + 100
|
||||
state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].imageloadedArr.push(obj.imageId)
|
||||
},
|
||||
|
||||
@@ -8,6 +8,7 @@ const getDefaultState = () => {
|
||||
visitPointQuery: null,
|
||||
studyListQuery: null,
|
||||
unlock: false,
|
||||
config: {},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +21,9 @@ const mutations = {
|
||||
SET_UNLOCK: (state, unlock) => {
|
||||
state.unlock = unlock
|
||||
},
|
||||
SET_CONFIG: (state, config) => {
|
||||
state.config = config
|
||||
},
|
||||
SET_ACTIVENAME: (state, activeName) => {
|
||||
state.trialDetailActiveName = activeName
|
||||
},
|
||||
@@ -44,6 +48,9 @@ const actions = {
|
||||
setUnLock({ commit }, unlock) {
|
||||
commit('SET_UNLOCK', unlock)
|
||||
},
|
||||
setConfig({ commit }, config) {
|
||||
commit('SET_CONFIG', config)
|
||||
},
|
||||
setActiveName({ commit }, activeName) {
|
||||
commit('SET_ACTIVENAME', activeName)
|
||||
},
|
||||
|
||||
@@ -61,12 +61,14 @@ export const anonymization = function (file, config) {
|
||||
const blob = new Blob([bufferArray], { type: 'application/octet-stream' })
|
||||
resolve({ blob, pixelDataElement })
|
||||
} catch (err) {
|
||||
console.log(file, 'warning')
|
||||
console.log(err)
|
||||
resolve(false);
|
||||
}
|
||||
};
|
||||
reader.readAsArrayBuffer(file);
|
||||
} catch (e) {
|
||||
console.log(file, 'warning')
|
||||
console.log(e)
|
||||
reject(e)
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ export const dcmUpload = async function (name, file, config) {
|
||||
|
||||
|
||||
} catch (e) {
|
||||
console.log(file, 'warning')
|
||||
resolve(false)
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
+1
-3
@@ -2,10 +2,8 @@ const OSS = require('ali-oss')
|
||||
const router = require('@/router');
|
||||
const Minio = require('minio')
|
||||
const stream = require('stream')
|
||||
console.log(Minio)
|
||||
import Vue from 'vue'
|
||||
const { GenerateSTS, GetObjectStoreToken } = require('../api/user.js')
|
||||
import { getToken } from '@/utils/auth'
|
||||
const { GetObjectStoreToken } = require('../api/user.js')
|
||||
|
||||
Vue.prototype.OSSclientConfig = {
|
||||
}
|
||||
|
||||
+72
-21
@@ -6,40 +6,48 @@ import {
|
||||
requestPackageAndAnonymizImage,
|
||||
} from "@/api/load.js";
|
||||
let flag = {};
|
||||
export const downloadImage = async (id, id2) => {
|
||||
if (flag[id2]) return
|
||||
flag[id2] = true
|
||||
export const resetFlag = () => {
|
||||
flag = {}
|
||||
}
|
||||
export const downloadImage = async (id, id2, IsDicom = true) => {
|
||||
if (flag[`${id2}_${IsDicom}`]) return Vue.prototype.$message.warning(Vue.prototype.$t('trials:upload:tip:uploading'));
|
||||
flag[`${id2}_${IsDicom}`] = true
|
||||
try {
|
||||
let params = {
|
||||
TrialId: id,
|
||||
SubjectVisitId: id2
|
||||
SubjectVisitId: id2,
|
||||
IsDicom: IsDicom
|
||||
}
|
||||
let res = await requestPackageAndAnonymizImage(params);
|
||||
flag[id2] = false;
|
||||
if (res.IsSuccess) {
|
||||
if (!res.Result) {
|
||||
flag[`${id2}_${IsDicom}`] = false;
|
||||
Vue.prototype.$message.warning(Vue.prototype.$t("trials:upload:message:not"))
|
||||
return 1;
|
||||
}
|
||||
let a = document.createElement("a");
|
||||
Vue.prototype.$message.success(Vue.prototype.$t("trials:upload:message:startUpload"));
|
||||
let href = Vue.prototype.OSSclientConfig.basePath + res.Result;
|
||||
let fileName =
|
||||
res.Result.split("/")[res.Result.split("/").length - 1];
|
||||
a.download = fileName;
|
||||
a.href = href;
|
||||
a.click();
|
||||
URL.revokeObjectURL(href);
|
||||
let timer = setTimeout(() => {
|
||||
a = null;
|
||||
href = null;
|
||||
timer = null;
|
||||
}, 500)
|
||||
download(href, res.OtherInfo.FileName, { id2, IsDicom })
|
||||
return 2;
|
||||
// let a = document.createElement("a");
|
||||
// // let fileName =
|
||||
// // res.Result.split("/")[res.Result.split("/").length - 1];
|
||||
// a.download = res.OtherInfo.FileName;
|
||||
// a.href = href;
|
||||
// a.click();
|
||||
// URL.revokeObjectURL(href);
|
||||
// let timer = setTimeout(() => {
|
||||
// a = null;
|
||||
// href = null;
|
||||
// timer = null;
|
||||
// }, 500)
|
||||
// return 2;
|
||||
} else {
|
||||
flag[`${id2}_${IsDicom}`] = false;
|
||||
return false;
|
||||
}
|
||||
} catch (err) {
|
||||
flag[id2] = false;
|
||||
flag[`${id2}_${IsDicom}`] = false;
|
||||
console.log(err);
|
||||
}
|
||||
};
|
||||
@@ -101,11 +109,11 @@ const setfolder = async (item) => {
|
||||
})
|
||||
.then((res) => {
|
||||
saveAs(res, zipName + ".zip"); // 使用FileSaver.saveAs保存文件,文件名可自定义
|
||||
flag[id2] = false;
|
||||
flag[`${id2}_${IsDicom}`] = false;
|
||||
zipObj = null;
|
||||
});
|
||||
})
|
||||
.catch((reason) => { flag[id2] = false; });
|
||||
.catch((reason) => { flag[`${id2}_${IsDicom}`] = false; });
|
||||
};
|
||||
const handleBatchDown = async (item, zip) => {
|
||||
return new Promise((resolve) => {
|
||||
@@ -141,4 +149,47 @@ export const fileDownload = (content, filename) => {
|
||||
document.body.appendChild(eleLink);
|
||||
eleLink.click();
|
||||
document.body.removeChild(eleLink);
|
||||
};
|
||||
};
|
||||
let download = async (downloadUrl, downloadFileName, res) => {
|
||||
const blob = await getBlob(downloadUrl);
|
||||
flag[`${res.id2}_${res.IsDicom}`] = false;
|
||||
saveAsB(blob, downloadFileName);
|
||||
}
|
||||
|
||||
let getBlob = (url) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const xhr = new XMLHttpRequest();
|
||||
|
||||
xhr.open('GET', url, true);
|
||||
xhr.responseType = 'blob';
|
||||
xhr.onload = () => {
|
||||
if (xhr.status === 200) {
|
||||
resolve(xhr.response);
|
||||
} else {
|
||||
reject(new Error(`Request failed with status ${xhr.status}`));
|
||||
}
|
||||
};
|
||||
xhr.onerror = () => {
|
||||
reject(new Error('Request failed'));
|
||||
};
|
||||
|
||||
xhr.send();
|
||||
});
|
||||
}
|
||||
|
||||
let saveAsB = (blob, filename) => {
|
||||
const link = document.createElement('a');
|
||||
const body = document.body;
|
||||
|
||||
link.href = window.URL.createObjectURL(blob);
|
||||
link.download = filename;
|
||||
|
||||
// hide the link
|
||||
link.style.display = 'none';
|
||||
body.appendChild(link);
|
||||
|
||||
link.click();
|
||||
body.removeChild(link);
|
||||
|
||||
window.URL.revokeObjectURL(link.href);
|
||||
}
|
||||
@@ -23,7 +23,7 @@
|
||||
>
|
||||
<svg-icon
|
||||
icon-class="login-bg"
|
||||
style="width: 450px; height: 450px"
|
||||
style="width: 90%; height: 90%"
|
||||
v-if="NODE_ENV === 'usa'"
|
||||
/>
|
||||
<img src="@/assets/login-bg.png" v-else />
|
||||
@@ -183,7 +183,7 @@
|
||||
{{ $t("login:title:system_title") }}
|
||||
</p>
|
||||
<p style="margin-bottom: 20px" v-else>{{ $t("login:title:system") }}</p>
|
||||
<p style="margin-bottom: 20px">V1.5.2.001</p>
|
||||
<p style="margin-bottom: 20px">V1.5.3.001</p>
|
||||
<p style="margin-bottom: 20px" v-if="language === 'zh'">
|
||||
Copyright © {{ new Date().getFullYear() }} 上海展影医疗科技有限公司
|
||||
版权所有
|
||||
@@ -211,8 +211,6 @@ import TopLang from "./topLang";
|
||||
// import NoticeMarquee from '../trials/trials-layout/components/noticeMarquee'
|
||||
import Vcode from "vue-puzzle-vcode";
|
||||
import Img1 from "@/assets/pic-2.png";
|
||||
import loginBg from "@/assets/icons/svg/login-bg.svg";
|
||||
import loginLogo from "@/assets/icons/svg/login-logo.svg";
|
||||
export default {
|
||||
name: "Login",
|
||||
components: { TopLang, Vcode },
|
||||
@@ -256,8 +254,6 @@ export default {
|
||||
isShow: false,
|
||||
showCode: false,
|
||||
Img1,
|
||||
loginBg,
|
||||
loginLogo,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@@ -407,7 +403,7 @@ export default {
|
||||
/* 修复input 背景不协调 和光标变色 */
|
||||
|
||||
$bg: #283443;
|
||||
$light_gray: #0093dd;
|
||||
$light_gray: #909399;
|
||||
$cursor: #fff;
|
||||
|
||||
// @supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
|
||||
@@ -514,7 +510,7 @@ $light_gray: #606266;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
}
|
||||
.login-r {
|
||||
@@ -537,7 +533,7 @@ $light_gray: #606266;
|
||||
.title-container {
|
||||
// margin-bottom: 50px;
|
||||
text-align: center;
|
||||
margin-top: 18%;
|
||||
margin-top: 20%;
|
||||
.title {
|
||||
font-size: 35px;
|
||||
color: $light_gray;
|
||||
|
||||
+398
-172
@@ -1,21 +1,38 @@
|
||||
<template>
|
||||
<div class="app-container my_menu">
|
||||
<el-form :inline="true">
|
||||
<el-form-item label="菜单名称">
|
||||
<el-form-item :label="$t('system:menu:search:menuName')">
|
||||
<el-input
|
||||
v-model="queryParams.menuName"
|
||||
placeholder="请输入菜单名称"
|
||||
placeholder=""
|
||||
clearable
|
||||
size="small"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态">
|
||||
<el-select v-model="queryParams.visible" placeholder="菜单状态" clearable size="small" />
|
||||
<el-form-item :label="$t('system:menu:search:visible')">
|
||||
<el-select
|
||||
v-model="queryParams.visible"
|
||||
placeholder=""
|
||||
clearable
|
||||
size="small"
|
||||
/>
|
||||
</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-plus" size="mini" @click="handleAdd">新增</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
size="mini"
|
||||
@click="handleQuery"
|
||||
>{{ $t("system:menu:button:search") }}</el-button
|
||||
>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
>{{ $t("system:menu:button:add") }}</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div>
|
||||
@@ -25,7 +42,8 @@
|
||||
icon="el-icon-sort"
|
||||
size="mini"
|
||||
@click="toggleExpandAll"
|
||||
>展开/折叠</el-button>
|
||||
>{{ $t("system:menu:button:foldAndExpand") }}</el-button
|
||||
>
|
||||
</div>
|
||||
<el-table
|
||||
v-if="refreshTable"
|
||||
@@ -33,38 +51,106 @@
|
||||
:data="menuList"
|
||||
:default-expand-all="isExpandAll"
|
||||
row-key="MenuId"
|
||||
:tree-props="{children: 'Children', hasChildren: 'hasChildren'}"
|
||||
:tree-props="{ children: 'Children', hasChildren: 'hasChildren' }"
|
||||
>
|
||||
<el-table-column prop="MenuName" label="菜单名称" :show-overflow-tooltip="true" min-width="130px" />
|
||||
<el-table-column prop="icon" label="图标" align="center" min-width="100px">
|
||||
<el-table-column
|
||||
prop="MenuName"
|
||||
:label="$t('system:menu:table:menuName')"
|
||||
:show-overflow-tooltip="true"
|
||||
min-width="130px"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="icon"
|
||||
:label="$t('system:menu:table:icon')"
|
||||
align="center"
|
||||
min-width="100px"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<svg-icon :icon-class="scope.row.MenuIcon" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="ShowOrder" label="排序" min-width="60px" />
|
||||
<el-table-column prop="Path" label="路由" min-width="120px" show-overflow-tooltip />
|
||||
<el-table-column prop="ApiPath" label="接口名" min-width="180px" show-overflow-tooltip />
|
||||
<el-table-column prop="Component" label="组件路径" min-width="180px" :show-overflow-tooltip="true" />
|
||||
<!-- <el-table-column prop="Redirect" label="重定向" min-width="180px" :show-overflow-tooltip="true" />-->
|
||||
<el-table-column prop="PermissionStr" label="权限标识" min-width="130px" :show-overflow-tooltip="true" />
|
||||
<el-table-column prop="PermissionStr" label="类型" min-width="80px" :show-overflow-tooltip="true">
|
||||
<el-table-column
|
||||
prop="ShowOrder"
|
||||
:label="$t('system:menu:table:showOrder')"
|
||||
min-width="60px"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="Path"
|
||||
:label="$t('system:menu:table:path')"
|
||||
min-width="120px"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
prop="ApiPath"
|
||||
:label="$t('system:menu:table:apiPath')"
|
||||
min-width="180px"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
prop="Component"
|
||||
:label="$t('system:menu:table:component')"
|
||||
min-width="180px"
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<!-- <el-table-column prop="Redirect" label="重定向" min-width="180px" :show-overflow-tooltip="true" />-->
|
||||
<el-table-column
|
||||
prop="PermissionStr"
|
||||
:label="$t('system:menu:table:permissionStr')"
|
||||
min-width="130px"
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="PermissionStr"
|
||||
:label="$t('system:menu:table:type')"
|
||||
min-width="80px"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.MenuType === 'M' ? '目录' : scope.row.MenuType === 'C' ? '菜单' : '权限点' }}
|
||||
{{
|
||||
scope.row.MenuType === "M"
|
||||
? $t("system:menu:template:message:directttory")
|
||||
: scope.row.MenuType === "C"
|
||||
? $t("system:menu:template:message:menu")
|
||||
: $t("system:menu:template:message:permission")
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="显影" align="center" prop="CreateTime" min-width="80">
|
||||
<el-table-column
|
||||
:label="$t('system:menu:table:showOrNone')"
|
||||
align="center"
|
||||
prop="CreateTime"
|
||||
min-width="80"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="!scope.row.IsDisplay" size="medium">显示</el-tag>
|
||||
<el-tag v-else size="warning">隐藏</el-tag>
|
||||
<el-tag v-if="!scope.row.IsDisplay" size="medium">{{
|
||||
$t("system:menu:tag:show")
|
||||
}}</el-tag>
|
||||
<el-tag v-else size="warning">{{
|
||||
$t("system:menu:tag:none")
|
||||
}}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="启用" align="center" prop="CreateTime" min-width="80">
|
||||
<el-table-column
|
||||
:label="$t('system:menu:table:enable')"
|
||||
align="center"
|
||||
prop="CreateTime"
|
||||
min-width="80"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.IsEnable" size="success">启用</el-tag>
|
||||
<el-tag v-else size="danger">禁用</el-tag>
|
||||
<el-tag v-if="scope.row.IsEnable" size="success">{{
|
||||
$t("system:menu:tag:enable")
|
||||
}}</el-tag>
|
||||
<el-tag v-else size="danger">{{
|
||||
$t("system:menu:tag:disable")
|
||||
}}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" min-width="180" class-name="small-padding fixed-width">
|
||||
<el-table-column
|
||||
:label="$t('system:menu:table:action')"
|
||||
align="center"
|
||||
min-width="180"
|
||||
class-name="small-padding fixed-width"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-hasPermi="['system:menu:edit']"
|
||||
@@ -72,51 +158,72 @@
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
>修改</el-button>
|
||||
>{{ $t("system:menu:button:edit") }}</el-button
|
||||
>
|
||||
<el-button
|
||||
v-hasPermi="['system:menu:add']"
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-plus"
|
||||
@click="handleAdd(scope.row)"
|
||||
>新增</el-button>
|
||||
>{{ $t("system:menu:button:add") }}</el-button
|
||||
>
|
||||
<el-button
|
||||
v-hasPermi="['system:menu:delete']"
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
>删除</el-button>
|
||||
>{{ $t("system:menu:button:remove") }}</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- 添加或修改菜单对话框 -->
|
||||
<el-dialog :title="title" :close-on-click-modal="false" :visible.sync="open" width="680px" append-to-body>
|
||||
<el-dialog
|
||||
:title="title"
|
||||
:close-on-click-modal="false"
|
||||
:visible.sync="open"
|
||||
width="680px"
|
||||
append-to-body
|
||||
>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="上级菜单">
|
||||
<el-form-item :label="$t('system:menu:form:lastMenu')">
|
||||
<treeselect
|
||||
v-model="form.ParentId"
|
||||
:options="menuOptions"
|
||||
:normalizer="normalizer"
|
||||
:show-count="true"
|
||||
placeholder="选择上级菜单"
|
||||
placeholder=""
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="菜单类型" prop="menuType">
|
||||
<el-form-item
|
||||
:label="$t('system:menu:form:menuType')"
|
||||
prop="menuType"
|
||||
>
|
||||
<el-radio-group v-model="form.MenuType">
|
||||
<el-radio label="M">目录</el-radio>
|
||||
<el-radio label="C">菜单</el-radio>
|
||||
<el-radio label="F">权限点</el-radio>
|
||||
<el-radio label="M">{{
|
||||
$t("system:menu:template:message:directttory")
|
||||
}}</el-radio>
|
||||
<el-radio label="C">{{
|
||||
$t("system:menu:template:message:menu")
|
||||
}}</el-radio>
|
||||
<el-radio label="F">{{
|
||||
$t("system:menu:template:message:permission")
|
||||
}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item v-if="form.MenuType != 'F'" label="菜单图标">
|
||||
<el-form-item
|
||||
v-if="form.MenuType != 'F'"
|
||||
:label="$t('system:menu:form:menuIcon')"
|
||||
>
|
||||
<el-popover
|
||||
placement="bottom-start"
|
||||
width="460"
|
||||
@@ -124,118 +231,182 @@
|
||||
@show="$refs['iconSelect'].reset()"
|
||||
>
|
||||
<IconSelect ref="iconSelect" @selected="selected" />
|
||||
<el-input slot="reference" v-model="form.MenuIcon" placeholder="点击选择图标" readonly>
|
||||
<el-input
|
||||
slot="reference"
|
||||
v-model="form.MenuIcon"
|
||||
placeholder="点击选择图标"
|
||||
readonly
|
||||
>
|
||||
<svg-icon
|
||||
v-if="form.MenuIcon"
|
||||
slot="prefix"
|
||||
:icon-class="form.MenuIcon"
|
||||
class="el-input__icon"
|
||||
style="height: 28px;width: 16px;margin-left: 6px;"
|
||||
style="height: 28px; width: 16px; margin-left: 6px"
|
||||
/>
|
||||
<i
|
||||
v-else
|
||||
slot="prefix"
|
||||
class="el-icon-search el-input__icon"
|
||||
/>
|
||||
<i v-else slot="prefix" class="el-icon-search el-input__icon" />
|
||||
</el-input>
|
||||
</el-popover>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="菜单名称" prop="MenuName">
|
||||
<el-input v-model="form.MenuName" placeholder="请输入菜单名称" />
|
||||
<el-form-item
|
||||
:label="$t('system:menu:form:menuName')"
|
||||
prop="MenuName"
|
||||
>
|
||||
<el-input v-model="form.MenuName" placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="显示排序" prop="ShowOrder">
|
||||
<el-input-number v-model="form.ShowOrder" controls-position="right" :min="0" />
|
||||
<el-form-item
|
||||
:label="$t('system:menu:form:showOrder')"
|
||||
prop="ShowOrder"
|
||||
>
|
||||
<el-input-number
|
||||
v-model="form.ShowOrder"
|
||||
controls-position="right"
|
||||
:min="0"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item v-if="form.MenuType != 'F'">
|
||||
<span slot="label">
|
||||
<el-tooltip content="选择是外链则路由地址需要以`http(s)://`开头" placement="top">
|
||||
<!--选择是外链则路由地址需要以`http(s)://`开头-->
|
||||
<el-tooltip
|
||||
:content="$t('system:menu:form:isExternalLinkMessage')"
|
||||
placement="top"
|
||||
>
|
||||
<i class="el-icon-question" />
|
||||
</el-tooltip>
|
||||
是否外链
|
||||
{{ $t("system:menu:form:isExternalLink") }}
|
||||
</span>
|
||||
<el-radio-group v-model="form.IsExternalLink">
|
||||
<el-radio v-for="item of $d.YesOrNo" :label="item.value">{{item.label}}</el-radio>
|
||||
<el-radio
|
||||
v-for="item of $d.YesOrNo"
|
||||
:label="item.value"
|
||||
:key="item.id"
|
||||
>{{ item.label }}</el-radio
|
||||
>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item v-if="form.MenuType != 'F'" prop="path">
|
||||
<span slot="label">
|
||||
<el-tooltip content="访问的路由地址,如:`user`,如外网地址需内链访问则以`http(s)://`开头" placement="top">
|
||||
<!--访问的路由地址,如:`user`,如外网地址需内链访问则以`http(s)://`开头-->
|
||||
<el-tooltip
|
||||
:content="$t('system:menu:form:pathMessage')"
|
||||
placement="top"
|
||||
>
|
||||
<i class="el-icon-question" />
|
||||
</el-tooltip>
|
||||
路由地址
|
||||
{{ $t("system:menu:form:path") }}
|
||||
</span>
|
||||
<el-input v-model="form.Path" placeholder="请输入路由地址" />
|
||||
<el-input v-model="form.Path" placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col v-if="form.MenuType == 'C'" :span="12">
|
||||
<el-form-item prop="component">
|
||||
<span slot="label">
|
||||
<el-tooltip content="访问的组件路径,如:`system/user/index`,默认在`views`目录下" placement="top">
|
||||
<!--访问的组件路径,如:`system/user/index`,默认在`views`目录下-->
|
||||
<el-tooltip
|
||||
:content="$t('system:menu:form:componentMessage')"
|
||||
placement="top"
|
||||
>
|
||||
<i class="el-icon-question" />
|
||||
</el-tooltip>
|
||||
组件路径
|
||||
{{ $t("system:menu:form:component") }}
|
||||
</span>
|
||||
<el-input v-model="form.Component" placeholder="请输入组件路径" />
|
||||
<el-input v-model="form.Component" placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col v-if="form.MenuType != 'F'" :span="12">
|
||||
<el-form-item prop="Redirect Path">
|
||||
<span slot="label">
|
||||
<el-tooltip content="重定向路由,如:`/system/user/index`" placement="top">
|
||||
<!--重定向路由,如:`/system/user/index`-->
|
||||
<el-tooltip
|
||||
:content="$t('system:menu:form:redirectPathMessage')"
|
||||
placement="top"
|
||||
>
|
||||
<i class="el-icon-question" />
|
||||
</el-tooltip>
|
||||
重定向
|
||||
{{ $t("system:menu:form:redirectPath") }}
|
||||
</span>
|
||||
<el-input v-model="form.Redirect" placeholder="请输入重定向路由" />
|
||||
<el-input v-model="form.Redirect" placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item v-if="form.MenuType != 'M'">
|
||||
<el-input v-model="form.PermissionStr" placeholder="请输入权限标识" maxlength="100" />
|
||||
<el-input
|
||||
v-model="form.PermissionStr"
|
||||
placeholder=""
|
||||
maxlength="100"
|
||||
/>
|
||||
<span slot="label">
|
||||
<el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasPermi('system:user:list')`)" placement="top">
|
||||
<!--控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasPermi('system:user:list')`)-->
|
||||
<el-tooltip
|
||||
:content="$t('system:menu:form:permissionStrMessage')"
|
||||
placement="top"
|
||||
>
|
||||
<i class="el-icon-question" />
|
||||
</el-tooltip>
|
||||
权限字符
|
||||
{{ $t("system:menu:form:permissionStr") }}
|
||||
</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item v-if="form.MenuType != 'M'">
|
||||
<el-input v-model="form.ApiPath" placeholder="接口名" />
|
||||
<el-input v-model="form.ApiPath" placeholder="" />
|
||||
<span slot="label">
|
||||
<el-tooltip content="接口名" placement="top">
|
||||
<!--接口名-->
|
||||
<el-tooltip
|
||||
:content="$t('system:menu:form:apiPathMessage')"
|
||||
placement="top"
|
||||
>
|
||||
<i class="el-icon-question" />
|
||||
</el-tooltip>
|
||||
接口名
|
||||
{{ $t("system:menu:form:apiPath") }}
|
||||
</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item v-if="form.MenuType == 'C'">
|
||||
<span slot="label">
|
||||
<el-tooltip content="选择是则会被`keep-alive`缓存,需要匹配组件的`name`和地址保持一致" placement="top">
|
||||
<!--选择是则会被`keep-alive`缓存,需要匹配组件的`name`和地址保持一致-->
|
||||
<el-tooltip
|
||||
:content="$t('system:menu:form:isCacheMessage')"
|
||||
placement="top"
|
||||
>
|
||||
<i class="el-icon-question" />
|
||||
</el-tooltip>
|
||||
是否缓存
|
||||
{{ $t("system:menu:form:isCache") }}
|
||||
</span>
|
||||
<el-radio-group v-model="form.IsCache">
|
||||
<el-radio :label="true">缓存</el-radio>
|
||||
<el-radio :label="false">不缓存</el-radio>
|
||||
<el-radio :label="true">{{
|
||||
$t("system:menu:form:radio:cache")
|
||||
}}</el-radio>
|
||||
<el-radio :label="false">{{
|
||||
$t("system:menu:form:radio:notCache")
|
||||
}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item v-if="form.MenuType != 'F'">
|
||||
<span slot="label">
|
||||
<el-tooltip content="选择隐藏则路由将不会出现在侧边栏,但仍然可以访问" placement="top">
|
||||
<!--选择隐藏则路由将不会出现在侧边栏,但仍然可以访问-->
|
||||
<el-tooltip
|
||||
:content="$t('system:menu:form:isDisplayMessage')"
|
||||
placement="top"
|
||||
>
|
||||
<i class="el-icon-question" />
|
||||
</el-tooltip>
|
||||
是否隐藏
|
||||
{{ $t("system:menu:form:isDisplay") }}
|
||||
</span>
|
||||
<el-switch
|
||||
v-model="form.IsDisplay"
|
||||
@@ -247,10 +418,14 @@
|
||||
<el-col :span="12">
|
||||
<el-form-item v-if="form.MenuType != 'F'">
|
||||
<span slot="label">
|
||||
<el-tooltip content="选择隐藏则不会在trials模块的TAB中显示,但仍然可以访问" placement="top">
|
||||
<!--c-->
|
||||
<el-tooltip
|
||||
:content="$t('system:menu:form:isInTabDisplayMessage')"
|
||||
placement="top"
|
||||
>
|
||||
<i class="el-icon-question" />
|
||||
</el-tooltip>
|
||||
Tab显隐
|
||||
{{ $t("system:menu:form:isInTabDisplay") }}
|
||||
</span>
|
||||
<el-switch
|
||||
v-model="form.IsInTabDisplay"
|
||||
@@ -262,10 +437,14 @@
|
||||
<el-col :span="12">
|
||||
<el-form-item v-if="form.MenuType != 'F'">
|
||||
<span slot="label">
|
||||
<el-tooltip content="选择停用则路由将不会出现在侧边栏,也不能被访问" placement="top">
|
||||
<!--选择停用则路由将不会出现在侧边栏,也不能被访问-->
|
||||
<el-tooltip
|
||||
:content="$t('system:menu:form:isEnablesMessage')"
|
||||
placement="top"
|
||||
>
|
||||
<i class="el-icon-question" />
|
||||
</el-tooltip>
|
||||
菜单状态
|
||||
{{ $t("system:menu:form:isEnable") }}
|
||||
</span>
|
||||
<el-switch
|
||||
v-model="form.IsEnable"
|
||||
@@ -275,33 +454,41 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col v-if="form.MenuType != 'F'" :span="24">
|
||||
<el-form-item label="LangMark">
|
||||
<el-form-item :label="$t('system:menu:form:LangMark')">
|
||||
<el-input v-model="form.LanguageMark" placeholder="LangMark" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col v-if="form.MenuType != 'F'" :span="24">
|
||||
<el-form-item label="mate">
|
||||
<el-input v-model="form.Meta" type="textarea" placeholder="{ title: 'Setting', breadcrumb: false, role: [8, 1, 2, 3, 10] }" />
|
||||
<el-form-item :label="$t('system:menu:form:meta')">
|
||||
<el-input
|
||||
v-model="form.Meta"
|
||||
type="textarea"
|
||||
placeholder="{ title: 'Setting', breadcrumb: false, role: [8, 1, 2, 3, 10] }"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
<el-button type="primary" @click="submitForm">{{
|
||||
$t("system:menu:button:save")
|
||||
}}</el-button>
|
||||
<el-button @click="cancel">{{
|
||||
$t("system:menu:button:canel")
|
||||
}}</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getMenuList, addOrUpdateMenu, deleteMenu } from '@/api/system/menu'
|
||||
import Treeselect from '@riophae/vue-treeselect'
|
||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
import IconSelect from '@/components/IconSelect'
|
||||
import { getMenuList, addOrUpdateMenu, deleteMenu } from "@/api/system/menu";
|
||||
import Treeselect from "@riophae/vue-treeselect";
|
||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||
import IconSelect from "@/components/IconSelect";
|
||||
|
||||
export default {
|
||||
name: 'Menu',
|
||||
name: "Menu",
|
||||
components: { Treeselect, IconSelect },
|
||||
data() {
|
||||
return {
|
||||
@@ -312,7 +499,7 @@ export default {
|
||||
// 菜单树选项
|
||||
menuOptions: [],
|
||||
// 弹出层标题
|
||||
title: '',
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 菜单状态数据字典
|
||||
@@ -320,7 +507,7 @@ export default {
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
menuName: undefined,
|
||||
visible: undefined
|
||||
visible: undefined,
|
||||
},
|
||||
// 是否展开,默认全部折叠
|
||||
isExpandAll: false,
|
||||
@@ -331,168 +518,207 @@ export default {
|
||||
// 表单校验
|
||||
rules: {
|
||||
MenuName: [
|
||||
{ required: true, message: '菜单名称不能为空', trigger: 'blur' }
|
||||
{
|
||||
required: true,
|
||||
message: this.$t("system:menu:form:rule:notMenuName"),
|
||||
trigger: "blur",
|
||||
}, // 菜单名称不能为空
|
||||
],
|
||||
ShowOrder: [
|
||||
{ required: true, message: '菜单顺序不能为空', trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
}
|
||||
{
|
||||
required: true,
|
||||
message: this.$t("system:menu:form:rule:notShowOrder"),
|
||||
trigger: "blur",
|
||||
}, // 菜单顺序不能为空
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
console.log(this.hasPermi(['trials:trials-list:new', 'trials:trials-list:export1'], '&&'))
|
||||
this.getList()
|
||||
console.log(
|
||||
this.hasPermi(
|
||||
["trials:trials-list:new", "trials:trials-list:export1"],
|
||||
"&&"
|
||||
)
|
||||
);
|
||||
this.getList();
|
||||
// this.getDicts("sys_show_hide").then(response => {
|
||||
// this.visibleOptions = response.data;
|
||||
// });
|
||||
},
|
||||
methods: {
|
||||
toggleExpandAll() {
|
||||
this.refreshTable = false
|
||||
this.isExpandAll = !this.isExpandAll
|
||||
this.refreshTable = false;
|
||||
this.isExpandAll = !this.isExpandAll;
|
||||
this.$nextTick(() => {
|
||||
this.refreshTable = true
|
||||
})
|
||||
this.refreshTable = true;
|
||||
});
|
||||
},
|
||||
normalizer(node) {
|
||||
if (node.Children && !node.Children.length) {
|
||||
delete node.Children
|
||||
delete node.Children;
|
||||
}
|
||||
return {
|
||||
id: node.MenuId,
|
||||
label: node.MenuName,
|
||||
children: node.Children
|
||||
}
|
||||
children: node.Children,
|
||||
};
|
||||
},
|
||||
toTree(arr, ParentId) {
|
||||
function loop(ParentId) {
|
||||
const res = []
|
||||
const res = [];
|
||||
for (let i = 0; i < arr.length; i++) {
|
||||
const item = arr[i]
|
||||
item.hasChildren = false
|
||||
const item = arr[i];
|
||||
item.hasChildren = false;
|
||||
if (item.ParentId !== ParentId) {
|
||||
continue
|
||||
continue;
|
||||
}
|
||||
item.Children = loop(item.MenuId)
|
||||
res.push(item)
|
||||
item.Children = loop(item.MenuId);
|
||||
res.push(item);
|
||||
}
|
||||
return res
|
||||
return res;
|
||||
}
|
||||
return loop(ParentId)
|
||||
return loop(ParentId);
|
||||
},
|
||||
// 选择图标
|
||||
selected(name) {
|
||||
this.form.MenuIcon = name
|
||||
this.form.MenuIcon = name;
|
||||
},
|
||||
/** 查询菜单列表 */
|
||||
getList() {
|
||||
this.loading = true
|
||||
getMenuList(this.queryParams).then(res => {
|
||||
this.menuList = this.toTree(res.Result, '00000000-0000-0000-0000-000000000000')
|
||||
const menu = { MenuId: '00000000-0000-0000-0000-000000000000', MenuName: '主类目', Children: [] }
|
||||
menu.Children = this.menuList
|
||||
this.menuOptions = Object.assign([], [menu])
|
||||
this.loading = false
|
||||
}).catch(function() {})
|
||||
this.loading = true;
|
||||
getMenuList(this.queryParams)
|
||||
.then((res) => {
|
||||
this.menuList = this.toTree(
|
||||
res.Result,
|
||||
"00000000-0000-0000-0000-000000000000"
|
||||
);
|
||||
const menu = {
|
||||
MenuId: "00000000-0000-0000-0000-000000000000",
|
||||
MenuName: "主类目",
|
||||
Children: [],
|
||||
};
|
||||
menu.Children = this.menuList;
|
||||
this.menuOptions = Object.assign([], [menu]);
|
||||
this.loading = false;
|
||||
})
|
||||
.catch(function () {});
|
||||
},
|
||||
/** 查询菜单下拉树结构 */
|
||||
getTreeselect() {
|
||||
this.loading = true
|
||||
getMenuList({}).then(res => {
|
||||
const menu = { MenuId: '00000000-0000-0000-0000-000000000000', MenuName: '主类目', Children: [] }
|
||||
menu.Children = this.toTree(res.Result, '00000000-0000-0000-0000-000000000000')
|
||||
this.menuOptions = Object.assign([], [menu])
|
||||
this.loading = false
|
||||
}).catch(function() {})
|
||||
this.loading = true;
|
||||
getMenuList({})
|
||||
.then((res) => {
|
||||
const menu = {
|
||||
MenuId: "00000000-0000-0000-0000-000000000000",
|
||||
MenuName: "主类目",
|
||||
Children: [],
|
||||
};
|
||||
menu.Children = this.toTree(
|
||||
res.Result,
|
||||
"00000000-0000-0000-0000-000000000000"
|
||||
);
|
||||
this.menuOptions = Object.assign([], [menu]);
|
||||
this.loading = false;
|
||||
})
|
||||
.catch(function () {});
|
||||
},
|
||||
// 菜单显示状态字典翻译
|
||||
visibleFormat(row, column) {
|
||||
if (row.MenuType === 'F') {
|
||||
return ''
|
||||
if (row.MenuType === "F") {
|
||||
return "";
|
||||
}
|
||||
return this.selectDictLabel(this.visibleOptions, row.visible)
|
||||
return this.selectDictLabel(this.visibleOptions, row.visible);
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false
|
||||
this.reset()
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
MenuId: null,
|
||||
ParentId: null,
|
||||
MenuType: 'M',
|
||||
MenuIcon: '',
|
||||
MenuName: '',
|
||||
Path: '',
|
||||
Component: '',
|
||||
MenuType: "M",
|
||||
MenuIcon: "",
|
||||
MenuName: "",
|
||||
Path: "",
|
||||
Component: "",
|
||||
ShowOrder: null,
|
||||
IsEnable: true,
|
||||
IsCache: false,
|
||||
IsDisplay: false,
|
||||
IsInTabDisplay: false,
|
||||
IsExternalLink: false,
|
||||
PermissionStr: '',
|
||||
Note: '',
|
||||
CreateTime: '',
|
||||
PermissionStr: "",
|
||||
Note: "",
|
||||
CreateTime: "",
|
||||
LanguageMark: null,
|
||||
Apipath: null
|
||||
}
|
||||
this.resetForm('form')
|
||||
Apipath: null,
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.getList()
|
||||
this.getList();
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd(row) {
|
||||
this.reset()
|
||||
this.getTreeselect()
|
||||
this.reset();
|
||||
this.getTreeselect();
|
||||
if (row != null) {
|
||||
this.form.ParentId = row.MenuId
|
||||
this.form.ParentId = row.MenuId;
|
||||
}
|
||||
this.open = true
|
||||
this.title = '添加菜单'
|
||||
this.open = true;
|
||||
this.title = this.$t("system:menu:form:title:addMenu");
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
this.getTreeselect()
|
||||
this.form = Object.assign({}, row)
|
||||
this.open = true
|
||||
this.title = '修改菜单'
|
||||
this.reset();
|
||||
this.getTreeselect();
|
||||
this.form = Object.assign({}, row);
|
||||
this.open = true;
|
||||
this.title = this.$t("system:menu:form:title:editMenu");
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm: function() {
|
||||
this.$refs['form'].validate(valid => {
|
||||
submitForm: function () {
|
||||
this.$refs["form"].validate((valid) => {
|
||||
if (valid) {
|
||||
addOrUpdateMenu(this.form).then(response => {
|
||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||
this.open = false
|
||||
this.getList()
|
||||
})
|
||||
addOrUpdateMenu(this.form).then((response) => {
|
||||
this.$message.success(this.$t("common:message:savedSuccessfully"));
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
})
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
this.$confirm('是否确认删除名称为"' + row.MenuName + '"的数据项?', '警告', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function() {
|
||||
return deleteMenu(row.MenuId)
|
||||
}).then(() => {
|
||||
this.getList()
|
||||
this.$message.success('删除成功')
|
||||
}).catch(function() {})
|
||||
}
|
||||
}
|
||||
}
|
||||
let message = this.$t("system:menu:confirm:message:delete").replace(
|
||||
"xxx",
|
||||
row.MenuName
|
||||
);
|
||||
//'是否确认删除名称为"' + row.MenuName + '"的数据项?'
|
||||
this.$confirm(message, this.$t("system:menu:confirm:title:warning"), {
|
||||
confirmButtonText: this.$t("system:menu:button:save"),
|
||||
cancelButtonText: this.$t("system:menu:button:canel"),
|
||||
type: "warning",
|
||||
})
|
||||
.then(function () {
|
||||
return deleteMenu(row.MenuId);
|
||||
})
|
||||
.then(() => {
|
||||
this.getList();
|
||||
this.$message.success(this.$t("common:message:deletedSuccessfully"));
|
||||
})
|
||||
.catch(function () {});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.vue-treeselect div{
|
||||
line-height: 40px;
|
||||
}
|
||||
.vue-treeselect div {
|
||||
line-height: 40px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -16,13 +16,17 @@
|
||||
<el-form-item label="Shortname: " prop="UserTypeShortName">
|
||||
<el-input v-model="form.UserTypeShortName" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否内部角色: " prop="IsInternal">
|
||||
<el-form-item
|
||||
:label="$t('system:role:form:isInternal')"
|
||||
prop="IsInternal"
|
||||
>
|
||||
<el-radio-group v-model="form.IsInternal">
|
||||
<el-radio
|
||||
v-for="item of $d.YesOrNo"
|
||||
:key="`IsInternal${item.value}`"
|
||||
:label="item.value"
|
||||
>{{ item.label }}</el-radio>
|
||||
>{{ item.label }}</el-radio
|
||||
>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
@@ -38,7 +42,11 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="Order: ">
|
||||
<el-input-number v-model="form.Order" controls-position="right" :min="0" />
|
||||
<el-input-number
|
||||
v-model="form.Order"
|
||||
controls-position="right"
|
||||
:min="0"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="PermissionStr: " prop="PermissionStr">
|
||||
<el-input v-model="form.PermissionStr" />
|
||||
@@ -58,9 +66,23 @@
|
||||
<el-input v-model="form.Description" type="textarea" :rows="5" />
|
||||
</el-form-item>
|
||||
<el-form-item label="role: ">
|
||||
<el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event)">展开/折叠</el-checkbox>
|
||||
<el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event)">全选/全不选</el-checkbox>
|
||||
<el-checkbox v-model="form.menuCheckStrictly" @change="handleCheckedTreeConnect($event)">父子联动</el-checkbox>
|
||||
<el-checkbox
|
||||
v-model="menuExpand"
|
||||
@change="handleCheckedTreeExpand($event)"
|
||||
>{{ $t("system:role:form:checkbox:menuExpand") }}</el-checkbox
|
||||
>
|
||||
<el-checkbox
|
||||
v-model="menuNodeAll"
|
||||
@change="handleCheckedTreeNodeAll($event)"
|
||||
>{{ $t("system:role:form:checkbox:menuNodeAll") }}</el-checkbox
|
||||
>
|
||||
<el-checkbox
|
||||
v-model="form.menuCheckStrictly"
|
||||
@change="handleCheckedTreeConnect($event)"
|
||||
>{{
|
||||
$t("system:role:form:checkbox:menuCheckStrictly")
|
||||
}}</el-checkbox
|
||||
>
|
||||
<el-tree
|
||||
ref="menu"
|
||||
class="tree-border"
|
||||
@@ -76,155 +98,186 @@
|
||||
</el-form>
|
||||
</template>
|
||||
<template slot="dialog-footer">
|
||||
<el-button :disabled="btnLoading" size="small" type="primary" @click="model_cfg.visible = false">Cancel
|
||||
<el-button
|
||||
:disabled="btnLoading"
|
||||
size="small"
|
||||
type="primary"
|
||||
@click="model_cfg.visible = false"
|
||||
>Cancel
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave">Save</el-button>
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary"
|
||||
:loading="btnLoading"
|
||||
@click="handleSave"
|
||||
>Save</el-button
|
||||
>
|
||||
</template>
|
||||
</base-model>
|
||||
</template>
|
||||
<script>
|
||||
import { addOrUpdateUserType } from '@/api/admin'
|
||||
import { addOrUpdateUserType } from "@/api/admin";
|
||||
// import { addOrUpdateUserType } from '@/api/system/role'
|
||||
// import { getMenuList } from '@/api/system/menu'
|
||||
import { getMenuList } from '@/api/system/menu'
|
||||
import { model_cfg } from '../role'
|
||||
import BaseModel from '@/components/BaseModel'
|
||||
import { getMenuList } from "@/api/system/menu";
|
||||
import { model_cfg } from "../role";
|
||||
import BaseModel from "@/components/BaseModel";
|
||||
|
||||
export default {
|
||||
components: { BaseModel },
|
||||
dicts: ['UserTypeGroup'],
|
||||
dicts: ["UserTypeGroup"],
|
||||
props: {
|
||||
data: {
|
||||
type: Object,
|
||||
default() {
|
||||
return {
|
||||
Id: '',
|
||||
UserTypeName: '',
|
||||
Id: "",
|
||||
UserTypeName: "",
|
||||
IsInternal: true,
|
||||
UserTypeShortName: '',
|
||||
Order: '',
|
||||
Description: '',
|
||||
PermissionStr: '',
|
||||
UserTypeEnum: null
|
||||
}
|
||||
}
|
||||
}
|
||||
UserTypeShortName: "",
|
||||
Order: "",
|
||||
Description: "",
|
||||
PermissionStr: "",
|
||||
UserTypeEnum: null,
|
||||
};
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
menuExpand: false,
|
||||
menuNodeAll: false,
|
||||
userTypeGroupOptions: [{ value: 1, label: 'Trial' }, { value: 2, label: 'Reviewer' }, { value: 3, label: 'Other' }],
|
||||
userTypeGroupOptions: [
|
||||
{ value: 1, label: "Trial" },
|
||||
{ value: 2, label: "Reviewer" },
|
||||
{ value: 3, label: "Other" },
|
||||
],
|
||||
model_cfg,
|
||||
defaultProps: {
|
||||
children: 'Children',
|
||||
label: 'MenuName'
|
||||
children: "Children",
|
||||
label: "MenuName",
|
||||
},
|
||||
form: {
|
||||
Id: '',
|
||||
UserType: '',
|
||||
Id: "",
|
||||
UserType: "",
|
||||
IsInternal: true,
|
||||
UserTypeShortName: '',
|
||||
UserTypeShortName: "",
|
||||
Type: null,
|
||||
Description: '',
|
||||
Description: "",
|
||||
UserTypeGroupIdList: [],
|
||||
menuCheckStrictly: true
|
||||
menuCheckStrictly: true,
|
||||
},
|
||||
rules: {
|
||||
UserTypeName: [{ required: true, message: 'Please specify', trigger: 'blur' }, {
|
||||
max: 50,
|
||||
message: 'The maximum length is 50'
|
||||
}],
|
||||
UserTypeShortName: [{ required: true, message: 'Please specify', trigger: 'blur' }, {
|
||||
max: 50,
|
||||
message: 'The maximum length is 50',
|
||||
trigger: 'blur'
|
||||
}],
|
||||
Description: [{ max: 500, message: 'The maximum length is 500' }],
|
||||
UserTypeGroupIdList: [{ required: true, message: 'Please specify', trigger: 'blur' }],
|
||||
UserTypeEnum: [{ required: true, message: 'Please select', trigger: 'blur' }]
|
||||
UserTypeName: [
|
||||
{ required: true, message: "Please specify", trigger: "blur" },
|
||||
{
|
||||
max: 50,
|
||||
message: "The maximum length is 50",
|
||||
},
|
||||
],
|
||||
UserTypeShortName: [
|
||||
{ required: true, message: "Please specify", trigger: "blur" },
|
||||
{
|
||||
max: 50,
|
||||
message: "The maximum length is 50",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
Description: [{ max: 500, message: "The maximum length is 500" }],
|
||||
UserTypeGroupIdList: [
|
||||
{ required: true, message: "Please specify", trigger: "blur" },
|
||||
],
|
||||
UserTypeEnum: [
|
||||
{ required: true, message: "Please select", trigger: "blur" },
|
||||
],
|
||||
},
|
||||
menuOptions: [],
|
||||
btnLoading: false
|
||||
}
|
||||
btnLoading: false,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getMenuList()
|
||||
this.getMenuList();
|
||||
if (Object.keys(this.data).length && this.data.Id) {
|
||||
this.form = { ...this.data }
|
||||
this.form = { ...this.data };
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleCheckedTreeConnect(value) {
|
||||
this.form.menuCheckStrictly = !!value
|
||||
this.form.menuCheckStrictly = !!value;
|
||||
},
|
||||
getMenuAllCheckedKeys() {
|
||||
// 目前被选中的菜单节点
|
||||
const checkedKeys = this.$refs.menu.getCheckedKeys()
|
||||
const checkedKeys = this.$refs.menu.getCheckedKeys();
|
||||
// 半选中的菜单节点
|
||||
const halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys()
|
||||
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys)
|
||||
return checkedKeys
|
||||
const halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys();
|
||||
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
|
||||
return checkedKeys;
|
||||
},
|
||||
|
||||
handleCheckedTreeExpand(value) {
|
||||
const treeList = this.menuOptions
|
||||
const treeList = this.menuOptions;
|
||||
for (let i = 0; i < treeList.length; i++) {
|
||||
this.$refs.menu.store.nodesMap[treeList[i].MenuId].expanded = value
|
||||
this.$refs.menu.store.nodesMap[treeList[i].MenuId].expanded = value;
|
||||
}
|
||||
},
|
||||
handleCheckedTreeNodeAll(value, type) {
|
||||
this.$refs.menu.setCheckedNodes(value ? this.menuOptions : [])
|
||||
this.$refs.menu.setCheckedNodes(value ? this.menuOptions : []);
|
||||
},
|
||||
toTree(arr, ParentId) {
|
||||
function loop(ParentId) {
|
||||
const res = []
|
||||
const res = [];
|
||||
for (let i = 0; i < arr.length; i++) {
|
||||
const item = arr[i]
|
||||
item.hasChildren = false
|
||||
const item = arr[i];
|
||||
item.hasChildren = false;
|
||||
if (item.ParentId !== ParentId) {
|
||||
continue
|
||||
continue;
|
||||
}
|
||||
item.Children = loop(item.MenuId)
|
||||
res.push(item)
|
||||
item.Children = loop(item.MenuId);
|
||||
res.push(item);
|
||||
}
|
||||
return res
|
||||
return res;
|
||||
}
|
||||
|
||||
return loop(ParentId)
|
||||
return loop(ParentId);
|
||||
},
|
||||
getMenuList() {
|
||||
getMenuList({}).then(res => {
|
||||
const menu = this.toTree(res.Result, '00000000-0000-0000-0000-000000000000')
|
||||
this.menuOptions = menu
|
||||
console.log(this.menuOptions)
|
||||
this.$nextTick(() => {
|
||||
this.form.MenuIds.forEach(v => {
|
||||
this.$refs.menu.setChecked(v, true, false)
|
||||
})
|
||||
getMenuList({})
|
||||
.then((res) => {
|
||||
const menu = this.toTree(
|
||||
res.Result,
|
||||
"00000000-0000-0000-0000-000000000000"
|
||||
);
|
||||
this.menuOptions = menu;
|
||||
console.log(this.menuOptions);
|
||||
this.$nextTick(() => {
|
||||
this.form.MenuIds.forEach((v) => {
|
||||
this.$refs.menu.setChecked(v, true, false);
|
||||
});
|
||||
});
|
||||
})
|
||||
}).catch(function() {
|
||||
})
|
||||
.catch(function () {});
|
||||
},
|
||||
handleSave() {
|
||||
this.$refs.roleForm.validate(valid => {
|
||||
if (!valid) return
|
||||
this.btnLoading = true
|
||||
this.model_cfg.showClose = false
|
||||
this.form.MenuIds = this.getMenuAllCheckedKeys()
|
||||
console.log(this.form.MenuIds)
|
||||
addOrUpdateUserType(this.form).then(res => {
|
||||
this.btnLoading = false
|
||||
this.$refs['roleForm'].resetFields()
|
||||
this.$emit('close')
|
||||
this.model_cfg.showClose = true
|
||||
this.$message.success('Saved successfully!')
|
||||
}).catch(() => {
|
||||
this.btnLoading = false
|
||||
this.model_cfg.showClose = true
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
this.$refs.roleForm.validate((valid) => {
|
||||
if (!valid) return;
|
||||
this.btnLoading = true;
|
||||
this.model_cfg.showClose = false;
|
||||
this.form.MenuIds = this.getMenuAllCheckedKeys();
|
||||
console.log(this.form.MenuIds);
|
||||
addOrUpdateUserType(this.form)
|
||||
.then((res) => {
|
||||
this.btnLoading = false;
|
||||
this.$refs["roleForm"].resetFields();
|
||||
this.$emit("close");
|
||||
this.model_cfg.showClose = true;
|
||||
this.$message.success("Saved successfully!");
|
||||
})
|
||||
.catch(() => {
|
||||
this.btnLoading = false;
|
||||
this.model_cfg.showClose = true;
|
||||
});
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="notice-marquee_wrapper">
|
||||
<marquee ref="mar" hspace="0" direction="left" width="500" @mouseout="start()" @mouseover="stop()">
|
||||
<marquee ref="mar" hspace="0" direction="left" width="100%" @mouseout="start()" @mouseover="stop()">
|
||||
<!-- <i class="el-icon-message-solid" /> -->
|
||||
<svg-icon v-if="noticeList.length > 0" icon-class="speaker" />
|
||||
<span v-for="item in noticeList" :key="item.Id" style="cursor:pointer;" @click="showDetail(item)">
|
||||
@@ -70,6 +70,7 @@ export default {
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.notice-marquee_wrapper{
|
||||
width: 100%;
|
||||
/deep/ .el-dialog__header{
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
@@ -281,6 +281,9 @@ export default {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.center-menu {
|
||||
width: calc(100% - 1200px);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
|
||||
@@ -36,13 +36,13 @@
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- 中文名 -->
|
||||
<el-table-column
|
||||
<!-- <el-table-column
|
||||
prop="BlindNameCN"
|
||||
:label="$t('trials:spmEnroll:table:blindNameCN')"
|
||||
show-overflow-tooltip
|
||||
min-width="120"
|
||||
sortable="custom"
|
||||
/>
|
||||
/> -->
|
||||
<!-- 专业 -->
|
||||
<el-table-column
|
||||
prop="SpecialityId"
|
||||
|
||||
@@ -31,13 +31,13 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- Name CN -->
|
||||
<el-table-column
|
||||
<!-- <el-table-column
|
||||
prop="ChineseName"
|
||||
:label="$t('trials:seletctedReviews:table:nameCN')"
|
||||
show-overflow-tooltip
|
||||
min-width="120"
|
||||
sortable="custom"
|
||||
/>
|
||||
/> -->
|
||||
<!-- ID -->
|
||||
<el-table-column
|
||||
prop="Code"
|
||||
|
||||
@@ -42,13 +42,13 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- Name CN -->
|
||||
<el-table-column
|
||||
<!-- <el-table-column
|
||||
prop="ChineseName"
|
||||
:label="$t('trials:seletctedReviews:table:nameCN')"
|
||||
show-overflow-tooltip
|
||||
min-width="120"
|
||||
sortable="custom"
|
||||
/>
|
||||
/> -->
|
||||
<!-- ID -->
|
||||
<el-table-column
|
||||
prop="Code"
|
||||
|
||||
@@ -146,13 +146,13 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- Name CN -->
|
||||
<el-table-column
|
||||
<!-- <el-table-column
|
||||
prop="ChineseName"
|
||||
:label="$t('trials:seletctedReviews:table:nameCN')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
width="120"
|
||||
/>
|
||||
/> -->
|
||||
|
||||
<el-table-column
|
||||
prop="DoctorUserName"
|
||||
|
||||
@@ -52,13 +52,13 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- Name CN -->
|
||||
<el-table-column
|
||||
<!-- <el-table-column
|
||||
prop="ChineseName"
|
||||
:label="$t('trials:seletctedReviews:table:nameCN')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
min-width="120"
|
||||
/>
|
||||
/> -->
|
||||
<!-- ID -->
|
||||
<el-table-column
|
||||
prop="Code"
|
||||
|
||||
@@ -203,45 +203,40 @@
|
||||
>
|
||||
<i slot="default" class="el-icon-plus" />
|
||||
<div slot="file" slot-scope="{file}">
|
||||
<img
|
||||
class="el-upload-list__item-thumbnail"
|
||||
:src="OSSclientConfig.basePath + file.url"
|
||||
alt=""
|
||||
crossorigin="anonymous"
|
||||
>
|
||||
<span class="el-upload-list__item-actions">
|
||||
<span
|
||||
class="el-upload-list__item-preview"
|
||||
@click="handlePictureCardPreview(file)"
|
||||
<viewer :images="images" :ref="file.url">
|
||||
<img
|
||||
class="el-upload-list__item-thumbnail"
|
||||
:src="OSSclientConfig.basePath + file.url"
|
||||
alt=""
|
||||
crossorigin="anonymous"
|
||||
>
|
||||
<i class="el-icon-zoom-in" />
|
||||
</span>
|
||||
<span class="el-upload-list__item-actions">
|
||||
<span
|
||||
class="el-upload-list__item-preview"
|
||||
@click="handlePictureCardPreview(file)"
|
||||
>
|
||||
<i class="el-icon-zoom-in" />
|
||||
</span>
|
||||
|
||||
<span
|
||||
v-if="adInfo.ReadingTaskState < 2"
|
||||
class="el-upload-list__item-delete"
|
||||
@click="handleRemove(file)"
|
||||
>
|
||||
<i class="el-icon-delete" />
|
||||
<span
|
||||
v-if="adInfo.ReadingTaskState < 2"
|
||||
class="el-upload-list__item-delete"
|
||||
@click="handleRemove(file)"
|
||||
>
|
||||
<i class="el-icon-delete" />
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
</viewer>
|
||||
</div>
|
||||
</el-upload>
|
||||
<el-dialog
|
||||
append-to-body
|
||||
:visible.sync="imgVisible"
|
||||
width="600px"
|
||||
>
|
||||
<!-- <img width="100%" :src="imageUrl" alt="图片未找到"> -->
|
||||
<el-image :src="imageUrl" width="100%" crossorigin="anonymous">
|
||||
<div slot="placeholder" class="image-slot">
|
||||
{{ $t('trials:adReview:title:loading') }}<span class="dot">...</span>
|
||||
</div>
|
||||
</el-image>
|
||||
</el-dialog>
|
||||
|
||||
</el-form-item>
|
||||
<el-form-item v-if="adInfo.ReadingTaskState < 2">
|
||||
<div style="text-align:center;">
|
||||
<el-button type="primary" @click="skipTask">
|
||||
<!-- 跳过 -->
|
||||
{{ $t('trials:readingReport:button:skip') }}
|
||||
</el-button>
|
||||
<!-- 保存 -->
|
||||
<el-button type="primary" @click="handleSave">{{ $t('common:button:save') }}</el-button>
|
||||
<!-- 提交 -->
|
||||
@@ -317,12 +312,14 @@ import { getJudgeReadingInfo,
|
||||
// uploadJudgeTaskImage,
|
||||
saveJudgeVisitTaskResult, submitJudgeVisitTaskResult, getReadingPastResultList } from '@/api/trials'
|
||||
import { getAutoCutNextTask } from '@/api/user'
|
||||
import { setSkipReadingCache } from '@/api/reading'
|
||||
import const_ from '@/const/sign-code'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import SignForm from '@/views/trials/components/newSignForm'
|
||||
import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent'
|
||||
import store from '@/store'
|
||||
import { changeURLStatic } from '@/utils/history.js'
|
||||
import Viewer from 'v-viewer'
|
||||
export default {
|
||||
name: 'AdReview',
|
||||
components: { SignForm },
|
||||
@@ -390,7 +387,8 @@ export default {
|
||||
judgeResultArmEnum: '',
|
||||
criterionType: null,
|
||||
openWindow: null,
|
||||
isFixed:false
|
||||
isFixed: false,
|
||||
images: []
|
||||
}
|
||||
},
|
||||
// watch: {
|
||||
@@ -407,6 +405,7 @@ export default {
|
||||
// }
|
||||
// },
|
||||
mounted() {
|
||||
this.initializeViewer()
|
||||
this.criterionType = parseInt(this.$route.query.criterionType)
|
||||
this.getAdInfo()
|
||||
if (this.isReadingShowPreviousResults) {
|
||||
@@ -708,14 +707,42 @@ export default {
|
||||
},
|
||||
// 预览图片
|
||||
handlePictureCardPreview(file) {
|
||||
this.imageUrl = this.OSSclientConfig.basePath + file.url
|
||||
this.imgVisible = true
|
||||
this.images = this.fileList.map(f => this.OSSclientConfig.basePath + f.url)
|
||||
// this.imageUrl = this.OSSclientConfig.basePath + file.url
|
||||
this.$refs[file.url].$viewer.show()
|
||||
},
|
||||
// 删除图片
|
||||
handleRemove(file, fileList) {
|
||||
var idx = this.fileList.findIndex(i => i.url === file.url)
|
||||
if (idx === -1) return
|
||||
this.fileList.splice(idx, 1)
|
||||
},
|
||||
async skipTask() {
|
||||
try {
|
||||
// 是否确认跳过?
|
||||
const confirm = await this.$confirm(
|
||||
this.$t('trials:readingReport:message:skipConfirm'),
|
||||
{
|
||||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
}
|
||||
)
|
||||
if (confirm !== 'confirm') return
|
||||
this.loading = true
|
||||
const res = await setSkipReadingCache({ visitTaskId: this.visitTaskId })
|
||||
this.loading = false
|
||||
if (res.IsSuccess) {
|
||||
window.location.reload()
|
||||
}
|
||||
} catch (e) {
|
||||
this.loading = false
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
initializeViewer() {
|
||||
Viewer.setDefaults({
|
||||
toolbar: { zoomIn: true, zoomOut: true, rotateLeft: true, rotateRight: true, flipHorizontal: true, flipVertical: true }
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,15 @@
|
||||
style="margin-right:5px;"
|
||||
@change="handleShowDetail"
|
||||
/>
|
||||
<el-button
|
||||
v-if="readingTaskState<2"
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="skipTask"
|
||||
>
|
||||
<!-- 跳过 -->
|
||||
{{ $t('trials:readingReport:button:skip') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="readingTaskState<2"
|
||||
type="primary"
|
||||
@@ -172,8 +181,7 @@
|
||||
@change="evaluateReasonChange"
|
||||
/>
|
||||
<!-- 系统评估结果为:xxx,与当前调整的结果不一致,请填写调整原因 -->
|
||||
<p v-if="currentEvaluateResult !== tumorEvaluate" style="width: 140px;padding:0 2px;white-space: normal;word-break: break-all;word-wrap: break-word;" v-html="getWarningText()">
|
||||
</p>
|
||||
<p v-if="currentEvaluateResult !== tumorEvaluate" style="width: 140px;padding:0 2px;white-space: normal;word-break: break-all;word-wrap: break-word;" v-html="getWarningText()" />
|
||||
<p v-else-if="currentExistDisease !== isExistDisease" style="width: 140px;padding:0 2px;white-space: normal;word-break: break-all;word-wrap: break-word;">{{ $t('trials:readingReport:title:sysEvaluationRes') }}<span style="color:red">{{ $fd('ExistDisease',isExistDisease) }}</span>{{ $t('trials:readingReport:message:msg1') }}
|
||||
</p>
|
||||
</template>
|
||||
@@ -262,6 +270,7 @@
|
||||
</template>
|
||||
<script>
|
||||
import { getReadingReportEvaluation, changeDicomReadingQuestionAnswer, submitDicomVisitTask, verifyVisitTaskQuestions, getTaskAdditionalQuestion } from '@/api/trials'
|
||||
import { setSkipReadingCache } from '@/api/reading'
|
||||
import { getAutoCutNextTask } from '@/api/user'
|
||||
import DicomEvent from './DicomEvent'
|
||||
import const_ from '@/const/sign-code'
|
||||
@@ -816,14 +825,36 @@ export default {
|
||||
var sysRes = ''
|
||||
var curRes = ''
|
||||
if (this.CriterionType === 2) {
|
||||
sysRes = this.$fd('ImagingOverallAssessment_Lugano',this.tumorEvaluate)
|
||||
curRes = this.$fd('ImagingOverallAssessment_Lugano',this.currentEvaluateResult)
|
||||
sysRes = this.$fd('ImagingOverallAssessment_Lugano', this.tumorEvaluate)
|
||||
curRes = this.$fd('ImagingOverallAssessment_Lugano', this.currentEvaluateResult)
|
||||
} else {
|
||||
sysRes = this.$fd('OverallAssessment',this.tumorEvaluate)
|
||||
curRes = this.$fd('OverallAssessment',this.currentEvaluateResult)
|
||||
sysRes = this.$fd('OverallAssessment', this.tumorEvaluate)
|
||||
curRes = this.$fd('OverallAssessment', this.currentEvaluateResult)
|
||||
}
|
||||
let msg = this.$t('trials:readingReport:message:msg9').replace('xxx','<font color="red">' + sysRes + '</font>').replace('yyy','<font color="red">' + curRes + '</font>')
|
||||
const msg = this.$t('trials:readingReport:message:msg9').replace('xxx', '<font color="red">' + sysRes + '</font>').replace('yyy', '<font color="red">' + curRes + '</font>')
|
||||
return msg
|
||||
},
|
||||
async skipTask() {
|
||||
try {
|
||||
// 是否确认跳过?
|
||||
const confirm = await this.$confirm(
|
||||
this.$t('trials:readingReport:message:skipConfirm'),
|
||||
{
|
||||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
}
|
||||
)
|
||||
if (confirm !== 'confirm') return
|
||||
this.loading = true
|
||||
const res = await setSkipReadingCache({ visitTaskId: this.visitTaskId })
|
||||
this.loading = false
|
||||
if (res.IsSuccess) {
|
||||
window.location.reload()
|
||||
}
|
||||
} catch (e) {
|
||||
this.loading = false
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,15 @@
|
||||
style="margin-right:5px"
|
||||
@change="handleShowDetail"
|
||||
/>
|
||||
<el-button
|
||||
v-if="readingTaskState<2"
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="skipTask"
|
||||
>
|
||||
<!-- 跳过 -->
|
||||
{{ $t('trials:readingReport:button:skip') }}
|
||||
</el-button>
|
||||
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="getReportInfo">{{$t('trials:readingReport:button:refresh')}}</el-button>
|
||||
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="handleSave(true)">{{$t('common:button:save')}}</el-button>
|
||||
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="handleConfirm">{{$t('common:button:submit')}}</el-button>
|
||||
@@ -260,6 +269,7 @@
|
||||
</template>
|
||||
<script>
|
||||
import { changeCalculationAnswer, getReadingReportEvaluation, changeDicomReadingQuestionAnswer, submitDicomVisitTask, verifyVisitTaskQuestions, getQuestionCalculateRelation } from '@/api/trials'
|
||||
import { setSkipReadingCache } from '@/api/reading'
|
||||
import DicomEvent from './../components/DicomEvent'
|
||||
import CustomizeReportPageUpload from './CustomizeReportPageUpload'
|
||||
import const_ from '@/const/sign-code'
|
||||
@@ -828,6 +838,28 @@ export default {
|
||||
reject()
|
||||
})
|
||||
})
|
||||
},
|
||||
async skipTask() {
|
||||
try {
|
||||
// 是否确认跳过?
|
||||
const confirm = await this.$confirm(
|
||||
this.$t('trials:readingReport:message:skipConfirm'),
|
||||
{
|
||||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
}
|
||||
)
|
||||
if (confirm !== 'confirm') return
|
||||
this.loading = true
|
||||
const res = await setSkipReadingCache({ visitTaskId: this.visitTaskId })
|
||||
this.loading = false
|
||||
if (res.IsSuccess) {
|
||||
window.location.reload()
|
||||
}
|
||||
} catch (e) {
|
||||
this.loading = false
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,14 @@
|
||||
</div>
|
||||
|
||||
<div v-if=" readingTaskState < 2" style="text-align:right;margin:5px 0;">
|
||||
|
||||
<el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="skipTask"
|
||||
>
|
||||
<!-- 跳过 -->
|
||||
{{ $t('trials:readingReport:button:skip') }}
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="handleSave">
|
||||
{{ $t('common:button:save') }}
|
||||
</el-button>
|
||||
@@ -142,6 +149,7 @@
|
||||
<script>
|
||||
import { getGlobalReadingInfo, getReadingPastResultList, submitGlobalReadingInfo, saveGlobalReadingInfo } from '@/api/trials'
|
||||
import { getAutoCutNextTask } from '@/api/user'
|
||||
import { setSkipReadingCache } from '@/api/reading'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import const_ from '@/const/sign-code'
|
||||
import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent'
|
||||
@@ -377,6 +385,28 @@ export default {
|
||||
handleSave() {
|
||||
this.$refs['globalTbl'].handleSave(true)
|
||||
},
|
||||
async skipTask() {
|
||||
try {
|
||||
// 是否确认跳过?
|
||||
const confirm = await this.$confirm(
|
||||
this.$t('trials:readingReport:message:skipConfirm'),
|
||||
{
|
||||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
}
|
||||
)
|
||||
if (confirm !== 'confirm') return
|
||||
this.loading = true
|
||||
const res = await setSkipReadingCache({ visitTaskId: this.visitTaskId })
|
||||
this.loading = false
|
||||
if (res.IsSuccess) {
|
||||
window.location.reload()
|
||||
}
|
||||
} catch (e) {
|
||||
this.loading = false
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
async handleConfirm() {
|
||||
// 判断是否存在访视评估结果未确认
|
||||
var idx = this.taskList.findIndex(i => !i.AgreeOrNotAnswer)
|
||||
|
||||
@@ -29,11 +29,22 @@
|
||||
{{ $t('trials:medicalFeedback:message:msg2') }}
|
||||
<ol>
|
||||
<li v-for="file in record.FileList" :key="file.ImagePath" style="list-style: none;">
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
@click="previewImage(file.ImagePath)"
|
||||
>{{ file.FileName }}</el-button>
|
||||
<viewer
|
||||
v-if="file.ImagePath"
|
||||
:ref="file.ImagePath"
|
||||
style="margin:0 10px;"
|
||||
:images="[`${OSSclientConfig.basePath}${file.ImagePath}`]"
|
||||
>
|
||||
<el-button type="text" @click="previewImage(file.ImagePath)">
|
||||
{{ file.FileName }}
|
||||
</el-button>
|
||||
<img
|
||||
v-show="false"
|
||||
crossorigin="anonymous"
|
||||
:src="`${OSSclientConfig.basePath}${file.ImagePath}`"
|
||||
alt="Image"
|
||||
>
|
||||
</viewer>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
@@ -97,22 +108,6 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<el-dialog
|
||||
v-if="previewDialog"
|
||||
append-to-body
|
||||
:close-on-click-modal="false"
|
||||
:visible.sync="previewDialog"
|
||||
width="600px"
|
||||
>
|
||||
<!-- <img width="100%" :src="imagePath" alt="图片未找到"> -->
|
||||
<el-image :src="imagePath" crossorigin="anonymous" width="100%">
|
||||
<div slot="placeholder" class="image-slot">
|
||||
<!-- 加载中 -->
|
||||
{{ $t('trials:medicalFeedback:message:loading') }}<span class="dot">...</span>
|
||||
</div>
|
||||
</el-image>
|
||||
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
v-if="irFeedbackForm.visible"
|
||||
@@ -137,6 +132,7 @@ import { getMedicalReviewDialog } from '@/api/trials'
|
||||
import FeedbackForm from './FeedbackForm'
|
||||
import mimAvatar from '@/assets/MIM.png'
|
||||
import irAvatar from '@/assets/IR.png'
|
||||
import Viewer from 'v-viewer'
|
||||
export default {
|
||||
name: 'ChatForm',
|
||||
components: { FeedbackForm },
|
||||
@@ -170,6 +166,7 @@ export default {
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initializeViewer()
|
||||
this.getMessageList()
|
||||
},
|
||||
methods: {
|
||||
@@ -204,6 +201,12 @@ export default {
|
||||
previewImage(path) {
|
||||
this.imagePath = `${this.OSSclientConfig.basePath}${path}`
|
||||
this.previewDialog = true
|
||||
this.$refs[path][0].$viewer.show()
|
||||
},
|
||||
initializeViewer() {
|
||||
Viewer.setDefaults({
|
||||
toolbar: { zoomIn: true, zoomOut: true, rotateLeft: true, rotateRight: true, flipHorizontal: true, flipVertical: true }
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,12 +28,23 @@
|
||||
<!-- 本次医学审核相关截图(如适用)如下: -->
|
||||
{{ $t('trials:medicalFeedback:message:msg2') }}
|
||||
<ol>
|
||||
<li v-for="file in record.FileList" :key="file.ImagePath" style="list-style: none;">
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
@click="previewImage(file.ImagePath)"
|
||||
>{{ file.FileName }}</el-button>
|
||||
<li v-for="file in record.FileList" :key="file.ImagePath" style="list-style: none;">
|
||||
<viewer
|
||||
v-if="file.ImagePath"
|
||||
:ref="file.ImagePath"
|
||||
style="margin:0 10px;"
|
||||
:images="[`${OSSclientConfig.basePath}${file.ImagePath}`]"
|
||||
>
|
||||
<el-button type="text" @click="previewImage(file.ImagePath)">
|
||||
{{ file.FileName }}
|
||||
</el-button>
|
||||
<img
|
||||
v-show="false"
|
||||
crossorigin="anonymous"
|
||||
:src="`${OSSclientConfig.basePath}${file.ImagePath}`"
|
||||
alt="Image"
|
||||
>
|
||||
</viewer>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
@@ -125,19 +136,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-dialog
|
||||
append-to-body
|
||||
:visible.sync="previewDialog"
|
||||
width="600px"
|
||||
>
|
||||
<!-- <img width="100%" :src="imagePath" alt="图片未找到"> -->
|
||||
<el-image :src="OSSclientConfig.basePath + imagePath" width="100%" crossorigin="anonymous">
|
||||
<div slot="placeholder" class="image-slot">
|
||||
{{ $t('trials:medicalFeedback:message:loading') }}<span class="dot">...</span>
|
||||
</div>
|
||||
</el-image>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
v-if="irFeedbackForm.visible"
|
||||
:visible.sync="irFeedbackForm.visible"
|
||||
@@ -154,6 +152,7 @@
|
||||
@close="irFeedbackForm.visible = false"
|
||||
/>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
@@ -161,6 +160,7 @@ import { getMedicalReviewDialog, sendMedicalReviewDialog } from '@/api/trials'
|
||||
import FeedbackForm from '@/views/trials/trials-panel/reading/medical-feedback/components/FeedbackForm'
|
||||
import mimAvatar from '@/assets/MIM.png'
|
||||
import irAvatar from '@/assets/IR.png'
|
||||
import Viewer from 'v-viewer'
|
||||
export default {
|
||||
name: 'ChatForm',
|
||||
components: {
|
||||
@@ -196,6 +196,7 @@ export default {
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initializeViewer()
|
||||
this.getMessageList()
|
||||
},
|
||||
methods: {
|
||||
@@ -242,12 +243,18 @@ export default {
|
||||
previewImage(path) {
|
||||
this.imagePath = `${path}`
|
||||
this.previewDialog = true
|
||||
this.$refs[path][0].$viewer.show()
|
||||
},
|
||||
handleIRReply() {
|
||||
// '反馈'
|
||||
this.irFeedbackForm.title = this.$t('trials:medicalFeedback:title:feedback')
|
||||
|
||||
this.irFeedbackForm.visible = true
|
||||
},
|
||||
initializeViewer() {
|
||||
Viewer.setDefaults({
|
||||
toolbar: { zoomIn: true, zoomOut: true, rotateLeft: true, rotateRight: true, flipHorizontal: true, flipVertical: true }
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+38
-26
@@ -92,46 +92,49 @@
|
||||
>
|
||||
<i slot="default" class="el-icon-plus" />
|
||||
<div slot="file" slot-scope="{file}">
|
||||
<img
|
||||
class="el-upload-list__item-thumbnail"
|
||||
:src="OSSclientConfig.basePath + file.url"
|
||||
crossOrigin="anonymous"
|
||||
alt=""
|
||||
>
|
||||
<span class="el-upload-list__item-actions">
|
||||
<span
|
||||
class="el-upload-list__item-preview"
|
||||
@click="handlePictureCardPreview(file)"
|
||||
<viewer :images="images" :ref="file.url">
|
||||
<img
|
||||
class="el-upload-list__item-thumbnail"
|
||||
:src="OSSclientConfig.basePath + file.url"
|
||||
crossOrigin="anonymous"
|
||||
alt=""
|
||||
>
|
||||
<i class="el-icon-zoom-in" />
|
||||
</span>
|
||||
<span class="el-upload-list__item-actions">
|
||||
<span
|
||||
class="el-upload-list__item-preview"
|
||||
@click="handlePictureCardPreview(file)"
|
||||
>
|
||||
<i class="el-icon-zoom-in" />
|
||||
</span>
|
||||
|
||||
<span
|
||||
v-if="!isSendMessage && auditState!==2"
|
||||
class="el-upload-list__item-delete"
|
||||
@click="handleRemove(file)"
|
||||
>
|
||||
<i class="el-icon-delete" />
|
||||
<span
|
||||
v-if="!isSendMessage && auditState!==2"
|
||||
class="el-upload-list__item-delete"
|
||||
@click="handleRemove(file)"
|
||||
>
|
||||
<i class="el-icon-delete" />
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
</viewer>
|
||||
</div>
|
||||
</el-upload>
|
||||
<el-dialog
|
||||
<!-- <el-dialog
|
||||
append-to-body
|
||||
:visible.sync="imgVisible"
|
||||
width="600px"
|
||||
>
|
||||
<!-- <img width="100%" :src="imageUrl" alt="图片未找到"> -->
|
||||
<el-image :src="imageUrl" width="100%" crossorigin="anonymous">
|
||||
<div slot="placeholder" class="image-slot">
|
||||
{{ $t('trials:medicalFeedback:message:loading') }}<span class="dot">...</span>
|
||||
</div>
|
||||
</el-image>
|
||||
</el-dialog>
|
||||
</el-dialog> -->
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<!-- <viewer v-if="imgVisible" :images="[imageUrl]" ref="viewer">
|
||||
<img :src="imageUrl" crossorigin="anonymous" alt="">
|
||||
</viewer> -->
|
||||
<el-dialog
|
||||
v-if="chatVisible"
|
||||
:visible.sync="chatVisible"
|
||||
@@ -170,6 +173,7 @@
|
||||
import { saveMedicalReviewInfo } from '@/api/trials'
|
||||
import ChatForm from './ChatForm'
|
||||
import CloseQC from './CloseQC'
|
||||
import Viewer from 'v-viewer'
|
||||
export default {
|
||||
name: 'AuditConclusions',
|
||||
components: {
|
||||
@@ -220,10 +224,12 @@ export default {
|
||||
userTypeEnumInt: zzSessionStorage.getItem('userTypeEnumInt') * 1,
|
||||
isClosedDialog: false,
|
||||
isSendMessage: false,
|
||||
closeQuestionVisible: false
|
||||
closeQuestionVisible: false,
|
||||
images:[]
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initializeViewer()
|
||||
this.initForm()
|
||||
},
|
||||
methods: {
|
||||
@@ -379,14 +385,20 @@ export default {
|
||||
},
|
||||
// 预览图片
|
||||
handlePictureCardPreview(file) {
|
||||
this.imageUrl = this.OSSclientConfig.basePath + file.url
|
||||
this.imgVisible = true
|
||||
this.images = this.fileList.map(f => this.OSSclientConfig.basePath + f.url)
|
||||
// this.imageUrl = this.OSSclientConfig.basePath + file.url
|
||||
this.$refs[file.url].$viewer.show()
|
||||
},
|
||||
// 删除图片
|
||||
handleRemove(file, fileList) {
|
||||
var idx = this.fileList.findIndex(i => i.url === file.url)
|
||||
if (idx === -1) return
|
||||
this.fileList.splice(idx, 1)
|
||||
},
|
||||
initializeViewer() {
|
||||
Viewer.setDefaults({
|
||||
toolbar: { zoomIn: true, zoomOut: true, rotateLeft: true, rotateRight: true, flipHorizontal: true, flipVertical: true}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,14 @@
|
||||
>
|
||||
{{ $t('trials:oncologyReview:button:clinicalData') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="skipTask"
|
||||
>
|
||||
<!-- 跳过 -->
|
||||
{{ $t('trials:readingReport:button:skip') }}
|
||||
</el-button>
|
||||
<!-- 保存 -->
|
||||
<el-button
|
||||
v-if="oncologyInfo.ReadingTaskState < 2"
|
||||
@@ -253,6 +261,7 @@
|
||||
</template>
|
||||
<script>
|
||||
import { getOncologyReadingInfo, getReadingPastResultList, setOncologyReadingInfo, submitOncologyReadingInfo } from '@/api/trials'
|
||||
import { setSkipReadingCache } from '@/api/reading'
|
||||
import const_ from '@/const/sign-code'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent'
|
||||
@@ -554,6 +563,28 @@ export default {
|
||||
path: `/clinicalData?subjectId=${this.oncologyInfo.SubjectId}&trialId=${this.trialId}&visitTaskId=${this.oncologyInfo.OncologyTaskId}&TokenKey=${token}`
|
||||
})
|
||||
window.open(routeData.href, '_blank')
|
||||
},
|
||||
async skipTask() {
|
||||
try {
|
||||
// 是否确认跳过?
|
||||
const confirm = await this.$confirm(
|
||||
this.$t('trials:readingReport:message:skipConfirm'),
|
||||
{
|
||||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
}
|
||||
)
|
||||
if (confirm !== 'confirm') return
|
||||
this.loading = true
|
||||
const res = await setSkipReadingCache({ visitTaskId: this.visitTaskId })
|
||||
this.loading = false
|
||||
if (res.IsSuccess) {
|
||||
window.location.reload()
|
||||
}
|
||||
} catch (e) {
|
||||
this.loading = false
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -372,7 +372,7 @@
|
||||
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
|
||||
<el-dialog
|
||||
v-if="ConfirmReReadingVisible"
|
||||
title="驳回"
|
||||
:title="$t('trials:rereadTrack:reject:title:reject')"
|
||||
:visible.sync="ConfirmReReadingVisible"
|
||||
width="600px"
|
||||
append-to-body
|
||||
@@ -764,8 +764,16 @@ export default {
|
||||
})
|
||||
},
|
||||
confirmSign(type) {
|
||||
const { HeavyReadingApproval } = const_.processSignature
|
||||
const { HeavyReadingApproval } = const_.processSignature;
|
||||
this.type = type
|
||||
if(type === 2){
|
||||
return this.$refs.reasonForm.validate(validate=>{
|
||||
if(validate){
|
||||
this.signCode = HeavyReadingApproval
|
||||
this.signVisible = true
|
||||
}
|
||||
})
|
||||
}
|
||||
this.signCode = HeavyReadingApproval
|
||||
this.signVisible = true
|
||||
},
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
v-if="
|
||||
(isReadingTaskViewInOrder === 1 ||
|
||||
isReadingTaskViewInOrder === 2) &&
|
||||
TrialReadingCriterionId === item.TrialReadingCriterionId
|
||||
TrialReadingCriterionId === item.TrialReadingCriterionId
|
||||
"
|
||||
>
|
||||
<div slot="search-container">
|
||||
@@ -75,11 +75,10 @@
|
||||
scope.row.UrgentColor === 1
|
||||
? 'danger'
|
||||
: scope.row.UrgentColor === 2
|
||||
? 'warning'
|
||||
: 'primary'
|
||||
? 'warning'
|
||||
: 'primary'
|
||||
"
|
||||
>{{ $fd("YesOrNo", scope.row.IsUrgent) }}</el-tag
|
||||
>
|
||||
>{{ $fd("YesOrNo", scope.row.IsUrgent) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 受试者编号 -->
|
||||
@@ -114,11 +113,10 @@
|
||||
scope.row.UrgentColor === 1
|
||||
? '#F56C6C'
|
||||
: scope.row.UrgentColor === 2
|
||||
? '#E6A23C'
|
||||
: '#409EFF',
|
||||
? '#E6A23C'
|
||||
: '#409EFF',
|
||||
}"
|
||||
>{{ scope.row.UrgentCount }}</span
|
||||
>
|
||||
>{{ scope.row.UrgentCount }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 建议完成时间 -->
|
||||
@@ -148,8 +146,8 @@
|
||||
:title="
|
||||
scope.row.ExistReadingApply
|
||||
? $t(
|
||||
'trials:pendingReadingTasks:button:ExistReadingApply'
|
||||
)
|
||||
'trials:pendingReadingTasks:button:ExistReadingApply'
|
||||
)
|
||||
: $t('trials:pendingReadingTasks:button:review')
|
||||
"
|
||||
icon="el-icon-edit-outline"
|
||||
@@ -157,12 +155,12 @@
|
||||
/>
|
||||
<!-- 上传 -->
|
||||
<el-button
|
||||
v-hasPermi="['role:ir']"
|
||||
v-if="
|
||||
item.CriterionType === 0 &&
|
||||
item.ImageUploadEnum > 0 &&
|
||||
item.IsReadingTaskViewInOrder > 0
|
||||
item.ImageUploadEnum > 0 &&
|
||||
item.IsReadingTaskViewInOrder > 0
|
||||
"
|
||||
v-hasPermi="['role:ir']"
|
||||
circle
|
||||
icon="el-icon-upload2"
|
||||
:title="$t('trials:pendingReadingTasks:button:upload')"
|
||||
@@ -170,12 +168,12 @@
|
||||
/>
|
||||
<!-- 下载 -->
|
||||
<el-button
|
||||
v-hasPermi="['role:ir']"
|
||||
v-if="
|
||||
item.CriterionType === 0 &&
|
||||
item.ImageDownloadEnum === 1 &&
|
||||
item.IsReadingTaskViewInOrder > 0
|
||||
item.ImageDownloadEnum === 1 &&
|
||||
item.IsReadingTaskViewInOrder > 0
|
||||
"
|
||||
v-hasPermi="['role:ir']"
|
||||
circle
|
||||
icon="el-icon-download"
|
||||
:title="$t('trials:pendingReadingTasks:button:download')"
|
||||
@@ -196,7 +194,7 @@
|
||||
<div
|
||||
v-else-if="
|
||||
isReadingTaskViewInOrder === 0 &&
|
||||
TrialReadingCriterionId === item.TrialReadingCriterionId
|
||||
TrialReadingCriterionId === item.TrialReadingCriterionId
|
||||
"
|
||||
>
|
||||
<el-descriptions :column="2" border style="width: 800px">
|
||||
@@ -250,7 +248,7 @@
|
||||
:disabled="
|
||||
randomReadInfo.UnReadTaskCount +
|
||||
randomReadInfo.UnReadJudgeTaskCount ===
|
||||
0
|
||||
0
|
||||
"
|
||||
@click="handleOutOfOrderReading"
|
||||
>
|
||||
@@ -264,8 +262,8 @@
|
||||
<upload-image
|
||||
v-if="uploadImageVisible"
|
||||
:visible.sync="uploadImageVisible"
|
||||
:SubjectId="uploadSubjectId"
|
||||
:Criterion="uploadTrialCriterion"
|
||||
:subject-id="uploadSubjectId"
|
||||
:criterion="uploadTrialCriterion"
|
||||
:status="uploadStatus"
|
||||
@getList="getList"
|
||||
/>
|
||||
@@ -274,35 +272,36 @@
|
||||
<script>
|
||||
import {
|
||||
getIRUnReadSubjectTaskList,
|
||||
verifyReadingRestTime,
|
||||
} from "@/api/trials";
|
||||
import { getTrialCriterionList } from "@/api/trials/reading";
|
||||
import BaseContainer from "@/components/BaseContainer";
|
||||
import uploadImage from "@/components/uploadImage";
|
||||
import Pagination from "@/components/Pagination";
|
||||
import { getToken } from "@/utils/auth";
|
||||
verifyReadingRestTime
|
||||
} from '@/api/trials'
|
||||
import { getTrialCriterionList } from '@/api/trials/reading'
|
||||
import { clearSkipReadingCache } from '@/api/reading'
|
||||
import BaseContainer from '@/components/BaseContainer'
|
||||
import uploadImage from '@/components/uploadImage'
|
||||
import Pagination from '@/components/Pagination'
|
||||
import { getToken } from '@/utils/auth'
|
||||
const searchDataDefault = () => {
|
||||
return {
|
||||
SubjectCode: "",
|
||||
SubjectCode: '',
|
||||
PageIndex: 1,
|
||||
PageSize: 20,
|
||||
};
|
||||
};
|
||||
PageSize: 20
|
||||
}
|
||||
}
|
||||
export default {
|
||||
name: "ReadingTaskList",
|
||||
components: { BaseContainer, Pagination, "upload-image": uploadImage },
|
||||
name: 'ReadingTaskList',
|
||||
components: { BaseContainer, Pagination, 'upload-image': uploadImage },
|
||||
data() {
|
||||
return {
|
||||
searchData: searchDataDefault(),
|
||||
list: [],
|
||||
total: 0,
|
||||
loading: false,
|
||||
trialId: "",
|
||||
trialId: '',
|
||||
isReadingTaskViewInOrder: null,
|
||||
randomReadInfo: {},
|
||||
isRender: false,
|
||||
trialCriterionList: [],
|
||||
TrialReadingCriterionId: "",
|
||||
TrialReadingCriterionId: '',
|
||||
isTableShow: true,
|
||||
readingTool: null,
|
||||
criterionType: null,
|
||||
@@ -312,147 +311,146 @@ export default {
|
||||
uploadImageVisible: false,
|
||||
uploadSubjectId: null,
|
||||
uploadTrialCriterion: {},
|
||||
uploadStatus: "upload",
|
||||
};
|
||||
uploadStatus: 'upload'
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
TrialReadingCriterionId(v) {
|
||||
if (v) {
|
||||
this.getList();
|
||||
this.getList()
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
window.addEventListener("message", this.receiveMsg);
|
||||
this.trialId = this.$route.query.trialId;
|
||||
this.getTrialCriterionList();
|
||||
window.addEventListener('message', this.receiveMsg)
|
||||
this.trialId = this.$route.query.trialId
|
||||
this.getTrialCriterionList()
|
||||
},
|
||||
beforeDestroy() {
|
||||
window.removeEventListener("message", this.receiveMsg);
|
||||
window.removeEventListener('message', this.receiveMsg)
|
||||
if (this.openWindow) {
|
||||
this.openWindow.close();
|
||||
this.openWindow.close()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 打开上传下载弹框
|
||||
openUploadImage(item, trialCriterion, status) {
|
||||
this.uploadSubjectId = item.SubjectId;
|
||||
this.uploadTrialCriterion = trialCriterion;
|
||||
this.uploadStatus = status;
|
||||
this.uploadImageVisible = true;
|
||||
this.uploadSubjectId = item.SubjectId
|
||||
this.uploadTrialCriterion = trialCriterion
|
||||
this.uploadStatus = status
|
||||
this.uploadImageVisible = true
|
||||
},
|
||||
getTrialCriterionList() {
|
||||
getTrialCriterionList(this.trialId)
|
||||
.then((res) => {
|
||||
this.trialCriterionList = res.Result;
|
||||
async getTrialCriterionList() {
|
||||
try {
|
||||
const res = await getTrialCriterionList(this.trialId)
|
||||
if (res.IsSuccess) {
|
||||
this.trialCriterionList = res.Result
|
||||
this.TrialReadingCriterionId =
|
||||
this.trialCriterionList[0].TrialReadingCriterionId;
|
||||
})
|
||||
.catch(() => {});
|
||||
this.trialCriterionList[0].TrialReadingCriterionId
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
getList() {
|
||||
this.loading = true;
|
||||
this.searchData.TrialId = this.trialId;
|
||||
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId;
|
||||
this.isRender = false;
|
||||
getIRUnReadSubjectTaskList(this.searchData)
|
||||
.then((res) => {
|
||||
async getList() {
|
||||
try {
|
||||
this.loading = true
|
||||
this.searchData.TrialId = this.trialId
|
||||
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId
|
||||
this.isRender = false
|
||||
const res = await getIRUnReadSubjectTaskList(this.searchData)
|
||||
if (res.IsSuccess) {
|
||||
this.isReadingTaskViewInOrder =
|
||||
res.OtherInfo.IsReadingTaskViewInOrder;
|
||||
this.readingTool = res.OtherInfo.ReadingTool;
|
||||
this.criterionType = res.OtherInfo.CriterionType;
|
||||
res.OtherInfo.IsReadingTaskViewInOrder
|
||||
this.readingTool = res.OtherInfo.ReadingTool
|
||||
this.criterionType = res.OtherInfo.CriterionType
|
||||
if (res.OtherInfo.IsReadingTaskViewInOrder) {
|
||||
this.list = res.Result.CurrentPageData;
|
||||
this.total = res.Result.TotalCount;
|
||||
this.list = res.Result.CurrentPageData
|
||||
this.total = res.Result.TotalCount
|
||||
} else {
|
||||
this.randomReadInfo = res.OtherInfo.RandomReadInfo;
|
||||
this.randomReadInfo = res.OtherInfo.RandomReadInfo
|
||||
}
|
||||
this.isRender = true;
|
||||
this.loading = false;
|
||||
})
|
||||
.catch(() => {
|
||||
this.isRender = true;
|
||||
this.loading = false;
|
||||
});
|
||||
this.isRender = true
|
||||
this.loading = false
|
||||
}
|
||||
} catch (e) {
|
||||
this.isRender = true
|
||||
this.loading = false
|
||||
}
|
||||
},
|
||||
handleSearch() {
|
||||
this.searchData.PageIndex = 1;
|
||||
this.getList();
|
||||
this.searchData.PageIndex = 1
|
||||
this.getList()
|
||||
},
|
||||
handleReset() {
|
||||
this.searchData = searchDataDefault();
|
||||
this.getList();
|
||||
this.searchData = searchDataDefault()
|
||||
this.getList()
|
||||
},
|
||||
handleReadImage(row) {
|
||||
async handleReadImage(row) {
|
||||
if (this.openWindow) {
|
||||
this.openWindow.close();
|
||||
this.openWindow.close()
|
||||
}
|
||||
this.loading = true;
|
||||
verifyReadingRestTime()
|
||||
.then((_) => {
|
||||
this.loading = false;
|
||||
try {
|
||||
this.loading = true
|
||||
await clearSkipReadingCache()
|
||||
await verifyReadingRestTime()
|
||||
this.loading = false
|
||||
window.localStorage.setItem('TrialReadingCriterionId', this.TrialReadingCriterionId)
|
||||
var token = getToken()
|
||||
var path = ''
|
||||
if (this.readingTool === 0) {
|
||||
path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`
|
||||
} else {
|
||||
path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`
|
||||
}
|
||||
var routeData = this.$router.resolve({ path })
|
||||
|
||||
window.localStorage.setItem(
|
||||
"TrialReadingCriterionId",
|
||||
this.TrialReadingCriterionId
|
||||
);
|
||||
var token = getToken();
|
||||
var path = "";
|
||||
if (this.readingTool === 0) {
|
||||
path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`;
|
||||
} else {
|
||||
path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`;
|
||||
}
|
||||
var routeData = this.$router.resolve({ path });
|
||||
|
||||
this.openWindow = window.open(routeData.href, "_blank");
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
this.openWindow = window.open(routeData.href, '_blank')
|
||||
} catch (e) {
|
||||
this.loading = false
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
handleOutOfOrderReading() {
|
||||
async handleOutOfOrderReading() {
|
||||
if (this.openWindow) {
|
||||
this.openWindow.close();
|
||||
this.openWindow.close()
|
||||
}
|
||||
try {
|
||||
this.loading = true
|
||||
await clearSkipReadingCache()
|
||||
await verifyReadingRestTime()
|
||||
this.loading = false
|
||||
window.localStorage.setItem('TrialReadingCriterionId', this.TrialReadingCriterionId)
|
||||
var token = getToken()
|
||||
var path = ''
|
||||
if (this.readingTool === 0) {
|
||||
path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`
|
||||
} else {
|
||||
path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`
|
||||
}
|
||||
var routeData = this.$router.resolve({ path })
|
||||
this.openWindow = window.open(routeData.href, '_blank')
|
||||
} catch (e) {
|
||||
this.loading = false
|
||||
console.log(e)
|
||||
}
|
||||
this.loading = true;
|
||||
verifyReadingRestTime()
|
||||
.then((_) => {
|
||||
this.loading = false;
|
||||
window.localStorage.setItem(
|
||||
"TrialReadingCriterionId",
|
||||
this.TrialReadingCriterionId
|
||||
);
|
||||
var token = getToken();
|
||||
var path = "";
|
||||
if (this.readingTool === 0) {
|
||||
path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`;
|
||||
} else {
|
||||
path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`;
|
||||
}
|
||||
var routeData = this.$router.resolve({ path });
|
||||
this.openWindow = window.open(routeData.href, "_blank");
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
receiveMsg(event) {
|
||||
if (event.data === "refreshTaskList") {
|
||||
this.getList();
|
||||
if (event.data === 'refreshTaskList') {
|
||||
this.getList()
|
||||
}
|
||||
},
|
||||
// 排序
|
||||
handleSortChange(column) {
|
||||
if (column.order === "ascending") {
|
||||
this.searchData.Asc = true;
|
||||
if (column.order === 'ascending') {
|
||||
this.searchData.Asc = true
|
||||
} else {
|
||||
this.searchData.Asc = false;
|
||||
this.searchData.Asc = false
|
||||
}
|
||||
this.searchData.SortField = column.prop;
|
||||
this.searchData.PageIndex = 1;
|
||||
this.getList();
|
||||
},
|
||||
},
|
||||
};
|
||||
this.searchData.SortField = column.prop
|
||||
this.searchData.PageIndex = 1
|
||||
this.getList()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -43,6 +43,16 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="text-align: right">
|
||||
<!-- 下载所有影像 -->
|
||||
<el-button
|
||||
v-if="$store.state.trials.config.IsSupportQCDownloadImage"
|
||||
size="small"
|
||||
type="primary"
|
||||
style="margin-left: 10px"
|
||||
@click="downloadImage(true)"
|
||||
>
|
||||
{{ $t("trials:audit:button:downLoadAllDiocms") }}
|
||||
</el-button>
|
||||
<!-- 预览所有影像 -->
|
||||
<el-button
|
||||
size="small"
|
||||
@@ -285,6 +295,16 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="text-align: right">
|
||||
<!-- 下载所有影像 -->
|
||||
<el-button
|
||||
v-if="$store.state.trials.config.IsSupportQCDownloadImage"
|
||||
size="small"
|
||||
type="primary"
|
||||
style="margin-left: 10px"
|
||||
@click="downloadImage(false)"
|
||||
>
|
||||
{{ $t("trials:audit:button:downLoadAllNonDiocms") }}
|
||||
</el-button>
|
||||
<!-- 预览 -->
|
||||
<el-button
|
||||
size="small"
|
||||
@@ -1198,6 +1218,7 @@ import SignForm from "@/views/trials/components/newSignForm";
|
||||
import { getToken } from "@/utils/auth";
|
||||
import const_ from "@/const/sign-code";
|
||||
import uploadPetClinicalData from "@/views/trials/trials-panel/visit/crc-upload/components/uploadPetClinicalData.vue";
|
||||
import { downloadImage , resetFlag } from "@/utils/uploadZip.js";
|
||||
export default {
|
||||
name: "QualityAssurance",
|
||||
components: {
|
||||
@@ -1310,6 +1331,9 @@ export default {
|
||||
BodyPart: {},
|
||||
};
|
||||
},
|
||||
beforeDestroy(){
|
||||
resetFlag();
|
||||
},
|
||||
async mounted() {
|
||||
this.BodyPart.Bodypart = await this.$getBodyPart(this.$route.query.trialId);
|
||||
if (this.disabled) {
|
||||
@@ -1332,6 +1356,18 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 打包下载
|
||||
async downloadImage(IsDicom) {
|
||||
try {
|
||||
await downloadImage(
|
||||
this.$route.query.trialId,
|
||||
this.data.Id,
|
||||
IsDicom
|
||||
);
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
},
|
||||
// 获取QC界面基本信息
|
||||
getQCInfo() {
|
||||
this.loading = true;
|
||||
|
||||
+4
-3
@@ -11,7 +11,7 @@ function resolve(dir) {
|
||||
return path.join(__dirname, dir)
|
||||
}
|
||||
|
||||
const name = defaultSettings.title || 'IRCIS' // page title
|
||||
const name = process.env.NODE_ENV === 'usa' ? 'LILI' : defaultSettings.title || 'IRCIS' // page title
|
||||
|
||||
// eslint-disable-next-line no-undef
|
||||
module.exports = {
|
||||
@@ -63,7 +63,8 @@ module.exports = {
|
||||
// target: 'http://123.56.94.154:8079', // 国内测试环境2
|
||||
// target: 'http://123.56.94.154:7000', // 国内测试环境2
|
||||
// target: 'http://123.56.94.154:30668',
|
||||
target: 'http://106.14.89.110:30000',
|
||||
// target: 'http://106.14.89.110:30000',
|
||||
target: 'http://47.117.164.182:7010', // uat
|
||||
// target: 'http://123.56.181.144:7000',
|
||||
changeOrigin: true,
|
||||
secure: false,
|
||||
@@ -94,7 +95,7 @@ module.exports = {
|
||||
ignore: ['.*']
|
||||
}
|
||||
]),
|
||||
process.env.NODE_ENV === 'development' || process.env.VUE_APP_OSS_CONFIG_BUCKET === 'zyypacs-usa' ? function() {}
|
||||
process.env.NODE_ENV === 'development' || process.env.VUE_APP_OSS_CONFIG_BUCKET === 'zyypacs-usa' ? function() { }
|
||||
: new WebpackAliyunOss({
|
||||
from: ['./dist/**'],
|
||||
dist: process.env.VUE_APP_OSS_PATH + distDate,
|
||||
|
||||
Reference in New Issue
Block a user