新增及修改页面

main
wangxiaoshuang 2024-03-22 17:53:50 +08:00
parent eb7b60e605
commit 06883d2e86
21 changed files with 3638 additions and 2075 deletions

View File

@ -4,14 +4,15 @@
<el-tabs v-model="trialsTab" @tab-click="clickTab">
<el-tab-pane v-for="item of trialsRouter.children.find(v => {return v.name == 'TrialsPanel'}).children" :key="`tab${item.path}`" :disabled="TotalNeedSignTrialDocCount !== 0" :label="$t(item.LanguageMark)" :name="item.path">
<el-tabs v-if="!item.tabHiddn" v-model="trialsTabChild" @tab-click="clickTab">
<template v-for="item1 of item.children">
<el-tab-pane
v-for="item1 of item.children"
v-if="TrialConfig && isShow(item1.path)"
:key="`tab1${item1.path}`"
:disabled="TotalNeedSignTrialDocCount !== 0 || (TrialStatusStr === 'Initializing' && (item1.path === '/trials/trials-panel/setting/personnel-manage' || item1.path === '/trials/trials-panel/setting/qc-question' || item1.path === '/trials/trials-panel/setting/reading-unit' || item1.path === '/trials/trials-panel/setting/medical-audit' || item1.path === '/trials/trials-panel/setting/email-manage'))"
:label="$t(item1.LanguageMark)"
:name="item1.path"
/>
</template>
</el-tabs>
</el-tab-pane>
</el-tabs>

View File

