Merge branch 'main' into uat_us

uat_us
wangxiaoshuang 2025-02-10 14:18:22 +08:00
commit d7e85aa766
14 changed files with 210 additions and 31 deletions

View File

@ -149,6 +149,7 @@ export default {
return isShow return isShow
}, },
goBack() { goBack() {
zzSessionStorage.removeItem('lastWorkbench')
this.$router.push({ path: '/trials/trials-list' }) this.$router.push({ path: '/trials/trials-list' })
}, },
selectTrials(v) { selectTrials(v) {

View File

@ -92,6 +92,7 @@ export default {
try { try {
if (!this.form.userRoleId) if (!this.form.userRoleId)
return this.$message.warning(this.$t('toggleRole:ruleMessage:select')) return this.$message.warning(this.$t('toggleRole:ruleMessage:select'))
zzSessionStorage.removeItem('lastWorkbench')
this.$emit('save', this.form.userRoleId) this.$emit('save', this.form.userRoleId)
} catch (err) { } catch (err) {
console.log(err) console.log(err)

View File

@ -109,6 +109,15 @@
{{ scope.row.FileName }} {{ scope.row.FileName }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
prop="EnFileName"
label="模板英文名称"
show-overflow-tooltip
>
<template slot-scope="scope">
{{ scope.row.EnFileName }}
</template>
</el-table-column>
<el-table-column <el-table-column
prop="IsEnable" prop="IsEnable"
label="状态" label="状态"
@ -136,10 +145,20 @@
问题配置 问题配置
</el-button> </el-button>
<el-button <el-button
v-if="$i18n.locale === 'zh'"
type="primary" type="primary"
size="mini" size="mini"
:disabled="!scope.row.FileName" :disabled="!scope.row.FileName"
@click="handleDownloadTpl(scope.row)" @click="handleDownloadTpl(scope.row.Path)"
>
下载
</el-button>
<el-button
v-else
type="primary"
size="mini"
:disabled="!scope.row.EnFileName"
@click="handleDownloadTpl(scope.row.EnPath)"
> >
下载 下载
</el-button> </el-button>
@ -258,8 +277,8 @@ export default {
}).catch(() => { this.loading = false }) }).catch(() => { this.loading = false })
}) })
}, },
handleDownloadTpl(row) { handleDownloadTpl(path) {
window.open(this.OSSclientConfig.basePath + row.Path, '_blank') window.open(this.OSSclientConfig.basePath + path, '_blank')
}, },
// //
handleSortByColumn(column) { handleSortByColumn(column) {

View File

@ -113,6 +113,34 @@
</div> </div>
</el-form-item> </el-form-item>
<el-form-item v-if="form.ClinicalUploadType === 1" label="英文模板: ">
<div class="upload-container">
<el-upload
class="upload-demo"
action
accept=".doc,.docx"
:before-upload="beforeUploadEnFile"
:http-request="handleUploadEnFile"
:on-preview="handlePreview"
:on-remove="handleRemoveEnFile"
:show-file-list="true"
:file-list="enFileList"
:limit="1"
:on-exceed="handleExceed"
:disabled="form.Type === ''"
>
<el-button size="small" type="primary">选择</el-button>
<span
slot="tip"
style="margin-left:10px;"
class="el-upload__tip"
>
(必须是doc/docx格式)
</span>
</el-upload>
</div>
</el-form-item>
<el-form-item v-if="form.Id !== ''" label="是否启用"> <el-form-item v-if="form.Id !== ''" label="是否启用">
<el-switch v-model="form.IsEnable" /> <el-switch v-model="form.IsEnable" />
</el-form-item> </el-form-item>
@ -160,6 +188,8 @@ export default {
UploadRole: null, UploadRole: null,
FileName: '', FileName: '',
Path: '', Path: '',
EnFileName: '',
EnPath: '',
IsEnable: true, IsEnable: true,
CriterionEnumList: [] CriterionEnumList: []
}, },
@ -173,6 +203,7 @@ export default {
loading: false, loading: false,
btnLoading: false, btnLoading: false,
fileList: [], fileList: [],
enFileList: [],
systemCriterionSelectList: [] systemCriterionSelectList: []
} }
}, },
@ -195,6 +226,14 @@ export default {
} }
] ]
} }
if (this.data.EnPath) {
this.enFileList = [
{
name: this.data.EnFileName,
path: this.data.EnPath
}
]
}
} }
}, },
save() { save() {
@ -249,6 +288,32 @@ export default {
handleExceed(files, fileList) { handleExceed(files, fileList) {
this.$message.warning(`只允许上传一个文件`) this.$message.warning(`只允许上传一个文件`)
}, },
beforeUploadEnFile(file) {
//
if (this.checkFileSuffix(file.name)) {
this.enFileList = []
return true
} else {
this.$alert('(必须是doc/docx格式)')
return false
}
},
async handleUploadEnFile(param) {
this.loading = true
var fileBlob = await this.fileToBlob(param.file)
const res = await this.OSSclient.put(`/System/ClinicalDataTemplate/${param.file.name}`, fileBlob)
this.form.EnFileName = res.name
this.form.EnPath = this.$getObjectName(res.url)
let file = { name: res.name, path: this.$getObjectName(res.url), url:this.$getObjectName(res.url) }
this.enFileList.push(file)
this.loading = false
},
handleRemoveEnFile() {
this.enFileList = []
this.form.EnPath = ''
this.form.EnFileName = ''
},
checkFileSuffix(fileName) { checkFileSuffix(fileName) {
var typeArr = ['doc', 'docx'] var typeArr = ['doc', 'docx']
var extendName = fileName.substring(fileName.lastIndexOf('.') + 1).toLocaleLowerCase() var extendName = fileName.substring(fileName.lastIndexOf('.') + 1).toLocaleLowerCase()

View File

@ -231,6 +231,7 @@ export default {
this.$store this.$store
.dispatch('user/loginByRole', { userRoleId: this.userRoleId }) .dispatch('user/loginByRole', { userRoleId: this.userRoleId })
.then((res) => { .then((res) => {
zzSessionStorage.removeItem('lastWorkbench')
window.location.reload() window.location.reload()
}) })
.catch(() => { .catch(() => {

View File

@ -194,6 +194,7 @@
</el-table-column> </el-table-column>
<!-- DICOM AE --> <!-- DICOM AE -->
<el-table-column <el-table-column
v-if="isPACSConnect"
prop="CallingAEList" prop="CallingAEList"
:label="$t('trials:sitesList:table:AE')" :label="$t('trials:sitesList:table:AE')"
show-overflow-tooltip show-overflow-tooltip
@ -254,6 +255,7 @@
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
/> />
<el-button <el-button
v-if="isPACSConnect"
circle circle
:title="$t('common:button:config')" :title="$t('common:button:config')"
icon="el-icon-setting" icon="el-icon-setting"
@ -635,6 +637,7 @@ export default {
}, },
trialId: '', trialId: '',
TrialSiteSelectList: [], TrialSiteSelectList: [],
isPACSConnect: false
} }
}, },
mounted() { mounted() {
@ -709,6 +712,7 @@ export default {
this.listLoading = false this.listLoading = false
this.list = res.Result.CurrentPageData this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount this.total = res.Result.TotalCount
this.isPACSConnect = res.OtherInfo.IsPACSConnectAndIsTrialPACSConfirmed
}) })
.catch(() => { .catch(() => {
this.listLoading = false this.listLoading = false

View File

@ -23,11 +23,11 @@
</el-radio> </el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-collapse v-model="activeNames"> <el-collapse v-model="activeNames" style="border-top:none;">
<el-collapse-item <el-collapse-item
v-for="(item, index) of QuestionList" v-for="(item, index) of QuestionList"
:key="item.ReadingQuestionTrialId" :key="item.ReadingQuestionTrialId"
style="position: relative" style="position: relative;padding:0 10px;"
:name="item.ReadingQuestionTrialId" :name="item.ReadingQuestionTrialId"
> >
<div slot="title"> <div slot="title">

View File

@ -145,6 +145,37 @@
</el-upload> </el-upload>
</div> </div>
</el-form-item> </el-form-item>
<!-- 英文模板 -->
<el-form-item
v-if="form.ClinicalUploadType === 1"
:label="$t('trials:processCfg:title:enModule')"
>
<div class="upload-container">
<el-upload
class="upload-demo"
action
accept=".doc,.docx"
:before-upload="beforeUploadEnFile"
:http-request="handleUploadEnFile"
:on-preview="handlePreview"
:on-remove="handleRemoveEnFile"
:show-file-list="true"
:file-list="enFileList"
:limit="1"
:on-exceed="handleExceed"
:disabled="form.Type === ''"
>
<!-- 选择 -->
<el-button size="small" type="primary">{{
$t('trials:processCfg:button:select')
}}</el-button>
<span slot="tip" style="margin-left: 10px" class="el-upload__tip">
<!-- (必须是doc/docx格式) -->
{{ $t('system:tip:file:docx') }}
</span>
</el-upload>
</div>
</el-form-item>
</div> </div>
<div class="base-dialog-footer" style="text-align: right; margin-top: 10px"> <div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
<el-form-item> <el-form-item>
@ -204,6 +235,8 @@ export default {
UploadRole: null, UploadRole: null,
FileName: '', FileName: '',
Path: '', Path: '',
EnFileName: '',
EnPath: '',
TrialCriterionIdList: [], TrialCriterionIdList: [],
}, },
rules: { rules: {
@ -253,6 +286,7 @@ export default {
loading: false, loading: false,
btnLoading: false, btnLoading: false,
fileList: [], fileList: [],
enFileList: [],
trialCriterionSelectList: [], trialCriterionSelectList: [],
criterionList: [], criterionList: [],
} }
@ -287,13 +321,22 @@ export default {
this.form[k] = this.data[k] this.form[k] = this.data[k]
} }
} }
if (!this.data.Path) return if (this.data.Path) {
this.fileList = [ this.fileList = [
{ {
name: this.data.FileName, name: this.data.FileName,
path: this.data.Path, path: this.data.Path,
}, },
] ]
}
if (this.data.EnPath) {
this.enFileList = [
{
name: this.data.EnFileName,
path: this.data.EnPath,
},
]
}
} }
}, },
save() { save() {
@ -356,6 +399,40 @@ export default {
handleExceed(files, fileList) { handleExceed(files, fileList) {
this.$message.warning(this.$t('trials:processCfg:title:onlyOneFile')) // `` this.$message.warning(this.$t('trials:processCfg:title:onlyOneFile')) // ``
}, },
async handleUploadEnFile(param) {
this.loading = true
const file = await this.fileToBlob(param.file)
const res = await this.OSSclient.put(
`/TrialConfig/${this.trialId}/ClinicalData/${param.file.name}`,
file
)
// console.log(res)
const file1 = {
name: param.file.name,
path: this.form.Path,
url: this.$getObjectName(res.url),
}
this.enFileList.push(file1)
this.form.EnPath = this.$getObjectName(res.url)
this.form.EnFileName = param.file.name
this.loading = false
},
beforeUploadEnFile(file) {
//
if (this.checkFileSuffix(file.name)) {
this.enFileList = []
return true
} else {
this.$alert(this.$t('trials:processCfg:title:docFormat')) // '(doc/docx)'
return false
}
},
handleRemoveEnFile() {
this.enFileList = []
this.form.EnPath = ''
this.form.EnFileName = ''
},
checkFileSuffix(fileName) { checkFileSuffix(fileName) {
var typeArr = ['doc', 'docx'] var typeArr = ['doc', 'docx']
var extendName = fileName var extendName = fileName

View File

@ -769,11 +769,18 @@
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 下载 --> <!-- 下载 -->
<el-button <el-button
v-if="scope.row.FileName && scope.row.ClinicalUploadType" v-if="scope.row.FileName && scope.row.ClinicalUploadType && $i18n.locale === 'zh'"
circle circle
:title="$t('common:button:download')" :title="$t('common:button:download')"
icon="el-icon-download" icon="el-icon-download"
@click="handleDownloadTpl(scope.row)" @click="handleDownloadTpl(scope.row.Path)"
>
</el-button>
<el-button
v-if="scope.row.FileName && scope.row.ClinicalUploadType && $i18n.locale === 'en'"
circle
icon="el-icon-download"
@click="handleDownloadTpl(scope.row.EnPath)"
> >
</el-button> </el-button>
<el-button <el-button
@ -1713,8 +1720,8 @@ export default {
}) })
}) })
}, },
handleDownloadTpl(row) { handleDownloadTpl(path) {
window.open(this.OSSclientConfig.basePath + row.Path) window.open(this.OSSclientConfig.basePath + path)
// this.listLoading = true // this.listLoading = true
// DownloadTrialClinicalFile(row.Id).then(data => { // DownloadTrialClinicalFile(row.Id).then(data => {
// this.listLoading = false // this.listLoading = false

View File

@ -5,7 +5,6 @@
:model="form" :model="form"
size="small" size="small"
:rules="rules" :rules="rules"
label-width="110px"
:inline="true" :inline="true"
> >
<div class="base-dialog-body"> <div class="base-dialog-body">
@ -39,7 +38,6 @@
</el-col> </el-col>
</el-form-item> </el-form-item>
<!-- 数据内容:label="$t('trials:readingPeriod:cd:form:data')" --> <!-- 数据内容:label="$t('trials:readingPeriod:cd:form:data')" -->
<el-form-item>
<!-- 多文件上传 --> <!-- 多文件上传 -->
<form id="inputForm" ref="uploadForm"> <form id="inputForm" ref="uploadForm">
<div class="form-group"> <div class="form-group">
@ -52,7 +50,7 @@
display: inline-block; display: inline-block;
" "
> >
<el-button type="primary" style="width: 56px" size="small"> <el-button type="primary" size="small">
{{ $t('trials:uploadClinicalData:button:selectFile') }} {{ $t('trials:uploadClinicalData:button:selectFile') }}
</el-button> </el-button>
<input <input
@ -83,7 +81,7 @@
:data="fileList" :data="fileList"
class="dicomFiles-table" class="dicomFiles-table"
height="300" height="300"
style="width: 100%" style="width: 100%;margin-top:5px;"
border border
> >
<el-table-column type="index" width="40" /> <el-table-column type="index" width="40" />
@ -108,7 +106,7 @@
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="$t('common:action:action')" width="100"> <el-table-column :label="$t('common:action:action')">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 删除 --> <!-- 删除 -->
<el-button <el-button
@ -128,7 +126,6 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item>
</div> </div>
<div class="base-dialog-footer" style="text-align: right; margin-top: 10px"> <div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
<el-form-item> <el-form-item>

View File

@ -93,11 +93,13 @@
<el-table-column <el-table-column
prop="ClinicalDataSetName" prop="ClinicalDataSetName"
:label="$t('trials:readingPeriod:cd:table:clinicalDataName')" :label="$t('trials:readingPeriod:cd:table:clinicalDataName')"
min-width="100"
/> />
<el-table-column <el-table-column
prop="UploadRole" prop="UploadRole"
:label="$t('trials:studyList:table:uploader')" :label="$t('trials:studyList:table:uploader')"
show-overflow-tooltip show-overflow-tooltip
min-width="100"
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd("ClinicalDataUploadRole", scope.row.UploadRole) }} {{ $fd("ClinicalDataUploadRole", scope.row.UploadRole) }}
@ -107,6 +109,7 @@
<el-table-column <el-table-column
prop="ClinicalDataLevel" prop="ClinicalDataLevel"
:label="$t('trials:readingPeriod:cd:table:dataLevel')" :label="$t('trials:readingPeriod:cd:table:dataLevel')"
min-width="100"
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd("ClinicalLevel", scope.row.ClinicalDataLevel) }} {{ $fd("ClinicalLevel", scope.row.ClinicalDataLevel) }}
@ -116,6 +119,7 @@
<el-table-column <el-table-column
prop="ClinicalUploadType" prop="ClinicalUploadType"
:label="$t('trials:readingPeriod:cd:table:transferType')" :label="$t('trials:readingPeriod:cd:table:transferType')"
min-width="120"
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd("ClinicalUploadType", scope.row.ClinicalUploadType) }} {{ $fd("ClinicalUploadType", scope.row.ClinicalUploadType) }}
@ -125,6 +129,7 @@
<el-table-column <el-table-column
prop="FileCount" prop="FileCount"
:label="$t('trials:readingPeriod:cd:table:fileCount')" :label="$t('trials:readingPeriod:cd:table:fileCount')"
min-width="120"
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ {{
@ -247,7 +252,7 @@
:visible.sync="addOrUpdateCD.visible" :visible.sync="addOrUpdateCD.visible"
:close-on-click-modal="false" :close-on-click-modal="false"
:title="addOrUpdateCD.title" :title="addOrUpdateCD.title"
width="500px" width="600px"
append-to-body append-to-body
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
> >
@ -503,7 +508,7 @@
:visible.sync="addOrUpdateCD.visible" :visible.sync="addOrUpdateCD.visible"
:close-on-click-modal="false" :close-on-click-modal="false"
:title="addOrUpdateCD.title" :title="addOrUpdateCD.title"
width="500px" width="600px"
append-to-body append-to-body
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
> >

View File

@ -136,7 +136,6 @@
:prop="`Plan${i-1}`" :prop="`Plan${i-1}`"
label="" label=""
width="240" width="240"
show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="i<=scope.row.Data.length"> <div v-if="i<=scope.row.Data.length">
@ -162,7 +161,7 @@
</div> </div>
<div style="display: flex;justify-content: space-between;border-bottom: 1px solid #d9d9d9;margin-bottom: 8px;padding-bottom: 8px"> <div style="display: flex;justify-content: space-between;border-bottom: 1px solid #d9d9d9;margin-bottom: 8px;padding-bottom: 8px">
<div>{{ $fd('ModuleTypeEnum',scope.row.Data[i-1].ModuleType) }}</div> <div>{{ $fd('ModuleTypeEnum',scope.row.Data[i-1].ModuleType) }}</div>
<div style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width: 110px;text-align: right;"> <div style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width: 110px;text-align: right;" :title="$fd('ReadModuleEnum',scope.row.Data[i-1].ReadingStatus)">
{{ $fd('ReadModuleEnum',scope.row.Data[i-1].ReadingStatus) }} {{ $fd('ReadModuleEnum',scope.row.Data[i-1].ReadingStatus) }}
</div> </div>
</div> </div>
@ -322,6 +321,7 @@
:visible.sync="clinicalDataVisible" :visible.sync="clinicalDataVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
append-to-body append-to-body
width="70%"
> >
<ClinicalData :trial-reading-criterion-id="TrialReadingCriterionId" :trial-id="trialId" :data="currentData" @getList="getList"/> <ClinicalData :trial-reading-criterion-id="TrialReadingCriterionId" :trial-id="trialId" :data="currentData" @getList="getList"/>
</el-dialog> </el-dialog>

View File

@ -154,21 +154,23 @@
v-else-if="scope.row.CheckChallengeState === 1" v-else-if="scope.row.CheckChallengeState === 1"
type="danger" type="danger"
> >
{{ {{ $fd('CheckChallengeState', 1) }}
<!-- {{
userTypeEnumInt === 2 userTypeEnumInt === 2
? $fd('CheckChallengeState', 1) ? $fd('CheckChallengeState', 1)
: $fd('CheckChallengeState', 2) : $fd('CheckChallengeState', 2)
}} }} -->
</el-tag> </el-tag>
<el-tag <el-tag
v-else-if="scope.row.CheckChallengeState === 2" v-else-if="scope.row.CheckChallengeState === 2"
type="danger" type="danger"
> >
{{ {{ $fd('CheckChallengeState', 2) }}
<!-- {{
userTypeEnumInt === 2 userTypeEnumInt === 2
? $fd('CheckChallengeState', 2) ? $fd('CheckChallengeState', 2)
: $fd('CheckChallengeState', 1) : $fd('CheckChallengeState', 1)
}} }} -->
</el-tag> </el-tag>
<el-tag v-else-if="scope.row.CheckChallengeState === 3">{{ <el-tag v-else-if="scope.row.CheckChallengeState === 3">{{
$fd('CheckChallengeState', scope.row.CheckChallengeState) $fd('CheckChallengeState', scope.row.CheckChallengeState)

View File

@ -1459,7 +1459,7 @@ export default {
</div>` </div>`
this.$alert( this.$alert(
content, content,
this.$t('trials:uploadDicomList:label:prompt'), '',
{ {
confirmButtonText: this.$t( confirmButtonText: this.$t(
'trials:uploadDicomList:label:confirm' 'trials:uploadDicomList:label:confirm'