修改配置

main
wangxiaoshuang 2024-04-11 09:30:42 +08:00
parent 39b9249ae7
commit 010d26029c
12 changed files with 914 additions and 518 deletions

View File

@ -38,4 +38,4 @@ VUE_APP_OSS_CONFIG_REGION = 'oss-cn-shanghai'
VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs-prod' VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs-prod'
VUE_APP_OSS_PATH = '/study_prod/dist' VUE_APP_OSS_PATH = '/hir_prod/dist'

View File

@ -45,4 +45,4 @@ VUE_APP_OSS_CONFIG_REGION = 'oss-cn-shanghai'
VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs' VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs'
VUE_APP_OSS_PATH = '/study_test/dist' VUE_APP_OSS_PATH = '/hir_test/dist'

View File

@ -38,4 +38,4 @@ VUE_APP_OSS_CONFIG_REGION = 'oss-cn-shanghai'
VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs-uat' VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs-uat'
VUE_APP_OSS_PATH = '/study_uat/dist' VUE_APP_OSS_PATH = '/hir_uat/dist'

21
.eslintignore Normal file
View File

@ -0,0 +1,21 @@
build/*.js
src/assets
src/utils/*
public
dist
src/views/dictionary/checkConfig/*
src/views/trials/trials-panel/trial-summary/*
src/main.js
src/views/trials/trials-panel/reading/reading-tracking/*
src/views/trials/trials-panel/reading/pm-medical-feedback/*
src/views/trials/trials-panel/reading/consistency-analysis/*
src/views/trials/trials-panel/reading/referee-allocation/*
src/views/trials/trials-list/components/TrialForm
src/views/trials/trials-panel/reading/read-task-allocation/*
src/views/blindResumeInfo/*
src/views/trials/trials-panel/visit/crc-upload/*
src/views/trials/trials-panel/reading/dicoms/customize/*
src/views/trials/trials-panel/subject/brain-metastasis/*
src/views/trials/trials-panel/setting/reading-unit/components/*
src/cornerstonejs/*
src/*

4
.gitignore vendored
View File

@ -14,5 +14,5 @@ tests/**/coverage/
*.ntvs* *.ntvs*
*.njsproj *.njsproj
*.sln *.sln
.eslintignore # .eslintignore
/.eslintignore # /.eslintignore

View File