@ -1,25 +1,31 @@
<template>
<div v-loading="loading" class="clinical-data-wrapper">
<el-tabs type="border-card">
<template v-for="cd in clinicalDatas">
<el-tab-pane
v-for="cd in clinicalDatas"
v-if="data.ClinicalDataTrialSetId === cd.ClinicalDataTrialSetId"
:key="cd.ClinicalDataTrialSetId"
:label="$i18n.locale === 'zh' ? cd.ClinicalDataSetName : cd.ClinicalDataSetEnName"
:label="
$i18n.locale === 'zh'
? cd.ClinicalDataSetName
: cd.ClinicalDataSetEnName
"
>
<!-- 格式化录入 -->
<div v-if="cd.ClinicalUploadType === 0">
<!-- 既往放疗史 -->
<h4>{{ $t('trials:uploadClinicalData:title:pastTreatment') }}</h4>
<div v-if="(allowAddOrEdit)" style="text-align:right">
<h4>{{ $t("trials:uploadClinicalData:title:pastTreatment") }}</h4>
<div v-if="allowAddOrEdit" style="text-align: right">
<!-- 新增 -->
<el-button
type="primary"
icon="el-icon-plus"
size="small"
@click.native.prevent="addPreviousHistory(cd.ClinicalDataTrialSetId)"
@click.native.prevent="
addPreviousHistory(cd.ClinicalDataTrialSetId)
"
>
{{ $t('common:button:new') }}
{{ $t("common:button:new") }}
</el-button>
</div>
@ -27,10 +33,7 @@
:data="cd.ClinicalTableData.PreviousHistoryList"
style="width: 100%"
>
<el-table-column
type="index"
width="50"
/>
<el-table-column type="index" width="50" />
<!-- 放疗部位 -->
<el-table-column
prop="Position"
@ -42,7 +45,11 @@
:label="$t('trials:uploadClinicalData:table:beginDate')"
>
<template slot-scope="scope">
{{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
{{
scope.row.StartTime
? moment(scope.row.StartTime).format("YYYY-MM-DD")
: ""
}}
</template>
</el-table-column>
<!-- 结束日期 -->
@ -51,7 +58,11 @@
:label="$t('trials:uploadClinicalData:table:endDate')"
>
<template slot-scope="scope">
{{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
{{
scope.row.EndTime
? moment(scope.row.EndTime).format("YYYY-MM-DD")
: ""
}}
</template>
</el-table-column>
<!-- 病灶是否PD -->
@ -60,27 +71,33 @@
:label="$t('trials:uploadClinicalData:table:isPD')"
>
<template slot-scope="scope">
{{ $fd('IsPdEnum', scope.row.IsPD) }}
{{ $fd("IsPdEnum", scope.row.IsPD) }}
</template>
</el-table-column>
<el-table-column
v-if="hasPermi(['trials:trials-panel:visit:crc-upload:upload']) && allowAddOrEdit"
v-if="
hasPermi(['trials:trials-panel:visit:crc-upload:upload']) &&
allowAddOrEdit
"
:label="$t('common:action:action')"
min-width="120"
>
<template slot-scope="scope">
<!-- 编辑 -->
<el-button
v-if="( allowAddOrEdit)"
v-if="allowAddOrEdit"
icon="el-icon-edit-outline"
circle
:title="$t('common:button:edit')"
size="small"
@click.native.prevent="editRow(scope.row,1)"
@click.native.prevent="editRow(scope.row, 1)"
/>
<!-- 移除 -->
<el-button
v-if="(data.SubmitState*1 < 2 || (data.SubmitState === 2 && data.IsQCConfirmedReupload))"
v-if="
data.SubmitState * 1 < 2 ||
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
"
v-hasPermi="['trials:trials-panel:visit:crc-upload:upload']"
icon="el-icon-delete"
circle
@ -92,25 +109,22 @@
</el-table-column>
</el-table>
<!-- 既往手术史 -->
<h4>{{ $t('trials:uploadClinicalData:title:pastSurgery') }}</h4>
<div v-if="( allowAddOrEdit)" style="text-align:right">
<h4>{{ $t("trials:uploadClinicalData:title:pastSurgery") }}</h4>
<div v-if="allowAddOrEdit" style="text-align: right">
<el-button
type="primary"
icon="el-icon-plus"
size="small"
@click="addPreviousSurgery(cd.ClinicalDataTrialSetId)"
>
{{ $t('common:button:new') }}
{{ $t("common:button:new") }}
</el-button>
</div>
<el-table
:data="cd.ClinicalTableData.PreviousSurgeryList"
style="width: 100%"
>
<el-table-column
type="index"
width="50"
/>
<el-table-column type="index" width="50" />
<!-- 手术名称 -->
<el-table-column
prop="OperationName"
@ -122,19 +136,26 @@
:label="$t('trials:uploadClinicalData:table:surgeryDate')"
>
<template slot-scope="scope">
{{ scope.row.OperationTime?moment(scope.row.OperationTime).format('YYYY-MM-DD'):'' }}
{{
scope.row.OperationTime
? moment(scope.row.OperationTime).format("YYYY-MM-DD")
: ""
}}
</template>
</el-table-column>
<el-table-column
v-if="hasPermi(['trials:trials-panel:visit:crc-upload:upload']) && allowAddOrEdit"
v-if="
hasPermi(['trials:trials-panel:visit:crc-upload:upload']) &&
allowAddOrEdit
"
:label="$t('common:action:action')"
min-width="200"
>
<template slot-scope="scope">
<!-- 编辑 -->
<el-button
v-if="(allowAddOrEdit)"
v-if="allowAddOrEdit"
icon="el-icon-edit-outline"
circle
:title="$t('common:button:edit')"
@ -143,7 +164,10 @@
/>
<!-- 移除 -->
<el-button
v-if="data.SubmitState*1 < 2 || (data.SubmitState === 2 && data.IsQCConfirmedReupload)"
v-if="
data.SubmitState * 1 < 2 ||
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
"
v-hasPermi="['trials:trials-panel:visit:crc-upload:upload']"
icon="el-icon-delete"
circle
@ -155,8 +179,8 @@
</el-table-column>
</el-table>
<!-- 既往其他治疗史 -->
<h4>{{ $t('trials:uploadClinicalData:title:others') }}</h4>
<div v-if="( allowAddOrEdit)" style="text-align:right">
<h4>{{ $t("trials:uploadClinicalData:title:others") }}</h4>
<div v-if="allowAddOrEdit" style="text-align: right">
<!-- 新增 -->
<el-button
type="primary"
@ -164,17 +188,14 @@
size="small"
@click="addPreviousOther(cd.ClinicalDataTrialSetId)"
>
{{ $t('common:button:new') }}
{{ $t("common:button:new") }}
</el-button>
</div>
<el-table
:data="cd.ClinicalTableData.PreviousOtherList"
style="width: 100%"
>
<el-table-column
type="index"
width="50"
/>
<el-table-column type="index" width="50" />
<!-- 治疗类型 -->
<el-table-column
prop="TreatmentType"
@ -183,10 +204,16 @@
<!-- 开始日期 -->
<el-table-column
prop="StartTime"
:label="$t('trials:uploadClinicalData:table:treatmentbeginDate')"
:label="
$t('trials:uploadClinicalData:table:treatmentbeginDate')
"
>
<template slot-scope="scope">
{{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
{{
scope.row.StartTime
? moment(scope.row.StartTime).format("YYYY-MM-DD")
: ""
}}
</template>
</el-table-column>
<!-- 结束日期 -->
@ -195,19 +222,26 @@
:label="$t('trials:uploadClinicalData:table:treatmentendDate')"
>
<template slot-scope="scope">
{{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
{{
scope.row.EndTime
? moment(scope.row.EndTime).format("YYYY-MM-DD")
: ""
}}
</template>
</el-table-column>
<el-table-column
v-if="hasPermi(['trials:trials-panel:visit:crc-upload:upload']) && allowAddOrEdit"
v-if="
hasPermi(['trials:trials-panel:visit:crc-upload:upload']) &&
allowAddOrEdit
"
:label="$t('common:action:action')"
min-width="200"
>
<template slot-scope="scope">
<!-- 编辑 -->
<el-button
v-if="( allowAddOrEdit)"
v-if="allowAddOrEdit"
icon="el-icon-edit-outline"
circle
:title="$t('common:button:edit')"
@ -216,7 +250,10 @@
/>
<!-- 移除 -->
<el-button
v-if="(data.SubmitState*1 < 2 || (data.SubmitState === 2 && data.IsQCConfirmedReupload))"
v-if="
data.SubmitState * 1 < 2 ||
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
"
icon="el-icon-delete"
circle
:title="$t('common:button:delete')"
@ -229,7 +266,7 @@
</div>
<!-- PDF录入 -->
<div v-if="cd.ClinicalUploadType === 1">
<div v-if="(allowAddOrEdit)" style="text-align:right">
<div v-if="allowAddOrEdit" style="text-align: right">
<!-- 下载模板 -->
<el-button
v-if="cd.Path"
@ -237,28 +274,26 @@
icon="el-icon-download"
size="small"
:loading="downloadLoading"
@click.native.prevent="handleDownloadTpl(cd.ClinicalDataTrialSetId)"
@click.native.prevent="
handleDownloadTpl(cd.ClinicalDataTrialSetId)
"
>
{{ $t('trials:uploadClinicalData:button:downloadTemplate') }}
{{ $t("trials:uploadClinicalData:button:downloadTemplate") }}
</el-button>
<!-- 新增 -->
<el-button
icon="el-icon-plus"
type="primary"
size="small"
@click.native.prevent="addFile(cd.Id,cd.ClinicalDataTrialSetId)"
@click.native.prevent="
addFile(cd.Id, cd.ClinicalDataTrialSetId)
"
>
{{ $t('common:button:new') }}
{{ $t("common:button:new") }}
</el-button>
</div>
<el-table
:data="cd.PDFFileList"
style="width: 100%"
>
<el-table-column
type="index"
width="50"
/>
<el-table :data="cd.PDFFileList" style="width: 100%">
<el-table-column type="index" width="50" />
<!-- 文件名称 -->
<el-table-column
prop="FileName"
@ -271,10 +306,7 @@
:label="$t('trials:uploadClinicalData:table:uploadedTime')"
width="200"
/>
<el-table-column
:label="$t('common:action:action')"
width="200"
>
<el-table-column :label="$t('common:action:action')" width="200">
<template slot-scope="scope">
<!-- 预览 -->
<el-button
@ -297,6 +329,7 @@
</el-table>
</div>
</el-tab-pane>
</template>
</el-tabs>
<!-- 既往放疗史 -->
@ -309,7 +342,14 @@
append-to-body
custom-class="base-dialog-wrapper"
>
<PreviousRadiotherapy v-if="prVisible" :trial-id="data.TrialId" :data="currentRow" :subject-visit-id="subjectVisitId" @closePRDialog="closePRDialog" @refresh="refresh" />
<PreviousRadiotherapy
v-if="prVisible"
:trial-id="data.TrialId"
:data="currentRow"
:subject-visit-id="subjectVisitId"
@closePRDialog="closePRDialog"
@refresh="refresh"
/>
</el-dialog>
<!-- 既往手术史 -->
<el-dialog
@ -321,7 +361,14 @@
append-to-body
custom-class="base-dialog-wrapper"
>
<PreviousSurgery v-if="psVisible" :data="currentRow" :parent-data="data" :subject-visit-id="subjectVisitId" @closePSDialog="closePSDialog" @refresh="refresh" />
<PreviousSurgery
v-if="psVisible"
:data="currentRow"
:parent-data="data"
:subject-visit-id="subjectVisitId"
@closePSDialog="closePSDialog"
@refresh="refresh"
/>
</el-dialog>
<!-- 既往其他治疗史 -->
<el-dialog
@ -333,7 +380,14 @@
append-to-body
custom-class="base-dialog-wrapper"
>
<PreviousOther v-if="poVisible" :data="currentRow" :parent-data="data" :subject-visit-id="subjectVisitId" @closePODialog="closePODialog" @refresh="refresh" />
<PreviousOther
v-if="poVisible"
:data="currentRow"
:parent-data="data"
:subject-visit-id="subjectVisitId"
@closePODialog="closePODialog"
@refresh="refresh"
/>
</el-dialog>
<!-- 上传文件 -->
<el-dialog
@ -345,46 +399,62 @@
append-to-body
custom-class="base-dialog-wrapper"
>
<PreviousFiles v-if="upVisible" :data="currentRow" :parent-data="data" :subject-visit-id="subjectVisitId" @closeUpDialog="closeUpDialog" @refresh="refresh" />
<PreviousFiles
v-if="upVisible"
:data="currentRow"
:parent-data="data"
:subject-visit-id="subjectVisitId"
@closeUpDialog="closeUpDialog"
@refresh="refresh"
/>
</el-dialog>
</div>
</template>
<script>
import { deleteReadingClinicalDataPDF, deletePreviousHistory, deletePreviousOther, deletePreviousSurgery,
DownloadTrialClinicalFile } from '@/api/trials'
import { getCRCClinicalData } from '@/api/trials'
import PreviousRadiotherapy from './previousRadiotherapy'
import PreviousSurgery from './previousSurgery'
import PreviousOther from './previousOther'
import PreviousFiles from './previousFiles'
import moment from 'moment'
import {
deleteReadingClinicalDataPDF,
deletePreviousHistory,
deletePreviousOther,
deletePreviousSurgery,
DownloadTrialClinicalFile,
} from "@/api/trials";
import { getCRCClinicalData } from "@/api/trials";
import PreviousRadiotherapy from "./previousRadiotherapy";
import PreviousSurgery from "./previousSurgery";
import PreviousOther from "./previousOther";
import PreviousFiles from "./previousFiles";
import moment from "moment";
export default {
name: 'ClinicalData',
components: { PreviousRadiotherapy, PreviousSurgery, PreviousOther, PreviousFiles },
name: "ClinicalData",
components: {
PreviousRadiotherapy,
PreviousSurgery,
PreviousOther,
PreviousFiles,
},
props: {
data: {
type: Object,
default() {
return {}
}
return {};
},
},
subjectVisitId: {
type: String,
required: true
required: true,
},
enumType: {
type: Number,
default: 0
default: 0,
},
allowAddOrEdit: {
type: Boolean,
default: false
}
default: false,
},
},
data() {
return {
userTypeEnumInt: zzSessionStorage.getItem('userTypeEnumInt') * 1,
userTypeEnumInt: zzSessionStorage.getItem("userTypeEnumInt") * 1,
loading: false,
PreviousHistoryList: [],
PreviousSurgeryList: [],
@ -399,171 +469,195 @@ export default {
trialId: this.$route.query.trialId,
moment,
downloadLoading: false,
clinicalDatas: []
}
clinicalDatas: [],
};
},
mounted() {
this.getClinicalData()
this.getClinicalData();
},
methods: {
getClinicalData() {
this.loading = true
this.loading = true;
var param = {
subjectVisitId: this.subjectVisitId,
trialId: this.data.TrialId,
subjectId: this.data.SubjectId,
isBaseLine: true
}
getCRCClinicalData(param).then(res => {
this.clinicalDatas = res.Result
this.loading = false
}).catch(() => {
this.loading = false
isBaseLine: true,
};
getCRCClinicalData(param)
.then((res) => {
this.clinicalDatas = res.Result;
this.loading = false;
})
.catch(() => {
this.loading = false;
});
},
//
editRow(row, type) {
if (type === 1) {
this.prVisible = true
this.prVisible = true;
} else if (type === 2) {
this.psVisible = true
this.psVisible = true;
} else if (type === 3) {
this.poVisible = true
this.poVisible = true;
}
this.currentRow = { ...row }
this.currentRow = { ...row };
},
// ID
deletePreviousHistory(row) {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true
})
.then(() => {
this.loading = true
deletePreviousHistory(this.data.TrialId, this.subjectVisitId, row.Id).then(res => {
this.loading = false
this.$confirm(this.$t("trials:uploadedDicoms:message:deleteMes"), {
type: "warning",
distinguishCancelAndClose: true,
}).then(() => {
this.loading = true;
deletePreviousHistory(this.data.TrialId, this.subjectVisitId, row.Id)
.then((res) => {
this.loading = false;
if (res.IsSuccess) {
this.getClinicalData()
this.$message.success(this.$t('trials:uploadedDicoms:message:deleteSuccessfully'))
this.$emit('getList')
this.getClinicalData();
this.$message.success(
this.$t("trials:uploadedDicoms:message:deleteSuccessfully")
);
this.$emit("getList");
}
}).catch(() => { this.loading = false })
})
.catch(() => {
this.loading = false;
});
});
},
// ID
deletePreviousSurgery(row) {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true
})
.then(() => {
this.$confirm(this.$t("trials:uploadedDicoms:message:deleteMes"), {
type: "warning",
distinguishCancelAndClose: true,
}).then(() => {
// row.Type = ''
this.loading = true
this.loading = true;
deletePreviousSurgery(this.data.TrialId, this.subjectVisitId, row.Id)
.then(res => {
this.loading = false
.then((res) => {
this.loading = false;
if (res.IsSuccess) {
this.getClinicalData()
this.$message.success(this.$t('trials:uploadedDicoms:message:deleteSuccessfully'))
this.$emit('getList')
this.getClinicalData();
this.$message.success(
this.$t("trials:uploadedDicoms:message:deleteSuccessfully")
);
this.$emit("getList");
}
}).catch(() => { this.loading = false })
})
.catch(() => {
this.loading = false;
});
});
},
// ID
deletePreviousOther(row) {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true
})
.then(() => {
this.$confirm(this.$t("trials:uploadedDicoms:message:deleteMes"), {
type: "warning",
distinguishCancelAndClose: true,
}).then(() => {
// row.Type = ''
this.loading = true
this.loading = true;
deletePreviousOther(this.data.TrialId, this.subjectVisitId, row.Id)
.then(res => {
this.loading = false
.then((res) => {
this.loading = false;
if (res.IsSuccess) {
this.getClinicalData()
this.$message.success(this.$t('trials:uploadedDicoms:message:deleteSuccessfully'))
this.$emit('getList')
this.getClinicalData();
this.$message.success(
this.$t("trials:uploadedDicoms:message:deleteSuccessfully")
);
this.$emit("getList");
}
}).catch(() => { this.loading = false })
})
.catch(() => {
this.loading = false;
});
});
},
//
preview(path) {
if (!path) return
window.open(`${path}`, '_blank')
if (!path) return;
window.open(`${path}`, "_blank");
},
addPreviousHistory(clinicalDataTrialSetId) {
console.log(clinicalDataTrialSetId)
this.currentRow = { ClinicalDataTrialSetId: clinicalDataTrialSetId }
this.prVisible = true
console.log(clinicalDataTrialSetId);
this.currentRow = { ClinicalDataTrialSetId: clinicalDataTrialSetId };
this.prVisible = true;
},
addPreviousSurgery(clinicalDataTrialSetId) {
this.currentRow = { ClinicalDataTrialSetId: clinicalDataTrialSetId }
this.psVisible = true
this.currentRow = { ClinicalDataTrialSetId: clinicalDataTrialSetId };
this.psVisible = true;
},
addPreviousOther(clinicalDataTrialSetId) {
this.currentRow = { ClinicalDataTrialSetId: clinicalDataTrialSetId }
this.poVisible = true
this.currentRow = { ClinicalDataTrialSetId: clinicalDataTrialSetId };
this.poVisible = true;
},
//
closePRDialog() {
this.prVisible = false
this.prVisible = false;
},
closePSDialog() {
this.psVisible = false
this.psVisible = false;
},
closePODialog() {
this.poVisible = false
this.poVisible = false;
},
closeUpDialog() {
this.upVisible = false
this.upVisible = false;
},
refresh() {
this.getClinicalData()
this.$emit('getList')
this.getClinicalData();
this.$emit("getList");
},
//
addFile(id, clinicalDataTrialSetId) {
this.currentRow = { Id: id, ClinicalDataTrialSetId: clinicalDataTrialSetId, SubjectId: this.data.SubjectId }
this.upVisible = true
this.currentRow = {
Id: id,
ClinicalDataTrialSetId: clinicalDataTrialSetId,
SubjectId: this.data.SubjectId,
};
this.upVisible = true;
},
//
deleteFile(id) {
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
type: 'warning',
distinguishCancelAndClose: true
})
.then(() => {
this.loading = true
this.$confirm(this.$t("trials:uploadedDicoms:message:deleteMes"), {
type: "warning",
distinguishCancelAndClose: true,
}).then(() => {
this.loading = true;
deleteReadingClinicalDataPDF(id)
.then(res => {
this.loading = false
.then((res) => {
this.loading = false;
if (res.IsSuccess) {
this.getClinicalData()
this.$emit('getList')
this.$message.success(this.$t('trials:uploadedDicoms:message:deleteSuccessfully'))
this.getClinicalData();
this.$emit("getList");
this.$message.success(
this.$t("trials:uploadedDicoms:message:deleteSuccessfully")
);
}
}).catch(() => {
this.loading = false
})
})
.catch(() => {
this.loading = false;
});
});
},
handleDownloadTpl(clinicalDataTrialSetId) {
this.downloadLoading = true
DownloadTrialClinicalFile(clinicalDataTrialSetId).then(data => {
this.downloadLoading = false
}).catch(() => { this.downloadLoading = false })
}
}
}
this.downloadLoading = true;
DownloadTrialClinicalFile(clinicalDataTrialSetId)
.then((data) => {
this.downloadLoading = false;
})
.catch(() => {
this.downloadLoading = false;
});
},
},
};
</script>
<style lang="scss">
.clinical-data-wrapper{
.box-title{
.clinical-data-wrapper {
.box-title {
padding: 12px;
margin-bottom: 10px;
background-color: #dcdfe6;

View File

@ -120,7 +120,10 @@
<el-table-column
label="Action"
width="150"
v-if="hasPermi(['system:hospital:edit', 'system:hospital:del'])"
v-if="
hasPermi(['system:hospital:edit']) ||
hasPermi(['system:hospital:del'])
"
>
<template slot-scope="scope">
<el-button

View File

@ -1,11 +1,11 @@
<template>
<div style="display: flex;justify-content: center">
<div style="width: 640px;text-align: center;border: 1px solid #e6e6e6;margin-top:40px;padding:10px;padding-right:40px;">
<div style="width: 640px;text-align: center;border: 1px solid #e6e6e6;margin-top:40px;padding:10px;">
<div class="trial-myinfo-head" style="font-size: 30px;line-height: 120px;">
<!-- 首次登录修改密码 -->
{{ $t('recompose:title:init') }}
</div>
<el-form ref="passwordForm" v-loading="loading" label-position="right" :model="password" :rules="passwordFormRules" label-width="120px">
<el-form ref="passwordForm" v-loading="loading" label-position="right" :model="password" :rules="passwordFormRules" label-width="180px">
<!-- 邮箱 -->
<el-form-item :label="$t('recompose:form:email')" prop="Email">
<el-input v-model="password.Email" disabled />
@ -18,15 +18,6 @@
<el-form-item :label="$t('recompose:form:userName')" prop="NewUserName">
<el-input v-model="password.NewUserName" />
</el-form-item>
<!-- 校验码 -->
<el-form-item :label="$t('trials:researchForm:form:checkCode')" prop="NewUserName" style="position: relative">
<el-input v-model="password.NewUserName" :disabled="password.NewUserName"/>
<span style="position: absolute;right: -30px">
<el-tooltip :content="$t('passwordReset:form:passwordCentent')" placement="top">
<i class="el-icon-question" />
</el-tooltip>
</span>
</el-form-item>
<!-- 新密码 -->
<el-form-item class="my_new_pwd" :label="$t('recompose:form:newPassword')" prop="NewPassWord">
<el-input v-model="password.NewPassWord" type="password" show-password auto-complete="new-password" />

View File

@ -46,7 +46,7 @@
</template>
</el-table-column>
<el-table-column fixed="right" label="Action" min-width="200">
<template slot-scope="scope" min-width="130">
<template slot-scope="scope">
<el-button size="small" type="text" @click="handleEdit(scope.$index,scope.row)">Edit</el-button>
<el-button size="small" type="text" @click="handleDelete(scope.$index,scope.row)">Delete</el-button>
</template>

View File

@ -18,8 +18,8 @@
</el-form-item>
<!-- 邮箱 -->
<el-form-item :label="$t('passwordReset:form:email')" prop="EmailOrPhone">
<el-input v-model="form.EmailOrPhone" autocomplete="off" @change="handleEmailChange" />
<!-- <el-col :span="18">
<!-- <el-input v-model="form.EmailOrPhone" autocomplete="off" @change="handleEmailChange" /> -->
<el-col :span="18">
<el-input v-model="form.EmailOrPhone" autocomplete="off" @change="handleEmailChange" />
</el-col>
<el-col :span="6" style="text-align:right;">
@ -29,8 +29,8 @@
style="width:80%;"
:disabled="sendDisabled"
@click="handleSendCode"
>{{ sendTitle }}</el-button> -->
<!-- </el-col> -->
>{{ sendTitle }}</el-button>
</el-col>
</el-form-item>
<!-- 验证码 -->
<el-form-item :label="$t('trials:researchForm:form:checkCode')" required>

View File

@ -6,17 +6,17 @@
<div class="login-body">
<div class="login-l">
<div class="login-logo">
<img v-if="language === 'zh'" src="@/assets/zzlogo2.png" alt="">
<img v-else src="@/assets/zzlogo3.png" alt="">
<img v-if="language === 'zh'" src="@/assets/zzlogo2.png" alt="" />
<img v-else src="@/assets/zzlogo3.png" alt="" />
</div>
<div class="login-image">
<img src="@/assets/login-bg.png">
<img src="@/assets/login-bg.png" />
</div>
</div>
<div class="login-r">
<div class="title-container">
<!-- IRC Management System -->
<div class="title">{{ $t('login:title:system') }}</div>
<div class="title">{{ $t("login:title:system") }}</div>
</div>
<el-form
ref="loginForm"
@ -26,11 +26,14 @@
auto-complete="on"
label-position="left"
>
<el-form-item
prop="username"
:rules="[
{ required: true, message: this.$t('login:formRule:userName'), trigger: 'blur' }
{
required: true,
message: this.$t('login:formRule:userName'),
trigger: 'blur',
},
]"
>
<span class="svg-container">
@ -51,7 +54,11 @@
<el-form-item
prop="password"
:rules="[
{ required: true, message: this.$t('login:formRule:password'), trigger: 'blur' }
{
required: true,
message: this.$t('login:formRule:password'),
trigger: 'blur',
},
]"
>
<span class="svg-container">
@ -70,23 +77,29 @@
@keyup.enter.native="handleLogin"
/>
<span class="show-pwd" @click="showPwd">
<svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
<svg-icon
:icon-class="passwordType === 'password' ? 'eye' : 'eye-open'"
/>
</span>
</el-form-item>
<!-- Login -->
<el-button
:loading="loading"
type="primary"
style="width:100%;margin-bottom:10px;"
style="width: 100%; margin-bottom: 10px"
size="medium"
@click.native.prevent="handleLogin"
>
{{ $t('login:button:login') }}
{{ $t("login:button:login") }}
</el-button>
<div style="text-align: right;">
<div style="text-align: right">
<!-- Forget password? -->
<el-button type="text" size="medium" @click.native.prevent="handleResetPwd">
{{ $t('login:button:forgetPassword') }}
<el-button
type="text"
size="medium"
@click.native.prevent="handleResetPwd"
>
{{ $t("login:button:forgetPassword") }}
</el-button>
</div>
</el-form>
@ -96,41 +109,50 @@
<span>Copyright © 2023 上海展影医疗科技有限公司 版权所有</span>
<span> | </span>
<a target="_blank" href="https://beian.miit.gov.cn/">
<span>
沪ICP备2021037850-2
</span>
<span> 沪ICP备2021037850-2 </span>
</a>
<span> | </span>
<a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=31011002005859">
<img src="@/assets/filing.png">
<a
target="_blank"
href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=31011002005859"
>
<img src="@/assets/filing.png" />
<span>沪公网安备 31011002005859</span>
</a>
</div>
<Vcode :show="isShow" slider-text="" :imgs="[Img1]" @success="onSuccess" />
<Vcode
:show="isShow"
slider-text="拖到滑块完成验证"
:imgs="[Img1]"
@success="onSuccess"
/>
</div>
</template>
<script>
import { mapGetters, mapMutations } from 'vuex'
import TopLang from './topLang'
import { mapGetters, mapMutations } from "vuex";
import TopLang from "./topLang";
// import NoticeMarquee from '../trials/trials-layout/components/noticeMarquee'
import Vcode from 'vue-puzzle-vcode'
import Img1 from '@/assets/pic-1.png'
import Vcode from "vue-puzzle-vcode";
import Img1 from "@/assets/pic-1.png";
export default {
name: 'Login',
name: "Login",
components: { TopLang, Vcode },
data() {
return {
VUE_APP_OSS_CONFIG_REGION: process.env.VUE_APP_OSS_CONFIG_REGION,
loginForm: {
username: '',
password: ''
username: "",
password: "",
},
loginRules: {
username: [
{ required: true, message: this.$t('login:formRule:userName'), trigger: 'blur' },
{ max: 20, message: `${this.$t('common:ruleMessage:maxLength')} 20` }
{
required: true,
message: this.$t("login:formRule:userName"),
trigger: "blur",
},
{ max: 20, message: `${this.$t("common:ruleMessage:maxLength")} 20` },
],
password: [
// {
@ -138,119 +160,123 @@ export default {
// trigger: "blur",
// validator: this.$validatePassword
// },
{ required: true, message: this.$t('login:formRule:password'), trigger: 'blur' },
{ max: 20, message: `${this.$t('common:ruleMessage:maxLength')} 20` }
]
{
required: true,
message: this.$t("login:formRule:password"),
trigger: "blur",
},
{ max: 20, message: `${this.$t("common:ruleMessage:maxLength")} 20` },
],
},
loading: false,
passwordType: 'password',
passwordType: "password",
loginType: null,
location: null,
isShow: false,
Img1
}
Img1,
};
},
computed: {
...mapGetters([
'asyncRoutes',
'routes',
'language'
])
...mapGetters(["asyncRoutes", "routes", "language"]),
},
mounted() {
this.loginType = this.$route.query.loginType
this.location = this.$route.query.location
zzSessionStorage.setItem('loginType', this.loginType)
localStorage.setItem('location', this.location)
if (process.env.VUE_APP_OSS_CONFIG_REGION === 'oss-us-west-1') {
this.$i18n.locale = 'en'
this.setLanguage('en')
this.$updateDictionary()
this.loginType = this.$route.query.loginType;
this.location = this.$route.query.location;
zzSessionStorage.setItem("loginType", this.loginType);
localStorage.setItem("location", this.location);
if (process.env.VUE_APP_OSS_CONFIG_REGION === "oss-us-west-1") {
this.$i18n.locale = "en";
this.setLanguage("en");
this.$updateDictionary();
} else {
if (this.location === 'USA') {
this.$i18n.locale = 'en'
this.setLanguage('en')
this.$updateDictionary()
if (this.location === "USA") {
this.$i18n.locale = "en";
this.setLanguage("en");
this.$updateDictionary();
} else {
this.$i18n.locale = 'zh'
this.setLanguage('zh')
this.$updateDictionary()
this.$i18n.locale = "zh";
this.setLanguage("zh");
this.$updateDictionary();
}
}
},
methods: {
...mapMutations({ setLanguage: 'lang/setLanguage' }),
...mapMutations({ setLanguage: "lang/setLanguage" }),
showPwd() {
if (this.passwordType === 'password') {
this.passwordType = ''
if (this.passwordType === "password") {
this.passwordType = "";
} else {
this.passwordType = 'password'
this.passwordType = "password";
}
this.$nextTick(() => {
this.$refs.password.focus()
})
this.$refs.password.focus();
});
},
handleLogin() {
this.loginType = this.$route.query.loginType
this.$refs.loginForm.validate(valid => {
this.loginType = this.$route.query.loginType;
this.$refs.loginForm.validate((valid) => {
if (valid) {
// this.isShow = true
this.loginIn()
this.loginIn();
} else {
return false
return false;
}
})
});
},
loginIn() {
this.loading = true
this.$store.dispatch('user/login', this.loginForm).then((res) => {
this.loading = true;
this.$store
.dispatch("user/login", this.loginForm)
.then((res) => {
if (!res) {
// ,
this.$message.success(this.$t('login:message:login1'))
this.$message.success(this.$t("login:message:login1"));
setTimeout(() => {
this.$router.push({ path: `/recompose?userName=${this.loginForm.username}` })
}, 500)
return
this.$router.push({
path: `/recompose?userName=${this.loginForm.username}`,
});
}, 500);
return;
}
this.$store.dispatch('permission/generateRoutes').then(res => {
this.loading = false
this.$store.dispatch("permission/generateRoutes").then((res) => {
this.loading = false;
if (res && res.length > 0) {
this.$store.dispatch('global/getNoticeList')
this.$router.addRoutes(res)
if (this.loginType === 'DevOps') {
this.$router.replace({ path: res[0].path })
return
this.$store.dispatch("global/getNoticeList");
this.$router.addRoutes(res);
if (this.loginType === "DevOps") {
this.$router.replace({ path: res[0].path });
return;
}
if (this.hasPermi(['role:radmin'])) {
this.$router.replace({ path: res[0].path })
return
if (this.hasPermi(["role:radmin"])) {
this.$router.replace({ path: res[0].path });
return;
}
if (this.hasPermi(['role:pm', 'role:crc', 'role:crc'])) {
this.$router.replace({ path: '/trials/trials-inspection' })
}else if(this.hasPermi(['role:oa'])){
this.$router.replace({ path: '/system' })
if (this.hasPermi(["role:pm"])) {
this.$router.replace({ path: "/trials/trials-inspection" });
} else if (this.hasPermi(["role:oa"])) {
this.$router.replace({ path: "/system" });
} else {
this.$router.replace({ path: '/trials' })
this.$router.replace({ path: "/trials" });
}
} else {
//
this.$message.warning(this.$t('login:message:login2'))
this.$message.warning(this.$t("login:message:login2"));
}
})
});
})
.catch(() => {
this.loading = false
})
this.loading = false;
});
},
onSuccess() {
this.isShow = false
this.loginIn()
this.isShow = false;
this.loginIn();
},
handleResetPwd() {
this.$router.push({ name: 'Resetpassword' })
}
}
}
this.$router.push({ name: "Resetpassword" });
},
},
};
</script>
<style lang="scss">
@ -300,9 +326,9 @@ $cursor: #fff;
</style>
<style lang="scss" scoped>
$bg:#2d3a4b;
$dark_gray:#889aa4;
$light_gray:#606266;
$bg: #2d3a4b;
$dark_gray: #889aa4;
$light_gray: #606266;
.login-container {
position: relative;
width: 100%;
@ -321,7 +347,7 @@ $light_gray:#606266;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
transform: translate(-50%, -50%);
// margin-top: -230px;
// margin-left: -400px;
width: 1200px;
@ -335,17 +361,17 @@ $light_gray:#606266;
float: left;
width: 50%;
height: 100%;
.login-logo{
.login-logo {
position: absolute;
top:35px;
top: 35px;
left: 50px;
img{
img {
height: 40px;
}
}
.login-image{
.login-image {
position: absolute;
top:10px;
top: 10px;
left: 0px;
// transform: translateY(-50%);
height: 100%;
@ -353,7 +379,6 @@ $light_gray:#606266;
height: 100%;
}
}
}
.login-r {
position: relative;
@ -366,12 +391,11 @@ $light_gray:#606266;
top: 50%;
// transform: translateY(-50%);
left: 50%;
transform:translate(-50%,-50%);
transform: translate(-50%, -50%);
width: 80%;
padding: 10px;
margin: 0 auto;
overflow: hidden;
}
.title-container {
// margin-bottom: 50px;
@ -415,7 +439,7 @@ $light_gray:#606266;
}
}
}
.login-footer{
.login-footer {
position: absolute;
bottom: 50px;
left: 0px;
@ -428,21 +452,20 @@ $light_gray:#606266;
align-items: center;
// color: rgb(180, 190, 199);
color: #909399;
a{
display:inline-block;
text-decoration:none;
height:20px;
line-height:20px;
a {
display: inline-block;
text-decoration: none;
height: 20px;
line-height: 20px;
display: flex;
justify-content: center;
}
span{
span {
margin: 0 2px;
}
img{
height:20px;
line-height:20px;
img {
height: 20px;
line-height: 20px;
}
// p{
// display: inline-block;
@ -453,5 +476,4 @@ $light_gray:#606266;
// }
}
}
</style>

View File

@ -0,0 +1,100 @@
<template>
<el-dialog
:visible.sync="visible"
:close-on-click-modal="false"
:title="title"
width="500px"
custom-class="base-dialog-wrapper"
append-to-body
>
<el-form
ref="editVisitForm"
:model="form"
:rules="rules"
size="small"
label-width="100px"
>
<div class="base-dialog-body">
<!--AE Title-->
<el-form-item label="AE Title" prop="calledAE">
<el-input v-model="form.calledAE" />
</el-form-item>
<!--IP-->
<el-form-item label="IP" prop="ip">
<el-input v-model="form.ip" />
</el-form-item>
<!--Port-->
<el-form-item label="Port" prop="port">
<el-input v-model="form.port" type="number" />
</el-form-item>
<!--Modality-->
<el-form-item label="Modality" prop="modality">
<el-input v-model="form.modality" />
</el-form-item>
<!--Description-->
<el-form-item label="Description" prop="description">
<el-input v-model="form.description" />
</el-form-item>
</div>
<div
class="base-dialog-footer"
style="text-align: right; margin-top: 10px"
>
<el-form-item style="text-align: right">
<el-button
size="small"
type="primary"
:disabled="btnLoading"
@click="handleCancel"
>
{{ $t("common:button:cancel") }}
</el-button>
<el-button
size="small"
type="primary"
:loading="btnLoading"
@click="handleSave"
>
{{ $t("common:button:save") }}
</el-button>
</el-form-item>
</div>
</el-form>
</el-dialog>
</template>
<script>
export default {
name: "editDicom",
props: {
visible: {
require: true,
default: false,
},
title: {
require: true,
default: "",
},
dicom: {
type: Object,
default: {},
},
},
data() {
return {
form: {},
rules: {
calledAE: [
{ required: true, message: "请输入AE Title", trigger: "blur" },
],
ip: [{ required: true, message: "请输入IP", trigger: "blur" }],
port: [{ required: true, message: "请输入pORT", trigger: "blur" }],
},
btnLoading: false,
};
},
methods: {
handleCancel() {},
handleSave() {},
},
};
</script>

View File

@ -1,11 +1,165 @@
<template>
<div class="dicomAE"></div>
<div class="dicomAE">
<div ref="leftContainer" class="left">
<el-form :inline="true">
<!--AE Title-->
<el-form-item label="AE Title" prop="CalledAE">
<el-input v-model="searchData.CalledAE" style="width: 140px" />
</el-form-item>
<!--IP-->
<el-form-item label="IP" prop="IP">
<el-input v-model="searchData.IP" style="width: 140px" />
</el-form-item>
<!--Port-->
<el-form-item label="Port" prop="Port">
<el-input v-model="searchData.Port" style="width: 140px" />
</el-form-item>
<el-form-item>
<el-button type="primary" size="mini" @click="getList"
>搜索</el-button
>
<el-button type="primary" size="mini" @click="reset"></el-button>
<el-button type="primary" size="mini" @click="openDialog('add')"
>新增</el-button
>
</el-form-item>
</el-form>
<el-table
v-loading="loading"
v-adaptive="{ bottomOffset: 45 }"
height="100"
:data="list"
class="table"
>
<!--AE Title-->
<el-table-column
label="AE Title"
prop="calledAE"
min-width="120"
show-overflow-tooltip
/>
<!--IP-->
<el-table-column
label="IP"
prop="ip"
min-width="120"
show-overflow-tooltip
/>
<!--Port-->
<el-table-column
label="Port"
prop="port"
min-width="120"
show-overflow-tooltip
/>
<!--Modality-->
<el-table-column
label="Modality"
prop="modality"
min-width="120"
show-overflow-tooltip
/>
<!--Description-->
<el-table-column
label="Description"
prop="description"
min-width="120"
show-overflow-tooltip
/>
<el-table-column
label="操作"
fixed="right"
prop="UserTypeShortName"
min-width="200"
show-overflow-tooltip
>
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="openDialog('edit', scope.row)"
>编辑</el-button
>
</template>
</el-table-column>
</el-table>
<div class="pagination" style="text-align: right; margin-top: 5px">
<pagination
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</div>
</div>
</div>
</template>
<script>
import Pagination from "@/components/Pagination";
export default {
name:"dicomAE"
}
name: "dicomAE",
components: { Pagination },
data() {
return {
//
searchData: {
CalledAE: null,
IP: null,
Port: null,
PageIndex: 1,
PageSize: 10,
},
total: 0,
//
loading: false,
list: [],
};
},
methods: {
//
getList() {},
//
reset() {},
//
openDialog(key, item) {},
},
};
</script>
<style lang="scss" scoped>
.dicomAE {
height: 100%;
box-sizing: border-box;
display: flex;
padding: 10px;
border-radius: 5px;
.left {
display: flex;
flex-direction: column;
width: 0;
flex-grow: 4;
// border-right: 1px solid #ccc;
.filter-container {
display: flex;
align-items: center;
margin: 5px;
}
.data-table {
flex: 1;
padding: 5px 0px;
}
.pagination-container {
text-align: right;
}
}
.right {
width: 0;
flex-grow: 6;
overflow-y: auto;
border-right: 1px solid #ccc;
}
.selected-row {
background-color: cadetblue;
}
}
</style>

View File

@ -249,11 +249,9 @@
min-width="200"
show-overflow-tooltip
v-if="
hasPermi([
'system:notice:edit',
'system:notice:publish',
'system:notice:back',
])
hasPermi(['system:notice:edit']) ||
hasPermi(['system:notice:publish']) ||
hasPermi(['system:notice:back'])
"
>
<template slot-scope="scope">

View File

@ -1,11 +1,11 @@
<template>
<div class="trials-navbar" style="position: relative">
<div class="leftMenu">
<img v-if="language === 'zh'" src="@/assets/zzlogo2.png" alt="">
<img v-else src="@/assets/zzlogo3.png" alt="">
<img v-if="language === 'zh'" src="@/assets/zzlogo2.png" alt="" />
<img v-else src="@/assets/zzlogo3.png" alt="" />
<span>
<!-- 中心影像系统EICS -->
{{ $t('trials:trials:title:eics') }}
{{ $t("trials:trials:title:eics") }}
</span>
</div>
<div class="center-menu">
@ -24,22 +24,38 @@
<!-- 工作台 -->
<!-- <span slot="title">{{ $t('trials:menuTitle:workbench') }}</span>
</el-menu-item> -->
<el-menu-item v-if="hasPermi(['role:pm', 'role:crc'])" index="1">
<el-menu-item v-if="hasPermi(['role:pm'])" index="1">
<i class="el-icon-odometer" />
<!-- 检查 -->
<span slot="title">{{ $t('trials:menuTitle:inspection') }}</span>
<span slot="title">{{ $t("trials:menuTitle:inspection") }}</span>
</el-menu-item>
<el-menu-item v-if="!hasPermi(['role:zys'])" index="2" :disabled="TotalNeedSignSystemDocCount !== 0">
<el-menu-item
v-if="!hasPermi(['role:zys'])"
index="2"
:disabled="TotalNeedSignSystemDocCount !== 0"
>
<i class="el-icon-box" />
<!-- 我的项目 -->
<span slot="title">
{{ $t('trials:tab:trials') }}
{{ $t("trials:tab:trials") }}
</span>
</el-menu-item>
<el-menu-item v-if="!hasPermi(['role:air', 'role:rpm', 'role:radmin', 'role:rcrc', 'role:rir', 'role:zys'])" index="3">
<el-menu-item
v-if="
!hasPermi([
'role:air',
'role:rpm',
'role:radmin',
'role:rcrc',
'role:rir',
'role:zys',
])
"
index="3"
>
<i class="el-icon-chat-dot-square" />
<!-- 通知消息 -->
<span slot="title">{{ $t('trials:tab:notice') }}</span>
<span slot="title">{{ $t("trials:tab:notice") }}</span>
</el-menu-item>
<el-submenu index="4" class="my_info">
@ -49,109 +65,123 @@
<span v="userTypeShortName">({{ userTypeShortName }})</span>
</span>
<!-- 账户信息 -->
<el-menu-item v-if="!hasPermi(['role:air'])" index="4-2">{{ $t('trials:trials-myinfo:title:accountInfo') }}</el-menu-item>
<el-menu-item v-if="!hasPermi(['role:air'])" index="4-2">{{
$t("trials:trials-myinfo:title:accountInfo")
}}</el-menu-item>
<!-- 退出 -->
<el-menu-item index="4-3">{{ $t('trials:trials-myinfo:button:loginout') }}</el-menu-item>
<el-menu-item index="4-3">{{
$t("trials:trials-myinfo:button:loginout")
}}</el-menu-item>
</el-submenu>
</el-menu>
<!-- <TopLang />-->
<!-- <TopLang />-->
</div>
</div>
</template>
<script>
import { loginOut } from '@/api/user'
import { mapGetters, mapMutations } from 'vuex'
import TopLang from './topLang'
import NoticeMarquee from './noticeMarquee'
import { loginOut } from "@/api/user";
import { mapGetters, mapMutations } from "vuex";
import TopLang from "./topLang";
import NoticeMarquee from "./noticeMarquee";
export default {
components: { TopLang, NoticeMarquee },
data() {
return {
activeIndex: '2',
activeIndex: "2",
isReviewer: false,
userTypeShortName: zzSessionStorage.getItem('userTypeShortName'),
notice: ''
}
userTypeShortName: zzSessionStorage.getItem("userTypeShortName"),
notice: "",
};
},
computed: {
...mapGetters(['sidebar', 'name', 'userName', 'device', 'TotalNeedSignSystemDocCount', 'language'])
...mapGetters([
"sidebar",
"name",
"userName",
"device",
"TotalNeedSignSystemDocCount",
"language",
]),
},
watch: {
$route(v) {
this.changeRoute(v)
}
this.changeRoute(v);
},
},
created() {
this.isReviewer = JSON.parse(zzSessionStorage.getItem('IsReviewer'))
this.changeRoute(this.$route)
this.isReviewer = JSON.parse(zzSessionStorage.getItem("IsReviewer"));
this.changeRoute(this.$route);
},
methods: {
...mapMutations({ setLanguage: 'lang/setLanguage' }),
...mapMutations({ setLanguage: "lang/setLanguage" }),
changeRoute(v) {
if (v.path === '/trials/trials-inspection') {
this.activeIndex = '1'
if (v.path === "/trials/trials-inspection") {
this.activeIndex = "1";
}
if (v.path === '/trials/trials-list' || ~v.path.indexOf('/trials/trials-panel')) {
this.activeIndex = '2'
if (
v.path === "/trials/trials-list" ||
~v.path.indexOf("/trials/trials-panel")
) {
this.activeIndex = "2";
}
if (v.path === '/trials/trials-notice') {
this.activeIndex = '3'
if (v.path === "/trials/trials-notice") {
this.activeIndex = "3";
}
if (v.path === '/trials/trials-myinfo') {
this.activeIndex = '4-2'
if (v.path === "/trials/trials-myinfo") {
this.activeIndex = "4-2";
}
},
handleSelect(key, keyPath) {
switch (key) {
case '4-2':
this.go('/trials/trials-myinfo')
break
case '4-3':
this.logout()
break
case '1':
this.go('/trials/trials-inspection')
break
case '2':
if (~this.$route.path.indexOf('/trials/trials-panel')) {
return
case "4-2":
this.go("/trials/trials-myinfo");
break;
case "4-3":
this.logout();
break;
case "1":
this.go("/trials/trials-inspection");
break;
case "2":
if (~this.$route.path.indexOf("/trials/trials-panel")) {
return;
}
var lastWorkbench = zzSessionStorage.getItem('lastWorkbench')
var lastWorkbench = zzSessionStorage.getItem("lastWorkbench");
if (lastWorkbench) {
this.go(lastWorkbench)
this.go(lastWorkbench);
} else {
this.go('/trials/trials-list')
this.go("/trials/trials-list");
}
break
case '3':
this.go('/trials/trials-notice')
break
break;
case "3":
this.go("/trials/trials-notice");
break;
}
},
toggleSideBar() {
this.$store.dispatch('app/toggleSideBar')
this.$store.dispatch("app/toggleSideBar");
},
async logout() {
await loginOut()
await this.$store.dispatch('user/logout')
this.$router.push(`/login`)
this.$i18n.locale = 'zh'
this.setLanguage('zh')
this.$updateDictionary()
await loginOut();
await this.$store.dispatch("user/logout");
this.$router.push(`/login`);
this.$i18n.locale = "zh";
this.setLanguage("zh");
this.$updateDictionary();
},
go(value) {
this.$router.push({ path: value })
this.$router.push({ path: value });
},
account() {
this.$router.push({ name: 'Account' })
}
}
}
this.$router.push({ name: "Account" });
},
},
};
</script>
<style lang="scss" scoped>
.trials-navbar{
.trials-navbar {
display: flex;
flex-direction: row;
justify-content: space-between;
@ -159,24 +189,25 @@ export default {
overflow: hidden;
background: #fff;
box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
.el-breadcrumb__item{
.el-breadcrumb__item {
font-size: 16px;
}
.leftMenu{
.leftMenu {
display: flex;
align-items: center;
padding-left: 20px;
img{
img {
height: 28px;
margin-right: 10px;
}
span{
span {
font-size: 20px;
position: relative;
top: -1px;
}
}
.right-menu, .center-menu {
.right-menu,
.center-menu {
display: flex;
flex-direction: row;
justify-content: space-between;
@ -226,7 +257,7 @@ export default {
}
</style>
<style>
.el-menu--horizontal>.my_info.el-submenu .el-submenu__icon-arrow {
.el-menu--horizontal > .my_info.el-submenu .el-submenu__icon-arrow {
margin-top: 0;
}
}
</style>

View File

@ -0,0 +1,260 @@
<template>
<el-dialog
:visible.sync="visible"
:close-on-click-modal="false"
:fullscreen="true"
custom-class="upload-dialog"
:before-close="beforeCloseStudyDig"
>
<span slot="title"
>{{ $t("trials:hirVisit:button:editStudy") }}{{
$t("trials:globalReview:title:subject")
}}T0001132{{ $t("trials:studyList:table:visit") }}ZhangSan
</span>
<!--当前检查--->
<div class="topTable">
<div class="title">
<span>{{ $t("trials:hirVisit:titleMessage:currentStudy") }}</span>
<div class="btnBox">
<el-button type="primary" @click="submit">
{{ $t("trials:seletctedReviews:button:confirm") }}
</el-button>
<el-button @click="preview">
{{ $t("trials:readingPeriod:verify:title:preview") }}
</el-button>
</div>
</div>
<!--当前检查列表 @selection-change="handleSelectChange"--->
<el-table
ref="addTrialsList"
v-loading="topLoading"
:data="topList"
stripe
height="30vh"
>
<!-- <el-table-column type="selection" align="center" width="45" /> -->
<!--检查编号-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:studyId')"
show-overflow-tooltip
></el-table-column>
<!--检查类型-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:modality')"
show-overflow-tooltip
></el-table-column>
<!--序列数量-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:seriesCount')"
show-overflow-tooltip
></el-table-column>
<!--检查日期-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:studyDate')"
show-overflow-tooltip
></el-table-column>
<!--所属访视-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:hirVisit:table:ownershipVisit')"
show-overflow-tooltip
></el-table-column>
<!--操作-->
<el-table-column
:label="$t('common:action:action')"
width="300"
class-name="actionBox"
>
<template slot-scope="scope">
<!-- 查看 -->
<el-button type="text" @click.stop="detail(scope.row, 'top')">{{
$t("trials:enrolledReviews:button:view")
}}</el-button>
<!-- 移除 -->
<el-button type="text" @click.stop="remove(scope.row)">{{
$t("common:button:remove")
}}</el-button>
</template>
</el-table-column>
</el-table>
</div>
<!--可选检查-->
<div class="bottomTable">
<p>{{ $t("trials:hirVisit:titleMessage:optionalStudy") }}</p>
<div class="form">
<el-form :inline="true" class="base-search-form">
<!-- 检查编号 -->
<el-form-item :label="$t('trials:uploadMonitor:table:studyId')">
<el-input v-model="searchData.SubjectInfo" style="width: 100px" />
</el-form-item>
<!-- 检查日期 -->
<el-form-item :label="$t('trials:uploadedDicoms:table:studyDate')">
<el-date-picker
v-model="searchData.date"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<!-- 查询 -->
<el-button
type="primary"
icon="el-icon-search"
@click="handleSearch"
>
{{ $t("common:button:search") }}
</el-button>
<!-- 重置 -->
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button>
</el-form-item>
</el-form>
<el-button icon="el-icon-refresh" @click="addTrials">
{{ $t("trials:readingReport:button:refresh") }}
</el-button>
</div>
<el-table
ref="addTrialsList"
v-loading="bottomLoading"
v-adaptive="{ bottomOffset: 60 }"
:data="bottomList"
stripe
height="100"
@selection-change="handleSelectChange"
>
<el-table-column type="selection" align="center" width="45" />
<!--检查编号-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:studyId')"
show-overflow-tooltip
></el-table-column>
<!--检查类型-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:modality')"
show-overflow-tooltip
></el-table-column>
<!--序列数量-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:seriesCount')"
show-overflow-tooltip
></el-table-column>
<!--检查日期-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:studyDate')"
show-overflow-tooltip
></el-table-column>
<!--所属访视-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:hirVisit:table:ownershipVisit')"
show-overflow-tooltip
></el-table-column>
<!--操作-->
<el-table-column
:label="$t('common:action:action')"
width="300"
class-name="actionBox"
>
<template slot-scope="scope">
<!-- 查看 -->
<el-button type="text" @click.stop="detail(scope.row, 'bottom')">{{
$t("trials:enrolledReviews:button:view")
}}</el-button>
<!-- 添加 -->
<el-button type="text" @click.stop="add(scope.row)">{{
$t("common:button:add")
}}</el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-dialog>
</template>
<script>
export default {
name: "editStudyList",
props: {
visible: {
require: true,
default: false,
},
},
data() {
return {
//
searchData: {},
//
bottomList: [{ IsUrgent: 2 }],
bottomLoading: false,
//
topList: [{ IsUrgent: 1 }],
topLoading: false,
};
},
methods: {
//
beforeCloseStudyDig() {
this.$emit("update:visible", false);
},
//
preview() {},
//
submit() {},
//
detail(item, key) {},
//
remove(item) {},
//
handleSearch() {},
//
handleReset() {},
//
handleSelectChange() {},
//
add(item) {},
},
};
</script>
<style lang="scss" scoped>
.topTable {
.title {
display: flex;
align-items: center;
justify-content: space-between;
}
}
.bottomTable {
.form {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
}
}
</style>

View File

@ -0,0 +1,281 @@
<template>
<BaseContainer>
<!-- 搜索框 -->
<template slot="search-container">
<el-form :inline="true">
<!-- 受试者编号 -->
<el-form-item :label="$t('trials:crcQuestion:table:subjectId')">
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
</el-form-item>
<!-- 患者姓名 -->
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
</el-form-item>
<!-- 患者性别 -->
<el-form-item :label="$t('trials:subject:table:gender')">
<el-select
v-model="searchData.SiteId"
clearable
filterable
style="width: 150px"
>
<el-option
v-for="item of $d.sex"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<!-- 访视名称 -->
<el-form-item :label="$t('trials:globalReview:table:visitName')">
<el-select
v-model="searchData.SiteId"
clearable
filterable
style="width: 150px"
>
<el-option
v-for="item of visitOptions"
:key="item.SiteId"
:label="item.TrialSiteCode"
:value="item.SiteId"
/>
</el-select>
</el-form-item>
<!-- 状态 -->
<el-form-item :label="$t('trials:trials-list:table:status')">
<el-select
v-model="searchData.SiteId"
clearable
filterable
style="width: 150px"
>
<el-option
v-for="item of siteOptions"
:key="item.SiteId"
:label="item.TrialSiteCode"
:value="item.SiteId"
/>
</el-select>
</el-form-item>
<el-form-item>
<!-- 查询 -->
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t("common:button:search") }}
</el-button>
<!-- 重置 -->
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button>
</el-form-item>
</el-form>
</template>
<!-- 访视列表 -->
<template slot="main-container">
<el-table
v-loading="loading"
v-adaptive="{ bottomOffset: 60 }"
:data="list"
stripe
height="100"
@sort-change="handleSortByColumn"
>
<el-table-column width="40">
<template>
<i
class="el-icon-warning-outline"
:title="$t('trials:hirVisit:tipMessage:tipOne')"
style="color: red"
></i>
</template>
</el-table-column>
<!-- 受试者编号 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:uploadMonitor:table:subjectId')"
show-overflow-tooltip
/>
<!-- 患者编号 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:uploadMonitor:table:subjectId')"
show-overflow-tooltip
/>
<!-- 患者姓名 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:uploadDicomList:table:patientName')"
show-overflow-tooltip
/>
<!-- 性别 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:subject:table:gender')"
show-overflow-tooltip
/>
<!-- 访视名称 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:uploadMonitor:table:visitName')"
show-overflow-tooltip
/>
<!-- 数据收集 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:crcUpload:table:dataCollected')"
show-overflow-tooltip
/>
<!-- 最早拍片日期 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:trials-panel:table:EarliestScanDate')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 最晚拍片日期 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:linkedRP:table:latestScanDate')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 状态 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:trials-list:table:status')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 提交时间 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:crcUpload:table:submitTime')"
show-overflow-tooltip
sortable="custom"
/>
<!--操作-->
<el-table-column
:label="$t('common:action:action')"
min-width="100"
fixed="right"
v-if="
hasPermi(['trials:trials-panel:hirVisit:edit']) ||
hasPermi(['trials:trials-panel:hirVisit:submit']) ||
hasPermi(['trials:trials-panel:hirVisit:remove']) ||
hasPermi(['trials:trials-panel:hirVisit:result']) ||
hasPermi(['trials:trials-panel:hirVisit:downlaod'])
"
>
<template slot-scope="scope">
<!--修改检查-->
<el-button
type="text"
v-hasPermi="['trials:trials-panel:hirVisit:edit']"
@click="editStudy(scope.row)"
>{{ $t("trials:hirVisit:button:editStudy") }}</el-button
>
<!--提交-->
<el-button
type="text"
v-hasPermi="['trials:trials-panel:hirVisit:submit']"
@click="submit(scope.row)"
>{{ $t("common:button:submit") }}</el-button
>
<!--删除-->
<el-button
type="text"
v-hasPermi="['trials:trials-panel:hirVisit:remove']"
@click="remove(scope.row)"
>{{ $t("common:button:delete") }}</el-button
>
<!--评估结果-->
<el-button
type="text"
v-hasPermi="['trials:trials-panel:hirVisit:result']"
@click="result(scope.row)"
>{{ $t("trials:adReview:title:result") }}</el-button
>
<!--下载影像-->
<el-button
type="text"
v-hasPermi="['trials:trials-panel:hirVisit:download']"
@click="downloadImage(scope.row)"
>{{ $t("trials:reading:button:uploadImages") }}</el-button
>
<!--下载医疗报告-->
<el-button type="text" @click="downloadReport(scope.row)">{{
$t("trials:reading:button:uploadReport")
}}</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</template>
<!--修改检查-->
<editStudyList :visible.sync="editStudyVisible" />
</BaseContainer>
</template>
<script>
import BaseContainer from "@/components/BaseContainer";
import Pagination from "@/components/Pagination";
import editStudyList from "./components/edit-study-list.vue";
export default {
name: "hirVisit",
components: { BaseContainer, Pagination, editStudyList },
data() {
return {
//
searchData: {},
visitOptions: [],
//
list: [
{
StudyCode: 1,
},
],
loading: false,
total: 0,
//
editStudyVisible: false,
};
},
methods: {
//
handleSearch() {},
//
handleSearch() {},
//
handleSortByColumn() {},
//
getList() {},
//
editStudy(item) {
this.editStudyVisible = true;
},
//
submit() {},
//
remove() {},
//
result() {},
//
downloadImage() {},
//
downloadReport() {},
},
};
</script>

View File

@ -0,0 +1,230 @@
<template>
<BaseContainer>
<!-- 搜索框 -->
<template slot="search-container">
<el-form :inline="true">
<!-- 受试者编号 -->
<el-form-item :label="$t('trials:crcQuestion:table:subjectId')">
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
</el-form-item>
<!-- 患者编号 -->
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
</el-form-item>
<!-- 患者姓名 -->
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
</el-form-item>
<!-- 访视名称 -->
<el-form-item :label="$t('trials:globalReview:table:visitName')">
<el-select
v-model="searchData.SiteId"
clearable
filterable
style="width: 150px"
>
<el-option
v-for="item of visitOptions"
:key="item.SiteId"
:label="item.TrialSiteCode"
:value="item.SiteId"
/>
</el-select>
</el-form-item>
<!-- 任务状态 -->
<el-form-item :label="$t('trials:readTask:table:taskState')">
<el-select
v-model="searchData.SiteId"
clearable
filterable
style="width: 150px"
>
<el-option
v-for="item of visitOptions"
:key="item.SiteId"
:label="item.TrialSiteCode"
:value="item.SiteId"
/>
</el-select>
</el-form-item>
<!-- 阅片状态 -->
<el-form-item :label="$t('trials:readTask:table:readingTaskState')">
<el-select
v-model="searchData.SiteId"
clearable
filterable
style="width: 150px"
>
<el-option
v-for="item of visitOptions"
:key="item.SiteId"
:label="item.TrialSiteCode"
:value="item.SiteId"
/>
</el-select>
</el-form-item>
<!-- 阅片完成时间 -->
<el-form-item :label="$t('trials:reviewTrack:table:signTime')">
<el-date-picker
v-model="searchData.date"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<!-- 查询 -->
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t("common:button:search") }}
</el-button>
<!-- 重置 -->
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button>
</el-form-item>
</el-form>
</template>
<!-- 阅片管理列表 -->
<template slot="main-container">
<el-table
v-loading="loading"
v-adaptive="{ bottomOffset: 60 }"
:data="list"
stripe
height="100"
@sort-change="handleSortByColumn"
>
<!-- 受试者编号 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:uploadMonitor:table:subjectId')"
show-overflow-tooltip
/>
<!-- 患者编号 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:uploadMonitor:table:subjectId')"
show-overflow-tooltip
/>
<!-- 患者姓名 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:uploadDicomList:table:patientName')"
show-overflow-tooltip
/>
<!-- 访视名称 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:uploadMonitor:table:visitName')"
show-overflow-tooltip
/>
<!-- 任务创建时间 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:reviewTrack:table:createTime')"
show-overflow-tooltip
/>
<!-- 任务状态 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:readTask:table:taskState')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 阅片人 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:reviewAssign:searchForm:reader')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 阅片标准 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:processCfg:form:criterion')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 建议完成时间 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:consistencyAnalysis:table:suggesteFinishedTime')"
show-overflow-tooltip
sortable="custom"
/>
<!--操作-->
<el-table-column
:label="$t('common:action:action')"
min-width="100"
fixed="right"
>
<template slot-scope="scope">
<!--阅片结果-->
<el-button type="text" @click="readResult(scope.row)">{{
$t("trials:hirVisit:button:editStudy")
}}</el-button>
<!--下载报告-->
<el-button type="text" @click="downloadReport(scope.row)">{{
$t("common:button:submit")
}}</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</template>
</BaseContainer>
</template>
<script>
import BaseContainer from "@/components/BaseContainer";
import Pagination from "@/components/Pagination";
export default {
name: "readManagenent",
components: { BaseContainer, Pagination },
data() {
return {
//
searchData: {},
visitOptions: [],
//
list: [
{
StudyCode: 1,
},
],
loading: false,
total: 0,
//
editStudyVisible: false,
};
},
methods: {
//
handleSearch() {},
//
handleSearch() {},
//
handleSortByColumn() {},
//
getList() {},
//
downloadReport() {},
//
readResult() {},
},
};
</script>

View File

@ -1,120 +1,139 @@
<template>
<BaseContainer v-loading="loading" style="height:100%;background-color: #fff;">
<el-tabs v-model="TrialReadingCriterionId" type="border-card">
<el-tab-pane v-for="item of trialCriterionList" :key="item.TrialReadingCriterionId" :label="item.TrialReadingCriterionName" :name="item.TrialReadingCriterionId">
<div v-if="TrialReadingCriterionId === item.TrialReadingCriterionId">
<div slot="search-container" style="position:relative;">
<BaseContainer
v-loading="loading"
style="height: 100%; background-color: #fff"
>
<div slot="search-container" style="position: relative">
<el-form :inline="true">
<!-- 受试者编号 -->
<el-form-item :label="$t('trials:readTask:table:subjectCode')">
<!-- 者编号 -->
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
<el-input
v-model="searchData.SubjectCode"
style="width:130px;"
style="width: 130px"
clearable
/>
</el-form-item>
<!-- 患者姓名 -->
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
<el-input
v-model="searchData.SubjectCode"
style="width: 130px"
clearable
/>
</el-form-item>
<!-- 访视名称 -->
<el-form-item
style="margin-bottom: 10px"
:label="$t('trials:adReview:table:visitName')"
>
<el-select
v-model="searchData.TaskState"
clearable
style="width: 120px"
>
<el-option
v-for="i of $d.TaskState"
:key="'TaskState' + i.label"
:value="i.value"
:label="i.label"
/>
</el-select>
</el-form-item>
<!-- 任务状态 -->
<el-form-item style="margin-bottom:10px" :label="$t('trials:readTask:table:taskState')">
<el-select v-model="searchData.TaskState" clearable style="width:120px;">
<el-option v-for="i of $d.TaskState" :key="'TaskState' + i.label" :value="i.value" :label="i.label" />
<el-form-item
style="margin-bottom: 10px"
:label="$t('trials:readTask:table:taskState')"
>
<el-select
v-model="searchData.TaskState"
clearable
style="width: 120px"
>
<el-option
v-for="i of $d.TaskState"
:key="'TaskState' + i.label"
:value="i.value"
:label="i.label"
/>
</el-select>
</el-form-item>
<!-- 任务类型 -->
<el-form-item style="margin-bottom:10px" :label="$t('trials:readTask:table:readingCategory')">
<el-select v-model="searchData.ReadingCategory" clearable style="width:120px;">
<el-option v-for="i of $d.ReadingCategory" :key="'ReadingCategory' + i.label" :value="i.value" :label="i.label" />
<el-form-item
style="margin-bottom: 10px"
:label="$t('trials:readTask:table:readingCategory')"
>
<el-select
v-model="searchData.ReadingCategory"
clearable
style="width: 120px"
>
<el-option
v-for="i of $d.ReadingCategory"
:key="'ReadingCategory' + i.label"
:value="i.value"
:label="i.label"
/>
</el-select>
</el-form-item>
<el-form-item style="margin-bottom:10px" :label="$t('trials:reviewTrack:table:auditStatus')">
<el-select v-model="searchData.PIAuditState" clearable style="width:120px;">
<el-option v-for="item of $d.PIAuditState" :key="'PIAuditState' + item.label" :value="item.value" :label="item.label" />
</el-select>
<!-- 签名时间 -->
<el-form-item :label="$t('trials:readTask:table:signTime')">
<el-date-picker
v-model="searchData.date"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<!-- 查询 -->
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
{{ $t("common:button:search") }}
</el-button>
<!-- 重置 -->
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
{{ $t('common:button:reset') }}
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button>
</el-form-item>
</el-form>
<!-- <span style="position: absolute;right: 0;top: 0;">
<el-button
v-hasPermi="['trials:readTask:reread']"
:disabled="list.length ===0"
type="primary"
icon="el-icon-refresh-right"
@click="handleReread"
>
{{ $t('trials:readTask:button:reread') }}
</el-button>
</span> -->
</div>
<div slot="main-container">
<el-table
v-adaptive="{bottomOffset:75}"
v-adaptive="{ bottomOffset: 75 }"
:data="list"
stripe
height="100"
@sort-change="handleSortChange"
>
<el-table-column type="index" width="40" align="left" />
<!-- 是否加急 -->
<el-table-column
prop="IsUrgent"
min-width="100"
:label="$t('trials:readTask:table:isUrgent')"
sortable="custom"
show-overflow-tooltip
>
<template slot-scope="scope">
<el-tag v-if="scope.row.IsUrgent" type="danger">{{ $fd('YesOrNo', scope.row.IsUrgent) }}</el-tag>
<el-tag v-else type="primary">{{ $fd('YesOrNo', scope.row.IsUrgent) }}</el-tag>
</template>
</el-table-column>
<!-- 任务编号 -->
<el-table-column
prop="TaskCode"
min-width="100"
:label="$t('trials:readTask:table:taskCode')"
sortable="custom"
show-overflow-tooltip
/>
<!-- 受试者编号 -->
<!-- 患者编号 -->
<el-table-column
prop="SubjectCode"
min-width="100"
:label="$t('trials:readTask:table:subjectCode')"
:label="$t('trials:uploadDicomList:table:pId')"
sortable="custom"
show-overflow-tooltip
/>
<!-- 盲态任务标识 -->
<!-- <el-table-column
prop="TaskBlindName"
<!-- 患者姓名 -->
<el-table-column
prop="SubjectCode"
min-width="100"
:label="$t('trials:readTask:table:blindName')"
:label="$t('trials:uploadDicomList:table:patientName')"
sortable="custom"
show-overflow-tooltip
/> -->
/>
<!-- 访视名称 -->
<el-table-column
prop="TaskName"
:label="$t('trials:readTask:table:TaskName')"
:label="$t('trials:adReview:table:visitName')"
min-width="100"
sortable="custom"
show-overflow-tooltip
/>
<!-- 阅片标准 -->
<el-table-column
prop="TrialReadingCriterionName"
:label="$t('trials:readTask:table:criterionName')"
min-width="140"
show-overflow-tooltip
sortable="custom"
/>
<!-- 任务状态 -->
<el-table-column
prop="TaskState"
@ -124,11 +143,21 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<el-tag v-if="scope.row.TaskState === 0" type="primary">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
<el-tag v-if="scope.row.TaskState === 1" type="info">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
<el-tag v-if="scope.row.TaskState === 3" type="danger">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
<el-tag v-if="scope.row.TaskState === 4" type="warning">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
<el-tag v-if="scope.row.TaskState === 5" type="danger">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
<el-tag v-if="scope.row.TaskState === 0" type="primary">{{
$fd("TaskState", scope.row.TaskState)
}}</el-tag>
<el-tag v-if="scope.row.TaskState === 1" type="info">{{
$fd("TaskState", scope.row.TaskState)
}}</el-tag>
<el-tag v-if="scope.row.TaskState === 3" type="danger">{{
$fd("TaskState", scope.row.TaskState)
}}</el-tag>
<el-tag v-if="scope.row.TaskState === 4" type="warning">{{
$fd("TaskState", scope.row.TaskState)
}}</el-tag>
<el-tag v-if="scope.row.TaskState === 5" type="danger">{{
$fd("TaskState", scope.row.TaskState)
}}</el-tag>
</template>
</el-table-column>
<!-- 任务类型 -->
@ -140,44 +169,20 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<el-tag v-if="scope.row.ReadingCategory === 1" type="primary">{{ $fd('ReadingCategory', scope.row.ReadingCategory) }}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 2" type="info">{{ $fd('ReadingCategory', scope.row.ReadingCategory) }}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 4" type="danger">{{ $fd('ReadingCategory', scope.row.ReadingCategory) }}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 5" type="warning">{{ $fd('ReadingCategory', scope.row.ReadingCategory) }}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 1" type="primary">{{
$fd("ReadingCategory", scope.row.ReadingCategory)
}}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 2" type="info">{{
$fd("ReadingCategory", scope.row.ReadingCategory)
}}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 4" type="danger">{{
$fd("ReadingCategory", scope.row.ReadingCategory)
}}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 5" type="warning">{{
$fd("ReadingCategory", scope.row.ReadingCategory)
}}</el-tag>
</template>
</el-table-column>
<!-- 任务类型 -->
<el-table-column
prop="UserName"
:label="$t('trials:consistencyAnalysis:table:reader')"
width="120"
sortable="custom"
show-overflow-tooltip
>
<template slot-scope="scope">
{{scope.row.UserName}}({{scope.row.FullName}})
</template>
</el-table-column>
<!-- 阅片状态 -->
<!-- <el-table-column
prop="TaskAllocationState"
min-width="100"
label="阅片状态"
show-overflow-tooltip
>
<template slot-scope="scope">
<el-tag v-if="scope.row.ReadingTaskState === 2" type="primary">{{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}</el-tag>
<el-tag v-else type="danger">{{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}</el-tag>
</template>
</el-table-column> -->
<!-- 分配时间 -->
<!-- <el-table-column-->
<!-- prop="AllocateTime"-->
<!-- min-width="120"-->
<!-- :label="$t('trials:readTask:table:allocateTime')"-->
<!-- sortable="custom"-->
<!-- show-overflow-tooltip-->
<!-- />-->
<!-- 签名时间 -->
<el-table-column
prop="SignTime"
@ -196,27 +201,25 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<el-tag v-if="scope.row.ReReadingApplyState === 4 || scope.row.ReReadingApplyState === 5" type="danger">{{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}</el-tag>
<el-tag v-if="scope.row.ReReadingApplyState === 2" type="primary">{{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}</el-tag>
<el-tag v-if="scope.row.ReReadingApplyState === 3" type="warning">{{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}</el-tag>
</template>
</el-table-column>
<!-- 审核结果 -->
<el-table-column
prop="PIAuditState"
:label="$t('trials:auditRecord:table:auditResult')"
min-width="140"
sortable="custom"
show-overflow-tooltip
<el-tag
v-if="
scope.row.ReReadingApplyState === 4 ||
scope.row.ReReadingApplyState === 5
"
type="danger"
>{{
$fd("ReReadingApplyState", scope.row.ReReadingApplyState)
}}</el-tag
>
<template slot-scope="scope">
<el-tag v-if="scope.row.PIAuditState === 0" type="danger">{{ $fd('PIAuditState', scope.row.PIAuditState) }}</el-tag>
<el-tag v-else-if="scope.row.PIAuditState === 1" type="primary">{{ $fd('PIAuditState', scope.row.PIAuditState) }}</el-tag>
<el-tag v-else-if="scope.row.PIAuditState === 2" type="warning">{{ $fd('PIAuditState', scope.row.PIAuditState) }}
</el-tag>
<span v-else>{{ $fd('PIAuditState', scope.row.PIAuditState) }}</span>
<el-tag v-if="scope.row.ReReadingApplyState === 2" type="primary">{{
$fd("ReReadingApplyState", scope.row.ReReadingApplyState)
}}</el-tag>
<el-tag v-if="scope.row.ReReadingApplyState === 3" type="warning">{{
$fd("ReReadingApplyState", scope.row.ReReadingApplyState)
}}</el-tag>
</template>
</el-table-column>
<!--操作-->
<el-table-column
:label="$t('common:action:action')"
width="250"
@ -230,40 +233,32 @@
icon="el-icon-view"
@click="handleReadImage(scope.row)"
/>
<!-- 申请重阅 -->
<!-- 重阅 -->
<el-button
v-hasPermi="['trials:readTask:apply']"
:disabled="(scope.row.TaskState !== 0 && scope.row.TaskState !== 5) || scope.row.ReadingTaskState !== 2 || scope.row.ReReadingApplyState === 2 || scope.row.ReReadingApplyState === 4 || scope.row.ReReadingApplyState === 5"
circle
:title="$t('trials:readTask:button:reread')"
icon="el-icon-collection"
circle
:title="$t('trials:readTask:button:apply')"
@click="openApplyReReading(scope.row)"
@click="handleReadImage(scope.row)"
/>
<el-button
v-hasPermi="['trials:readTask:backwardHistory']"
:disabled="!scope.row.ReReadingApplyState"
icon="el-icon-toilet-paper"
circle
:title="$t('trials:readTask:button:backward')"
@click="reReadingHistory(scope.row, 1)"
/>
<!-- 审核记录 -->
<!-- 下载报告 -->
<el-button
circle
icon="el-icon-tickets"
title="审核记录"
:disabled="scope.row.TaskState !== 0 || scope.row.PIAuditState === 0"
@click="handleAuditRecords(scope.row)"
:title="$t('trials:reading:button:uploadReport')"
icon="el-icon-collection"
@click="handleReadImage(scope.row)"
/>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</div>
</div>
</el-tab-pane>
</el-tabs>
<el-dialog
v-if="ApplyforReasonVisible"
:title="$t('trials:readTask:dagTitle:apply')"
@ -282,29 +277,39 @@
label-width="380px"
>
<!-- 申请原因 -->
<el-divider content-position="left">{{ $t('trials:readTask:title:applyReason') }}</el-divider>
<el-divider content-position="left">{{
$t("trials:readTask:title:applyReason")
}}</el-divider>
<!-- 申请原因 -->
<el-form-item
:label="$t('trials:readTask:title:applyReason')"
prop="Type"
:rules="[
{ required: true, message: $t('common:ruleMessage:select')},
{ required: true, message: $t('common:ruleMessage:select') },
]"
>
<el-radio-group v-model="ApplyforReasonForm.Type">
<!-- 阅片记录错误 -->
<el-radio :label="1">{{ $t('trials:readTask:option:errorRecords') }}</el-radio>
<el-radio :label="1">{{
$t("trials:readTask:option:errorRecords")
}}</el-radio>
<!-- 其他 -->
<el-radio :label="2">{{ $t('trials:readTask:option:other') }}</el-radio>
<el-radio :label="2">{{
$t("trials:readTask:option:other")
}}</el-radio>
</el-radio-group>
</el-form-item>
<!-- 备注 -->
<el-form-item v-if="ApplyforReasonForm.Type === 2" :label="$t('trials:readTask:title:remark')" prop="RequestReReadingReason">
<el-form-item
v-if="ApplyforReasonForm.Type === 2"
:label="$t('trials:readTask:title:remark')"
prop="RequestReReadingReason"
>
<el-input
v-model="ApplyforReasonForm.RequestReReadingReason"
type="textarea"
style="width: 400px"
:autosize="{ minRows: 2, maxRows: 4}"
:autosize="{ minRows: 2, maxRows: 4 }"
:placeholder="$t('common:ruleMessage:specify')"
maxlength="500"
show-word-limit
@ -315,23 +320,37 @@
:label="$t('trials:readTask:title:copyForm')"
prop="IsCopyOrigenalForms"
:rules="[
{ required: true, message: $t('common:ruleMessage:select')},
{ required: true, message: $t('common:ruleMessage:select') },
]"
>
<el-radio-group v-model="ApplyforReasonForm.IsCopyOrigenalForms">
<el-radio v-for="item of $d.YesOrNo" :key="`IsCopyOrigenalForms${item.raw.Id}`" :label="item.value">{{ item.label }}</el-radio>
<el-radio
v-for="item of $d.YesOrNo"
:key="`IsCopyOrigenalForms${item.raw.Id}`"
:label="item.value"
>{{ item.label }}</el-radio
>
</el-radio-group>
</el-form-item>
</el-form>
<!-- 影响的任务列表 -->
<el-divider content-position="left">{{ $t('trials:readTask:title:influenceList') }}</el-divider>
<div style="padding:10px;border: 1px solid #e0e0e0;max-height:650px;overflow-y: auto;">
<el-divider content-position="left">{{
$t("trials:readTask:title:influenceList")
}}</el-divider>
<div
style="
padding: 10px;
border: 1px solid #e0e0e0;
max-height: 650px;
overflow-y: auto;
"
>
<el-table
v-loading="loading"
:data="InfluenceTaskList"
stripe
height="100"
style="min-height: 400px;"
style="min-height: 400px"
>
<!-- 任务编号 -->
<el-table-column
@ -386,11 +405,21 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<el-tag v-if="scope.row.TaskState === 0" type="primary">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
<el-tag v-if="scope.row.TaskState === 1" type="info">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
<el-tag v-if="scope.row.TaskState === 3" type="danger">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
<el-tag v-if="scope.row.TaskState === 4" type="warning">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
<el-tag v-if="scope.row.TaskState === 5" type="danger">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag>
<el-tag v-if="scope.row.TaskState === 0" type="primary">{{
$fd("TaskState", scope.row.TaskState)
}}</el-tag>
<el-tag v-if="scope.row.TaskState === 1" type="info">{{
$fd("TaskState", scope.row.TaskState)
}}</el-tag>
<el-tag v-if="scope.row.TaskState === 3" type="danger">{{
$fd("TaskState", scope.row.TaskState)
}}</el-tag>
<el-tag v-if="scope.row.TaskState === 4" type="warning">{{
$fd("TaskState", scope.row.TaskState)
}}</el-tag>
<el-tag v-if="scope.row.TaskState === 5" type="danger">{{
$fd("TaskState", scope.row.TaskState)
}}</el-tag>
</template>
</el-table-column>
<!-- 任务类型 -->
@ -401,10 +430,18 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<el-tag v-if="scope.row.ReadingCategory === 1" type="primary">{{ $fd('ReadingCategory', scope.row.ReadingCategory) }}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 2" type="info">{{ $fd('ReadingCategory', scope.row.ReadingCategory) }}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 4" type="danger">{{ $fd('ReadingCategory', scope.row.ReadingCategory) }}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 5" type="warning">{{ $fd('ReadingCategory', scope.row.ReadingCategory) }}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 1" type="primary">{{
$fd("ReadingCategory", scope.row.ReadingCategory)
}}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 2" type="info">{{
$fd("ReadingCategory", scope.row.ReadingCategory)
}}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 4" type="danger">{{
$fd("ReadingCategory", scope.row.ReadingCategory)
}}</el-tag>
<el-tag v-if="scope.row.ReadingCategory === 5" type="warning">{{
$fd("ReadingCategory", scope.row.ReadingCategory)
}}</el-tag>
</template>
</el-table-column>
<!-- 阅片状态 -->
@ -415,8 +452,12 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<el-tag v-if="scope.row.ReadingTaskState === 2" type="primary">{{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}</el-tag>
<el-tag v-else type="danger">{{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}</el-tag>
<el-tag v-if="scope.row.ReadingTaskState === 2" type="primary">{{
$fd("ReadingTaskState", scope.row.ReadingTaskState)
}}</el-tag>
<el-tag v-else type="danger">{{
$fd("ReadingTaskState", scope.row.ReadingTaskState)
}}</el-tag>
</template>
</el-table-column>
<!-- 生效后影响 -->
@ -427,9 +468,15 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<el-tag v-if="scope.row.OptType === 0" type="primary">{{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}</el-tag>
<el-tag v-if="scope.row.OptType === 1" type="danger">{{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}</el-tag>
<el-tag v-if="scope.row.OptType === 2" type="warning">{{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}</el-tag>
<el-tag v-if="scope.row.OptType === 0" type="primary">{{
$fd("ReReadingOrBackOptType", scope.row.OptType)
}}</el-tag>
<el-tag v-if="scope.row.OptType === 1" type="danger">{{
$fd("ReReadingOrBackOptType", scope.row.OptType)
}}</el-tag>
<el-tag v-if="scope.row.OptType === 2" type="warning">{{
$fd("ReReadingOrBackOptType", scope.row.OptType)
}}</el-tag>
</template>
</el-table-column>
<!-- 阅片人 -->
@ -440,19 +487,34 @@
show-overflow-tooltip
>
<template v-if="scope.row.DoctorUser" slot-scope="scope">
{{ scope.row.DoctorUser.UserName }}({{ scope.row.DoctorUser.FullName }})
{{ scope.row.DoctorUser.UserName }}({{
scope.row.DoctorUser.FullName
}})
</template>
</el-table-column>
</el-table>
</div>
<div slot="footer" class="dialog-footer">
<!-- 取消 -->
<el-button :disabled="btnLoading" size="small" type="primary" @click="ApplyforReasonVisible = false;ApplyforReasonForm = { Type: null, RequestReReadingReason: null }">
{{ $t('common:button:cancel') }}
<el-button
:disabled="btnLoading"
size="small"
type="primary"
@click="
ApplyforReasonVisible = false;
ApplyforReasonForm = { Type: null, RequestReReadingReason: null };
"
>
{{ $t("common:button:cancel") }}
</el-button>
<!-- 保存 -->
<el-button :loading="btnLoading" size="small" type="primary" @click="applyReReading">
{{ $t('common:button:save') }}
<el-button
:loading="btnLoading"
size="small"
type="primary"
@click="applyReReading"
>
{{ $t("common:button:save") }}
</el-button>
</div>
</el-dialog>
@ -468,32 +530,36 @@
<ChatForm
:row-data="currentRow"
@getList="getList"
@close="auditRecordVisible=false"
@close="auditRecordVisible = false"
/>
</el-dialog>
</BaseContainer>
</template>
<script>
import { getIRHaveReadTaskList, aIRReReading } from '@/api/trials'
import { applyReReading, getReReadingOrBackInfluenceTaskList, getTrialCriterionList } from '@/api/trials/reading'
import { getIRHaveReadTaskList, aIRReReading } from "@/api/trials";
import {
applyReReading,
getReReadingOrBackInfluenceTaskList,
getTrialCriterionList,
} from "@/api/trials/reading";
import BaseContainer from '@/components/BaseContainer'
import Pagination from '@/components/Pagination'
import ChatForm from './components/ChatForm'
import { getToken } from '@/utils/auth'
import BaseContainer from "@/components/BaseContainer";
import Pagination from "@/components/Pagination";
import ChatForm from "./components/ChatForm";
import { getToken } from "@/utils/auth";
const searchDataDefault = () => {
return {
SubjectCode: '',
SortField: '',
SubjectCode: "",
SortField: "",
PageIndex: 1,
PageSize: 20,
TaskState: null,
ReadingCategory: null,
PIAuditState: null
}
}
PIAuditState: null,
};
};
export default {
name: 'ReadTask',
name: "ReadTask",
components: { BaseContainer, Pagination, ChatForm },
data() {
return {
@ -502,170 +568,213 @@ export default {
total: 0,
loading: false,
btnLoading: false,
trialId: '',
trialId: "",
ApplyforReasonVisible: false,
ApplyforReasonForm: {
Type: null,
RequestReReadingReason: null,
IsCopyOrigenalForms: null,
IsCopyFollowForms: null
IsCopyFollowForms: null,
},
InfluenceTaskList: [],
rules: {
Type: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }],
IsCopyOrigenalForms: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }],
RequestReReadingReason: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }]
Type: [
{
required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
],
IsCopyOrigenalForms: [
{
required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
],
RequestReReadingReason: [
{
required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
],
},
trialCriterionList: [],
TrialReadingCriterionId: '0',
TrialReadingCriterionId: "0",
openWindow: null,
auditRecordVisible: false
}
auditRecordVisible: false,
};
},
watch: {
TrialReadingCriterionId(v) {
if (v) {
this.getList()
}
this.getList();
}
},
},
mounted() {
this.trialId = this.$route.query.trialId
this.getTrialCriterionList()
this.trialId = this.$route.query.trialId;
this.getTrialCriterionList();
},
beforeDestroy() {
if (this.openWindow) {
this.openWindow.close()
this.openWindow.close();
}
},
methods: {
getTrialCriterionList() {
getTrialCriterionList(this.trialId).then(res => {
this.trialCriterionList = res.Result
this.TrialReadingCriterionId = this.trialCriterionList[0].TrialReadingCriterionId
}).catch(() => {})
getTrialCriterionList(this.trialId)
.then((res) => {
this.trialCriterionList = res.Result;
this.TrialReadingCriterionId =
this.trialCriterionList[0].TrialReadingCriterionId;
})
.catch(() => {});
},
//
reReadingHistory(row) {
this.$router.push({ path: `/trials/trials-panel/reading/rereadTask?trialId=${this.$route.query.trialId}&trialCode=${this.$route.query.trialCode}&researchProgramNo=${this.$route.query.researchProgramNo}&SiteId=${row.SiteId}&SubjectCode=${row.SubjectCode}&TaskName=${row.TaskName}` })
this.$router.push({
path: `/trials/trials-panel/reading/rereadTask?trialId=${this.$route.query.trialId}&trialCode=${this.$route.query.trialCode}&researchProgramNo=${this.$route.query.researchProgramNo}&SiteId=${row.SiteId}&SubjectCode=${row.SubjectCode}&TaskName=${row.TaskName}`,
});
},
getList() {
this.loading = true
this.searchData.TrialId = this.trialId
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId
getIRHaveReadTaskList(this.searchData).then(res => {
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
this.loading = false
}).catch(() => { this.loading = false })
this.loading = true;
this.searchData.TrialId = this.trialId;
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId;
getIRHaveReadTaskList(this.searchData)
.then((res) => {
this.list = res.Result.CurrentPageData;
this.total = res.Result.TotalCount;
this.loading = false;
})
.catch(() => {
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) {
if (this.openWindow) {
this.openWindow.close()
this.openWindow.close();
}
// var token = getToken()
// var routeData = ''
// routeData = this.$router.resolve({
// path: `/readingPage?subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&trialId=${this.trialId}&visitTaskId=${row.Id}&TokenKey=${token}`
// })
window.localStorage.setItem('TrialReadingCriterionId', this.TrialReadingCriterionId)
var token = getToken()
var path = ''
window.localStorage.setItem(
"TrialReadingCriterionId",
this.TrialReadingCriterionId
);
var token = getToken();
var path = "";
if (row.ReadingTool === 0) {
path = `/readingDicoms?TrialReadingCriterionId=${row.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&visitTaskId=${row.Id}&isReadingTaskViewInOrder=${row.IsReadingTaskViewInOrder}&criterionType=${row.CriterionType}&readingTool=${row.ReadingTool}&TokenKey=${token}`
path = `/readingDicoms?TrialReadingCriterionId=${row.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&visitTaskId=${row.Id}&isReadingTaskViewInOrder=${row.IsReadingTaskViewInOrder}&criterionType=${row.CriterionType}&readingTool=${row.ReadingTool}&TokenKey=${token}`;
} else {
path = `/noneDicomReading?TrialReadingCriterionId=${row.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&visitTaskId=${row.Id}&isReadingTaskViewInOrder=${row.IsReadingTaskViewInOrder}&criterionType=${row.CriterionType}&readingTool=${row.ReadingTool}&TokenKey=${token}`
path = `/noneDicomReading?TrialReadingCriterionId=${row.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&visitTaskId=${row.Id}&isReadingTaskViewInOrder=${row.IsReadingTaskViewInOrder}&criterionType=${row.CriterionType}&readingTool=${row.ReadingTool}&TokenKey=${token}`;
}
var routeData = this.$router.resolve({ path })
this.openWindow = window.open(routeData.href, '_blank')
var routeData = this.$router.resolve({ path });
this.openWindow = window.open(routeData.href, "_blank");
},
openApplyReReading(row) {
this.rowData = { ...row }
this.loading = true
getReReadingOrBackInfluenceTaskList(row.Id, true).then(res => {
this.InfluenceTaskList = res.Result
this.ApplyforReasonVisible = true
this.rowData = { ...row };
this.loading = true;
getReReadingOrBackInfluenceTaskList(row.Id, true)
.then((res) => {
this.InfluenceTaskList = res.Result;
this.ApplyforReasonVisible = true;
this.ApplyforReasonForm = {
Type: null,
Remake: null
}
this.loading = false
}).catch(() => { this.loading = false })
Remake: null,
};
this.loading = false;
})
.catch(() => {
this.loading = false;
});
},
//
applyReReading() {
this.$refs.reasonForm.validate((valid) => {
if (!valid) return
this.loading = true
this.btnLoading = true
if (!valid) return;
this.loading = true;
this.btnLoading = true;
var params = {
TaskIdList: [
this.rowData.Id
],
TaskIdList: [this.rowData.Id],
TrialId: this.$route.query.trialId,
IsCopyOrigenalForms: this.ApplyforReasonForm.IsCopyOrigenalForms,
IsCopyFollowForms: this.ApplyforReasonForm.IsCopyFollowForms,
RequestReReadingType: 1,
RequestReReadingReason: this.ApplyforReasonForm.Type === 2 ? this.ApplyforReasonForm.RequestReReadingReason : this.$t('trials:readTask:option:errorRecords') // ''
}
applyReReading(params).then(res => {
this.loading = false
this.btnLoading = false
this.$message.success(this.$t('trials:readTask:message:msg1')) // ''
this.getList()
this.ApplyforReasonVisible = false
}).catch(() => {
this.loading = false
this.btnLoading = false
})
RequestReReadingReason:
this.ApplyforReasonForm.Type === 2
? this.ApplyforReasonForm.RequestReReadingReason
: this.$t("trials:readTask:option:errorRecords"), // ''
};
applyReReading(params)
.then((res) => {
this.loading = false;
this.btnLoading = false;
this.$message.success(this.$t("trials:readTask:message:msg1")); // ''
this.getList();
this.ApplyforReasonVisible = false;
})
.catch(() => {
this.loading = false;
this.btnLoading = false;
});
});
},
//
handleReread() {
this.$confirm(this.$t('trials:readTask:message:msg2'), {
type: 'warning',
distinguishCancelAndClose: true
this.$confirm(this.$t("trials:readTask:message:msg2"), {
type: "warning",
distinguishCancelAndClose: true,
})
.then(() => {
this.loading = true
this.loading = true;
var params = {
trialId: this.trialId,
trialReadingCriterionId: this.TrialReadingCriterionId
}
aIRReReading(params).then(res => {
trialReadingCriterionId: this.TrialReadingCriterionId,
};
aIRReReading(params)
.then((res) => {
this.$message({
message: this.$t('trials:readTask:message:msg3'),
type: 'success'
message: this.$t("trials:readTask:message:msg3"),
type: "success",
});
this.getList();
})
this.getList()
}).catch(() => { this.loading = false })
console.log(params)
.catch(() => {
this.loading = false;
});
console.log(params);
})
.catch(() => { this.loading = false })
.catch(() => {
this.loading = false;
});
},
handleAuditRecords(row) {
this.currentRow = { ...row }
this.auditRecordVisible = true
this.currentRow = { ...row };
this.auditRecordVisible = true;
},
//
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>

View File

@ -1,45 +1,64 @@
<template>
<BaseContainer v-loading="loading" style="height:100%;background-color: #fff;">
<el-tabs v-if="TrialReadingCriterionId" v-model="TrialReadingCriterionId" type="border-card">
<el-tab-pane v-for="item of trialCriterionList" :key="item.TrialReadingCriterionId" :label="item.TrialReadingCriterionName" :name="item.TrialReadingCriterionId">
<div v-if="isReadingTaskViewInOrder && TrialReadingCriterionId === item.TrialReadingCriterionId">
<BaseContainer
v-loading="loading"
style="height: 100%; background-color: #fff"
>
<div slot="search-container">
<el-form :inline="true">
<!-- 受试者编号 -->
<el-form-item :label="$t('trials:pendingReadingTasks:table:subjectCode')">
<!-- 者编号 -->
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
<el-input
v-model="searchData.SubjectCode"
style="width:130px;"
style="width: 130px"
clearable
/>
</el-form-item>
<!-- 患者姓名 -->
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
<el-input
v-model="searchData.SubjectCode"
style="width: 130px"
clearable
/>
</el-form-item>
<el-form-item>
<!-- 查询 -->
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
{{ $t("common:button:search") }}
</el-button>
<!-- 重置 -->
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
{{ $t('common:button:reset') }}
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button>
</el-form-item>
</el-form>
</div>
<div slot="main-container">
<el-table
v-adaptive="{bottomOffset:75}"
v-adaptive="{ bottomOffset: 75 }"
:data="list"
stripe
height="100"
@sort-change="handleSortChange"
>
<el-table-column type="index" width="40" align="left" />
<!-- 受试者编号 -->
<!-- 者编号 -->
<el-table-column
prop="SubjectCode"
min-width="100"
:label="$t('trials:pendingReadingTasks:table:subjectCode')"
:label="$t('trials:uploadDicomList:table:pId')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 患者姓名 -->
<el-table-column
prop="SubjectCode"
min-width="100"
:label="$t('trials:uploadDicomList:table:patientName')"
show-overflow-tooltip
sortable="custom"
/>
@ -51,48 +70,25 @@
show-overflow-tooltip
sortable="custom"
/>
<!-- &lt;!&ndash; 未读任务数量 &ndash;&gt;-->
<!-- <el-table-column-->
<!-- prop="UnReadTaskCount"-->
<!-- min-width="100"-->
<!-- label="未读任务数量"-->
<!-- show-overflow-tooltip-->
<!-- />-->
<!-- &lt;!&ndash; 可读任务量 &ndash;&gt;-->
<!-- <el-table-column-->
<!-- prop="UnReadCanReadTaskCount"-->
<!-- min-width="100"-->
<!-- label="可读任务量"-->
<!-- show-overflow-tooltip-->
<!-- />-->
<!-- &lt;!&ndash; 已签名任务量 &ndash;&gt;-->
<!-- <el-table-column-->
<!-- prop="HaveReadTaskCount"-->
<!-- min-width="100"-->
<!-- label="已签名任务量"-->
<!-- show-overflow-tooltip-->
<!-- />-->
<!-- 建议完成时间 -->
<el-table-column
prop="SuggesteFinishedTime"
min-width="100"
:label="$t('trials:pendingReadingTasks:table:suggestedCompletionTime')"
:label="
$t('trials:pendingReadingTasks:table:suggestedCompletionTime')
"
show-overflow-tooltip
sortable="custom"
>
<template slot-scope="scope">
{{ scope.row.SuggesteFinishedTime? scope.row.SuggesteFinishedTime.split(':')[0] + ':00:00':'' }}
{{
scope.row.SuggesteFinishedTime
? scope.row.SuggesteFinishedTime.split(":")[0] + ":00:00"
: ""
}}
</template>
</el-table-column>
<!-- 当前领取人 -->
<el-table-column
prop="ClaimUserName"
min-width="100"
:label="$t('trials:pendingReadingTasks:table:recipient')"
show-overflow-tooltip
sortable="custom"
/>
<!--操作-->
<el-table-column
:label="$t('common:action:action')"
width="250"
@ -101,108 +97,62 @@
<template slot-scope="scope">
<!-- 阅片 -->
<el-button
:disabled="scope.row.ExistReadingApply || (scope.row.ClaimUserId && scope.row.ClaimUserId !== userId)"
:disabled="
scope.row.ExistReadingApply ||
(scope.row.ClaimUserId && scope.row.ClaimUserId !== userId)
"
circle
:title="scope.row.ExistReadingApply ? $t('trials:pendingReadingTasks:button:ExistReadingApply') : $t('trials:pendingReadingTasks:button:review')"
:title="
scope.row.ExistReadingApply
? $t('trials:pendingReadingTasks:button:ExistReadingApply')
: $t('trials:pendingReadingTasks:button:review')
"
icon="el-icon-edit-outline"
@click="handleReadImage(scope.row)"
/>
<!-- 释放 -->
<el-button
:disabled="!scope.row.ClaimUserId || (scope.row.ClaimUserId && scope.row.ClaimUserId !== userId)"
:disabled="
!scope.row.ClaimUserId ||
(scope.row.ClaimUserId && scope.row.ClaimUserId !== userId)
"
circle
:title="$t('trials:pendingReadingTasks:button:release')"
icon="el-icon-s-release"
@click="handleReleaseTasks(scope.row)"
/>
</template>
</el-table-column>
</el-table>
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</div>
</div>
<div v-else-if="isReadingTaskViewInOrder === false && TrialReadingCriterionId === item.TrialReadingCriterionId">
<el-descriptions :column="2" border style="width:800px">
<!-- 剩余任务量 -->
<el-descriptions-item :label="$t('trials:pendingReadingTasks:table:remainingTaskVolume')" :label-style="{'width':'200px'}">
<el-tag size="small" type="danger">{{ randomReadInfo.UnReadTaskCount }}</el-tag>
</el-descriptions-item>
<!-- 剩余裁判量 -->
<!-- <el-descriptions-item :label="$t('trials:pendingReadingTasks:table:amountOfJudgesRemaining')" :label-style="{'width':'200px'}">
<el-tag size="small" type="danger">{{ randomReadInfo.UnReadJudgeTaskCount }}</el-tag>
</el-descriptions-item> -->
<!-- 已完成任务量 -->
<el-descriptions-item :label="$t('trials:pendingReadingTasks:table:amountOfCompletedTasks')" :label-style="{'width':'200px'}">
<el-tag size="small">{{ randomReadInfo.FinishTaskCount }}</el-tag>
</el-descriptions-item>
<!-- 已完成裁判量 -->
<!-- <el-descriptions-item :label="$t('trials:pendingReadingTasks:table:numberOfJudgesCompleted')" :label-style="{'width':'200px'}">
<el-tag size="small">{{ randomReadInfo.FinishJudgeTaskCount }}</el-tag>
</el-descriptions-item> -->
<el-descriptions-item>
<!-- 开始随机阅片 -->
<el-button
type="primary"
size="small"
:disabled="randomReadInfo.UnReadTaskCount ===0"
@click="handleOutOfOrderReading"
>
{{ $t('trials:pendingReadingTasks:button:beginRandomReview') }}
</el-button>
</el-descriptions-item>
</el-descriptions>
</div>
<!-- <template v-else-if="!isReadingTaskViewInOrder && isRender">
<el-tabs v-model="TrialReadingCriterionId" type="border-card">
<el-tab-pane v-for="i of trialCriterionList" :key="i.TrialReadingCriterionName" :label="i.TrialReadingCriterionName" :name="i.TrialReadingCriterionId">
<el-descriptions :column="2" border style="width:800px">
<el-descriptions-item label="剩余任务量" :label-style="{'width':'200px'}">
<el-tag size="small" type="danger">{{ randomReadInfo.UnReadTaskCount }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="剩余裁判量" :label-style="{'width':'200px'}">
<el-tag size="small" type="danger">{{ randomReadInfo.UnReadJudgeTaskCount }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="已完成任务量" :label-style="{'width':'200px'}">
<el-tag size="small">{{ randomReadInfo.FinishTaskCount }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="已完成裁判量" :label-style="{'width':'200px'}">
<el-tag size="small">{{ randomReadInfo.FinishJudgeTaskCount }}</el-tag>
</el-descriptions-item>
<el-descriptions-item>
<el-button
type="primary"
size="small"
:disabled="randomReadInfo.UnReadTaskCount+randomReadInfo.UnReadJudgeTaskCount ===0"
@click="handleOutOfOrderReading"
>
开始随机阅片
</el-button>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
</el-tabs>
</template> -->
</el-tab-pane>
</el-tabs>
</BaseContainer>
</template>
<script>
import { getIRUnReadSubjectTaskList, verifyReadingRestTime } from '@/api/trials'
import { getTrialCriterionList } from '@/api/trials/reading'
import { claimOrCancelSubject } from '@/api/reading'
import BaseContainer from '@/components/BaseContainer'
import Pagination from '@/components/Pagination'
import { getToken } from '@/utils/auth'
import {
getIRUnReadSubjectTaskList,
verifyReadingRestTime,
} from "@/api/trials";
import { getTrialCriterionList } from "@/api/trials/reading";
import { claimOrCancelSubject } from "@/api/reading";
import BaseContainer from "@/components/BaseContainer";
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',
name: "ReadingTaskList",
components: { BaseContainer, Pagination },
data() {
return {
@ -210,147 +160,175 @@ export default {
list: [],
total: 0,
loading: false,
trialId: '',
trialId: "",
isReadingTaskViewInOrder: null,
randomReadInfo: {},
isRender: false,
trialCriterionList: [],
TrialReadingCriterionId: '',
TrialReadingCriterionId: "",
isTableShow: true,
readingTool: null,
criterionType: null,
openWindow: null,
userId: zzSessionStorage.getItem('userId')
}
userId: zzSessionStorage.getItem("userId"),
};
},
watch: {
TrialReadingCriterionId(v) {
if (!v) return
this.getList()
}
if (!v) return;
this.getList();
},
},
mounted() {
window.addEventListener('message', this.receiveMsg)
this.trialId = this.$route.query.trialId
window.addEventListener("message", this.receiveMsg);
this.trialId = this.$route.query.trialId;
// this.getList()
this.getTrialCriterionList()
this.getTrialCriterionList();
},
beforeDestroy() {
window.removeEventListener('message', this.receiveMsg)
window.removeEventListener("message", this.receiveMsg);
if (this.openWindow) {
this.openWindow.close()
this.openWindow.close();
}
},
methods: {
getTrialCriterionList() {
getTrialCriterionList(this.trialId).then(res => {
this.trialCriterionList = res.Result
this.TrialReadingCriterionId = this.trialCriterionList[0].TrialReadingCriterionId
}).catch(() => {})
getTrialCriterionList(this.trialId)
.then((res) => {
this.trialCriterionList = res.Result;
this.TrialReadingCriterionId =
this.trialCriterionList[0].TrialReadingCriterionId;
})
.catch(() => {});
},
getList() {
this.loading = true
this.searchData.TrialId = this.trialId
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId
this.isRender = false
getIRUnReadSubjectTaskList(this.searchData).then(res => {
this.isReadingTaskViewInOrder = res.OtherInfo.IsReadingTaskViewInOrder
this.readingTool = res.OtherInfo.ReadingTool
this.criterionType = res.OtherInfo.CriterionType
this.loading = true;
this.searchData.TrialId = this.trialId;
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId;
this.isRender = false;
getIRUnReadSubjectTaskList(this.searchData)
.then((res) => {
this.isReadingTaskViewInOrder =
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(() => {
this.isRender = true;
this.loading = false;
});
},
//
handleReleaseTasks(row) {
this.loading = true
this.loading = true;
var params = {
isInOrder: true,
subejctId: row.SubjectId,
isClaim: false,
trialReadingCriterionId: this.TrialReadingCriterionId
}
claimOrCancelSubject(params).then(res => {
trialReadingCriterionId: this.TrialReadingCriterionId,
};
claimOrCancelSubject(params)
.then((res) => {
// '!'
this.$message.success(this.$t('trials:pendingReadingTasks:message:released'))
this.loading = false
this.getList()
}).catch(() => { this.loading = false })
this.$message.success(
this.$t("trials:pendingReadingTasks:message:released")
);
this.loading = false;
this.getList();
})
.catch(() => {
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) {
if (this.openWindow) {
this.openWindow.close()
this.openWindow.close();
}
this.loading = true
verifyReadingRestTime().then(_ => {
this.loading = false
this.loading = true;
verifyReadingRestTime()
.then((_) => {
this.loading = false;
window.localStorage.setItem('TrialReadingCriterionId', this.TrialReadingCriterionId)
var token = getToken()
var path = ''
var criterionName = this.trialCriterionList.find(i => i.TrialReadingCriterionId === this.TrialReadingCriterionId).TrialReadingCriterionName
window.localStorage.setItem(
"TrialReadingCriterionId",
this.TrialReadingCriterionId
);
var token = getToken();
var path = "";
var criterionName = this.trialCriterionList.find(
(i) => i.TrialReadingCriterionId === this.TrialReadingCriterionId
).TrialReadingCriterionName;
if (this.readingTool === 0) {
path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&criterionName=${criterionName}&readingTool=${this.readingTool}&TokenKey=${token}`
path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&criterionName=${criterionName}&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}&criterionName=${criterionName}&readingTool=${this.readingTool}&TokenKey=${token}`
path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&criterionName=${criterionName}&readingTool=${this.readingTool}&TokenKey=${token}`;
}
var routeData = this.$router.resolve({ path })
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(() => {
this.loading = false;
});
},
handleOutOfOrderReading() {
if (this.openWindow) {
this.openWindow.close()
this.openWindow.close();
}
this.loading = true
verifyReadingRestTime().then(_ => {
this.loading = false
window.localStorage.setItem('TrialReadingCriterionId', this.TrialReadingCriterionId)
var token = getToken()
var path = ''
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}`
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}`
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 })
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>

View File

@ -1,15 +1,17 @@
<template>
<BaseContainer>
<el-tabs v-model="TrialReadingCriterionId" type="border-card">
<el-tab-pane v-for="item of trialCriterionList" :key="item.TrialReadingCriterionId" :label="item.TrialReadingCriterionName" :name="item.TrialReadingCriterionId">
<div v-if="TrialReadingCriterionId === item.TrialReadingCriterionId">
<div slot="search-container">
<el-form :inline="true">
<!-- 中心编号 -->
<el-form-item :label="$t('trials:rereadTask:table:siteCode')">
<el-select v-model="searchData.SiteId" clearable filterable style="width:120px;">
<el-select
v-model="searchData.SiteId"
clearable
filterable
style="width: 120px"
>
<el-option
v-for="(i,index) of siteOptions"
v-for="(i, index) of siteOptions"
:key="index"
:label="i.TrialSiteCode"
:value="i.SiteId"
@ -18,7 +20,7 @@
</el-form-item>
<!-- 受试者编号 -->
<el-form-item :label="$t('trials:rereadTask:table:subjectCode')">
<el-input v-model="searchData.SubjectCode" style="width:100px;" />
<el-input v-model="searchData.SubjectCode" style="width: 100px" />
</el-form-item>
<!-- <el-form-item style="margin-bottom:10px" label="访视/阅片期名称">
<el-input
@ -31,7 +33,7 @@
<el-form-item :label="$t('trials:rereadTask:table:taskCode')">
<el-input
v-model="searchData.TaskCode"
style="width:130px;"
style="width: 130px"
clearable
/>
</el-form-item>
@ -39,18 +41,22 @@
<el-form-item>
<!-- 查询 -->
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
{{ $t("common:button:search") }}
</el-button>
<!-- 重置 -->
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
{{ $t('common:button:reset') }}
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button>
</el-form-item>
</el-form>
</div>
<div slot="main-container">
<el-table
v-adaptive="{bottomOffset:75}"
v-adaptive="{ bottomOffset: 75 }"
v-loading="loading"
:data="list"
stripe
@ -67,8 +73,16 @@
min-width="100"
>
<template slot-scope="scope">
<el-tag v-if="scope.row.OriginalReReadingTask.IsUrgent" type="danger">{{ $fd('YesOrNo', scope.row.OriginalReReadingTask.IsUrgent) }}</el-tag>
<el-tag v-else type="primary">{{ $fd('YesOrNo', scope.row.OriginalReReadingTask.IsUrgent) }}</el-tag>
<el-tag
v-if="scope.row.OriginalReReadingTask.IsUrgent"
type="danger"
>{{
$fd("YesOrNo", scope.row.OriginalReReadingTask.IsUrgent)
}}</el-tag
>
<el-tag v-else type="primary">{{
$fd("YesOrNo", scope.row.OriginalReReadingTask.IsUrgent)
}}</el-tag>
</template>
</el-table-column>
<!-- 任务编号 -->
@ -121,11 +135,41 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<el-tag v-if="scope.row.OriginalReReadingTask.TaskState === 0" type="primary">{{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}</el-tag>
<el-tag v-if="scope.row.OriginalReReadingTask.TaskState === 1" type="info">{{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}</el-tag>
<el-tag v-if="scope.row.OriginalReReadingTask.TaskState === 3" type="danger">{{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}</el-tag>
<el-tag v-if="scope.row.OriginalReReadingTask.TaskState === 4" type="warning">{{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}</el-tag>
<el-tag v-if="scope.row.OriginalReReadingTask.TaskState === 5" type="danger">{{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}</el-tag>
<el-tag
v-if="scope.row.OriginalReReadingTask.TaskState === 0"
type="primary"
>{{
$fd("TaskState", scope.row.OriginalReReadingTask.TaskState)
}}</el-tag
>
<el-tag
v-if="scope.row.OriginalReReadingTask.TaskState === 1"
type="info"
>{{
$fd("TaskState", scope.row.OriginalReReadingTask.TaskState)
}}</el-tag
>
<el-tag
v-if="scope.row.OriginalReReadingTask.TaskState === 3"
type="danger"
>{{
$fd("TaskState", scope.row.OriginalReReadingTask.TaskState)
}}</el-tag
>
<el-tag
v-if="scope.row.OriginalReReadingTask.TaskState === 4"
type="warning"
>{{
$fd("TaskState", scope.row.OriginalReReadingTask.TaskState)
}}</el-tag
>
<el-tag
v-if="scope.row.OriginalReReadingTask.TaskState === 5"
type="danger"
>{{
$fd("TaskState", scope.row.OriginalReReadingTask.TaskState)
}}</el-tag
>
</template>
</el-table-column>
<!-- 任务类型 -->
@ -137,10 +181,46 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<el-tag v-if="scope.row.OriginalReReadingTask.ReadingCategory === 1" type="primary">{{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}</el-tag>
<el-tag v-if="scope.row.OriginalReReadingTask.ReadingCategory === 2" type="info">{{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}</el-tag>
<el-tag v-if="scope.row.OriginalReReadingTask.ReadingCategory === 4" type="danger">{{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}</el-tag>
<el-tag v-if="scope.row.OriginalReReadingTask.ReadingCategory === 5" type="warning">{{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}</el-tag>
<el-tag
v-if="scope.row.OriginalReReadingTask.ReadingCategory === 1"
type="primary"
>{{
$fd(
"ReadingCategory",
scope.row.OriginalReReadingTask.ReadingCategory
)
}}</el-tag
>
<el-tag
v-if="scope.row.OriginalReReadingTask.ReadingCategory === 2"
type="info"
>{{
$fd(
"ReadingCategory",
scope.row.OriginalReReadingTask.ReadingCategory
)
}}</el-tag
>
<el-tag
v-if="scope.row.OriginalReReadingTask.ReadingCategory === 4"
type="danger"
>{{
$fd(
"ReadingCategory",
scope.row.OriginalReReadingTask.ReadingCategory
)
}}</el-tag
>
<el-tag
v-if="scope.row.OriginalReReadingTask.ReadingCategory === 5"
type="warning"
>{{
$fd(
"ReadingCategory",
scope.row.OriginalReReadingTask.ReadingCategory
)
}}</el-tag
>
</template>
</el-table-column>
<!-- 完成阅片时间 -->
@ -161,8 +241,16 @@
>
<template slot-scope="scope">
<div v-if="scope.row.RequestReReadingType">
<el-tag v-if="scope.row.RequestReReadingType === 2" type="danger">{{ $fd('RequestReReadingType', scope.row.RequestReReadingType) }}</el-tag>
<el-tag v-else type="primary">{{ $fd('RequestReReadingType', scope.row.RequestReReadingType) }}</el-tag>
<el-tag
v-if="scope.row.RequestReReadingType === 2"
type="danger"
>{{
$fd("RequestReReadingType", scope.row.RequestReReadingType)
}}</el-tag
>
<el-tag v-else type="primary">{{
$fd("RequestReReadingType", scope.row.RequestReReadingType)
}}</el-tag>
</div>
</template>
</el-table-column>
@ -191,15 +279,48 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<div v-if="scope.row.RequestReReadingResultEnum || scope.row.RequestReReadingResultEnum === 0">
<el-tooltip v-if="scope.row.RequestReReadingResultEnum === 2" class="item" effect="dark" placement="top">
<div
v-if="
scope.row.RequestReReadingResultEnum ||
scope.row.RequestReReadingResultEnum === 0
"
>
<el-tooltip
v-if="scope.row.RequestReReadingResultEnum === 2"
class="item"
effect="dark"
placement="top"
>
<div slot="content">
{{ scope.row.RequestReReadingRejectReason }}
</div>
<el-tag type="danger">{{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}</el-tag>
<el-tag type="danger">{{
$fd(
"RequestReReadingResult",
scope.row.RequestReReadingResultEnum
)
}}</el-tag>
</el-tooltip>
<el-tag v-if="scope.row.RequestReReadingResultEnum === 1" type="primary">{{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}</el-tag>
<el-tag v-if="scope.row.RequestReReadingResultEnum === 0" type="warning">{{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}</el-tag>
<el-tag
v-if="scope.row.RequestReReadingResultEnum === 1"
type="primary"
>{{
$fd(
"RequestReReadingResult",
scope.row.RequestReReadingResultEnum
)
}}</el-tag
>
<el-tag
v-if="scope.row.RequestReReadingResultEnum === 0"
type="warning"
>{{
$fd(
"RequestReReadingResult",
scope.row.RequestReReadingResultEnum
)
}}</el-tag
>
</div>
</template>
</el-table-column>
@ -213,7 +334,13 @@
/>
</el-table>
<!-- 分页组件 -->
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
<el-dialog
v-if="ConfirmReReadingVisible"
title="驳回"
@ -223,7 +350,14 @@
:close-on-click-modal="false"
custom-class="base-dialog-wrapper"
>
<div style="padding:10px;border: 1px solid #e0e0e0;max-height:650px;overflow-y: auto;">
<div
style="
padding: 10px;
border: 1px solid #e0e0e0;
max-height: 650px;
overflow-y: auto;
"
>
<el-form
ref="reasonForm"
:rules="rules"
@ -236,7 +370,7 @@
<el-input
v-model="ConfirmReReadingForm.RequestReReadingRejectReason"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"
:autosize="{ minRows: 2, maxRows: 4 }"
:placeholder="$t('common:ruleMessage:specify')"
maxlength="500"
show-word-limit
@ -246,37 +380,47 @@
</div>
<div slot="footer" class="dialog-footer">
<!-- 取消 -->
<el-button :disabled="btnLoading" size="small" type="primary" @click="ConfirmReReadingVisible = false;ConfirmReReadingForm = { RequestReReadingRejectReason: null }">
{{ $t('common:button:cancel') }}
<el-button
:disabled="btnLoading"
size="small"
type="primary"
@click="
ConfirmReReadingVisible = false;
ConfirmReReadingForm = { RequestReReadingRejectReason: null };
"
>
{{ $t("common:button:cancel") }}
</el-button>
<!-- 保存 -->
<el-button :loading="btnLoading" size="small" type="primary" @click="handleConfirmReReading(rowData, 2)">
{{ $t('common:button:save') }}
<el-button
:loading="btnLoading"
size="small"
type="primary"
@click="handleConfirmReReading(rowData, 2)"
>
{{ $t("common:button:save") }}
</el-button>
</div>
</el-dialog>
</div>
</div>
</el-tab-pane>
</el-tabs>
</BaseContainer>
</template>
<script>
import { getIRReReadingTaskList, getTrialSiteSelect } from '@/api/trials'
import { confirmReReading, getTrialCriterionList } from '@/api/trials/reading'
import BaseContainer from '@/components/BaseContainer'
import Pagination from '@/components/Pagination'
import { changeURLStatic } from '@/utils/history.js'
import { getIRReReadingTaskList, getTrialSiteSelect } from "@/api/trials";
import { confirmReReading, getTrialCriterionList } from "@/api/trials/reading";
import BaseContainer from "@/components/BaseContainer";
import Pagination from "@/components/Pagination";
import { changeURLStatic } from "@/utils/history.js";
const searchDataDefault = () => {
return {
SubjectCode: '',
TaskCode: '',
SubjectCode: "",
TaskCode: "",
PageIndex: 1,
PageSize: 20
}
}
PageSize: 20,
};
};
export default {
name: 'RereadTask',
name: "RereadTask",
components: { BaseContainer, Pagination },
data() {
return {
@ -285,146 +429,166 @@ export default {
siteOptions: [],
total: 0,
loading: false,
trialId: '',
trialId: "",
ConfirmReReadingForm: {
RequestReReadingRejectReason: null
RequestReReadingRejectReason: null,
},
rules: {
RequestReReadingRejectReason: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }]
RequestReReadingRejectReason: [
{
required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
],
},
ConfirmReReadingVisible: false,
trialCriterionList: [],
TrialReadingCriterionId: '0'
}
TrialReadingCriterionId: "0",
};
},
watch: {
TrialReadingCriterionId(v) {
if (v) {
this.getList()
}
this.getList();
}
},
},
mounted() {
if (this.$route.query.SiteId) {
this.searchData.SiteId = this.$route.query.SiteId
this.searchData.SubjectCode = this.$route.query.SubjectCode
this.searchData.TaskName = this.$route.query.TaskName
changeURLStatic('SiteId', '')
changeURLStatic('SubjectCode', '')
changeURLStatic('TaskName', '')
this.searchData.SiteId = this.$route.query.SiteId;
this.searchData.SubjectCode = this.$route.query.SubjectCode;
this.searchData.TaskName = this.$route.query.TaskName;
changeURLStatic("SiteId", "");
changeURLStatic("SubjectCode", "");
changeURLStatic("TaskName", "");
}
this.trialId = this.$route.query.trialId
this.getSite()
this.trialId = this.$route.query.trialId;
this.getSite();
// this.getList()
this.getTrialCriterionList()
this.getTrialCriterionList();
},
methods: {
getTrialCriterionList() {
getTrialCriterionList(this.trialId).then(res => {
this.trialCriterionList = res.Result
this.TrialReadingCriterionId = this.trialCriterionList[0].TrialReadingCriterionId
}).catch(() => {})
getTrialCriterionList(this.trialId)
.then((res) => {
this.trialCriterionList = res.Result;
this.TrialReadingCriterionId =
this.trialCriterionList[0].TrialReadingCriterionId;
})
.catch(() => {});
},
getSite() {
getTrialSiteSelect(this.trialId).then(res => {
this.siteOptions = res.Result
})
getTrialSiteSelect(this.trialId).then((res) => {
this.siteOptions = res.Result;
});
},
getList() {
this.loading = true
this.searchData.TrialId = this.trialId
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId
getIRReReadingTaskList(this.searchData).then(res => {
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
this.loading = false
}).catch(() => { this.loading = false })
this.loading = true;
this.searchData.TrialId = this.trialId;
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId;
getIRReReadingTaskList(this.searchData)
.then((res) => {
this.list = res.Result.CurrentPageData;
this.total = res.Result.TotalCount;
this.loading = false;
})
.catch(() => {
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();
},
handleConfirmReReading(row, type, open) {
if (open) {
this.rowData = { ...row }
this.ConfirmReReadingVisible = true
this.rowData = { ...row };
this.ConfirmReReadingVisible = true;
this.ConfirmReReadingForm = {
RequestReReadingRejectReason: null
}
return
RequestReReadingRejectReason: null,
};
return;
}
if (type === 2) {
this.$refs.reasonForm.validate((valid) => {
if (!valid) return
if (!valid) return;
var params = {
ConfirmReReadingList: [
{
Id: row.Id,
OriginalReReadingTaskId: row.OriginalReReadingTaskId,
RootReReadingTaskId: row.RootReReadingTaskId,
NewReReadingTaskId: row.NewReReadingTaskId
}
NewReReadingTaskId: row.NewReReadingTaskId,
},
],
RequestReReadingRejectReason: this.ConfirmReReadingForm.RequestReReadingRejectReason,
RequestReReadingRejectReason:
this.ConfirmReReadingForm.RequestReReadingRejectReason,
TrialId: this.$route.query.trialId,
RequestReReadingResultEnum: type
}
this.loading = true
this.btnLoading = true
confirmReReading(params).then(() => {
this.loading = false
this.btnLoading = false
this.$message.success(`${type === 1 ? '同意' : '拒绝'}申请成功`)
this.getList()
this.ConfirmReReadingVisible = false
}).catch(() => {
this.loading = false
this.btnLoading = false
RequestReReadingResultEnum: type,
};
this.loading = true;
this.btnLoading = true;
confirmReReading(params)
.then(() => {
this.loading = false;
this.btnLoading = false;
this.$message.success(`${type === 1 ? "同意" : "拒绝"}申请成功`);
this.getList();
this.ConfirmReReadingVisible = false;
})
})
return
.catch(() => {
this.loading = false;
this.btnLoading = false;
});
});
return;
}
this.$confirm(`确定${type === 1 ? '同意' : '拒绝'}该重阅申请?`).then(() => {
this.$confirm(`确定${type === 1 ? "同意" : "拒绝"}该重阅申请?`).then(
() => {
var params = {
ConfirmReReadingList: [
{
Id: row.Id,
OriginalReReadingTaskId: row.OriginalReReadingTaskId,
RootReReadingTaskId: row.RootReReadingTaskId,
NewReReadingTaskId: row.NewReReadingTaskId
}
NewReReadingTaskId: row.NewReReadingTaskId,
},
],
TrialId: this.$route.query.trialId,
RequestReReadingResultEnum: type
RequestReReadingResultEnum: type,
};
this.loading = true;
this.btnLoading = true;
confirmReReading(params)
.then(() => {
this.loading = false;
this.btnLoading = false;
this.$message.success(`${type === 1 ? "同意" : "拒绝"}申请成功`);
this.getList();
})
.catch(() => {
this.loading = false;
this.btnLoading = false;
});
}
this.loading = true
this.btnLoading = true
confirmReReading(params).then(() => {
this.loading = false
this.btnLoading = false
this.$message.success(`${type === 1 ? '同意' : '拒绝'}申请成功`)
this.getList()
}).catch(() => {
this.loading = false
this.btnLoading = false
})
})
);
},
//
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>

View File

@ -0,0 +1,114 @@
<template>
<el-dialog
:visible.sync="visible"
:close-on-click-modal="false"
:title="`${$t('trials:study:button:editVisit')}(1 | 2 | 3)`"
width="500px"
custom-class="base-dialog-wrapper"
append-to-body
>
<el-form
ref="editVisitForm"
:model="form"
:rules="rules"
size="small"
label-width="100px"
>
<div class="base-dialog-body">
<!--患者姓名-->
<el-form-item
:label="$t('trials:uploadDicomList:table:patientName')"
prop="reason"
>
<el-input v-model="form.reason" disabled />
</el-form-item>
<!--访视-->
<el-form-item
:label="$t('trials:auditRecord:table:visit')"
prop="visit"
>
<el-select v-model="form.visit" clearable>
<el-option
v-for="item of $d.sex"
:key="item.id"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div
class="base-dialog-footer"
style="text-align: right; margin-top: 10px"
>
<el-form-item style="text-align: right">
<el-button
size="small"
type="primary"
:disabled="btnLoading"
@click="handleCancel"
>
{{ $t("common:button:cancel") }}
</el-button>
<el-button
size="small"
type="primary"
:loading="btnLoading"
@click="handleSave"
>
{{ $t("common:button:save") }}
</el-button>
</el-form-item>
</div>
</el-form>
</el-dialog>
</template>
<script>
export default {
name: "editVisitDialog",
props: {
visible: {
require: true,
default: false,
},
},
data() {
return {
form: {
visit: null,
},
rules: {
visit: [
{
required: true,
message: this.$t("trials:study:formRlue:selectVisit"),
trigger: "blur",
},
],
},
btnLoading: false,
};
},
methods: {
//
handleCancel() {
this.$emit("update:visible", false);
},
//
async handleSave() {
try {
let validate = await this.$refs.editVisitForm.validate();
if (!validate) return;
} catch (err) {
console.log(err);
}
},
},
};
</script>
<style lang="scss" scoped>
::v-deep .el-select {
width: 100%;
}
</style>

View File

@ -3,28 +3,16 @@
<!-- 搜索框 -->
<template slot="search-container">
<el-form :inline="true">
<!-- Site -->
<el-form-item :label="$t('trials:studyList:table:siteId')">
<el-select
v-model="searchData.SiteId"
clearable
filterable
style="width:150px"
>
<el-option
v-for="item of siteOptions"
:key="item.SiteId"
:label="item.TrialSiteCode"
:value="item.SiteId"
/>
</el-select>
<!-- 受试者编号 -->
<el-form-item :label="$t('trials:subject:table:subjectId')">
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
</el-form-item>
<!-- Subject -->
<el-form-item :label="$t('trials:studyList:table:subject')">
<el-input v-model="searchData.SubjectInfo" style="width:140px" />
<!-- 患者姓名 -->
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
</el-form-item>
<!-- Visit -->
<el-form-item :label="$t('trials:studyList:table:visit')">
<!-- 性别 -->
<el-form-item :label="$t('trials:subject:table:gender')">
<el-select
v-model="searchData.VisitPlanArray"
clearable
@ -33,253 +21,231 @@
collapse-tags
>
<el-option
v-for="(item, index) of visitPlanOptions"
:key="index"
:label="item.VisitName"
:value="item.VisitNum"
v-for="item of $d.sex"
:key="item.id"
:label="item.label"
:value="item.value"
>
<span style="float: left">{{ item.VisitName }}</span>
</el-option>
</el-select>
</el-form-item>
<!-- 申请号 -->
<el-form-item :label="$t('trials:study:form:accessionNumber')">
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
</el-form-item>
<!-- 检查设备 -->
<el-form-item :label="$t('trials:studyList:table:modality')">
<el-select
v-model="searchData.VisitPlanArray"
clearable
filterable
multiple
collapse-tags
>
<el-option
key="Other"
label="Out of Plan"
value="1.11"
/>
v-for="item of $d.sex"
:key="item.id"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<!-- 检查类型 -->
<el-form-item :label="$t('trials:seletctedReviews:form:modality')">
<el-select
v-model="searchData.VisitPlanArray"
clearable
filterable
multiple
collapse-tags
>
<el-option
v-for="item of $d.sex"
:key="item.id"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<!-- 检查日期 -->
<el-form-item :label="$t('trials:audit:table:studyDate')">
<el-date-picker
v-model="searchData.date"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<!-- 状态 -->
<el-form-item :label="$t('trials:seletctedReviews:table:status')">
<el-select
v-model="searchData.VisitPlanArray"
clearable
filterable
multiple
collapse-tags
>
<el-option
v-for="item of $d.sex"
:key="item.id"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<!-- 查询 -->
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
{{ $t("common:button:search") }}
</el-button>
<!-- 重置 -->
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
{{ $t('common:button:reset') }}
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button>
</el-form-item>
</el-form>
</template>
<!-- 检查列表 -->
<template slot="main-container">
<el-table
v-loading="loading"
v-adaptive="{bottomOffset:60}"
v-adaptive="{ bottomOffset: 60 }"
:data="list"
stripe
height="100"
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<!-- Study ID -->
<!-- 受试者编号 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:studyList:table:studyId')"
:label="$t('trials:subject:table:subjectId')"
show-overflow-tooltip
sortable="custom"
min-width="100"
/>
<!-- Image Type -->
<!-- 患者编号 -->
<el-table-column
prop="IsDicom"
:label="$t('trials:studyList:table:imageType')"
prop="StudyCode"
:label="$t('trials:uploadDicomList:table:pId')"
show-overflow-tooltip
sortable="custom"
min-width="100"
>
<template slot-scope="scope">
<el-tag v-if="scope.row.IsDicom" type="primary">DICOM</el-tag>
<el-tag v-else type="danger">Non-DICOM</el-tag>
</template>
</el-table-column>
/>
<!-- 患者姓名 -->
<el-table-column
prop="StudyTime"
prop="StudyCode"
:label="$t('trials:uploadDicomList:table:patientName')"
show-overflow-tooltip
sortable="custom"
min-width="200"
show-overflow-tooltip
>
<template slot="header">
<el-tooltip placement="top">
<!-- Modality,Body Part Examined,Count,Study Date -->
<!-- Study Info -->
<div slot="content">
{{ `${$t('trials:studyList:table:modality')}, ${$t('trials:studyList:table:bodyPart')}, ${$t('trials:studyList:table:studyDate')}, ${$t('trials:studyList:table:count')}` }}
</div>
<span>{{ $t('trials:studyList:table:studyInfo') }}</span>
</el-tooltip>
</template>
<template slot-scope="scope">
<div style="display: flex;align-items: center">
<div v-if="scope.row.Modalities">{{ scope.row.Modalities }}({{ scope.row.Count }}), </div>
<div v-else style="color:#f44336;">N/A, </div>
<div v-if="scope.row.Bodypart" style="margin:0 3px;">{{ getBodyPart(scope.row.Bodypart) }}, </div>
<div v-else style="color:#f44336;margin:0 3px;">N/A, </div>
<div v-if="scope.row.StudyTime">{{ moment(scope.row.StudyTime).format('YYYY-MM-DD') }} </div>
<div v-else style="color:#f44336;">N/A </div>
<div>
<!-- <el-popover v-if="scope.row.Count && scope.row.IsDicom" trigger="click" placement="bottom">
<el-table v-loading="seriesLoading" :data="seriesList" height="200" size="small" class="seriesListOfStudy">
<el-table-column
prop="SeriesNumber"
:label="$t('trials:studyList:table:seriesNum')"
width="120"
/>
<el-table-column prop="Modality" :label="$t('trials:studyList:table:modality')" width="120" />
<el-table-column
prop="Description"
:label="$t('trials:studyList:table:description')"
width="150"
show-overflow-tooltip
/>
<el-table-column
prop="SliceThickness"
:label="$t('trials:studyList:table:sliceThickness')"
width="120"
/>
<el-table-column
prop="InstanceCount"
:label="$t('trials:studyList:table:instanceCount')"
width="120"
/>
<el-table-column :label="$t('common:action:action')" width="80">
<template slot-scope="series">
<router-link
style="color: #428bca; padding: 2px 5px"
tag="a"
:to="{
path: `/showdicom?studyId=${scope.row.Id}&studyCode=${scope.row.StudyCode}&modality=${scope.row.Modalities}&description=${scope.row.Description}&series=${JSON.stringify(series.row)}&type=Series&TokenKey=${tokenKey}`,
}"
target="_blank"
>
{{ $t('trials:studyList:button:view') }}
</router-link>
</template>
</el-table-column>
</el-table>
<div slot="reference" class="name-wrapper">
<span style="color:#428bca;cursor:pointer;" @click="handleGetseriesList(scope.row)">
{{ `${scope.row.Count}` }}
</span>
</div>
</el-popover>
<el-button
v-else-if="scope.row.Count && !scope.row.IsDicom"
type="text"
@click.native.prevent="handlePreviewNonDicom(scope.row)"
>
{{ scope.row.Count }}
</el-button> -->
<!-- <span>({{ scope.row.Count }})</span> -->
<!-- <span v-else style="color:#f44336;">N/A</span> -->
</div>
</div>
</template>
</el-table-column>
<el-table-column
min-width="100"
show-overflow-tooltip
>
<template slot="header">
<el-tooltip placement="top">
<div slot="content">
{{ `${$t('trials:studyList:table:visitName')}, ${$t('trials:studyList:table:visitNum')}` }}<br>
</div>
<span>{{ $t('trials:studyList:table:visit') }}</span>
</el-tooltip>
</template>
<template slot-scope="scope">
<span v-if="scope.row.VisitName">{{ scope.row.VisitName }}, </span>
<span v-else style="color:#f44336;">N/A, </span>
<span>{{ scope.row.VisitNum }}</span>
</template>
</el-table-column>
/>
<!-- 性别 -->
<el-table-column
prop="SubjectCode"
:label="$t('trials:studyList:table:subject')"
prop="StudyCode"
:label="$t('trials:subject:table:gender')"
show-overflow-tooltip
sortable="custom"
show-overflow-tooltip
/>
<el-table-column
min-width="100"
show-overflow-tooltip
>
<template slot="header">
<el-tooltip placement="top">
<div slot="content">
{{ `${$t('trials:studyList:table:siteId')}, ${$t('trials:studyList:table:siteName')}` }}
</div>
<span>{{ $t('trials:studyList:table:site') }}</span>
</el-tooltip>
</template>
<template slot-scope="scope">
<span v-if="scope.row.TrialSiteCode">{{ scope.row.TrialSiteCode }}, </span>
<span v-else style="color:#f44336;">N/A, </span>
<span v-if="scope.row.TrialSiteAliasName">{{ scope.row.TrialSiteAliasName }}</span>
<span v-else style="color:#f44336;">N/A</span>
</template>
</el-table-column>
/>
<!-- 申请号 -->
<el-table-column
prop="Uploader"
:label="$t('trials:studyList:table:uploader')"
prop="StudyCode"
:label="$t('trials:study:form:accessionNumber')"
show-overflow-tooltip
sortable="custom"
min-width="100"
/>
<!-- 检查设备 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:studyList:table:modality')"
show-overflow-tooltip
sortable="custom"
min-width="100"
/>
<!-- 检查类型 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:audit:table:modality')"
show-overflow-tooltip
sortable="custom"
min-width="100"
/>
<!-- 检查日期 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:audit:table:studyDate')"
show-overflow-tooltip
sortable="custom"
min-width="100"
/>
<!-- 访视 -->
<el-table-column
prop="StudyCode"
:label="$t('trials:auditRecord:table:visit')"
show-overflow-tooltip
sortable="custom"
min-width="100"
/>
<el-table-column
prop="UploadTime"
:label="$t('trials:studyList:table:uploadTime')"
show-overflow-tooltip
sortable="custom"
min-width="120"
/>
<el-table-column :label="$t('common:action:action')" min-width="100" fixed="right">
:label="$t('common:action:action')"
min-width="100"
fixed="right"
>
<template slot-scope="scope">
<!-- 查看 -->
<el-button
:disabled="!scope.row.Count"
circle
:title="$t('trials:studyList:button:view')"
icon="el-icon-view"
type="text"
@click="handleViewStudy(scope.row)"
/>
<!-- 分享检查 -->
<el-button
v-hasPermi="['trials:trials-panel:study:share']"
:disabled="!(scope.row.Count > 0 && scope.row.IsDicom)"
circle
:title="$t('trials:studyList:action:share')"
icon="el-icon-share"
@click="handleShareImage(scope.row)"
/>
>{{ $t("trials:studyList:button:view") }}</el-button
>
<!-- 修改访视 -->
<el-button type="text" @click="editVisitFn(scope.row)">{{
$t("trials:study:button:editVisit")
}}</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</template>
<base-model :config="share_model">
<template slot="dialog-body">
<div>
<i style="color:#428bca;" class="el-icon-success" />
<i style="color: #428bca" class="el-icon-success" />
<span>成功创建分享链接</span>
</div>
<div style="margin:10px 0;">
链接<el-input v-model="shareLink" readonly style="width:420px;" />
<div style="margin: 10px 0">
链接<el-input v-model="shareLink" readonly style="width: 420px" />
</div>
<div style="margin-bottom:20px;">
提取码 <el-input v-model="extractionCode" style="width:100px;" readonly />
<div style="margin-bottom: 20px">
提取码
<el-input v-model="extractionCode" style="width: 100px" readonly />
</div>
<div>
<el-button type="primary" round @click="copyCode"></el-button>
<el-button type="primary" round @click="copyCode"
>复制链接及提取码</el-button
>
</div>
</template>
</base-model>
@ -293,11 +259,17 @@
append-to-body
custom-class="base-dialog-wrapper"
>
<div class="base-modal-body" style="border:2px solid #ccc;padding: 10px">
<NonDicomPreview v-if="previewNonDicomVisible" :none-dicom-id="rowData.Id" />
<div
class="base-modal-body"
style="border: 2px solid #ccc; padding: 10px"
>
<NonDicomPreview
v-if="previewNonDicomVisible"
:none-dicom-id="rowData.Id"
/>
</div>
</el-dialog>
<editVisit :visible.sync="editVisitVisible" />
</BaseContainer>
</template>
<script>
@ -306,29 +278,35 @@ import {
getTrialSiteSelect,
getSeriesList,
getTrialVisitStageSelect,
getNoneDicomStudyFileList
} from '@/api/trials'
import { createImageShare } from '@/api/share'
import BaseContainer from '@/components/BaseContainer'
import Pagination from '@/components/Pagination'
import BaseModel from '@/components/BaseModel'
import NonDicomPreview from './components/nonDicomPreview'
import moment from 'moment'
import { getToken } from '@/utils/auth'
getNoneDicomStudyFileList,
} from "@/api/trials";
import { createImageShare } from "@/api/share";
import BaseContainer from "@/components/BaseContainer";
import Pagination from "@/components/Pagination";
import BaseModel from "@/components/BaseModel";
import NonDicomPreview from "./components/nonDicomPreview";
import editVisit from "./components/edit-visit";
import moment from "moment";
import { getToken } from "@/utils/auth";
const searchDataDefault = () => {
return {
SubjectInfo: '',
SubjectInfo: "",
VisitPlanArray: [],
Status: '',
SiteId: '',
Status: "",
SiteId: "",
PageIndex: 1,
PageSize: 20
}
}
PageSize: 20,
};
};
export default {
name: 'StudyList',
components: { BaseContainer, Pagination, BaseModel, NonDicomPreview },
name: "StudyList",
components: {
BaseContainer,
Pagination,
BaseModel,
NonDicomPreview,
editVisit,
},
data() {
return {
searchData: searchDataDefault(),
@ -340,191 +318,213 @@ export default {
seriesList: [],
nonDicomfilesList: [],
rowData: {},
userTypeEnumInt: zzSessionStorage.getItem('userTypeEnumInt') * 1,
share_model: { visible: false, title: '影像分享', showClose: true, width: '500px' },
shareLink: '',
extractionCode: '',
userTypeEnumInt: zzSessionStorage.getItem("userTypeEnumInt") * 1,
share_model: {
visible: false,
title: "影像分享",
showClose: true,
width: "500px",
},
shareLink: "",
extractionCode: "",
moment,
filesLoading: '',
seriesLoading: '',
filesLoading: "",
seriesLoading: "",
previewNonDicomVisible: false,
trialId: this.$route.query.trialId,
tokenKey: getToken(),
openWindow: null
}
openWindow: null,
editVisitVisible: false,
};
},
mounted() {
this.getSite()
this.getVisitPlanOptions()
this.getList()
this.getSite();
this.getVisitPlanOptions();
this.getList();
},
methods: {
// 访
editVisitFn() {
this.editVisitVisible = true;
},
//
getList() {
this.loading = true
this.searchData.TrialId = this.trialId
this.loading = true;
this.searchData.TrialId = this.trialId;
getDicomAndNoneDicomStudyList(this.searchData)
.then((res) => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
this.loading = false;
this.list = res.Result.CurrentPageData;
this.total = res.Result.TotalCount;
})
.catch(() => {
this.loading = false
})
this.loading = false;
});
},
// Dicom
handleGetseriesList(row) {
this.seriesLoading = true
this.seriesList = []
getSeriesList(row.Id).then((res) => {
this.seriesLoading = false
this.seriesList = res.Result
}).catch(() => {
this.seriesLoading = false
this.seriesLoading = true;
this.seriesList = [];
getSeriesList(row.Id)
.then((res) => {
this.seriesLoading = false;
this.seriesList = res.Result;
})
.catch(() => {
this.seriesLoading = false;
});
},
// Dicom
handleGetFilesList(id) {
this.filesLoading = true
getNoneDicomStudyFileList(id).then(res => {
this.nonDicomfilesList = res.Result
this.filesLoading = false
}).catch(() => { this.filesLoading = false })
this.filesLoading = true;
getNoneDicomStudyFileList(id)
.then((res) => {
this.nonDicomfilesList = res.Result;
this.filesLoading = false;
})
.catch(() => {
this.filesLoading = false;
});
},
//
handleViewStudy(row) {
if (this.openWindow) {
this.openWindow.close()
this.openWindow.close();
}
if (row.IsDicom) {
const routeData = this.$router.resolve({
path: `/showdicom?studyId=${row.Id}&TokenKey=${this.tokenKey}&type=Study`
})
this.openWindow = window.open(routeData.href, '_blank')
path: `/showdicom?studyId=${row.Id}&TokenKey=${this.tokenKey}&type=Study`,
});
this.openWindow = window.open(routeData.href, "_blank");
} else {
// this.rowData = { ...row }
// this.previewNonDicomVisible = true
const routeData = this.$router.resolve({
path: `/showNoneDicoms?subjectVisitId=${row.SubjectVisitId}&studyId=${row.Id}&TokenKey=${this.tokenKey}`
})
this.openWindow = window.open(routeData.href, '_blank')
path: `/showNoneDicoms?subjectVisitId=${row.SubjectVisitId}&studyId=${row.Id}&TokenKey=${this.tokenKey}`,
});
this.openWindow = window.open(routeData.href, "_blank");
}
},
handlePreviewNonDicom(row) {
if (this.openWindow) {
this.openWindow.close()
this.openWindow.close();
}
const routeData = this.$router.resolve({
path: `/showNoneDicoms?subjectVisitId=${row.SubjectVisitId}&studyId=${row.Id}&TokenKey=${this.tokenKey}`
})
this.openWindow = window.open(routeData.href, '_blank')
path: `/showNoneDicoms?subjectVisitId=${row.SubjectVisitId}&studyId=${row.Id}&TokenKey=${this.tokenKey}`,
});
this.openWindow = window.open(routeData.href, "_blank");
},
//
handlePreview(row) {
if (this.openWindow) {
this.openWindow.close()
this.openWindow.close();
}
this.openWindow = window.open(row.FullFilePath, '_blank')
this.openWindow = window.open(row.FullFilePath, "_blank");
},
//
studyStatusFormatter(StudyStatus) {
if (StudyStatus === 5) return 'Uploaded'
else if (StudyStatus === 1) return 'Uploading'
else if (StudyStatus === 7) return 'QA Requested'
else if (StudyStatus === 10) return 'In QA'
else if (StudyStatus === 25) return 'QA-Passed'
else if (StudyStatus === 26) return 'QA-Failed'
else if (StudyStatus === 28) return 'Anonymizing'
else if (StudyStatus === 30) return 'Anonymized'
else if (StudyStatus === 32) return 'Anonymizing Failed'
else if (StudyStatus === 34) return 'Forwarding'
else if (StudyStatus === 36) return 'Forwarded'
else if (StudyStatus === 38) return 'Forwarding Failed'
else return ''
if (StudyStatus === 5) return "Uploaded";
else if (StudyStatus === 1) return "Uploading";
else if (StudyStatus === 7) return "QA Requested";
else if (StudyStatus === 10) return "In QA";
else if (StudyStatus === 25) return "QA-Passed";
else if (StudyStatus === 26) return "QA-Failed";
else if (StudyStatus === 28) return "Anonymizing";
else if (StudyStatus === 30) return "Anonymized";
else if (StudyStatus === 32) return "Anonymizing Failed";
else if (StudyStatus === 34) return "Forwarding";
else if (StudyStatus === 36) return "Forwarded";
else if (StudyStatus === 38) return "Forwarding Failed";
else return "";
},
// site
getSite() {
getTrialSiteSelect(this.trialId).then((res) => {
this.siteOptions = res.Result
})
this.siteOptions = res.Result;
});
},
// visit
getVisitPlanOptions() {
getTrialVisitStageSelect(this.trialId)
.then((res) => {
this.visitPlanOptions = res.Result
})
getTrialVisitStageSelect(this.trialId).then((res) => {
this.visitPlanOptions = res.Result;
});
},
//
handleShareImage(row) {
this.shareLink = ''
this.extractionCode = ''
this.shareLink = "";
this.extractionCode = "";
const params = {
TrialId: row.TrialId,
SiteId: row.SiteId,
SubjectId: row.SubjectId,
StudyId: row.Id
}
this.loading = true
createImageShare(params).then((res) => {
this.loading = false
StudyId: row.Id,
};
this.loading = true;
createImageShare(params)
.then((res) => {
this.loading = false;
if (res.IsSuccess) {
// this.shareLink = `${window.location.origin}${window.location.pathname}#/imagesShare?id=${res.Result.ResourceId}`
this.shareLink = `${window.location.origin}/imagesShare?id=${res.Result.ResourceId}`
this.extractionCode = res.Result.Password
this.share_model.visible = true
this.shareLink = `${window.location.origin}/imagesShare?id=${res.Result.ResourceId}`;
this.extractionCode = res.Result.Password;
this.share_model.visible = true;
}
}).catch(() => { this.loading = false })
})
.catch(() => {
this.loading = false;
});
},
getBodyPart(bodyPart) {
if (!bodyPart) return ''
var separator = ','
if (bodyPart.indexOf('|') > -1) {
separator = '|'
} else if (bodyPart.indexOf(',') > -1) {
separator = ','
} else if (bodyPart.indexOf('') > -1) {
separator = ''
if (!bodyPart) return "";
var separator = ",";
if (bodyPart.indexOf("|") > -1) {
separator = "|";
} else if (bodyPart.indexOf(",") > -1) {
separator = ",";
} else if (bodyPart.indexOf("") > -1) {
separator = "";
}
var arr = bodyPart.split(separator)
var newArr = arr.map(i => {
return this.$fd('Bodypart', i.trim())
})
return newArr.join(' | ')
var arr = bodyPart.split(separator);
var newArr = arr.map((i) => {
return this.$fd("Bodypart", i.trim());
});
return newArr.join(" | ");
},
//
copyCode() {
this.$copyText(`链接: ${this.shareLink} 提取码: ${this.extractionCode}`).then(
res => {
this.$message.success('复制成功')
}
).catch(() => { this.$alert('复制失败') })
this.$copyText(`链接: ${this.shareLink} 提取码: ${this.extractionCode}`)
.then((res) => {
this.$message.success("复制成功");
})
.catch(() => {
this.$alert("复制失败");
});
},
onCopyError() {
this.$alert('复制失败')
this.$alert("复制失败");
},
//
handleSearch() {
this.searchData.PageIndex = 1
this.getList()
this.searchData.PageIndex = 1;
this.getList();
},
//
handleReset() {
this.searchData = searchDataDefault()
this.getList()
this.searchData = searchDataDefault();
this.getList();
},
//
handleSortByColumn(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>

View File

@ -7,7 +7,7 @@
:before-close="beforeCloseStudyDig"
>
<span slot="title"
>{{ $t("trials:inspection:button:addTrials") }}{{
>{{ $t("trials:subject:title:addSubject") }}{{
$t("trials:uploadDicomList:table:patientInfo")
}}T0001132ZhangSan</span
>
@ -15,7 +15,7 @@
<el-form
:inline="true"
:model="submitMessage"
class="demo-form-inline"
class="demo-form-inline topForm"
:rules="rules"
>
<!--受试者编号-->
@ -25,24 +25,27 @@
>
<el-input v-model="submitMessage.subjectId"></el-input>
</el-form-item>
<el-button type="primary" @click="addTrials">
{{ $t("trials:addRP:button:confirmAddPR") }}
</el-button>
</el-form>
</div>
<div class="search">
<p>{{ $t("trials:inspection:message:checkAddTrials") }}</p>
<p>{{ $t("trials:subject:messge:selectPatient") }}</p>
<div class="form">
<el-form :inline="true" class="base-search-form">
<!-- 研究方案编号 -->
<el-form-item :label="$t('trials:trials-list:table:researchNumber')">
<!-- 患者编号 -->
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
<el-input v-model="searchData.SubjectInfo" style="width: 100px" />
</el-form-item>
<!-- 研究名称 -->
<el-form-item :label="$t('trials:trials-list:table:researchName')">
<!-- 患者姓名 -->
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
<el-input v-model="searchData.SubjectInfo" style="width: 100px" />
</el-form-item>
<!-- 申办方 -->
<!-- DICOM AE -->
<el-form-item
class="my_multiple"
:label="$t('trials:trials-list:table:sponsor')"
:label="$t('trials:inspection:table:DICOMAE')"
>
<el-select
v-model="searchData.VisitPlanArray"
@ -59,6 +62,17 @@
</el-option>
</el-select>
</el-form-item>
<!-- 检查日期 -->
<el-form-item :label="$t('trials:uploadedDicoms:table:studyDate')">
<el-date-picker
v-model="searchData.date"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<!-- 查询 -->
<el-button
@ -78,9 +92,6 @@
</el-button>
</el-form-item>
</el-form>
<el-button type="primary" @click="addTrials">
{{ $t("trials:addRP:button:confirmAddPR") }}
</el-button>
</div>
</div>
<!--可加入项目列表-->
@ -95,53 +106,61 @@
@selection-change="handleSelectChange"
>
<el-table-column type="selection" align="center" width="45" />
<!--项目类型-->
<!--患者编号-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:form:trialType')"
:label="$t('trials:uploadDicomList:table:pId')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--研究方案号-->
<!--患者姓名-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:researchNumber')"
:label="$t('trials:uploadDicomList:table:patientName')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--研究名称-->
<!--出生日期-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:researchName')"
:label="$t('trials:inspection:table:birthdate')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--申办方-->
<!--性别-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:sponsor')"
:label="$t('trials:subject:table:gender')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--状态-->
<!--检查时间-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:status')"
:label="$t('trials:audit:table:studyDate')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--创建日期-->
<!--DiCOM AE-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:createDate')"
:label="$t('trials:inspection:table:DICOMAE')"
show-overflow-tooltip
></el-table-column>
<!--检查数-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:studyList:table:count')"
show-overflow-tooltip
></el-table-column>
<!--最新接收时间-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:inspection:table:latestReceiveTime')"
show-overflow-tooltip
min-width="140"
></el-table-column>
</el-table>
@ -193,7 +212,7 @@ export default {
beforeCloseStudyDig() {
this.$emit("update:visible", false);
},
//
//
addTrials() {
this.$emit("update:visible", false);
this.$emit("handleOpenDialog", {}, "confirm");
@ -215,6 +234,12 @@ export default {
display: flex;
align-items: center;
justify-content: space-between;
.topForm {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
}
.search {
display: flex;

View File

@ -70,7 +70,7 @@
v-hasPermi="['trials:trials-panel:subject:new']"
type="primary"
icon="el-icon-plus"
@click="handleAdd"
@click="handleOpenDialog({}, 'addSubject')"
>
{{ $t("common:button:new") }}
</el-button>
@ -269,7 +269,12 @@
/>
</el-dialog>
<!--添加受试者-->
<addSubject :visible.sync="addSubjectVsible" />
<addSubject
:visible.sync="addSubjectTrialsVisible"
@handleOpenDialog="handleOpenDialog"
/>
<!--确认访视-->
<confirmVisitList :visible.sync="confirmTrialsVisible" />
</BaseContainer>
</template>
<script>
@ -286,6 +291,7 @@ import SubjectStatusForm from "./components/SubjectStatusForm";
import MessageTable from "./components/MessageTable";
import moment from "moment";
import addSubject from "./components/add-subject.vue";
import confirmVisitList from "../../../trials-inspection/components/confirm-visit-list.vue";
const searchDataDefault = () => {
return {
Code: "",
@ -305,6 +311,7 @@ export default {
SubjectStatusForm,
MessageTable,
addSubject,
confirmVisitList,
},
data() {
return {
@ -325,7 +332,10 @@ export default {
trialId: "",
hasCrcRoute: false,
hasQCRoute: false,
addSubjectVsible: false,
//
addSubjectTrialsVisible: false,
// 访
confirmTrialsVisible: false,
};
},
watch: {
@ -377,11 +387,9 @@ export default {
});
},
//
handleAdd() {
this.addSubjectVsible = true;
// this.rowData = {};
// this.editDialog.title = this.$t("trials:subject:dialogTitle:new");
// this.editDialog.visible = true;
//
handleOpenDialog(item, key) {
this[`${key}TrialsVisible`] = true;
},
//
handleEdit(row) {