caiyiling 2024-04-24 09:52:18 +08:00
commit 5fe8fdedbf
17 changed files with 699 additions and 147 deletions

View File

@ -170,3 +170,12 @@ export function downLoadReadReport(data) {
data
})
}
// 预览阅片报告
export function showReadReport(data) {
return request({
url: `/ReadingImageTask/downLoadReadReport`,
method: 'post',
responseType: 'blob',
data
})
}

View File

@ -3558,24 +3558,42 @@ export function getSystemConfirmedCreiterionList() {
})
}
// 获取项目授权
export function getTrialAuthorizationCode(params) {
// 获取项目授权信息
export function getTrialAuthorizationInfo(params) {
return request({
url: `/Patient/getTrialAuthorizationCode`,
url: `/Patient/getTrialAuthorizationInfo`,
method: 'get',
params
})
}
// 获取项目激活码
export function getTrialActivationCode(params) {
// 获取激活码信息
export function getActivationCodeInfo(params) {
return request({
url: `/Patient/getTrialActivationCode`,
url: `/Patient/getActivationCodeInfo`,
method: 'get',
params
})
}
// 获取项目授权码
export function getTrialAuthorizationCode(data) {
return request({
url: `/Patient/getTrialAuthorizationCode`,
method: 'post',
data
})
}
// 获取项目激活码
export function getTrialActivationCode(data) {
return request({
url: `/Patient/getTrialActivationCode`,
method: 'post',
data
})
}
// 设置项目授权信息
export function activateTrial(params) {
return request({
@ -3583,4 +3601,13 @@ export function activateTrial(params) {
method: 'put',
params
})
}
// 获取项目授权码信息
export function getAuthorizationCodeInfo(params) {
return request({
url: `/Patient/getAuthorizationCodeInfo`,
method: 'get',
params
})
}

View File

@ -9,7 +9,7 @@
/>
<!-- <embed v-else-if="fileType.indexOf('pdf') !== -1" :src="filePath+'#toolbar=0'" style="width: 100%; height: 100%"> -->
<!-- <iframe v-else-if="fileType.indexOf('pdf') !== -1" :src="filePath+'#toolbar=0'" width="100%" height="100%" frameborder="0" /> -->
<iframe v-else-if="fileType.indexOf('pdf') !== -1" :src="`/static/pdfjs/web/viewer.html?file=${OSSclientConfig.basePath}${filePath}?userName=${currentUser}`" width="100%" height="100%" frameborder="0" />
<iframe v-else-if="fileType.indexOf('pdf') !== -1" :src="isLocal?`/static/pdfjs/web/viewer.html?file=${filePath}`:`/static/pdfjs/web/viewer.html?file=${OSSclientConfig.basePath}${filePath}?userName=${currentUser}`" width="100%" height="100%" frameborder="0" />
<!-- <pdf-->
<!-- v-else-if="fileType.indexOf('pdf') !== -1"-->
<!-- :src="`/static/pdfjs/web/viewer.html?file=${filePath}`">-->
@ -36,6 +36,10 @@ export default {
fileType: {
type: String,
required: true
},
isLocal:{
type: Boolean,
default:false
}
},
data() {

View File

@ -0,0 +1,47 @@
<template>
<el-dialog
:visible.sync="visible"
:title="fileData.name"
:fullscreen="true"
append-to-body
custom-class="base-dialog-wrapper"
:before-close="close"
>
<div class="base-modal-body" style="border: 2px solid #ccc; padding: 10px">
<PreviewFile
v-if="visible"
:file-path="fileData.path"
:file-type="fileData.name"
:isLocal="true"
/>
</div>
</el-dialog>
</template>
<script>
import PreviewFile from "@/components/PreviewFile/index";
export default {
name: "PreviewFileDialog",
components: { PreviewFile },
props: {
fileData: {
required: true,
type: Object,
default: () => {
return {};
},
},
visible: {
required: true,
type: Boolean,
default: false,
},
},
methods: {
close() {
this.$emit("update:visible", false);
},
},
};
</script>
<style lang="scss" scoped>
</style>

View File

@ -10,7 +10,7 @@ import { OSSclient } from './utils/oss'
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']
const whiteList = ['/activate','/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) => {
NProgress.start()

View File

@ -221,6 +221,11 @@ export const constantRoutes = [
hidden: true,
component: () => import('@/views/trials/trials-panel/setting/reading-unit/preview')
},
{
path: '/activate',
component: () => import('@/views/trials/trials-list/components/activate-page.vue'),
hidden: true
},
// {
// path: '/audit',
// name: 'audit',

View File

@ -5,7 +5,10 @@ import Vue from 'vue';
import {
getSubjectImageZipInfo,
} from "@/api/trials/visit.js";
let flag = false;
export const downloadImage = async (id, id2) => {
if (flag) return
flag = true
try {
let res = await getSubjectImageZipInfo(id, id2);
if (res.IsSuccess) {
@ -74,6 +77,7 @@ const setfolder = async (item) => {
})
.then((res) => {
saveAs(res, zipName + ".zip"); // 使用FileSaver.saveAs保存文件文件名可自定义
flag = false;
zipObj = null;
});
})
@ -103,4 +107,14 @@ const getFileData = (fileUrl) => {
reject(error);
});
});
};
export const fileDownload = (content, filename) => {
const eleLink = document.createElement("a");
eleLink.download = filename;
eleLink.style.display = "none";
const blob = new Blob([content]);
eleLink.href = URL.createObjectURL(blob);
document.body.appendChild(eleLink);
eleLink.click();
document.body.removeChild(eleLink);
};

View File

@ -25,8 +25,8 @@
>
<el-select v-model="searchData.NoticeTypeEnum" clearable size="small">
<el-option
v-for="item of $d.NoteType"
:key="item.value"
v-for="item of $d.TrialType"
:key="item.id"
:label="item.label"
:value="item.value"
/>
@ -60,10 +60,10 @@
size="small"
>
<el-option
v-for="item of roleList"
v-for="item of $d.UserType"
:key="item.Id"
:label="item.UserTypeShortName"
:value="item.Id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>

View File

@ -197,7 +197,7 @@ export default {
UserName: "",
LastName: "",
FirstName: "",
Sex: "",
Sex: "9",
EMail: "",
Phone: "",
UserTypeId: "",

View File

@ -39,6 +39,13 @@
</el-form-item>
</el-row>
<el-row>
<!-- 研究方案号 -->
<el-form-item
:label="$t('trials:trials-list:form:researchNumber')"
prop="ResearchProgramNo"
>
<el-input v-model="trialForm.ResearchProgramNo" clearable />
</el-form-item>
<!-- 研究名称 -->
<el-form-item
:label="$t('trials:trials-list:table:researchName')"
@ -51,21 +58,11 @@
clearable
/>
</el-form-item>
<!-- 研究方案号 -->
<el-form-item
:label="$t('trials:trials-list:form:researchNumber')"
prop="ResearchProgramNo"
>
<el-input v-model="trialForm.ResearchProgramNo" clearable />
</el-form-item>
</el-row>
<el-row>
<!-- 研究者 -->
<el-form-item
:label="$t('trials:trials-list:form:investigator')"
prop="HeadPI"
>
<el-input v-model="trialForm.HeadPI" clearable />
<!-- 药物/器械名称 -->
<el-form-item :label="$t('trials:trials-list:message:D/Dname')">
<el-input v-model="trialForm.MedicineName" clearable />
</el-form-item>
<!-- 申办方 -->
<el-form-item
@ -76,16 +73,13 @@
</el-form-item>
</el-row>
<el-row>
<!-- CRO -->
<el-form-item :label="$t('trials:trials-list:form:cro')" prop="Cro">
<el-input v-model="trialForm.CRO" maxlength="200" clearable />
<!-- 研究者 -->
<el-form-item
:label="$t('trials:trials-list:form:investigator')"
prop="HeadPI"
>
<el-input v-model="trialForm.HeadPI" clearable />
</el-form-item>
<!-- 药物/器械名称 -->
<el-form-item :label="$t('trials:trials-list:message:D/Dname')">
<el-input v-model="trialForm.MedicineName" clearable />
</el-form-item>
</el-row>
<el-row>
<!-- 临床分期 -->
<el-form-item :label="$t('trials:trials-list:form:phase')" prop="PhaseId">
<el-select
@ -101,29 +95,23 @@
/>
</el-select>
</el-form-item>
</el-row>
<el-row>
<!-- 适应症 -->
<el-form-item :label="$t('trials:trials-list:form:indication')">
<el-input v-model="trialForm.Indication" clearable />
</el-form-item>
</el-row>
<el-row>
<!-- 检查技术 -->
<el-form-item :label="$t('trials:trials-list:form:modality')">
<el-select v-model="trialForm.ModalityIds" multiple clearable>
<el-option
v-for="item of $d.Modality"
:key="item.id"
:label="item.label"
:value="item.id"
/>
</el-select>
</el-form-item>
<!-- 阅片标准 -->
<el-form-item
:label="$t('trials:trials-list:form:criterion')"
prop="CriterionTypeList"
>
<el-select v-model="trialForm.CriterionTypeList" multiple clearable>
<el-select
v-model="trialForm.CriterionTypeList"
multiple
clearable
:disabled="trialForm.Id !== ''"
>
<el-option
v-for="item of CriterionTypeList"
:key="item.Id"
@ -134,19 +122,25 @@
</el-form-item>
</el-row>
<el-row>
<!-- CRO -->
<el-form-item :label="$t('trials:trials-list:form:cro')" prop="Cro">
<el-input v-model="trialForm.CRO" maxlength="200" clearable />
</el-form-item>
<!-- 联系人 -->
<el-form-item :label="$t('trials:researchForm:form:contactor')">
<el-input v-model="trialForm.ContactUser" clearable />
</el-form-item>
</el-row>
<el-row>
<!-- 电话 -->
<el-form-item :label="$t('trials:trials-myinfo:form:phone')">
<el-input v-model="trialForm.ContactPhone" type="number" clearable />
</el-form-item>
</el-row>
<el-row>
<!-- 授权时长 -->
<!-- 项目周期 -->
<el-form-item
:label="$t('trials:trials-list:table:durationAuthorized')"
:label="$t('trials:trials-list:form:projectCycle')"
prop="AuthorizationDuration"
>
<div style="position: relative">
@ -154,11 +148,12 @@
v-model="trialForm.AuthorizationDuration"
type="number"
clearable
:max="200"
:min="0"
/>
<span style="position: absolute; right: -20px; top: 0"></span>
</div>
</el-form-item>
<!-- 授权时间 -->
<!-- 到期日 -->
<el-form-item
:label="$t('trials:trials-list:table:dateAuthorized')"
prop="visitNumberAuthorized"
@ -167,41 +162,12 @@
v-model="trialForm.AuthorizationDate"
value-format="yyyy-MM-dd"
type="date"
placeholder="选择日期"
placeholder=""
disabled
>
</el-date-picker>
</el-form-item>
<!-- 授权访视量 -->
<!-- <el-form-item
:label="$t('trials:trials-list:table:visitNumberAuthorized')"
prop="visitNumberAuthorized"
>
<el-input
v-model="trialForm.visitNumberAuthorized"
type="number"
disabled
/>
</el-form-item> -->
</el-row>
<el-row>
<!--项目授权码-->
<!-- <el-form-item :label="$t('trials:trials-list:form:authorizationCode')">
<el-input v-model="trialForm.authorizationCode" />
</el-form-item> -->
</el-row>
<el-row>
<!-- Timepoints Per Patient -->
<!-- <el-form-item :label="$t('trials:trials-list:form:timePointsPerPatient')">
<el-input-number
v-model="trialForm.TimePointsPerPatient"
controls-position="right"
:min="0"
@change="handleTpPerPatientChange"
/>
</el-form-item> -->
</el-row>
<el-row> </el-row>
<el-row> </el-row>
<el-row style="margin-left: 190px">
<el-form-item label="">
<el-button type="primary" :disabled="btnLoading" @click="handleCancel">

View File

@ -0,0 +1,224 @@
<template>
<el-form
ref="activateProjectForm"
:model="form"
size="small"
label-width="120px"
style="width: 500px; padding: 30px 0 0 30px"
>
<div class="base-dialog-body">
<p>授权申请信息</p>
<!-- 购买时长 -->
<el-form-item label="项目码">
<el-input v-model="data.AuthorizationCode" />
<input
type="file"
id="uploadFile"
ref="uploadFile"
@change="fileChange"
style="display: none"
/>
<label for="uploadFile" class="copy">上传</label>
</el-form-item>
<!-- 单位名称 -->
<el-form-item :label="$t('trials:trials-list:activate:organizationName')">
<span>{{ data.HospitalName }}</span>
</el-form-item>
<!-- 项目编号 -->
<el-form-item :label="$t('trials:trials-list:table:trialId')">
<span>{{ data.TrialCode }}</span>
</el-form-item>
<!-- 评估标准 -->
<el-form-item
:label="$t('trials:trials-list:activate:evaluationCriteria')"
>
<span
>{{
data.CriterionTypeList.map((item) =>
$fd("CriterionType", Number(item))
).join(",")
}}
</span>
</el-form-item>
<!-- 购买时长 -->
<el-form-item :label="$t('trials:trials-list:activate:purchaseDuration')">
<span>{{ data.PurchaseDuration }}</span>
</el-form-item>
<p>生成激活码信息</p>
<!-- 单位名称 -->
<el-form-item :label="$t('trials:trials-list:activate:organizationName')">
<span>{{ data.HospitalName }}</span>
</el-form-item>
<!-- 项目编号 -->
<el-form-item :label="$t('trials:trials-list:table:trialId')">
<span>{{ data.TrialCode }}</span>
</el-form-item>
<!-- 评估标准 -->
<el-form-item
:label="$t('trials:trials-list:activate:evaluationCriteria')"
>
<span
>{{
data.CriterionTypeList.map((item) =>
$fd("CriterionType", Number(item))
).join(",")
}}
</span>
</el-form-item>
<!-- 授权时长 -->
<el-form-item label="授权时长" prop="Activate">
<el-input-number
v-model="form.PurchaseDuration"
:min="0"
:max="100"
></el-input-number>
</el-form-item>
<!-- 激活码 -->
<el-form-item label="激活码">
<span>{{ form.code }}</span>
</el-form-item>
</div>
<div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
<el-form-item>
<!-- 取消 -->
<el-button
size="small"
type="primary"
@click.stop="getTrialActivationCode"
>
生成
</el-button>
<!-- 保存 -->
<el-button size="small" type="primary" @click.stop="copy">
复制
</el-button>
<el-button size="small" type="primary" @click.stop="downloadXmlFile">
下载
</el-button>
</el-form-item>
</div>
</el-form>
</template>
<script>
import { fileDownload } from "@/utils/uploadZip.js";
import {
getAuthorizationCodeInfo,
getTrialActivationCode,
} from "@/api/trials.js";
export default {
name: "activatePage",
data() {
return {
form: {
code: null,
PurchaseDuration: 0,
},
data: {
AuthorizationCode: null,
AuthorizationDeadLineDate: null,
CreateUserId: null,
CriterionTypeList: [],
HospitalName: null,
PurchaseDuration: null,
TrialCode: null,
TrialId: null,
},
};
},
watch: {
"data.AuthorizationCode": {
handler() {
if (!this.data.AuthorizationCode) return;
this.getAuthorizationCodeInfo();
},
},
},
methods: {
//
copy() {
this.$copyText(this.form.code)
.then((res) => {
//
this.$message.success(
this.$t("trials:researchRecord:message:copySuccessfully")
);
})
.catch(() => {
//
this.$alert(this.$t("trials:researchRecord:message:copyFailed"));
});
},
//
async getTrialActivationCode() {
try {
let params = {
TrialId: this.data.TrialId,
TrialCode: this.data.TrialCode,
PurchaseDuration: this.form.PurchaseDuration,
HospitalName: this.data.HospitalName,
CriterionTypeList: this.data.CriterionTypeList,
CreateUserId: this.data.CreateUserId,
AuthorizationDeadLineDate: null,
};
let res = await getTrialActivationCode(params);
if (res.IsSuccess) {
this.form.code = res.Result;
}
} catch (err) {
console.log(err);
}
},
//
async getAuthorizationCodeInfo() {
try {
let params = {
AuthorizationCode: this.data.AuthorizationCode,
};
let res = await getAuthorizationCodeInfo(params);
if (res.IsSuccess) {
Object.keys(res.Result).forEach((key) => {
this.data[key] = res.Result[key];
});
this.form.PurchaseDuration = this.data.PurchaseDuration;
}
} catch (err) {
console.log(err);
}
},
fileChange(data) {
let input = data.target;
const reader = new FileReader();
reader.readAsText(input.files[0], "utf8"); // input.files[0]
reader.onload = () => {
this.data.AuthorizationCode = reader.result; // reader.result
input.value = null;
};
},
funDownload(content, filename) {
const eleLink = document.createElement("a");
eleLink.download = filename;
eleLink.style.display = "none";
const blob = new Blob([content]);
eleLink.href = URL.createObjectURL(blob);
document.body.appendChild(eleLink);
eleLink.click();
document.body.removeChild(eleLink);
},
downloadXmlFile() {
fileDownload(this.form.code, "激活码");
},
},
};
</script>
<style lang="scss" scoped>
.copy {
cursor: pointer;
color: #409eff;
margin-left: 20px;
}
.el-form-item__content {
.el-input {
width: 60%;
}
}
</style>

View File

@ -12,24 +12,56 @@
:model="form"
:rules="rules"
size="small"
label-width="100px"
label-width="120px"
>
<div class="base-dialog-body">
<p>授权申请信息</p>
<!-- 单位名称 -->
<el-form-item
:label="$t('trials:trials-list:activate:organizationName')"
>
<span>{{ form.HospitalName }}</span>
</el-form-item>
<!-- 项目编号 -->
<el-form-item :label="$t('trials:trials-list:table:trialId')">
<span>{{ data.TrialCode }}</span>
<span>{{ form.TrialCode }}</span>
</el-form-item>
<!-- 评估标准 -->
<el-form-item
:label="$t('trials:trials-list:activate:evaluationCriteria')"
>
<span>{{
form.CriterionTypeList.map((item) =>
$fd("CriterionType", Number(item))
).join(",")
}}</span>
</el-form-item>
<!-- 购买时长 -->
<el-form-item
:label="$t('trials:trials-list:activate:purchaseDuration')"
>
<el-input-number
v-model="form.PurchaseDuration"
@change="handleChange"
:min="0"
:max="100"
step-strictly
></el-input-number>
</el-form-item>
<!-- 授权码 -->
<el-form-item :label="$t('trials:trials-list:form:authorizationCode')">
<p v-if="data.Authorization" class="AuthorizationBox">
<span class="Authorization" :title="data.Authorization">{{
data.Authorization
<p v-if="form.Authorization" class="AuthorizationBox">
<span class="Authorization" :title="form.Authorization">{{
form.Authorization
}}</span>
<span class="copy" @click.stop="copy">{{
$t("trials:trials-list:action:copy")
}}</span>
<span class="copy" style="margin-left: 10px" @click.stop="getCode"
>获取</span
<span
class="copy"
style="margin-left: 10px"
@click.stop="getCode"
>{{ $t("trials:reading:button:download") }}</span
>
</p>
</el-form-item>
@ -38,8 +70,57 @@
:label="$t('trials:trials-list:form:activateCode')"
prop="Activate"
>
<el-input v-model="form.Activate" />
<el-input v-model="form.Activate" :disabled="isActivate" />
<span
v-if="form.Activate"
class="copy"
@click.stop="getActivationCodeInfo"
style="margin-left: 10px"
>{{ $t("trials:reviewTrack:impactList:save") }}</span
>
<input
type="file"
id="uploadFileInp"
@change="uploadFile"
style="display: none"
/>
<label
class="copy"
style="margin-left: 10px"
for="uploadFileInp"
v-if="!isActivate"
>{{ $t("trials:activate:button:upload") }}</label
>
</el-form-item>
<div v-if="isActivate">
<p>授权信息</p>
<!-- 单位名称 -->
<el-form-item
:label="$t('trials:trials-list:activate:organizationName')"
>
<span>{{ ActivateData.HospitalName }}</span>
</el-form-item>
<!-- 项目编号 -->
<el-form-item :label="$t('trials:trials-list:table:trialId')">
<span>{{ ActivateData.TrialCode }}</span>
</el-form-item>
<!-- 评估标准 -->
<el-form-item
:label="$t('trials:trials-list:activate:evaluationCriteria')"
>
<span>{{
ActivateData.CriterionTypeList.map((item) =>
$fd("CriterionType", Number(item))
).join(",")
}}</span>
</el-form-item>
<!-- 授权时长 -->
<el-form-item
:label="$t('trials:trials-list:activate:durationAuthorized')"
>
<span>{{ ActivateData.PurchaseDuration }}</span>
</el-form-item>
</div>
</div>
<div
class="base-dialog-footer"
@ -59,6 +140,7 @@
<el-button
size="small"
type="primary"
:disabled="!isActivate"
:loading="btnLoading"
@click="handleSave"
>
@ -70,7 +152,13 @@
</el-dialog>
</template>
<script>
import { activateTrial, getTrialActivationCode } from "@/api/trials.js";
import {
activateTrial,
getTrialAuthorizationCode,
getTrialAuthorizationInfo,
getActivationCodeInfo,
} from "@/api/trials.js";
import { fileDownload } from "@/utils/uploadZip.js";
export default {
name: "activateProject",
props: {
@ -90,6 +178,22 @@ export default {
form: {
Authorization: null, //
Activate: null, //
TrialId: null,
TrialCode: null,
PurchaseDuration: null,
HospitalName: null,
CriterionTypeList: [],
CreateUserId: null,
AuthorizationDeadLineDate: null,
},
ActivateData: {
TrialId: null,
TrialCode: null,
PurchaseDuration: null,
HospitalName: null,
CriterionTypeList: [],
CreateUserId: null,
AuthorizationDeadLineDate: null,
},
btnLoading: false,
rules: {
@ -101,17 +205,77 @@ export default {
},
],
},
isActivate: false,
timer: null,
};
},
created() {
this.getTrialAuthorizationCode();
this.getTrialAuthorizationInfo();
},
destroyed() {
if (this.timer) {
clearTimeout(this.timer);
this.timer = null;
}
},
methods: {
handleCancel() {
this.$emit("update:visible", false);
},
//
async handleChange() {
if (this.timer) {
clearTimeout(this.timer);
this.timer = null;
}
this.timer = setTimeout(() => {
this.getTrialAuthorizationCode();
clearTimeout(this.timer);
this.timer = null;
}, 500);
},
//
async getTrialAuthorizationInfo() {
try {
let params = {
TrialId: this.data.TrialId,
};
let res = await getTrialAuthorizationInfo(params);
if (res.IsSuccess) {
Object.keys(this.form).forEach((key) => {
this.form[key] = res.Result[key];
});
this.getTrialAuthorizationCode();
}
} catch (err) {
console.log(err);
}
},
//
async getTrialAuthorizationCode() {
let params = {
TrialId: this.form.TrialId,
TrialCode: this.form.TrialCode,
PurchaseDuration: this.form.PurchaseDuration,
HospitalName: this.form.HospitalName,
CriterionTypeList: this.form.CriterionTypeList,
CreateUserId: this.form.CreateUserId,
};
try {
let res = await getTrialAuthorizationCode(params);
if (res.IsSuccess) {
this.form.Authorization = res.Result;
return true;
}
return false;
} catch (err) {
console.log(err);
return false;
}
},
//
async handleSave() {
if (!this.isActivate) return;
try {
let validate = this.$refs.activateProjectForm.validate();
if (!validate) return;
@ -136,7 +300,7 @@ export default {
},
//
copy() {
this.$copyText(this.data.Authorization)
this.$copyText(this.form.Authorization)
.then((res) => {
//
this.$message.success(
@ -148,16 +312,34 @@ export default {
this.$alert(this.$t("trials:researchRecord:message:copyFailed"));
});
},
//
//
async getCode() {
let params = {
TrialId: this.data.TrialId,
AuthorizationCode: this.data.Authorization,
fileDownload(this.form.Authorization, "项目码");
},
//
uploadFile(file) {
let input = file.target;
const reader = new FileReader();
reader.readAsText(input.files[0], "utf8"); // input.files[0]
reader.onload = () => {
this.form.Activate = reader.result; // reader.result
input.value = null;
};
},
//
async getActivationCodeInfo() {
try {
let res = await getTrialActivationCode(params);
let params = {
ActivationCode: this.form.Activate,
};
let res = await getActivationCodeInfo(params);
if (res.IsSuccess) {
this.form.Activate = res.Result;
if (res.IsSuccess) {
Object.keys(this.ActivateData).forEach((key) => {
this.ActivateData[key] = res.Result[key];
});
}
this.isActivate = true;
}
} catch (err) {
console.log(err);
@ -169,6 +351,7 @@ export default {
<style lang="scss" scoped>
::v-deep .el-dialog__body {
padding-bottom: 10px;
padding-top: 0;
}
.Authorization {
width: 70%;
@ -177,6 +360,11 @@ export default {
text-overflow: ellipsis;
white-space: nowrap;
}
.el-form-item__content {
.el-input {
width: 60%;
}
}
.copy {
cursor: pointer;
color: #409eff;

View File

@ -225,7 +225,7 @@
<!--授权时长-->
<el-table-column
prop="AuthorizationDuration"
:label="$t('trials:trials-list:table:durationAuthorized')"
:label="$t('trials:trials-list:form:projectCycle')"
show-overflow-tooltip
sortable="custom"
/>
@ -272,20 +272,13 @@
/>
<!-- 激活 -->
<el-button
v-if="!scope.row.AuthorizationEncrypt"
v-hasPermi="['trials:trials-list:activate']"
circle
icon="el-icon-key"
:title="$t('trials:trials-list:action:activate')"
@click="handleActivate(scope.row)"
/>
<!-- 代办详情 -->
<!-- <el-button
v-hasPermi="['trials:trials-list:abolish']"
circle
icon="el-icon-receiving"
:disabled="scope.row.TrialStatusStr === 'Initializing'"
:title="$t('trials:trials-list:action:commission')"
@click="handleCommission(scope.row)"
/> -->
</template>
</el-table-column>
</el-table>
@ -357,11 +350,7 @@
</BaseContainer>
</template>
<script>
import {
abandonTrial,
getTrialListHir,
getTrialAuthorizationCode,
} from "@/api/trials";
import { abandonTrial, getTrialListHir } from "@/api/trials";
import { mapGetters } from "vuex";
import Excel from "exceljs";
import BaseContainer from "@/components/BaseContainer";
@ -477,30 +466,10 @@ export default {
}
return true;
},
//
async getTrialAuthorizationCode(item) {
let params = {
TrialId: item.TrialId,
};
try {
let res = await getTrialAuthorizationCode(params);
if (res.IsSuccess) {
this.currentRow.Authorization = res.Result;
return true;
}
return false;
} catch (err) {
console.log(err);
return false;
}
},
//
async handleActivate(item) {
this.currentRow = item;
let res = await this.getTrialAuthorizationCode(item);
if (res) {
this.activateVisible = true;
}
this.activateVisible = true;
},
initPage() {
this.getList();

View File

@ -201,6 +201,7 @@ export default {
this.$t("trials:trials-myinfo:message:updateSuccessfully")
);
this.$emit("getUserInfo");
this.logout();
});
},
setNewPhone() {
@ -250,6 +251,19 @@ export default {
}, 1000);
}
},
async logout() {
/* eslint-disable */
var loginType = zzSessionStorage.getItem("loginType");
await this.$store.dispatch("user/logout");
if (loginType) {
this.$router.push(`/login?loginType=${loginType}`);
} else {
this.$router.push(`/login`);
}
this.$i18n.locale = "zh";
this.setLanguage("zh");
this.$updateDictionary();
},
},
};
</script>

View File

@ -60,7 +60,7 @@ export default {
};
},
computed: {
...mapGetters(["userId", "name"]),
...mapGetters(["userId", "userName"]),
},
mounted() {
this.getUserInfo();
@ -170,7 +170,7 @@ export default {
.trial-info-btn {
position: absolute;
bottom: -60px;
left: calc(100% + 10px);
left: 10px;
min-width: 97px;
}
.trial-myinfo-left-bottom {

View File

@ -12,6 +12,8 @@
style="margin-right:5px;"
@change="handleShowDetail"
/>
<!--评估报告-->
<el-button v-if="readingTaskState>=2" type="primary" size="small" @click="showReport">{{$t('trials:dicoms:button:evaluationReport')}}</el-button>
<el-button
v-if="readingTaskState<2"
type="primary"
@ -256,6 +258,11 @@
</div>
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
</el-dialog>
<!--评估报告-->
<PreviewFileDialog
:visible.sync="previewFileVisible"
:fileData="fileData"
/>
</div>
</template>
<script>
@ -269,9 +276,11 @@ import store from '@/store'
import { mapGetters } from 'vuex'
import { changeURLStatic } from '@/utils/history.js'
import AdditionalAssessment from './AdditionalAssessment'
import { showReadReport } from "@/api/export";
import PreviewFileDialog from "@/components/PreviewFileDialog/PreviewFileDialog.vue";
export default {
name: 'ReportPage',
components: { SignForm, AdditionalAssessment },
components: { SignForm, AdditionalAssessment,PreviewFileDialog },
props: {
visitTaskId: {
type: String,
@ -308,7 +317,11 @@ export default {
assessmentQuestions: [],
tLesionCount: null,
ntLesionCount: null,
openWindow: null
openWindow: null,
//
previewFileVisible: false,
fileData: {},
}
},
computed: {
@ -349,6 +362,24 @@ export default {
}
},
methods: {
//
async showReport(){
let data = {
VisitTaskId: this.visitTaskId,
};
try {
let res = await showReadReport(data);
let urlPdf = window.URL.createObjectURL(new Blob([res]))
this.viewVisible = true
this.fileData = {
path: encodeURIComponent(urlPdf),
name:'评估报告.pdf'
};
this.previewFileVisible = true;
} catch (err) {
console.log(err);
}
},
myConfirm(msg) {
return new Promise(resolve => {
this.$confirm(msg, {

View File

@ -85,11 +85,9 @@
<el-descriptions-item :label="$t('trials:trials-myinfo:form:phone')">
{{ trialInfo.ContactPhone }}
</el-descriptions-item>
<!--授权时长-->
<el-descriptions-item
:label="$t('trials:trials-list:table:durationAuthorized')"
>
{{ trialInfo.AuthorizationDuration }}
<!--项目周期-->
<el-descriptions-item :label="$t('trials:trials-list:form:projectCycle')">
{{ trialInfo.AuthorizationDuration }}
</el-descriptions-item>
<!--授权日期-->
<el-descriptions-item
@ -98,17 +96,68 @@
{{ trialInfo.AuthorizationDate }}
</el-descriptions-item>
</el-descriptions>
<div
v-if="otherInfo && otherInfo.TrialId"
v-hasPermi="['trials:trials-list:activate']"
>
<p>项目授权信息</p>
<el-descriptions :column="2" border style="width: 1000px">
<!--单位名称-->
<el-descriptions-item
:label="$t('trials:trials-list:activate:organizationName')"
>
{{ otherInfo.HospitalName }}
</el-descriptions-item>
<!--项目编号-->
<el-descriptions-item :label="$t('trials:trials-list:table:trialId')">
{{ otherInfo.TrialCode }}
</el-descriptions-item>
<!--评估标准-->
<el-descriptions-item
:label="$t('trials:trials-list:activate:evaluationCriteria')"
>
{{
otherInfo.CriterionTypeList.map((item) =>
$fd("CriterionType", Number(item))
).join(",")
}}
</el-descriptions-item>
<!--授权时长-->
<el-descriptions-item
:label="$t('trials:trials-list:activate:durationAuthorized')"
>
{{ otherInfo.PurchaseDuration }}
</el-descriptions-item>
</el-descriptions>
<el-button
type="primary"
size="small"
style="margin-top: 10px"
@click.stop="putActivate"
>{{ $t("trials:activate:renewalAuthorization") }}</el-button
>
</div>
<activate-project
v-if="activateVisible"
:visible.sync="activateVisible"
:data="otherInfo"
@getList="initForm"
/>
</div>
</template>
<script>
import { getTrialInfoHir } from "@/api/trials";
import activateProject from "@/views/trials/trials-list/components/activate-project.vue";
export default {
components: { "activate-project": activateProject },
data() {
return {
trialInfo: {},
trialId: "",
trialStatus: "",
formLoading: false,
otherInfo: {},
activateVisible: false,
};
},
mounted() {
@ -116,11 +165,16 @@ export default {
this.initForm();
},
methods: {
//
putActivate() {
this.activateVisible = true;
},
initForm() {
this.formLoading = true;
getTrialInfoHir(this.trialId)
.then((res) => {
this.formLoading = false;
this.otherInfo = res.OtherInfo;
this.trialInfo = res.Result;
this.trialInfo.ReviewTypeList =
this.trialInfo.ReviewTypeList.length > 0