-
+
暂无数据
-
-
![]()
+
+
{{ `${index + 1}` }}
@@ -59,13 +32,7 @@
-
+
@@ -93,6 +60,10 @@ export default {
type: Number,
default: null,
},
+ currentFileId: {
+ type: String,
+ default: ''
+ },
previewImage: {
type: Object,
default: () => {
@@ -167,7 +138,7 @@ export default {
const scope = this
window.onresize = function () {
scope.pageSize = scope.wrapperWidth() / scope.itemWidth
- scope.selected(scope.currentIndex)
+ scope.selected(scope.currentFileId)
}
},
methods: {
@@ -185,7 +156,8 @@ export default {
this.translateX = maxTrans
}
},
- selected(index) {
+ selected(id) {
+ let index = this.previewImage.imgList.findIndex(item => item.Id === id)
const center = this.pageSize >> 1
// 最后一页的中间位置
const lastCenter = this.dataLength - center
@@ -202,7 +174,7 @@ export default {
if (this.currentIndex !== index) {
this.currentIndex = index
}
- this.$emit('selectedImg', index)
+ this.$emit('selectedImg', id)
},
wrapperWidth() {
if (this.$refs.imagesWrapper) {
@@ -224,25 +196,30 @@ export default {
.image-viewer-wrapper {
flex: 1;
}
+
.thumbnail-wrapper {
height: 130px;
}
+
.img-content {
position: absolute;
left: 0;
bottom: 10px;
width: 100%;
}
+
.img-wrapper {
display: flex;
position: relative;
margin: 0 20px;
height: 120px;
+
.to {
width: 32px;
height: 100%;
padding: 0;
}
+
.images::before {
position: absolute;
z-index: 5;
@@ -251,16 +228,15 @@ export default {
width: 84px;
content: '';
pointer-events: none;
- background: -webkit-gradient(
- linear,
- left top,
- right top,
- from(#fff),
- color-stop(50%, rgba(0, 0, 0, 0))
- );
+ background: -webkit-gradient(linear,
+ left top,
+ right top,
+ from(#fff),
+ color-stop(50%, rgba(0, 0, 0, 0)));
background: -o-linear-gradient(left, #fff, rgba(0, 0, 0, 0) 50%);
background: linear-gradient(90deg, #fff, rgba(0, 0, 0, 0) 50%);
}
+
.images::after {
position: absolute;
z-index: 5;
@@ -270,22 +246,22 @@ export default {
width: 84px;
content: '';
pointer-events: none;
- background: -webkit-gradient(
- linear,
- right top,
- left top,
- from(#fff),
- color-stop(50%, rgba(0, 0, 0, 0))
- );
+ background: -webkit-gradient(linear,
+ right top,
+ left top,
+ from(#fff),
+ color-stop(50%, rgba(0, 0, 0, 0)));
background: -o-linear-gradient(right, #fff, rgba(0, 0, 0, 0) 50%);
background: linear-gradient(270deg, #fff, rgba(0, 0, 0, 0) 50%);
}
+
.images {
position: relative;
overflow: hidden;
width: 100%;
height: 100%;
margin: 0 2px;
+
.empty-text {
color: rgb(158, 158, 158);
height: 100%;
@@ -293,6 +269,7 @@ export default {
align-items: center;
justify-content: center;
}
+
.items {
position: absolute;
top: 0;
@@ -302,6 +279,7 @@ export default {
height: 100%;
align-items: center;
transition: transform 0.25s ease;
+
.item-img {
display: inline-block;
box-sizing: border-box;
@@ -309,6 +287,7 @@ export default {
margin-right: 8px;
border: 2px solid rgba(0, 0, 0, 0);
cursor: pointer;
+
.item-date {
bottom: 0px;
position: absolute;
@@ -319,15 +298,18 @@ export default {
line-height: 24px;
color: white;
}
+
img {
width: 100%;
height: 100%;
}
}
+
.item-img:hover::after {
// border-color: #409EFF;
opacity: 0;
}
+
.item-img::after {
position: absolute;
top: 0;
@@ -342,9 +324,11 @@ export default {
transition: opacity 0.3s ease;
background-color: #fff;
}
+
.is-active {
border-color: #409eff;
}
+
.is-active:after {
opacity: 0;
}
diff --git a/src/views/none-dicom-show/index.vue b/src/views/none-dicom-show/index.vue
index ec4b07c0..e567c054 100644
--- a/src/views/none-dicom-show/index.vue
+++ b/src/views/none-dicom-show/index.vue
@@ -1,7 +1,13 @@
-
+
+
+
+
+
{{ $t('trials:none-dicom-show:fileList') }}
@@ -43,6 +49,9 @@
+
{{ `${j + 1}. ${item.FileName}` }}
@@ -77,7 +86,8 @@
+ :preview-image="previewImage" :value="currentStudyFileIndex" @selectedImg="selectedImg"
+ :currentFileId="currentFileId" />
@@ -95,9 +105,11 @@ import { getNoneDicomStudyList, setNodicomStudyState } from '@/api/trials'
import store from '@/store'
import pdf from '@/assets/pdf.png'
import zip from '@/assets/zip.jpg'
+import mp4 from '@/assets/mp4.png'
import { changeURLStatic } from '@/utils/history.js'
import Preview from './components/preview'
import PreviewFile from '@/components/PreviewFile'
+import FileNameSorter from "@/utils/customSort";
// import CheckForm from './components/form'
export default {
name: 'Notice',
@@ -110,6 +122,7 @@ export default {
return {
pdf,
zip,
+ mp4,
activeName: 'first',
currentFileId: '',
currentStudyIndex: 0,
@@ -140,6 +153,7 @@ export default {
isAudit: false,
activeNames: [],
+ Asc: false
}
},
async created() {
@@ -156,7 +170,30 @@ export default {
this.getNoneDicomList()
// 默认选择第一个文件
},
+ computed: {
+ CriterionType() {
+ return this.OtherInfo.CriterionType ? this.OtherInfo.CriterionType : 0
+ }
+ },
methods: {
+ sortFile() {
+ if (this.Asc) {
+ this.Asc = false
+ } else {
+ this.Asc = true
+ }
+ console.log(this.Asc, 'this.Asc')
+ this.studyList.forEach(study => {
+ if (study.NoneDicomStudyFileList.length > 0) {
+ study.NoneDicomStudyFileList = FileNameSorter.sortFileNames(study.NoneDicomStudyFileList, {
+ direction: this.Asc ? 'asc' : 'desc',
+ key: 'FileName'
+ })
+ }
+ })
+ this.previewImage.imgList = this.studyList[this.currentStudyIndex].NoneDicomStudyFileList
+ this.previewImage.index = this.studyList[this.currentStudyIndex].NoneDicomStudyFileList.findIndex(item => item.Id === this.currentFileId)
+ },
handleChange() { },
changeReadingStatus(callback, row, file) {
let statusStr = ''
@@ -278,7 +315,8 @@ export default {
this.studyId,
false,
this.$route.query.visitTaskId,
- !!this.$route.query.isReading
+ !!this.$route.query.isReading,
+ this.$route.query.isImageSegmentLabel,
)
.then((res) => {
this.studyList = res.Result
@@ -289,11 +327,13 @@ export default {
return item.NoneDicomStudyFileList.length > 0
})
this.activeNames = this.studyList.map((item) => item.CodeView)
- console.log(this.activeNames)
if (studyIndex > -1) {
var fileObj = this.studyList[studyIndex]['NoneDicomStudyFileList']
this.selected(fileObj[0], studyIndex, 0, true)
}
+ if (this.CriterionType === 19 || this.CriterionType === 20) {
+ this.sortFile()
+ }
})
.catch(() => {
this.loading = false
@@ -306,10 +346,15 @@ export default {
this.pdfFile.type = 'pdf'
this.showPDF = true
return true
+ } else if (!!~file.FileType.indexOf('mp4')) {
+ this.pdfFile.path = file.Path || file.FullFilePath
+ this.pdfFile.type = file.FileType
+ this.showPDF = true
+ return true
} else {
this.showPDF = false
}
-
+ console.log(this.pdfFile)
this.currentStudyIndex = studyIndex
this.previewImage.imgList =
this.studyList[studyIndex].NoneDicomStudyFileList
@@ -320,12 +365,13 @@ export default {
this.previewImage.modality = this.studyList[studyIndex].Modality
this.$nextTick(() => {
if (isChangeSub) {
- this.$refs['previewImage'].selected(fileIndex)
+ this.$refs['previewImage'].selected(this.currentFileId)
}
})
},
- selectedImg(fileIndex) {
+ selectedImg(id) {
if (this.studyList.length > 0) {
+ let fileIndex = this.studyList[this.currentStudyIndex].NoneDicomStudyFileList.findIndex(item => item.Id === id)
this.currentStudyFileIndex = fileIndex
this.currentFileId =
this.studyList[this.currentStudyIndex].NoneDicomStudyFileList[
@@ -353,6 +399,10 @@ export default {
diff --git a/src/views/reviewers/curriculumVitae/components/info/clinicalTrials.vue b/src/views/reviewers/curriculumVitae/components/info/clinicalTrials.vue
index 80864609..1f6f3984 100644
--- a/src/views/reviewers/curriculumVitae/components/info/clinicalTrials.vue
+++ b/src/views/reviewers/curriculumVitae/components/info/clinicalTrials.vue
@@ -79,10 +79,7 @@
+
-
+
+
-
+
+
-
+
+
-
+
+
-
+
+
-
+
+
-
+
+
-
+
+
-
+
@@ -167,38 +125,19 @@
-
+
-
+
-
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{Array.isArray(scope.row.RecipientList) && scope.row.RecipientList.length > 0
+ ? scope.row.RecipientList.filter(item => item.RecipientTypeEnum === 0).map(item =>
+ item.RecipientName).join(", ") : ''
+ }}
+
+
+
+
+
+
+ {{Array.isArray(scope.row.RecipientList) && scope.row.RecipientList.length > 0
+ ? scope.row.RecipientList.filter(item => item.RecipientTypeEnum === 1).map(item =>
+ item.RecipientName).join(", ") : ''
+ }}
+
+
+
+
+
+
+ {{ $fd("EmailState",
+ scope.row.EmailStateEnum) }}
+
+
+
+
+
+
+ {{ $t('common:button:view') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/email/index.vue b/src/views/system/email/index.vue
new file mode 100644
index 00000000..a2c69f09
--- /dev/null
+++ b/src/views/system/email/index.vue
@@ -0,0 +1,298 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+ {{ $t('system:email:button:sync') }}
+
+
+
+
+
+
+
+
+
+
+ {{Array.isArray(scope.row.RecipientList) && scope.row.RecipientList.length > 0
+ ? scope.row.RecipientList.filter(item => item.RecipientTypeEnum === 0).map(item =>
+ item.RecipientName).join(", ") : ''
+ }}
+
+
+
+
+
+
+ {{Array.isArray(scope.row.RecipientList) && scope.row.RecipientList.length > 0
+ ? scope.row.RecipientList.filter(item => item.RecipientTypeEnum === 1).map(item =>
+ item.RecipientName).join(", ") : ''
+ }}
+
+
+
+
+
+
+ {{ $fd("EmailState",
+ scope.row.EmailStateEnum) }}
+
+
+
+
+
+
+ {{ $t('common:button:view') }}
+
+
+ {{ $t('system:email:button:resendEmail') }}
+
+
+ {{ $t('system:email:button:resendEmailList') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/login-log/detail.vue b/src/views/system/login-log/detail.vue
index 162e1710..61c664f7 100644
--- a/src/views/system/login-log/detail.vue
+++ b/src/views/system/login-log/detail.vue
@@ -2,26 +2,18 @@
-
-
+
+
- {{
+ {{
+ $t('dictionary:agreement:button:view')
+ }}
+ {{
scope.row.value
}}
-
+
{{ item.UserTypeShortName
}}{{ $t('system:loginLog:form:symbol')
}}{{ $fd('IsEnable', !item.IsUserRoleDisabled) }}
@@ -74,7 +66,11 @@ export default {
'PositionName',
'DepartmentName',
'UserRoleList',
+ 'UserAgreementTypeEnum',
+ 'FileVersion',
+ 'UserAgreementId',
],
+ IsEn_Us: false
}
},
computed: {
@@ -87,6 +83,7 @@ export default {
let obj = JSON.parse(this.JsonObj)
let curData = []
Object.keys(obj).forEach((key) => {
+ if (key === 'IsEn_Us') this.IsEn_Us = obj[key]
if (this.curKeys.includes(key)) {
let o = {
key: this.$t(`system:loginLog:form:${key}`),
@@ -96,12 +93,23 @@ export default {
if (key === 'Status') {
o.value = this.$fd('IsUserEnable', obj[key])
}
+ if (key === 'UserAgreementTypeEnum') {
+ o.value = this.$fd('UserAgreementType', obj[key])
+ }
curData.push(o)
}
})
return curData
},
},
+ methods: {
+ view(row) {
+ this.$AGR({
+ Id: row.value,
+ IsEn_Us: this.IsEn_Us
+ })
+ },
+ }
}
-
diff --git a/src/views/trials/trials-panel/attachments/site-research/components/ImageManual.vue b/src/views/trials/trials-panel/attachments/site-research/components/ImageManual.vue
new file mode 100644
index 00000000..38bed5ab
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/site-research/components/ImageManual.vue
@@ -0,0 +1,230 @@
+
+
+
+
+ {{ $t("trials:researchRecord:ImageManual:BasicQuestion") }}
+
+
+
+
+ {{ $t('trials:researchForm:form:engravingCycle') }}
+
+
+
+ handleChange(val, 'IsConfirmImagingTechnologist')">
+ {{ $t('trials:researchForm:form:isQualified') }}
+
+
+
+
+ {{ $t('trials:researchForm:form:staffType') }}
+
+
+
+ handleChange(val, 'IsFollowStudyParameters')">
+
+
+
+
+
+ {{ $t("trials:researchRecord:ImageManual:TableConfiguration") }}
+
+
+
+
+ {{ item.label
+ }}
+
+
+
+
+ {{ $t("trials:researchRecord:ImageManual:Precautions") }}
+
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/site-research/index.vue b/src/views/trials/trials-panel/attachments/site-research/index.vue
index cd45126a..07b03083 100644
--- a/src/views/trials/trials-panel/attachments/site-research/index.vue
+++ b/src/views/trials/trials-panel/attachments/site-research/index.vue
@@ -5,127 +5,62 @@
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
{{ $t('common:button:search') }}
-
+
{{ $t('common:button:reset') }}
-
+
{{ $t('trials:researchRecord:button:questionStaffs') }}
-
+
{{ $t('trials:researchRecord:button:questionLink') }}
@@ -133,61 +68,27 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
{{
scope.row.PreliminaryUser
@@ -197,24 +98,15 @@
-
+
{{ scope.row.ReviewerUser ? scope.row.ReviewerUser.RealName : '' }}
-
+
{{
$fd('ResearchRecord', scope.row.State)
@@ -231,13 +123,8 @@
-
+
{{
$fd('YesOrNo', scope.row.IsDeleted)
@@ -248,88 +135,59 @@
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
+
+
+
+ {{
+ $t('trials:researchRecord:label:edit')
+ }}
{{ $t('trials:researchRecord:label:link') }}
-
+
-
+
{{ $t('trials:researchRecord:button:copyLink') }}
@@ -391,6 +238,7 @@ import Pagination from '@/components/Pagination'
import Users from './components/users'
import ResearchForm from '@/views/research/form'
import BaseModel from '@/components/BaseModel'
+import ImageManual from './components/ImageManual'
import QRCode from 'qrcodejs2'
const searchDataDefault = () => {
@@ -410,7 +258,7 @@ const searchDataDefault = () => {
}
export default {
name: 'SiteResearchList',
- components: { BaseContainer, Pagination, Users, ResearchForm, BaseModel },
+ components: { BaseContainer, Pagination, Users, ResearchForm, BaseModel, ImageManual },
data() {
return {
searchData: searchDataDefault(),
@@ -429,6 +277,9 @@ export default {
shareLink: '',
researchState: this.$d.ResearchRecord,
qrcode: null,
+
+ ImageManualVisible: false,
+ trialSiteSurveyId: null
}
},
mounted() {
@@ -436,6 +287,10 @@ export default {
this.getSite()
},
methods: {
+ openImageManual() {
+ // if (!this.trialSiteSurveyId) return false
+ this.ImageManualVisible = true
+ },
// 获取系统文件数据
getList() {
this.loading = true
@@ -488,8 +343,7 @@ export default {
copyLink() {
// 中心调研表链接
this.$copyText(
- `${this.$t('trials:researchRecord:message:researchFormLink')}: ${
- this.shareLink
+ `${this.$t('trials:researchRecord:message:researchFormLink')}: ${this.shareLink
}`
)
.then((res) => {
@@ -564,6 +418,7 @@ export default {
const trialId = this.trialId
this.shareLink = `${location.protocol}//${location.host}/researchLogin?trialId=${trialId}&lang=${this.$i18n.locale}`
this.share_model.visible = true
+ // this.trialSiteSurveyId = this.list[0].Id
this.$nextTick(() => {
this.creatQrCode()
})
@@ -611,18 +466,21 @@ export default {
padding-right: 20px;
width: 50%;
position: relative;
+
.shareLinkBtn {
position: absolute;
bottom: 0px;
left: 0px;
}
}
+
.shareCode {
width: 50%;
border-left: 1px solid #eee;
display: flex;
justify-content: center;
flex-wrap: wrap;
+
.qrCode {
width: 220px;
height: 220px;
@@ -633,6 +491,7 @@ export default {
align-items: center;
justify-content: center;
}
+
.codeBtnBox {
margin-top: 20px;
width: 100%;
diff --git a/src/views/trials/trials-panel/enrolled-reviewers/list/index.vue b/src/views/trials/trials-panel/enrolled-reviewers/list/index.vue
index 67fecb88..a9144060 100644
--- a/src/views/trials/trials-panel/enrolled-reviewers/list/index.vue
+++ b/src/views/trials/trials-panel/enrolled-reviewers/list/index.vue
@@ -21,7 +21,7 @@
{{ scope.row.LastName }} / {{ scope.row.FirstName }}
@@ -137,7 +137,8 @@
)
}).StatementCriterionFileList.length > 0
">
-
View
+
View
@@ -167,7 +168,8 @@
)
}).AcknowledgementCriterionFileList.length > 0
">
-
+
View
@@ -469,10 +471,10 @@ export default {
},
methods: {
// 预览
- preview(row, TrialReadingCriterionId) {
+ preview(row, TrialReadingCriterionId, key) {
let file = row.CriterionCategoryList.find((v) => {
return v.TrialReadingCriterionId === TrialReadingCriterionId
- }).StatementCriterionFileList[0]
+ })[key][0]
let arr = file.FilePath.split('.')
this.$preview({
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/AdditionalAssessment.vue b/src/views/trials/trials-panel/reading/dicoms/components/AdditionalAssessment.vue
index e342b6f4..8725c252 100644
--- a/src/views/trials/trials-panel/reading/dicoms/components/AdditionalAssessment.vue
+++ b/src/views/trials/trials-panel/reading/dicoms/components/AdditionalAssessment.vue
@@ -1,10 +1,5 @@
-
+