@ -78,7 +78,7 @@ export default {
} }
}, },
mounted() { mounted() {
this.show = process.env.VUE_APP_OSS_PATH === '/study_test/dist' this.show = process.env.VUE_APP_OSS_PATH === '/hir_test/dist'
}, },
methods: { methods: {
changeValue(target, attr, e) { changeValue(target, attr, e) {

View File

@ -404,10 +404,10 @@ export default {
if (!fd) return; if (!fd) return;
let data = { let data = {
TrialId: this.submitMessage.TrialId, TrialId: this.submitMessage.TrialId,
SubjectVisitList: [], SubjectVisitIdList : [],
}; };
this.tableSelectData.forEach((item) => { this.tableSelectData.forEach((item) => {
data.SubjectVisitList.push(item.SubjectVisitId); data.SubjectVisitIdList .push(item.SubjectVisitId);
}); });
try { try {
this.btnLoading2 = true; this.btnLoading2 = true;

View File

@ -406,7 +406,7 @@ export default {
if (confirm !== "confirm") return; if (confirm !== "confirm") return;
let data = { let data = {
TrialId: this.$route.query.trialId, TrialId: this.$route.query.trialId,
SubjectVisitList: [item.SubjectVisitId], SubjectVisitIdList: [item.SubjectVisitId],
}; };
try { try {
this.loading = true; this.loading = true;
@ -418,7 +418,7 @@ export default {
); );
} }
} catch (err) { } catch (err) {
this.btnLoading2 = false; this.loading = false;
console.log(err); console.log(err);
} }
}, },

View File

@ -1,13 +1,37 @@
<template> <template>
<BaseContainer> <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>
<div slot="search-container"> <div slot="search-container">
<el-form :inline="true"> <el-form :inline="true">
<!-- 中心编号 --> <!-- 阅片标准 -->
<el-form-item :label="$t('trials:reviewTrack:table:siteCode')"> <el-form-item :label="$t('trials:auditRecord:table:criterion')">
<el-select v-model="searchData.SiteId" clearable filterable style="width:120px;"> <el-select
v-model="searchData.TrialReadingCriterionId"
clearable
style="width: 120px"
>
<el-option
v-for="item of trialCriterionList"
:key="'TrialReadingCriterionId' + item.TrialReadingCriterionId"
:value="item.TrialReadingCriterionId"
:label="item.TrialReadingCriterionName"
/>
</el-select>
</el-form-item>
<!-- 受试者编号 -->
<el-form-item :label="$t('trials:reviewTrack:table:subjectCode')">
<el-input v-model="searchData.SubjectCode" style="width: 100px" />
</el-form-item>
<!-- 任务名称 -->
<el-form-item
style="margin-bottom: 10px"
:label="$t('trials:reviewTrack:table:taskName')"
>
<el-select
v-model="searchData.TaskName"
clearable
filterable
style="width: 120px"
>
<el-option <el-option
v-for="(item, index) of siteOptions" v-for="(item, index) of siteOptions"
:key="index" :key="index"
@ -16,43 +40,106 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 受试者编号 -->
<el-form-item :label="$t('trials:reviewTrack:table:subjectCode')">
<el-input v-model="searchData.SubjectCode" style="width:100px;" />
</el-form-item>
<!-- 任务名称 -->
<el-form-item style="margin-bottom:10px" :label="$t('trials:reviewTrack:table:taskName')">
<el-input
v-model="searchData.TaskName"
style="width:100px;"
clearable
/>
</el-form-item>
<!-- 阅片人 --> <!-- 阅片人 -->
<el-form-item style="margin-bottom:10px" :label="$t('trials:reviewTrack:table:reader')"> <el-form-item
<el-select v-model="searchData.DoctorUserId" clearable style="width:120px;"> style="margin-bottom: 10px"
<el-option v-for="item of DoctorUserList" :key="'DoctorUserId' + item.DoctorUserId" :value="item.DoctorUserId" :label="`${item.UserName}(${item.FullName})`" /> :label="$t('trials:reviewTrack:table:reader')"
>
<el-select
v-model="searchData.DoctorUserId"
clearable
style="width: 120px"
>
<el-option
v-for="item of DoctorUserList"
:key="'DoctorUserId' + item.DoctorUserId"
:value="item.DoctorUserId"
:label="`${item.UserName}(${item.FullName})`"
/>
</el-select>
</el-form-item>
<!-- 任务状态 -->
<el-form-item
style="margin-bottom: 10px"
:label="$t('trials:readTask:table:taskState')"
>
<el-select
v-model="searchData.DoctorUserId"
clearable
style="width: 120px"
>
<el-option
v-for="item of DoctorUserList"
:key="'DoctorUserId' + item.DoctorUserId"
:value="item.DoctorUserId"
:label="`${item.UserName}(${item.FullName})`"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- &lt;!&ndash; 阅片标准 &ndash;&gt;-->
<!-- <el-form-item style="margin-bottom:10px" :label="$t('trials:reviewTrack:table:criterionName')">-->
<!-- <el-select v-model="searchData.TrialReadingCriterionId" clearable style="width:120px;">-->
<!-- <el-option v-for="item of trialCriterionList" :key="'TrialReadingCriterionId' + item.TrialReadingCriterionId" :value="item.TrialReadingCriterionId" :label="item.TrialReadingCriterionName" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- 审核结果 --> <!-- 审核结果 -->
<el-form-item style="margin-bottom:10px" :label="$t('trials:auditRecord:table:auditResult')"> <el-form-item
<el-select v-model="searchData.PIAuditState" clearable style="width:120px;"> style="margin-bottom: 10px"
<el-option v-for="item of $d.PIAuditState" :key="'PIAuditState' + item.label" :value="item.value" :label="item.label" /> :label="$t('trials:auditRecord:table:auditResult')"
>
<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>
<!-- 是否入组 -->
<el-form-item
style="margin-bottom: 10px"
:label="$t('trials:auditRecord:table:isEnrollment')"
>
<el-select
v-model="searchData.DoctorUserId"
clearable
style="width: 120px"
>
<el-option
v-for="item of DoctorUserList"
:key="'DoctorUserId' + item.DoctorUserId"
:value="item.DoctorUserId"
:label="`${item.UserName}(${item.FullName})`"
/>
</el-select>
</el-form-item>
<!-- 是否PD -->
<el-form-item
style="margin-bottom: 10px"
:label="$t('trials:auditRecord:table:isPDConfirm')"
>
<el-select
v-model="searchData.DoctorUserId"
clearable
style="width: 120px"
>
<el-option
v-for="item of DoctorUserList"
:key="'DoctorUserId' + item.DoctorUserId"
:value="item.DoctorUserId"
:label="`${item.UserName}(${item.FullName})`"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item style="margin-bottom: 10px"> <el-form-item style="margin-bottom: 10px">
<el-button type="primary" icon="el-icon-search" @click="handleSearch"> <el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }} {{ $t("common:button:search") }}
</el-button> </el-button>
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset"> <el-button
{{ $t('common:button:reset') }} type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -75,14 +162,6 @@
sortable="custom" sortable="custom"
show-overflow-tooltip show-overflow-tooltip
/> />
<!-- 中心编号 -->
<el-table-column
prop="TrialSiteCode"
:label="$t('trials:reviewTrack:table:siteCode')"
width="100"
sortable="custom"
show-overflow-tooltip
/>
<!-- 受试者编号 --> <!-- 受试者编号 -->
<el-table-column <el-table-column
prop="SubjectCode" prop="SubjectCode"
@ -103,6 +182,14 @@
{{ scope.row.TaskName }} {{ scope.row.TaskName }}
</template> </template>
</el-table-column> </el-table-column>
<!-- 角色 -->
<el-table-column
prop="SubjectCode"
:label="$t('trials:auditRecord:table:role')"
min-width="120"
sortable="custom"
show-overflow-tooltip
/>
<!-- 阅片人 --> <!-- 阅片人 -->
<el-table-column <el-table-column
prop="UserName" prop="UserName"
@ -115,6 +202,14 @@
{{ scope.row.UserName }}({{ scope.row.FullName }}) {{ scope.row.UserName }}({{ scope.row.FullName }})
</template> </template>
</el-table-column> </el-table-column>
<!-- 任务状态 -->
<el-table-column
prop="SubjectCode"
:label="$t('trials:readTask:table:taskState')"
min-width="120"
sortable="custom"
show-overflow-tooltip
/>
<!-- 阅片标准 --> <!-- 阅片标准 -->
<el-table-column <el-table-column
prop="TrialReadingCriterionName" prop="TrialReadingCriterionName"
@ -156,23 +251,43 @@
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.PIAuditState === 0" type="danger">{{ $fd('PIAuditState', scope.row.PIAuditState) }}</el-tag> <el-tag v-if="scope.row.PIAuditState === 0" type="danger">{{
<el-tag v-else-if="scope.row.PIAuditState === 1" type="primary">{{ $fd('PIAuditState', scope.row.PIAuditState) }}</el-tag> $fd("PIAuditState", scope.row.PIAuditState)
<el-tag v-else-if="scope.row.PIAuditState === 2" type="warning">{{ $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> </el-tag>
<span v-else>{{ $fd('PIAuditState', scope.row.PIAuditState) }}</span> <span v-else>{{
$fd("PIAuditState", scope.row.PIAuditState)
}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="item.QuestionId" prop="item.QuestionId"
:label="item.QuestionName" :label="item.QuestionName"
min-width="140" min-width="140"
v-for="item of QuestionList" v-for="(item, index) of QuestionList"
:key="Math.random()" :key="'QuestionId' + index"
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ item.DictionaryCode ? $fd(item.DictionaryCode, parseInt(scope.row.PIReadingResultList.find(v => v.QuestionId === item.QuestionId).Answer)) : scope.row.PIReadingResultList.find(v => v.QuestionId === item.QuestionId).Answer}} {{
item.DictionaryCode
? $fd(
item.DictionaryCode,
parseInt(
scope.row.PIReadingResultList.find(
(v) => v.QuestionId === item.QuestionId
).Answer
)
)
: scope.row.PIReadingResultList.find(
(v) => v.QuestionId === item.QuestionId
).Answer
}}
</template> </template>
</el-table-column> </el-table-column>
<!-- 是否入组 --> <!-- 是否入组 -->
@ -185,9 +300,13 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsEnrollment === true" type="primary"> <el-tag v-if="scope.row.IsEnrollment === true" type="primary">
{{ $fd('YesOrNo', scope.row.IsEnrollment) }} {{ $fd("YesOrNo", scope.row.IsEnrollment) }}
</el-tag> </el-tag>
<el-tag v-else-if="scope.row.IsEnrollment === false" type="danger">{{ $fd('YesOrNo', scope.row.IsEnrollment) }}</el-tag> <el-tag
v-else-if="scope.row.IsEnrollment === false"
type="danger"
>{{ $fd("YesOrNo", scope.row.IsEnrollment) }}</el-tag
>
</template> </template>
</el-table-column> </el-table-column>
<!-- 是否PD --> <!-- 是否PD -->
@ -200,9 +319,11 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsPDConfirm === true" type="primary"> <el-tag v-if="scope.row.IsPDConfirm === true" type="primary">
{{ $fd('YesOrNo', scope.row.IsPDConfirm) }} {{ $fd("YesOrNo", scope.row.IsPDConfirm) }}
</el-tag> </el-tag>
<el-tag v-else-if="scope.row.IsPDConfirm === false" type="danger">{{ $fd('YesOrNo', scope.row.IsPDConfirm) }}</el-tag> <el-tag v-else-if="scope.row.IsPDConfirm === false" type="danger">{{
$fd("YesOrNo", scope.row.IsPDConfirm)
}}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<!-- 最新回复人 --> <!-- 最新回复人 -->
@ -238,7 +359,9 @@
<el-button <el-button
circle circle
icon="el-icon-tickets" icon="el-icon-tickets"
:disabled="scope.row.TaskState !== 0 || scope.row.PIAuditState === 0" :disabled="
scope.row.TaskState !== 0 || scope.row.PIAuditState === 0
"
:title="$t('trials:auditRecord:table:auditRecords')" :title="$t('trials:auditRecord:table:auditRecords')"
@click="handleAuditRecords(scope.row)" @click="handleAuditRecords(scope.row)"
/> />
@ -246,18 +369,23 @@
</el-table-column> </el-table-column>
</el-table> </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>
</el-tab-pane>
</el-tabs>
<!-- 审核记录 --> <!-- 审核记录 -->
<el-dialog <el-dialog
v-if="auditRecordVisible" v-if="auditRecordVisible"
:visible.sync="auditRecordVisible" :visible.sync="auditRecordVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
:title="`${$t('trials:auditRecord:table:auditRecords')}${currentRow.SubjectCode} | ${currentRow.TaskName} | ${currentRow.UserName}`" :title="`${$t('trials:auditRecord:table:auditRecords')}${
currentRow.SubjectCode
} | ${currentRow.TaskName} | ${currentRow.UserName}`"
width="600px" width="600px"
> >
<ChatForm <ChatForm
@ -269,19 +397,22 @@
</BaseContainer> </BaseContainer>
</template> </template>
<script> <script>
import { getPIReadingAuditList } from '@/api/reading' import { getPIReadingAuditList } from "@/api/reading";
import { getTrialCriterionList, getDoctorUserSelectList } from '@/api/trials/reading' import {
import { getTrialSiteSelect } from '@/api/trials' getTrialCriterionList,
import { getToken } from '@/utils/auth' getDoctorUserSelectList,
import BaseContainer from '@/components/BaseContainer' } from "@/api/trials/reading";
import Pagination from '@/components/Pagination' import { getTrialSiteSelect } from "@/api/trials";
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";
const searchDataDefault = () => { const searchDataDefault = () => {
return { return {
PageIndex: 1, PageIndex: 1,
PageSize: 20, PageSize: 20,
Asc: true, Asc: true,
SortField: '', SortField: "",
TrialId: null, TrialId: null,
SiteId: null, SiteId: null,
SubjectId: null, SubjectId: null,
@ -292,11 +423,11 @@ const searchDataDefault = () => {
DoctorUserId: null, DoctorUserId: null,
ReadingTaskState: 2, ReadingTaskState: 2,
PIAuditState: null, PIAuditState: null,
IsWaitPIAudit: null IsWaitPIAudit: null,
} };
} };
export default { export default {
name: 'AuditRecords', // PI name: "AuditRecords", // PI
components: { BaseContainer, Pagination, ChatForm }, components: { BaseContainer, Pagination, ChatForm },
data() { data() {
return { return {
@ -304,105 +435,112 @@ export default {
list: [], list: [],
total: 0, total: 0,
loading: false, loading: false,
userListLoading: '', userListLoading: "",
trialId: '', trialId: "",
trialCriterionList: [], trialCriterionList: [],
siteOptions: [], siteOptions: [],
DoctorUserList: [], DoctorUserList: [],
auditRecordVisible: false, auditRecordVisible: false,
TrialReadingCriterionId: '0', TrialReadingCriterionId: "0",
openWindow: null, openWindow: null,
QuestionList: [] QuestionList: [],
} };
}, },
watch: { watch: {
TrialReadingCriterionId(v) { TrialReadingCriterionId(v) {
if (v) { if (v) {
this.getList() this.getList();
}
} }
}, },
},
beforeUpdate() { beforeUpdate() {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.myTable.doLayout() this.$refs.myTable.doLayout();
}) });
}, },
mounted() { mounted() {
this.trialId = this.$route.query.trialId this.trialId = this.$route.query.trialId;
this.getTrialCriterionList() this.getTrialCriterionList();
this.getSite() this.getSite();
this.getDoctorUserSelectList() this.getDoctorUserSelectList();
}, },
methods: { methods: {
getList() { getList() {
this.loading = true this.loading = true;
this.searchData.TrialId = this.trialId this.searchData.TrialId = this.trialId;
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId;
getPIReadingAuditList(this.searchData).then(res => { getPIReadingAuditList(this.searchData)
this.loading = false .then((res) => {
this.QuestionList = res.OtherInfo.OtherObj this.loading = false;
this.QuestionList = res.OtherInfo.OtherObj;
this.$nextTick(() => { this.$nextTick(() => {
setTimeout(() => { setTimeout(() => {
this.list = res.Result.CurrentPageData this.list = res.Result.CurrentPageData;
}, 100) }, 100);
this.total = res.Result.TotalCount this.total = res.Result.TotalCount;
this.$refs.myTable.doLayout() this.$refs.myTable.doLayout();
});
}) })
}).catch(() => { this.loading = false }) .catch(() => {
this.loading = false;
});
}, },
handleAuditRecords(row) { handleAuditRecords(row) {
this.currentRow = { ...row } this.currentRow = { ...row };
this.auditRecordVisible = true this.auditRecordVisible = true;
}, },
// //
handleView(row) { handleView(row) {
if (this.openWindow) { if (this.openWindow) {
this.openWindow.close() this.openWindow.close();
} }
var token = getToken() var token = getToken();
var path var path;
if (row.ReadingTool === 0) { 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 { } 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}`;
} }
this.openWindow = window.open(path, '_blank') this.openWindow = window.open(path, "_blank");
}, },
getTrialCriterionList() { getTrialCriterionList() {
getTrialCriterionList(this.trialId).then(res => { getTrialCriterionList(this.trialId)
this.trialCriterionList = res.Result .then((res) => {
this.TrialReadingCriterionId = this.trialCriterionList[0].TrialReadingCriterionId this.trialCriterionList = res.Result;
}).catch(() => {}) this.TrialReadingCriterionId =
this.trialCriterionList[0].TrialReadingCriterionId;
})
.catch(() => {});
}, },
getDoctorUserSelectList() { getDoctorUserSelectList() {
getDoctorUserSelectList(this.$route.query.trialId).then(res => { getDoctorUserSelectList(this.$route.query.trialId).then((res) => {
this.DoctorUserList = res.Result this.DoctorUserList = res.Result;
}) });
}, },
getSite() { getSite() {
getTrialSiteSelect(this.trialId).then(res => { getTrialSiteSelect(this.trialId).then((res) => {
this.siteOptions = res.Result this.siteOptions = res.Result;
}) });
}, },
handleSearch() { handleSearch() {
this.searchData.PageIndex = 1 this.searchData.PageIndex = 1;
this.getList() this.getList();
}, },
handleReset() { handleReset() {
this.searchData = searchDataDefault() this.searchData = searchDataDefault();
this.getList() this.getList();
}, },
// //
handleSortChange(column) { handleSortChange(column) {
if (column.order === 'ascending') { if (column.order === "ascending") {
this.searchData.Asc = true this.searchData.Asc = true;
} else { } 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> </script>

View File

@ -1,80 +1,155 @@
<template> <template>
<BaseContainer> <BaseContainer>
<el-tabs v-model="TrialReadingCriterionId" type="border-card"> <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"> <el-tab-pane
v-for="item of trialCriterionList"
:key="item.TrialReadingCriterionId"
:label="item.TrialReadingCriterionName"
:name="item.TrialReadingCriterionId"
>
<div v-if="TrialReadingCriterionId === item.TrialReadingCriterionId"> <div v-if="TrialReadingCriterionId === item.TrialReadingCriterionId">
<div slot="search-container"> <div slot="search-container">
<el-form :inline="true"> <el-form :inline="true">
<!-- 中心编号 -->
<el-form-item :label="$t('trials:reviewTrack:table:siteCode')">
<el-select v-model="searchData.SiteId" clearable filterable style="width:120px;">
<el-option
v-for="(item,index) of siteOptions"
:key="index"
:label="item.TrialSiteCode"
:value="item.SiteId"
/>
</el-select>
</el-form-item>
<!-- 受试者编号 --> <!-- 受试者编号 -->
<el-form-item :label="$t('trials:reviewTrack:table:subjectCode')"> <el-form-item :label="$t('trials:reviewTrack: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>
<!-- 任务名称 --> <!-- 任务名称 -->
<el-form-item style="margin-bottom:10px" :label="$t('trials:reviewTrack:table:taskName')"> <el-form-item
style="margin-bottom: 10px"
:label="$t('trials:reviewTrack:table:taskName')"
>
<el-input <el-input
v-model="searchData.TaskName" v-model="searchData.TaskName"
style="width:100px;" style="width: 100px"
clearable clearable
/> />
</el-form-item> </el-form-item>
<!-- 阅片人 --> <!-- 阅片人 -->
<el-form-item style="margin-bottom:10px" :label="$t('trials:reviewTrack:table:reader')"> <el-form-item
<el-select v-model="searchData.DoctorUserId" clearable style="width:120px;"> style="margin-bottom: 10px"
<el-option v-for="item of DoctorUserList" :key="'DoctorUserId' + item.DoctorUserId" :value="item.DoctorUserId" :label="`${item.UserName}(${item.FullName})`" /> :label="$t('trials:reviewTrack:table:reader')"
>
<el-select
v-model="searchData.DoctorUserId"
clearable
style="width: 120px"
>
<el-option
v-for="item of DoctorUserList"
:key="'DoctorUserId' + item.DoctorUserId"
:value="item.DoctorUserId"
:label="`${item.UserName}(${item.FullName})`"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 阅片标准 -->
<!-- <el-form-item style="margin-bottom:10px" :label="$t('trials:reviewTrack:table:criterionName')">-->
<!-- <el-select v-model="searchData.TrialReadingCriterionId" clearable style="width:120px;">-->
<!-- <el-option v-for="item of trialCriterionList" :key="'TrialReadingCriterionId' + item.TrialReadingCriterionId" :value="item.TrialReadingCriterionId" :label="item.TrialReadingCriterionName" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- 是否加急 --> <!-- 是否加急 -->
<el-form-item style="margin-bottom:10px" :label="$t('trials:reviewTrack:table:isUrgent')"> <el-form-item
<el-select v-model="searchData.IsUrgent" clearable style="width:120px;"> style="margin-bottom: 10px"
<el-option v-for="item of $d.YesOrNo" :key="'IsUrgent' + item.label" :value="item.value" :label="item.label" /> :label="$t('trials:reviewTrack:table:isUrgent')"
>
<el-select
v-model="searchData.IsUrgent"
clearable
style="width: 120px"
>
<el-option
v-for="item of $d.YesOrNo"
:key="'IsUrgent' + item.label"
:value="item.value"
:label="item.label"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 任务状态 --> <!-- 任务状态 -->
<el-form-item style="margin-bottom:10px" :label="$t('trials:reviewTrack:table:taskStatus')"> <el-form-item
<el-select v-model="searchData.TaskState" clearable style="width:120px;"> style="margin-bottom: 10px"
<el-option v-for="item of $d.TaskState" :key="'TaskState' + item.label" :value="item.value" :label="item.label" /> :label="$t('trials:reviewTrack:table:taskStatus')"
>
<el-select
v-model="searchData.TaskState"
clearable
style="width: 120px"
>
<el-option
v-for="item of $d.TaskState"
:key="'TaskState' + item.label"
:value="item.value"
:label="item.label"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 阅片状态 -->
<!-- <el-form-item style="margin-bottom:10px" :label="$t('trials:reviewTrack:table:readingStatus')">
<el-select v-model="searchData.ReadingTaskState" clearable style="width:120px;">
<el-option v-for="item of $d.ReadingTaskState" :key="'ReadingTaskState' + item.label" :value="item.value" :label="item.label" />
</el-select>
</el-form-item> -->
<!-- <el-form-item style="margin-bottom:10px" :label="$t('trials:rereadTrack:table:ReReadingApplyState')">
<el-select v-model="searchData.ReReadingApplyState" clearable style="width:120px;">
<el-option v-for="item of $d.ReReadingApplyState" :key="'ReReadingApplyState' + item.label" :value="item.value" :label="item.label" />
</el-select>
</el-form-item> -->
<!-- 审核状态 --> <!-- 审核状态 -->
<el-form-item style="margin-bottom:10px" :label="$t('trials:reviewTrack:table:auditStatus')"> <el-form-item
<el-select v-model="searchData.PIAuditState" clearable style="width:120px;"> style="margin-bottom: 10px"
<el-option v-for="item of $d.PIAuditState" :key="'PIAuditState' + item.label" :value="item.value" :label="item.label" /> :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>
<!-- 是否入组 -->
<el-form-item
style="margin-bottom: 10px"
:label="$t('trials:auditRecord:table:isEnrollment')"
>
<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>
<!-- 是否PD -->
<el-form-item
style="margin-bottom: 10px"
:label="$t('trials:auditRecord:table:isPDConfirm')"
>
<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-select>
</el-form-item> </el-form-item>
<el-form-item style="margin-bottom: 10px"> <el-form-item style="margin-bottom: 10px">
<el-button type="primary" icon="el-icon-search" @click="handleSearch"> <el-button
{{ $t('common:button:search') }} type="primary"
icon="el-icon-search"
@click="handleSearch"
>
{{ $t("common:button:search") }}
</el-button> </el-button>
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset"> <el-button
{{ $t('common:button:reset') }} type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -101,15 +176,52 @@
<el-tag v-else type="primary">{{ $fd('YesOrNo', scope.row.IsUrgent) }}</el-tag> --> <el-tag v-else type="primary">{{ $fd('YesOrNo', scope.row.IsUrgent) }}</el-tag> -->
<el-tooltip placement="top"> <el-tooltip placement="top">
<div slot="content"> <div slot="content">
<span>{{ `${$t('trials:pendingReview:title:urgentReason')} ${$fd('TaskUrgentType',scope.row.TaskUrgentType)}` }}</span><br> <span>{{
<span>{{ scope.row.TaskUrgentRemake?`${$t('trials:pendingReview:title:urgentNote')} ${scope.row.TaskUrgentRemake}`:'' }}</span> `${$t("trials:pendingReview:title:urgentReason")} ${$fd(
"TaskUrgentType",
scope.row.TaskUrgentType
)}`
}}</span
><br />
<span>{{
scope.row.TaskUrgentRemake
? `${$t("trials:pendingReview:title:urgentNote")} ${
scope.row.TaskUrgentRemake
}`
: ""
}}</span>
</div> </div>
<div> <div>
<el-button v-if="scope.row.IsUrgent" :disabled="!(!scope.row.TaskState && (scope.row.ReadingTaskState === 0 || scope.row.ReadingTaskState === 1)) || !scope.row.IsCanEditUrgentState" type="danger" size="mini" @click="changeUrgentStatus(scope.row)">{{ $fd('YesOrNo', scope.row.IsUrgent) }}</el-button> <el-button
v-if="scope.row.IsUrgent"
:disabled="
!(
!scope.row.TaskState &&
(scope.row.ReadingTaskState === 0 ||
scope.row.ReadingTaskState === 1)
) || !scope.row.IsCanEditUrgentState
"
type="danger"
size="mini"
@click="changeUrgentStatus(scope.row)"
>{{ $fd("YesOrNo", scope.row.IsUrgent) }}</el-button
>
</div> </div>
</el-tooltip> </el-tooltip>
<el-button v-if="!scope.row.IsUrgent" :disabled="!(!scope.row.TaskState && (scope.row.ReadingTaskState === 0 || scope.row.ReadingTaskState === 1)) || !scope.row.IsCanEditUrgentState" type="primary" size="mini" @click="changeUrgentStatus(scope.row)">{{ $fd('YesOrNo', scope.row.IsUrgent) }}</el-button> <el-button
v-if="!scope.row.IsUrgent"
:disabled="
!(
!scope.row.TaskState &&
(scope.row.ReadingTaskState === 0 ||
scope.row.ReadingTaskState === 1)
) || !scope.row.IsCanEditUrgentState
"
type="primary"
size="mini"
@click="changeUrgentStatus(scope.row)"
>{{ $fd("YesOrNo", scope.row.IsUrgent) }}</el-button
>
</template> </template>
</el-table-column> </el-table-column>
<!-- 任务编号 --> <!-- 任务编号 -->
@ -120,14 +232,6 @@
sortable="custom" sortable="custom"
show-overflow-tooltip show-overflow-tooltip
/> />
<!-- 中心编号 -->
<el-table-column
prop="TrialSiteCode"
:label="$t('trials:reviewTrack:table:siteCode')"
width="100"
sortable="custom"
show-overflow-tooltip
/>
<!-- 受试者编号 --> <!-- 受试者编号 -->
<el-table-column <el-table-column
prop="SubjectCode" prop="SubjectCode"
@ -173,11 +277,21 @@
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <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 === 0" type="primary">{{
<el-tag v-if="scope.row.TaskState === 1" type="info">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag> $fd("TaskState", scope.row.TaskState)
<el-tag v-if="scope.row.TaskState === 3" type="danger">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag> }}</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 === 1" type="info">{{
<el-tag v-if="scope.row.TaskState === 5" type="danger">{{ $fd('TaskState', scope.row.TaskState) }}</el-tag> $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> </template>
</el-table-column> </el-table-column>
<!-- 角色 --> <!-- 角色 -->
@ -210,14 +324,6 @@
{{ scope.row.UserName }}({{ scope.row.FullName }}) {{ scope.row.UserName }}({{ scope.row.FullName }})
</template> </template>
</el-table-column> </el-table-column>
<!-- 阅片标准 -->
<el-table-column
prop="TrialReadingCriterionName"
:label="$t('trials:reviewTrack:table:criterionName')"
min-width="180"
sortable="custom"
show-overflow-tooltip
/>
<!-- 建议完成时间 --> <!-- 建议完成时间 -->
<el-table-column <el-table-column
prop="SuggesteFinishedTime" prop="SuggesteFinishedTime"
@ -235,8 +341,16 @@
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.ReadingTaskState === 2" type="primary">{{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}</el-tag> <el-tag
<el-tag v-else type="danger">{{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}</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> </template>
</el-table-column> </el-table-column>
<!-- 阅片完成时间 --> <!-- 阅片完成时间 -->
@ -256,9 +370,30 @@
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <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
<el-tag v-if="scope.row.ReReadingApplyState === 2" type="primary">{{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}</el-tag> v-if="
<el-tag v-if="scope.row.ReReadingApplyState === 3" type="warning">{{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}</el-tag> 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> </template>
</el-table-column> </el-table-column>
<!-- 审核结果 --> <!-- 审核结果 -->
@ -270,23 +405,47 @@
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.PIAuditState === 0" type="danger">{{ $fd('PIAuditState', scope.row.PIAuditState) }}</el-tag> <el-tag v-if="scope.row.PIAuditState === 0" type="danger">{{
<el-tag v-else-if="scope.row.PIAuditState === 1" type="primary">{{ $fd('PIAuditState', scope.row.PIAuditState) }}</el-tag> $fd("PIAuditState", scope.row.PIAuditState)
<el-tag v-else-if="scope.row.PIAuditState === 2" type="warning">{{ $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> </el-tag>
<span v-else>{{ $fd('PIAuditState', scope.row.PIAuditState) }}</span> <span v-else>{{
$fd("PIAuditState", scope.row.PIAuditState)
}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="item.QuestionId" prop="item.QuestionId"
:label="item.QuestionName" :label="item.QuestionName"
min-width="140" min-width="140"
v-for="item of QuestionList" v-for="(item, index) of QuestionList"
:key="Math.random()" :key="'QuestionId1' + index"
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ item.DictionaryCode ? $fd(item.DictionaryCode, parseInt(scope.row.PIReadingResultList.find(v => v.QuestionId === item.QuestionId).Answer)) : scope.row.PIReadingResultList.find(v => v.QuestionId === item.QuestionId).Answer}} {{
item.DictionaryCode
? $fd(
item.DictionaryCode,
parseInt(
scope.row.PIReadingResultList.find(
(v) => v.QuestionId === item.QuestionId
).Answer
)
)
: scope.row.PIReadingResultList.find(
(v) => v.QuestionId === item.QuestionId
).Answer
}}
</template> </template>
</el-table-column> </el-table-column>
<!-- 是否入组 --> <!-- 是否入组 -->
@ -299,9 +458,13 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsEnrollment === true" type="primary"> <el-tag v-if="scope.row.IsEnrollment === true" type="primary">
{{ $fd('YesOrNo', scope.row.IsEnrollment) }} {{ $fd("YesOrNo", scope.row.IsEnrollment) }}
</el-tag> </el-tag>
<el-tag v-else-if="scope.row.IsEnrollment === false" type="danger">{{ $fd('YesOrNo', scope.row.IsEnrollment) }}</el-tag> <el-tag
v-else-if="scope.row.IsEnrollment === false"
type="danger"
>{{ $fd("YesOrNo", scope.row.IsEnrollment) }}</el-tag
>
</template> </template>
</el-table-column> </el-table-column>
<!-- 是否PD --> <!-- 是否PD -->
@ -314,9 +477,13 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsPDConfirm === true" type="primary"> <el-tag v-if="scope.row.IsPDConfirm === true" type="primary">
{{ $fd('YesOrNo', scope.row.IsPDConfirm) }} {{ $fd("YesOrNo", scope.row.IsPDConfirm) }}
</el-tag> </el-tag>
<el-tag v-else-if="scope.row.IsPDConfirm === false" type="danger">{{ $fd('YesOrNo', scope.row.IsPDConfirm) }}</el-tag> <el-tag
v-else-if="scope.row.IsPDConfirm === false"
type="danger"
>{{ $fd("YesOrNo", scope.row.IsPDConfirm) }}</el-tag
>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -338,7 +505,10 @@
circle circle
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
:title="$t('trials:pendingReview:button:audit')" :title="$t('trials:pendingReview:button:audit')"
:disabled="scope.row.TaskState !== 0 || scope.row.UserTypeShortName === 'PI'" :disabled="
scope.row.TaskState !== 0 ||
scope.row.UserTypeShortName === 'PI'
"
@click="handleAudit(scope.row)" @click="handleAudit(scope.row)"
/> />
<!-- 入组确认 --> <!-- 入组确认 -->
@ -347,7 +517,14 @@
circle circle
icon="el-icon-s-claim" icon="el-icon-s-claim"
:title="$t('trials:pendingReview:button:enrollmentConfirm')" :title="$t('trials:pendingReview:button:enrollmentConfirm')"
:disabled="!(scope.row.TaskState === 0 && scope.row.PIAuditState === 2 && scope.row.IsEnrollmentConfirm && otherInfo.EnrollConfirmDefaultUserType === 8)" :disabled="
!(
scope.row.TaskState === 0 &&
scope.row.PIAuditState === 2 &&
scope.row.IsEnrollmentConfirm &&
otherInfo.EnrollConfirmDefaultUserType === 8
)
"
@click="handleEnrollConfirm(scope.row)" @click="handleEnrollConfirm(scope.row)"
/> />
<!-- PD确认 --> <!-- PD确认 -->
@ -356,7 +533,14 @@
circle circle
icon="el-icon-s-claim" icon="el-icon-s-claim"
:title="$t('trials:pendingReview:button:pdConfirm')" :title="$t('trials:pendingReview:button:pdConfirm')"
:disabled="!(scope.row.TaskState === 0 && scope.row.PIAuditState === 2 && scope.row.PDState && otherInfo.PDProgressDefaultUserType === 8)" :disabled="
!(
scope.row.TaskState === 0 &&
scope.row.PIAuditState === 2 &&
scope.row.PDState &&
otherInfo.PDProgressDefaultUserType === 8
)
"
@click="handlePDConfirm(scope.row)" @click="handlePDConfirm(scope.row)"
/> />
<!-- 审核记录 --> <!-- 审核记录 -->
@ -364,14 +548,24 @@
circle circle
icon="el-icon-tickets" icon="el-icon-tickets"
:title="$t('trials:pendingReview:button:auditRecords')" :title="$t('trials:pendingReview:button:auditRecords')"
:disabled="scope.row.TaskState !== 0 || scope.row.PIAuditState === 0 || scope.row.UserTypeShortName === 'PI'" :disabled="
scope.row.TaskState !== 0 ||
scope.row.PIAuditState === 0 ||
scope.row.UserTypeShortName === 'PI'
"
@click="handleAuditRecords(scope.row)" @click="handleAuditRecords(scope.row)"
/> />
</template> </template>
</el-table-column> </el-table-column>
</el-table> </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> </div>
</el-tab-pane> </el-tab-pane>
@ -382,7 +576,9 @@
:visible.sync="auditVisible" :visible.sync="auditVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
:title="`${$t('trials:pendingReview:button:audit')}${currentRow.SubjectCode} | ${currentRow.TaskName} | ${currentRow.UserName}`" :title="`${$t('trials:pendingReview:button:audit')}${
currentRow.SubjectCode
} | ${currentRow.TaskName} | ${currentRow.UserName}`"
width="600px" width="600px"
> >
<AuditForm <AuditForm
@ -398,7 +594,9 @@
:visible.sync="enrollVisible" :visible.sync="enrollVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
:title="`${$t('trials:pendingReview:button:enrollmentConfirm')}${currentRow.SubjectCode} | ${currentRow.TaskName} | ${currentRow.UserName}`" :title="`${$t('trials:pendingReview:button:enrollmentConfirm')}${
currentRow.SubjectCode
} | ${currentRow.TaskName} | ${currentRow.UserName}`"
width="400px" width="400px"
> >
<EnrollForm <EnrollForm
@ -414,7 +612,9 @@
:visible.sync="pdVisible" :visible.sync="pdVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
:title="`${$t('trials:pendingReview:button:pdConfirm')}${currentRow.SubjectCode} | ${currentRow.TaskName} | ${currentRow.UserName}`" :title="`${$t('trials:pendingReview:button:pdConfirm')}${
currentRow.SubjectCode
} | ${currentRow.TaskName} | ${currentRow.UserName}`"
width="400px" width="400px"
> >
<PdForm <PdForm
@ -430,7 +630,9 @@
:visible.sync="auditRecordVisible" :visible.sync="auditRecordVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
:title="`${$t('trials:pendingReview:button:auditRecords')}${currentRow.SubjectCode} | ${currentRow.TaskName} | ${currentRow.UserName}`" :title="`${$t('trials:pendingReview:button:auditRecords')}${
currentRow.SubjectCode
} | ${currentRow.TaskName} | ${currentRow.UserName}`"
width="600px" width="600px"
> >
<ChatForm <ChatForm
@ -442,22 +644,25 @@
</BaseContainer> </BaseContainer>
</template> </template>
<script> <script>
import { getPIReadingAuditList } from '@/api/reading' import { getPIReadingAuditList } from "@/api/reading";
import { getTrialCriterionList, getDoctorUserSelectList } from '@/api/trials/reading' import {
import { getTrialSiteSelect } from '@/api/trials' getTrialCriterionList,
import { getToken } from '@/utils/auth' getDoctorUserSelectList,
import BaseContainer from '@/components/BaseContainer' } from "@/api/trials/reading";
import Pagination from '@/components/Pagination' import { getTrialSiteSelect } from "@/api/trials";
import AuditForm from './components/AuditForm' import { getToken } from "@/utils/auth";
import EnrollForm from './components/EnrollForm' import BaseContainer from "@/components/BaseContainer";
import PdForm from './components/PdForm' import Pagination from "@/components/Pagination";
import ChatForm from './components/ChatForm' import AuditForm from "./components/AuditForm";
import EnrollForm from "./components/EnrollForm";
import PdForm from "./components/PdForm";
import ChatForm from "./components/ChatForm";
const searchDataDefault = () => { const searchDataDefault = () => {
return { return {
PageIndex: 1, PageIndex: 1,
PageSize: 20, PageSize: 20,
Asc: true, Asc: true,
SortField: '', SortField: "",
TrialId: null, TrialId: null,
SiteId: null, SiteId: null,
SubjectId: null, SubjectId: null,
@ -468,20 +673,27 @@ const searchDataDefault = () => {
DoctorUserId: null, DoctorUserId: null,
ReadingTaskState: 2, ReadingTaskState: 2,
PIAuditState: null, PIAuditState: null,
IsWaitPIAudit: null IsWaitPIAudit: null,
} };
} };
export default { export default {
name: 'PendingReview', name: "PendingReview",
components: { BaseContainer, Pagination, AuditForm, EnrollForm, PdForm, ChatForm }, components: {
BaseContainer,
Pagination,
AuditForm,
EnrollForm,
PdForm,
ChatForm,
},
data() { data() {
return { return {
searchData: searchDataDefault(), searchData: searchDataDefault(),
list: [], list: [],
total: 0, total: 0,
loading: false, loading: false,
userListLoading: '', userListLoading: "",
trialId: '', trialId: "",
trialCriterionList: [], trialCriterionList: [],
siteOptions: [], siteOptions: [],
DoctorUserList: [], DoctorUserList: [],
@ -492,116 +704,123 @@ export default {
auditRecordVisible: false, auditRecordVisible: false,
otherInfo: {}, otherInfo: {},
openWindow: null, openWindow: null,
TrialReadingCriterionId: '0' TrialReadingCriterionId: "0",
} };
}, },
watch: { watch: {
TrialReadingCriterionId(v) { TrialReadingCriterionId(v) {
if (v) { if (v) {
this.getList() this.getList();
}
} }
}, },
},
mounted() { mounted() {
this.trialId = this.$route.query.trialId this.trialId = this.$route.query.trialId;
this.getTrialCriterionList() this.getTrialCriterionList();
// this.getList() // this.getList()
this.getSite() this.getSite();
this.getDoctorUserSelectList() this.getDoctorUserSelectList();
}, },
methods: { methods: {
getList() { getList() {
this.loading = true this.loading = true;
this.searchData.TrialId = this.trialId this.searchData.TrialId = this.trialId;
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId;
getPIReadingAuditList(this.searchData).then(res => { getPIReadingAuditList(this.searchData)
this.loading = false .then((res) => {
this.QuestionList = res.OtherInfo.OtherObj this.loading = false;
this.QuestionList = res.OtherInfo.OtherObj;
this.$nextTick(() => { this.$nextTick(() => {
setTimeout(() => { setTimeout(() => {
this.list = res.Result.CurrentPageData this.list = res.Result.CurrentPageData;
}, 100) }, 100);
this.total = res.Result.TotalCount this.total = res.Result.TotalCount;
this.otherInfo = res.OtherInfo this.otherInfo = res.OtherInfo;
this.$refs.myTable.doLayout() this.$refs.myTable.doLayout();
});
}) })
}).catch(() => { this.loading = false }) .catch(() => {
this.loading = false;
});
}, },
// //
handleAudit(row) { handleAudit(row) {
this.handleView(row) this.handleView(row);
this.currentRow = { ...row } this.currentRow = { ...row };
this.auditVisible = true this.auditVisible = true;
}, },
// //
handleEnrollConfirm(row) { handleEnrollConfirm(row) {
this.handleView(row) this.handleView(row);
this.currentRow = { ...row } this.currentRow = { ...row };
this.enrollVisible = true this.enrollVisible = true;
}, },
// PD // PD
handlePDConfirm(row) { handlePDConfirm(row) {
this.handleView(row) this.handleView(row);
this.currentRow = { ...row } this.currentRow = { ...row };
this.pdVisible = true this.pdVisible = true;
}, },
handleAuditRecords(row) { handleAuditRecords(row) {
this.currentRow = { ...row } this.currentRow = { ...row };
this.auditRecordVisible = true this.auditRecordVisible = true;
}, },
viewReaingResult() { viewReaingResult() {
if (!this.currentRow) return if (!this.currentRow) return;
this.handleView(this.currentRow) this.handleView(this.currentRow);
}, },
// //
handleView(row) { handleView(row) {
if (this.openWindow) { if (this.openWindow) {
this.openWindow.close() this.openWindow.close();
} }
var token = getToken() var token = getToken();
var path var path;
if (row.ReadingTool === 0) { 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 { } 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}`;
} }
this.openWindow = window.open(path, '_blank') this.openWindow = window.open(path, "_blank");
}, },
getTrialCriterionList() { getTrialCriterionList() {
getTrialCriterionList(this.trialId).then(res => { getTrialCriterionList(this.trialId)
this.trialCriterionList = res.Result .then((res) => {
this.TrialReadingCriterionId = this.trialCriterionList[0].TrialReadingCriterionId this.trialCriterionList = res.Result;
}).catch(() => {}) this.TrialReadingCriterionId =
this.trialCriterionList[0].TrialReadingCriterionId;
})
.catch(() => {});
}, },
getDoctorUserSelectList() { getDoctorUserSelectList() {
getDoctorUserSelectList(this.$route.query.trialId).then(res => { getDoctorUserSelectList(this.$route.query.trialId).then((res) => {
this.DoctorUserList = res.Result this.DoctorUserList = res.Result;
}) });
}, },
getSite() { getSite() {
getTrialSiteSelect(this.trialId).then(res => { getTrialSiteSelect(this.trialId).then((res) => {
this.siteOptions = res.Result this.siteOptions = res.Result;
}) });
}, },
handleSearch() { handleSearch() {
this.searchData.PageIndex = 1 this.searchData.PageIndex = 1;
this.getList() this.getList();
}, },
handleReset() { handleReset() {
this.searchData = searchDataDefault() this.searchData = searchDataDefault();
this.getList() this.getList();
}, },
// //
handleSortChange(column) { handleSortChange(column) {
if (column.order === 'ascending') { if (column.order === "ascending") {
this.searchData.Asc = true this.searchData.Asc = true;
} else { } 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> </script>

View File

@ -224,10 +224,17 @@
:label="$t('common:action:action')" :label="$t('common:action:action')"
width="250" width="250"
fixed="right" fixed="right"
v-if="
hasPermi(['trials:readTask:view']) ||
hasPermi(['trials:readTask:reread']) ||
hasPermi(['trials:readTask:report']) ||
hasPermi(['trials:readTask:auditRecord'])
"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 查看 --> <!-- 查看 -->
<el-button <el-button
v-hasPermi="['trials:readTask:view']"
circle circle
:title="$t('trials:readTask:button:view')" :title="$t('trials:readTask:button:view')"
icon="el-icon-view" icon="el-icon-view"
@ -235,6 +242,7 @@
/> />
<!-- 重阅 --> <!-- 重阅 -->
<el-button <el-button
v-hasPermi="['trials:readTask:reread']"
circle circle
:title="$t('trials:readTask:button:reread')" :title="$t('trials:readTask:button:reread')"
icon="el-icon-collection" icon="el-icon-collection"
@ -242,11 +250,20 @@
/> />
<!-- 下载报告 --> <!-- 下载报告 -->
<el-button <el-button
v-hasPermi="['trials:readTask:report']"
circle circle
:title="$t('trials:reading:button:uploadReport')" :title="$t('trials:reading:button:uploadReport')"
icon="el-icon-collection" icon="el-icon-collection"
@click="handleReadImage(scope.row)" @click="handleReadImage(scope.row)"
/> />
<!-- 审核记录 -->
<el-button
v-hasPermi="['trials:readTask:auditRecord']"
circle
:title="$t('trials:auditRecord:table:auditRecords')"
icon="el-icon-collection"
@click="handleReadImage(scope.row)"
/>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -8,6 +8,7 @@
width="500px" width="500px"
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
append-to-body append-to-body
:before-close="handleCancel"
> >
<el-form <el-form
ref="editVisitForm" ref="editVisitForm"