diff --git a/package-lock.json b/package-lock.json
index 39fcd597..205955d4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -57,6 +57,7 @@
"sortablejs": "^1.15.5",
"streamsaver": "^2.0.6",
"svgo": "^1.2.2",
+ "unzipit": "^2.0.3",
"v-viewer": "^1.7.4",
"vcrontab": "^0.3.5",
"vue": "2.7.16",
@@ -21835,6 +21836,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/unzipit": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/unzipit/-/unzipit-2.0.3.tgz",
+ "integrity": "sha512-e6+ftgSQRj9Hwf2mIWFwYIGqBoKV7AziG/d7pep2Uv3NCzHbhLO5d9dGRwpahVlnpQ7aQC+5kWk72dnWocdYyA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/unzipper": {
"version": "0.10.14",
"resolved": "https://registry.npmmirror.com/unzipper/-/unzipper-0.10.14.tgz",
diff --git a/package.json b/package.json
index a7979f93..6c83bd26 100644
--- a/package.json
+++ b/package.json
@@ -64,6 +64,7 @@
"sortablejs": "^1.15.5",
"streamsaver": "^2.0.6",
"svgo": "^1.2.2",
+ "unzipit": "^2.0.3",
"v-viewer": "^1.7.4",
"vcrontab": "^0.3.5",
"vue": "2.7.16",
diff --git a/src/App.vue b/src/App.vue
index 3d5733f0..3d017a90 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -98,6 +98,7 @@ import timeTag from '@/components/timeTag'
import Vue from 'vue'
import i18n from './lang'
import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent'
+import WHITELIST from "./utils/whiteList"
export default {
name: 'App',
components: {
@@ -120,10 +121,10 @@ export default {
mounted() {
this.show = process.env.VUE_APP_OSS_PATH === '/test/dist'
Vue.prototype.$openI18n = this.openI18n
- // this.getIsLock()
- // DicomEvent.$on("isLock", (isLock) => {
- // this.isLock = isLock
- // })
+ this.getIsLock()
+ DicomEvent.$on("isLock", (isLock) => {
+ this.isLock = isLock
+ })
},
// watch: {
// '$route.query': {
@@ -156,7 +157,7 @@ export default {
// },
methods: {
getIsLock() {
- if (zzSessionStorage.getItem('isLock') === 'true') {
+ if (zzSessionStorage.getItem('isLock') === 'true' && !WHITELIST.includes(this.$route.path)) {
this.isLock = true
} else {
this.isLock = false
@@ -322,7 +323,7 @@ export default {
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index 41bae11a..7d853e62 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -154,7 +154,7 @@
-
{{ $t('login:title:system') }}
+{{ $t('login:title:system') }}
V{{ $version.IsEnv_US ? $version.Version_US : $version.Version }}
@@ -372,6 +372,15 @@ export default {
})
}, 500)
return
+ } else if (res.BasicInfo.IsNeedResetPwd) {
+ // 当前用户管理员重置密码,请先修改密码之后再次登录
+ this.$message.success(this.$t('login:message:login5'))
+ setTimeout(() => {
+ this.$router.push({
+ path: `/user-recompose?UserId=${res.BasicInfo.IdentityUserId}&Email=${res.BasicInfo.EMail}&UserName=${res.BasicInfo.UserName}&lang=${this.$i18n.locale}&access_token=${res.JWTStr}&isUpdate=1`,
+ })
+ }, 500)
+ return
} else if (res.BasicInfo.NeedChangePassWord) {
// 请先修改密码后再登录!
this.$alert(
diff --git a/src/views/none-dicom-show/index.vue b/src/views/none-dicom-show/index.vue
index e567c054..f5d1bac6 100644
--- a/src/views/none-dicom-show/index.vue
+++ b/src/views/none-dicom-show/index.vue
@@ -153,7 +153,8 @@ export default {
isAudit: false,
activeNames: [],
- Asc: false
+ Asc: false,
+ IsReadingTaskViewInOrder: 2
}
},
async created() {
@@ -165,6 +166,9 @@ export default {
store.dispatch('user/setToken', this.$router.currentRoute.query.TokenKey)
changeURLStatic('TokenKey', '')
}
+ if (this.$router.currentRoute.query.IsReadingTaskViewInOrder) {
+ this.IsReadingTaskViewInOrder = Number(this.$router.currentRoute.query.IsReadingTaskViewInOrder)
+ }
this.subjectVisitId = this.$router.currentRoute.query.subjectVisitId
this.studyId = this.$router.currentRoute.query.studyId
this.getNoneDicomList()
diff --git a/src/views/none-dicoms/components/file-viewer.vue b/src/views/none-dicoms/components/file-viewer.vue
new file mode 100644
index 00000000..cad4cbc0
--- /dev/null
+++ b/src/views/none-dicoms/components/file-viewer.vue
@@ -0,0 +1,1277 @@
+
+
+
{{ $t('trials:researchForm:title:question') }}
@@ -91,7 +92,10 @@ import { getUserMenuTree, getUserPermissions } from '@/api/user'
import store from '@/store'
import TopLang from './topLang'
import { mapGetters, mapMutations } from 'vuex'
-
+import {
+ getLinkLinkExpirationTime,
+ getLinkVerificationCodeIsEffective
+} from '@/api/trials'
export default {
components: { TopLang },
data() {
@@ -146,6 +150,7 @@ export default {
}
return {
trialId: '',
+ verify: true,
form: {
Sponsor: null, // 申办方
ResearchProgramNo: null, // 方案号
@@ -202,31 +207,116 @@ export default {
])
},
mounted() {
- this.$i18n.locale = this.$route.query.lang
- this.setLanguage(this.$route.query.lang)
+ let lang = this.$route.query.lang
+ if (!lang) {
+ const language = navigator.language
+ lang = 'en'
+ if (language.includes("zh")) {
+ lang = 'zh'
+ }
+ }
+ this.$i18n.locale = lang
+ this.setLanguage(lang)
this.$updateDictionary()
- if (this.$route.query.trialId) {
- this.trialId = this.$route.query.trialId
- this.initPage()
- }
- if (this.$route.query.isUpload) {
- this.isUpload = true
- this.form.IsUpdate = true
- let { email, oldEMail, trialSiteId } = this.$route.query
- if (trialSiteId) this.form.TrialSiteId = trialSiteId
- if (oldEMail) this.form.ReplaceUserEmailOrPhone = oldEMail
- if (email && email !== 'null') {
- this.form.EmailOrPhone = email
- } else {
- this.form.EmailOrPhone = oldEMail
- }
- if ((email && email !== 'null') || (oldEMail && oldEMail !== 'null')) {
- this.isNeedUpload = false
- }
- }
+ this.getLinkTimeIsExpired()
},
methods: {
...mapMutations({ setLanguage: 'lang/setLanguage' }),
+ async getLinkTimeIsExpired() {
+ try {
+ let data = {
+ TrialId: this.$route.query.trialId,
+ }
+ let res = await getLinkLinkExpirationTime(data)
+ if (res.IsSuccess) {
+ if (res.Result.IsExpired) {
+ return this.$router.replace('/link_expired')
+ // return this.$confirm(this.$t("trials:researchForm:confirm:linkIsExpired"), '', {
+ // type: 'warning'
+ // })
+ // return this.IsExpired = true
+ }
+ this.customPrompt()
+ }
+ } catch (err) {
+ console.log(err)
+ }
+ },
+ async getLinkVerificationCodeIsEffective(value) {
+ try {
+ let data = {
+ TrialId: this.$route.query.trialId,
+ LinkVerificationCode: value
+ }
+ let res = await getLinkVerificationCodeIsEffective(data)
+ if (res.IsSuccess) {
+ if (!res.Result.IsEffective) {
+ return false
+ }
+ this.verify = false
+ if (this.$route.query.trialId) {
+ this.trialId = this.$route.query.trialId
+ this.initPage()
+ }
+ if (this.$route.query.isUpload) {
+ this.isUpload = true
+ this.form.IsUpdate = true
+ let { email, oldEMail, trialSiteId } = this.$route.query
+ if (trialSiteId) this.form.TrialSiteId = trialSiteId
+ if (oldEMail) this.form.ReplaceUserEmailOrPhone = oldEMail
+ if (email && email !== 'null') {
+ this.form.EmailOrPhone = email
+ } else {
+ this.form.EmailOrPhone = oldEMail
+ }
+ if ((email && email !== 'null') || (oldEMail && oldEMail !== 'null')) {
+ this.isNeedUpload = false
+ }
+ }
+ }
+ return true
+ } catch (err) {
+ return false
+ console.log(err)
+ }
+ },
+ async customPrompt(name) {
+ try {
+ const that = this
+ // 请输入标记名称
+ let message = this.$t('trials:researchForm:message:LinkVerificationCode')
+ const { value } = await this.$prompt(message, '', {
+ showClose: false,
+ cancelButtonText: this.$t('common:button:cancel'),
+ confirmButtonText: this.$t('trials:researchForm:button:saveLinkCode'),
+ showCancelButton: false,
+ closeOnClickModal: false,
+ closeOnPressEscape: false,
+ inputValue: name,
+ beforeClose: async (action, instance, done) => {
+ if (action === 'confirm') {
+ const value = instance.inputValue
+ if (!value) {
+ that.$message.error(this.$t('trials:researchForm:error:noValue'))
+ } else {
+ let flag = await this.getLinkVerificationCodeIsEffective(value)
+ if (!flag) {
+ that.$message.error(this.$t('trials:researchForm:confirm:isEffective'))
+ } else {
+ done()
+ }
+ }
+ } else {
+ done()
+ }
+ }
+ })
+ this.getLinkVerificationCodeIsEffective(value)
+ } catch (err) {
+ console.log(err)
+ return null
+ }
+ },
// 初始化页面
async initPage() {
this.loading = true
@@ -267,8 +357,18 @@ export default {
}
verifySendCode(param).then(async res => {
zzSessionStorage.clear()
- this.$i18n.locale = this.$route.query.lang
- this.setLanguage(this.$route.query.lang)
+ // this.$i18n.locale = this.$route.query.lang
+ // this.setLanguage(this.$route.query.lang)
+ let lang = this.$route.query.lang
+ if (!lang) {
+ const language = navigator.language
+ lang = 'en'
+ if (language.includes("zh")) {
+ lang = 'zh'
+ }
+ }
+ this.$i18n.locale = lang
+ this.setLanguage(lang)
store.dispatch('user/setToken', res.Result.Token)
zzSessionStorage.setItem('TokenKey', res.Result.Token)
zzSessionStorage.setItem('userId', res.Result.UserRoleId);
diff --git a/src/views/system/notice/components/from.vue b/src/views/system/notice/components/from.vue
index 2e90fe43..69fef6b9 100644
--- a/src/views/system/notice/components/from.vue
+++ b/src/views/system/notice/components/from.vue
@@ -4,30 +4,38 @@
{{ $t('trials:researchRecord:label:link') }}
+ {{ $t('trials:researchRecord:label:shareCode') }}
+
{{ $t("trials:adReview:title:subject") }}
@@ -10,14 +14,14 @@
+ "
+ >
+
-
+
@@ -201,21 +351,181 @@
+
+
+
+
+
+
+
+
+
+
+
+
+